Skip to main content

Modular pipeline agents for automated YouTube video production

Project description

YouTube Factory Pipeline

Modular, provider-agnostic agents for automated YouTube video production.

PyPI Python License


Overview

youtube-factory-pipeline is the core orchestration library behind the "Weight and See" YouTube channel. It provides a clean, modular set of agents that handle every stage of video production:

Research → Idea Generation → Script Writing → Voiceover → Visuals → 
Audio Generation → Assembly → Shorts → Upload → Guide Deployment

Each agent is independently usable, provider-agnostic, and configured via a single JSON file.


Features

Agent Purpose Key Capability
ResearchAgent GitHub/HF/arXiv/web/YouTube/RSS/semantic search
IdeaGeneratorAgent Video concept + SWOT 3 concepts → 1 selected, niche diversity enforced
ScriptwriterAgent 3-act retention scripts Hook → Breakdown → Deep Dive + CTA
VoiceoverAgent TTS via OmniVoice/Edge Multi-speaker, word-level timestamps
VisualAssetAgent B-roll + AI images + thumbnails Pexels / SD / Fal / Pollinations / local
AudioGenAgent BGM via Stable Audio 3 Ducking, volume automation
VideoAssemblerAgent FFmpeg assembly Subtitles, ducking, 4K output
ShortGenerator 9:16 vertical clips Auto-scene selection ≤58s
UploaderAgent YouTube Data API v3 Playlists, thumbnails, Shorts
GuideGeneratorAgent HTML resource pages SEO-optimized, deployable to GitHub Pages
CommunityAgent YouTube Community posts Auto-generated from video outputs

Installation

# Core dependencies only
pip install youtube-factory-pipeline

# With optional providers
pip install "youtube-factory-pipeline[omnivoice]"      # Local TTS
pip install "youtube-factory-pipeline[stable-audio]"  # BGM generation
pip install "youtube-factory-pipeline[all]"           # Everything

Quickstart

from youtube_factory.orchestrator import PipelineOrchestrator
from youtube_factory.config import load_config

# Load your config (see Configuration below)
config = load_config("path/to/config.json")

# Create orchestrator
orchestrator = PipelineOrchestrator(workspace_dir="~/youtube_factory")

# Start a run
run_id, state = orchestrator.create_new_run(
    topic_seed="Ollama 0.9.0 local LLM benchmark",
    target_audience="Tech enthusiasts",
    competitor_analysis="Existing LM Studio reviews"
)

# Execute full pipeline (runs in background thread)
orchestrator.execute(run_id)

# Or run individual stages
from youtube_factory.agents.idea import IdeaGeneratorAgent
idea_agent = IdeaGeneratorAgent(config)
result = idea_agent.run({
    "topic_seed": "...",
    "target_audience": "...",
    "competitor_analysis": "..."
})

Configuration

All agents read from a single config.json with environment variable interpolation (${VAR}):

{
  "freellmapi": {
    "api_key": "${FREELLAPI_KEY}",
    "base_url": "http://localhost:3001/v1",
    "timeout": 120
  },
  "omnivoice": {
    "base_url": "http://localhost:3900/v1",
    "voice_id": "brian_ref"
  },
  "pexels_api_key": "${PEXELS_API_KEY}",
  "local_sd": {
    "base_url": "http://127.0.0.1:7860",
    "lora_url": "https://.../style.safetensors"
  },
  "video_settings": { "width": 1920, "height": 1080 },
  "upload_settings": { "privacy_status": "private" }
}

Environment variables loaded from .env:

FREELLAPI_KEY=freellmapi-xxx
PEXELS_API_KEY=xxx
GEMINI_API_KEY=xxx
# etc.

Architecture

┌─────────────────────────────────────────────────────────────┐
│                    PipelineOrchestrator                       │
│  (state management, cancellation, threading, config reload)  │
└──────────────────────────┬──────────────────────────────────┘
                           │
       ┌───────────────────┼───────────────────┐
       ▼                   ▼                   ▼
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Research   │    │   Scraper   │    │   Idea Gen  │
│  (LLM)      │    │  (HTTP)     │    │  (LLM+JSON) │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       ▼                  ▼                  ▼
┌─────────────────────────────────────────────────────────────┐
│                      Scriptwriter (LLM)                     │
└──────────────────────────┬──────────────────────────────────┘
                           │
       ┌───────────────────┼───────────────────┐
       ▼                   ▼                   ▼
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Voiceover  │    │  Visuals    │    │    Guide    │
│  (Edge/OV)  │    │ (Pexels/SD) │    │  (LLM+HTML) │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       ▼                  ▼                  ▼
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Audio Gen   │    │  Assembly   │    │  Guide      │
│ (Stable     │    │ (FFmpeg)    │    │  Deploy     │
│  Audio 3)   │    │             │    │  (GitHub)   │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                  │                  │
       ▼                  ▼                  ▼
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Shorts    │    │  Upload     │    │ Community   │
│  (Scene     │    │ (YouTube)   │    │  Posts      │
│  select)    │    │             │    │             │
└─────────────┘    └─────────────┘    └─────────────┘

