System Fonts & Timeline Polish
macOS system fonts, drag-and-drop track reordering, snapping-aware cuts, and timeline export fixes.
System Font Support for Captions and Text Overlays
Velocaption now lets you use any font installed on your Mac for captions and text overlays. The redesigned font picker features two tabs — Bundled (a curated collection) and System (every installed font, fully searchable) — so you can match your brand typography without importing font files.
System fonts work identically in the live preview and the final video export. During export, Velocaption automatically embeds the selected font file from the OS font store and serves it to the headless rendering engine, ensuring pixel-perfect fidelity between what you see and what you ship.
Cut-Line Snapping and Snapping Toggle
The B-key cut preview line now snaps to nearby overlay edges and the playhead when snapping is enabled, so every cut lands exactly where the guide shows. A new magnet button next to the Cut control (keyboard shortcut N) lets you toggle snapping on or off — disabling it skips all snap computation during drag, resize, and cut operations for maximum creative freedom.
Track Reorder via Drag-and-Drop
Timeline tracks can now be reordered by dragging the grip handle in the left panel header. Smooth spring animations powered by Framer Motion make the interaction feel natural, and a brief background flash on the track lanes confirms each swap. The visual stacking order in both preview and export updates automatically, so text overlays and captions share a unified z-index space you fully control.
Auto-Select After Transcription
When local AI transcription finishes — whether from a single clip, a multi-select, or the navbar “Generate Captions” action — all generated text overlays are auto-selected and the sidebar immediately shows caption controls with multi-edit, saving you an extra click on every captioning workflow.
Bug Fixes
- Overlay stacking order — track reorder now correctly updates visual stacking in both preview and export via a unified z-index space derived from
trackOrder - Stacked overlay interaction — z-index wrapper divs use
pointer-events: noneso overlays underneath a higher-stacked overlay remain draggable and resizable - Duplicate text overlay on add — the ”+” button in the text overlays sidebar no longer creates two overlays, thanks to re-entrancy and dedup guards
- Canvas text measurement for system fonts — dynamic
@font-facerules withlocal()source are injected someasureText()uses the correct font metrics instead of falling back to the browser default - Transcription overlay font in export — per-overlay font family is now respected in the export path instead of always using the global caption style font
- Word chip layout shift — readonly and editable word chips now share identical padding and border dimensions, eliminating the visual jump when entering edit mode
- React Error #310 crash — switching between overlay types no longer triggers “rendered more hooks than during the previous render”
- Audio silent after cutting video overlay — the volume envelope now computes overlay-relative frames instead of source-file frames, fixing permanent mute after a trim offset
- Fade overlap on short overlays — fades are dropped entirely when the overlay is too short to fit them; default fade duration reduced from 150 ms to 70 ms
- Track duplication on project reload — the backfill effect is now gated on project loading state to prevent doubled tracks
- Export duration mismatch — exports use the timeline duration (accounting for edits) instead of the source file duration
Refactoring
- Centralized font resolution via
font-resolver.tswithparseFontReference()andresolveFontFamily()replacing all scatteredsys:prefix handling precomputeTextLayoutuses afontSourcefield in its params object instead of threading a separate string through multiple call layers- All font resolution points in export components are marked with
EXPORT PARITYcomments to prevent regressions - Track control buttons migrated to shadcn
Buttonwithvariant="ghost" size="icon" - Simplified pipeline loading screen with a clean spinner and renamed phase labels for clarity
