**[▶ Watch the 1-minute demo](docs/media/rev2d-demo.mp4)** · English headlines, Korean captions
The human opens the editor; the agent edits the file and drives the view from its own terminal (or
over MCP). These are the commands from the demo:
```sh
# the human
rev2d edit hero.r2d.json # http://127.0.0.1:4777
# the agent
rev2d ops hero.r2d.json --op '{"op":"recolor","parts":["hairBack","hairBackStrands","hairSideR","hairSideStrandR","hairSideL","hairSideStrandL","hairFront","hairFrontStrands","hairFrontShine"],"hsl":{"h":-120,"s":0.25,"l":0.05}}'
rev2d editor command --params AngleX=25,EyeLOpen=0,MouthOpen=0.6
rev2d editor command --play talk
rev2d editor screenshot -o out/seen.png # a render of exactly what the human sees
rev2d editor state # open model, parameters, time, layers, selection, view
rev2d editor command --message "Hair is teal now, pose set, talk played."
rev2d editor command --open models/cat.r2d.json # switch the editor to another model in its workspace
```
- **The AI sees** what you see: `editor state` (parameters including the editor's own physics
results and the sliders you pinned, time, animation layers, selection, visible region) and
`editor screenshot` (rendered by the same renderer as `rev2d render`).
- **The AI drives** the view: parameters, play / pause / seek, animation layers, selection,
overlays, focus, messages, and which file is open.
- **No lost edits.** If the agent writes the file while you have unsaved edits, your next save is
refused (HTTP 409) and you choose to reload its version or overwrite it.
### Try these prompts
> Make a cat mascot with rev2d: a head turn, a blink and tail physics. Verify it with sheets and
> `analyze`.
> Create `cat.r2d.json` from the blank template and give it a blink: an `EyeOpen` parameter bound
> to the eye, and a 0.4 s `blink` animation. Before you say it's done, show me a sweep sheet, an
> animation sheet and the `inspect` numbers for the closed eye.
> I have the editor open on `hana.r2d.json`. Make her hair teal, turn her head to AngleX 25 and
> play `talk` so I can watch, then take a screenshot of what I see and tell me what changed.
> Put a small hat on hana that stays on her head when she turns (use the `follow` op). Prove it
> with an AngleX × AngleY sheet and `inspect --point` numbers for the hat's anchor.
> Analyze every animation in `robot-arm.r2d.json` for IK reach, physics clamping and loop seams.
> Fix what you find with ops, and show me before/after sheets.
> Turn `my-character.png` into an avatar with the `rev2d avatar ...` commands (read `rev2d docs avatar` first).
> Show me the review sheets and tell me which landmarks you are least sure about.
### Why it works
**Diagnostics an agent can act on.** Each problem names the exact place in the file, a stable code
and the fix. This is real output for a model with two typos:
```console
$ rev2d validate blob.r2d.json
FAIL blob.r2d.json
error /parts/0/parent unknown-parent unknown parent "bodyWarpp" (must be a bone or warp id) → did you mean "bodyWarp"?
error /bindings/1/target invalid-target bone has no property "scaleYY" → did you mean "scaleY"?
2 errors, 0 warnings
```
**Deterministic renders.** No GPU, no browser, no clock, no randomness: the same model and inputs
give byte-identical PNGs and GIFs (the test suite checks this). A before/after `rev2d diff` means
something, and a render is evidence rather than a guess.
**Numbers, not just pixels.** Looking is expensive and vague; numbers are cheap and exact.
`AngleX > 0` should turn the face toward the screen right, and `inspect` confirms it: at
`--param AngleX=30` the mouth center of the hana example moves from `[256, 321.9]` to
`[286.9, 322]`. `analyze` reads a whole animation without watching it. On hana's idle loop it
reports that no hair physics output is ever clamped, that the loop seam is 0% different, and which
parts leave the canvas.
## Avatar from one illustration
Rigging a character usually starts with a layered drawing. Rev2D can also start from **one flat
picture**, ideally a front-facing bust on a transparent background. Someone places landmarks on it
(the head, the eyes, the mouth, the hair strands, the body), and Rev2D cuts the picture into layers
along them, fills in what was behind each layer, and generates an ordinary Rev2D model. The model
blinks, talks, turns and tilts its head, breathes and sways its hair, and it comes with physics,
six animations (`idle`, `blink`, `talk`, `nod`, `look_around`, `sweep`) and review sheets.
![]()
![]() hana: a Live2D-style bust made only of vector parts, with path-morph eyes and mouth, iris masks and hair physics |
![]() hana, head turn: the 3×3 AngleX × AngleY warp keyform grid, in one sheet call |
![]() robot-arm: a Spine-style skeleton with two-bone IK (softness), a skinned boot and cable, and cable physics |
![]() minimal: the smallest complete rig, shown with warp, bone, label and grid overlays |
![]() slime: squash & stretch with warp keyforms, blend modes, and takeoff / land events captioned under their frames |
|