Version 3.6.1
Crop UX, Audio Transcription, Caption Cleanup
Fixes for crop framing, audio-overlay transcription, batch captions, and caption cleanup controls.
Small follow-up to v3.6.0 cleaning up four bug reports gathered after release — crop mode framing, audio-overlay transcription on trimmed clips, the redundant “transcribe missing / re-transcribe all” button pair, and the inability to remove previously generated captions.
Bug Fixes
- Crop mode shows the wrong frame for trimmed clips — opening crop on a
split or trimmed clip was extracting from the original source’s t=0, so cropping
10 s into a clip still showed the first frame of the full file. Crop mode now
converts the timeline playhead into source time via
trim.startTime + (playhead - overlay.start), and when the playhead is outside the overlay it falls back to the first stable frame of the active trim range rather than the source’s frame 0. New pureresolveCropFrameSeekTimehelper with full test coverage. - Crop completion jumped playback back to the start — exiting crop mode now snapshots the playhead on entry and restores it on exit (paused), instead of leaving the player parked at the cropped overlay’s start.
- Transcription of trimmed audio overlays sent the full source file — the
trim extraction path only read
source.trim(the video-overlay location). Audio overlays store trim onoverlay.trim, so cuts on audio clips were transcribed in full.transcribeOverlaynow acceptsVideoOverlay | AudioOverlayand resolves the trim from the right field. - Multi-select transcription panel showed both “transcribe missing” and
“re-transcribe all” even when one of them was contextually meaningless. The
panel now exposes a single primary action that adapts to the selection state
(
Transcribe N selected/Transcribe N missing/Re-transcribe all N), with re-transcribe and delete moved into a collapsible “More transcription actions” disclosure. - Cannot remove generated captions — added a destructive “Delete captions
for selected clips” action in the multi-overlay panel, with confirmation
dialog. Re-transcribing now also auto-removes any legacy
sourceOverlayId-linked text overlays for the source so old captions cannot linger beside the fresh ones.
Improvements
- Crop canvas breathing room — added a responsive
clamp(20px, 5vmin, 56px)inset so the cropped frame has visible padding against the canvas chrome. - Pooled video elements are now full-frame —
MediaPoolandPoolVideopin the underlying<video>toposition: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain, fixing intermittent half-height frames when a slot mounted before a per-slot media style was applied. - “Generate Captions” sidebar — untranscribed-clip detection now reads from
segmentsByOverlay(the post-3.6.0 source of truth) and only falls back to the legacysourceOverlayIdlinkage for projects created before the segment migration.
Tests
- 4 new cases in
cropMath.test.tscovering inside-overlay, outside-overlay, no-trim, and clamp-to-trim-end paths forresolveCropFrameSeekTime. - New
transcribeOverlaycases for audio-overlay trim extraction and legacy- overlay cleanup before storing fresh captions. - New
MediaPoolcases asserting the full-frame video styles survive recycle.
