Voice Changer Pro

Replace each speaker’s voice independently in a multi-speaker recording — or in a whole talking video — preserving the original emotion, cadence, and timing for every speaker.

Overview

The Voice Changer Pro node uses ElevenLabs Speech-to-Speech to re-voice multi-speaker media. It detects each speaker in the recording by first-appearance order, then applies your ordered list of target voices — voice 1 recasts speaker 1, voice 2 recasts speaker 2, and so on. Speakers without a mapped voice pass through unchanged.

Like Voice Changer, it operates in two modes, chosen automatically by what you wire in:

In both cases the target voices’ identities are applied while the original pacing, intonation, and emotional delivery are preserved.

How separation works. Voice and music are always separated first — before recasting, the source is split into an isolated vocal stem and a music/SFX stem. Preserve Background does not control whether the split happens — only whether the music/instrumental stem is mixed back in under the new voices afterward.

Availability. Native on Nodaro Cloud. On a self-hosted install the node appears with a NODARO mark and runs through your nodaro.ai connection — OAuth Connect or a pasted API key — billed to the connected nodaro.ai account. Without a connection the node card shows a Connect nodaro.ai CTA and a run refuses with 503 nodaro_connection_required.

Configuration

Node-level settings

Field Type Default Description
Ordered Voices Array<string \| VoiceChangerProVoice \| null> (1–8) [] Ordered list of target voices. Voice N recasts the N-th detected speaker (first-appearance order). Speakers without a mapped voice pass through unchanged. Each entry is either a bare voice id (premade name or ElevenLabs UUID), an object with per-voice settings (see below), or null — a keep-slot that keeps that speaker’s original voice while later speakers are still recast. At least one entry must be a real voice. Selectable via VoiceBrowser (premade, custom, or library); add a keep-slot with the Keep original button, or convert any row in place.
Model "eleven_english_sts_v2" \| "eleven_multilingual_sts_v2" "eleven_multilingual_sts_v2" ElevenLabs speech-to-speech model. Multilingual v2 covers 29 languages and is ElevenLabs’ recommended model — including for English source audio, where it often outperforms the English-only model. English v2 remains selectable.
Preserve Background boolean true On mixes the separated music / SFX stem back in under the new voices. Off drops it for clean, voice-only results. (The voice is always split out first regardless of this setting.)
Separation Quality "fast" \| "best" "fast" Quality of the voice/music separation. Fast is quicker and preserves more of the voice. Best gives finer voice/music separation.
Music Volume "match" \| "normalize" \| "manual" (+ musicVolume %) "match" Level of the preserved background music / SFX in the final mix — only applies when Preserve Background is on. match (default) keeps the original level; normalize applies loudness normalization; manual sets the level to musicVolume% (0–200, default 100).
Remove Background Noise boolean false On denoises the result for a cleaner voice-only output. Off leaves the recast as-is.

Per-voice settings (VoiceChangerProVoice)

Each entry in Ordered Voices may be an object that pins per-speaker ElevenLabs speech-to-speech settings and loudness behavior. All fields except voiceId are optional — omit them to use the model defaults. (A null keep-slot has no per-voice settings — there is nothing to configure for a kept voice.)

Field Type Range Default Description
voiceId string (required) Target voice — premade name (Rachel, Aria, …) or an ElevenLabs UUID for a custom clone.
engine "sts" \| "v3" "sts" Which lane converts this speaker. "sts" is the classic speech-to-speech recast. "v3" is Re-speak: the performance is regenerated from the transcript with eleven_v3 ([audio tags] supported) — the original delivery is replaced, and lips won’t match on video. A v3 speaker needs transcript text (the analysis now carries per-segment text, editable before conversion); without an analysis the engine re-speaks from its own transcription. For "v3", stability accepts exactly 0 / 0.5 / 1, and similarityBoost/style/useSpeakerBoost are ignored. Priced per started 1K characters of the re-spoken text (see Credit Pricing).
stability number 0–1 model default Higher = steadier and more consistent; lower = more expressive and variable.
similarityBoost number 0–1 model default How closely the output hugs the target voice’s timbre.
style number 0–1 0 Style exaggeration. >0 amplifies delivery at the cost of latency / stability.
useSpeakerBoost boolean false Sharpens fidelity to the target speaker.
seed number (int) 0–4294967295 random Deterministic speech-to-speech seed for this speaker. The same source + settings + seed recast this speaker identically across runs. Omit for a random seed each run.
volumeMode "match" \| "normalize" \| "manual" "match" Loudness handling for this recast voice. match matches the original speaker’s loudness; normalize applies loudness normalization; manual uses volume.
volume number 0–200 100 Manual output volume as a percentage. Consulted only when volumeMode is "manual".

Voice FX (voiceFx)

An optional node-level reverb/echo applied to the combined recast voices before the background is mixed back in — so the effect sits on the voices only, never on the music/SFX bed. Omit voiceFx entirely for no effect.

