Instant drafts
draft is the deterministic fast path: starter + brand + copy → a rendered, measured video in
one call, with no deliberation in the middle.
cleya draft --starter promo-hero --brand brand.json \
--copy '{"headline":"Ship it {accent:Friday}","tagline":"in one command","stat":42}' \
--output draft.mp4
The copy map
--copy takes { layerId: text | number }, either inline or as a file path. Types matter:
strings set text, numbers set counter targets and bar values. Children inside a stack layer are
reachable by id.
Inline spans work in copy — {accent:Friday} paints that run in the brand accent, {mono:v2}
sets it in the mono face.
To find the ids and the knobs worth turning:
cleya starters --name promo-hero
What comes back
{
"success": true,
"output": "draft.mp4",
"starter": "promo-hero",
"applied": ["headline", "tagline", "stat"],
"frames": 300,
"qa": {
"contrast": "pass — 4 text regions checked, 0 findings",
"brand_score": 100,
"brand_ok": true
}
}
applied tells you which ids landed; any id that did not match comes back under unknown_ids
rather than failing silently.
Variants
--format og,square,story renders every size from the same draft. --width / --height
override the render size — though measurements say full-resolution variants usually beat
draft-resolution ones on both time and simplicity, because per-frame overhead dominates at GPU
speeds.
When not to use it
draft is for standard briefs. When a piece genuinely needs bespoke motion, start from a starter
and adapt the spec, or drop to raw HTML with the GSAP runtime.