Take extension: Shots past 15 s by seamless continuation #140
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
needs-info
needs-triage
question
ready-for-agent
ready-for-human
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crowmaki/ai-studio#140
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem Statement
H3 renders at most 15 seconds (362 frames) in one generation, so today a Shot can be at most 15 seconds. A filmmaker who wants a long, unbroken take has to split the Shot into several Shots of one Setup, and each part is a separate generation. The parts don't match at their boundaries: the picture jumps, the sound jumps, and the editor has to hide each join with a cut that the scene never asked for. A single Line or dual dialogue pair that runs past 15 seconds can't be queued at all. The length check tells the user to "rewrite it shorter, set the shot's length or wait for Take extension".
The slice spec (#24) deferred this as Take extension (seamless continuation with overlap). It reserved the
extendskind oftake_linkfor it, and ADR-0004 kept provenance readable so that extension can walk old chains of Takes.Solution
A Shot may now run past 15 seconds. A long Shot is still rendered one H3 generation at a time, as a chain of Takes.
The extension gets its own Take number and is linked
extendsto its source. The user can therefore seed-hunt a segment: extend12A-3three times, get12A-4,12A-5and12A-6, then circle the best one. A Take that does not yet cover all of its Shot's Lines is partial. The Animatic plays it over the Lines it covers and plays the Board for the rest, as it already does for a Take whose Shot has grown. "Queue to the end" queues the whole chain in one action. Each segment waits for the one before it, and a Take that covers the whole Shot comes out at the end.User Stories
Long Shots
First segment
Extending a Take
One continuous Take
Dailies
Promotion and finals
Staleness and re-rolls
Animatic, Performance and Bounce
Edit package
Storage
Implementation Decisions
Domain language
Update CONTEXT.md as part of this work:
Shot length
TooLongandLineTooLongblocks go. A Shot's length estimate now gives a segment plan: the first segment is head handle plus Lines up to 15 s. Each later segment is overlap plus Lines up to 15 s. The last segment ends with the tail handle. Every segment rounds to H3's frame grid (5 + 17k frames, at most 362).StraddlesPerformancestill blocks, judged for the whole Shot.Take model and provenance
take_linkof kindextendsto its source Take, the first use of the reserved kind. A Take extends at most one source, and a source can have any number of extensions.take_inputrows, the source Take and the exact source Rendition the overlap was cut from, and the overlap length in frames. It also records the segment's own inputs: its Lines (or Line part), composed or overridden segment prompt, slot assignment, Board, Performance slice and so on.rerolled_fromas today. Restore keeps the seed and source.Jobs and shipped workflows
MiniMaxH3AddGuide, as the reference workflow inscratch/does. They render only the new segment and save its latents for Promotion. Each has a manifest with bindings for the overlap inputs, and the class types are added to preflight.Joining (Finishing)
Promotion
Staleness
Animatic, Bounce and Edit package
Dailies UI
Storage
Testing Decisions
studio-coreProjectSessionAPI only. They queue and extend Takes, run theRenderWorkeragainstFakeComfy, and assert on what the app shows: Take views, coverage, links, Stale reasons, queue state, Animatic events, Edit package files, and Storage rows. They never assert on SQL rows or private helpers.ProjectSessionAPI withFakeComfy+RenderWorker+ real ffmpeg.FakeComfylearns the new segment workflows: it emits a segment of the requested frame count, with distinguishable frames (for example a brightness ramp) so the join can be checked.extendslink, recorded source Rendition and overlap, segment prompt and slots, the start Keyframe not sent, and waiting on an unrendered source with cancellation on source failure.bun testfiles beside them, as the Dailies frame-keyframe helper does.Out of Scope
frame_from.[Shot 2]blocks), which stay deferred as in #24.Further Notes
MiniMaxH3AddGuideat index 0 with image and audio, 0.5 blend over the overlap, audio trimmed and concatenated) is inscratch/as the SEEDHUNTER v25 workflow. It is a starting point for the shipped workflows and has not yet been confirmed by running it in ComfyUI. Its exact overlap-blending and audio-join behaviour must be confirmed against real H3 output before the shipped workflows are frozen.take_linkkinds and ADR-0004) and on the Shot length rules from #41.