Repository navigation
feat(core): audible videos in preview web audio, audio groups, meters and carve (2/8) - #4814
Conversation
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
At f7bcd36fd38821885a46a01eb5edb3df740f6e44 against #4813’s exact head, the new audible-video Web Audio/group path has two preview mismatches: ramped grouped videos bypass the group processor despite export applying it, and video-only native audio turns on meters that read silence. Both concrete combinations are inline. The changed-comment check is also red on an introduced 46-line block in webAudioRoute.ts; shorten it or follow the repository’s explicit exception rule. Other reviewed audio group/export paths and CI checks looked sound, but no live-browser audio comparison was run. No merge/release action. — Jerrai
| (Number.parseFloat(el.dataset.volume ?? "") > 1 || | ||
| el.hasAttribute("data-fx-chain") || | ||
| el.hasAttribute("data-automation") || | ||
| el.hasAttribute("data-audio-group"))); |
There was a problem hiding this comment.
This newly routes grouped audible videos toward Web Audio, but the schedule pass at init.ts:4813 still continues for every rate-automation lane before media-element capture. A ramped video in a group therefore plays native audio without that group's fader/mute/FX in preview, while the export collector now attaches the group and rate curve (audioMixer.ts:610–623,645–651). Please handle this combination or disallow it consistently, and add a ramped-group preview/export regression.
| /** The meters appear only for a project with at least one audio clip, audible video or group. */ | ||
| export function hasProjectAudio(elements: readonly TimelineElement[]): boolean { | ||
| return elements.some( | ||
| (el) => isAudioTimelineElement(el) || el.hasAudio === true || el.audioGroup !== undefined, |
There was a problem hiding this comment.
This enables meters for a project containing only a plain audible video, but at unity with no FX/group that video deliberately remains on native output (init.test.ts:5287–5294), not a Web Audio source. WebAudioTransport.readLevels() reads only the master/group taps, so the visible meters sit at zero while the video is audibly playing. Please either meter native video output too or avoid advertising a meter for that unsupported route; test a video-only unity-gain preview.
f7bcd36 to
f115049
Compare
Edit accuracy: 951 passing here, 951 on the base branchThe gate passes. Quarantined, measured but not gated (2)
|
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
Re-reviewed exact f11504920c2b6e07446db55da57682ebd305b405. The earlier audio-code holds are repaired: rate-ramped grouped media now reaches Web Audio capture before the decoded-buffer-only rate restriction, and runtime routing plus Studio meter visibility share the eligibility rule, so a plain native-unity video no longer advertises unreadable meters. New regressions exercise the ramp/group capture and meter/native branches. Comments and runtime checks are green; I found no remaining code blocker in this delta, but have not run a live preview/export audio comparison.
The required Studio/player Before/After capture check still fails, and no explicit per-PR evidence waiver has been routed. Accordingly I am not approving this revision; the prior CHANGES_REQUESTED decision remains until capture evidence or waiver is provided and the live head is rechecked. The stack's other holds remain separate. No merge/release action. — Jerrai
f115049 to
d195097
Compare
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
At exact d195097ec8d190218f2442fdc023347de3333700, the latest meter-visibility change uses the same Web Audio eligibility as the audible-video routing; the previous ramped-group and native-unity meter code holds were repaired on the predecessor. Current-head relevant tests, Comments and file-size checks ran green. I found no new code blocker in this bounded successor review. I am not approving: the Studio and player captures job ran and failed for missing Before/After visual evidence, with no per-PR waiver. My earlier CHANGES_REQUESTED review therefore still governs GitHub. Provide current-revision Studio/player captures or an explicit waiver; hosted test passes do not substitute for rendered audio/visual validation. No live playback, merge or release by this reviewer. — Jerrai
d195097 to
cd13d54
Compare
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
Reviewed #4814 at cd13d54b against stacked parent #4813 aefd6415. The prior audible-video Web Audio eligibility/preview-meter repair remains in the shared predicate; the three PR-scope blobs changed since my earlier tip include main’s GSAP duration-floor work alongside this routing. No new blocker found in those sampled paths. The required Studio/player Before/After captures check is still FAILED and no per-PR waiver is recorded, so no approval; the edit-accuracy and Comments checks are green. No local tests, playback or render. — Jerrai
cd13d54 to
71244f6
Compare
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
Re-reviewed this layer against the exact #4813 head. Its 44-file layer patch is blob-identical to the prior code-cleared revision across the rebase. Ramped grouped video is captured before the decoded-buffer-only rate restriction; meter visibility shares the Web Audio eligibility predicate, excluding native-unity video. The earlier changed-comment hold is also clear, and the capture check passes. This supersedes my earlier code hold, not any pending or failing CI merge gate. — Jerrai
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
71244f6 to
6147f6e
Compare
jerrai-bot-heygen
left a comment
There was a problem hiding this comment.
Re-pinned after #4813's squash to exact 6147f6ee9. Four-way comparison of the old approved parent→head and new main→head reports the same 44 changed paths with byte-identical per-file patch hunks. The new main and old parent have identical blobs for all 44 layer paths, so this rebase neither lost a layer edit nor reconciled a concurrent edit on those paths. The audible-group/Web Audio meter fix remains in this layer. Capture check succeeded; remaining CI is a separate merge gate. This is a code approval only, not a merge or release authorization. — Jerrai
…ector Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eview An audible <video> joins the Web Audio schedule, hidden-toggle and group-capture passes when it needs a gain el.volume cannot express: a boost above unity, an fx chain, automation, or an audio group. A plain audible video at unity stays on native output. The clock master stays audio-only; a video whose capture fails stays on native output (never decoded, never failed closed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
resolveAudioGroups, audioGroupOf, group render ids, the engine mixer and the audio_group_no_members lint rule accept an audible <video>. A hidden group drops its video members from the mix; muted videos stay inert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
EditableElementFacts gains hasAudio; studio and sdk derive it from muted and data-has-audio. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drops the video refusal; grouping and group audition count audible videos. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Muted videos that declare data-has-audio are no longer mixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…utout sound Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…review A rate lane skipped Web Audio entirely, so a ramped video or audio clip in a group played native output without the group's fader, mute or FX while the export applied them. Only the decoded-buffer fallback cannot follow a rate curve; the media-element capture can, so the skip now guards that fallback. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A plain audible video at unity stays on native output, which the meters cannot read, so it no longer advertises them. The runtime's join rule and the meter gate now share audibleVideoNeedsWebAudio (core/audible-video). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6147f6e to
3c9913e
Compare
Summary
An audible
<video>now takes part in the audio engine the same way an<audio>does: it can join audio groups (preview and render), gets the audio fx section, shows the meters, and can be a carve voice.Changes
isAudibleVideoElementpredicate (@hyperframes/core/audible-video). Onlydata-has-audio="true"counts as audible in the runtime and lint.<video>into Web Audio (extending fix(core): a video's sound plays at its boosted volume in the preview #4746'sjoinsWebAudio) when its volume is > 1 or it hasdata-fx-chain,data-automationordata-audio-group. A plain video at unity is not routed.Testing
Static gates on the layer tip:
bun install,bun run build,tsc --noEmitfor every touched package (0 errors),oxlintandoxfmt --checkon files changed vs main (clean),gen:skills-manifest --check(in sync),scripts/comment-ratchet.mjs(ok).libaom-av1failure as on main.Notes
Part of the audio-on-video stack. See the bottom PR for the overview.
🤖 Generated with Claude Code
Before
After
Design panel on a video with sound: Audio FX row added.