Nodes/WorkflowX Configurator/AuK Chained Clone X
ComfyUI Node

AuK Chained Clone X

The node that makes voice cloning scriptable

By haroonaslam·Created 4 months ago·Updated 2 days ago· 10
AuK Chained Clone X
  • model
  • encoder
  • vae
  • reference_audio
  • reference_audio_2
  • audio
  • segment_report
script[Happy] Hello there, how are you? (3s) [Shy][c-whisper] This is our little secret.
words_per_second2.0
gap_seconds0.00
seed0
steps32
guidance2.0
sway-1.00
sound_extra_seconds0.50
multi_speakerfalse
inline_editsfalse
review_each_linefalse
speed_timing_multiplier1.00

Why you'd reach for it

Local voice cloning got good. Chatterbox made it competitive with the paid services, F5-TTS made it fast, and for a single line of speech that's a solved problem. What none of them give you is a script. You get one clip at a time, so a two-minute scene becomes twenty generations, twenty slightly different performances, and twenty files to join by hand.

AuK Chained Clone X is built for exactly that gap: one reference recording, one text box, one line per row. Each line is cloned independently from the same voice, then joined in order - with per-line delivery styles, audio conversions, explicit lengths and silence between lines.

That's a genuinely different shape from one-shot cloning, and it's the reason to put up with the rest.

How it works

You need the standard three: model (AuK Model Loader X), encoder (AuK Encoder Loader X) and vae (AuK VAE Loader X), plus reference_audio - the recording that supplies the voice. With multi_speaker off, that recording is used for every line, and you need reference_audio_2 only if a line asks for Voice 2.

script is the interesting input. One spoken line per row, and the syntax is positional:

[Happy] Hello there, how are you? (3s)
[Shy][c-whisper] This is our little secret. (3s)
[c-speed:0.8][c-pitch:+3.5] Let me explain.

The leading bracket is one voice style - delivery, not an edit. Everything after it is a conversion, applied in the order you wrote them, each working on the result of the previous one. Length comes from a trailing (2.5s), or from the spoken word count divided by words_per_second (default 2 - higher means less time for the same words). Tags and timings don't count as words.

The distinction between styles and conversions is the part that trips everyone. [laughs] is a style: speak while laughing. [c-laugh] is a conversion: add a laugh before the words. Same for [whispers] versus [c-whisper]. And if you have an older script with several styles stacked, the node tells you which line is wrong rather than guessing which one you meant - you pick one style and convert the rest.

multi_speaker turns on the dialogue syntax: @voice1 or @voice2 before the line's tags. An unmarked line continues the previous speaker, and before any speaker is set, Voice 1 wins. Prefixes never become spoken words. inline_edits goes further and lets you mark spans inside a line - <sad>i am still here!</sad> - where only the marked words get the treatment and the pieces are joined. Phrase-sized selections sound better than two-word ones.

The assembly settings are gap_seconds (silence between finished lines only), sound_extra_seconds (default 0.5 - extra time for each added laugh, cough or breath) and speed_timing_multiplier (extra room for c-speed; 1 uses the calculated duration, and lines without speed tags are unaffected).

Sampling is the usual AuK trio: steps (32), guidance (2), sway (-1) - Base only, since Flash runs its fixed four steps and ignores them. seed seeds the run; each line starts at base seed plus its index, and conversions add their position, so keep the seed and choose fixed if you want a repeatable script.

Outputs are audio (wire it to Preview or Save Audio) and segment_report - which is not decoration. It lists each line's instruction, parameter, seed, requested versus actual length and the finished timings. When a line comes out wrong, that's where you find out which one.

Install

ComfyUI Manager → search WorkflowX Configurator, or:

cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator
cd WorkflowX-Configurator
pip install "transformers>=5.3,<6" safetensors PyYAML tqdm

Then the weights from drbaph/AuK-comfyui: a checkpoint in models/diffusion_models/, the converted Qwen encoder in models/text_encoders/, auk_vae.safetensors in models/vae/. Weights only - the configs and tokenizer come with the pack. Restart ComfyUI and hard-refresh; the script editor is a frontend feature.

Where it goes wrong

Expect the model's limits. AuK's own documentation says prompt adherence isn't strong, and it's not being modest - voice continuity, word preservation and exact dB or pitch changes all vary. It reads the request; it doesn't guarantee it.

You are early here. AuK has essentially no community footprint - an exact-phrase search of the r/StableDiffusion and r/comfyui corpus turns up nothing - so there's no pile of other people's settings to copy. The bundled examples (04_chained_clone.json, 05_two_speaker_clone.json, 06_inline_review_clone.json) are your reference.

Audio is mono 24 kHz, joined without normalization, crossfades or trimming. If a line is louder than its neighbours, that's yours to fix downstream, not something the join will smooth out. And several added sounds are each requested at the start of the current clip, so their audible order can differ from the tag order.

One tooltip worth pinning to the wall: the styles and conversions request delivery and edits; listen to the result before you build the next twenty lines on it.

CategoryWorkflowX/Audio/AuK

Inputs (17)

NameTypeDefaultDescription
modelWORKFLOWX_AUK_MODEL
encoderWORKFLOWX_AUK_ENCODER
vaeVAE
reference_audioAUDIOThe first speaker's recording. Used for every line when Multi-speaker is off.
scriptSTRING[Happy] Hello there, how are you? (3s) [Shy][c-whisper] This is our little secret.Write one spoken line per row. Start with one optional voice style and any conversions. End with (3s) to choose the original length.
words_per_secondFLOAT2.00.01–100Estimates the length of lines without a duration. Higher values allow less time for the same words.
gap_secondsFLOAT0.000–3600Adds silence between finished lines.
seedINT00–18446744073709550000Keep this number and choose fixed to repeat the same random choices. Change it to try a different performance.
stepsINT321–1000Controls how much refinement is used. Start with 32. More can take longer; Flash chooses its own setting.
guidanceFLOAT2.00–100Controls how strongly the voice follows your request. Start with 2. Flash chooses its own setting.
swayFLOAT-1.00-1–0Fine-tunes how the sound is refined. Leave at -1 unless you want to experiment. Flash chooses its own setting.
sound_extra_secondsoptFLOAT0.500–3600Allows additional time for each laugh, cough, or other sound you add.
reference_audio_2optAUDIOThe second speaker's recording. Needed when a line uses @voice2 with Multi-speaker on.
multi_speakeroptBOOLEANfalseUse @voice1 or @voice2 before a line's tags. Unmarked lines continue the previous speaker, starting with Voice 1. Turn off to use Voice 1 for all lines.
inline_editsoptBOOLEANfalseSelect words to change their delivery or add a sound before them. Turn off to speak the words without these changes.
review_each_lineoptBOOLEANfalseGenerate all lines and send the recording onward. Browse, regenerate, or add lines here, then Finalize to send your revised recording.
speed_timing_multiplieroptFLOAT1.000.01–100Extra room for speech controlled by speed tags. 1 uses the calculated duration; higher values allow more time. Lines without speed changes are unaffected.

Outputs (2)

NameTypeDescription
audioAUDIO
segment_reportSTRING