External media view and cleanup #22

Closed
opened 2026-10-06 05:41:54 +00:00 by crowmaki · 3 comments
Owner

Part of #1
Blocked by: #11

Question

What does the project-wide external-media view show, and how does cleanup work? Which imported things count as external media: Source sheets, imported Performance audio, imported Voice references, imported Keyframes or Boards? For each item, how are its references shown (which Reference versions, Performances and so on point at it)? What are the cleanup rules for unreferenced items: manual only or suggested, whether they can be undone, and how a Lock snapshot or Take that still depends on an item blocks deleting it? From "Import and crop a sheet into Tiles" (#5): a Source sheet is kept while any Reference version points at it, and unreferenced sheets are cleaned up from this view.

Part of #1 Blocked by: #11 ## Question What does the project-wide external-media view show, and how does cleanup work? Which imported things count as external media: Source sheets, imported Performance audio, imported Voice references, imported Keyframes or Boards? For each item, how are its references shown (which Reference versions, Performances and so on point at it)? What are the cleanup rules for unreferenced items: manual only or suggested, whether they can be undone, and how a Lock snapshot or Take that still depends on an item blocks deleting it? From "Import and crop a sheet into Tiles" (#5): a Source sheet is kept while any Reference version points at it, and unreferenced sheets are cleaned up from this view.
Author
Owner

From "Dailies review and circling" (#7): an NG Take's Rendition files can be deleted to free space while the Take record and provenance stay; failed Takes can be deleted outright (number not reused). Cover the deletion and undo rules for Renditions here.

From "Dailies review and circling" (#7): an NG Take's Rendition files can be deleted to free space while the Take record and provenance stay; failed Takes can be deleted outright (number not reused). Cover the deletion and undo rules for Renditions here.
Author
Owner

From "Edit package layout" (#19): final masters are hard-linked into the Edit package when the package is on the same volume as the media folder. Deleting such a Rendition from the Project removes only one link, so the space stays used while the package exists. The view should show this (for example by link count), and cleanup should not count those bytes as reclaimable. The package's _Removed/<date>/ folders are outside the Project's media, but they may also hold links to masters.

From "Edit package layout" (#19): final masters are **hard-linked** into the Edit package when the package is on the same volume as the media folder. Deleting such a Rendition from the Project removes only one link, so the space stays used while the package exists. The view should show this (for example by link count), and cleanup should not count those bytes as reclaimable. The package's `_Removed/<date>/` folders are outside the Project's media, but they may also hold links to masters.
Author
Owner

Resolution

The view is Storage, one project-wide view of everything that takes space. "External" was the wrong word: most imports are blobs inside the .studio file. New glossary terms: Storage and Purge.

Delete vs. Purge

  • Purge removes bytes and keeps the row, marked purged (purged-at, size and hash stay readable). Only media-folder files can be purged: Rendition files (mp4/mov plus WAV) and latents.
  • In-file items are only deleted, and only when nothing uses them. Reference version pixels, Performance audio, Board and Keyframe blobs are never purged, because Takes consumed them.

Guards for Purge

  • A Circled take's Renditions are blocked. Uncircle first.
  • A pending Promotion or final job blocks that Take's latent.
  • Everything else needs one confirmation that lists what stops working ("Promotion unavailable", "Take will have no playable Rendition").
  • A fully purged Take stays in Dailies as a purged tile. It keeps its poster frame, shows a purged badge and offers "Re-roll same seed".

Poster frames

When a Rendition is collected, the core extracts a small poster frame as an in-file blob owned by the Rendition row, one for the draft and one for the final. Dailies tiles use it. Purge leaves it in place.

  • Reclaimable bytes are computed per file from its link count. Bytes count only when the Project holds the last link. Rows show a "linked in Edit package" badge.
  • Purging a linked final frees nothing by itself. The next package sync moves the clip to _Removed/<date>/.
  • Storage lists the package's _Removed/ folders with their size and offers Empty _Removed, with a warning that Resolve projects may lose links to the files. This is the only place anything in the package is deleted, and an export never deletes. The glossary entry for Edit package is updated to say this.

What Storage can delete

  • Only Source sheets, the one free-standing import. A sheet can be deleted only when no Reference version points at it. Otherwise its Used by list shows Set › Tile vN (marked when the version is in a Lock snapshot), with jump links. There is no cascade.
  • All other in-file items (Reference versions including Voice audio, Performances, Keyframes, Panels, Atlases) are listed for visibility, with size, Used by and "Open in…". They are deleted in their own editors under ADR-0004, and their bytes leave the file through the blob sweep.

Undo

  • In-file Delete is undoable within the session through the command log. The blob is only swept at the next open.
  • Purge and Empty _Removed delete files right away and cannot be undone. Each takes one confirmation showing the exact bytes freed and what stops working.

Suggestions

A strip of bulk filters. Each one shows its reclaimable bytes and only selects matching rows, so nothing runs automatically:

  • Renditions of NG Takes
  • latents of Takes that have a final
  • drafts of Takes that have a final
  • unused Source sheets
  • orphan files: media-folder files no row knows about, scanned when Storage opens
  • _Removed/
  • Compact, once free space inside the file passes a threshold of about 20% or 100 MB

"Uncircled coverage" is deliberately left out, because uncircled does not mean unwanted.

Compact

Manual only: a VACUUM with the queue paused, run behind a progress dialog. No auto_vacuum. The header shows free space inside the file.

Missing files

A media-folder file that disappears outside the app shows as missing, and the row is treated like a purged one.

Layout

  • A header with three totals: the project file (with its free space inside), the media folder, and the Edit package (shared vs. _Removed/).
  • The Suggestions strip.
  • One sortable table: kind, human label, Scene, size, reclaimable size, badges (circled / NG / purged / missing / linked / used by N), last used. Filter chips by kind and Scene, and multi-select for Purge or Delete.
  • A details panel with Used by and provenance.
  • Dailies' per-Take shortcuts (free space on NG Takes, delete failed Takes) call the same core actions, guards and confirmation.

What the schema has to hold (for the build issues)

  • rendition: purged_at, the recorded size and hash, and poster_blob.
  • rendition: a missing state, or a missing flag computed when Storage opens.
  • Latent files: their own purged marker.
## Resolution The view is **Storage**, one project-wide view of everything that takes space. "External" was the wrong word: most imports are blobs inside the `.studio` file. New glossary terms: **Storage** and **Purge**. ### Delete vs. Purge - **Purge** removes bytes and keeps the row, marked purged (purged-at, size and hash stay readable). Only **media-folder files** can be purged: Rendition files (mp4/mov plus WAV) and latents. - In-file items are only **deleted**, and only when nothing uses them. Reference version pixels, Performance audio, Board and Keyframe blobs are never purged, because Takes consumed them. ### Guards for Purge - A Circled take's Renditions are **blocked**. Uncircle first. - A pending Promotion or final job blocks that Take's latent. - Everything else needs one confirmation that lists what stops working ("Promotion unavailable", "Take will have no playable Rendition"). - A fully purged Take stays in Dailies as a **purged tile**. It keeps its poster frame, shows a purged badge and offers "Re-roll same seed". ### Poster frames When a Rendition is collected, the core extracts a small poster frame as an in-file blob owned by the Rendition row, one for the draft and one for the final. Dailies tiles use it. Purge leaves it in place. ### Edit package and hard links - Reclaimable bytes are computed per file from its link count. Bytes count only when the Project holds the last link. Rows show a "linked in Edit package" badge. - Purging a linked final frees nothing by itself. The next package sync moves the clip to `_Removed/<date>/`. - Storage lists the package's `_Removed/` folders with their size and offers **Empty _Removed**, with a warning that Resolve projects may lose links to the files. This is the only place anything in the package is deleted, and an export never deletes. The glossary entry for Edit package is updated to say this. ### What Storage can delete - **Only Source sheets**, the one free-standing import. A sheet can be deleted only when no Reference version points at it. Otherwise its **Used by** list shows *Set › Tile vN* (marked when the version is in a Lock snapshot), with jump links. There is no cascade. - All other in-file items (Reference versions including Voice audio, Performances, Keyframes, Panels, Atlases) are listed for visibility, with size, Used by and "Open in…". They are deleted in their own editors under ADR-0004, and their bytes leave the file through the blob sweep. ### Undo - In-file Delete is undoable within the session through the command log. The blob is only swept at the next open. - **Purge** and **Empty _Removed** delete files right away and **cannot be undone**. Each takes one confirmation showing the exact bytes freed and what stops working. ### Suggestions A strip of bulk filters. Each one shows its reclaimable bytes and only **selects** matching rows, so nothing runs automatically: - Renditions of NG Takes - latents of Takes that have a final - drafts of Takes that have a final - unused Source sheets - orphan files: media-folder files no row knows about, scanned when Storage opens - `_Removed/` - Compact, once free space inside the file passes a threshold of about 20% or 100 MB "Uncircled coverage" is deliberately left out, because uncircled does not mean unwanted. ### Compact Manual only: a `VACUUM` with the queue paused, run behind a progress dialog. No `auto_vacuum`. The header shows free space inside the file. ### Missing files A media-folder file that disappears outside the app shows as **missing**, and the row is treated like a purged one. ### Layout - A header with three totals: the project file (with its free space inside), the media folder, and the Edit package (shared vs. `_Removed/`). - The Suggestions strip. - One sortable table: kind, human label, Scene, size, reclaimable size, badges (circled / NG / purged / missing / linked / used by N), last used. Filter chips by kind and Scene, and multi-select for Purge or Delete. - A details panel with Used by and provenance. - Dailies' per-Take shortcuts (free space on NG Takes, delete failed Takes) call the same core actions, guards and confirmation. ### What the schema has to hold (for the build issues) - `rendition`: `purged_at`, the recorded size and hash, and `poster_blob`. - `rendition`: a missing state, or a missing flag computed when Storage opens. - Latent files: their own purged marker.
Sign in to join this conversation.
No description provided.