Nodes/FireRedAudio · T8star-Aix/FireRedAudio QA 失败项定向返修 · T8star-Aix
ComfyUI Node

FireRedAudio QA 失败项定向返修 · T8star-Aix

Re-dub the lines that failed QA, not the whole episode

By T8mars·Created 19 days ago·Updated 15 days ago· 21
FireRedAudio QA 失败项定向返修 · T8star-Aix
  • model
  • audio_batch
  • script_plan
  • voice_bank
  • settings
  • 返修后批量音频
  • 返修 Manifest 路径
  • 返修报告
failed_line_ids
project_nameqa-repair
subfolderfireredaudio/repairs
seed_strategyincrement
seed_step1
max_attempts2
batch_size8
enforce_cue_durationtrue
max_cue_overrun_seconds0.5

Your 100-line batch came back from QA with 6 failures. A mispronunciation here, a clipped peak there, two lines that ran over their subtitle time slot. The reflex is to regenerate those six by hand, which is fiddly, or the whole batch, which is insane. T8_FireRedAudio_BatchRetry is the middle path the pack designed: it eats the failed line IDs, regenerates only those, gates each new take against the same checks, and merges the results back non-destructively.

What it is

SpeechQA outputs a failed_line_ids list. You wire that (plus the original model, audio batch, script plan, and voice bank) into this node, and it retries each failed line with fresh seeds until it passes - or runs out of attempts. The philosophy is "corrective repair, not creative exploration": it keeps the original text, character voice, and quality targets, and just tries to land a take that clears the gates. If what you actually want is a different performance of one line, that's the separate CreativeCandidatePool path - don't confuse the two, the pack explicitly separates "fix the mistake" from "try something new."

How the retry works

The seed_strategy defaults to increment - each attempt uses base seed + step, so attempts are reproducible and you're not gambling on random. max_attempts (default 2) caps the loop. Two gates matter most:

  • Text gate - if run_asr_qa style checking is in play, a take whose transcript doesn't match the script is rejected immediately.
  • Cue duration gate (enforce_cue_duration, on by default) - when the script has timecodes, every new take is measured against the real WAV; if it still overruns the subtitle slot beyond max_cue_overrun_seconds (default 0.5s), it's rejected and the next seed is tried. The pack refuses to call "generated successfully" a "repair succeeded" - a take that misses its timecode is still failed.

It also rejects a candidate whose SHA-256 is identical to the original take - no point "repairing" a line and getting byte-for-byte the same failure back.

Non-destructive merging

The output is a new AudioBatch with the repaired lines swapped in. Repairs always write to their own directory with a repair-manifest.json; the original files and the passed takes are never overwritten. Only successes replace the corresponding line ID in the output batch. That's why you can run repairs in parallel with other work without risking the source.

Inputs worth knowing: failed_line_ids (multiline, wire from SpeechQA), batch_size, project_name/subfolder, and the advanced enforce_cue_duration + max_cue_overrun_seconds. Outputs: the merged repaired batch, the repair manifest path, and a report.

Install

Standard pack install (once for all FireRedAudio nodes):

cd ComfyUI\custom_nodes
git clone https://github.com/T8mars/comfyui-fireredaudio-T8.git
cd comfyui-fireredaudio-T8
python scripts\setup_runtime.py

Needs the full model (--profile full), since it runs TTS.

Gotchas

Don't expect a retry to fix a line the model simply can't say - five attempts at the same seed family with the same reference can converge on the same failure. When QA fails the same line across retries, that's the signal to check the text (numbers, proper nouns) or change the reference, not to crank max_attempts to 5. Also remember the cue gate only applies when the script carries timecodes - feed it a plain script and overruns won't be caught, so run DurationFit or feed timed scripts. And this node repairs; it never touches your already-approved lines, which is the whole point.

CategoryT8star-Aix/Audio/FireRedAudio

Inputs (14)

NameTypeDefaultDescription
modelT8_FIREREDAUDIO_MODEL
audio_batchT8_FIREREDAUDIO_AUDIO_BATCH
script_planT8_FIREREDAUDIO_SCRIPT_PLAN
voice_bankT8_FIREREDAUDIO_VOICE_BANK
failed_line_idsSTRING
project_nameSTRINGqa-repair
subfolderSTRINGfireredaudio/repairs
seed_strategyCOMBOincrement2 options: increment, fixed
seed_stepINT11–100000
max_attemptsINT21–5
batch_sizeINT81–32
enforce_cue_durationBOOLEANtrue
max_cue_overrun_secondsFLOAT0.50–60
settingsoptT8_FIREREDAUDIO_SETTINGS

Outputs (3)

NameTypeDescription
返修后批量音频T8_FIREREDAUDIO_AUDIO_BATCH
返修 Manifest 路径STRING
返修报告STRING