Nodes/ComfyUI-Orpheus-TTS/Orpheus TTS Generate
ComfyUI Node

Orpheus TTS Generate

Orpheus TTS turns text into expressive speech

By ShmuelRonen·Created about a year ago·Updated about a year ago· 11
Orpheus TTS Generate
  • model
  • audio
text
voicetara
elementnone
element_positionnone
temperature0.60
top_p0.95
repetition_penalty1.10
max_new_tokens2700

ComfyUI has always been an image and video machine, but it can do voices too. OrpheusGenerate is the node that makes it talk. You type a line of text, pick a voice, and out comes a real 24 kHz waveform you can pipe straight into a preview or save node. No API, no key, no cloud account - the whole thing runs on your GPU, and honestly that's the whole appeal.

This node is the heart of the ShmuelRonen/ComfyUI-Orpheus-TTS pack, a community wrapper around Canopy Labs' Orpheus 3B TTS model. It sits in the 2025 wave of genuinely good local TTS alongside Sesame CSM, Kokoro, and Spark - models that finally stopped sounding like robot announcements. The signature move: you can drop <laugh>, <sigh>, <gasp> and friends right into your text and the model actually performs them. Want a narrator that chuckles mid-sentence? Type it, get it.

How it works

Under the hood Orpheus is a small LLM that's been trained to emit audio codes instead of text. OrpheusGenerate takes the model reference from the loader node, prefixes your text with the voice name (tara: ...), runs it through the transformer with sampling, then hands the predicted codes to the SNAC codec, which decodes them into the final 24 kHz audio. The output is a standard ComfyUI AUDIO object - a dict with a waveform tensor and sample_rate, the same shape every audio node in the ecosystem speaks.

Long text gets chunked automatically at sentence boundaries (roughly 220 characters per chunk) and stitched back together, so you can feed it a paragraph without it choking. Each chunk is capped at 2000 new tokens regardless of what you set max_new_tokens to.

The inputs that matter

  • model - the ORPHEUS_MODEL output from OrpheusModelLoader. Wire them together and forget it.
  • text - multiline, so paste freely. Insert <laugh>, <chuckle>, <sigh>, <cough>, <sniffle>, <groan>, <yawn>, or <gasp> wherever you want them.
  • voice - 11 built-in voices: tara, leah, jess, leo, dan, mia, zac, zoe, bob, rebeca, lisa. No cloning here; these are fixed identities.
  • element + element_position - a shortcut if you don't want to hand-place tags. Pick a tag, then append (stick it on the end), prepend (start), or pipe (replace every | in your text with the tag - the most useful of the three).
  • temperature (default 0.6) and top_p (0.95) - the same knobs you know from image sampling. Lower temperature for steadier delivery, higher for more expressiveness.
  • max_new_tokens (default 2700) - cap on tokens per generation. The default is plenty; cranking it way up on short text just lets the model drift.

Output: one audio output. Feed it to PreviewAudio to hear it, SaveAudio to keep it, or OrpheusAudioEffects to process it further.

Installing

Grab the pack through ComfyUI Manager (search "Orpheus") or clone it:

cd ComfyUI/custom_nodes
git clone https://github.com/ShmuelRonen/ComfyUI-Orpheus-TTS.git

Then make sure the Python deps are in ComfyUI's environment:

pip install torch numpy soundfile transformers huggingface_hub nltk snac

On WSL 2, the SNAC package can be fussy - the README's fix is pip install git+https://github.com/hubertsiuzdak/snac.git. Restart ComfyUI and you're set. The first time the loader runs it downloads the model from Hugging Face, so the first generation will feel like it's doing nothing for a while - that's the ~6 GB safetensors landing, not a hang.

Common gotchas

The classic mistake is wiring OrpheusGenerate up without the loader and wondering why the model input has nothing to connect. It's a three-node chain: Loader → Generate → Preview Audio.

If you get back exactly one second of silence, something failed - the node returns a silent placeholder on errors. Check the ComfyUI console; the real error is always printed there. And remember this is a 3B model loaded in bfloat16. On an 8 GB card it works; on CPU it technically works but you'll be reading a book while it renders. If the voice sounds off, lower temperature toward 0.4 - the default 0.6 is deliberately loose.

Categoryaudio/tts

Inputs (9)

NameTypeDefaultDescription
modelORPHEUS_MODEL
textSTRING
voiceCOMBOtara11 options: tara, leah, jess, leo, dan, mia, +5
elementCOMBOnone9 options: none, laugh, chuckle, sigh, cough, sniffle, +3
element_positionCOMBOnone4 options: none, append, prepend, pipe
temperatureFLOAT0.600.1–1.5
top_pFLOAT0.950.1–1
repetition_penaltyFLOAT1.101–2
max_new_tokensINT2700100–4000

Outputs (1)

NameTypeDescription
audioAUDIO