Skip to content

feat: add MOV (ProRes 4444) as transparent video output format - #224

Merged
miguel-heygen merged 4 commits into
mainfrom
feat/mov-prores-format
Apr 8, 2026
Merged

feat: add MOV (ProRes 4444) as transparent video output format#224
miguel-heygen merged 4 commits into
mainfrom
feat/mov-prores-format

Conversation

@miguel-heygen

@miguel-heygen miguel-heygen commented Apr 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds --format mov to the render CLI for ProRes 4444 transparent video output
  • ProRes 4444 with alpha is the industry standard for transparent video overlays, supported by CapCut, Final Cut, Premiere, DaVinci, and After Effects
  • WebM VP9 alpha technically works but is ignored by all major video editors — only browsers decode it
  • Adds MOV to the studio export dropdown alongside MP4 and WebM

Transparency format comparison

Format Codec Alpha Video editors Browsers File size
MOV ProRes 4444 Yes CapCut, Final Cut, Premiere, DaVinci, After Effects No (won't play in browser) Large (~5-40 MB)
WebM VP9 Yes None (shows black) Chrome, Firefox Small (~200 KB)
MP4 H.264 No All All Small

Note: ProRes MOV files do not play in Chromium browsers — they are an intermediate/editing format, not a delivery format. Use rotato.app/tools/transparent-video to verify transparency works correctly.

Changes

  • CLI: Add mov to --format validation, examples, and output path logic
  • Engine: getEncoderPreset() returns ProRes 4444 (yuva444p10le) for mov format; handle .mov in applyFaststart and muxVideoWithAudio; add pix_fmt to streaming encoder ProRes path
  • Producer: Treat mov like webm for alpha capture (PNG frames, screenshot mode, forceScreenshot)
  • Studio: Add MOV option to export format dropdown and render queue hook
  • Core: Add mov to studio API types, render route, and mime helpers
  • Tests: Add encoder preset tests for mov format (42 total, all passing)

Usage

hyperframes render --format mov --output overlay.mov

Test plan

  • pnpm build passes
  • pnpm --filter @hyperframes/engine test — 42 tests pass (2 new for MOV)
  • oxlint and oxfmt clean on all 12 changed files
  • End-to-end local render produces ProRes 4444 (yuva444p12le) with working alpha
  • Docker render with --format mov — ProRes 4444 confirmed via ffprobe
  • Studio dropdown shows MOV option in built JS
  • Transparency verified with rotato.app/tools/transparent-video

WebM VP9 alpha works in browsers but not in video editors (CapCut,
Final Cut, Premiere, DaVinci). Add MOV with ProRes 4444 as the
editor-compatible transparent video format — the industry standard
used by Remotion and professional pipelines.

- Add `mov` to CLI `--format` option alongside mp4/webm
- Wire ProRes 4444 (yuva444p10le) in getEncoderPreset for mov format
- Handle .mov in muxVideoWithAudio and applyFaststart
- Add ProRes pix_fmt to streaming encoder
- Treat mov like webm for alpha capture (PNG frames, screenshot mode)
- Add MOV option to studio export dropdown
- Add .mov mime type to file servers
- Add encoder preset tests for mov format

Usage: hyperframes render --format mov --output overlay.mov
Comment thread packages/cli/src/commands/render.ts Outdated
Comment thread packages/cli/src/commands/render.ts Outdated
Comment thread packages/core/src/studio-api/helpers/mime.ts
Comment thread packages/core/src/studio-api/routes/render.ts Outdated
Documents the --format mov option for ProRes 4444 transparent video,
format comparison table, authoring tips for transparent compositions,
and verification methods. Adds --format to the CLI options table.
Addresses review feedback — replace chained ternary format/extension
logic with FORMAT_EXT lookup maps across CLI, studio API, studio UI,
and render orchestrator.
Comment thread packages/core/src/studio-api/routes/render.ts Outdated
- Add missing -pix_fmt to chunkEncoder ProRes path (critical: alpha
  would silently be lost in non-streaming encode mode)
- Fix chunked concat using wrong extension for MOV chunks
- Add MOV to render listing filter, deletion cleanup, and ID regex
- Fix Content-Type for MOV renders (video/quicktime via shared helper)
- Add MOV to meta file path regex in studioServer and vite.config
@miguel-heygen
miguel-heygen merged commit 43e9252 into main Apr 8, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants