Spark_TTS_Creation
Text-to-speech inside ComfyUI
- Audio
- Node Status
You've got the images, you've got the video - the part that always stalls is the voiceover. Spark_TTS_Creation is the node that fixes that, by dropping a real text-to-speech model into your ComfyUI graph. Type a line, pick a gender, pitch and speed, and out comes a 16 kHz waveform you can save, play, or feed straight into a video render. No API key, no account, no phoning home to a cloud service - it runs entirely on your machine.
It's one half of the ComfyUI_Spark_TTS pack, the "voice from nothing" half. The sibling node, Spark_TTS_Clone, handles cloning a specific voice; this one generates a clean, controllable speaker. Under the hood it's Spark-TTS 0.5B from the SparkAudio team, an LLM-based TTS model. The "0.5B" is the part that matters for you: it's the small, fast end of the TTS spectrum, the kind of model that loads quickly, runs on modest GPUs, and still sounds a world better than the robot voices you grew up with.
How it works
Mechanically, Spark-TTS is an autoregressive LLM that turns text into semantic speech tokens, then a biCodec vocoder converts those tokens into an actual waveform. The node vendors the official Spark-TTS library - there's a bundled sparktts folder - and drives it through a thin core wrapper. On the first run it loads weights from ComfyUI/models/TTS/Spark-TTS/Spark-TTS-0.5B/; if that folder is empty, it tries to auto-download the model before you even queue up. The output is a standard ComfyUI AUDIO dict (waveform plus sample rate), so it plugs into the same audio save/preview nodes you already use for any other AUDIO.
The inputs that matter
Only a few of these are worth touching on day one:
- text - the thing the voice actually says.
- gender (female/male) plus pitch and speed, each from
very_lowtovery_high. This is the real control this node sells: dialing in a voice instead of rolling the dice. - max_new_tokens (default 2020) - raise it if a clip gets cut off mid-sentence.
- keep_model_loaded (True) - right call for most people. The 0.5B model is small, so keeping it warm costs little VRAM and makes every rerun faster.
- use_cpu (False) - the escape hatch for GPUs ComfyUI can't schedule (some AMD cards); it also routes to MPS on Macs.
The sampling quartet (temperature 0.7, top_k 30, top_p 0.7) behaves like samplers-as-usual - leave them alone unless output starts sounding flat or chaotic.
Outputs
Two outputs: Audio, the thing you actually keep, and Node Status - a string that mostly exists because this pack would rather hand you a readable error in the graph than silently die. If the audio comes back as silence, that string is the first place to look.
Installing it
Easiest route:
# ComfyUI Manager: search "Spark-TTS" → Install → restart
Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/KERRY-YUAN/ComfyUI_Spark_TTS
cd ComfyUI_Spark_TTS
# use your ComfyUI Python (e.g. python_embeded/python.exe on Windows):
pip install -r requirements.txt
The requirements are mostly light (transformers, soundfile, einops, omegaconf), but the list also demands torch and torchaudio - which you already have. The README's warning about keeping those compatible with your existing PyTorch install is the one to respect. The model auto-downloads on first use; the manual fallback is running Model_Download.bat in the node folder.
Where people get burned
The failure you'll actually hit: the model folder isn't where the node expects it, and Node Status fills with "Please run Model_Download.bat or check paths." The auto-downloader is one-shot per session and needs internet plus Git on your PATH (the companion preset repo is a git clone), so when it silently fails, running Model_Download.bat is the fix. A "no semantic tokens found" error usually means max_new_tokens is too low for your text. And on CPU, expect slow - that's not a bug, that's an autoregressive model grinding token by token.
Honest take: this is a fast, capable-enough narrator, not an emotional ElevenLabs impersonator. If you need clone-perfect voices, the other node in this pack - or the rival TTS packs the community argues over - will take you further.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello, Spark Text to Speech is working! | Text to be synthesized / 待合成的文本 |
| gender | COMBO | female | Gender of the synthesized voice / 合成语音的性别 |
| pitch | COMBO | moderate | Pitch level (e.g., very_low, moderate, very_high) / 音高水平(例如:非常低、中等、非常高) |
| speed | COMBO | moderate | Speed level (e.g., very_low, moderate, very_high) / 语速水平(例如:非常慢、中等、非常快) |
| temperature | FLOAT | 0.700–1 | Sampling temperature for generation / 生成的采样温度 |
| top_k | INT | 300–100 | Top-K sampling parameter / Top-K 采样参数 |
| top_p | FLOAT | 0.700–1 | Top-P (nucleus) sampling parameter / Top-P (核) 采样参数 |
| max_new_tokens | INT | 2020100–90000 | Maximum number of new tokens to generate / 要生成的最大新 token 数 |
| keep_model_loaded | BOOLEAN | true | Keep model in VRAM after use for faster subsequent runs / 使用后将模型保留在显存中以便后续运行更快 |
| use_cpu | BOOLEAN | false | Force node execution on CPU instead of GPU / 强制节点在 CPU 而非 GPU 上执行 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| Audio | AUDIO | — |
| Node Status | STRING | — |