Audio Bitcrush
Give AI voices and foley that crunchy Game Boy treatment
- audio
- audio
- output_path
- duration_sec
- summary
Audio in ComfyUI is the newest, thinnest layer of the stack - the tools were bolted on once silent video clips needed to talk. What that means in practice is that you usually get your voice or foley from a generator pack, and then you have almost nowhere to make it sound like anything. MKRAudioBitcrush is one of the FX nodes in MKRShift_Nodes that closes that gap: it takes any audio and degrades it into that chunky, lo-fi, 8-bit-chip flavor in pure numpy. No model, no API, no GPU - it's math on a waveform.
You reach for it when a generated voice is too clean, or a synth pad feels sterile, or you're building a retro/SFX palette and want that deliberate broken quality. It's also just plain fun on drum loops.
How it works
Bitcrushing is two independent degradations, and this node does both. Bit-depth reduction rounds each sample to one of 2^bit_depth levels - at the default 8 bits you get 256 steps, which is the classic harsh digital crunch. Then sample-hold (a "downsample") holds each sample for sample_hold N samples, chopping the temporal resolution the way an old sampler did when it couldn't play high rates. The mix control lets you blend the crushed signal back with the dry original, so you can go from barely-there texture at 0.1 to full meltdown at 1.0.
One thing to know: the effect itself is numpy, but if you ask for an mp3, flac, or ogg output the encode goes through ffmpeg - which means that's the one case where a missing ffmpeg quietly drops you back to WAV (the summary JSON tells you).
Inputs that matter
audio- accepts this pack'sMKR_AUDIOpayload, a waveform tensor, or a plain file path string. The*type means ComfyUI won't police what you plug in; the node figures it out.bit_depth- 2 to 16, default 8. Lower is harsher. 4 bits is near-robotic; 12+ is barely audible.sample_hold- 1 to 128, default 1 (off). Each step up halves the effective sample rate.mix- 0 to 1 dry/wet blend. Start at 0.5 and work up; full wet can be a lot.output_format/filename_prefix/subfolder/overwrite- the standard save block shared by every MKR audio node.
Outputs are the pack's uniform quartet: audio (MKR_AUDIO payload), output_path, duration_sec, and summary (JSON). Chain the audio output into another MKR audio node - a limiter after a hard bitcrush is a classic move - or into MKRPresaveAudio for export.
Install
Via ComfyUI Manager (search "MKRShift Nodes"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI. No models to download. Install ffmpeg if you plan to write compressed formats - on macOS brew install ffmpeg, on Windows winget install ffmpeg.
Common issues
The only real trap is format expectations: the auto output format keeps the source's extension, which can catch you out when you run MKR_AUDIO (a WAV-backed payload) through and get a WAV back. And remember bitcrush adds distortion before the limiter, so if your master suddenly sounds harsh, that's the point - pull mix down rather than blaming your EQ.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | * | — | |
| bit_depth | INT | 82–16 | — |
| sample_hold | INT | 11–128 | — |
| mix | FLOAT | 1.000–1 | — |
| output_format | COMBO | auto | 5 options: auto, wav, mp3, flac, ogg |
| filename_prefix | STRING | MKR_audio_bitcrush | — |
| subfolder | STRING | — | |
| overwrite | BOOLEAN | false | — |
| filename_labelopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | MKR_AUDIO | — |
| output_path | STRING | — |
| duration_sec | FLOAT | — |
| summary | STRING | — |