Skip to content

Export: use conformant ProRes alpha run termination - #2225

Merged
skylartaylor merged 4 commits into
storytold:mainfrom
skylartaylor:fix/prores-alpha-compatibility
Nov 5, 2026
Merged

skylartaylor merged 4 commits into
storytold:mainfrom
skylartaylor:fix/prores-alpha-compatibility

Conversation

@skylartaylor

@skylartaylor skylartaylor commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

Updates the direct ProRes encoder dependency to the FilmCraft alpha-run fix. The remaining FilmCraft codec pins stay unchanged. ProRes 4444 and XQ movies previously omitted the run after a final singleton alpha difference, producing files accepted by FFmpeg but rejected by Apple’s decoder.

Adds an export regression that renders a synthetic PNG through the real MOV pipeline and checks the stored alpha codewords for both profiles, straight/premultiplied alpha, and both motion-blur settings. It fails with the old dependency pin and passes with the new one, without requiring an external decoder.

Depends on storytold/filmcraft#2991 at e4be1577443c9c8b56ff605beafe6186af4a7254. The pin resolves through the public upstream Git URL. If FilmCraft is squash-merged, refresh this pin to its landed commit before merging this PR. Related: #293 and #2119. The existing filename fix and GPU concurrency limit are preserved.

Validation:

  • The export regression was run red with the old pin and green with the new pin.
  • All eight animated HD exports from the pinned GPU build decode all frames in AVAssetReader and strict FFmpeg checks.
  • The source project attached to ProRes 4444 with alpha: QuickTime freezes mid-clip on frames with alpha content (RGB-only renders play fine) #2119 also renders through the patched CLI in 4444 and XQ: all 180 frames decode natively, strict FFmpeg checks pass, and no final alpha run is missing. Peak sampled process RSS was below 741 MB.
  • Full cargo xtask ci: 3,675 tests passed, plus formatting, Clippy, PDF dependency policy, layers, assets, and the 32-crate WASM check. Local release LTO was disabled and codegen units set to 16.

Resolve itself and the original M1 Pro/macOS 15.8 setup remain unverified. No claim is made that this alpha syntax change fixes the separate historical memory-freeze report.

Summary by CodeRabbit

  • Bug Fixes

    • ProRes 4444 and 4444 XQ exports now preserve the required final alpha run, improving compatibility with native macOS decoding.
  • Tests

    • Added export coverage across ProRes profiles, alpha modes, and motion-blur settings.
    • Updated H.264 output checks for the latest encoder output.
  • Documentation

    • Updated format-parity notes and roadmap details. Resolve playback confirmation remains pending.

Pin the direct ProRes encoder to FilmCraft e4be1577 while preserving all other codec pins. Add a full MOV export regression for final alpha runs across both 4444 profiles, alpha modes and blur settings.
@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The FilmCraft workspace dependencies now use a new revision. Export tests check ProRes alpha payloads across profiles, alpha modes, and motion-blur settings, and update the pinned H.264 output. Roadmap and parity records document the conformance check and pending Resolve verification.

Changes: ProRes alpha conformance

Layer / File(s) Summary
Encoder update, payload regression, and conformance records
Cargo.toml, crates/export/tests/it/roundtrip.rs, crates/export/tests/it/movie_bytes.rs, ROADMAP.md, docs/file-format-parity.md
FilmCraft dependencies now reference a new revision. The ProRes regression checks stored alpha bytes for 4444 and XQ profiles, straight and premultiplied alpha, and motion blur enabled and disabled. The pinned H.264 output size and hash are updated. Project records describe native macOS decode validation and pending Resolve confirmation.

Estimated code review effort: 2 (Simple) | ~12 minutes

Change: Bug fix · Severity of issue fixed: Medium

Possibly related issues

  • storytold/effectcraft issue 2119 reports ProRes 4444 alpha exports freezing in Apple’s player. This change tests ProRes alpha payloads and records native macOS decode validation, but does not establish that every reported playback condition is resolved.

Suggested reviewers: aiongg

Merge Risk: Minimal · up to 7e330

The encoder update and regression coverage show no identified issue requiring a change before merge. Resolve playback remains unverified, but that alone does not establish a defect.

Pre-merge checks: Passed 5

Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly describes the main change: conformant ProRes alpha run termination in exports.
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 1 functions across 2 files. (3 skipped: 3 unsupported.)

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 2a2019e and 7e33003.

Files ignored due to path filters: 1

  • Cargo.lock is excluded by !**/*.lock
Files selected for processing: 5

  • Cargo.toml
  • ROADMAP.md
  • crates/export/tests/it/movie_bytes.rs
  • crates/export/tests/it/roundtrip.rs
  • docs/file-format-parity.md
Files skipped from review as they are similar to previous changes: 1

  • docs/file-format-parity.md

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

@bflatastic

Copy link
Copy Markdown
Member

Thanks @skylartaylor! storytold/filmcraft#2991 was squash-merged as d5ead4ba, so e4be157 only exists on the PR ref. Main has also moved every FilmCraft pin to 09aaf9b (#1701) and the export tests into crates/export/tests/it/roundtrip.rs. Could you:

  1. Rebase onto main.
  2. Repin filmcraft-prores in Cargo.toml to d5ead4ba (or bump the whole FilmCraft set) and regenerate Cargo.lock with cargo.
  3. Move the regression test into tests/it/roundtrip.rs.

If the new rev changes 4:2:2 output, prores_movie_bytes_are_pinned in tests/it/movie_bytes.rs will need re-pinning, with the reason stated in the PR.

…ound-trip regression into roundtrip.rs

All FilmCraft deps pinned to d5ead4ba (squash merge of filmcraft storytold#2991). H.264 pinned movie bytes move 104341 -> 104342: only the encoder version string in the SEI (0.8.0 -> 0.12.0) and five size fields change.
@skylartaylor

Copy link
Copy Markdown
Member Author

Merged current main and repinned FilmCraft to the merged ProRes alpha fix (d5ead4ba from filmcraft #2991), together with the other FilmCraft dependencies. The regression now lives in crates/export/tests/it/roundtrip.rs. The pinned H.264 bytes grow by one byte: the encoder's version string in the SEI went from 0.8.0 to 0.12.0, and the rest of the stream is byte-identical. ProRes 4:2:2 bytes are unchanged. Local gates pass apart from the GPU posterize parity test, which fails the same way on main on this adapter.

@skylartaylor
skylartaylor merged commit a408d99 into storytold:main Nov 5, 2026
7 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