mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-04 07:19:52 +00:00
A music bed came out carved twice. The `music` bus carried three
`fromCarve` peaking filters against `voiceover`, and its one member clip
`bgm` carried six of its own — the bed ran through both. Same on the SFX
side: the `sfx` bus plus `sfx-pan-2`.
**The bus classified as a bed.** `useFxCarve` is shared — a group's rack
reaches it too (`propertyPanelAudioFxGroup.tsx`, and the comment there
says so) — and `carveBedRoles` reads `data-label` so that a name living
outside a filename still counts. A bus labelled "Music bed" therefore
read as music: `couldBeBed` offered it the control and `autoBed` wrote
one without being asked, entirely independently of the member clip that
had already done the same. Nothing caught the collision, because the only
guard, `carverAgainst`, asks "is somebody naming ME as a source" — never
"is my own bus, or my own member, already carved".
**And a bus cannot carve properly anyway.** The level half of the
analysis measures the bed's own audio against the voice, read from
`element.getAttribute("src")`. A bus has no `src`, so `bedBuffer` was
null, `duck` was empty, and every bus carve was the spectral half alone:
filters and no level match. That is exactly the shape found in the file —
three peaking nodes and no gain node on the bus, five and a gain on the
clip.
So `carveBedRoles` now refuses a bus outright, both halves: `couldBeBed`
false alone would still leave `autoBed` free to fire off the label, which
is the half that wrote these. An already-configured bus carve still shows
its module (`carve !== null`), so it can be switched off rather than
becoming unreachable — the same escape hatch a38785003 kept.
`audio_group_carve_attr` names what is already written down, since the
Studio fix cannot unwrite it. Warning, beside `audio_group_timing_attrs`,
which is the same shape of mistake: an attribute a bus has no use for.
The skill has said "a carve stays on the clip" since the bus was
documented; it now says why, and says not to wrap a single clip in a bus
at all — with the one real exception, which is wanting a
composition-time automation clock.
Both guards mutation-checked: dropping the tag check fails the Studio
test, and `if (false)` in place of the attribute check fails both quiet
cases.
86 lines
1.7 KiB
JSON
86 lines
1.7 KiB
JSON
{
|
|
"source": "heygen-com/hyperframes",
|
|
"skills": {
|
|
"embedded-captions": {
|
|
"hash": "1c02f679a329bce7",
|
|
"files": 138
|
|
},
|
|
"faceless-explainer": {
|
|
"hash": "81423e16a3e2806d",
|
|
"files": 24
|
|
},
|
|
"figma": {
|
|
"hash": "4f524b4962bd8d7c",
|
|
"files": 2
|
|
},
|
|
"general-video": {
|
|
"hash": "16898c02677d09bc",
|
|
"files": 4
|
|
},
|
|
"hyperframes": {
|
|
"hash": "5be130da8d7ff59e",
|
|
"files": 17
|
|
},
|
|
"hyperframes-animation": {
|
|
"hash": "67d23c9507ebb1e8",
|
|
"files": 121
|
|
},
|
|
"hyperframes-audio": {
|
|
"hash": "037e080729140b19",
|
|
"files": 6
|
|
},
|
|
"hyperframes-cli": {
|
|
"hash": "3fa884269c43d7df",
|
|
"files": 11
|
|
},
|
|
"hyperframes-core": {
|
|
"hash": "74b9841f63c8f405",
|
|
"files": 20
|
|
},
|
|
"hyperframes-creative": {
|
|
"hash": "87bc09ec744313c8",
|
|
"files": 78
|
|
},
|
|
"hyperframes-keyframes": {
|
|
"hash": "6bc62531ecea9a52",
|
|
"files": 3
|
|
},
|
|
"hyperframes-registry": {
|
|
"hash": "d6dfcc8ceb7c8178",
|
|
"files": 12
|
|
},
|
|
"media-use": {
|
|
"hash": "1b0ce647f5c7df95",
|
|
"files": 152
|
|
},
|
|
"motion-graphics": {
|
|
"hash": "69dc088b8e0d22fe",
|
|
"files": 23
|
|
},
|
|
"music-to-video": {
|
|
"hash": "0c04f6ed00e90077",
|
|
"files": 132
|
|
},
|
|
"pr-to-video": {
|
|
"hash": "bacdbbd868cd84a1",
|
|
"files": 30
|
|
},
|
|
"product-launch-video": {
|
|
"hash": "ff7c30295b67fc2e",
|
|
"files": 29
|
|
},
|
|
"remotion-to-hyperframes": {
|
|
"hash": "bf184a65059b95e8",
|
|
"files": 70
|
|
},
|
|
"slideshow": {
|
|
"hash": "2029471821f6f371",
|
|
"files": 2
|
|
},
|
|
"talking-head-recut": {
|
|
"hash": "7ac85a5f44467d6b",
|
|
"files": 28
|
|
}
|
|
}
|
|
}
|