blog-audio

Gera narração de áudio profissional para postagens de blog usando o Google Gemini TTS, com modos de resumo, leitura completa ou diálogo entre dois palestrantes.

O que é blog-audio?

Este skill permite a geração de narração de áudio profissional para postagens de blog utilizando o Google Gemini TTS. Ele oferece três modos de operação: resumo (visão geral falada de 200 a 300 palavras), leitura completa do artigo (natural speech) e diálogo estilo podcast entre dois palestrantes, com suporte a 30 vozes, mais de 80 idiomas e saída em HTML5 embed. É útil para complementar conteúdo textual com versões em áudio, melhorando a acessibilidade e o engajamento dos leitores. O skill suporta plataformas como Hugo, Jekyll, Next.js, Gatsby e WordPress, e pode ser chamado internamente por outros skills (como blog-write) sem bloquear o fluxo de escrita. Ele verifica automaticamente a chave de API do Google AI, gerencia o ambiente virtual com run.py e fornece fallback gracioso em caso de erros (como ausência de FFmpeg). Sua documentação detalhada abrange seleção de vozes, preparação de texto por modo, geração de áudio, e incorporação em diversos tipos de site.

Funciona com✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Blog Audio -- Narração TTS com Gemini para Postagens de Blog

Gere narração de áudio profissional de conteúdo de blog usando o Google Gemini TTS. Três modos: resumo (visão geral falada de 200 a 300 palavras), leitura completa do artigo, ou diálogo estilo podcast com dois palestrantes. 30 vozes, mais de 80 idiomas, saída com incorporação HTML5.

Referência Rápida

ComandoO que faz
/blog audio generate <arquivo>Gera narração de áudio de uma postagem de blog
/blog audio voicesMostra vozes disponíveis com características
/blog audio setupVerifica/configura a chave de API para o Gemini TTS

Pré-requisitos

  • Python 3.11+ (venv gerenciado automaticamente pelo run.py)
  • Variável de ambiente GOOGLE_AI_API_KEY (mesma chave usada pelo blog-image)
  • FFmpeg (para conversão de WAV para MP3; usa WAV como fallback se ausente)

Sempre Use o Wrapper run.py

# CORRETO:
python3 scripts/run.py generate_audio.py --text "..." --voice Charon --json

# ERRADO:
python3 scripts/generate_audio.py --text "..."  # Falha sem o venv

Verificação da Chave de API (Padrão de Portão)

Antes de gerar áudio, verifique a chave de API:

echo $GOOGLE_AI_API_KEY
  • Se definida: prossiga com a geração
  • Se não definida: oriente o usuário: "A geração de áudio requer uma chave de API do Google AI. Obtenha uma gratuitamente em https://aistudio.google.com/apikey Em seguida, defina: export GOOGLE_AI_API_KEY=sua-chave Esta é a mesma chave usada por /blog image -- se a geração de imagem funciona, a de áudio também."
  • Quando chamado internamente (do blog-write): retorne silenciosamente se a chave estiver ausente. Nunca bloqueie o fluxo de escrita.

Configuração

Para /blog audio setup:

  1. Verifique se GOOGLE_AI_API_KEY está definida no ambiente
  2. Se blog-image estiver configurado (verifique .mcp.json), a chave já está disponível
  3. Se não, oriente o usuário para https://aistudio.google.com/apikey
  4. Verifique com uma execução de teste: python3 scripts/run.py generate_audio.py --text "Teste" --dry-run --json

Seleção de Voz

Para /blog audio voices:

Carregue references/voices.md e apresente o catálogo de vozes ao usuário.

Pergunte ao usuário qual voz prefere, ou recomende com base no tipo de conteúdo:

  • Narração de artigo: Charon (Informativo) ou Sadaltager (Conhecimento)
  • Tutorial/Instruções: Achird (Amigável) ou Sulafat (Caloroso)
  • Notícias/Análise: Rasalgethi (Informativo) ou Schedar (Equilibrado)
  • Estilo de vida/Bem-estar: Aoede (Leve) ou Vindemiatrix (Suave)
  • Apresentador de diálogo: Puck (Animado) ou Laomedeia (Animado)
  • Especialista em diálogo: Kore (Firme) ou Charon (Informativo)

Fluxo de Geração

Para /blog audio generate <arquivo>:

Passo 1: Leia a Postagem do Blog

Leia o arquivo e extraia:

  • Título (do H1 ou frontmatter)
  • Conteúdo completo (corpo em markdown)
  • Contagem aproximada de palavras

Passo 2: Escolha o Modo

Pergunte ao usuário (ou selecione automaticamente se eles especificaram --mode):

ModoQuando usarSaída
ResumoVisão geral rápida em áudio (1-2 min)Resumo falado de 200 a 300 palavras
CompletoLeitura completa (5-15 min)Artigo completo como fala natural
DiálogoEstilo podcast (3-8 min)Conversa entre duas pessoas sobre o artigo

Passo 3: Prepare o Texto

CRÍTICO: Claude prepara o texto. O script faz apenas TTS.

Modo Resumo: Escreva um resumo falado de 200 a 300 palavras do artigo. Regras:

  • Escreva como fala natural, não texto escrito
  • Abra com a descoberta ou resposta principal do artigo
  • Cubra 3-5 principais conclusões
  • Feche com conselhos acionáveis
  • Sem markdown, sem "Neste artigo...", sem metalinguagem
  • Use transições conversacionais ("Aqui está o que importa...", "A descoberta principal é...")

