Your first render
Five commands, start to finish. Nothing here needs a model.
1. Take a starter
Starters are contract-tested scene skeletons. Every one must compile with zero errors and zero warnings against the neutral brand or the build fails — so the floor is guaranteed before your copy lands in it.
cleya starters # list them, and when to use each
cleya starters --name promo-hero --copy-to ./promo
That writes promo-hero.scene.json and a neutral starter-brand.json into ./promo.
2. Validate before you render
cleya render --scene promo/promo-hero.scene.json --brand promo/starter-brand.json --check
--check compiles and validates the spec without drawing a frame — about 50 milliseconds. It
reports structural errors and warns about dead air (stretches where nothing moves).
3. Render
cleya render --scene promo/promo-hero.scene.json \
--brand promo/starter-brand.json \
--output promo.mp4
Iterate cheaply while you work:
--at 3.2renders a single PNG frame at that time--previewwrites a labelled contact sheet of six frames
Both are how an agent "watches" a video without watching it.
4. Measure what came out
cleya contrast --input promo.mp4 --time 3.2
cleya align --input promo.mp4 --time 3.2
cleya brand_check --input promo.mp4 --time 3.2 --brand promo/starter-brand.json
These read the rendered pixels — not the spec. contrast OCRs each text box and splits strokes
from ground before measuring, align flags edges and centres that are almost aligned, and
brand_check scores dominant colours against the brand palette by ΔE.
5. Correct, deterministically
cleya edit --scene promo/promo-hero.scene.json \
--op '{"op":"center","layer":"headline"}' --verify
edit validates before it writes, so an edit can never leave a broken scene. --verify
probe-renders the result and re-runs the instruments, so the change arrives measured.
Layer ids differ per starter — cleya starters --name promo-hero lists them along with the knobs
worth turning.
The shortcut
Once you know which starter you want, draft collapses steps 1–4 into one call:
cleya draft --starter promo-hero --brand brand.json \
--copy '{"headline":"Ship it {accent:Friday}","tagline":"in one command","stat":42}' \
--output draft.mp4
It renders, then returns contrast and brand readings beside the file. See Instant drafts.