All LLM calls route through FreeLLMAPI → automatic provider failover, penalty tracking, system prompt injection.


Agent Reach Integration (v0.2.0+)

The ResearchAgent now leverages Agent Reach — a capability layer giving agents unified, zero-API-cost access to internet sources:

Source Tool Method
YouTube yt-dlp Transcript + metadata extraction
Web Articles Jina Reader (curl r.jina.ai/URL) Clean article extraction
GitHub gh CLI Repo metadata + README
Semantic Search mcporter + Exa MCP Neural web search
RSS/Atom feedparser Feed parsing

No API keys required for any of the above. The tools are installed as system dependencies (see Installation).

External Dependencies (install once)

# Windows (via winget/choco)
winget install GitHub.cli
npm install -g mcporter
mcporter config add exa https://mcp.exa.ai/mcp

# Python deps installed automatically with package
# yt-dlp, feedparser, agent-reach

Research Agent Capabilities

from youtube_factory.agents.research import ResearchAgent

agent = ResearchAgent(config)

# YouTube transcript
result = agent.run({"topic_seed": "https://youtube.com/watch?v=...", "run_dir": "/tmp/run"})

# GitHub repo deep-dive
result = agent.run({"topic_seed": "https://github.com/owner/repo", "run_dir": "/tmp/run"})

# Web article (Jina Reader)
result = agent.run({"topic_seed": "https://anthropic.com/news/...", "run_dir": "/tmp/run"})

# Semantic search (Exa)
# (Triggered automatically for generic queries in future versions)

The agent auto-detects the source type from the URL and routes to the appropriate backend.


Development

# Clone
git clone https://github.com/bgill55/youtube-factory-pipeline.git
cd youtube-factory-pipeline

# Install in editable mode with dev deps
pip install -e ".[dev]"

# Run tests
pytest tests/

# Lint
ruff check src/
mypy src/youtube_factory/

Related Projects

  • FreeLLMAPI — The unified LLM router this pipeline depends on
  • OmniVoice-Studio — Local TTS service
  • YouTube Factory — Full production deployment (Flask dashboard, scheduler, bootstrap scripts)

License

MIT © 2026 bgill55


Disclaimer

This is the orchestration library only.
You must run the required external services yourself:

  • FreeLLMAPI (port 3001)
  • OmniVoice-Studio (port 3900)
  • Stable Diffusion WebUI --api (port 7860)
  • FFmpeg (system binary)

See the main YouTube Factory repo for Docker Compose, bootstrap scripts, and the Flask dashboard.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

youtube_factory_pipeline-0.2.0.tar.gz (128.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

youtube_factory_pipeline-0.2.0-py3-none-any.whl (138.0 kB view details)

Uploaded Python 3

File details

Details for the file youtube_factory_pipeline-0.2.0.tar.gz.

File metadata

  • Download URL: youtube_factory_pipeline-0.2.0.tar.gz
  • Upload date:
  • Size: 128.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for youtube_factory_pipeline-0.2.0.tar.gz
Algorithm Hash digest
SHA256 151deff9f4cd2a0bd3b9bc71ee3f35a80ec5c2325e1f43261bba7888b1314e92
MD5 ad820665c1b34d0aa3f2c0e175e166f5
BLAKE2b-256 ae33a494d35158faa59031307d59c5b60720a4847efb4dec23cdc4a006208ebf

See more details on using hashes here.

File details

Details for the file youtube_factory_pipeline-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for youtube_factory_pipeline-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 31b820454f67dd2aae3a2b011970e55edd529d2ee595af7a8d2ee3a46f5dfc4d
MD5 ea04ff47186381203fb0e726ad5df984
BLAKE2b-256 254fb8b2d1ca9cf117fe9b0d5f7457a9ae82972ebca44fd019e4562c55589b68

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page