ORPH_Encode
Audio in, tokens out
- vae
- audio
- ORPH_TOKENS
ORPH_Encode is the reverse of ORPH_Decode, and it's the node that unlocks the coolest thing in this pack: voice cloning without any training. Feed it a clip of a voice, it converts the audio into Orpheus token codes, and once those tokens are combined with your text prompt, the model will happily speak new words in that voice.
The pack ships two example workflows - tts.json for the simple "type it and hear it" path, and multi-segment-clone.json / single-segment-clone.json for exactly this trick. Encode is the workhorse of the clone workflows.
How it works
Encode takes your AUDIO, resamples it to 24 kHz if it isn't already (that's where torchaudio comes in), grabs the first channel, and runs it through the SNAC VAE's encoder. The resulting codes get re-grouped into the 7-code frames the sampler expects - 1 from codebook 0, 2 from codebook 1, 4 from codebook 2 - with the per-codebook offset applied so they live in the right part of the model's vocab. The output is a proper ORPH_TOKENS stream, indistinguishable from one ORPH_Prompt would produce except that these tokens describe the audio of the reference clip.
The inputs that matter
Three inputs:
vae(VAE) - from ORPH_SnacVae. Same rule as always: the SNAC codec, not an image VAE.audio(AUDIO) - your reference clip. Any sample rate works; it gets resampled to 24 kHz for you. A clean, dry, ~10–30 second clip of one speaker gives the model the most to work with.formatting-BOTH,PRE,POST, orNONE. This controls whether the encoded clip gets wrapped in the speech/AI section tokens. If you're going to let ORPH_Sample add the start tokens viaadd_start_token, you wantNONEhere to avoid doubling up. If you're assembling a full prompt with ORPH_Combine and want the framing baked in,BOTHis your friend.
The one output, ORPH_TOKENS, feeds ORPH_Combine (alongside your ORPH_Prompt text tokens) to build the final prompt, which then goes into ORPH_Sample.
The clone recipe
The pattern from the example workflows, stripped down:
- ORPH_Encode: reference voice clip → tokens.
- ORPH_Combine: your text-prompt tokens + the encoded clip's tokens, in the order you want.
- ORPH_Sample → ORPH_Decode → audio out.
Order inside Combine matters - it concatenates in input order, so "prompt then clip" vs "clip then prompt" changes what the model conditions on.
Installing it
The pack install is the usual: ComfyUI Manager (search ComfyUI-Orpheus) or git clone https://github.com/AustinMroz/ComfyUI-Orpheus into custom_nodes, then restart. Weights: Orpheus 3B in models/orpheus/, SNAC 24 kHz in models/vae/. No pip installs - but note this node is the one most likely to hit the torchaudio gap, since resampling is its whole job. If your ComfyUI env doesn't have torchaudio, the pack fails at load and you'll see it here first.
Common issues
- The cloned voice sounds nothing like the reference. The reference clip quality is the bottleneck - background noise, music, or two speakers will muddy the codes. Clean, single-speaker audio in the tens of seconds range clones far better.
- Doubled section tokens.
formatting=BOTHon the encoded clip andadd_start_tokenon Sample adds the speech framing twice. Pick one side. - Garbage after decoding. Encode output is only meaningful inside a Sample → Decode chain; feeding encoded tokens straight to Decode defeats the whole pipeline.
Encode is what turns this pack from "fun novelty TTS" into "actually useful for character voices." Train nothing, speak in anyone's voice.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| vae | VAE | — | |
| audio | AUDIO | — | |
| formatting | COMBO | 4 options: BOTH, PRE, POST, NONE |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| ORPH_TOKENS | ORPH_TOKENS | — |