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.

+77

COCO-5k

3
Pictograph Research Pictograph Research
5,000 images · 80 classes Updated 3mo ago

Explore datasets and models

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.
Auto-annotation
# 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.
Training
# 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.
Deployments
# 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.
Workflows

Build your first vision tool

$5 of free compute every month. No card required.