Skip to content

fix(cli): the render header names the quality preset and CRF it encodes with - #7697

Merged
miguel-heygen merged 1 commit into
heygen-com:mainfrom
wonjangcloud9:fix/render-header-quality
Nov 14, 2026
Merged

miguel-heygen merged 1 commit into
heygen-com:mainfrom
wonjangcloud9:fix/render-header-quality

Conversation

@wonjangcloud9

Copy link
Copy Markdown
Contributor

Context: I've been using HyperFrames every day for the past two weeks to make Korean Shorts and long-form videos, and it's been great to work with. This PR is one of a batch of fixes for things I ran into along the way, so you'll see several PRs from me at once — sorry for the pile-up, and thanks for your patience. Each one is reproduced on current main, independent of the others, and can be reviewed, merged or closed on its own.

What

The settings line hyperframes render prints before it starts now names the --quality preset that was asked for and the CRF or bitrate in effect, instead of the internal encoder tier:

Command main this branch
render (default) 30fps · standard · auto workers (12 cores usable) 30fps · looks (CRF 16) · auto workers (12 cores usable)
render -q delivery 30fps · high · … 30fps · delivery · …
render --crf 23 30fps · standard · … 30fps · looks (CRF 23) · …
render --video-bitrate 10M 30fps · standard · … 30fps · looks (10M) · …
render -q draft 30fps · draft · … 30fps · draft · … (unchanged)

Why

Since #3927 the default is looks, i.e. the standard encoder tier with CRF 16 (QUALITY_ALIASES in packages/cli/src/commands/render/plan.ts). The header printed plan.quality, which is the tier, so every default render announced itself as standard. In practice: 8-minute long-form renders at the default came out at 2.4–2.6 GB (~40 Mbps) against 226 MB for -q draft, and the render's own log called that run "standard quality", which sent the user looking for why "standard" was so large rather than at the CRF 16 preset that --help and docs/packages/cli.mdx describe. The default itself is documented and deliberate; only the label was wrong.

Related work

How

  • RenderPlan carries qualityPreset, the --quality name as given (looks when omitted), next to the existing quality tier.
  • present.ts prints qualityLabel(plan): the preset name, plus (CRF n) when a CRF is in effect (the looks default or --crf) or (bitrate) with --video-bitrate. MOV keeps the bare preset name, as it takes no CRF.
  • Nothing else reads the label; the encoder settings, telemetry and the @hf-progress lines are unchanged. No doc page shows this line, so there is no doc text to update.

Test plan

  • New packages/cli/src/commands/render/present.test.ts: builds a plan with createRenderPlan and checks the printed settings line for the default, draft, standard, delivery, --crf 20 and --video-bitrate 10M. On main's plan.ts/present.ts (fix stashed) 4 of the 6 cases fail, e.g. expected ' 30fps · standard · 2 workers' to contain '30fps · looks (CRF 16) · 2 workers'. With the fix all 6 pass; src/commands/render/ 79 tests pass.

  • Real CLI on a 9 s 1080x1920 project:

    # main
       30fps · standard · auto workers (12 cores usable)
       3.0 MB · 9.0s video · rendered in 8.9s
    # this branch
       30fps · looks (CRF 16) · auto workers (12 cores usable)
       3.0 MB · 9.0s video · rendered in 8.5s
    # this branch, -q draft / -q delivery / --crf 23
       30fps · draft · …            1.6 MB
       30fps · delivery · …         3.3 MB
       30fps · looks (CRF 23) · …   1.7 MB
    
  • Gates: oxlint / oxfmt clean, fallow audit --base origin/main no issues, comment ratchet at or under share, lefthook pre-commit (format, fallow, typecheck, cli-process-ownership) passed.

…es with

The settings line printed the encoder tier, so the default render said
"30fps · standard · …" while it encoded the looks preset at CRF 16, and
-q delivery said "high". A long-form render that came out at ~40 Mbps
read as "standard quality" in its own log.

The line now prints the --quality name as asked for and the CRF or
bitrate in effect: "looks (CRF 16)" by default, "looks (CRF 20)" with
--crf 20, "looks (10M)" with --video-bitrate 10M, "draft", "delivery".

Co-Authored-By: Claude Opus 5.5 <[email protected]>

@miguel-heygen miguel-heygen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified at 1048d2d: the bug reproduces on main, and the new tests fail without the fix and pass with it. Required CI is green.

@miguel-heygen
miguel-heygen added this pull request to the merge queue Nov 14, 2026
Merged via the queue into heygen-com:main with commit 2f31cc1 Nov 14, 2026
84 checks passed
@heygengenesis heygengenesis Bot mentioned this pull request Nov 14, 2026
1 of 2 tasks
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