◆ FORGE · concepts
The forge has one unit of work (the campaign) and one rule underneath
everything: nothing is fabricated, and nothing advances on your behalf. This
page is the mental model behind the quickstart’s calls.
Campaign
A campaign is one walk of a dataset through the pipeline: an owner-scoped record tying the source dataset, its health report, the sampled episodes, the transform plan, the run jobs, your review verdicts, and the delivery state.- Per-user tenancy. Campaigns belong to the account that created them.
A campaign id that isn’t yours reads as
404: the API never confirms a foreign resource exists (see errors). - Monotonic stage.
stageis the furthest step you’ve reached; it never rolls back. You can leave and re-enter anywhere; re-saving an earlier step doesn’t undo a later one. - Three ways to start one: open a curated sample,
upload a LeRobot dataset, or point at a Hugging Face
repo_id.
The six-step spine
Target class and eligibility
Health detects the dataset’s classes and measures everything against one target class (the engine’s certified default, or one you switch to, switching recomputes health for that class). Per episode, eligibility for new-trajectory work requires a clean grasp → carry → place arc:- on-target class: off-target episodes are excluded outright;
- grasp on the certified arm: the wrong arm is an exclusion, with the arm named;
- a real release: no place event means no splice point;
- travel above the jitter threshold: a “release” that barely moved is noise, not a placement.
grasp_frame, splice_frame (the release),
pre_release_frame, travel_deg, are yours to read per episode at
…/episodes/{ep}/actions.json, overlaid on the native action stream.
The miner
New trajectories are head × tail splices: episode A’s scene, reach, and grasp continued with episode B’s carry and place. The miner scores every eligible (A, B) pair of the target class on three axes:- divergence: how differently the two post-grasp arm paths move (RMS joint distance over time-resampled paths). Candidates must sit inside the engine’s divergence band: different enough to be a new behavior, close enough that the render model obeys.
- end_divergence: how differently the two episodes place (distance between placement configurations). Within the band, pairs are ranked by this: it’s the visible drama.
- n_blend: seam feasibility: the minimum blend frames so no action dimension jumps faster than the dataset’s own 99th-percentile step.
partners records are full pair dicts you POST back verbatim.
Machine verdict and gates
Every rendered candidate is scored by an action-consistency verifier: does the video’s implied motion match the trajectory that was asked for? Three readings, each against a per-engine calibrated threshold:
Two more checks ride along: a task gate (did the pick-and-place actually
complete?) and an identity gate (zero frames of object-identity drift).
The machine verdict is
accept only when all five hold. A task check that
can’t run abstains, recorded as not-run, never counted as a failure. A
render that fails outright is rejected with the reason recorded; garbage is
never gated. Thresholds and readings are on every episode and in its
delivered certificate.
Confirm, overrule, and the kept set
Verdicts exist only for graded episodes (machineaccept or reject);
reviewing an ungraded one returns 409. Two verbs:
- confirm: you agree with the machine;
- overrule: you flip it: keeping a machine-reject, or dropping a machine-accept. Overrules are recorded as yours, with a timestamp, on the campaign record (the certificate carries the machine’s readings).
Delivery and the billed set
Deliver freezes the kept set at request time, drops any episode whose render artifacts are no longer on disk (billing you for a phantom would be worse than a409), then debits 1 credit per kept episode that has never been billed
on this campaign, atomically, before anything is exported. The paid set
persists on the campaign as billed_episodes, so re-delivering after new
keeps charges only the additions, and nothing ever bills twice. The archive
contains exactly the billed set: per-view mp4s, action streams at both fps,
and a provenance certificate per episode. Full rules in
billing.
Playground refs: wb/<campaign>/<episode>
A described change in the playground becomes a real
scenario batch bound to its exact source episode by reference:
wb/ marks a workbench campaign episode; the campaign id scopes it to you;
the trailing integer is the episode index. Batches carrying a wb/ ref render
with the campaign’s engine and verify like any campaign run.
What runs today
Honestly, per transform:- New trajectories: live end to end: mine, compose, render, verify, deliver. This is the engine both playground verbs use.
- Object swap: preview. The shared action verifier applies, but the general video swap backend isn’t connected to the workbench yet; the Transform step shows the exact readiness steps.
- Environment restyle: blocked on a fidelity floor: on our reference batch, restyled output scored below the verifier’s acceptance line. We show that reading instead of shipping it.

