mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-04 07:19:52 +00:00
Two independent post-release feedback reports of the same mechanism from two different skills (both delegate to this one shared engine): audio.mjs fired every line's Kokoro TTS + whisper-transcribe subprocess concurrently via a bare Promise.all with no cap. - One OOM'd 12/13 lines on a resource-constrained laptop (32GB total, ~7GB free), requiring a manual patch to a sequential for-loop. - The other saw 7/8 lines fail on first run, then pass on retry once the model was cached — concurrent cold-start model loads overwhelming the machine, not a real synthesis failure. Kokoro/Whisper each load their own local model per subprocess, so firing every line at once multiplies that cost by the line count. Extracted the concurrency cap into lib/concurrency.mjs (audio.mjs is a script — it runs CLI/exit side effects on import, so it can't be unit-tested directly; the cap is small enough to pull out and test in isolation). Default 4, overridable via HYPERFRAMES_TTS_CONCURRENCY, floored at 1 (matching one report's own manual workaround). hyperframes-media/scripts/audio.mjs is the single canonical engine per its own header comment; product-launch-video, faceless-explainer, and pr-to-video each carry a thin wrapper that spawns this file as a subprocess (confirmed via their DEFAULT_ENGINE path), so this one fix covers all four skills without touching the other three. Tests: 4 new cases for mapWithConcurrency (order preserved regardless of completion order, cap actually enforced, limit > item count doesn't hang, empty input). Full skills test suite (514 tests) shows no new failures — the 444 pre-existing failures are environment-dependent and reproduce identically on unmodified main.
86 lines
1.7 KiB
JSON
86 lines
1.7 KiB
JSON
{
|
|
"source": "heygen-com/hyperframes",
|
|
"skills": {
|
|
"embedded-captions": {
|
|
"hash": "62aec45830eda54b",
|
|
"files": 144
|
|
},
|
|
"faceless-explainer": {
|
|
"hash": "844c54a06fd16d3c",
|
|
"files": 17
|
|
},
|
|
"general-video": {
|
|
"hash": "a30225e30ec7b06c",
|
|
"files": 1
|
|
},
|
|
"hyperframes": {
|
|
"hash": "6cff4ef2b582b81b",
|
|
"files": 1
|
|
},
|
|
"hyperframes-animation": {
|
|
"hash": "19024009fab8e5d1",
|
|
"files": 116
|
|
},
|
|
"hyperframes-cli": {
|
|
"hash": "9b36a367a0e3a332",
|
|
"files": 7
|
|
},
|
|
"hyperframes-core": {
|
|
"hash": "e978b3168748eb39",
|
|
"files": 13
|
|
},
|
|
"hyperframes-creative": {
|
|
"hash": "18a14a79da6cbc06",
|
|
"files": 68
|
|
},
|
|
"hyperframes-keyframes": {
|
|
"hash": "47f20312033792c3",
|
|
"files": 3
|
|
},
|
|
"hyperframes-media": {
|
|
"hash": "c991b6d3575e0f17",
|
|
"files": 42
|
|
},
|
|
"hyperframes-registry": {
|
|
"hash": "e3b389526834109d",
|
|
"files": 10
|
|
},
|
|
"media-use": {
|
|
"hash": "fba6e0963e431b1e",
|
|
"files": 19
|
|
},
|
|
"motion-graphics": {
|
|
"hash": "be1d1f159d5eb0e4",
|
|
"files": 23
|
|
},
|
|
"music-to-video": {
|
|
"hash": "0c5738fac0fe622f",
|
|
"files": 132
|
|
},
|
|
"pr-to-video": {
|
|
"hash": "132b44ddda774fef",
|
|
"files": 21
|
|
},
|
|
"product-launch-video": {
|
|
"hash": "32cab842cc7a6b76",
|
|
"files": 18
|
|
},
|
|
"remotion-to-hyperframes": {
|
|
"hash": "9d959b31fa0fc9d0",
|
|
"files": 70
|
|
},
|
|
"slideshow": {
|
|
"hash": "63c685cd4a93bfa5",
|
|
"files": 2
|
|
},
|
|
"talking-head-recut": {
|
|
"hash": "a3dc251f26be8a3e",
|
|
"files": 27
|
|
},
|
|
"website-to-video": {
|
|
"hash": "ac39931f9a7da749",
|
|
"files": 32
|
|
}
|
|
}
|
|
}
|