Hmbown/CodeWhale · error · anyhow::Error
mimo-v2.5-tts-voiceclone requires --clone-voice <mp3|wav> or
Error message
mimo-v2.5-tts-voiceclone requires --clone-voice <mp3|wav> or --voice <data-uri>
What it means
Voice-clone guard: for model names containing "voiceclone" the request must carry a voice sample — either `--clone-voice <path to mp3/wav>` (base64-encoded to a data URI, 10 MiB cap) or `--voice` holding an existing data:audio/... data-URI. With neither present the clone model cannot operate, so the CLI bails instead of sending a doomed request.
Source
Thrown at crates/tui/src/lib.rs:7404
let instruction = combine_speech_instructions(instruction, voice_prompt);
if is_voice_design
&& instruction
.as_deref()
.is_none_or(|value| value.trim().is_empty())
{
bail!(
"mimo-v2.5-tts-voicedesign requires --voice-prompt or --instruction to describe the voice"
);
}
let voice = if let Some(clone_path) = clone_voice {
Some(encode_voice_clone_sample_data_uri(&clone_path)?)
} else if is_voice_design {
None
} else if let Some(value) = voice.filter(|value| !value.trim().is_empty()) {
Some(value)
} else if is_voice_clone {
bail!("mimo-v2.5-tts-voiceclone requires --clone-voice <mp3|wav> or --voice <data-uri>");
} else {
Some(DEFAULT_VOICE.to_string())
};
let format = normalize_speech_format(&format).with_context(|| {
format!("Unsupported speech format '{format}' (allowed: wav, mp3, pcm16)")
})?;
let output = output.unwrap_or_else(|| {
output_dir
.or_else(|| config.speech_output_dir())
.unwrap_or_default()
.join(default_speech_output_name(&format))
});
let client = DeepSeekClient::new(config)?;
let response = client
.synthesize_speech(SpeechSynthesisRequest {
model: model.clone(),
text,View on GitHub (pinned to 0c42157ee5)
Solutions
- Clone from a file: add `--clone-voice <path>` to an mp3 or wav sample
- Or supply the sample inline: `--voice data:audio/wav;base64,...`
- If you meant ordinary TTS, use the non-clone model (mimo-v2.5-tts) with the default voice
Example fix
// before $ codewhale speech --model mimo-v2.5-tts-voiceclone Error: mimo-v2.5-tts-voiceclone requires --clone-voice <mp3|wav> or --voice <data-uri> // after $ codewhale speech --model mimo-v2.5-tts-voiceclone --clone-voice sample.wav // or: --voice data:audio/wav;base64,...
Defensive patterns
Strategy: validation
Validate before calling
case "$MODEL" in *voiceclone*)
[ -n "${CLONE_VOICE}${VOICE}" ] || { echo 'voiceclone needs --clone-voice or --voice' >&2; exit 2; } ;;
esac Prevention
- Keep clone samples in a fixed location and default-expand the path with : "${SAMPLE:?}"
- Remember --voice must be a data:audio/... URI when used for cloning
When it happens
Trigger: `codewhale speech --model mimo-v2.5-tts-voiceclone` where `--clone-voice` is absent and `--voice` is absent or whitespace-only (a non-blank --voice value is passed through to the API instead).
Common situations: Forgetting the sample file after switching models; running voiceclone with only a text prompt; assuming a named default voice suffices for cloning.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Use either --clone-voice or --voice for cloned voice data, n
- mimo-v2.5-tts-voicedesign requires --voice-prompt or --instr
- speech synthesis requires provider 'xiaomi-mimo' (current: {
- `speech` requires provider = "xiaomi-mimo" (current: {}). Ru
- speech requires a TTS model (examples: {}); got {model}
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/679877ada8930b7a.
Report an issue: GitHub.