Files
Vance Ingalls b1ac87a430 feat(engine,producer): apply VST chains in the offline audio mix
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.
2026-07-31 02:24:17 -07:00
..