Skip to navigation

Generator

The Operator node that synthesizes speech — where a voice and model are assigned per language.

Family: Operator · type: operator_generator

The Generator is the TTS engine. It assigns a voice and model per language and synthesizes the audio — this is where speech is made, and it’s required in every runnable workflow (Export needs the audio only the Generator produces).

Config

The voice_map maps each language to one or more voice assignments:

node["config"] = {"voice_map": {"en-us": [
{"voice_id": voice.provider_voice_id, # ⚠ the PROVIDER's voice id
"provider": "elevenlabs",
"model": "eleven_multilingual_v2"} # the catalog model id
]}}

Workflows that translate into several languages have one voice_map entry per language. Leave a language’s list empty ("ko-kr": []) and auto-route picks the best model for it from Onepin’s continuous benchmarks.

Three identifiers to get right:

  1. voice_id is the provider’s voice ID (provider_voice_id on a voice object), not the Onepin voice UUID you see in voices list.
  2. model is the catalog model ID — the Model ID shown on Voices & Models, which is what GET /providers/{provider}/models returns (e.g. eleven_multilingual_v2, sonic-preview). There is no separate provider-side name to pass here.
  3. An imported voice needs catalog_voice_id as well. A voice with source: "provider_imported" (BYOK) carries a provider wire id that is unique per workspace, not globally, so the assignment must also carry the Onepin catalog UUID (catalog_voice_id). Without it the definition is rejected with rule voice_imported_needs_catalog_id.

Shape the delivery

Each voice assignment takes optional canonical_controls — provider-agnostic knobs mapped to the model’s native controls at synthesis time:

{"voice_id": "...", "provider": "elevenlabs", "model": "eleven_multilingual_v2",
"canonical_controls": {"speed": 60, "emotion": "cheerful"}}
ControlValues
speed · pitch · volume · randomness0–100, where 50 = the model’s native default
emotionAn enum that varies per model — check the model in the provider catalog

A control the chosen model doesn’t support is dropped with a warning, not an error.

Get valid voice + model pairs

Pull the provider catalog to see which models a provider offers and which voices each model supports:

models = client.providers.list_catalog_provider_models("elevenlabs").data
voices = client.providers.list_catalog_provider_model_voices(
"elevenlabs", "eleven_multilingual_v2").data

Inspect this node

client.nodes.get_node_detail(node_type="operator_generator").data