- Expanded useVideoDurations to detect both form-sourced segments AND
editable-slot video fields inside content scenes
- Wired videoDurations into ProductionForm (getTemplateDuration,
compileExpressToTimeline, LivePreviewCanvas, ExportModal)
- LivePreviewCanvas now accepts videoDurations prop
- Simplified getTemplateDuration/compiler: any scene with a known
video duration uses it, regardless of segmentSource type
- A 33s uploaded video now creates a 33s timeline, not 5s
1. Audio/Video sync: During playback, let the browser handle media naturally
and only force-seek when drift > 250ms. Prevents audio glitching caused
by setting currentTime 30x/sec. When paused/scrubbing, sync precisely.
2. Blob URLs → Server uploads: All media uploads (BrandTabMedia, SceneFieldEditor,
TemplateFieldInput) now POST to /api/upload and use persistent server URLs
instead of blob: URLs that vanish on refresh.
3. Dynamic duration: Added useVideoDurations hook that probes actual video
durations from uploaded form videos. getTemplateDuration and
compileExpressToTimeline now accept videoDurations to override static
durationSeconds for form-sourced scenes.
- Cleaned Electron main.ts: removed Remotion bundle path, compositor path, and predownloadBrowser()
- Set BRADLY_SERVE_URL from Express port for headless rendering
- Cleaned GlobalSettingsPanel: removed Remotion-specific frame capture code
- Removed stale remotion:bundle script from package.json
- Zero Remotion dependencies, imports, or functional code remain