Modo Completo: Limpe o conteúdo markdown para texto falado limpo:

  • Títulos se tornam transições naturais ("A seguir, vamos ver...")
  • Links se tornam texto simples (remova URLs, mantenha o texto do link)
  • Imagens e gráficos: omita ou descreva brevemente ("Como os dados mostram...")
  • Blocos de código: descreva verbalmente ("O código usa um loop for para...")
  • Listas: converta em frases naturais
  • Remova frontmatter, marcação de esquema, tags HTML
  • Adicione uma breve introdução: "Este é [título], publicado em [data]."

Modo Diálogo: Escreva um roteiro de conversa de 2 pessoas sobre o artigo:

  • Palestrante1 = Apresentador (curioso, faz boas perguntas)
  • Palestrante2 = Especialista (conhecimento, dá respostas claras)
  • Formate cada linha como: [Palestrante1] Qual é a principal conclusão aqui?
  • Cubra os pontos principais do artigo de forma conversacional
  • 15-25 trocas (produz ~3-8 minutos)
  • Natural, não forçado ("Esse é um ótimo ponto" em vez de "De fato, como a pesquisa indica")

Passo 4: Selecione a Voz

Se o usuário escolheu uma voz, use-a. Caso contrário, recomende com base no modo:

  • Resumo/Completo: padrão para Charon (Informativo)
  • Diálogo: padrão para Puck (Apresentador) + Kore (Especialista)

Passo 5: Gere o Áudio

Escreva o texto preparado em um arquivo temporário e então chame:

# Voz única (modo resumo ou completo)
python3 scripts/run.py generate_audio.py \
  --text-file /tmp/blog_audio_prepared.txt \
  --voice Charon \
  --model flash \
  --output /caminho/para/audio/post-slug.mp3 \
  --json

# Duas vozes (modo diálogo)
python3 scripts/run.py generate_audio.py \
  --text-file /tmp/blog_audio_dialogue.txt \
  --voice Puck \
  --voice2 Kore \
  --model pro \
  --output /caminho/para/audio/post-slug-dialogue.mp3 \
  --json

Seleção de modelo:

  • flash (padrão): Rápido, barato. Bom para resumos e narração padrão.
  • pro: Maior qualidade. Use para modo diálogo ou conteúdo premium.

Passo 6: Entregue

Apresente o resultado ao usuário:

  1. Caminho do arquivo -- onde o áudio foi salvo
  2. Duração -- legível (ex.: "3:42")
  3. Código de incorporação -- tag de áudio HTML5 pronta para colar
  4. Custo -- custo estimado da API
  5. Sugestão de posicionamento -- onde inserir a incorporação na postagem do blog

Guia de Incorporação

HTML padrão (Hugo, Jekyll, sites estáticos)

<audio controls preload="metadata">
  <source src="audio/post-slug.mp3" type="audio/mpeg">
  Seu navegador não suporta o elemento de áudio.
</audio>

MDX (Next.js, Gatsby)

<audio controls preload="metadata">
  <source src="/audio/post-slug.mp3" type="audio/mpeg" />
</audio>

WordPress

[audio src="audio/post-slug.mp3"]

Posicionamento

Insira o player de áudio após a introdução (abaixo do primeiro H2) ou no início do artigo com um rótulo: "Ouça este artigo" ou "Versão em áudio".

API Interna (para blog-write)

Quando invocado internamente pelo blog-write:

Entrada:

  • text: Texto preparado (já limpo por Claude)
  • voice: Nome da voz (padrão: Charon)
  • voice2: Segunda voz para diálogo (opcional)
  • model: flash ou pro
  • output_path: Onde salvar o arquivo

Saída:

### Narração em Áudio
- **Caminho:** /caminho/para/audio/post-slug.mp3
- **Duração:** 3:42
- **Voz:** Charon
- **Incorporação:** `<audio controls preload="metadata"><source src="audio/post-slug.mp3" type="audio/mpeg"></audio>`

Fallback gracioso: Se GOOGLE_AI_API_KEY não estiver definida, retorne imediatamente sem erro. O fluxo de escrita continua sem áudio. Nunca bloqueie o blog-write porque a geração de áudio está indisponível.

Tratamento de Erros

ErroResolução
GOOGLE_AI_API_KEY não definidaObtenha a chave em https://aistudio.google.com/apikey
FFmpeg não encontradoInstale: sudo apt install ffmpeg. Usa saída WAV como fallback.
Limite de taxa excedidoEspere e tente novamente. Verifique limites em https://aistudio.google.com/rate-limit
Texto muito longo (>32k tokens)Divida em seções, gere separadamente
Nome de voz desconhecidoExecute /blog audio voices para ver opções válidas
Erro de APIVerifique validade da chave, disponibilidade do modelo (modelos de preview)
Chave de API ausente (chamada interna)Retorne silenciosamente -- o fluxo de escrita continua

Documentação de Referência

Carregue sob demanda -- NÃO carregue tudo na inicialização:

  • references/voices.md -- Catálogo completo de 30 vozes, recomendações por tipo de conteúdo, pares de diálogo

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Habilidades Relacionadas