Skills Agentes

Blog Audio

Genera narración en audio de posts con Google Gemini TTS: resumen hablado, lectura completa o diálogo tipo pódcast a dos voces, con 30 voces y salida MP3 más el código de inserción HTML5.

Estrellas
2.1k

en todo el repo

Actividad
68

0–100, la ruta de este skill

Actualizado
hace 19 días

último commit aquí

Commits
11

últimos 90 días

Contexto
2.2k tok

129 tok en reposo

Paquete
8 archivos

84 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add AgriciDaniel/claude-blog --skill blog-audio --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests, needs API credentials.

Qué hace

  • Prepara el texto hablado (resumen de 200-300 palabras, lectura completa limpia o guion de 15-25 intervenciones) y deja al script solo la síntesis de voz
  • Genera el MP3 con `python3 scripts/run.py generate_audio.py`, eligiendo modelo `flash` o `pro` y una o dos voces
  • Devuelve ruta, duración, coste estimado, etiqueta `<audio>` lista para pegar y dónde colocarla en el post
  • Recomienda voz según el contenido: Charon para artículos, Achird para tutoriales, Puck y Kore para el diálogo
  • Si falta `GOOGLE_AI_API_KEY` y la llamada viene de blog-write, vuelve en silencio y nunca bloquea la escritura

