calesthio/minimax-speech
Use this skill when producing speech, narration, dubbing, localization, advertising voice, voice-clone previews, or interactive voice with MiniMax speech/audio APIs. It covers MiniMax T2A HTTP, WebSocket streaming, async long-form TTS, Speech 2.8/2.6/02 model selection, system and custom voices, rapid voice cloning, voice design, pronunciation/language/emotion controls, pricing and limits, artifact custody, consent and rights checks, and production QA.
npx skills add https://github.com/calesthio/generative-media-skills --skill minimax-speech
Use MiniMax when the production goal is generated speech: narration, localized VO, ad reads, audiobook-style segments, synthetic dialogue, product walkthroughs, voice-agent responses, or approved voice cloning. Do not use this skill for MiniMax video, music generation, image generation, or general LLM calls except where they affect speech production.
The facts below were verified against official MiniMax API documentation, release notes, pricing, and policy pages on 2026-07-10. Treat model IDs, prices, rate limits, retention windows, voice lists, and policy language as volatile; re-check before a paid or regulated production run.
Documented MiniMax speech capabilities:
POST https://api.minimax.io/v1/t2a_v2.wss://api.minimax.io/ws/v1/t2a_v2.POST /v1/t2a_async_v2, query it, then retrieve the generated file.POST /v1/voice_clone.POST /v1/voice_design, where a text description produces a generated voice_id and preview audio.sentence, word, or word_streaming depending on streaming mode).text_validation is provided.Not documented as standalone production APIs in the official docs index as of 2026-07-10:
If a user asks for transcription, voice conversion, or full dubbing, combine MiniMax TTS with another documented ASR/alignment/dubbing provider, or explain that MiniMax’s official speech surface does not currently expose that workflow directly.
Use the newest supported model unless a constraint points elsewhere.
speech-2.8-hd: choose for final narration, ads, audiobooks, brand films, expressive dialogue, and sound-tag support where quality matters more than turnaround.speech-2.8-turbo: choose for interactive voice, review drafts, batch localization, cost-sensitive social variants, and latency-sensitive WebSocket work.speech-2.6-hd: use only when a legacy production has already approved its sound, or when testing shows it handles a specific cloned voice better.speech-2.6-turbo: use for legacy or high-volume cases that were tuned around 2.6 behavior.speech-02-hd and speech-02-turbo: legacy; keep for continuity with old approved voices or third-party wrappers that have not upgraded.speech-01-*: legacy compatibility only.Documented model facts as of 2026-07-10:
speech-2.8-hd, speech-2.8-turbo, speech-2.6-hd, speech-2.6-turbo, speech-02-hd, speech-02-turbo, speech-01-hd, and speech-01-turbo.speech-2.8-hd and speech-2.8-turbo.Production heuristic:
Use HTTP when the full audio can be generated before playback and the text is under the sync limit. Use WebSocket when the user hears speech as it is generated, or when the script is over 3,000 characters but still within the synchronous 10,000-character ceiling. Use async for long-form narration, audiobook chapters, many-file jobs, or anything approaching the 50,000-character async text limit.
Documented limits and lifecycle:
text_file_id; official async guide material also describes long-form file workflows.task_start, accepts one or more task_continue text events after task_started, and ends with task_finish.hex audio or a URL; returned URLs are documented as valid for 24 hours.task_id, task_token, file_id, and usage_characters; after completion, retrieve the file through File Retrieve. The async docs warn that the download URL is valid for 9 hours from generation and generated data is lost after expiration.Production heuristic:
Use a minimal request first, then add controls only for the production problem you need to solve.
Common controls:
voice_setting.voice_id: system, cloned, or voice-designed ID.voice_setting.speed: 0.5 to 2; use small changes such as 0.92, 1.0, 1.08.voice_setting.vol: (0, 10]; keep near 1 and normalize in post unless a voice is consistently underpowered.voice_setting.pitch: -12 to 12; prefer -2 to 2 for natural production.voice_setting.emotion: documented values include happy, sad, angry, fearful, disgusted, surprised, calm, fluent, and whisper, with fluent/whisper documented only for 2.6 models and whisper not supported by 2.8.text_normalization in the HTTP OpenAPI, english_normalization in async/WebSocket-related specs), so verify the exact parameter name for the endpoint before implementation.language_boost: set a specific language or dialect when the script is known; use auto when uncertain. Do not assume Speech-01/02 support Persian, Filipino, or Tamil even though those values appear in the enum.pronunciation_dict.tone: define specific pronunciation substitutions such as acronym expansions.<#x#> between speakable text segments, where x is 0.01 to 99.99 seconds. Do not place pause markers consecutively.audio_setting.sample_rate: documented values include 8000, 16000, 22050, 24000, 32000, and 44100; use 32000 for API default, 44100 if the rest of the audio post chain requires it, and 8000 only for telephony-style tests.audio_setting.bitrate: documented values include 32000, 64000, 128000, and 256000; relevant to MP3.audio_setting.format: rendered HTTP docs list mp3, wav, and flac for non-streaming and mp3 for streaming, while current embedded OpenAPI specs also expose pcm, pcmu_raw, pcmu_wav, and opus with endpoint-specific caveats. Verify the exact format set before telephony, raw PCM, or Opus workflows.audio_setting.channel: 1 mono or 2 stereo; mono is usually best for VO stems.subtitle_enable and subtitle_type: enable sentence or word timestamps for video caption alignment; word_streaming is only valid with stream=true.voice_modify: deeper/brighter pitch, stronger/softer intensity, fuller/crisper timbre, and one optional effect such as spacious_echo, auditorium_echo, lofi_telephone, or robotic.Production heuristic:
Write for a performer, not for a page.
language_boost to fix a literal translation.Sound tags on 2.8:
(laughs), (sighs), (breath), (inhale), (exhale), (gasps), (coughs), (humming), or similar documented tags only where a human would actually make that sound.Always treat the voice as a production decision.
Documented voice management:
POST /v1/get_voice can list system, voice_cloning, voice_generation, or all.POST /v1/delete_voice deletes only cloned or voice-designed voice_id values. Deleted IDs cannot be reused.Production heuristic:
voice_id with the project artifact ledger, not just in the generation script. Voice IDs are creative assets and audit objects.Use cloning only with explicit permission, rights clearance, and a documented purpose. Voice is a biometric identifier and a performance asset.
Documented workflow:
POST /v1/files/upload with purpose=voice_clone.mp3, m4a, or wav, at least 10 seconds and no more than 5 minutes, and no larger than 20 MB.POST /v1/voice_clone with the returned file_id, a custom voice_id, and optional preview text.voice_id must be 8–256 characters, start with an English letter, contain only letters, digits, -, and _, not end in - or _, and not duplicate an existing ID.text_validation to compare the sample transcript with ASR output; if similarity is below accuracy, the request is rejected with error 1043.need_noise_reduction and need_volume_normalization can clean a clone source, but use better source audio first.aigc_watermark appends an AI-generated-content watermark tone to preview audio.Prompt audio for stability:
purpose=prompt_audio.mp3, m4a, or wav, less than 8 seconds, and up to 20 MB.clone_prompt.prompt_audio and clone_prompt.prompt_text to improve similarity and stability.Consent gate:
voice_id, deletion plan, and usage log together.Use voice design when the user needs a custom voice persona but does not have a legally cleared speaker sample.
Documented workflow:
POST /v1/voice_design accepts a required prompt voice description and required preview_text.preview_text has a documented maximum of 500 characters.voice_id is omitted, MiniMax returns a generated one.voice_id and trial_audio as hex-encoded preview audio.$3 per voice; the Voice Design API page also notes preview audio character fees. Verify the current bill before bulk casting.Production heuristic:
Treat generated audio and voice IDs as production assets.
trace_id, model ID, voice ID, language settings, cost estimate, source script hash, and output file hash.Documented pay-as-you-go prices on 2026-07-10:
speech-2.8-turbo: $60 / 1M characters.speech-2.8-hd: $100 / 1M characters.speech-2.6-turbo / speech-02-turbo: $60 / 1M characters.speech-2.6-hd / speech-02-hd: $100 / 1M characters.$1.5 per voice.$3 per voice.Documented rate limits on 2026-07-10:
speech-2.8, speech-2.6, and speech-02: 60 RPM on the general rate-limit page.60 RPM.20 RPM.Production heuristic:
Review with headphones and a transcript, then in the final video mix.
Minimum QA checklist:
Recommended measurable checks:
vol.Production intent: a 30-second SaaS launch voiceover for a web video.
Approach: cast system voices, approve one, render final with speech-2.8-hd, keep mono MP3/WAV stem for editing.
Example request:
{
"model": "speech-2.8-hd",
"text": "Your support queue should not feel like a guessing game.<#0.35#>\nMeet Northstar Assist: it reads every ticket, finds the real blocker, and drafts the next best reply before your team opens the thread.<#0.5#>\nLess triage. Faster answers. Happier customers.",
"stream": false,
"language_boost": "English",
"voice_setting": {
"voice_id": "English_Insightful_Speaker",
"speed": 0.96,
"vol": 1,
"pitch": 0,
"emotion": "calm"
},
"pronunciation_dict": {
"tone": ["Northstar/North star"]
},
"audio_setting": {
"sample_rate": 44100,
"bitrate": 256000,
"format": "mp3",
"channel": 1
},
"subtitle_enable": true,
"subtitle_type": "word",
"output_format": "hex"
}
Expected result: a controlled, premium read with clean word-level subtitle data.
Failure modes:
calm may underplay a launch; test one take with no manual emotion and one with happy.<#0.2#> or edit silence in post.Variation: use speech-2.8-turbo for auditions, then regenerate the approved take in HD.
Production intent: localize an internal training video using an employee’s approved voice.
Approach: collect written consent, upload a clean source sample, clone, activate the voice with a short synthesis, then generate localized scene stems.
Workflow:
purpose=voice_clone.voice_clone with a project-scoped voice_id, text_validation, accuracy, and normalization only if needed.language_boost set explicitly.Example clone request body:
{
"file_id": 123456789012345680,
"voice_id": "AcmeTraining_JRivera_2026Q3",
"text": "Welcome to the safety briefing. Today we will cover the three checks every operator must complete before starting a shift.",
"model": "speech-2.8-hd",
"language_boost": "English",
"text_validation": "Welcome to the safety briefing. Today we will cover the three checks every operator must complete before starting a shift.",
"accuracy": 0.75,
"need_noise_reduction": false,
"need_volume_normalization": true,
"aigc_watermark": true
}
Expected result: a cloned voice ID and a preview URL if preview text/model are supplied.
Failure modes:
get_voice until it has been used successfully for synthesis.Variation: use clone_prompt with a sub-8-second prompt audio and transcript when the clone needs more stable similarity.
Production intent: a voice assistant that speaks an answer while generating.
Approach: use WebSocket T2A with speech-2.8-turbo, short chunks, and a playback buffer.
Workflow:
wss://api.minimax.io/ws/v1/t2a_v2 with Bearer auth.task_start with model, voice, language, and MP3 audio settings.task_started.task_continue message per response segment.task_finish when the response is complete.Example task_start:
{
"event": "task_start",
"model": "speech-2.8-turbo",
"language_boost": "English",
"voice_setting": {
"voice_id": "English_radiant_girl",
"speed": 1.08,
"vol": 1,
"pitch": 0,
"english_normalization": true
},
"audio_setting": {
"sample_rate": 32000,
"bitrate": 128000,
"format": "mp3",
"channel": 1
}
}
Example task_continue:
{
"event": "task_continue",
"text": "I found three matching invoices. The newest one is from June tenth for four hundred eighty dollars."
}
Expected result: audio chunks arrive during synthesis, then an is_final event marks completion for the segment.
Failure modes:
task_started.Variation: for a non-interactive IVR prompt library, render the same copy over HTTP or async and QA the files offline.
Take calesthio/minimax-speech from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.