Play the Shot's Playblast in the Animatic (#166) #177

Merged
crowmaki merged 2 commits from issue-166-animatic-playblast into main 2026-10-11 05:58:25 +00:00
Owner

Closes #166

What

In the Animatic, a complex Shot with a current Playblast and no circled Take now plays the Playblast in place of its Board. A Shot that isn't complex, or has no Playblast, shows its Board as before. A circled Take still wins.

  • Core (animatic.rs): a Board event has a new playblast: Option<EventPlayblast> field (version id and number). It is set for a complex Shot from previz::current_playblasts, which now returns the version along with its fit. The Playblast runs the Shot's whole span, so the event plays it from its shot_offset_ms. The same way, Panels are spread over the span. I kept this on the Board event instead of adding a new variant, so the Edit package and the Panel fallback stay as they are.
  • DTO / bindings: AnimaticEventDto.playblast.
  • UI: AnimaticStage plays the Playblast muted, so the Performance plays under it as under a Board, and it follows the playhead the same way a Take does. takeSeconds is now videoSeconds and covers both. The event track labels the block playblast vN.
  • CONTEXT.md: the Animatic entry now mentions the Playblast.

Animatic playing a Playblast

Tests

  • tests/previz.rs:
    • The Animatic plays the current Playblast and moves to the newest one.
    • A Shot that isn't complex, or has none, shows its Board.
    • A Playblast whose file went missing is skipped for the previous version.
    • Circling a Take replaces the Playblast, and uncircling brings it back.
  • cut.test.ts: videoSeconds for a Take, a Playblast and a plain Board.
  • Full cargo test --workspace, bun test and bun run check pass.
  • Checked in the running app: the Playblast shows at the head offset when paused and stays in sync while playing. The next Shot falls back to its Board.

Not in scope / follow-ups

  • The Edit package still exports Board stills for a Shot whose Animatic plays a Playblast.
  • A Playblast whose file disappears mid-session leaves the stage black until Storage marks it missing. It doesn't fall back to the Board.
  • A mismatched Playblast still plays, because it is still the current one. No hint on the stage says it is mismatched.
  • Inside an event, the video plays 1:1, so where Performance or manual timing stretches Lines away from their estimates it drifts from the Line boundaries. Board Panels have the same limit.
Closes #166 ## What In the Animatic, a complex Shot with a current Playblast and no circled Take now plays the Playblast in place of its Board. A Shot that isn't complex, or has no Playblast, shows its Board as before. A circled Take still wins. - **Core** (`animatic.rs`): a Board event has a new `playblast: Option<EventPlayblast>` field (version id and number). It is set for a complex Shot from `previz::current_playblasts`, which now returns the version along with its fit. The Playblast runs the Shot's whole span, so the event plays it from its `shot_offset_ms`. The same way, Panels are spread over the span. I kept this on the Board event instead of adding a new variant, so the Edit package and the Panel fallback stay as they are. - **DTO / bindings**: `AnimaticEventDto.playblast`. - **UI**: `AnimaticStage` plays the Playblast muted, so the Performance plays under it as under a Board, and it follows the playhead the same way a Take does. `takeSeconds` is now `videoSeconds` and covers both. The event track labels the block `playblast vN`. - `CONTEXT.md`: the Animatic entry now mentions the Playblast. ![Animatic playing a Playblast](https://git.crowmaki.me/attachments/56e6413d-2f14-4fe4-875c-6aec334869e3) ## Tests - `tests/previz.rs`: - The Animatic plays the current Playblast and moves to the newest one. - A Shot that isn't complex, or has none, shows its Board. - A Playblast whose file went missing is skipped for the previous version. - Circling a Take replaces the Playblast, and uncircling brings it back. - `cut.test.ts`: `videoSeconds` for a Take, a Playblast and a plain Board. - Full `cargo test --workspace`, `bun test` and `bun run check` pass. - Checked in the running app: the Playblast shows at the head offset when paused and stays in sync while playing. The next Shot falls back to its Board. ## Not in scope / follow-ups - The Edit package still exports Board stills for a Shot whose Animatic plays a Playblast. - A Playblast whose file disappears mid-session leaves the stage black until Storage marks it missing. It doesn't fall back to the Board. - A mismatched Playblast still plays, because it is still the current one. No hint on the stage says it is mismatched. - Inside an event, the video plays 1:1, so where Performance or manual timing stretches Lines away from their estimates it drifts from the Line boundaries. Board Panels have the same limit.
A Board event of a complex Shot with a current Playblast plays it in
place of its Panels, from where the event starts in the Shot's span.
A circled Take still wins.
crowmaki deleted branch issue-166-animatic-playblast 2026-10-11 05:58:25 +00:00
Sign in to join this conversation.
No description provided.