Field Type Range Default Description
preset AudioFxPreset (required) Effect preset. Reverb spaces: room, bathroom, car, hall, concert-hall, church, cave, arena, outdoor. Character: telephone, megaphone, echo, custom.
wetDryMix number 0–100 preset default Reverb wet/dry mix as a percentage — higher = wetter (more reverb). Applies to the reverb presets.
delayMs number 20–2000 preset default Echo delay in milliseconds. Used by the echo / custom presets.
decay number 0–1 preset default Echo decay / feedback — higher = more repeats. Used by the echo / custom presets.

The reverb presets use wetDryMix; the echo and custom presets use delayMs + decay. Because the effect is applied before the background remix, leaving Preserve Background on keeps a dry music bed under reverberant/echoed voices.

Inputs & Outputs

The media decides the mode, not the input it arrived through. The node inspects the file’s actual streams before doing any work:

Credit Pricing

Each recast (non-null) entry in your Ordered Voices list is priced by the audio it converts. A speech-to-speech voice is billed by the length of its stem — the stem runs from the start of the clip to that speaker’s last line — at the voice-changer-pro rate (40 credits per minute, prorated per second and rounded up to the next credit). A Re-speak (engine: "v3") voice is billed per started 1,000 characters of the text it re-speaks at the voice-changer-pro-respeak rate (30 credits per 1K). Every voice has a floor of 4 credits (six billable seconds), and so does the run as a whole.

sts voice      = max(4, ceil(40 × stemSeconds / 60))
re-speak voice = max(4, ceil(chars / 1000) × 30)
total          = max(4, sum of every recast voice)
Recast voices Credits
1 speech-to-speech voice, last line ends at 26.76 s 18
1 speech-to-speech voice, 60 s stem 40
1 speech-to-speech voice, 61 s stem 41
1 speech-to-speech voice, 3 s stem 4 (floor)
2 speech-to-speech voices at 60 s + 1 Re-speak voice of 1,500 chars 40 + 40 + 60 = 140

Unmapped speakers (those beyond the length of your Ordered Voices list) and keep-slots (null entries) are passed through without charge — credits count only the recast entries. The per-minute and per-1K rates are the credit identifiers voice-changer-pro and voice-changer-pro-respeak; the analyze step (voice-changer-pro-analyze, 10 credits) and the export step (voice-changer-pro-export, 1 credit) are flat.

Reservation vs. charge: the reservation is sized from the analysis you send (each speaker’s last segment end, each Re-speak speaker’s text). The worker measures the stems it actually converted and commits that amount, never more than the reservation. A recast sent without an analysis reserves one minute per speech-to-speech voice (and one 1K bucket per Re-speak voice) and settles under that ceiling.

Note (workflow execution): When running via the workflow orchestrator (server-side), the orchestrator reserves the flat voice-changer-pro unit (one minute of one voice) at job creation time, and the charge is capped at that reservation — a longer or multi-speaker workflow run is charged the unit, not the measured amount. Single-node runs (clicking Run on the canvas) and API/SDK/MCP calls reserve the measured amount up front.

Video Mode

Wire any talking video into the video input and the node will:

  1. Extract the audio track from the clip.
  2. Detect each speaker by first-appearance order.
  3. Re-voice each speaker with the corresponding target voice (speech-to-speech).
  4. Remux the new voices onto the original video and return it — plus the new audio track on the audio output handle.

Requires an audio track. Most text-to-video / image-to-video models output silent video. If you feed in a silent clip, the node fails fast. Use a clip with spoken audio, or feed audio directly.

Audio-only files are fine here too. If the file on the video input turns out to have no video stream (an audio-only .mp4 / .m4a), the node does not fail — it runs in audio mode and returns the re-voiced audio on the audio output. See Inputs & Outputs above.

Keeping the background. Leave Preserve Background on (default) to keep any music or sound effects baked into the clip’s audio under the new voices. Turn it off for clean, voice-only results.

Interactive flow (analyze → recast stems → export)

The node is a one-shot: configure voices, run, get the finished result. API consumers (SDK / CLI / MCP / REST) can instead drive the same engine as a three-step interactive flow — inspect the speakers before paying for a recast, and mix the result before rendering:

  1. AnalyzePOST /v1/voice-changer-pro/analyze (SDK client.voices.analyze, CLI nodaro voice analyze, MCP voice_changer_pro_analyze). Separates voice from music once and diarizes, returning the speaker list (id, time segments, first-appearance, word count, a transcript snippet), the detected language, and the persisted stem URLs. Flat-priced — no recast committed yet.
  2. Recast to stems — the normal recast call with output: "stems" and the analyze result passed back as analysis (skips re-detection, so you can re-recast with different voice assignments without paying detection again). Returns the dry, unleveled per-track stems instead of a rendered video.
  3. ExportPOST /v1/voice-changer-pro/export (SDK client.voices.exportMix, CLI nodaro voice export, MCP voice_changer_pro_export). Send the mixed track list — per-lane gain (0–200), muted, kind (voice/background), ≤16 tracks — plus an optional export-time voiceFx. The video stream is copied, never re-encoded, so the export is bit-identical to your preview. Iterating levels and effects before exporting is free; only the final render is charged (flat-priced).

Each step returns a jobId; one step’s completed output_data slots into the next step’s input. See the API integration worked example for the full REST walkthrough, and the SDK / CLI references for the typed equivalents.

Best Practices

Common Use Cases

Tips