Repository navigation
Render Settings: save clips as ProRes 422 (new default), LT or 4444 beside HQ - #1049
Merged
Merged
Conversation
Three new main-video codecs (prores_422, prores_lt, prores_4444); prores stays HQ. Each profile learns its own size rate and borrows another profile's through their size ratio until it has one. A hint under the Codec picker says what each ProRes choice is for. Combine Clips compares the codec tag so mixed ProRes profiles are re-encoded, not stream-copied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Listed first in the Codec and finish-clips pickers. A missing or empty codec defaults to 422; a saved prores stays HQ and any other saved codec stays as it is. HQ's hint no longer calls it the default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release note: New: Render Settings can save clips as ProRes 422 (about 2/3 the size of HQ, now the default for new installs), ProRes 422 LT (about half) or ProRes 4444 (full colour detail, about 1.5x), with a line under the Codec picker saying what each is for. Existing settings keep their codec.
What changed
Three new Render codecs beside ProRes 422 HQ, in Render Settings' Codec picker and in the three "When a batch finishes" pickers. ProRes 422 is listed first:
prores_422prores_ks -profile:v standard -pix_fmt yuv422p10le.movprores-profile:v hq -pix_fmt yuv422p10le.movprores_lt-profile:v lt -pix_fmt yuv422p10le.movprores_4444-profile:v 4444 -pix_fmt yuv444p10le(no alpha).movDefault for new installs is ProRes 422; saved settings keep theirs.
"render_codec": "prores"in an existing settings file, preset or autosave still means HQ (RenderCodec::ProReskeeps its name and id), and any other saved codec stays as it is. Only a missing or empty value gets 422:default_render_codec()(serde default and freshAppSettings),RenderConfig::default(),RenderCodec::from_str_id's fallback for an empty or unknown id, and the JS fallbacks (render_pane.js,settings_sync.js,finish_clips.js,render_presets.js). No settings migration: nobody's existing renders change size without choosing to.HQ's
-profile:v 3is now writtenhq: the same profile. The HUD stream is untouched: always ProRes 4444 with alpha, whichever ProRes is picked.A one-line hint under the Codec picker (
studio/src/codec_hint.js) that changes with the selection, for the four ProRes choices only:Space reservation: each profile learns its own bytes per frame (its own
RateKey). Until one has finished a render at a frame size, it borrows another ProRes profile's measured rate through their size ratios (HQ 1.0, 422 0.67, LT 0.47, 4444 1.5, inRenderCodec::prores_profile) instead of falling back to the raw-frame estimate. Other codecs and the HUD stream don't borrow.Combine Clips now also compares the codec tag (
apch/apcn/apcs/ap4h), so HQ and 422 clips, which share codec and pixel format, are re-encoded rather than stream-copied into one file that would label every frame with the first clip's profile. This matters more now that new installs render 422 and older clips are HQ.docs/features.md: the codec table (422 as default) and a paragraph on which ProRes to pick.Measurements
300 fps 2560x1440 capture (
local\review-images\prores-compare\), one recorder (m00cat), one clip:No visible difference at 3x zoom between HQ, 422 and LT. Apple's target rates give the same ratios (147/220 = 0.67, 102/220 = 0.46, 330/220 = 1.5). On a generated
testsrc22560x1440 Ut Video clip the ratios were 0.74 / 0.58 / 1.39: synthetic footage, so the defaults follow the real capture.Tests
config::tests::old_prores_values_still_mean_hq,each_prores_choice_has_its_own_profile,test_from_str_id_unrecognized_falls_back_to_prores_422(also empty id andRenderConfig::default), the string-id and serde round trip over every codec;settings_manager::tests::a_fresh_install_renders_prores_422_and_a_saved_codec_staysand the legacy-file test (norender_codec→ 422);renderer::tests::each_prores_choice_renders_with_its_own_profile(FFmpeg args per profile),a_prores_profile_borrows_another_profiles_rate_until_it_has_its_own;combine::testsHQ vs 422 not stream-copied;codec_hint.test.js; JS fallbacks infinish_clips.test.jsandrender_presets.test.js; an e2e check inrender-studio.spec.jsthat 422 is first, the hint follows the picker and HQ's hint no longer says "default".#[ignore]d (needs FFmpeg):renderer::tests::prores_choices_render_with_their_profilegenerates a 2560x1440 300 fps Ut Video take with a wav, renders it throughrun_render_jobwith each ProRes choice, and checks ffprobe'sprofile=(HQ / Standard / LT / 4444). Run locally withDOD_FFMPEG=<ffmpeg.exe>: passed, all four profiles as expected.cargo test --locked --workspace,rustup run 1.98.1 cargo clippy --workspace --all-targets -- -D warnings,rustup run 1.98.1 cargo fmt --all --check: all pass (no failures; clippy clean).npm run test:unit: 914 passed. e2erender-studio,finish-clips,render-presets,app-boot: 71 passed.Other open PRs touching the same files
#716 (renderer.rs, render_manager.rs, index.html, strings.js, features.md), #874 (index.html, strings.js, features.md), #881 and #832 (strings.js, features.md), #879, #760, #425 (strings.js). None touch the codec lines.
Decisions
prores_422,prores_lt,prores_4444.🤖 Generated with Claude Code