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
Visual prompt
generatedversioned — frame_prompt_versionsframe_prompt_versions.inputHashThe text the still is rendered from. A scene of one shot gets it from the model; every clip of a multi-shot scene has it assembled from the shot spec.
Counts
The check compares these. Change one upstream and this goes stale.
- Scene extract, heading, time of day, story beat
- Style config
- Character, location and element bibles this prompt's own text names, or the scene continuity tags while it is unwritten (#2012). Stamped from the text being written. As cast, so a talent match moves nothing afterwards
- The shot's framing and start state, on a multi-shot scene
- Aspect ratio
- Script model it was written with
Does not count
Change these freely. Nothing goes stale.
- Duration
- Names and titles
- The still it produces
- A voice-only character's look: heard, never framed, so the still prompt never sees it
- The scenes before and after, which the model reads for continuity: hashing them would re-stale three scenes per edit and every scene on a reorder
Regenerate this and these go stale
- in the input hash — the selected prompt text; a tile picked from the 3×3 grid carries the prompt the grid was drawn from
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
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.