Circled Takes in the Animatic (#62) #119

Merged
crowmaki merged 2 commits from issue-62-animatic-circled-takes into main 2026-10-09 09:29:23 +00:00
Owner

Closes #62. Part of #24 (User Stories 162, 174, 179).

What changed

Circled Takes in the Animatic. Each Shot plays its pinned circled Take, or else its most recently circled one. It plays the Take's final if there is one, else the draft, in place of the Shot's Board. The Take plays between its Line marks with its own audio, so the Cut is timed by the Take rather than by the script estimate. In the Line lane those Lines show as timed "from the take". A playing Take that is stale gets an amber STALE tag in the stage corner, and its tooltip lists the reasons. The event track marks it with a small amber corner.

Line marks.

  • A Take now records the countable Lines it was queued over (take_line), so a Shot that moves later leaves its Takes alone. Lines a Take does not cover play the Board.
  • By default the marks are the Take's length less 0.5 s head and tail handles, spread over its Lines in proportion to their durations. A dual dialogue pair shares one mark.
  • In the Dailies details panel, the new Line marks section lists each mark. You can nudge a mark one frame at a time, set it to the playhead, or reset all marks to the default spread. All three can be undone.
  • The first nudge stores every mark (take_mark). A later change to a Line's duration therefore never puts a nudged Take's marks out of order.

Schema V33. Adds take_line and take_mark. Takes that already exist get their Shot's current Lines.

Screenshots

The Animatic plays 1A-2, a stale draft, at 4.9 s into the Scene. That is 5.4 s into the Take, after its 0.5 s head mark, and the clip's burnt-in timecode agrees. 1B-2 plays the last Line.

Animatic playing a circled Take

In Dailies, the details panel shows the Line marks after a nudge, with Reset, the mark strip and the playhead.

Line marks in the Dailies details panel

The clips are ffmpeg test patterns that a fake ComfyUI rendered.

Tests

  • crates/studio-core/tests/animatic_takes.rs covers:
    • the default marks and the Lines recorded at queue time
    • which Take plays: pinned or most recent, final over draft, uncircled back to the Board
    • only the Lines the Cut gives the Shot play the Take
    • Lines added to the Shot after queuing play the Board
    • the stale flag
    • nudging, its bounds and undo, reset, and a Take with nothing rendered
  • take_marks.rs has unit tests for the spread.
  • A migration test covers the V33 backfill.
  • src/lib/dailies/marks.test.ts and src/lib/animatic/cut.test.ts cover the TypeScript helpers.
  • Results: cargo test --workspace --all-features, bun test src and bun run check all pass.

Notes for #65 (Performance-driven Takes)

Marks are all-or-nothing: either none are stored and the Take uses the default spread, or every mark is stored, which counts as moved by hand. A Take whose marks are snapshotted from a Performance will need its own baseline. Without one it shows as moved by hand, and Reset goes back to the proportional spread.

Closes #62. Part of #24 (User Stories 162, 174, 179). ## What changed **Circled Takes in the Animatic.** Each Shot plays its pinned circled Take, or else its most recently circled one. It plays the Take's final if there is one, else the draft, in place of the Shot's Board. The Take plays between its Line marks with its own audio, so the Cut is timed by the Take rather than by the script estimate. In the Line lane those Lines show as timed "from the take". A playing Take that is stale gets an amber `STALE` tag in the stage corner, and its tooltip lists the reasons. The event track marks it with a small amber corner. **Line marks.** - A Take now records the countable Lines it was queued over (`take_line`), so a Shot that moves later leaves its Takes alone. Lines a Take does not cover play the Board. - By default the marks are the Take's length less 0.5 s head and tail handles, spread over its Lines in proportion to their durations. A dual dialogue pair shares one mark. - In the Dailies details panel, the new **Line marks** section lists each mark. You can nudge a mark one frame at a time, set it to the playhead, or reset all marks to the default spread. All three can be undone. - The first nudge stores every mark (`take_mark`). A later change to a Line's duration therefore never puts a nudged Take's marks out of order. **Schema V33.** Adds `take_line` and `take_mark`. Takes that already exist get their Shot's current Lines. ## Screenshots The Animatic plays 1A-2, a stale draft, at 4.9 s into the Scene. That is 5.4 s into the Take, after its 0.5 s head mark, and the clip's burnt-in timecode agrees. 1B-2 plays the last Line. ![Animatic playing a circled Take](https://git.crowmaki.me/attachments/bcb381e6-fe41-48d2-afed-08a44e02ff3f) In Dailies, the details panel shows the Line marks after a nudge, with Reset, the mark strip and the playhead. ![Line marks in the Dailies details panel](https://git.crowmaki.me/attachments/a706f10e-9194-461a-aa36-393b397e8024) The clips are ffmpeg test patterns that a fake ComfyUI rendered. ## Tests - `crates/studio-core/tests/animatic_takes.rs` covers: - the default marks and the Lines recorded at queue time - which Take plays: pinned or most recent, final over draft, uncircled back to the Board - only the Lines the Cut gives the Shot play the Take - Lines added to the Shot after queuing play the Board - the stale flag - nudging, its bounds and undo, reset, and a Take with nothing rendered - `take_marks.rs` has unit tests for the spread. - A migration test covers the V33 backfill. - `src/lib/dailies/marks.test.ts` and `src/lib/animatic/cut.test.ts` cover the TypeScript helpers. - Results: `cargo test --workspace --all-features`, `bun test src` and `bun run check` all pass. ## Notes for #65 (Performance-driven Takes) Marks are all-or-nothing: either none are stored and the Take uses the default spread, or every mark is stored, which counts as moved by hand. A Take whose marks are snapshotted from a Performance will need its own baseline. Without one it shows as moved by hand, and Reset goes back to the proportional spread.
A Shot's circled Take (pinned, else most recently circled; final, else
draft) replaces its Board in the Animatic and plays between its Line marks
with its own audio. A Take records the Lines it was queued over; its marks
default to its length less handles, spread in proportion to Line
durations, and can be nudged, set to the playhead or reset in the Dailies
details panel (undoable). Stale playing Takes get a corner mark on the
stage and the event track.

Co-Authored-By: Claude <noreply@anthropic.com>
Mark a stale playing Take with an amber STALE tag naming its Stale
reasons and show D/F rather than the rendition kind, per ADR 0006. Pick
the played Take before its Rendition, refuse marks on a purged Take, and
gather the mark list in TakeMarks::all.

Co-Authored-By: Claude <noreply@anthropic.com>
crowmaki deleted branch issue-62-animatic-circled-takes 2026-10-09 09:29:23 +00:00
Sign in to join this conversation.
No description provided.