The hosted API is not open yet. Everything on this page runs locally with the CLI. No account needed.
Install
One binary for macOS Apple Silicon and Linux x86_64. Media tools are downloaded and checksum-verified on first use.
curl -fsSL https://github.com/cerul-ai/cerul-robotics/releases/latest/download/cerul-robotics-installer.sh | sh cerul-robotics --version
Your first episode
Export your model key in the environment (Gemini by default), preview, then run.
# preview: no files written, no model calls cerul-robotics annotate ./dataset --only 0 --semantic --dry-run --json # label, then watch the result cerul-robotics annotate ./dataset --only 0 --semantic --json cerul-robotics render ./dataset/.cerul/episodes/0/annotations.json --out ./review.mp4
Add --hands --semantic none to track human hands locally without a key.
LeRobot writeback
Reads v3.0 and v3.1. Writes subtasks to v3.1 language columns. Prefer a new copy:
cerul-robotics annotate ./dataset --semantic subtask --write-lerobot --out ./dataset-labeled
Output files
annotations.json | Every label and hand frame for the episode |
summary.md | A readable table of the same labels |
semantic.<type>.jsonl | Internal sidecars with provenance; authoritative |
review.mp4 | From render; never overwrites an existing file |
JSON and events
--json prints one final object on stdout and NDJSON progress on stderr, line by line:
stderr {"event":"annotation_progress","episode":"6774a70fd1f870ab/0","done":220,"total":221} {"event":"published","annotation":"semantic.subtask","records":4} stdout {"modules":[{"annotation":"semantic.subtask","complete":true,"records":4}],"partial":false}
Exit codes
0Done
3Unsupported capability
5Cancelled; finished work kept
6Partial; rerun to finish
Configuration
Later sources win:
~/.cerul-robotics/config.toml- project
cerul-robotics.toml - environment variables
--set section.field=value
Use --workspace ~/.cerul to read labels made by earlier cerul annotate versions.
HOSTED API · NOT OPEN
Want this as a service?
A hosted endpoint will reuse the same output files and JSON. Until then, we can label footage for you and deliver the files.
Get notified