Chord Accompaniment
Type a chord chart, get a played-out backing part
- progression_text
- performance
- midi_url
Writing a comping part note-by-note is the kind of drudgery that makes people abandon music in node graphs. Chord Accompaniment exists so you don't have to. You type a chord progression - Am7 | Dm7 | G7 | Cmaj7 - and it realizes each chord into real notes, applies a voicing, and lays it out with a rhythmic pattern. You get a played-out backing part plus a MIDI file, without touching a piano roll. This is the "composition → performance → synthesis → mixing on one canvas" story the ComfyTV README sells, and this is one of its more practical nodes.
The two outputs tell you how it fits into the music lane: a performance payload feeds Score Synth to actually hear it, and a midi_url gives you the exported Standard MIDI File for anything that wants one.
How it works
It's a real backend stage - hit ▶ Run and the pack's chord_accompaniment runner realizes the progression, voices it, applies the pattern, then write_smf exports a .mid. Chord symbols are space-separated; | marks bar lines. You can type the progression in the progression field, or wire a progression_text input (COMFYTV_TEXT) from upstream - and if it's wired, it takes priority over the field. Run with no progression at all and it fails with a "needs a progression" message, which is a better error than most music nodes give you.
The inputs that matter
- progression - the chord chart, default
Am7 | Dm7 | G7 | Cmaj7.|defines bars. - bpm (20–300, default 100) and beats_per_bar (1–12, default 4) - tempo and meter.
- pattern - the rhythmic feel, default
block(all chord tones together); arpeggiated styles are in the pattern set. - voicing - how the chord tones are spaced, default
close; wider spread voicings are available. - octave_shift (−2 to +2), velocity (20–127, default 88), repeats (1–16, default 1) - shift range, loudness, and how many times the whole progression loops.
Outputs: performance (COMFYTV_TEXT, the JSON Score Synth consumes) and midi_url (COMFYTV_TEXT).
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart the ComfyUI backend (a real restart, not a tab refresh); nodes appear under the ComfyTV category. ComfyUI Manager finds the pack by searching "ComfyTV". The README's two recurring gotchas: on Desktop/macOS/multi-install setups the relative cd can clone into the wrong instance - read the startup log for the base path it loaded and clone into that absolute path, quoted - and the first level of custom_nodes/ComfyTV/ must contain __init__.py (fix a nested ComfyTV/ComfyTV/… by moving the inner folder up). No Python dependencies to install; MIDI and the SoundFont synth ride on the pack's own runners.
Troubleshooting and tips
- "needs a progression" error. Both the field and the wired input are empty. Provide one.
- Hearing nothing. The
performanceoutput is data, not audio - you have to feed it to Score Synth (or bridge the MIDI out) to hear it. - Changes the feel without retyping: flip
patternbetween block and arpeggiated, or switchvoicingfrom close to spread.repeatsturns a short progression into a longer bed for practice or scoring. - Bridge note: both outputs are
COMFYTV_TEXT; to get the MIDI path into a native node, you'll use a text bridge.
Inputs (12)
| 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. |
| progression | STRING | Am7 | Dm7 | G7 | Cmaj7 | — |
| bpm | FLOAT | 100.020–300 | — |
| beats_per_bar | INT | 41–12 | — |
| pattern | COMBO | block | 5 options: block, pad, broken, alberti, strum |
| voicing | COMBO | close | 5 options: close, drop_2, three_note, four_note, root_only |
| octave_shift | INT | 0-2–2 | — |
| velocity | INT | 8820–127 | — |
| repeats | INT | 11–16 | — |
| progression_textopt | COMFYTV_TEXT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| performance | COMFYTV_TEXT | — |
| midi_url | COMFYTV_TEXT | — |