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
Character sheet
generatedversioned — character_sheet_variantscharacter_sheet_variants.inputHash of the look's selected version, plus the bible version and look version it readTurnaround sheet for one look of a character (#2015): one sheet per look some scene wears, and the character's own sheet is its default look's. The face, the sheet and the voice live on the character. The sheet is the look's, so every sequence that casts the character shares it (#2017). Every look other than the default is drawn from the default look's completed sheet and hashes that sheet's selected version. The default look is drawn from the character's reference photo when it has one (#2254), and hashes its URL. A run holds a claim on its look: an edit to anything the sheet reads revokes it, so the run parks its result instead of landing it.
Counts
The check compares these. Change one upstream and this goes stale.
- Character bible (age, gender, ethnicity, description, consistency tag)
- The look's clothing, and its styling once set. The default look's styling holds what the bible called distinguishing features (#2065)
- The default look's sheet version, on every other look
- talentSheetHash: null, kept so stored digests still verify
- Image model it was rendered with
Does not count
Change these freely. Nothing goes stale.
- The sequence's style (#2017): a sheet is the character's, drawn on a neutral studio backdrop as the bible's rendering says; the palette, grade and mood apply at the shot
- Character name
- Personality and movement
- Voice-only characters never get one
Regenerate this and these go stale
- by selected version — the selected sheet version id, of the look the still's scene picks for the character (#2015)
- by selected version — the sheets ride as video references in both modes, only for characters the motion prompt names (#2012); the manifest stamps the version sent
- via Clip — the selected clip URL
Goes stale when any of these change
- in the input hash
- in the input hash — the look's clothing, and its styling once set. The default look's styling includes the features text a bible version from before #2065 still holds; a sheet stamped then verifies against the two stored parts until the legacy shapes are removed. A look other than the default also hashes the default look's sheet version, and is drawn from that sheet (#2015)
- in the input hash
Connected, but not tracked
- not tracked, by design — checked against the model that rendered the selected version; only an uploaded sheet follows a switch
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.