Dailies table, screening mode, compare tray and new seed (#56) #111

Merged
crowmaki merged 2 commits from issue-56-dailies-screening into main 2026-10-09 05:45:56 +00:00
Owner

Closes #56. Part of #24 (User Stories 146, 148, 149 and 158).

What changes

A filmmaker can get through many Takes fast.

  • Same take, new seed. reroll_take queues a new Take of a rendered Take's Shot. It uses the Shot's current inputs, a fresh seed, and the first Take's own kind (draft or Single-pass final) and Generation profile. The link is recorded as take_link (take, other_take, 'rerolled_from') in the same transaction that queues the Take. Only a rendered Take can get a new seed. A failed Take uses Retry instead, and because a rendered Take is never deleted, the linked Take always outlives the link. reroll_takes is the batch form. It checks every Take (rendered, Shot queueable, prompt override intact) before it queues any. Like queuing, neither one is undoable.
  • Table. A Wall / Table toggle sits in the Dailies header. The table lists every Take of the Scene, with these filters: All, Unseen, Circled, Draft only and NG, each with a count. NG Takes appear only under NG. You can narrow it to one Shot, and sort by Take, Status, Seed or Queued time. Columns show the name (ringed, D/F, pinned, unseen dot), status, seed, From (⟳ 1A-2 for a new seed) and the first note. When rows are ticked, the batch bar offers New seed each and Compare. Promote is shown but disabled until #57. Clicking a row opens the details panel.
  • Compare tray. Tick up to four rendered Takes, from the box on a tile's poster or from the table. They play side by side above the wall or table, driven by one play/pause and one scrub bar. The first clip still playing keeps time, and the others are corrected when they drift. Only one clip is heard at a time (♪). A Take that becomes NG leaves the tray.
  • Screening mode. Screen unseen plays the Scene's unseen rendered Takes in wall order. The keys are: C circle, N note at the playhead (Enter saves and resumes, Esc cancels), R new seed, J / K next / previous, Space play/pause, hold B to show the Shot's circled Take (the one the Animatic plays) at the same moment, and Esc to leave. P shows "Promotion is not available yet" until #57. Playing a Take through marks it seen and moves on (you can turn this off). Skipping with J does not mark it seen, as User Story 152 asks. The reel is fixed when you enter, so a Take that becomes seen stays on it. Keys act only while the Dailies Pane is focused.
  • Details panel gains Same take, new seed and shows ⟳ <from> beside the seed.
  • Schema. V28 adds take_link with kinds rerolled_from, frame_from and extends, as #24's storage note lists.
  • CONTEXT.md defines New seed.

Not here: Promotion (#57), staleness and the "original inputs" option for stale Takes (#58), and the A/B wipe and inputs table in details (User Story 150).

Screenshots

The wall with the new header: Wall / Table, Screen unseen and the unseen count. 1A-4 was rolled from 1A-2 with a new seed.

Wall

Three Takes ticked into the compare tray, playing in sync.

Compare tray

The table after New seed each on 1A-1 and 1B-2. 1A-5 and 1B-4 show where they came from. 1A-4 is open in details.

Table

Screening mode while B is held: 1A-6 is on the reel, and the stage shows 1A-3, the Shot's circled Take.

Screening

The clips come from a stand-in ComfyUI that serves coloured ffmpeg test clips.

Tests

  • crates/studio-core/tests/dailies.rs:
    • a new seed records rerolled_from, takes the Shot's current inputs (a changed framing note), and keeps the Take's profile with a new seed
    • a Single-pass final rolls a Single-pass final
    • a Take with nothing rendered is refused
    • a batch links each new Take, and one Take with nothing rendered queues nothing
    • queuing leaves undo alone
  • src-tauri/tests/takes.rs runs reroll_take and reroll_takes through the adapter.
  • src/lib/dailies/table.test.ts covers every filter, the counts, Shot narrowing, each sort and the From name.
  • tray.test.ts covers the four-Take limit.
  • screening.test.ts covers the reel, J/K stepping, the B flip target and the key map.
  • I checked it in the running app: the tray plays in sync (within 10 ms), New seed each, the NG filter, and screening keys C, N, R, J, B and Esc, plus auto-advance marking seen.

bun test src (184 passed) and bun run check pass. cargo test --workspace --all-features --no-fail-fast passes 651 tests. Two fail: the ffmpeg::tests proxy tests, because this machine's ffmpeg has no libopenh264. These are the same two as in #55.

Closes #56. Part of #24 (User Stories 146, 148, 149 and 158). ## What changes A filmmaker can get through many Takes fast. - **Same take, new seed.** `reroll_take` queues a new Take of a rendered Take's Shot. It uses the Shot's current inputs, a fresh seed, and the first Take's own kind (draft or Single-pass final) and Generation profile. The link is recorded as `take_link (take, other_take, 'rerolled_from')` in the same transaction that queues the Take. Only a rendered Take can get a new seed. A failed Take uses Retry instead, and because a rendered Take is never deleted, the linked Take always outlives the link. `reroll_takes` is the batch form. It checks every Take (rendered, Shot queueable, prompt override intact) before it queues any. Like queuing, neither one is undoable. - **Table.** A Wall / Table toggle sits in the Dailies header. The table lists every Take of the Scene, with these filters: **All**, **Unseen**, **Circled**, **Draft only** and **NG**, each with a count. NG Takes appear only under NG. You can narrow it to one Shot, and sort by Take, Status, Seed or Queued time. Columns show the name (ringed, D/F, pinned, unseen dot), status, seed, **From** (`⟳ 1A-2` for a new seed) and the first note. When rows are ticked, the batch bar offers **New seed each** and **Compare**. **Promote** is shown but disabled until #57. Clicking a row opens the details panel. - **Compare tray.** Tick up to four rendered Takes, from the box on a tile's poster or from the table. They play side by side above the wall or table, driven by one play/pause and one scrub bar. The first clip still playing keeps time, and the others are corrected when they drift. Only one clip is heard at a time (♪). A Take that becomes NG leaves the tray. - **Screening mode.** **Screen unseen** plays the Scene's unseen rendered Takes in wall order. The keys are: **C** circle, **N** note at the playhead (Enter saves and resumes, Esc cancels), **R** new seed, **J / K** next / previous, **Space** play/pause, **hold B** to show the Shot's circled Take (the one the Animatic plays) at the same moment, and **Esc** to leave. **P** shows "Promotion is not available yet" until #57. Playing a Take through marks it seen and moves on (you can turn this off). Skipping with J does not mark it seen, as User Story 152 asks. The reel is fixed when you enter, so a Take that becomes seen stays on it. Keys act only while the Dailies Pane is focused. - **Details panel** gains **Same take, new seed** and shows `⟳ <from>` beside the seed. - **Schema.** V28 adds `take_link` with kinds `rerolled_from`, `frame_from` and `extends`, as #24's storage note lists. - **CONTEXT.md** defines **New seed**. Not here: Promotion (#57), staleness and the "original inputs" option for stale Takes (#58), and the A/B wipe and inputs table in details (User Story 150). ## Screenshots The wall with the new header: Wall / Table, **Screen unseen** and the unseen count. 1A-4 was rolled from 1A-2 with a new seed. ![Wall](https://git.crowmaki.me/attachments/aec10e7c-7009-4fae-9a34-dc6af0fdda29) Three Takes ticked into the compare tray, playing in sync. ![Compare tray](https://git.crowmaki.me/attachments/fc8ec172-9abc-4be9-95fd-90fbad192e44) The table after **New seed each** on 1A-1 and 1B-2. 1A-5 and 1B-4 show where they came from. 1A-4 is open in details. ![Table](https://git.crowmaki.me/attachments/f3bae2b2-934e-4461-840e-f5c88251ef6e) Screening mode while B is held: 1A-6 is on the reel, and the stage shows 1A-3, the Shot's circled Take. ![Screening](https://git.crowmaki.me/attachments/3c022b57-9e1b-43fd-9ef0-2b132216167f) The clips come from a stand-in ComfyUI that serves coloured ffmpeg test clips. ## Tests - `crates/studio-core/tests/dailies.rs`: - a new seed records `rerolled_from`, takes the Shot's current inputs (a changed framing note), and keeps the Take's profile with a new seed - a Single-pass final rolls a Single-pass final - a Take with nothing rendered is refused - a batch links each new Take, and one Take with nothing rendered queues nothing - queuing leaves undo alone - `src-tauri/tests/takes.rs` runs `reroll_take` and `reroll_takes` through the adapter. - `src/lib/dailies/table.test.ts` covers every filter, the counts, Shot narrowing, each sort and the From name. - `tray.test.ts` covers the four-Take limit. - `screening.test.ts` covers the reel, J/K stepping, the B flip target and the key map. - I checked it in the running app: the tray plays in sync (within 10 ms), New seed each, the NG filter, and screening keys C, N, R, J, B and Esc, plus auto-advance marking seen. `bun test src` (184 passed) and `bun run check` pass. `cargo test --workspace --all-features --no-fail-fast` passes 651 tests. Two fail: the `ffmpeg::tests` proxy tests, because this machine's ffmpeg has no `libopenh264`. These are the same two as in #55.
"Same take, new seed" rolls a new Take of a rendered Take's Shot with the
Shot's current inputs, a fresh seed and the Take's own kind and profile,
and records take_link rerolled_from in the same write (V28). A batch
checks every Take before it queues any.

Dailies gains a table of every Take (All, Unseen, Circled, Draft only,
NG; one Shot or all; sortable) with batch new seed and compare, a synced
compare tray of up to four Takes, and a keyboard screening mode for
unseen Takes (C, N, P, R, J/K, Space, hold B, Esc). P waits for
Promotion.
crowmaki deleted branch issue-56-dailies-screening 2026-10-09 05:45:56 +00:00
Sign in to join this conversation.
No description provided.