The project's README from github.com/raunakpatil/youtube-agentic-ai-studio. As one markdown file: README.md.
A fully automated, 100% free AI pipeline that researches, scripts, narrates, animates, and uploads faceless YouTube videos — from a single command.
Quick Start · Features · Pipeline · Setup Guide · FAQ
| Feature | Details |
|---|---|
| 🧠 AI Research | Gemini scans for trending topics tailored to your channel niche |
| ✍️ Script Writing | Full narrated script with hook, sections, and CTA — in JSON |
| 🎙️ Free Voice | Microsoft Edge TTS (no API key, no cost, word-level timing) |
| 🖼️ Stock Images | Auto-downloads from Pexels with topic-aware search |
| 🎞️ Animated Video | Ken Burns zoom, smooth crossfades, captions, progress bars |
| 📱 Shorts Support | Generates vertical 9:16 Shorts alongside the main video |
| 🕵️ Human Review | Local web dashboard to watch and approve before publishing |
| 🚀 Auto Upload | Publishes to YouTube with SEO tags, description, and thumbnail |
| 🔄 Smart Fallback | 8-model chain auto-switches if any model hits quota |
| 🎵 Background Music | Drop MP3s in music library/ — auto-looped to fit video length |
![]() |
![]() |
| Main dashboard — generate videos with one click | Settings panel — configure every aspect |
![]() |
![]() |
| Review dashboard — watch before you publish | Pipeline overview |
This repo powers Eldritch Lore — a real YouTube channel running entirely on this pipeline.
"What if Napoleon had nukes? What if Earth was flat... and spinning?" Every video on this channel was researched, scripted, narrated, and uploaded using exactly this code.
→ See what this tool can actually produce
# 1. Clone
git clone https://github.com/raunakpatil/youtube-agentic-ai-studio.git
cd youtube-agentic-ai-studio
# 2. Install dependencies
pip install -r requirements.txt
# 3. Set your API keys (copy and edit .env.example)
cp .env.example .env
# Edit .env and add your GEMINI_API_KEY and PEXELS_API_KEY
# 4. Run the GUI
python gui.py
# → Opens at http://localhost:7842
# — OR — run the pipeline directly from the terminal
python pipeline.py
First run? Read the full Setup Guide — it takes about 10 minutes.
The pipeline runs 6 sequential phases:
python pipeline.py ──► Research ──► Script ──► Narration
│
YouTube ◄── Upload ◄── Review ◄── Video ◄──┘
| Phase | Agent | What it does |
|---|---|---|
| 1 · Research | agents/researcher.py |
Gemini brainstorms trending topics for your niche and outputs a structured brief |
| 2 · Script | agents/scriptwriter.py |
Expands the brief into a full narrated script with image queries per section |
| 3 · Narration | video/narrator.py |
Edge-TTS converts the script to a cinematic MP3 voiceover |
| 4 · Images | video/stock.py |
Downloads high-res stock photos from Pexels, topic-aware per section |
| 5 · Video | video/creator.py |
Renders animated slides with Ken Burns, crossfades, captions, and music |
| 6 · Review | review/app.py |
Spins up a local dashboard — you watch and approve before anything is published |
| 7 · Upload | uploader/youtube.py |
Publishes to YouTube with full SEO metadata on your approval |
youtube-ai-agent/
├── 📄 pipeline.py ← Run this to start the full pipeline
├── 🖥️ gui.py ← Run this for the visual GUI
├── ⚙️ config.py ← All settings: keys, colors, voice, video
├── 📦 requirements.txt
├── 🔑 client_secret.json ← YouTube OAuth (you add yours — see SETUP.md)
├── 📝 .env.example ← Copy to .env and fill in your API keys
│
├── agents/
│ ├── gemini_client.py ← Shared AI client with 8-model fallback chain
│ ├── researcher.py ← Topic research agent
│ └── scriptwriter.py ← Script writing agent
│
├── video/
│ ├── narrator.py ← Edge-TTS voiceover generator
│ ├── stock.py ← Pexels image downloader
│ ├── creator.py ← Full video renderer (Ken Burns, captions, etc.)
│ └── music.py ← Background music mixer
│
├── review/
│ ├── app.py ← Flask review server
│ └── templates/review.html ← Review dashboard UI
│
├── uploader/
│ └── youtube.py ← YouTube Data API v3 upload
│
├── gui_templates/
│ └── index.html ← Full GUI (served by gui.py)
│
├── music library/ ← Drop your MP3/WAV tracks here
│
└── output/ ← Auto-generated (gitignored)
├── research.json
├── script.json
├── narration.mp3
├── images/
└── final_video.mp4
The system automatically tries models in order, rotating from your Starting Model preference:
gemini-2.5-flash → gemini-2.5-flash-lite → gemma-4-31b-it
↓
gemini-2.0-flash → gemini-2.0-flash-lite → gemma-3-27b-it
↓
gemini-1.5-flash-001 → gemini-1.5-pro-001
If a model hits quota (429) or is overloaded (503), it automatically retries up to 3 times then advances to the next model — so your pipeline never stops mid-run.
Set your preferred starting model in the GUI under Settings → AI Model, or in config.py:
GEMINI_MODEL = "gemini-2.0-flash" # 1500 free req/day — recommended default
| Service | Key | Free Tier | Where to get it |
|---|---|---|---|
| Google Gemini | GEMINI_API_KEY |
1500 req/day | aistudio.google.com |
| Pexels | PEXELS_API_KEY |
200 req/hour | pexels.com/api |
| Edge TTS | (none) | Unlimited | Built-in |
| YouTube API | client_secret.json |
Free | Google Cloud Console |
| ElevenLabs | ELEVENLABS_API_KEY |
Optional | elevenlabs.io |
Total cost: $0 per video. All required services have free tiers that comfortably cover daily video production.
Edit config.py to make the output yours:
# 1. Describe your channel — the more specific, the better the topics
CHANNEL_DESCRIPTION = """
An educational channel covering the psychology of decision-making.
Target audience: adults 25-40 who enjoy Lex Fridman and Hidden Brain.
"""
CHANNEL_NAME = "Mind Mechanics"
# 2. Pick your voice
VOICE_ID = "en-GB-RyanNeural" # British, deep, cinematic
# 3. Brand colours (RGB tuples)
COLORS = {
"primary": (99, 102, 241), # your brand colour
"highlight": (251, 191, 36), # accent / titles
...
}
# 4. Video style
CROSSFADE_DURATION = 0.7 # image transition smoothness
OVERLAY_OPACITY = 0.62 # how dark the image overlay is
No. The entire stack uses free tiers:
On a mid-range machine (i7 + 16GB RAM):
RENDER_PRESETYes. The review step lets you click "Reject" to skip the upload — the rendered MP4 will still be saved in output/. You can also comment out the upload step in pipeline.py entirely.
MoviePy v2.0 removed the moviepy.editor module and changed the entire API. v1.0.3 is required. Similarly, NumPy must be <2.0.0 because MoviePy's underlying C extensions were compiled against NumPy 1.x. Do not upgrade either.
Your system is missing the fonts the renderer looks for. Install DejaVu fonts:
sudo apt install fonts-dejavubrew install --cask font-dejavu-sans-mono-nerd-font C:/Windows/Fonts/Delete youtube_token.pickle and re-run. This forces a fresh OAuth flow. Make sure your Google account is added as a Test User in Google Cloud Console → OAuth consent screen.
Pull requests are welcome! Please open an issue first to discuss major changes.
git checkout -b feature/my-featuregit commit -m 'Add my feature'git push origin feature/my-featureEldritch Lore — science, history, and "what if" scenarios. Running 100% on this pipeline. Subscribe to see it in action.