[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74177":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":16,"starSnapshotCount":16,"syncStatus":39,"lastSyncTime":40,"discoverSource":41},74177,"youtube-shorts-pipeline","rushindrasinha\u002Fyoutube-shorts-pipeline","rushindrasinha","Automated YouTube Shorts pipeline: news → script → AI visuals → voiceover → captions → upload","https:\u002F\u002Fverticals.gg",null,"Python",2027,500,16,6,0,7,18,57,21,85.8,false,"main",true,[26,27,28,29,30,31,32,33,34,35],"ai-video","automation","claude","content-creation","elevenlabs","ffmpeg","python","whisper","youtube","youtube-shorts","2026-06-12 04:01:13","# Verticals v3\n\n**The open source AI content engine with built-in niche intelligence.**\n\n> Topic in. Published Short out. Any niche. ~$0.11 per video.\n>\n> **[Quickstart](#quickstart) · [Hosted Version](https:\u002F\u002Fverticals.gg)**\n\n> Repo note: the product is called **Verticals v3**. The GitHub repository is `youtube-shorts-pipeline`.\n\n```\npython -m verticals run --topic \"Sam Altman just mass-fired 200 safety researchers\" --niche tech\n```\n\nThat one command researches the topic, writes a hook driven script tuned to tech YouTube, generates cinematic b roll, records a natural voiceover, burns in animated captions, adds mood matched background music, generates a thumbnail, and uploads it to YouTube. ~90 seconds of video, ~3 minutes of wall time, ~$0.11 in API costs.\n\n## What Changed in v3\n\nv2 was an esports news pipeline. v3 is a **general purpose content engine** that works for any niche, any topic, any creator.\n\nThe biggest change: **Niche Intelligence**. Every stage of the pipeline now reads from a niche profile that shapes script tone, visual style, caption aesthetics, music mood, and thumbnail strategy. Ship a cooking Short and it writes like a cooking creator, generates food photography b roll, and picks warm upbeat background music. Ship a true crime Short and the tone shifts to suspenseful, the visuals go dark and cinematic, and the music drops to ambient tension.\n\n15 niches ship out of the box. Build your own in 5 minutes.\n\nOther highlights: multi provider LLM support (Claude, Gemini, GPT, Ollama local), free TTS via Edge TTS, stock footage fallback when you don't want AI images, multi platform export (YouTube, TikTok, Reels, X), a Gradio web UI for non developers, and Google Colab for zero install usage.\n\n## How It Works\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                        NICHE PROFILE                            │\n│  Loaded once. Shapes every stage. 15 built in or bring your own │\n└─────────────┬───────────────────────────────────────────────────┘\n              │\n              ▼\n┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐\n│ RESEARCH │→ │  SCRIPT  │→ │ VISUALS  │→ │  VOICE   │→ │ CAPTIONS │→ │ ASSEMBLE │→ UPLOAD\n│          │  │          │  │          │  │          │  │          │  │          │\n│ DuckDuck │  │ LLM with │  │ Gemini   │  │ ElevenLabs│  │ Whisper  │  │ ffmpeg   │\n│ Go + web │  │ niche    │  │ Replicate│  │ Edge TTS │  │ word     │  │ Ken Burns│\n│ scraping │  │ persona  │  │ Pexels   │  │ Kokoro   │  │ level    │  │ + music  │\n│          │  │ + hooks  │  │ ComfyUI  │  │ Bark     │  │ ASS+SRT  │  │ ducking  │\n└──────────┘  └──────────┘  └──────────┘  └──────────┘  └──────────┘  └──────────┘\n```\n\n**Stage by stage:**\n\n**Research** — Searches DuckDuckGo (and optionally scrapes source URLs) for live facts. Every name, number, and claim in the final script traces back to this research. This is the anti hallucination gate: the LLM is instructed to use only facts from research data, never its training knowledge.\n\n**Script** — An LLM (your choice of provider) writes a 60 to 90 second voiceover script using the niche profile's tone, pacing rules, and hook patterns. The profile tells the LLM things like \"open with a question, not a statement\" for tech niches or \"open with a shocking statistic\" for finance niches. Output includes the script, b roll image prompts, thumbnail prompt, and platform metadata for YouTube\u002FTikTok\u002FInstagram\u002FX.\n\n**Visuals** — Generates 3 to 5 b roll frames via your configured image provider: Gemini Imagen (default, free tier available), Replicate (Flux, SDXL), or stock footage from Pexels\u002FPixabay (completely free, no API key needed). Images are auto cropped to 9:16 portrait. The niche profile shapes the visual vocabulary: a fitness niche generates gym and movement imagery, a science niche generates diagrams and lab visuals.\n\n**Voice** — Text to speech via your configured provider: Edge TTS (free, cross platform, 300+ voices, **recommended default**), ElevenLabs (premium, most natural), Kokoro (local, open source), or macOS `say` (fallback). The niche profile suggests voice characteristics (pace, energy, tone) but the final voice selection is yours.\n\n**Captions** — Whisper generates word level timestamps. The pipeline produces both ASS (burned in with word by word yellow highlight) and SRT (uploaded to YouTube for closed captions). Caption styling follows the niche profile: bold energetic fonts for gaming, clean minimal for tech, warm handwritten feel for lifestyle.\n\n**Assemble** — ffmpeg combines animated b roll (Ken Burns zoom\u002Fpan effects), voiceover, burned in captions, and background music with automatic voice ducking. Music selection is mood matched to the niche profile.\n\n**Upload** — Publishes to YouTube (private by default) with title, description, tags, SRT captions, and AI generated thumbnail. TikTok and Instagram export coming in v3.1.\n\n## Niche Intelligence\n\nThis is what makes Verticals different from every other AI video tool.\n\nA niche profile is a YAML file that tells the pipeline how to think about content for a specific audience. It shapes every stage without requiring any prompt engineering from you.\n\n```yaml\n# niches\u002Ftech.yaml\nname: tech\ndisplay_name: \"Tech & AI News\"\n\nscript:\n  tone: \"informed, slightly opinionated, conversational\"\n  pacing: \"fast, dense with facts, no filler\"\n  hooks:\n    - pattern: \"contrarian_take\"\n      template: \"Everyone is celebrating {topic}. Here's why that's a problem.\"\n    - pattern: \"breaking_news\"\n      template: \"This just happened and nobody is talking about it.\"\n    - pattern: \"prediction\"\n      template: \"{topic} changes everything. Here's what happens next.\"\n    - pattern: \"explainer\"\n      template: \"Let me explain {topic} in 60 seconds because most people are getting this wrong.\"\n    - pattern: \"comparison\"\n      template: \"{thing_a} vs {thing_b}. One of these wins and it's not even close.\"\n  cta_variants:\n    - \"Follow for daily tech breakdowns.\"\n    - \"Subscribe. I cover AI news nobody else is talking about.\"\n    - \"Drop a comment: do you agree?\"\n  word_count: \"150 to 170\"\n  forbidden: [\"like and subscribe\", \"smash that bell\", \"what's up guys\"]\n\nvisuals:\n  style: \"clean, minimal, dark backgrounds, neon accents\"\n  mood: \"futuristic, sleek, professional\"\n  subjects: [\"circuit boards\", \"code on screens\", \"server rooms\", \"product shots\", \"data visualizations\"]\n  avoid: [\"stock photo people smiling at laptops\", \"generic office\", \"clipart\"]\n\nvoice:\n  pace: \"slightly fast, ~160 wpm\"\n  energy: \"confident, authoritative but not robotic\"\n  suggested_voices:\n    edge_tts: \"en-US-GuyNeural\"\n    elevenlabs: \"JBFqnCBsd6RMkjVDRZzb\"\n\ncaptions:\n  highlight_color: \"#00FF88\"\n  font_weight: \"bold\"\n  position: \"lower_third\"\n\nmusic:\n  mood: \"ambient electronic, subtle energy, no lyrics\"\n  energy: \"medium\"\n\nthumbnail:\n  style: \"dark background, bold white\u002Fgreen text, product or face focus\"\n  text_position: \"left_aligned\"\n```\n\n**15 built-in niches:** tech, gaming, finance, fitness, cooking, travel, true_crime, science, politics, entertainment, sports, fashion, education, motivation, comedy.\n\n**Build your own** by copying any profile and editing it. Drop the YAML in `niches\u002F` and reference it with `--niche your_niche_name`.\n\n## Quickstart\n\n### Option A: Google Colab (zero install)\n\nColab support is planned, but the notebook is not published in this repo yet. Use the hosted version, Web UI, or CLI for now.\n\n### Option B: Web UI (Gradio)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frushindrasinha\u002Fyoutube-shorts-pipeline.git\ncd youtube-shorts-pipeline\npip install -r requirements.txt\npython -m verticals ui\n```\n\nOpens a browser UI at `localhost:7860`. Pick a niche, enter a topic, click Generate. Preview the draft before producing.\n\n### Option C: CLI (developers)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frushindrasinha\u002Fyoutube-shorts-pipeline.git\ncd youtube-shorts-pipeline\npip install -r requirements.txt\n\n# First run triggers setup wizard (API keys)\npython -m verticals run --topic \"your topic\" --niche tech\n```\n\n## CLI Commands\n\n### Full pipeline (topic to published Short)\n```bash\npython -m verticals run --topic \"headline\" --niche tech\npython -m verticals run --topic \"headline\" --niche cooking --provider ollama\npython -m verticals run --discover --niche gaming --auto-pick\n```\n\n### Individual stages\n```bash\npython -m verticals draft --topic \"headline\" --niche tech\npython -m verticals produce --draft \u003Cpath> --lang en\npython -m verticals upload --draft \u003Cpath> --platform youtube\npython -m verticals topics --niche tech --limit 20\n```\n\n### Useful flags\n```\n--niche NAME         Niche profile (default: general)\n--provider NAME      LLM provider: claude, gemini, openai, ollama (default: claude)\n--voice NAME         TTS provider: edge, elevenlabs, kokoro, say (default: edge)\n--visuals NAME       Image provider: gemini, replicate, pexels, comfyui (default: gemini)\n--platform NAME      Upload target: youtube, tiktok, reels, x (default: youtube)\n--lang CODE          Language: en, hi, es, pt, de, fr, ja, ko (default: en)\n--dry-run            Draft only, skip produce and upload\n--force              Redo all stages even if completed\n--verbose            Debug logging\n```\n\n## Provider Support\n\n### LLM (script generation)\n\n| Provider | Cost | Setup | Notes |\n|----------|------|-------|-------|\n| **Claude** (Anthropic) | ~$0.02\u002Fscript | `ANTHROPIC_API_KEY` | Best quality. Default. |\n| **Gemini** (Google) | Free tier available | `GEMINI_API_KEY` | Good quality, generous free tier. |\n| **GPT** (OpenAI) | ~$0.01\u002Fscript | `OPENAI_API_KEY` | Solid alternative. |\n| **Ollama** (local) | Free | Install Ollama + pull model | No API key needed. Quality varies by model. |\n| **Claude CLI** | Free w\u002F Max sub | Install Claude Code | Uses Claude Max subscription, no API key. |\n\n### TTS (voiceover)\n\n| Provider | Cost | Setup | Notes |\n|----------|------|-------|-------|\n| **Edge TTS** | Free | None | **Recommended default.** 300+ voices, cross platform. |\n| **ElevenLabs** | ~$0.05\u002Fvideo | `ELEVENLABS_API_KEY` | Most natural. Premium. |\n| **Kokoro** | Free | `pip install kokoro` | Local, open source. |\n| **macOS say** | Free | macOS only | Basic fallback. |\n\n### Visuals (b roll)\n\n| Provider | Cost | Setup | Notes |\n|----------|------|-------|-------|\n| **Gemini Imagen** | Free tier available | `GEMINI_API_KEY` | Default. Good quality. |\n| **Replicate** | ~$0.01\u002Fimage | `REPLICATE_API_TOKEN` | Flux, SDXL, more models. |\n| **Pexels** | Free | `PEXELS_API_KEY` | Stock footage. No generation. |\n| **ComfyUI** | Free (local GPU) | Running ComfyUI server | Best quality if you have hardware. |\n\n### Upload\n\n| Platform | Status | Auth |\n|----------|--------|------|\n| **YouTube** | Stable | OAuth (setup wizard) |\n| **TikTok** | v3.1 | Coming soon |\n| **Instagram Reels** | v3.1 | Coming soon |\n| **X (Twitter)** | v3.1 | Coming soon |\n\n## $0.00 Mode (completely free)\n\nYes, you can run this with zero API spend:\n\n```bash\npython -m verticals run \\\n  --topic \"your topic\" \\\n  --niche tech \\\n  --provider ollama \\\n  --voice edge \\\n  --visuals pexels\n```\n\nUses Ollama (local LLM), Edge TTS (free Microsoft voices), and Pexels (free stock footage). You need a machine that can run a 7B+ parameter model and a free Pexels API key. Quality is lower than the full API stack but it works.\n\n## Configuration\n\nAll keys stored in `~\u002F.verticals\u002Fconfig.json` with 0600 permissions:\n\n| Variable | Required | Used By |\n|----------|----------|---------|\n| `ANTHROPIC_API_KEY` | If using Claude | Script generation |\n| `GEMINI_API_KEY` | If using Gemini visuals\u002FLLM | B roll + thumbnails |\n| `OPENAI_API_KEY` | If using GPT | Script generation |\n| `ELEVENLABS_API_KEY` | If using ElevenLabs | Premium voiceover |\n| `REPLICATE_API_TOKEN` | If using Replicate | B roll images |\n| `PEXELS_API_KEY` | If using Pexels | Stock footage |\n\nEnvironment variables override config file values.\n\n## Topic Discovery\n\nDiscover trending topics from multiple sources, filtered by niche relevance:\n\n```bash\npython -m verticals topics --niche tech --limit 20\n```\n\n| Source | Method | Auth | Niche Filtering |\n|--------|--------|------|-----------------|\n| Reddit | `.json` API | None | Subreddit mapping per niche |\n| RSS | feedparser | None | Configurable feeds per niche |\n| Google Trends | pytrends | None | Geo + category filtering |\n| Twitter\u002FX | Public API | Optional | Keyword filtering |\n| TikTok | Apify | Optional | Hashtag mapping |\n| YouTube Trending | RSS\u002FAPI | None | Category mapping |\n| Hacker News | API | None | Tech\u002Fstartup default |\n\nConfigure per niche in your profile:\n```yaml\n# In niches\u002Ftech.yaml\ndiscovery:\n  reddit: [\"technology\", \"artificial\", \"MachineLearning\", \"singularity\"]\n  rss: [\"https:\u002F\u002Fhnrss.org\u002Ffrontpage\", \"https:\u002F\u002Ftechcrunch.com\u002Ffeed\"]\n  google_trends_category: \"t\"\n  youtube_trending_category: \"28\"\n```\n\n## Cost Per Video\n\n| Configuration | Cost |\n|---------------|------|\n| **Premium** (Claude + Gemini + ElevenLabs) | ~$0.11 |\n| **Budget** (Gemini + Gemini + Edge TTS) | ~$0.04 |\n| **Free** (Ollama + Pexels + Edge TTS) | $0.00 |\n\n## Project Structure\n\n```\nverticals\u002F\n├── verticals\u002F\n│   ├── __main__.py            # CLI + Gradio UI entry point\n│   ├── config.py              # Keys, paths, setup wizard\n│   ├── niche.py               # Niche profile loader\n│   ├── providers\u002F\n│   │   ├── llm.py             # Claude \u002F Gemini \u002F GPT \u002F Ollama\n│   │   ├── tts.py             # ElevenLabs \u002F Edge \u002F Kokoro \u002F say\n│   │   ├── image.py           # Gemini \u002F Replicate \u002F Pexels \u002F ComfyUI\n│   │   └── upload.py          # YouTube \u002F TikTok \u002F Reels \u002F X\n│   ├── stages\u002F\n│   │   ├── research.py        # DuckDuckGo + web scraping\n│   │   ├── draft.py           # Script generation with niche intelligence\n│   │   ├── broll.py           # Image generation + Ken Burns\n│   │   ├── voiceover.py       # TTS with niche voice config\n│   │   ├── captions.py        # Whisper + ASS\u002FSRT\n│   │   ├── music.py           # Track selection + ducking\n│   │   ├── assemble.py        # ffmpeg final assembly\n│   │   └── thumbnail.py       # Thumbnail generation + text overlay\n│   ├── topics\u002F                # Multi source topic engine\n│   ├── state.py               # Resume capability\n│   ├── retry.py               # Exponential backoff\n│   └── log.py                 # Structured logging\n├── niches\u002F                    # 15 built in niche profiles\n│   ├── tech.yaml\n│   ├── gaming.yaml\n│   ├── finance.yaml\n│   ├── fitness.yaml\n│   ├── cooking.yaml\n│   ├── travel.yaml\n│   ├── true_crime.yaml\n│   ├── science.yaml\n│   ├── politics.yaml\n│   ├── entertainment.yaml\n│   ├── sports.yaml\n│   ├── fashion.yaml\n│   ├── education.yaml\n│   ├── motivation.yaml\n│   ├── comedy.yaml\n│   └── general.yaml           # Default fallback\n├── music\u002F                     # Bundled royalty free tracks\n├── ui\u002F                        # Gradio web interface\n├── tests\u002F\n├── notebooks\u002F\n│   └── verticals_colab.ipynb   # Google Colab notebook\n├── docker-compose.yml\n├── Dockerfile\n├── scripts\u002F\n│   └── setup_youtube_oauth.py\n├── references\u002F\n│   ├── setup.md\n│   └── troubleshooting.md\n├── pyproject.toml\n└── requirements.txt\n```\n\n## Testing\n\n```bash\npip install pytest pytest-mock\npython -m pytest tests\u002F -v\n```\n\n## Docker\n\n```bash\ndocker compose up --build\n# Opens web UI at localhost:7860\n```\n\n## Security\n\nAll security measures from v2 carry forward, plus:\n\n**Credential storage:** Config and tokens use 0600 permissions via atomic `os.open()`.\n**API key handling:** All providers send keys via headers, never URL parameters.\n**Upload privacy:** YouTube uploads default to private.\n**Prompt injection:** Research snippets truncated to 300 chars with boundary markers. LLM output fields are type checked before use.\n**OAuth scopes:** Minimum required scopes per platform.\n**Niche profiles:** YAML parsed with safe_load (no code execution).\n**Dependency pinning:** Compatible release bounds on all packages.\n\n## Roadmap\n\n**v3.0** (this release)\n  Niche intelligence, multi provider LLM\u002FTTS\u002Fimage, Gradio UI, Colab notebook, Edge TTS default, Pexels stock footage, Docker support\n\n**v3.1** (planned)\n  TikTok\u002FInstagram\u002FX upload, multi language niche profiles, A\u002FB script variants (generate 2, pick better), scheduled batch production\n\n**v3.2** (planned)\n  Analytics integration (which Shorts performed best), niche profile auto tuning based on performance data, series support (multi episode narrative arcs)\n\n## Built By\n\n**[Dr Rushindra Sinha](https:\u002F\u002Fgithub.com\u002Frushindrasinha)** — MD, Stanford GSB, Full Stack Developer.\n\nBuilt the first game server at 17 (went #1 globally, acquired before finishing med school). Co-founded [Global Esports](https:\u002F\u002Fglobalesports.in) — South Asia's only Valorant Champions Tour Pacific franchise. Now building AI tools for creators and operators at [aarees.com](https:\u002F\u002Faarees.com).\n\nFollow: [@irushi](https:\u002F\u002Ftwitter.com\u002Firushi) on X · [@rushindrasinha](https:\u002F\u002Finstagram.com\u002Frushindrasinha) on Instagram\n\n---\n\n## More From This Stack\n\n| Product | What it does |\n|---------|-------------|\n| [**verticals.gg**](https:\u002F\u002Fverticals.gg) | Hosted version of this pipeline — no setup, no terminal, just results |\n| [**thumbnail.gg**](https:\u002F\u002Fthumbnail.gg) | AI thumbnail generation with deep niche intelligence and CTR optimization |\n| [**aarees.com**](https:\u002F\u002Faarees.com) | The AI agent platform powering both products |\n| [**Global Esports**](https:\u002F\u002Fglobalesports.in) | South Asia's VCT Pacific franchise — where the esports niche profile was battle-tested |\n\n---\n\n## License\n\nMIT\n","该项目是一个自动化YouTube Shorts制作流程，涵盖从新闻选题到视频上传的全过程。其核心功能包括基于AI的内容创作、脚本生成、视觉素材制作、配音、字幕添加及最终上传至YouTube等步骤。项目采用Python语言编写，利用了多种AI技术如ElevenLabs（语音合成）、Whisper（字幕生成）以及FFmpeg（视频处理）。特别地，Verticals v3引入了“细分市场智能”概念，使得产出内容能够根据不同的目标受众自动调整风格和语气，适用于任何主题或创作者。此工具非常适合需要快速生成高质量短视频内容的个人或团队使用，尤其是在没有太多时间或资源投入到视频编辑的情况下。",2,"2026-06-11 03:49:22","high_star"]