mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 12:54:29 +00:00
Plural voiceover carve now targets a group instead of naming each clip: `resolveCarveSourceIds` (core `audioGroups.ts`) expands a group id to its current members at analysis time, so a clip added to the group later is covered without touching `sources`. The picker (`useFxCarve.ts`) offers a grouped voice as one option instead of one row per member, tests overlap as a union of member spans (a group overlaps the bed if ANY member does), and prefers a qualifying group over its individual members in `autoSourceIds`. Picking two or more ungrouped voice clips in the carve flow now mints a group behind them (`mintGroupId`, de-duped against every id in the document) and writes `data-audio-group` on each picked clip atomically, one undo entry — `createAudioGroupAndAssignMembers` in `timelineTrackVisibility.ts` copies `setElementsHidden`'s multi-target write shape. The DSP is untouched: `mixCarveSources` already sums multiple sources correctly (verified in the design doc's own investigation) — this only fixes the picker. New lint rule `audio_carve_ungrouped_sources` (`packages/lint/src/rules/ media.ts`, alongside `audio_volume_double_automation`) warns when a `data-fx-carve`'s `sources` names two or more plain clip ids instead of a group — the shape that silently rots when a clip is added. `/hyperframes- audio` states the same rule as an invariant, not a tip, with the grouped- narration HTML example from the design doc. The group-matching and auto-group logic (`withAutoGroupedSources`, `collectCarveCandidates`) is split into `useFxCarveGrouping.ts` — `useFxCarve.ts` was pushing past the 600-line cap. `resolveNextCarveSettings` is deliberately NOT an `async function`: wrapping it in one would force a microtask on every call, including the synchronous branch — the exact bug `withAutoGroupedSources`'s own sync-when-possible contract exists to avoid, and one caught via `propertyPanelAudioFxGroup.test.tsx` (10 failures) before fixing it back to a plain function the caller conditionally awaits. Also extracted `useEffectiveTimelineDuration` out of `App.tsx` and `useRemoveBackground` out of `StudioRightPanel.tsx` (both pushed past 600 lines from an added prop wire), and decomposed `useFxCarve.ts`'s picker IIFE to clear fallow's complexity gate. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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": "d64583e4aa8011f7",
|
|
"files": 17
|
|
},
|
|
"hyperframes-animation": {
|
|
"hash": "67d23c9507ebb1e8",
|
|
"files": 121
|
|
},
|
|
"hyperframes-audio": {
|
|
"hash": "f224ea9481998c08",
|
|
"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
|
|
}
|
|
}
|
|
}
|