Merlino Voice — Fish Audio TTS
Generate voiceovers using Mike's cloned voice on Fish Audio. Used for video narrations, page explainers, and podcast-style content.
Voice Defaults
| Setting | Value |
|---------|-------|
| Voice Model ID | 3782f7b36e5d411fb9d70d1809b134a0 |
| Model | s1 |
| Speed | 0.9 |
| Temperature | 0.9 |
| Bitrate | 192kbps |
| Latency | normal (best quality) |
| Chunk Length | 300 |
| Format | mp3 |
Auth
Authorization: Bearer <FISH_AUDIO_API_KEY>
Base URL: https://api.fish.audio
Key location: D:\Ecosystem\secrets\MASTER_API_KEYS.env → FISH_AUDIO_API_KEY
Quick Generate — Shell
Always use a temp JSON file to avoid shell escaping issues with exclamation marks, em dashes, or apostrophes.
cat > /tmp/fish-tts.json << 'ENDJSON'
{
"text": "Your narration text here. Keep it natural.",
"reference_id": "3782f7b36e5d411fb9d70d1809b134a0",
"format": "mp3",
"mp3_bitrate": 192,
"chunk_length": 300,
"latency": "normal",
"temperature": 0.9,
"speed": 0.9
}
ENDJSON
curl -s -X POST "https://api.fish.audio/v1/tts" \
-H "Authorization: Bearer $FISH_AUDIO_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/fish-tts.json \
--output output.mp3
Node.js Integration
import fs from 'fs';
import fetch from 'node-fetch';
async function generateVoiceover(text, outputPath) {
const response = await fetch('https://api.fish.audio/v1/tts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.FISH_AUDIO_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
text,
reference_id: '3782f7b36e5d411fb9d70d1809b134a0',
format: 'mp3',
mp3_bitrate: 192,
chunk_length: 300,
latency: 'normal',
temperature: 0.9,
speed: 0.9
})
});
const buffer = await response.buffer();
fs.writeFileSync(outputPath, buffer);
console.log(`Saved: ${outputPath}`);
}
Character Limit
Fish Audio max: approximately 5000 characters per request. For longer scripts, split on sentence boundaries and concatenate MP3 files with ffmpeg-agent.
# Concatenate multiple TTS clips
python cli.py concat part1.mp3 part2.mp3 part3.mp3 -o full-narration.mp3
Other Fish Audio Voices
To use a different cloned voice or browse available models, hit the voices endpoint:
curl https://api.fish.audio/v1/models \
-H "Authorization: Bearer $FISH_AUDIO_API_KEY"
Use in Video Production
- Write script using [[scriptwriter]]
- Generate voiceover with Merlino Voice
- Sync audio with video in [[ffmpeg-agent]] or [[video-factory]]
- Add captions with ffmpeg add-subs or Remotion [[remotion-compositions]]
Cost
Fish Audio charges per character. Mike's voice clone is already set up — no additional clone cost.
Related Topics
- [[assemblyai-transcription]] — transcribe audio back to text
- [[video-factory]] — full video narration pipeline using this voice
- [[ffmpeg-agent]] — merge audio into video
#video-sop #fish-audio #tts #voice-clone #audio