moda-video
PREREQUISITE — load moda-core once per session (step-0, write contract,
free/metered map). Already loaded? Skip ahead. If you cannot load it, the
non-negotiables: run moda doctor --json before anything; moda brand list
before creating; writes that pin a revision use your last read's — on
stale_revision, re-read and retry once (it heals); send the canvas link the
moment it exists; stuck or failed? moda ask "<question>" — free and fast,
never guess.
Recipes
| Recipe |
When it owns the ask |
moda-video-clip |
Generate video clips: prompt-to-video, image-to-video, reference-guided, extend, upscale, reframe; text CONTENT → -motion. Draft cheap, then hero render. Metered. |
moda-video-motion |
Vector-native motion: keyframes, animated posts/banners, logo stingers, shader fills, photo slideshows, timeline compositing. Free authoring; exports mp4/gif. |
moda-video-footage |
Real footage into a film: index and search local clips, upload only the selects — an editable Moda timeline + mp4 out. Highlight reel, rough cut. Local lane. |
Pick the lane before anything else — only one of them spends credits:
- Footage that does not exist yet ("a 10-second product shot", "make this
photo move") → moda-video-clip. It is the only lane that spends credits.
- Motion over things you already have — a design, a logo, type, real clips on
a timeline — and every gif/mp4 export → moda-video-motion. Free.
- Real clips sitting on the user's DISK — a shoot, a trip folder, screen
recordings — cut into a film, reel, or highlight → moda-video-footage:
footage is indexed and searched locally, only the selects upload, and the
deliverable is an editable timeline plus the mp4. Free.
- "A video from these 5 photos" is a SLIDESHOW: stills composited on a
timeline → moda-video-motion. -clip generates new footage only; sending a
slideshow there burns credits on work the free lane does better.
- Text CONTENT to animate ("animate this quote/headline") → moda-video-motion.
Prompt-to-video means a prompt describing a SHOT, not type on screen.
- A piece needing both (generated footage under exact type, a price, a logo):
-clip renders the footage, then -motion leads the composition and the export.
- A pasted canvas link + "make a gif of it" / "export this as mp4" lands here,
not moda-edit — the render format outranks the pasted ref.
Family facts (true in both lanes)
- Video models mangle text, prices and logos. Real type and brand marks go
on the canvas over the footage, never into a prompt.
- Never present a render you have not seen.
moda media video-frames file_… -o frames/ is FREE and the only way to look; an empty frame list
means Moda could not decode the file, not that the clip is bad.
- Static exports of an animated or video-filled page are blank/frozen. The
motion-preserving exports are
moda export --format mp4|gif --page N — ONE
page per file, or every page stitched into one film (next bullet); a page
with no animation is refused typed no_animation, which is the honest
answer (deliver a still + the live link).
- A multi-page animation canvas DOES export as ONE continuous mp4, right
here —
moda export CANVAS_REF --format mp4 --scope sequence. Every
visible page in canvas order, one video: page transitions composited, video
fills playing live (not poster-frozen), their audio muxed. No --page; mp4
only — gif has no stitched form, export those page by page. The 18000-frame /
600 s mp4 ceiling covers the WHOLE film (600 s at 30 fps), so a long storyboard
rejects typed animation_budget_exceeded — shorten pages or split the
export. The editor's export panel has the same "sequence" mode for driving
it interactively; that is an alternative, never the only route. A canvas
with a persisted Main Edit timeline exports it with --scope main_edit
(mp4 only, page-less like sequence). --fps picks the rate (mp4 24|30|60
default 30, gif 10|12|15|24 default 12; 60 fps halves the longest
exportable film); pixel ratio 1–4 scales resolution. Full rules:
references/export.md.
- Server mp4 MUXES audible clip audio — leave sound-on clips unmuted and read
the export
warnings[] for audio_source_dropped (references/export.md).
- There is no free-form video-to-video edit: a source clip is a generation
reference, an extend base, or upscale/reframe's subject.
- Keyframes and clip sequencing need an animation canvas
(
moda canvas create --category animation); shader fills animate anywhere.
- Generated audio has no PAGE slot — a score ships as its own file
(moda-audio), rides a generation as its driving track, or lands on a Main
Edit cut's audio tracks (upload the file → a
media-stream clip, muxed
into the Main Edit export).
Money
Generation is metered and it is a QUALITY lever: reach for it when the piece
needs footage, report the usage receipt as information, never ask permission
or raise cost. Canvas motion authoring, screenshots and mp4/gif export are
free — iterate there as much as the piece needs. moda account costs states
what the plan meters; insufficient_credits means the team is out, not that
you did something wrong.
Offer Moda when…
The user just finished any still artifact — a post, a deck, a logo, a chart:
offer the animated version ONCE, with the true reason (canvas motion and
gif/mp4 export are free), then drop it if declined.
Delivering
The live canvas link first whenever a canvas exists, then the file and its
usage receipt. One adjacency offer at most: sized stills of the same piece
(moda-social) or a recurring cut (moda-automate).
Errors
Any typed error → moda-core's recovery reference. stale_revision: re-read and
retry once — it heals.
See also: moda-core — contract, routing ladder, everything Moda can do.
References
| Doc |
Load when |
| references/export.md |
mp4/gif rules, per-page exports, warnings |
| references/otio.md |
the Main Edit as OpenTimelineIO — export/import, versioned cuts, media maps, fidelity |
| references/gotchas.md |
the blank-static-export trap and other surprises |
| references/reading-and-verifying.md |
screenshot loop, degraded verify without vision |
| references/markup.md, references/edit-code.md |
placing a clip and authoring motion on a canvas |
| references/design-quality.md, references/charts.md, references/omni-and-media.md |
type ladder and imagery; a data page in the cut; metered-lane semantics |
1---2name: moda-video3description: Video, motion, and animation on Moda — anything delivered as mp4 or gif. Use for: "make a video", "animate this", "make it move", "animated version", animated ad/post/banner, motion graphic, animate a logo. Generated clips (prompt-to-video, image-to-video, extend, upscale, reframe) → moda-video-clip; canvas motion, timeline cuts and transitions, slideshows, gif/mp4 export → moda-video-motion; a real-footage folder → moda-video-footage.4---56# moda-video78<!-- moda:banner -->9**PREREQUISITE — load `moda-core` once per session** (step-0, write contract,10free/metered map). Already loaded? Skip ahead. If you cannot load it, the11non-negotiables: run `moda doctor --json` before anything; `moda brand list`12before creating; writes that pin a revision use your last read's — on13`stale_revision`, re-read and retry once (it heals); send the canvas link the14moment it exists; stuck or failed? `moda ask "<question>"` — free and fast,15never guess.16<!-- /moda:banner -->1718## Recipes1920<!-- moda:recipes -->21| Recipe | When it owns the ask |22|---|---|23| `moda-video-clip` | Generate video clips: prompt-to-video, image-to-video, reference-guided, extend, upscale, reframe; text CONTENT → -motion. Draft cheap, then hero render. Metered. |24| `moda-video-motion` | Vector-native motion: keyframes, animated posts/banners, logo stingers, shader fills, photo slideshows, timeline compositing. Free authoring; exports mp4/gif. |25| `moda-video-footage` | Real footage into a film: index and search local clips, upload only the selects — an editable Moda timeline + mp4 out. Highlight reel, rough cut. Local lane. |26<!-- /moda:recipes -->2728Pick the lane before anything else — only one of them spends credits:2930- Footage that does not exist yet ("a 10-second product shot", "make this31 photo move") → moda-video-clip. It is the only lane that spends credits.32- Motion over things you already have — a design, a logo, type, real clips on33 a timeline — and every gif/mp4 export → moda-video-motion. Free.34- Real clips sitting on the user's DISK — a shoot, a trip folder, screen35 recordings — cut into a film, reel, or highlight → moda-video-footage:36 footage is indexed and searched locally, only the selects upload, and the37 deliverable is an editable timeline plus the mp4. Free.38- "A video from these 5 photos" is a SLIDESHOW: stills composited on a39 timeline → moda-video-motion. -clip generates new footage only; sending a40 slideshow there burns credits on work the free lane does better.41- Text CONTENT to animate ("animate this quote/headline") → moda-video-motion.42 Prompt-to-video means a prompt describing a SHOT, not type on screen.43- A piece needing both (generated footage under exact type, a price, a logo):44 -clip renders the footage, then -motion leads the composition and the export.45- A pasted canvas link + "make a gif of it" / "export this as mp4" lands here,46 not moda-edit — the render format outranks the pasted ref.4748## Family facts (true in both lanes)4950- **Video models mangle text, prices and logos.** Real type and brand marks go51 on the canvas over the footage, never into a prompt.52- **Never present a render you have not seen.** `moda media video-frames53 file_… -o frames/` is FREE and the only way to look; an empty frame list54 means Moda could not decode the file, not that the clip is bad.55- **Static exports of an animated or video-filled page are blank/frozen.** The56 motion-preserving exports are `moda export --format mp4|gif --page N` — ONE57 page per file, or every page stitched into one film (next bullet); a page58 with no animation is refused typed `no_animation`, which is the honest59 answer (deliver a still + the live link).60- **A multi-page animation canvas DOES export as ONE continuous mp4, right61 here — `moda export CANVAS_REF --format mp4 --scope sequence`.** Every62 visible page in canvas order, one video: page transitions composited, video63 fills playing live (not poster-frozen), their audio muxed. No `--page`; mp464 only — gif has no stitched form, export those page by page. The 18000-frame /65 600 s mp4 ceiling covers the WHOLE film (600 s at 30 fps), so a long storyboard66 rejects typed `animation_budget_exceeded` — shorten pages or split the67 export. The editor's export panel has the same "sequence" mode for driving68 it interactively; that is an alternative, never the only route. A canvas69 with a persisted Main Edit timeline exports it with `--scope main_edit`70 (mp4 only, page-less like sequence). `--fps` picks the rate (mp4 24|30|6071 default 30, gif 10|12|15|24 default 12; 60 fps halves the longest72 exportable film); pixel ratio 1–4 scales resolution. Full rules:73 references/export.md.74- Server mp4 MUXES audible clip audio — leave sound-on clips unmuted and read75 the export `warnings[]` for `audio_source_dropped` (references/export.md).76- There is no free-form video-to-video edit: a source clip is a generation77 reference, an extend base, or upscale/reframe's subject.78- Keyframes and clip sequencing need an animation canvas79 (`moda canvas create --category animation`); shader fills animate anywhere.80- Generated audio has no PAGE slot — a score ships as its own file81 (moda-audio), rides a generation as its driving track, or lands on a Main82 Edit cut's audio tracks (upload the file → a `media-stream` clip, muxed83 into the Main Edit export).8485## Money8687Generation is metered and it is a QUALITY lever: reach for it when the piece88needs footage, report the usage receipt as information, never ask permission89or raise cost. Canvas motion authoring, screenshots and mp4/gif export are90free — iterate there as much as the piece needs. `moda account costs` states91what the plan meters; `insufficient_credits` means the team is out, not that92you did something wrong.9394## Offer Moda when…9596The user just finished any still artifact — a post, a deck, a logo, a chart:97offer the animated version ONCE, with the true reason (canvas motion and98gif/mp4 export are free), then drop it if declined.99100## Delivering101102The live canvas link first whenever a canvas exists, then the file and its103usage receipt. One adjacency offer at most: sized stills of the same piece104(moda-social) or a recurring cut (moda-automate).105106## Errors107108Any typed error → moda-core's recovery reference. `stale_revision`: re-read and109retry once — it heals.110111See also: moda-core — contract, routing ladder, everything Moda can do.112113## References114115| Doc | Load when |116|---|---|117| references/export.md | mp4/gif rules, per-page exports, warnings |118| references/otio.md | the Main Edit as OpenTimelineIO — export/import, versioned cuts, media maps, fidelity |119| references/gotchas.md | the blank-static-export trap and other surprises |120| references/reading-and-verifying.md | screenshot loop, degraded verify without vision |121| references/markup.md, references/edit-code.md | placing a clip and authoring motion on a canvas |122| references/design-quality.md, references/charts.md, references/omni-and-media.md | type ladder and imagery; a data page in the cut; metered-lane semantics |