fix(pipeline): trim picture-lock handles at the footage comp, not the template's SHOT layer
Deploy / deploy (push) Successful in 6m17s

Manipulating startTime/outPoint on previewComp's SHOT layer touched a
comp duplicated from the artist-authored template, whose slate/shot
timing relationship the build script doesn't own -- and it dropped the
slate frame in production. The trim now happens one level down, on the
private single-layer footage precomp this script fully controls;
previewComp's own sizing logic is untouched from before this feature
existed, since it already generalizes correctly to any shotComp
duration.

Also threads the picture-lock skip reason through to the export's
timeline, so a shot missing sequence timecodes or a matching picture
lock file is visible without digging into worker-machine logs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
twotalesanimation
2026-08-23 14:22:49 +02:00
parent 86962eb4bd
commit 67d8639861
3 changed files with 55 additions and 32 deletions
+8 -1
View File
@@ -303,6 +303,8 @@ export interface FinalizeInput {
};
renderStats?: { renderSeconds?: number; previewSeconds?: number };
media?: { width?: number; height?: number; frameCount?: number; fps?: number; fileName?: string };
/** Why the picture-lock trim/reference was skipped, when it was — surfaced on the export's timeline. */
piclockSkippedReason?: string | null;
}
/**
@@ -471,7 +473,12 @@ export async function finalizePreview(jobId: string, machineId: string, body: Fi
? " — review version media replaced"
: ` — review version created (${inheritedApproval ?? "PENDING_REVIEW"})`
: " — no preview media reported") +
(taskRenamed ? ` — task renamed to ${taskTitle}` : ""),
(taskRenamed ? ` — task renamed to ${taskTitle}` : "") +
(artifacts.piclockRefKey
? " — picture-lock reference built"
: body.piclockSkippedReason
? ` — picture lock skipped (${body.piclockSkippedReason})`
: ""),
},
{
...(versionId ? { versionId } : {}),