VST Synth Generator Host
Make real VST3 synths play notes inside ComfyUI
- audio_reference
- AUDIO
Most of ComfyUI's audio story is "generate sound from a prompt." ComfyUIVSTSynthAdapter goes the other way: it turns a VST3 instrument plugin - a synth, a sampler, a drum machine - into a node that renders audio by sending it a MIDI note. Instead of hoping the model hallucinates the exact bass tone or pad you need, you tell a real synthesizer to play Middle C for four seconds and get back the actual rendered waveform. For anyone who does sound design, that's the difference between "AI-sounding" and "produced." It's the sibling of ComfyUIVSTEffectAdapter in the same pack, aimed at creating sound rather than processing it.
The "experimental" tag in the README is doing real work here: the pack is a single commit, and there's effectively no community signal for it yet. You're early. The upside of that is you're not fighting a crowd for a genuinely novel capability.
How it works
The node loads the instrument .vst3 via pedalboard's VST3Plugin, then builds a minimal MIDI sequence - a note_on at time zero with your velocity, and a note_off a whisker before the clip ends - and feeds it to the plugin along with a silent input buffer to render into. The plugin synthesizes, and the node wraps the result in the standard AUDIO dict. Note that the note sustains the whole clip: with a 10-second duration you get a 10-second sustained tone, release kicking in only in the last ~50ms.
The inputs that matter
vst_path- full path to a VST3 instrument (.vst3). A synth or sampler, not an effect.midi_note- the note to play, 0–127. Default 60 is Middle C.velocity- how hard it's struck, 0–127; brighter and louder the higher you go.duration_seconds- render length, 0.1–300s.audio_reference- the sleeper input. Wire an existing AUDIO track in here and the node silently ignores your duration/sample rate/channel settings and matches the reference instead, so your synth line lines up perfectly with the rest of the mix. This is what makes the node usable in real workflows.vst_parameters_json- plugin-specific settings, e.g.{"cutoff": 0.8}. The defaults are placeholders; your plugin's actual parameter names go here.
Output is a single AUDIO - save it, preview it, or mix it with your generated track.
Install
Same pack as the effect host, same steps. ComfyUI Manager, search "ComfyUI-VST-Adapter", or:
cd ComfyUI/custom_nodes
git clone https://github.com/yanivkarta/ComfyUI-VST-Adapter
Restart, then install the two dependencies yourself - the repo has no requirements.txt, so Manager won't do it for you:
pip install pedalboard mido
Windows embedded runtime: ComfyUI\python_embeded\python.exe -m pip install pedalboard mido.
Common issues
- One note at a time. It's a single note_on/note_off pair - no chords, no melodic sequences. A chord means layering multiple nodes (or a plugin that arpeggiates on its own). This is the biggest gap and worth knowing before you build a workflow around it.
- Silence, not passthrough, on bypass. Set
bypassto"True"or point at a missing file and you get a buffer of zeros - there's no input audio to pass through, since the node synthesizes from nothing. If your output is silent, check the path first. - VST3 only. Pedalboard can't load VST2 (
.vst) instruments. Get the VST3 build. - Some instruments render nothing. If the plugin needs host features beyond a basic note event, it may return silence with no error. Watch the console for a
[VST Synth]line, and if you get zeros cleanly, try a different instrument.
It's niche, it's rough around the edges, and it's the only thing I know of that puts real plugin instruments inside a ComfyUI graph. If you've got a favorite synth gathering dust and a workflow that needs actual tones, this is the node that earns its keep.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| vst_path | STRING | C:/Program Files/Common Files/VST3/Generator.vst3 | — |
| midi_note | INT | 600–127 | — |
| velocity | INT | 1000–127 | — |
| duration_seconds | FLOAT | 4.00.1–300 | — |
| sample_rate | COMBO | 44100 | 4 options: 22050, 32000, 44100, 48000 |
| channels | COMBO | 2 | 2 options: 2, 1 |
| bypass | COMBO | False | 2 options: False, True |
| audio_referenceopt | AUDIO | — | |
| vst_parameters_jsonopt | STRING | { "cutoff": 0.8 } | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |