Lyrebird
Voice effects and voice changer for ComfyUI: clean up recordings, transform voices (monster, robot, gender, age…) with presets, live preview
✨ Features
<p align="center"> <img src="assets/screenshot.png" alt="Voice FX node: the Dragon preset, the Grit stage open, and a live waveform" width="420"> </p>- 🎙️ Two nodes — Voice Cleanup (tidy a raw recording) and Voice FX (give it a personality), both plain core
AUDIOin and out. - 🎭 37 built-in presets in 7 categories — Creatures, Characters, Sci-fi, Spooky, Devices, Places, Fun.
- 🎛️ Blend two presets — mix a second preset into the current one and keep tweaking; the engine still renders once, so reverbs and pitch shifts never stack.
- 🎼 Pitch and formant are independent — built on WORLD analysis and synthesis, so gender and age changes sound like a different person, not a chipmunk.
- 👁️ Every parameter is visible — a friendly name up front, the technical term underneath, for the times you want an exact value.
- 🔁 Live loop — run the workflow once, then hear every tweak on a looping region within a fraction of a second, through the same engine that renders the final output.
- 💾 User presets survive node updates — saved presets live in your ComfyUI user directory, never inside the node package.
- 📤 Import / export — share a preset as a
.jsonfile, or bring one in from a friend.
📦 Installation
Requires ComfyUI ≥ 0.4.0
Option A — ComfyUI Manager (recommended)
Open ComfyUI Manager → Custom Nodes Manager, search for Lyrebird, click Install, and restart ComfyUI.
Option B — git clone
cd ComfyUI/custom_nodes
git clone https://github.com/agarzon/ComfyUI-Lyrebird.git
pip install -r ComfyUI-Lyrebird/requirements.txt
Restart ComfyUI.
Note: Lyrebird depends on
pyworld-prebuilt, which installs thepyworldmodule from prebuilt wheels. It can conflict with another node pack that requires upstreampyworld, since both provide the same module.
🎛️ Using Lyrebird
Wire Record Audio (or Load Audio) → Voice Cleanup → Voice FX → Save Audio. Cleanup tidies the raw recording; FX gives it a personality.
A ready-made version lives under Workflow → Browse Templates → comfyui-lyrebird: pick your own recording in Load Audio and run it.
Voice Cleanup
Runs in a fixed order:
| Widget | Range / values | Default | Implementation |
|---|---|---|---|
| high_pass_hz | 0–200 (0 = off) | 80 | scipy 2nd-order Butterworth high-pass |
| hum_removal | off / 50 Hz / 60 Hz | off | scipy iirnotch at the fundamental plus 4 harmonics |
| noise_reduction | 0.0–1.0 | 0.5 | noisereduce spectral gating (prop_decrease) |
| gate_threshold_db | -80 to -20 (-80 = off) | -80 | pedalboard NoiseGate |
| de_ess | 0.0–1.0 | 0.0 | 4–9 kHz band split with a scipy Butterworth band-pass, compressed by a pedalboard Compressor |
| normalize_lufs | off / -14 / -16 / -19 / -23 | -16 | pyloudnorm, then a -1 dBFS sample-peak limiter |
Voice FX: presets and blending
Pick a preset from the bar (◀ ▶ to step through, the picker to browse by category), or start from No preset. Every parameter stays visible and editable underneath: eight stages (Voice, Time, Tone, Grit, Modulation, Dynamics, Space, Output); every stage except Output has its own bypass toggle.
- Blend — mix in a second preset and move the slider; your own tweaks are kept as offsets on top of the blend.
- Save (💾) always writes a new preset into ★ Mine — built-ins are read-only, so tweaking one only marks it "● modified", and ↺ Reset puts it back. A name that collides with one of your own presets turns Save into an overwrite (with a warning); a name matching a built-in is rejected.
- Import / export — Import (a
.jsonfile) always lands in ★ Mine; Export downloads the current settings. - 🎲 nudges a few parameters at random, if you want a starting point.
Live loop
Run the workflow once, then press 🔁 Loop — it plays a region of the cached input on repeat, and every knob you move is heard within a fraction of a second, without re-queuing. Drag on the waveform to move the loop region (up to 30 s); A/B swaps between the original and the processed audio at the same playhead position.
Where your presets live
User presets are saved under <ComfyUI user dir>/lyrebird/presets/ — never inside the node
package, so updating Lyrebird never touches them.
🛠️ Development
uv venv -p 3.10 .venv
uv pip install --python .venv/bin/python -e ".[test]"
.venv/bin/pytest -q
node --test tests/test-blend.mjs tests/test-controls.mjs
Smoke testing with Docker
docker compose -f docker/docker-compose.yml up -d --build
ComfyUI will be available at http://localhost:8188 with Lyrebird pre-loaded. Restart the container for Python changes; hard-reload the browser for JavaScript changes.
🐾 The story behind the name
The lyrebird is an Australian bird that can imitate almost any sound it hears — other birds, camera shutters, chainsaws. A voice changer that can become almost anything felt like a fitting namesake.
💙 Sponsored by Wallrus
ComfyUI-Lyrebird is proudly sponsored by Wallrus. If Lyrebird makes your ComfyUI workflow nicer, go say hi. 🐦
📄 License
GPL-3.0 © 2026 Alexander Garzon