Nodes/ꘇ Genereti/ꘇ chop.synth
ComfyUI Node

ꘇ chop.synth

The endpoint that makes the notes audible

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ chop.synth
  • input
  • notes
  • value
◄voice▾►
◄level0.15►
◄attack0.02►
◄decay0.15►
◄sustain0.70►
◄release0.25►
◄cutoff1800.00►
◄resonance0.70►
◄glide0.02►
◄vibrato0.00►
◄vibrato_rate5.00►

Everything musical in the classic CHOP family is silent until it hits one of these. chop.synth takes a GENERETI_CHOP carrying note/gate/velocity and turns it into browser audio - a polyphonic-ish voice with a choice of oscillator character, an ADSR envelope, a resonant filter, glide and vibrato. It is an endpoint node: it has its own Start button, and it's the thing that finally makes a sound.

Genereti (languel/genereti, Liuboto, MIT, "super alpha") is a realtime creative-coding pack for ComfyUI - controls, shaders, Web Audio, perception, timeline - not a diffusion pack. It's the layer for live visuals and sound around your graphs, which is exactly why a synth node lives in it.

The mechanism, honestly

Two things are true at once here, and the node's own output wiring is the tell. chop.synth passes its input CHOP straight through to its notes output and computes value as the last sample of the first channel. So the graph-visible behavior is a passthrough. What the node does happens in the browser: while its Start control is active, the frontend reads the upstream note/gate/velocity block and drives a Web Audio voice with it. The Python side of the node never plays anything, and the class docstring for this family says it outright - Queue evaluates controls and passes them through, never plays sound.

That's not a bug, it's the boundary the pack keeps drawing: the browser is the realtime engine, ComfyUI's queue is a snapshot engine. The pack's own audio guide describes it as Web Audio's engine doing the work, with lookahead scheduling able to suffer from background tab throttling.

The controls you'll actually turn

voice picks the character - sine, subtractive, fm, or reed. It has no default in the schema, so set it deliberately; sine is the safe starting point. level (0.15 default) is where you'll spend most of your time, because a synth into a browser tab is loud fast.

Then the envelope: attack (0.02), decay (0.15), sustain (0.7), release (0.25). Then tone: cutoff (1800 Hz) and resonance (0.7) on the filter, glide (0.02) for pitch slides on held notes, and vibrato (0, plus vibrato_rate at 5 Hz) if you want it to sound like a synth lead rather than a test tone.

Outputs: notes (GENERETI_CHOP, the passthrough) and value (FLOAT). If you're chaining into chop.midiout you almost certainly want a different node - this one is a speaker, not a MIDI bridge.

Install

Manager: search "Genereti", install ꘇ Genereti, restart, refresh the browser page. Manual:

git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt

Requirements are light (comfyui-frontend-package>=1.53.6); no models, no Core ML, no separate server. Needs ComfyUI 0.38.2+, Python 3.11+, and a modern browser. The pack ships examples under Workflows → Genereti - ꘇ-Modular-Audio is the one to open first.

The traps

chop.synth is not mod.synth. This is the one that confuses people, because the pack now has two synth families. mod.* is the newer independent Web Audio layer with audio buses (GENERETI_AUDIO_BUS), a mixer, effects and mod.output as the single speaker; chop.synth is the older standalone endpoint that the docs describe as kept "for compatibility." They don't interconnect - a CHOP's output is control data, so it doesn't plug into an audio bus. If you're starting fresh in 2026, build on mod.*; use chop.synth when you're following an older tutorial or want the shortest path from pattern to sound.

Nothing plays until you press Start. Not on load, not on queue, not on opening the graph. The node's status line literally reads "Audio stopped · press ▷ to start." And Queue will never play it - "Queue never plays sound" is in the source comment. If you queued a workflow and heard nothing, that's correct behavior, not a bug to file.

Background tabs throttle. The audio guide is upfront that browsers throttle inactive tabs, so a patch that sounds fine in front focus can stutter when you tab away. Keep the tab visible for anything you care about.

CategoryGenereti / CHOP

Inputs (12)

NameTypeDefaultDescription
inputGENERETI_CHOP—
voiceCOMBO4 options: sine, subtractive, fm, reed
levelFLOAT0.150–1—
attackFLOAT0.020.001–10—
decayFLOAT0.150.001–10—
sustainFLOAT0.700–1—
releaseFLOAT0.250.005–10—
cutoffFLOAT1800.0020–18000—
resonanceFLOAT0.700.1–10—
glideFLOAT0.020–2—
vibratoFLOAT0.000–2—
vibrato_rateFLOAT5.000.1–20—

Outputs (2)

NameTypeDescription
notesGENERETI_CHOP—
valueFLOAT—