Developer Guide
Dependency graph
Interactive map of the generation graph: pick anything you can edit and see which prompts, sheets, stills and clips go stale.
Every generated artifact stores a hash of the inputs it was made from. Staleness is never a flag we set: on every read we recompute the hash from the current inputs and compare. A mismatch is stale. A row with no stored hash is untracked and never stale. Versioned things (green border) keep every generation as a row and a pointer picks one. Renders record which version of a prompt or sheet they used, so selecting a different version is what makes them stale, not editing the text.
- tracked
- not tracked — a gap
- not tracked, by design
- seeded once, then yours
- versioned
- optional
- goes stale
- makes it stale
Motion prompt
generatedversioned — shot_prompt_versionsshot_prompt_versions.inputHashThe text the clip is rendered from. Assembled from the shot spec on a multi-shot scene, the same as the visual prompt.
Counts
The check compares these. Change one upstream and this goes stale.
- Everything the visual prompt counts
- Character personality and movement
- The shot's own lines, in place of the script's
- The rendered still it was shown (start-frame mode)
- Start-frame mode
- Which characters are voice-only
Does not count
Change these freely. Nothing goes stale.
- Duration
- Names and titles
- Voice ids (they bind on the clip, like sheets on the still)
- Which voice element is bound to a line
- The scenes before and after, as for the visual prompt
Regenerate this and these go stale
- by selected version — the manifest records the prompt version; a token rename writes a new version, so it re-stales the clip
- via Clip — the selected clip URL
Goes stale when any of these change
- in the input hash
- in the input hash — only a character this prompt names. An unwritten prompt reads the scene continuity tags (#2012)
- in the input hash — only a location this prompt names, else the scene slugline. An unwritten prompt also reads the scene extract (#2012)
- in the input hash — an element this prompt names. A motion prompt with a start frame adds the scene-tagged elements too (#2012)
- in the input hash
- in the input hash
- in the input hash — the shot's lines replace the script's in what the LLM reads and the hash covers
- in the input hash — each mode uses a different prompt template
Connected, but not tracked
- not tracked, by design — checked against the model that wrote the prompt; a switch applies to the next generation
What "Update all" regenerates
The depth picker is cumulative. Each rung includes the ones above it, and no rung ever creates an artifact that does not exist yet.
- 1.Prompts only — Rewrites stale visual and motion prompts. Nothing renders.
- 2.Prompts + images — Also re-renders a still that is stale, or whose prompt was just rewritten. Never renders a first still.
- 3.Prompts, images + dialogue — Also re-records a dialogue reading whose voice or lines moved. Never a first recording. Video stays for the next tick so the new take can be reviewed.
- 4.Prompts, images, dialogue + videos — Also re-renders a clip whose prompt, still, or dialogue changed in this run, or whose manifest already diverged. Never renders a first clip.
- 5.Everything, incl. music — Also rewrites a stale music prompt, then the track if one exists. Never a first track.