TS Silero TTS
Russian text-to-speech that lives inside your graph
- audio
Want a Russian voiceover for a video you're generating, a draft audiobook, or narration for a clip - without leaving ComfyUI? TS Silero TTS runs Silero's Russian model (v5_3) locally and hands you a proper ComfyUI AUDIO output you can preview, save, or mux straight into a video. It's a niche tool in the most literal sense: it's a Russian TTS, so if you need English narration this isn't your node. But for Russian it's fast, offline, and free, and it plugs into the audio layer that the KB's audio doc describes as "bolted on once the silent clips needed to talk."
How it works
Silero v5_3 is a well-trodden Russian TTS. The node wraps it with the practical stuff: five speakers (aidar, baya, kseniya, xenia, eugene - xenia is the default), a choice of plain text or SSML input, and automatic chunking for long text so you don't hit Silero's length ceiling. The chunking is the input you'll actually touch: enable_chunking (on by default) splits long text into max_chunk_chars-sized pieces (900 default) with chunk_pause_ms (120) of silence between them - so a paragraph reads like a paragraph, not one breathless run-on.
The accent settings are the Russian-specific magic: put_accent, put_yo, put_stress_homo, put_yo_homo add stress marks and restore ё so words are pronounced correctly. That's the same machinery as the pack's separate TS Silero Stress node - and it's why a Russian TTS needs more knobs than an English one: the pronunciation lives in the stress marks, and getting them wrong is how you get "zámok" (castle) instead of "zamók" (lock).
The input you'll set
speaker- the voice. All five are real Silero speakers; audition a sentence across them.input_format-textorssml. SSML if you want pauses and emphasis, text for everything else.run_device-gpuby default;cpuworks and is plenty for short lines.- The
put_*toggles - leave them on; turning them off is how you get mispronounced Russian.
The single output is audio (the synthesized speech as a ComfyUI AUDIO waveform). Feed it into TS Audio Preview to audition, or wire it alongside video frames into TS Video Saver for a spoken clip.
Install
Here's the one real setup cost: Silero is optional, not core. The node needs silero installed, which the pack deliberately keeps out of the core requirements because the Silero packages pin specific torch versions that can clash with your ComfyUI install.
cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt
python -m pip install silero # the audio-silero extra
Weights land in models/silerotts/ on first use. If you skipped the silero install, the node fails gracefully and tells you exactly what to install - check the startup log's "Optional missing imports" line.
Common issues
- "It's reading my long text in a weird rhythm." Lower
max_chunk_charsand/or raisechunk_pause_ms- the chunk boundary is where the rhythm breaks. - "Russian words sound wrong." One of the
put_*toggles is off, or you fed it text without stress marks and the automatic ones couldn't run. Turn them back on; for genuinely ambiguous homographs, run the text through TS Silero Stress first and paste the marked result in. - "Module not found: silero." Install it (command above). On Windows portable, use
python_embeded\python.exe.
The honest limit, straight from the KB's audio doc: local TTS closes the gap on quality, but a top-tier multilingual voice is still an API job - ElevenLabs wins there. This node owns the specific job of Russian, on your machine, for free.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Text or SSML content for speech synthesis. | |
| input_format | COMBO | text | Input mode: plain text or SSML. |
| speaker | COMBO | xenia | Silero speaker voice. |
| run_device | COMBO | gpu | Execution device for Silero model. |
| enable_chunking | BOOLEAN | true | Automatically split long text into chunks to avoid Silero length limits. |
| max_chunk_chars | INT | 900200–4000 | Approximate maximum characters per chunk. |
| chunk_pause_ms | INT | 1200–3000 | Silence between generated chunks in milliseconds. |
| put_accent | BOOLEAN | true | Add stress marks to common words where user did not provide them. |
| put_yo | BOOLEAN | true | Replace e with yo where needed. |
| put_stress_homo | BOOLEAN | true | Add stress marks for homographs without yo. |
| put_yo_homo | BOOLEAN | true | Add stress marks for homographs with yo. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | Synthesized speech audio. |