Computer vision
that runs itself.
Annotate, train, and deploy real-time
vision tools for agents.
Give your agents real-time vision
Label, train and deploy from the app, the CLI or your coding agent.
install
# Once per machine
pip install 'pictograph[cli]'
pictograph login
# Claude Code: the pictograph-cv skill
pictograph agents install-skill
# Any other agent: an AGENTS.md
pictograph init # Upload, then draft labels with SAM3
pictograph images upload-directory shelf ./shelf
pictograph auto-annotate batch shelf \
--images aisle-01.jpg,aisle-02.jpg --classes "cereal box:bbox"
# Review the unsure drafts first
pictograph images list shelf --min-confidence-lt 0.5
# Then export and train
pictograph exports create shelf --name v1 --format coco
pictograph train start shelf v1 \
--pipeline rfdetr_detection --name cereal-detector # Deploy, then call its endpoint
pictograph deployments create cereal-detector
pictograph deployments predict cereal-detector ./aisle-07.jpg \
--token pk_deploy_...
# Or run it locally (pictograph[inference])
pictograph models predict cereal-detector ./aisle-07.jpg --json
# Or over video: track, count, measure
pictograph workflows invoke shelf-counter --file ./aisle-07.mp4 Start from a public dataset
Already labeled, ready to import.
Label in seconds.
Review before you train.
SAM3 drafts labels from a click, a box or a phrase, on one image or thousands.
- Every match
- Box one strawberry; SAM3 finds the rest.
- Your model
- Pre-label with a model you trained.
- Confidence filter
- Show only the least certain drafts.
- Review
- Approve, or send back with a note.
# Export the dataset
pictograph exports create road-signs --name v1 --format coco
# Train on a managed GPU
pictograph train start road-signs v1 \
--pipeline rfdetr_detection --gpu a10g --name signs-detector
# Download the weights
pictograph models download signs-detector --output signs.onnx from pictograph import Client, TrainingRun
client = Client()
# Export, then train on the export
client.exports.create(
dataset_name="road-signs",
name="v1",
format="coco",
)
run: TrainingRun = client.training.create(
dataset_name="road-signs",
export_name="v1",
pipeline_type="rfdetr_detection",
name="signs-detector",
config={"epochs": 30},
) # waits for the run
print(run.status, run.model_id) Train for your exact task
Pick a model and a GPU. No conversion scripts, no servers.
- Detection
- YOLOX and RF-DETR.
- Segmentation
- RF-DETR instances, Segformer masks.
- Keypoints
- Multi-instance pose with RF-DETR.
- Classification
- ResNet, EfficientNet, ConvNeXt, ViT.
# Deploy (prints its token)
pictograph deployments create signs-detector --gpu t4
# Call it
pictograph deployments predict signs-detector ./frame.jpg \
--token pk_deploy_...
# Or run on-device (pictograph[inference])
pictograph models predict signs-detector ./frame.jpg --json from pictograph import Client, DeploymentClient, CreatedDeployment
client = Client()
# Deploy the model
created: CreatedDeployment = client.deployments.create(
model="signs-detector",
gpu_type="t4",
)
# Call it
endpoint = DeploymentClient(
endpoint=created.deployment.endpoint_url,
api_key=created.auth_token,
)
print(endpoint.infer(image="./frame.jpg").predictions) Deploy to a live endpoint
One command, or run on-device instead.
- Endpoint
- A stable, authenticated /predict URL.
- Compute
- CPU, T4, L4 or A100.
- Billing
- By uptime; pause anytime.
- Your hardware
- ONNX, TensorRT, ExecuTorch, PyTorch.
# Run it over a video; waits for the counts
pictograph workflows invoke people-counter --file ./lobby.mp4
# Or over a dataset folder, in the background
pictograph workflows invoke people-counter \
--dataset lobby-cams --directory /north --no-wait from pictograph import Client
client = Client()
# Run it over a video, then read the counts
run = client.workflows.invoke(
workflow="people-counter",
source="./lobby.mp4",
wait=True,
)
print(run.step_results) # counts, dwell, occupancy Run pipelines
over images and video
Build once, then run by name from your app or agent.
- Visual builder
- Source, model, steps and sinks.
- Tracking
- One ID per object, across frames.
- Analytics
- Line crossings, dwell and occupancy.
- Delivery
- Webhooks, or labels back to a dataset.
Everything else, built in
Import what you have V7, Roboflow or your own labeled files. Video to frames Upload a video, label its frames. Tile and augment Tile small objects, augment small sets. Visual search Similar images, tags and near-duplicates. Model evaluation Precision, recall, mAP and the images it gets wrong. Team workspaces Roles, invites and task assignment. Export to 12 formats COCO, YOLO, Pascal VOC, CVAT, Darwin V7 and more. Webhooks Signed, retried events you can replay.
Build your first vision tool
$5 of free compute every month. No card required.