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_..." >> .env

2. 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 natural

3. 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.mts

4. 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.mp3

5. 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"
done

6. 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.