Skip to content

Inside theDAW, every track plays theDAW's rack effects and runs VST3 plugins live; the kit and synth get effect chains - #10

Merged
danieljtrujillo merged 4 commits into
gantasmo:mainfrom
danieljtrujillo:host-rack-fx
Oct 6, 2026
Merged

danieljtrujillo merged 4 commits into
gantasmo:mainfrom
danieljtrujillo:host-rack-fx

Conversation

@danieljtrujillo

Copy link
Copy Markdown
Collaborator

The cockpit's side of theDAW's sway-tab-rack-fx-and-vst. Each part is behind a host cap, so the desktop app and an older theDAW keep working as before, and either repository can land first.

  • Cap rack-fx: a track's EFFECTS list gains a THEDAW group with every rack effect, saved as kind: "host:<id>" and built by theDAW on this AudioContext.
  • Cap vst-live: each VST3 row has a stable id and runs live in theDAW's plugin host as the track plays. rawState plus stateHost is the row's one state; theDAW hands every captured state back to the row. The clips feed the plugins as the wet branch, the dry branch waits as long as the chain's reported latency, every track waits for the slowest chain, and play, stop, seek, the loop seam and tempo reach the plugins. LIVE on the VST3 header switches a track back to rendered files.
  • The kit and the synth play through two buses (timeline.buses), each with its own effect chain and live VST3 chain, opened from EFFECTS in the KIT and SYNTH drawers.
  • The Miracle Mile template carries its song on the audio track.
  • Includes the merge of gantasmo/SwayCommand main (PR Sway embed plugins #9).

Checked: npm test (hostfx 11 checks, two new for row ids and buses) and the embed build; driven through theDAW's SWAY tab in headless Chromium with zero page errors.

theDAW's release builds the cockpit from this repository's main (SWAY_REF: main), so this ships in the next theDAW release after it merges.

danieljtrujillo and others added 4 commits September 30, 2026 15:03
Embedded cockpit: VST3 parameters, editor and renders through theDAW, .gan plugins from theDAW, host file pick
… and plays it live

A track's effect chain takes a second family of entries, kind host:<id>,
beside the cockpit's own fourteen. When theDAW frames the cockpit it lists
'rack-fx' in sway/host-ready and puts its effect API on this window
(window.theDAWHost: catalog, prepare, build). The cockpit adopts it, registers
the catalog as kinds, and the transport builds each entry with theDAW's own
effect code on the cockpit's AudioContext, in the track's chain where its own
effects sit. The parameters draw with the track panel's sliders and picks, and
bind to pads, knobs, gestures and sections like any other.

The entry (kind, values, on / off, name) is saved in the project. With no host
it stays in the project, passes audio through, and the list says it needs
theDAW. A cockpit older than this kind drops the entry on load.

scripts/test-hostfx.js covers the project round trip and the kind registry.
…synth get effect chains

A host with the 'vst-live' cap runs each VST3 row of a track's chain in its
own plugin host as the track plays. Each row has a stable id, which names the
running plugin across every rebuild; its rawState plus stateHost is the one
state a live plugin, a render and the plugin's window read and write, and the
host hands every state it captures back to the row. The clips feed the
plugins in order as the wet branch; the dry branch waits as long as the
chain's reported latency, every track waits for the slowest chain, and the
transport (play, stop, seek, loop seam, tempo) reaches every plugin. LIVE on
the track's VST3 header switches back to rendered files.

The kit and the synth play through two buses (timeline.buses): each has its
own effect chain and a live VST3 chain, opened from EFFECTS in the KIT and
SYNTH drawers or from the empty panel.

The Miracle Mile template carries the song on its audio track.
@danieljtrujillo
danieljtrujillo merged commit f92f1ae into gantasmo:main Oct 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant