Narrator voice
Narrator voice: cloning method and profile. How the narrator voice for the video intros is cloned from one consented recording, the settings, the scoring and how to reproduce it.
This page records how the narrator voice used in the social video intros is made, so that another agent can reproduce the method exactly. It covers the model ids, the call shapes, the settings, the scoring and the steps. It holds no audio, no reference recording, no voice identifier and no keys. Last reviewed 30 Oct 2026.
Consent and scope
- The voice is cloned only from the owner's own recording, made and sent by him for this purpose, with his permission for this use.
- Use is limited to the narrator's own posts: the Story Time intro and the narration of his clips. The voice never reads anyone else's words.
- Every post that carries the voice or the likeness carries an AI disclosure: the platform's synthetic-media flag and the caption line "Intro: AI-generated likeness and voice of the narrator, made with his permission."
- The reference recording and the voice identifier stay private. They are not published here or anywhere else.
The profile in force
| Setting | Value |
|---|---|
| Clone model | fal-ai/minimax/voice-clone (MiniMax instant voice clone) |
| Speech model | fal-ai/minimax/speech-02-hd |
| Reference | The narrator's whole voice note, about 95 seconds, one speaker in a quiet room, converted to mono MP3 at 96 kbps with no other change. No cutting, denoise, EQ or loudness normalisation. |
| Clone flags | noise_reduction: false, need_volume_normalization: false, preview model: speech-02-hd |
| Voice settings | speed 1, vol 1, pitch 0; emotion unset; english_normalization false |
| Language boost | Not set |
| Output | output_format: url (MP3, 32 kHz mono, 128 kbps) |
| After generation | Nothing. No denoise, EQ, pitch, tempo or loudness change on the voice. |
Step 1: clone the voice (once)
Send the whole reference recording to the clone model as an HTTPS URL or a base64 data URI. The model accepts 10 seconds to 5 minutes of audio.
POST fal-ai/minimax/voice-clone (queue API)
{
"audio_url": "data:audio/mpeg;base64,<whole reference mp3>",
"noise_reduction": false,
"need_volume_normalization": false,
"model": "speech-02-hd",
"text": "<optional preview line>"
}
-> { "custom_voice_id": "<private id>", "audio": { "url": "<preview mp3>" } }
The call costs about $1.50 at the published page rate, plus the preview characters. Store the returned id privately with the profile. The preview read by speech-02-hd is the exact sound the owner approved.
Step 2: make speech
POST fal-ai/minimax/speech-02-hd (queue API)
{
"text": "Beat one. <#1.0#> Beat two. <#1.0#> Beat three.",
"voice_setting": { "voice_id": "<private id>", "speed": 1, "vol": 1, "pitch": 0 },
"output_format": "url"
}
-> { "audio": { "url": "<speech mp3>" }, "duration_ms": 72072 }
- Field name. The
speech-02models taketext; the newerspeech-2.6models takeprompt. Pick the field from the model id. - One call per script. Send the whole narration in one request (up to 5,000 characters; there is no 40-second limit). Separate the beats with pause tags such as
<#1.0#>, then cut the single take at the middle of each tagged pause when the edit needs one file per beat. - Never per-line takes. Generating each line separately lets the timbre wander from line to line. That drift was the main reason earlier versions stopped sounding like the narrator.
- Spell for the ear. Welsh place names read best as phonetic spellings in the script (for example Llandock for Llandough) and numbers read best spelled out.
- Cost is cents per narration (about $0.10 per 1,000 characters; not checked against an invoice).
Step 3: keep the clone alive, or clone again
- MiniMax may delete a cloned voice that goes unused for about 7 days (MiniMax's published rule; not tested here). Any speech call counts as use.
- If speech answers that the voice is not found or invalid, repeat Step 1 with the same untouched recording and the same flags (about $1.50 again). Store the new id, make one short test line and score it (Step 4) before any real narration.
- Never clone from a cleaned, trimmed or normalised copy. The owner approved the clone made from the whole untouched note.
Step 4: score a voice against the reference
- Speaker similarity. Embed the candidate and the reference with the WeSpeaker ResNet34 model trained on VoxCeleb (
wespeaker_en_voxceleb_resnet34_LM.onnx, run with sherpa-onnx, 16 kHz mono) and take the cosine of the two embeddings. On this reference, unrelated male voices scored 0.72 to 0.83, so a clone needs to sit clearly above that band. - Pitch. Median fundamental frequency over voiced frames (autocorrelation, 60 to 300 Hz), candidate against reference.
- Brightness. Median spectral centroid over voiced frames, candidate against reference.
- Words. Transcribe the candidate and compare it with the script.
- Gaps. Inspect the levels for silences longer than the intended pauses.
| Candidate (30 Oct 2026) | Similarity | Note |
|---|---|---|
| Zero-shot clone per call, Chatterbox HD | 0.82 to 0.86 | Earlier route; just above unrelated voices |
MiniMax clone + speech-2.6-hd | 0.92 | Highest score on a 15-second sample |
| Index-TTS-2, zero-shot from the whole note | 0.90 | Pitch about 10% low |
MiniMax clone + speech-02-hd | 0.85 to 0.86 | Chosen by the narrator; 0.92 on the full 72-second narration |
Step 5: the owner's ear decides
Four 15-second samples reading the same lines were played to the narrator in order. He chose the speech-02-hd reading even though two others scored higher on the short samples. The rule that follows: scores only shortlist; the owner's own ear makes the choice. Short samples also under-read similarity: the same voice scored 0.86 on 15 seconds and 0.92 on a full narration.
Lessons from the earlier versions
- Line-by-line generation drifted in timbre (spectral centroid moved between about 510 and 990 Hz across lines).
- Clean-up filters (high-pass, treble roll-off, denoise) dulled the voice and moved it further from the reference.
- Zero-shot models that condition on only the first few seconds of a reference are sensitive to which seconds are chosen; a stored clone made from the whole recording avoids that.
- When the owner cannot recognise the voice, change the method, not the recording: a 95-second note was enough for a recognisable clone.
Reproduce it, in order
- Get the owner's consent and one clean recording of at least 60 seconds, one speaker, no music.
- Convert to mono MP3 with no other processing.
- Clone it (Step 1) and keep the id private.
- Make a short test line (Step 2), score it (Step 4) and play it to the owner.
- Generate each script in one call, cut at the pause tags, apply nothing else.
- Re-clone if the id lapses (Step 3).
- Disclose the AI voice on every post.