mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-14 18:01:20 +08:00
b1ac87a430
A track carrying data-vst-chain is bounced through the VST host after it is trimmed and before volume automation is baked, so plugins see the dry signal and the envelope applies to their output. A VST failure is deliberately fatal for the whole mix rather than a per-track soft failure. Every other audio failure mode degrades gracefully (source missing, download failure, extract/prepare failure): the track drops, a failure is recorded, siblings continue. Silently substituting the untreated signal for a carved one would ship a render that sounds plausible and is wrong, which is worse than a loud failure, so VstChainProcessingError escapes the per-element catch and rejects the whole call. Because the per-element work races under Promise.all, that rejection does not wait for in-flight siblings. An internal AbortController (chained off the caller's signal) is threaded through extract, prepare and the bounce so a sibling's sidecar subprocess is aborted before workDir is removed from under it. Lambda has no plugin host, so `lambda render` and `lambda render-batch` both reject a composition with any VST chain up front, before the AWS-calling code path is reached.