ElevenLabs
Voiceover automatico em PT-BR com Claude Code e ElevenLabs API. Converta textos em narracoes realistas sem abrir nenhum app.
O que é
ElevenLabs
ElevenLabs e uma plataforma de sintese de voz com IA que transforma texto em audio com entonacao, ritmo e emocao proximos de narracoes humanas. Suporta Portugues do Brasil nativamente nos modelos eleven_multilingual_v2 e eleven_v3, com vozes masculinas e femininas treinadas para o sotaque brasileiro. Ideal para criadores de conteudo, desenvolvedores e equipes que precisam de narracoes profissionais sem gravar nada.
Integrada ao Claude Code, a API da ElevenLabs vira uma ferramenta de linha de comando. Um agente pode receber um roteiro, chamar o endpoint POST /v1/text-to-speech, salvar o arquivo MP3 gerado e ate fazer upload para o storage — tudo em uma unica sessao no terminal, sem abrir nenhum app externo. O SDK oficial para Node.js e Python elimina a complexidade de montar requests manualmente.
O caso de uso mais direto: voce escreve o roteiro de um video, o Claude Code chama a API com o model eleven_multilingual_v2 e a voice_id de uma voz PT-BR, e recebe um arquivo de audio pronto para uso no Remotion, no DaVinci ou em qualquer pipeline de edicao. O resultado e uma narracao de estudio gerada em segundos, com controle total de velocidade, estabilidade e similaridade de voz via voice_settings.
Como funciona
Principais recursos
TTS Multilingue
Modelos eleven_multilingual_v2 e eleven_v3 suportam Portugues do Brasil nativamente com entonacao e ritmo naturais.
Latencia Ultra-baixa
eleven_flash_v2_5 entrega audio em ~75ms, ideal para agentes de voz em tempo real e producao em escala com custo 50% menor.
API REST + SDKs
Endpoint POST /v1/text-to-speech/{voice_id} com SDKs oficiais para Python e Node.js. Autenticacao via xi-api-key no header.
Voice Settings
Controle granular de stability, similarity_boost e speed por requisicao. Ajuste o tom da narracao sem criar vozes novas.
Streaming de Audio
Receba chunks de audio conforme o texto e processado. Ideal para narracoes longas ou integracao com players em tempo real.
Voice Library
Endpoint GET /v1/voices lista todas as vozes disponiveis. Filtre por idioma, genero e estilo para encontrar a voz PT-BR ideal.
Tutorial
Voiceover PT-BR com Claude Code
1. Instalar o SDK e configurar a chave
# Node.js
npm install @elevenlabs/elevenlabs-js dotenv
# Python
pip install elevenlabs python-dotenv
# Crie .env na raiz do projeto
echo "ELEVENLABS_API_KEY=sk_..." >> .env2. Listar vozes PT-BR disponiveis
# Via curl — retorna JSON com id, name, labels.language
curl https://api.elevenlabs.io/v1/voices \
-H "xi-api-key: $ELEVENLABS_API_KEY" | \
jq '.voices[] | select(.labels.language == "Portuguese") | {id: .voice_id, name: .name}'
# Exemplos de vozes PT-BR na Voice Library:
# Rafael Valente → narrador profissional brasileiro
# Higor Bourges → voz jovem com grave natural3. Gerar audio via SDK Node.js
// voiceover.mts
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { writeFileSync } from "fs";
import "dotenv/config";
const client = new ElevenLabsClient();
// Substitua pelo voice_id encontrado no passo 2
const VOICE_ID = "SEU_VOICE_ID_PTBR";
const audio = await client.textToSpeech.convert(VOICE_ID, {
text: "Bem-vindo ao tutorial de voiceover automatico com Claude Code.",
modelId: "eleven_multilingual_v2",
outputFormat: "mp3_44100_128",
voiceSettings: {
stability: 0.5,
similarityBoost: 0.75,
speed: 1.0,
},
});
// Converte o stream em Buffer e salva em disco
const chunks: Buffer[] = [];
for await (const chunk of audio) {
chunks.push(Buffer.from(chunk));
}
writeFileSync("naracao.mp3", Buffer.concat(chunks));
console.log("Audio salvo: naracao.mp3");
// Executar:
// npx tsx voiceover.mts4. Alternativa: chamada REST direta com curl
# POST /v1/text-to-speech/{voice_id}
# Retorna audio binario (mp3) direto no arquivo de saida
curl -X POST \
"https://api.elevenlabs.io/v1/text-to-speech/SEU_VOICE_ID_PTBR" \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Seu roteiro em portugues brasileiro vai aqui.",
"model_id": "eleven_multilingual_v2",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.75,
"speed": 1.0
}
}' \
--output naracao.mp35. Integrar ao fluxo do Claude Code
# No CLAUDE.md do seu projeto, adicione:
# "Ao finalizar um roteiro, execute npx tsx voiceover.mts
# e salve o resultado em /audio/{slug}.mp3"
# Claude Code vai:
# 1. Escrever o roteiro no arquivo de texto
# 2. Executar npx tsx voiceover.mts automaticamente
# 3. Confirmar o caminho do arquivo gerado
# Para processar varios roteiros em lote via shell:
for f in roteiros/*.txt; do
SLUG=$(basename "$f" .txt)
curl -sX POST \
"https://api.elevenlabs.io/v1/text-to-speech/SEU_VOICE_ID_PTBR" \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-H "Content-Type: application/json" \
-d "{"text": "$(cat $f)", "model_id": "eleven_multilingual_v2"}" \
--output "audio/${SLUG}.mp3"
echo "Gerado: audio/${SLUG}.mp3"
done6. Modelo Flash para producao em escala
// Para volumes altos ou agentes de voz em tempo real,
// troque o model_id por eleven_flash_v2_5:
// - Latencia ~75ms (vs 250-300ms do multilingual_v2)
// - 50% mais barato por caractere na API
// - Suporta ate 40.000 caracteres por requisicao
const audio = await client.textToSpeech.convert(VOICE_ID, {
text: roteiro, // textos longos sem problema
modelId: "eleven_flash_v2_5",
outputFormat: "mp3_44100_128",
});
// Verificar consumo de caracteres no mes:
const sub = await client.user.getSubscription();
console.log(`Caracteres restantes: ${sub.characterLimit - sub.characterCount}`);Comece agora
Explore o repositório, contribua ou integre na sua operação.