Speech Stage
Text-to-Speech Inside ComfyUI, Without the Pain
- reference_audio
- audio
ComfyUI has no native text-to-speech. The built-in audio generation (ACE-Step, Stable Audio) is music - say a word and it makes a beat, not a voice. So every TTS voice in ComfyUI arrives through some custom node, and that integration has a reputation for being the dependency-conflict minefield of the ecosystem. ComfyTV's Speech Stage is its attempt to make TTS feel as ordinary as a generation prompt, under ComfyTV/Generate.
The stage is model-agnostic - it doesn't hardcode one TTS engine. The workflow dropdown lists the TTS backends you have installed (the pack ships a Kokoro TTS workflow as the default, with the stage → node bindings mapped so the dropdown just works), and the fields expose the knobs nearly every TTS shares: main_prompt (the script to read), voice (a preset voice name for Kokoro/Bark/ElevenLabs-style engines), language (multilingual models only - Auto lets the model default decide, and note the tooltip's warning that names must match the model, e.g. Kokoro wants Mandarin Chinese, not Chinese), speed (0.5–2, 1.0 = natural), and reference_text/reference_audio for cloning engines (F5-TTS/GPT-SoVITS want a transcript of the reference clip; auto-transcribing cloners can leave the text empty).
Output is a single audio (COMFYTV_AUDIO), ready for the pack's audio suite or to be mixed under your video.
The honest setup story
Here's the part the README is upfront about: the shipped Kokoro workflow needs a companion node. ComfyUI Manager is the easy route for the ComfyTV pack itself, but for the TTS backend:
cd ComfyUI/custom_nodes
git clone https://github.com/stavsap/comfyui-kokoro.git
pip install kokoro-onnx onnxruntime
The good news: Kokoro-82M is tiny and runs on CPU - no torch, no GPU, and the ~300MB model auto-downloads on first run. That matches the KB's verdict on lightweight TTS: the voice is cheap compute; the expensive part is the video it drives. If you want heavier voices or cloning, you can export your own TTS workflow (TTS-Audio-Suite, VibeVoice, F5-TTS are the names in the docs) and bind its inputs in the sidebar - the stage is designed for exactly that bring-your-own-workflow path.
Install (the stage itself)
With the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI; under ComfyTV → Generate. Desktop/macOS: clone into the running instance's absolute custom_nodes (startup-log path), unwrap any ComfyTV/ComfyTV/ nesting, full backend restart.
Troubleshooting
- Voice comes out in English when you asked for Mandarin. The
languagename must match Kokoro's exact names -Mandarin Chinese, notChineseorzh. - Cloning ignores the reference clip. The clone engines want
reference_audioandreference_textunless they auto-transcribe; wire both. - Nothing in the
workflowdropdown. The dropdown lists installed backends - the shipped Kokoro workflow needscomfyui-kokoroinstalled (above), or the list is empty until you add your own workflow.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| workflow | COMBO | Text-to-speech backend. | |
| main_prompt | STRING | — | |
| voice | STRING | Named preset voice for preset-voice models (Kokoro, Bark, ElevenLabs, …). | |
| language | COMBO | Auto | Language for multilingual models. 'Auto' lets the workflow/model default decide; ignored by single-language / auto-detect models. Note: names must match what the selected model expects (e.g. Kokoro uses 'Mandarin Chinese'). |
| speed | FLOAT | 1.000.5–2 | Speaking rate (1.0 = natural). |
| reference_text | STRING | Transcript of the reference audio; auto-transcribing cloners can leave it empty. | |
| custom_params | STRING | {} | Internal — JSON of user-defined parameter attachments/values for this node. |
| reference_audioopt | COMFYTV_AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | COMFYTV_AUDIO | — |