ElevenLabs - TTS with Timestamps
TTS that tells you when every word lands — for lip sync and subtitles
- audio
- timestamps_json
Plain TTS gives you audio and nothing else. This node gives you the same audio plus a timestamps_json output - a per-word breakdown of when each word starts and ends. If your end goal is subtitles, a karaoke-style caption, or lip-syncing an avatar, that timing data is the whole game. It calls the ElevenLabs /with-timestamps endpoint and returns both halves in one shot.
The inputs are a trimmed-down version of AIS_EL_TTS: text, voice_id, model (same eight-model list), plus stability, similarity_boost, output_format, and seed. No style, no speed, no language override - this node is built for getting words onto a timeline, not for sculpting a performance. For most work that's fine: the defaults (0.5 stability, 0.75 similarity) are the same sane starting points as the main TTS node, and you pass the same voice_id from the selector.
Outputs:
audio- the generated speech as an AUDIO dict, identical to whatAIS_EL_TTSproduces.timestamps_json- the word-level timing data as a JSON string.
What the timestamps actually buy you
The classic use is lip sync: feed the audio and the timestamps into a lip-sync stage (or align an avatar's viseme track to them) so the mouth lands on the right syllables. The second classic use is captioning - parse timestamps_json to emit an SRT or burn word-by-word captions into the video, and they'll match the speech exactly because they came from the same generation. If you're doing multi-language dubs, the timing lets you know whether the target language's words overrun the source clip before you commit to the render.
The timing data comes back as JSON, so you'll want a node that can parse a JSON string into fields - pair it with any JSON-extract or show-text node to convert it into a usable caption format.
Installing it
Part of the ComfyUI API Toolkit pack (fifteen ElevenLabs nodes total). Manager: search "API Toolkit". Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-API-Toolkit
cd ComfyUI-API-Toolkit
pip install -r requirements.txt
Restart. Needs requests and soundfile.
Gotchas
- Because the timing must be returned by the API, this costs the same characters as regular TTS - the timestamps are not free metadata.
- Timestamps are as accurate as the model's segmentation, which is generally good but not frame-perfect. For aggressive subtitle snapping you may want to nudge word boundaries.
- Same credit-metered reality as every ElevenLabs node: for private or unlimited local TTS, open models are the counterweight; reach for this one when you specifically need the timing to line up with a video.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| text | STRING | Text to convert to speech with timing information. | |
| voice_id | STRING | Voice ID. Connect from Voice Selector or Fetch Voices node. | |
| model | COMBO | eleven_v3 | 8 options: eleven_v3, eleven_multilingual_v2, eleven_flash_v2_5, eleven_turbo_v2_5, eleven_flash_v2, eleven_turbo_v2, +2 |
| stabilityopt | FLOAT | 0.500–1 | Voice stability. Lower = more expressive/emotional, Higher = more consistent/monotone. Creative(<0.5), Natural(0.5), Robust(>0.5). |
| similarity_boostopt | FLOAT | 0.750–1 | How closely AI adheres to the original voice. Too high may introduce artifacts. |
| output_formatopt | COMBO | mp3_44100_128 | Audio output format. mp3_44100_192 and opus require Creator tier+. |
| seedopt | INT | 00–4294967295 | Seed for reproducibility. 0 = random. Determinism not guaranteed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| timestamps_json | STRING | — |