Currently there is no visual feedback when the user changes framing, rotation, brightness, contrast, or saturation — the only way to see the result is to run a full FFmpeg export. This makes iteration extremely slow.
What to build
Add a canvas-based live preview that updates instantly as the user changes settings:
- Use the HTML5
<video> element as the source and draw frames onto a <canvas> using ctx.drawImage()
- Apply CSS filters (
brightness(), contrast(), saturate()) to the canvas for color adjustment preview
- Apply CSS
transform: rotate() for rotation preview
- Apply canvas clip/letterbox logic to preview the selected aspect ratio / framing (fit vs fill)
- The preview should update on every
requestAnimationFrame while the video is paused, and continuously while playing
Files to modify
src/components/VideoPreview.tsx — replace or augment the <video> element with a <canvas> overlay
src/hooks/useVideoEditor.ts — pass the current recipe to the preview component
Acceptance criteria
Screen Recording Required
Your PR for this issue must include a screen recording showing the feature working on your local machine (bun run dev → http://localhost:3000). PRs without a recording will not be merged.
See CONTRIBUTING.md for how to record.
Currently there is no visual feedback when the user changes framing, rotation, brightness, contrast, or saturation — the only way to see the result is to run a full FFmpeg export. This makes iteration extremely slow.
What to build
Add a canvas-based live preview that updates instantly as the user changes settings:
<video>element as the source and draw frames onto a<canvas>usingctx.drawImage()brightness(),contrast(),saturate()) to the canvas for color adjustment previewtransform: rotate()for rotation previewrequestAnimationFramewhile the video is paused, and continuously while playingFiles to modify
src/components/VideoPreview.tsx— replace or augment the<video>element with a<canvas>overlaysrc/hooks/useVideoEditor.ts— pass the current recipe to the preview componentAcceptance criteria
requestAnimationFrameScreen Recording Required
Your PR for this issue must include a screen recording showing the feature working on your local machine (
bun run dev→ http://localhost:3000). PRs without a recording will not be merged.