Qwen3-TTS Audio Compare
Stop trusting your ears after the tenth listen — this scores your fine-tune against the reference
- reference_audio
- generated_audio
- report
Qwen3-TTS Audio Compare is the pack's evaluation node - the one you reach for after fine-tuning to ask "did my trained voice actually get closer to the reference, or did I just spend an afternoon making noise?" You feed it a reference clip and a generated clip, it scores how similar they are, and it hands you a report instead of vibes. When you're iterating on a voice model, that's worth a lot: your ears lie after the tenth listen, and a stable metric doesn't.
It sits at the end of the fine-tuning workflow for a reason. After Qwen3-TTS Finetune produces a checkpoint, you'd load it, generate a sample, and run this node to compare that sample against the reference audio you trained on. It's also useful for comparing two fine-tunes, or just sanity-checking a voice clone. The output is a report string (it's an output node, so it renders its results in the UI) covering three metrics:
- Speaker similarity - a cosine similarity between speaker embeddings of the two clips, via the model's own speaker encoder. Higher is more alike; 1.0 would be identical.
- Mel spectrogram distance - how far apart the two clips are in spectral terms. Lower is closer.
- Speaking rate ratio - whether the generated speech is running at roughly the same pace as the reference.
Taken together they tell you three different things about a voice: who it sounds like, how the timbre matches, and whether the pacing is in the right ballpark.
How it works
The trick the author pulls off: to get a speaker embedding it needs the model's speaker encoder, but it only loads that small submodule - the tooltip on speaker_encoder_model says "only loads ~76 weights, not the full model," and the changelog notes a memory-efficient safe_open() load that took this from ~3.4GB of RAM down to ~300KB. It resamples both clips to 24 kHz, computes mel spectrograms, extracts embeddings, and scores them.
The inputs:
reference_audio/generated_audio- twoAUDIOvalues, e.g. your reference clip and the output of Custom Voice / Voice Clone.speaker_encoder_model- a Base model variant to source the speaker encoder from (1.7B or 0.6B). The 0.6B default is fine and lighter.local_model_path- only if your Base model isn't in the defaultmodels/Qwen3-TTS/location.
One gotcha: the encoder is loaded from a locally available Base model - if you haven't downloaded one via the Loader yet, the node errors with "please download it first," which is its polite way of saying run the Loader once.
Honest calibration
Treat these numbers as relative, not absolute. "Speaker similarity 0.82 vs 0.74" is a genuine signal that one run is closer to the reference; "0.82" on its own doesn't mean "this is clearly the same person." Qwen3-TTS's clone likeness has real limits (the community's standing complaint about this model line), so use the metric to rank your own experiments rather than to judge the model against, say, an ElevenLabs sample. If you're comparing fine-tune checkpoints, the same reference through the same node will tell you which epoch nailed the voice - which is exactly the decision this node exists to make.
Installing
Same pack install: ComfyUI Manager (search "ComfyUI-Qwen3-TTS") or git clone https://github.com/DarioFT/ComfyUI-Qwen3-TTS into custom_nodes, then pip install -r requirements.txt by hand (ComfyUI won't). It pulls in librosa for the audio analysis, and the usual qwen-tts → transformers==4.57.3 pin applies. No model downloads beyond the Base model the speaker encoder comes from, and nothing here trains - it's fast, lightweight, and the most boring node in the fine-tuning chain in the best way.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| reference_audio | AUDIO | — | |
| generated_audio | AUDIO | — | |
| speaker_encoder_model | COMBO | Qwen/Qwen3-TTS-12Hz-0.6B-Base | Base model to load speaker encoder from (only loads ~76 weights, not the full model) |
| local_model_pathopt | STRING | Optional custom path to model directory. If empty, uses default models/Qwen3-TTS/ location. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| report | STRING | — |