Edit package layout #19

Closed
opened 2026-10-06 03:55:56 +00:00 by crowmaki · 5 comments
Owner

Part of #1
Blocked by: #16, #8, #21

Question

What does the exported edit package contain? Cover folder layout (bins per scene), 12A-3 naming, which Renditions are included, sidecar metadata (circled flag, notes, provenance), the FCPXML timeline built from the Animatic, and re-export behaviour.

Part of #1 Blocked by: #16, #8, #21 ## Question What does the exported edit package contain? Cover folder layout (bins per scene), `12A-3` naming, which Renditions are included, sidecar metadata (circled flag, notes, provenance), the FCPXML timeline built from the Animatic, and re-export behaviour.
Author
Owner

From "Dailies review and circling" (#7): several circled Takes per Shot, all exported as Good Take. Notes are a list with optional timecodes, flattened into Comments as @3.2s … lines; decide here whether timecoded notes also become markers. Also decide Take naming for segmented Shots (the prototype used 12B·1-3). NG Takes are presumably excluded.

From "Dailies review and circling" (#7): several circled Takes per Shot, all exported as Good Take. Notes are a list with optional timecodes, flattened into Comments as `@3.2s …` lines; decide here whether timecoded notes also become markers. Also decide Take naming for segmented Shots (the prototype used `12B·1-3`). NG Takes are presumably excluded.
Author
Owner

From "Animatic duration rules" (#8): the Animatic is a per-Scene Cut over Lines (events are Take slices between Line marks, Boards, or no-coverage slates); transitions and shot directions are zero-length markers. Whether the export emits one timeline per Scene or one for the whole film is decided here.

From "Animatic duration rules" (#8): the Animatic is a per-Scene Cut over Lines (events are Take slices between Line marks, Boards, or no-coverage slates); transitions and shot directions are zero-length markers. Whether the export emits one timeline per Scene or one for the whole film is decided here.
Author
Owner

From "Shipped workflow roster and slot contracts" (#17): a final Rendition is a ProRes 422 HQ .mov master, plus an H.264 proxy used only for in-app playback. Drafts are H.264/AAC MP4. Every H3 Take also has a lossless WAV. The package should carry the masters (not the proxies), and the FCPXML/CSV need to handle .mov finals alongside .mp4 drafts. A promoted final's audio is identical to its draft's. Takes run up to 16 frames longer than the Shot (rounded up to 5 + 17k frames), and the extra frames are tail handle.

From "Shipped workflow roster and slot contracts" (#17): a final Rendition is a **ProRes 422 HQ `.mov` master**, plus an H.264 proxy used only for in-app playback. Drafts are H.264/AAC MP4. Every H3 Take also has a lossless WAV. The package should carry the masters (not the proxies), and the FCPXML/CSV need to handle `.mov` finals alongside `.mp4` drafts. A promoted final's audio is identical to its draft's. Takes run up to 16 frames longer than the Shot (rounded up to 5 + 17k frames), and the extra frames are tail handle.
Author
Owner

From "Render worker scheduling" (#18): the H.264 proxy for finals is made in a CPU post-step lane after the ComfyUI job, and it never blocks the GPU queue. This ticket owns the proxy codec choice. Our ffmpeg is the LGPL sidecar (#3), so libx264 is not available: pick OpenH264, NVENC (if the sidecar build includes it), or another option. If the proxy fails, the final Rendition still exists, with a "proxy missing" marker, so export must handle a final that has no proxy.

From "Render worker scheduling" (#18): the H.264 proxy for finals is made in a CPU post-step lane after the ComfyUI job, and it never blocks the GPU queue. This ticket owns the proxy codec choice. Our ffmpeg is the LGPL sidecar (#3), so libx264 is not available: pick OpenH264, NVENC (if the sidecar build includes it), or another option. If the proxy fails, the final Rendition still exists, with a "proxy missing" marker, so export must handle a final that has no proxy.
Author
Owner

Resolution

The Edit package is a folder that one Project syncs into in place. The term is now in CONTEXT.md.

<package>/
  012 MARKS HOUSE - KITCHEN/        per-Scene bin: zero-padded frozen Scene number + ASCII-safe heading
    12A/  12A-1.mov  12A-3.mov      per-Setup sub-bin
    12B/  12B_1-2.mov  12B_2-1.mov
  Animatic/                         Board/slate PNG stills, per-Scene Performance.wav
  Timelines/                        <Scene>.fcpxml / .otio / .srt, plus Animatic.fcpxml / .otio (whole film)
  _Removed/<date>/                  clips that dropped out since the last export
  takes.csv                         Resolve Media Pool metadata, UTF-8
  manifest.json                     full provenance + sync state
  1. Which Takes. By default, every Take that isn't NG and has a Rendition. The export dialog has a Circled only filter. NG Takes are never exported, so Tag=2 is never written.
  2. One clip per Take, always .mov.
    • If the Take has a final, the clip is the ProRes 422 HQ master.
    • Otherwise it is the draft, remuxed: H.264 picture copied, and the Take's WAV muxed in as PCM.
    • The WAV is never a separate file, and the H.264 proxy is never shipped.
    • Every clip carries start timecode 01:00:00:00.
  3. Naming. Unsegmented Shots are 12A-3.mov. Segmented Shots use an ASCII underscore everywhere outside the app: 12B_1-3.mov, and CSV Shot = 12B_1. The app keeps showing 12B·1-3.
  4. Masters are hard-linked.
    • Finals are hard-linked into the package when it's on the same volume as the media folder, and copied otherwise.
    • For this to work, the post-step stamps 01:00:00:00 and PCM audio into the master when it is created. For finals, this revises item 2's "stamp at packaging time".
    • Draft remuxes are new files.
  5. Timelines.
    • Files: one per Scene, plus one whole-film timeline. The whole-film one holds the selected Scenes in script order and skips omitted ones.
    • Format: both FCPXML 1.10 and native .otio.
    • Timeline settings: the Project's aspect ratio at the final size, 24 fps, starting at 01:00:00:00. Drafts are scaled to fit.
    • FCPXML: one event holding one project, with no bins and no markers (from "Test Resolve import of FCPXML and metadata CSV").
    • .otio: carries timeline markers for transitions and shot directions, and clip markers for timecoded notes on Take events. A marker's name is the text, truncated.
    • Take events reference the whole clip, with in and out points at the Line marks, so the handles stay available.
  6. Board, slate and caption events.
    • Each Panel slice and each no-coverage slate is a PNG at the final timeline size. Panels are letterboxed from their canvas.
    • Captions are burned in, as the Animatic shows them. Each per-Scene timeline also has a sidecar .srt.
    • Board-event audio comes from one Performance.wav per Scene, placed at the right offsets.
    • These assets live in Animatic/, outside the coverage bins.
  7. takes.csv uses the header strings from the Resolve test.
    • Matching: File Name, Clip Directory, and Start TC/End TC.
    • Shot identity: Scene, Shot and Take.
    • Tag: 1 for circled Takes, blank otherwise.
    • Description: the Shot's framing note.
    • Keywords: draft/final, plus stale.
    • Comments: notes, one per line, with @3.2s prefixes on timecoded ones.
    • Custom columns: Seed, Profile, Pinned.
  8. manifest.json holds:
    • the package version, export time and Project id;
    • for each Take, the full recorded inputs (composed prompt, slot list, Lock snapshots, Generation profile, workflow and version, seed, and Take chain);
    • the packaged Rendition id and content hash.
  9. Re-export syncs in place.
    • The previous manifest decides what to do: unchanged clips are skipped, and new Takes are added.
    • A changed Rendition overwrites at the same path. That covers draft→final and re-promotion; a hard link is unlinked and linked again.
    • Timelines, .srt files, the CSV and the manifest are always rewritten.
    • Clips that dropped out are moved to _Removed/<date>/, never deleted. That covers Takes now NG, deleted Takes, and Takes left out by Circled only. The dialog warns before switching Circled only on.
    • Writes go to temp files and are then renamed.
    • Staleness never blocks export.
  10. Proxy codec (handed over from "Render worker scheduling"): h264_nvenc when a startup check finds it, otherwise libopenh264. Both work in the LGPL sidecar. The proxy is at the draft short side (768). If encoding fails, the existing "proxy missing" path applies.
  11. Export dialog: a Scene picker, the Circled only option, and the package folder, which is remembered per Project.

For "External media view and cleanup": package masters may be hard links. Deleting a Project Rendition that a package still links doesn't free any space.

## Resolution The **Edit package** is a folder that one Project syncs into in place. The term is now in `CONTEXT.md`. ``` <package>/ 012 MARKS HOUSE - KITCHEN/ per-Scene bin: zero-padded frozen Scene number + ASCII-safe heading 12A/ 12A-1.mov 12A-3.mov per-Setup sub-bin 12B/ 12B_1-2.mov 12B_2-1.mov Animatic/ Board/slate PNG stills, per-Scene Performance.wav Timelines/ <Scene>.fcpxml / .otio / .srt, plus Animatic.fcpxml / .otio (whole film) _Removed/<date>/ clips that dropped out since the last export takes.csv Resolve Media Pool metadata, UTF-8 manifest.json full provenance + sync state ``` 1. **Which Takes.** By default, every Take that isn't NG and has a Rendition. The export dialog has a **Circled only** filter. NG Takes are never exported, so `Tag=2` is never written. 2. **One clip per Take, always `.mov`.** - If the Take has a final, the clip is the ProRes 422 HQ master. - Otherwise it is the draft, remuxed: H.264 picture copied, and the Take's WAV muxed in as PCM. - The WAV is never a separate file, and the H.264 proxy is never shipped. - Every clip carries start timecode `01:00:00:00`. 3. **Naming.** Unsegmented Shots are `12A-3.mov`. Segmented Shots use an ASCII underscore everywhere outside the app: `12B_1-3.mov`, and CSV `Shot` = `12B_1`. The app keeps showing `12B·1-3`. 4. **Masters are hard-linked.** - Finals are hard-linked into the package when it's on the same volume as the media folder, and copied otherwise. - For this to work, the **post-step stamps `01:00:00:00` and PCM audio into the master when it is created**. For finals, this revises item 2's "stamp at packaging time". - Draft remuxes are new files. 5. **Timelines.** - **Files:** one per Scene, plus one whole-film timeline. The whole-film one holds the selected Scenes in script order and skips omitted ones. - **Format:** both FCPXML 1.10 and native `.otio`. - **Timeline settings:** the Project's aspect ratio at the final size, 24 fps, starting at `01:00:00:00`. Drafts are scaled to fit. - **FCPXML:** one event holding one project, with no bins and no markers (from "Test Resolve import of FCPXML and metadata CSV"). - **`.otio`:** carries timeline markers for transitions and shot directions, and clip markers for timecoded notes on Take events. A marker's name is the text, truncated. - **Take events** reference the whole clip, with in and out points at the Line marks, so the handles stay available. 6. **Board, slate and caption events.** - Each Panel slice and each no-coverage slate is a PNG at the final timeline size. Panels are letterboxed from their canvas. - Captions are burned in, as the Animatic shows them. Each per-Scene timeline also has a sidecar `.srt`. - Board-event audio comes from one `Performance.wav` per Scene, placed at the right offsets. - These assets live in `Animatic/`, outside the coverage bins. 7. **`takes.csv`** uses the header strings from the Resolve test. - Matching: `File Name`, `Clip Directory`, and `Start TC`/`End TC`. - Shot identity: `Scene`, `Shot` and `Take`. - `Tag`: `1` for circled Takes, blank otherwise. - `Description`: the Shot's framing note. - `Keywords`: `draft`/`final`, plus `stale`. - `Comments`: notes, one per line, with `@3.2s` prefixes on timecoded ones. - Custom columns: `Seed`, `Profile`, `Pinned`. 8. **`manifest.json`** holds: - the package version, export time and Project id; - for each Take, the full recorded inputs (composed prompt, slot list, Lock snapshots, Generation profile, workflow and version, seed, and Take chain); - the packaged Rendition id and content hash. 9. **Re-export syncs in place.** - The previous manifest decides what to do: unchanged clips are skipped, and new Takes are added. - A changed Rendition overwrites at the same path. That covers draft→final and re-promotion; a hard link is unlinked and linked again. - Timelines, `.srt` files, the CSV and the manifest are always rewritten. - Clips that dropped out are moved to `_Removed/<date>/`, never deleted. That covers Takes now NG, deleted Takes, and Takes left out by Circled only. The dialog warns before switching Circled only on. - Writes go to temp files and are then renamed. - Staleness never blocks export. 10. **Proxy codec** (handed over from "Render worker scheduling"): `h264_nvenc` when a startup check finds it, otherwise `libopenh264`. Both work in the LGPL sidecar. The proxy is at the draft short side (768). If encoding fails, the existing "proxy missing" path applies. 11. **Export dialog:** a Scene picker, the Circled only option, and the package folder, which is remembered per Project. **For "External media view and cleanup":** package masters may be hard links. Deleting a Project Rendition that a package still links doesn't free any space.
Sign in to join this conversation.
No description provided.