Text-to-Speech (TTS)

The TTS node generates narration audio from text. Unlike the analysis nodes, which describe a property of the media itself, TTS takes text produced by an upstream node — an LLM summary, a caption, or a translated transcript — and synthesizes speech, attaching the audio to the asset.

German is synthesized with Orpheus-3B / Kartoffel and English with Kokoro. Both run behind a small HTTP sidecar, so the node stays a pure client and needs no model runtime of its own.

Kind

tts

Applies to

Any asset (the audio is generated from upstream text, not from the media)

Inputs

Text from an upstream node output — configurable, defaults to the llm node’s llm_result

Output keys

tts_flag (String), tts_path (String, local path of the generated WAV)

Requirements

A running TTS sidecar (/v1/tts). German uses Orpheus/Kartoffel (GPU recommended); English uses Kokoro (CPU).

Persists to

asset_node_result ledger only — the generated WAV stays in the worker’s local tts_bin cache (as with thumbnails)

Configuration

TtsNodeOptions:

Option Meaning

ttsHost / ttsPort

Address of the TTS sidecar (default localhost:9100)

language

de → Orpheus/Kartoffel, en → Kokoro (default de)

voice

Voice id for the selected engine (default Jakob; English e.g. af_heart)

sourceNodeId / sourceOutputKey

Which upstream node output supplies the text (default llm / llm_result)

Use Cases

  • Audio descriptions — speak an LLM-generated description or caption for accessibility.

  • Dubbing / narration — voice a translated transcript back onto the asset.

  • Bilingual output — German via Orpheus/Kartoffel, English via Kokoro, chosen per pipeline.

The sidecar is a small FastAPI service; see the server/ directory next to the node for how to run it (including the production path where Orpheus runs on vLLM / llama.cpp).