Úsalo cuando

  • El usuario dice "blog audio", "narrar el blog", "versión en audio", "text to speech" o "modo pódcast"
  • blog-write necesita una narración opcional del post recién generado

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Genera la versión en audio de este post
    • Conviértelo en un diálogo tipo pódcast a dos voces
    • ¿Qué voces hay disponibles?

    SKILL.md

    En inglés

    Blog Audio: Gemini TTS Narration for Blog Posts

    Generate professional audio narration of blog content using Google's Gemini TTS. Three modes: summary (200-300 word spoken overview), full article read-aloud, or two-speaker podcast dialogue. 30 voices, 80+ languages, HTML5 embed output.

    Quick Reference

    Command What it does
    /blog audio generate <file> Generate audio narration of a blog post
    /blog audio voices Show available voices with characteristics
    /blog audio setup Check/configure API key for Gemini TTS

    Prerequisites

    • Python 3.11+ (venv managed automatically by run.py)
    • GOOGLE_AI_API_KEY environment variable (same key used by blog-image)
    • FFmpeg (for WAV-to-MP3 conversion; falls back to WAV if missing)

    Always Use run.py Wrapper

    # CORRECT:
    python3 scripts/run.py generate_audio.py --text "..." --voice Charon --json
    
    # WRONG:
    python3 scripts/generate_audio.py --text "..."  # Fails without venv
    

    API Key Check (Gate Pattern)

    Before generating audio, check for the API key:

    test -n "${GOOGLE_AI_API_KEY:-}" && echo "GOOGLE_AI_API_KEY is set" || echo "GOOGLE_AI_API_KEY is not set"
    
    • If set: proceed with generation
    • If not set: guide the user: "Audio generation requires a Google AI API key. Get one free at https://aistudio.google.com/apikey Then set it: export GOOGLE_AI_API_KEY=your-key This can be the same key used by /blog image, but it must be exported in the shell."
    • When called internally (from blog-write): return silently if key is missing. Never block the writing workflow.

    Setup

    For /blog audio setup:

    1. Check if GOOGLE_AI_API_KEY is set in environment
    2. If blog-image uses project .mcp.json, confirm the referenced env var is exported
    3. If not, guide user to https://aistudio.google.com/apikey
    4. Verify with a dry run: python3 scripts/run.py generate_audio.py --text "Test" --dry-run --json

    Voice Selection

    For /blog audio voices:

    Load references/voices.md and present the voice catalog to the user.

    Ask the user which voice they prefer, or recommend based on content type:

    • Article narration: Charon (Informative) or Sadaltager (Knowledgeable)
    • Tutorial/how-to: Achird (Friendly) or Sulafat (Warm)
    • News/analysis: Rasalgethi (Informative) or Schedar (Even)
    • Lifestyle/wellness: Aoede (Breezy) or Vindemiatrix (Gentle)
    • Dialogue host: Puck (Upbeat) or Laomedeia (Upbeat)
    • Dialogue expert: Kore (Firm) or Charon (Informative)

    Generation Workflow

    For /blog audio generate <file>:

    Step 1: Read the Blog Post

    Read the file and extract:

    • Title (from H1 or frontmatter)
    • Full content (markdown body)
    • Approximate word count

    Step 2: Choose Mode

    Ask the user (or auto-select if they specified --mode):

    Mode When to use Output
    Summary Quick audio overview (1-2 min) 200-300 word spoken summary
    Full Complete read-aloud (5-15 min) Full article as natural speech
    Dialogue Podcast-style (3-8 min) Two-person conversation about the article

    Step 3: Prepare Text

    Claude prepares the text; the script does TTS only.

    Summary mode: Write a 200-300 word spoken summary of the article. Rules:

    • Write as natural speech, not written text
    • Open with the article's key finding or answer
    • Cover 3-5 main takeaways
    • Close with actionable advice
    • No markdown, no "In this article...", no meta-commentary
    • Use conversational transitions ("Here's what matters...", "The key finding is...")

    Full mode: Strip the markdown content to clean spoken text:

    • Headings become natural transitions ("Next, let's look at...")
    • Links become plain text (remove URLs, keep anchor text)
    • Images and charts: omit or briefly describe ("As the data shows...")
    • Code blocks: describe verbally ("The code uses a for-loop to...")
    • Lists: convert to natural sentences
    • Remove frontmatter, schema markup, HTML tags
    • Add brief intro: "This is [title], published on [date]."

    Dialogue mode: Write a 2-person conversation script about the article:

    • Speaker1 = Host (curious, asks good questions)
    • Speaker2 = Expert (knowledgeable, gives clear answers)
    • Format each line as: Speaker1: What's the key takeaway here?
    • Cover the article's main points conversationally
    • 15-25 exchanges (produces ~3-8 minutes)
    • Natural, not stilted ("That's a great point" over "Indeed, as the research indicates")

    Step 4: Select Voice

    If the user chose a voice, use it. Otherwise, recommend based on mode:

    • Summary/Full: default to Charon (Informative)
    • Dialogue: default to Puck (Host) + Kore (Expert)

    Step 5: Generate Audio

    Write the prepared text to a file under the working directory, then call:

    # Single voice (summary or full mode)
    python3 scripts/run.py generate_audio.py \
      --text-file blog_audio_prepared.txt \
      --voice Charon \
      --model flash \
      --output audio/post-slug.mp3 \
      --json
    
    # Two voices (dialogue mode)
    python3 scripts/run.py generate_audio.py \
      --text-file blog_audio_dialogue.txt \
      --voice Puck \
      --voice2 Kore \
      --model pro \
      --output audio/post-slug-dialogue.mp3 \
      --json
    

    Model selection:

    • flash (default): maps to gemini-3.1-flash-tts-preview, good for summaries and standard narration.
    • flash31: explicit alias for gemini-3.1-flash-tts-preview.
    • legacy-flash25: retained only for older compatibility.
    • pro or legacy-pro25: maps to gemini-2.5-pro-preview-tts, use only when needed.

    Step 6: Deliver

    Present the result to the user:

    1. File path: where the audio was saved
    2. Duration: human-readable (e.g., "3:42")
    3. Embed code: ready-to-paste HTML5 audio tag
    4. Cost: estimated API cost
    5. Placement suggestion: where to insert the embed in the blog post

    Embedding Guide

    Standard HTML (Hugo, Jekyll, static sites)

    <audio controls preload="metadata">
      <source src="audio/post-slug.mp3" type="audio/mpeg">
      Your browser does not support the audio element.
    </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"]
    

    Placement

    Insert the audio player after the introduction (below the first H2) or at the very top of the article with a label: "Listen to this article" or "Audio version".

    Internal API (for blog-write)

    When invoked internally from blog-write:

    Input:

    • text: Prepared text (already cleaned by Claude)
    • voice: Voice name (default: Charon)
    • voice2: Second voice for dialogue (optional)
    • model: flash or pro
    • output_path: Where to save the file

    Output:

    ### Audio Narration
    - **Path:** /path/to/audio/post-slug.mp3
    - **Duration:** 3:42
    - **Voice:** Charon
    - **Embed:** `<audio controls preload="metadata"><source src="audio/post-slug.mp3" type="audio/mpeg"></audio>`
    

    Graceful fallback: If GOOGLE_AI_API_KEY is not set, return immediately with no error. The writing workflow continues without audio. Never block blog-write because audio generation is unavailable.

    Error Handling

    Error Resolution
    GOOGLE_AI_API_KEY not set Get key at https://aistudio.google.com/apikey
    FFmpeg not found Install: sudo apt install ffmpeg. Falls back to WAV output.
    Rate limited Wait and retry. Check limits at https://aistudio.google.com/rate-limit
    Text too long (>8,192 input tokens) Split into sections around 7,800 tokens; the script chunks and stitches prepared text
    Unknown voice name Run /blog audio voices to see valid options
    API error Check key validity and model availability
    API key missing (internal call) Return silently: writing workflow continues

    Reference Documentation

    Load on-demand: do NOT load all at startup:

    • references/voices.md: Full 30-voice catalog, recommendations by content type, dialogue pairings

    Reproducido de AgriciDaniel/claude-blog bajo licencia MIT. Leer esta página en markdown.

    Archivos

    8 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Necesita Python 3.11+, `GOOGLE_AI_API_KEY` exportada en el entorno y FFmpeg para pasar de WAV a MP3; sin FFmpeg devuelve WAV.

    Necesita en el PATH:python3

    Variables de entorno:GEMINI_API_KEYGOOGLE_AI_API_KEY

    Detalles

    Licencia
    MIT
    Recursos incluidos
    scripts en python + referencias
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de AgriciDaniel/claude-blog

    Este repo incluye 33 skills. Si instalas uno, normalmente ya tienes los demás. Ver el pack claude-blog entero y su comando de instalación

    Blog

    2.1k

    Motor de blog de ciclo completo con 31 subskills, 12 plantillas, puntuación sobre 100 y 5 agentes. Enruta cada petición a la subskill correcta: escribir, reescribir, analizar, auditar, schema, clusters y publicación multilingüe.

    Costo de contexto al activarse
    6.2k tok
    Tamaño del paquete
    35 archivos
    Última actualización
    hace 19 días
    seo geo

    Integración con las APIs de Google para rendimiento de blog: PageSpeed Insights, CrUX con 25 semanas de histórico, Search Console, URL Inspection, Indexing API, GA4, NLP de entidades, YouTube y Keyword Planner.

    Costo de contexto al activarse
    3.3k tok
    Tamaño del paquete
    24 archivos
    Última actualización
    hace 19 días
    seo geo

    Consulta cuadernos de Google NotebookLM para obtener respuestas ancladas en tus propios documentos y con citas: gestiona la biblioteca de cuadernos, la autenticación con Google y el descubrimiento de contenido.

    Costo de contexto al activarse
    2.5k tok
    Tamaño del paquete
    15 archivos
    Última actualización
    hace 19 días
    investigacion

    Generación y edición de imágenes con IA para contenido de blog mediante Gemini por MCP: portadas, ilustraciones, tarjetas sociales y OG, con 6 modos de dominio y retorno silencioso si el MCP no está disponible.

    Costo de contexto al activarse
    3.4k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 19 días
    redaccion contenido

    Motor de clusters temáticos semánticos: investiga keywords desde el SERP, agrupa por intención y solapamiento, construye una arquitectura hub-and-spoke, genera un mapa SVG y ejecuta el cluster llamando a blog-write.

    Costo de contexto al activarse
    4.9k tok
    Tamaño del paquete
    4 archivos
    Última actualización
    hace 19 días
    seo geo

    Integra el marco FLOW (Find, Optimize, Win) para blogs: ejecuta los prompts de cada etapa desde una base de 30 prompts aplicables a blog, con licencia CC BY 4.0 y sincronización desde el repositorio de FLOW.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    36 archivos
    Última actualización
    hace 19 días
    seo geo

    Skills relacionados

    Audita y puntúa posts con 100 puntos en 5 categorías: calidad de contenido, SEO, señales E-E-A-T, elementos técnicos y preparación para citas de IA. Exporta en markdown, JSON o tabla y admite análisis por lotes.

    Costo de contexto al activarse
    3.8k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    redaccion contenido

    Genera calendarios editoriales con clusters temáticos, cadencia de publicación, revisiones por cambio material, oportunidades estacionales, fórmula de mezcla de contenidos y planificación de distribución, mensual o trimestral.

    Costo de contexto al activarse
    3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    redaccion contenido

    Generación y edición de imágenes con IA para contenido de blog mediante Gemini por MCP: portadas, ilustraciones, tarjetas sociales y OG, con 6 modos de dominio y retorno silencioso si el MCP no está disponible.

    Costo de contexto al activarse
    3.4k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 19 días
    redaccion contenido