Repository navigation
feat(engine): render sets a keyframe interval and a peak bitrate cap - #6444
Conversation
There was a problem hiding this comment.
Verdict: REQUEST CHANGES · 1 blocker · 1 important · 0 nits · head 6d4ac59c
The engine layer is correct. -maxrate/-bufsize come after every -i in both builders, nothing else writes them, and the 195 engine encoder tests pass locally, including the real-encode VBV and keyframe tests. The blocker is the comment ratchet. ↓ inline
- important (scope): the body says the CLI flags, producer/Lambda config, docs and Lambda chunk handling "follow in this same PR". The merge loop fires on the first approval, so approving this head merges only the engine half, under a title ("renders can set…") that no render can use yet. Either push the wiring before the next approval, or retitle this as the engine layer and open the rest as its own PR.
— Claude
Edit accuracy: accurate 271 (base branch 271), smooth 118 of thoseThe gate passes. Quarantined, measured but not gated (0) Unstable (1)
|
There was a problem hiding this comment.
Verdict: REQUEST CHANGES — 1 resolved, 1 open, 2 new · 6d4ac59 → 34febe1
The producer wiring is correct, and deliveryRender.integration.test.ts passes locally with Chrome and ffmpeg. Open: the scope item from last round. This head adds no CLI flags and no renderRequest/server, Lambda or distributed fields. The body still says "not wired yet… this head should not merge on its own", and that text would land in the squash commit. Either push that wiring or narrow the body and title to engine + producer RenderConfig. ↓ 2 inline
— Claude
a739952 to
b85e7f8
Compare
b85e7f8 to
bf04b76
Compare
bf04b76 to
b426131
Compare
There was a problem hiding this comment.
Verdict: REQUEST CHANGES — 0 resolved, 1 open, 2 new · bf04b76 → b426131. Still open: CLI flags and docs, which per the author land on this PR. The request, producer-server, Lambda-plan, chunk and CFR wiring is correct as far as I traced it. encoder.json feeds planHash, so the new locked fields re-key plans without a separate pin. ↓ 2 inline
— Claude
…ing, pin reviewed PR heads - The ad4d3fa entry said --strict "returned to green"; its own scope note (and the live checker) say it is red because upstream moved on. Say so. - Two entries were both titled "2026-10-27(續)"; the CI flake entry is now "2026-10-27(CI 紅燈)" and UPSTREAM.md names the entry it points to. - The open-PR table records the head SHA each PR had at review time (criterion 8 step 1), reconstructed from PR timeline force-push events, committer times and the diff stats the entry already recorded. heygen-com#6440 and heygen-com#6444 were force-pushed after review. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
b426131 to
74dceba
Compare
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
There was a problem hiding this comment.
Verdict: REQUEST CHANGES — 3 resolved, 0 open, 1 new · b426131 → 0e4f809. The code is ready, and CI and the 215 CLI + studio-server tests I ran locally pass. One new blocker, a body edit with no code change: the required Studio and player captures check fails ("the body has no Before/After heading") because packages/studio/vite.adapter.ts changed. There is nothing to capture (6 lines under packages/studio, no .tsx/.css/.html), so add a ## No visible change section saying the adapter only forwards render options. Then re-run the check.
— Claude
There was a problem hiding this comment.
Verdict: APPROVE — 1 resolved, 0 open, 0 new · 0e4f809 (no code change; the body now has ## No visible change and Studio and player captures passes. The earlier Windows engine-cli failure was the known chromeOrphans flake, and the re-run passes. All CI is green.)
0e4f809 to
1cb1548
Compare
…rate cap on every encoder path
… in the integration lane
…nterval and peak bitrate cap
… bitrate cap to the encoder
…itrate and --buffer-size
1cb1548 to
495e8fb
Compare
hyperframes renderandhyperframes lambda render(and render-batch) now take--keyframe-interval <seconds>,--max-bitrate <rate>and--buffer-size <size>, and Studio's render route accepts the same options. They reach the final MP4 encode, so delivery files need no second ffmpeg pass. Without the flags nothing changes.What changed
appendRateCapArgsis the one place that writes-maxrateand-bufsize; both encoder builders call it.keyframeIntervalToGopSizeturns seconds into frames at the render's fps.render/deliveryEncoder.tsvalidates the options up front and resolves them once for all four encoder paths. The segment-plan hash includes them only when set, so a cached segment is never reused across a different cap.utils/deliveryFlags.ts) for local render, Docker re-run,lambda renderandlambda render-batch. They apply to MP4 only and fail fast on other formats.POST /projects/:id/renderforwards the options to the job through one helper used by both the Vite and CLI adapters.docs/packages/cli.mdx,docs/guides/rendering.mdx,packages/cli/src/docs/rendering.mdand the two CLI skill references.What I measured
--keyframe-interval 2 --max-bitrate 300k: keyframes at 0, 2 and 4 s, 269,793 bytes.--format webm --max-bitrate 1Mis refused with a usage error before any frame is captured.deliveryRender.integration.test.ts) checks the same on a full render.What I did NOT exercise
Design calls
-maxrateplus-bufsizealongside CRF, so quality still sets the rate below the cap. The buffer defaults to twice the cap.No visible change
packages/studio/vite.adapter.tsonly forwards the render options to the job; no Studio screen, style or component changes.