Nodes/ꘇ Genereti/ꘇ chop.drumkit
ComfyUI Node

ꘇ chop.drumkit

The end of the chain where your note signals become hits

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ chop.drumkit
  • input
  • notes
  • value
◄level0.15►
◄decay0.20►
◄tone1.00►

A terminal node, and why it looks empty in the source

ꘇ chop.drumkit takes a CHOP - note, gate, velocity channels - plus three tone-shaping widgets, and outputs notes (GENERETI_CHOP) and value (FLOAT). If you open its Python implementation expecting a drum synth, you'll find that the backend just passes the input straight through.

That's not a bug, it's the architecture. This is an endpoint: is_output_node is set, so it always executes when you queue, and the actual sound is produced by the browser-side renderer that this node configures. In the pack's mod.* family, nodes like this are where a control signal turns into audio, and the compiler-level work happens in the browser - the same split as the rest of Genereti, which treats the browser as a rendering surface and Comfy as the graph.

So the honest summary: chop.drumkit is the destination you wire a rhythm into. You pair it with an arpeggiator, a sequencer or a note node on the control side, hit the node's button to start browser audio, and you get percussion. Tune it with level, decay and tone.

And to be clear about what it is not: it isn't a drum sample generator. It's not ACE-Step-style music generation - the KB's local-music story is about diffusion models writing audio from a prompt. This is a small percussive voice being driven by note/gate/velocity signals from elsewhere in your graph. Model-free, weight-free, instant.

Inputs and outputs

  • input - GENERETI_CHOP, required. The control channels. Both requirements matter: an unconnected required input stops the run, and this is the node that has one.
  • level - FLOAT 0–1, default 0.15. Output gain, and yes, that default is quiet on purpose - you're expected to raise it once you've heard what you're doing.
  • decay - FLOAT 0.03–2 seconds, default 0.2. How long a hit rings. Short is a click, long is a boom.
  • tone - FLOAT 0.25–2, default 1. Brightness, in the usual "lower is darker" sense.
  • notes - GENERETI_CHOP, the control channels passed through, so you can keep chaining.
  • value - FLOAT, the last sample of the first channel - the same "give me one number" output every CHOP in this pack has.

Because the outputs carry the input onward, the node can sit mid-chain if you want: percussion plus a downstream consumer reading the same note stream. Nothing about it forces full termination except that it's flagged as an output node, which is about execution, not about wiring.

Install

Genereti only. Manager → search Genereti (liuboto) → install → restart → refresh the browser. Manual:

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

ComfyUI's own Python - .venv on a checkout, python_embeded\python.exe on Windows Portable, the bundled environment on Desktop. Requirements: one line, comfyui-frontend-package>=1.53.6. No audio backends, no models, no extra node packs. ComfyUI 0.38.2+, Python 3.11+, modern browser.

Gotchas

  • Silence after queueing is correct. The pack's contract is explicit: audio starts only via the node's own button, and Queue evaluates and passes controls through without ever playing sound. If you queued and heard nothing, nothing is broken - you haven't started it.
  • Match the sample rate. The incoming CHOP declares its own sample_rate; the drum voice follows the signal it's given. A note stream sampled at a very low rate will sound like a stutter, not a groove.
  • level defaults to 0.15 for a reason, but check it before you conclude the node doesn't work.
  • Browser audio only. A headless or API-triggered queue gives you passthrough channels and no sound, so don't wire this into anything you need to run unattended.
  • Alpha pack with no community footprint. The README says "super alpha - early classroom testing… back up your workflows before updating," and I found no discussion of it in the Reddit corpus at all. The bundled ꘇ-Modular-Audio example workflow is the reference implementation - read it before trusting a blog post.
CategoryGenereti / CHOP

Inputs (4)

NameTypeDefaultDescription
inputGENERETI_CHOP—
levelFLOAT0.150–1—
decayFLOAT0.200.03–2—
toneFLOAT1.000.25–2—

Outputs (2)

NameTypeDescription
notesGENERETI_CHOP—
valueFLOAT—