fishaudio/fish-speech · error · SystemExit

--reference_audio and --reference_text must be given the sam

Error message

--reference_audio and --reference_text must be given the same number of values, got {len(ref_audios)} audio(s) and {len(ref_texts)} text(s).

What it means

tools/api_client.py validates that --reference_audio and --reference_text argument lists have equal length before building the request; mismatch triggers SystemExit with a count summary.

Source

Thrown at tools/api_client.py:150

        type=str,
        default="YOUR_API_KEY",
        help="API key for authentication",
    )

    return parser.parse_args()


if __name__ == "__main__":
    args = parse_args()

    idstr: str | None = args.reference_id
    # priority: ref_id > [{text, audio},...]
    if idstr is None:
        ref_audios = args.reference_audio or []
        ref_texts = args.reference_text or []

        if len(ref_audios) != len(ref_texts):
            raise SystemExit(
                "--reference_audio and --reference_text must be given the same number "
                f"of values, got {len(ref_audios)} audio(s) and {len(ref_texts)} text(s)."
            )

        byte_audios = []
        for ref_audio in ref_audios:
            audio_bytes = audio_to_bytes(ref_audio)
            if audio_bytes is None:
                raise SystemExit(f"Reference audio file not found: {ref_audio}")
            byte_audios.append(audio_bytes)

        ref_texts = [read_ref_text(ref_text) for ref_text in ref_texts]
    else:
        byte_audios = []
        ref_texts = []
        pass  # in api.py

    data = {

View on GitHub (pinned to befe400174)

Solutions

  1. Supply exactly one --reference_text per --reference_audio, in the same order
  2. Use --reference_id instead if you registered the pair server-side
  3. Drop extra audios you don't have transcripts for

Example fix

# before
--reference_audio a.wav b.wav --reference-text "first"
# after
--reference_audio a.wav b.wav --reference-text "first" "second"
Defensive patterns

Strategy: validation

Validate before calling

if len(args.reference_audio or []) != len(args.reference_text or []):
    # fix input before invoking the client
    args.reference_text += [""] * (len(args.reference_audio) - len(args.reference_text))

Prevention

When it happens

Trigger: Running api_client.py with, e.g., two --reference_audio flags but one --reference_text (or omitting the texts for extra audios).

Common situations: Voice-cloning requests with multiple reference clips where transcripts were forgotten; shell loops that pass mismatched lists.

Related errors


AI-assisted analysis of fishaudio/fish-speech@befe400174 (2026-08-27). Data as JSON: /api/errors/1803dcb096d2f7f3. Report an issue: GitHub.