Fully automated weekly podcast generation pipeline. Researches real AI and hardware news, writes a 15-minute monologue script, synthesizes voice with Google Cloud TTS, and publishes to YouTube and RSS (Apple Podcasts + Spotify) — zero manual intervention.
Cloud Scheduler (weekly cron)
│
▼
Cloud Run Job (container, runs and terminates)
main.py
├── [1] NewsResearcher Gemini + Google Search grounding (no manual scraping)
├── [2] NewsTracker Permanent history — never repeats a topic
├── [3] Scriptwriter 15-min monologue via Vertex AI
├── [4] VoiceSynth TTS with Google Cloud (Chirp3-HD)
├── [5] Producer Final audio mix with background music
├── YouTubePublisher Uploads to YouTube with auto-generated metadata
└── RSSPublisher Self-hosted RSS feed (Apple Podcasts + Spotify compatible)
Why Gemini + Google Search grounding instead of scraping?
Web scraping breaks constantly as sites update their HTML. Gemini's Search grounding tool returns structured, curated results from trusted domains without any maintenance overhead.
How does it avoid repeating topics?
data/news_history.json is a permanent log written after every episode. The NewsResearcher receives this history as context and is instructed to skip any topic already covered. It's never purged — the model's context window handles filtering.
Why Cloud Run Job instead of Cloud Functions?
Audio generation + mixing can take 8–12 minutes. Cloud Functions has a 9-minute max timeout. Cloud Run Jobs have no limit.
News is sourced from official blogs (OpenAI, Anthropic, Google DeepMind, Meta AI, NVIDIA, Apple) and tech press (TechCrunch, The Verge, Ars Technica, Wired, MIT Technology Review). All via Google Search grounding — no hardcoded scraping.
| Step | Tool | Output |
|---|---|---|
| Research | Gemini + Search grounding | JSON: top 5 news items with sources |
| Script | Vertex AI (Gemini Pro) | Markdown: 15-min monologue |
| Voice | Google Cloud TTS (Chirp3-HD) | WAV audio segments |
| Mix | ffmpeg | MP3 with background music |
| Publish | YouTube Data API v3 | Video + auto-thumbnail |
| RSS | GCS public bucket | feed.xml (Apple/Spotify ready) |
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
gcloud auth application-default login
# Generate episode (no publish)
python main.py
# With specific topic
python main.py --topic "open source AI models and new hardware"
# Generate and publish
python main.py --publish- Vertex AI API
- Cloud Text-to-Speech API
- Cloud Storage (public bucket for RSS feed)
- Cloud Run + Cloud Scheduler
- YouTube Data API v3
Python 3.10 · Vertex AI (Gemini) · Google Cloud TTS (Chirp3-HD) · YouTube Data API · GCS · Cloud Run · ffmpeg
Pipeline totalmente automatizado de generación semanal de podcast. Investiga noticias reales de IA y hardware, escribe un guion de monólogo de 15 minutos, sintetiza voz con Google Cloud TTS y publica en YouTube y RSS (Apple Podcasts + Spotify) — sin intervención manual.
Cloud Scheduler (cron semanal)
│
▼
Cloud Run Job (contenedor, corre y termina)
main.py
├── [1] NewsResearcher Gemini + Google Search grounding (sin scraping manual)
├── [2] NewsTracker Historial permanente — nunca repite un tema
├── [3] Guionista Guion de monólogo 15 min vía Vertex AI
├── [4] Locutor TTS con Google Cloud (Chirp3-HD)
├── [5] Productor Mezcla final de audio con música de fondo
├── YouTubePublisher Sube a YouTube con metadatos auto-generados
└── RSSPublisher Feed RSS auto-hospedado (compatible Apple + Spotify)
¿Por qué Gemini + Google Search grounding en vez de scraping?
El scraping web se rompe constantemente cuando los sitios actualizan su HTML. La herramienta de grounding de búsqueda de Gemini devuelve resultados estructurados y curados desde dominios confiables sin overhead de mantenimiento.
¿Cómo evita repetir temas?
data/news_history.json es un log permanente que se escribe después de cada episodio. El NewsResearcher recibe este historial como contexto y tiene instrucciones de omitir cualquier tema ya cubierto. Nunca se purga — la ventana de contexto del modelo maneja el filtrado.
¿Por qué Cloud Run Job en vez de Cloud Functions?
La generación y mezcla de audio puede durar 8–12 minutos. Cloud Functions tiene un timeout máximo de 9 minutos. Cloud Run Jobs no tienen límite.
Las noticias provienen de blogs oficiales (OpenAI, Anthropic, Google DeepMind, Meta AI, NVIDIA, Apple) y prensa tech (TechCrunch, The Verge, Ars Technica, Wired, MIT Technology Review). Todo vía Google Search grounding — sin scraping hardcodeado.
| Paso | Herramienta | Output |
|---|---|---|
| Investigación | Gemini + Search grounding | JSON: top 5 noticias con fuentes |
| Guion | Vertex AI (Gemini Pro) | Markdown: monólogo 15 min |
| Voz | Google Cloud TTS (Chirp3-HD) | Segmentos WAV |
| Mezcla | ffmpeg | MP3 con música de fondo |
| Publicación | YouTube Data API v3 | Video + auto-thumbnail |
| RSS | GCS bucket público | feed.xml (listo Apple/Spotify) |
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
gcloud auth application-default login
# Genera episodio (sin publicar)
python main.py
# Con tema específico
python main.py --tema "modelos de IA open source y nuevo hardware"
# Genera y publica
python main.py --publishPython 3.10 · Vertex AI (Gemini) · Google Cloud TTS (Chirp3-HD) · YouTube Data API · GCS · Cloud Run · ffmpeg