ElevenLabs Pro - TTS with Timestamps
ElevenLabs TTS that hands you the subtitles too
- audio
- timestamps_json
Most of the time TTS gives you audio and you're done. This node is for the times when audio is only half the deliverable - you want every word lined up against a clock, so you can burn an SRT, sync a dub, or fake a karaoke track. It's the with-timestamps variant of the pack's plain Text to Speech node, and it hands you both the speech and the timing map in one shot.
It's one of the 26 nodes in ComfyUI-ElevenLabs-Pro, a cloud-API wrapper: nothing runs locally, every run bills ElevenLabs credits by character. The pack's answer to that is caching - this node inherits the input-hash cache, so re-queuing a workflow with identical text, voice, and settings won't re-bill you. That's the difference between "tuning a workflow" and "tuning a workflow with a meter running."
How it works
Under the hood it posts to /v1/text-to-speech/{voice_id}/with-timestamps, decodes the base64 audio back into a ComfyUI AUDIO tensor, and serializes the API's alignment dict (characters plus start/end times in seconds) into the timestamps_json string. Two outputs: audio and timestamps_json. The intended wiring is timestamps_json straight into the pack's Subtitle Export (SRT/VTT) node - the pair is basically a "type text, get a .srt file" machine.
A subtle detail worth knowing: with eleven_v3 the pack forces text normalization off. That's deliberate - it's what lets v3 expression tags like [whispers] pass through un-mangled. If you've never used those, the pack also has a Voice Tag Inserter node to type them for you.
The inputs that matter
- text - what gets spoken. Watch the model's character cap:
eleven_v3tops out at 5,000,eleven_multilingual_v2at 10,000, the flash/turbo models at 30,000–40,000. The node validates length for you. - voice_id - required, and the most common failure: it's empty until you connect a Voice Selector or Fetch Voices node (or type a raw ID).
- model - defaults to
eleven_v3, the flagship. Useeleven_multilingual_v2for non-English, or the turbo/flash models when you want speed and don't need tags. - stability / similarity_boost - the two dials this node exposes (the full TTS node has more; this one trades knobs for the alignment output). Lower stability = more expressive, higher similarity = truer to the voice, too high = artifacts.
- output_format - default
mp3_44100_128is fine. Note the tooltip:mp3_44100_192and opus need a Creator tier account or higher. - enable_logging - flip to False for zero-retention mode (audio and text not stored by ElevenLabs), which matters for privacy-sensitive/HIPAA content.
- seed - set for reproducibility, with the honest caveat that determinism isn't guaranteed.
Install
ComfyUI Manager → search ComfyUI-ElevenLabs-Pro → Install → restart. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-ElevenLabs-Pro.git
pip install -r ComfyUI-ElevenLabs-Pro/requirements.txt
Then restart ComfyUI. Dependencies are just requests and soundfile - no model downloads, because this is an API wrapper. You need an ElevenLabs account and API key: set the ELEVENLABS_API_KEY env var or paste it into the node's api_key field (it's masked, and the pack scrubs it from errors, logs, and workflow PNG metadata).
Where people get burned
Empty voice_id errors are the #1 newbie stop, followed by forgetting the model's character limit on long scripts. If a re-queue is mysteriously cheap, that's the cache doing its job. And if you expected per-word timestamps but got a wall of JSON, remember: that string is the input to Subtitle Export, not something you're meant to read. Feed it downstream and the whole thing clicks.
Inputs (9)
| 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. |
| enable_loggingopt | BOOLEAN | true | If False, requests zero-retention mode (audio + text not stored by ElevenLabs). Required for HIPAA / privacy-sensitive content. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| timestamps_json | STRING | — |