One wheel contains the API, CLI, MCP server, and compiled browser application. Nothing else must be downloaded afterward, and there is no separate frontend to serve.
| Python | 3.12 or newer |
| ffmpeg | only for video - see below |
| Disk | your images, plus a copy: assets are content-addressed into the workspace |
Nothing else. No database server, no Node, no Docker. The metadata lives in one SQLite file inside the workspace, and the pixels live beside it.
VisionSet is not on PyPI yet - that lands with the first beta. Until then, install from a built wheel or straight from the repository:
# from the repository, into an isolated environment (recommended)
uv tool install "git+https://github.com/Robomous/VisionSet"
# or into the current environment
pip install "git+https://github.com/Robomous/VisionSet"To build the wheel yourself - which is what CI does, and what publishing will ship:
git clone https://github.com/Robomous/VisionSet && cd VisionSet
uv sync && pnpm install
bash scripts/build_dist.sh # pnpm -r build → bundle:static → uv build
pip install dist/visionset-*.whlThat order matters and the script enforces it: the compiled UI is copied into the package immediately before the wheel is built, so a wheel built out of order installs cleanly and then serves nothing. See CONTRIBUTING.md.
visionset --version # the version, and nothing else
visionset format list # the formats this installation can writeformat list is the more useful of the two: it reads installed entry-point metadata, so a
non-empty answer proves the wheel is properly installed rather than merely importable. Run it
for the current set rather than trusting a list written down somewhere - third-party
distributions register into the same entry-point group, so what a given installation can write
is a property of that installation.
Only for video. Images need nothing. VisionSet shells out to ffmpeg and ffprobe to read a
clip's metadata and to cut it into frames, so a source registered from a .mp4 needs the binary
on the PATH:
brew install ffmpeg # macOS
sudo apt-get install -y ffmpeg # Debian / UbuntuA missing binary is reported as MediaToolUnavailable with the same hint, at the moment a video
is registered rather than at import - so a machine without ffmpeg still opens workspaces, ingests
images, annotates, publishes and exports.
Only for local inference connections, and only when you have made one. VisionSet's
auto-labeling feature is always present; what is optional is the runtime that executes a model
here:
pip install "visionset[local-inference]"That brings torch, torchvision, transformers, accelerate and huggingface_hub - roughly two
gigabytes, most of it CUDA - which is exactly why it is not in the base install. Without it you can still create a
local connection, list it, and see what it is configured for; what you cannot do is fetch its
weights or ask it to predict. Both refusals name the command above rather than saying
"unavailable", the way a missing ffmpeg does.
Installing it downloads no model. Weights arrive when you run visionset inference download,
never at install time, never at startup, and never on the way to anything else. They land inside
the workspace, under models/, so a workspace you copy to another machine takes its model with
it. See inference.md.
Neither is needed to use VisionSet; both are what the project's own tests use to prove an export is loadable by the tool it is aimed at.
uv sync --group yolo # ultralytics — brings torch, roughly two gigabytes
uv sync --group coco # pycocotoolsThe yolo group has a wart worth knowing before you install it into a checkout: the
ultralytics wheel ships a top-level tests package, which shadows this repository's own
tests/ directory. Run the format smoke tests and then uv sync again; see
CONTRIBUTING.md.
Nowhere you did not name. A workspace is a directory you create:
visionset init ~/datasets/road-signsInside it: visionset.db (metadata) and blobs/ (content-addressed pixels), plus three
directories that appear only once something puts them there — uploads/ for bytes sent to the
REST API, exports/ for what an export wrote, and models/ for weights you fetched. Nothing is
uploaded, nothing phones home, and no path outside that directory is written except where you
point an export. workspaces.md has the whole layout.
init is the only command that creates a workspace, and it refuses a directory that already holds
something. Every other command finds one - --workspace, then $VISIONSET_WORKSPACE, then the
nearest workspace at or above the working directory. The full precedence, and why only the last of
those searches upward, is in workspaces.md.
- tutorial.md - a first dataset, end to end, in about half an hour.
- cli.md - the whole cycle from a terminal.
- mcp.md - pointing an agent at a workspace.