feat(pipeline): skip the preview build and inherit the previous one
Deploy / deploy (push) Successful in 7m8s

Some exports are deliberately framed differently from their review —
unscaled or un-punched-in EXRs — and a preview rebuilt from those frames
would be the wrong picture. The previous export's MOV is the correct one.

skipPreview renders the EXRs and goes straight to READY_FOR_QC. Available
at Queue Export (a "No preview" checkbox in the panel, E1 field) and as an
option when overriding a validation failure.

The inheritance is as important as the skip: deliveryMovPath, the review
MP4, the thumbnail and the Version are carried over from the newest
earlier export of that shot which has them. Without it the delivery
builder — which takes its MOV from deliveryMovPath — would package EXRs
with no MOV at all. Where there is nothing to inherit, the export still
reaches QC and the timeline says it has no review media.

QC is untouched by any of this: a skipped preview still needs a human
pass before the export can be delivered.

Panel 2.3.0. Adds migration 20260814000000_export_skip_preview.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
twotalesanimation
2026-08-14 11:28:14 +02:00
parent e66e4868ea
commit 4642ecb11f
12 changed files with 180 additions and 20 deletions
@@ -0,0 +1,5 @@
-- Exports that render EXRs without building a preview, inheriting the previous
-- export's review media (unscaled / un-punched-in deliverables).
-- AlterTable
ALTER TABLE "exports" ADD COLUMN "skipPreview" BOOLEAN NOT NULL DEFAULT false;
+6
View File
@@ -877,6 +877,12 @@ model Export {
vfxScope String? @db.Text
submissionNote String? @db.Text
/// Render the EXRs but build no preview, inheriting the previous export's
/// review media instead. For an export whose framing differs from the review
/// framing — unscaled or un-punched-in plates — the earlier MOV is the
/// correct preview, and rebuilding it from these EXRs would be wrong.
skipPreview Boolean @default(false)
submittedById String? // resolved User, else null
submittedByName String? // free text from panel config as fallback
supersededById String? // newer Export that replaced this one