ORPH_SnacVae
How Orpheus turns speech into tokens
- VAE
Every other node in the ComfyUI-Orpheus pack gets all the attention, but ORPH_SnacVae is the reason any of it works. It loads the SNAC audio codec - the thing that converts between raw waveforms and the discrete token streams Orpheus actually speaks in - and presents it to the rest of your graph as a plain old VAE.
Why does a TTS pipeline need something called a VAE? Because Orpheus is a language model, and language models emit tokens, not sound waves. The acoustic middleman is SNAC (a hierarchical residual-vector-quantized neural audio codec, in this case the 24 kHz variant from Annuvin). It squeezes audio into a sequence of codes the Llama model can predict, and back out into waveforms again. This node is what loads that codec so ORPH_Encode and ORPH_Decode can use it.
How it works
ORPH_SnacVae reads the .safetensors file you pick from models/vae/, pairs it with the SNAC 24 kHz config bundled inside the pack, and wraps it in a small class that behaves like a ComfyUI VAE. Every encode or decode pass moves the codec to your GPU, runs, and moves it back to CPU - so the audio codec, like the 3B model itself, doesn't sit resident and eat VRAM between runs.
The config file tells you a lot about how the token stream is shaped: one codebook with 4096 entries, three VQ levels with different rates (the 4/2/1 frame split you'll see referenced in the other nodes' docs), sampled at 24 kHz. That structure is exactly why ORPH_Sample generates codes in groups of seven and why ORPH_Decode expects them that way.
The inputs and outputs that matter
One input: snac_model, a dropdown listing every file in models/vae/ - the same folder ComfyUI's image VAE loader uses, so don't grab the wrong file.
One output: VAE, which plugs into the vae input of both ORPH_Decode (tokens → audio) and ORPH_Encode (audio → tokens).
A note from the source code worth respecting: don't try to swap in ComfyUI's built-in VAE loader. The pack's comments call out that the native VAEEncodeAudio node forces the wrong sample rate, and it can't be used here. This pack expects this codec.
Installing it
The pack ships the SNAC code itself, bundled in the repo - that's the one dependency they were kind enough to vendor, specifically so you don't have to pip install it separately. What you do need is the weights, which are small:
model.safetensorsfrom Annuvin/snac-24khz-ST →ComfyUI/models/vae/
Install the pack via ComfyUI Manager (search "ComfyUI-Orpheus") or git clone https://github.com/AustinMroz/ComfyUI-Orpheus into custom_nodes, restart, drop the weights in, and restart again if the dropdown doesn't show the file.
Common issues
- The VAE dropdown has image VAEs in it too. Since it reads the shared
models/vae/folder, you'll see sd-vae-ft-mse and friends. Pick thesnac-24khzfile, not an image VAE - wiring an image VAE into ORPH_Decode produces garbage or an outright crash. - "Invalid codes. Should be impossible." That error comes from ORPH_Decode when the token stream it received isn't a valid SNAC code sequence - usually a wiring mistake upstream, not a problem with this node.
- The pack won't load at all. The repo has no
requirements.txt; it relies ontorchaudiobeing in your ComfyUI environment, which stock installs don't always include.pip install torchaudio(matching your torch version) fixes it.
The whole "audio is bolted onto ComfyUI with its own dependency stack" story from the ecosystem - ORPH_SnacVae is the cleanest version of it in this pack: one bundled codec, one weights file, one VAE-typed output that slots right in.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| snac_model | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VAE | VAE | — |