Score Synth
The SoundFont Player That Turns Scores Into Audio
- performance
- audio
This is where the music actually becomes sound. Score Synth (ComfyTV.SF2SynthStage) is a SoundFont synthesizer built into ComfyTV: feed it a performance, pick an instrument, and it renders actual audio via a SoundFont (SF2/SF3) file. It's the last stop in the pack's music chain - Score → Score Performer → Score Synth - and the answer to "how do I get a piano note out of this node graph?"
Under ComfyTV/Music, it's a proper GM synth, not a toy beeper. The soundfont input is a file name from ComfyTV's built-in resource library (the sidebar's Resources tab is where SoundFonts get filed, and SF3 is the compressed soundfont format that's become the community default - smaller downloads, same samples). The program combo defaults to piano and covers the standard General MIDI program list - strings, brass, choir, the works - plus the underrated channel_programs field: an optional JSON map ({channel: gm_program}) that assigns a different instrument to each MIDI channel, which is how a single render comes out as a whole ensemble instead of one mono instrument.
The other real controls: gain (0.1–2.0, default 1.0) is the output level - set it to taste before hitting any downstream mixing/reverb stages. The required input is performance (COMFYTV_TEXT, from Score Performer or the Click Track stage), and the single output is audio (COMFYTV_AUDIO), ready for the pack's audio suite - EQ, compression, the Muse Reverb stage that the docs' canonical chain ends on.
Why SoundFonts
SoundFont synthesis is old tech that keeps winning because it's local, deterministic, and free: no model downloads, no GPU, no inference cost - just samples being triggered. That's why this stage ships in a pack that otherwise leans on heavy generation: the music chain is cheap compute from start to finish, and the only "cost" is that a SoundFont's realism tops out at "good for demos and drafts," not "studio orchestra." For a placeholder score while you're building the video, it's perfect; for a final master, you'll still bounce to a real sample library.
Install
With ComfyTV:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI; under ComfyTV → Music. Or ComfyUI Manager → search "ComfyTV". Desktop/macOS: clone into the running instance's absolute custom_nodes (from the startup log), fix any ComfyTV/ComfyTV/ nesting, full backend restart. No Python deps, but you'll want at least one SoundFont in the resource library or program selection is moot.
Troubleshooting
- "Score Synth: soundfont 'X' not found in the resource library." The
soundfontfield must match a file actually in your library - add one via the Resources tab, or leave it empty to fall back to the internal default. - "Score Synth needs a performance - wire Score Performer." It renders performances, not raw scores. Score → Score Performer → here, in that order.
- Output is too quiet or clipping. That's
gain- the whole chain benefits from leaving headroom here and boosting in the mix stage instead.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| soundfont | STRING | file name from the soundfont library | |
| program | COMBO | piano | 38 options: accordion, acoustic_bass, alto_sax, brass, bright_piano, celesta, +32 |
| channel_programs | STRING | optional JSON {channel: gm_program} | |
| gain | FLOAT | 1.000.1–2 | — |
| performanceopt | COMFYTV_TEXT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | COMFYTV_AUDIO | — |