AI-powered content creation platform. Generate tech videos, YouTube Shorts, and Twitter posts β fully self-hosted, no paid LLM APIs required.
Features Β· Architecture Β· Setup Β· Configuration Β· Roadmap
π Built on top of the excellent MoneyPrinterV2 by @FujiwaraChoki. The original project provided the complete automation foundation β YouTube Shorts generation, Twitter posting, affiliate marketing, and local business outreach. Without that base, none of this would have been possible. Go give it a β.
This fork keeps everything from the original CLI and adds a full web platform on top:
| Layer | What was added |
|---|---|
| π¨ React Dashboard | Visual job management, real-time pipeline view, video player |
| βοΈ FastAPI Backend | REST API + WebSocket, PostgreSQL, Celery job queue |
| π¬ Remotion Renderer | Node.js microservice that renders animated MP4s with React |
| π€ Tech Video Pipeline | 9-step AI pipeline: search β script β images β TTS β subtitles β render |
| πΉ YouTube Shorts Pipeline | 10-step pipeline with web search, duration control, topic override, and auto-upload |
| π Account Connect Flow | One-click Firefox session capture β log in once, all uploads automated |
| π° Cost Tracking | Per-service cost breakdown (fal.ai, Ollama, edge-tts, Whisper) |
The flagship new feature. Triggered from the dashboard, the full pipeline runs automatically:
π Web Search β Tavily API (optional β fetch current docs/news)
π Generate Script β Ollama (Qwen2.5-Coder recommended)
π·οΈ Generate Metadata β YouTube title + description
π» Code Snippets β 2β3 real examples (tech-dark template)
πΌοΈ Image Prompts β LLM-generated prompts
π¨ Generate Images β fal.ai FLUX (~$0.003/image)
π Synthesize Voice β edge-tts (7 languages, Microsoft Neural)
π Word Subtitles β faster-whisper (TikTok-style, per-word timing)
π₯ Render Video β Remotion 4 + Chromium β MP4
Each step streams real-time progress to the dashboard via WebSocket.
| Template | Style | Best for |
|---|---|---|
tech-dark |
Dark gradient + animated code blocks + Ken Burns images | Programming tutorials |
minimal |
Full-bleed images + vignette overlay | Clean explainers |
bold |
Title card intro + flash cuts + accent bar | High-energy content |
reel |
Animated gradient backgrounds + pulse highlight | Short-form reels |
| Key | Size | Platform |
|---|---|---|
shorts |
1080 Γ 1920 | YouTube Shorts Β· TikTok Β· Reels |
landscape |
1920 Γ 1080 | YouTube standard |
square |
1080 Γ 1080 |
β Fully working end-to-end β tested on Ubuntu 24.04 with dual-GPU (NVIDIA + AMD). See Troubleshooting if Firefox doesn't open.
Generate, compose, and upload in one click:
π Web Search β Tavily API (optional β improves script accuracy)
π‘ Generate Topic β Ollama LLM (skipped if topic provided manually)
π Generate Script β Ollama LLM (~75β300 words depending on duration)
π·οΈ Generate Metadata β YouTube title + description
πΌοΈ Image Prompts β LLM-generated prompts (3β6 images)
π¨ Generate Images β fal.ai FLUX schnell (~$0.003/image)
π Synthesize Voice β edge-tts (7 languages, Microsoft Neural)
π Generate Subtitles β faster-whisper base (word-level SRT)
ποΈ Compose Video β MoviePy β images + TTS + background music + subtitles
π€ Upload to YouTube β Selenium Firefox β auto or manual re-upload from dashboard
| Option | Values | Default |
|---|---|---|
| Duration | 30s Β· 60s Β· 90s Β· 120s |
60s |
| Language | English, Spanish, Portuguese, French, German, Italian, Japanese | English |
| Topic | Free text (skips topic generation step) | β |
| Web search | on / off | off |
| Auto-upload | on / off | off |
If auto-upload is off (or the upload step fails), a "Upload to YouTube" button appears on the job card β click it to upload the already-rendered video without regenerating anything.
No credentials stored. Session captured once from a plain (non-automated) Firefox:
- Create an account in the dashboard (YouTube or Twitter)
- Click Connect β plain Firefox opens to the platform login page
- Log in normally β Google/YouTube does not block this (no WebDriver involved)
- Dashboard reads the session cookie from the Firefox profile and saves the path
- All future jobs reuse that profile β fully automated
Real-time status streams back via WebSocket: opening β waiting β detected β connected.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React Dashboard β :5173
β Dashboard Β· YouTube Β· Twitter Β· Tech Videos β
β Costs Β· Config Β· Real-time pipeline via WebSocket β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
β HTTP / WebSocket
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββ
β FastAPI Backend β :8001
β Jobs Β· Videos Β· Accounts Β· Costs Β· Config Β· WS β
β PostgreSQL + Redis Pub/Sub β
ββββββββ¬βββββββββββββββββββββββββββ¬ββββββββββββββββββββ
β Celery tasks β HTTP POST
ββββββββΌβββββββββββ ββββββββββββΌβββββββββββββββββββ
β Celery Workers β β Remotion Service (Node.js) β :3001
β β’ youtube β β Express Β· Webpack bundle β
β β’ twitter β β 4 templates Β· 3 resolutions β
β β’ remotion β β Renders MP4 via Chromium β
βββββββββββββββββββ βββββββββββββββββββββββββββββββ
β
ββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ
β Local Services β
β π¦ Ollama Β· π PostgreSQL Β· π΄ Redis β
β π¨ fal.ai Β· π edge-tts Β· π faster-whisper β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite, Tailwind CSS, shadcn/ui |
| Backend | FastAPI, SQLAlchemy (async), PostgreSQL, Alembic |
| Task Queue | Celery + Redis |
| Real-time | Redis Pub/Sub β WebSocket |
| LLM | Ollama β Qwen2.5-Coder, Llama3, Mistral, etc. |
| Image Gen | fal.ai (FLUX) |
| TTS | edge-tts (Microsoft Neural voices, 7 languages) |
| STT | faster-whisper (word-level timestamps) |
| Video Render | Remotion 4 β React β MP4 via headless Chromium |
| Web Search | Tavily API (optional) |
| Browser Automation | Selenium + pre-authenticated Firefox profiles |
π‘ The only paid external services are fal.ai (~$0.003/image) and Tavily (free tier available). Everything else runs locally.
- π Python 3.12
- π’ Node.js 18+
- π PostgreSQL
- π΄ Redis
- π¦ Ollama with at least one model pulled
- πΉ Go β only needed for Local Business Outreach
git clone https://github.com/luisfarfan/MoneyPrinterV2.git
cd MoneyPrinterV2cp config.example.json config.json # then fill in your values
python -m venv venv
source venv/bin/activate # Windows: .\venv\Scripts\activate
pip install -r requirements.txtcd remotion-service
npm install
cd ..cd frontend
npm install
cd ..cp .env.example .envEdit .env:
DATABASE_URL=postgresql+asyncpg://mpv2:mpv2@localhost:5432/mpv2
REDIS_URL=redis://localhost:6379/0
FAL_KEY=your_fal_api_key
TAVILY_API_KEY=your_tavily_api_key # optionalalembic upgrade headollama pull qwen2.5-coderOpen 4 terminals from the project root:
# Terminal 1 β FastAPI backend
uvicorn backend.main:app --host 0.0.0.0 --port 8001
# Terminal 2 β Celery worker
celery -A backend.workers.celery_app worker --loglevel=info -Q remotion,youtube,twitter -c 1
# Terminal 3 β Remotion renderer
cd remotion-service && npx tsx src/server.ts
# Terminal 4 β React dashboard
cd frontend && npm run devOpen http://localhost:5173 π
bash scripts/setup_local.sh
python scripts/preflight_local.pydocker-compose up| Key | Description |
|---|---|
ollama_model |
LLM model name (e.g. qwen2.5-coder:latest) |
imagemagick_path |
Required for MoviePy subtitle rendering |
firefox_profile |
Path to pre-authenticated Firefox profile |
| Key | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
REDIS_URL |
Redis connection string |
FAL_KEY |
fal.ai API key β image generation |
TAVILY_API_KEY |
Tavily API key β web search (optional) |
- Web search integration for YouTube Shorts pipeline (Tavily)
- Duration selector per job (30s / 60s / 90s / 120s)
- Topic override (skip LLM topic generation)
- Account connect flow β plain Firefox session capture (no WebDriver, Google won't block)
- Auto-upload YouTube Shorts via Selenium after generation
- Manual re-upload button for failed/skipped upload steps
- Real-time pipeline progress via WebSocket
- Cost tracking per service and per job
- Firefox dual-GPU fix for Ubuntu 24.04 (NVIDIA + AMD)
- Twitter auto-post from dashboard β generate tweet (Ollama) + post via Selenium in one click
- π΅ TikTok β connect account + auto-upload Shorts (same Selenium flow as YouTube)
- π€ Auto-upload Remotion tech videos to YouTube from dashboard
- π€ Auto-upload Remotion tech videos to YouTube
- β° CRON scheduling for automated posting
- πΌοΈ Video thumbnail previews in job list
- πΈ Cost budget alerts and per-account limits
- π³ Full Docker Compose setup (one command for everything)
- π± Mobile-responsive dashboard
- π Support OpenAI / Anthropic as LLM providers alongside Ollama
- π₯οΈ Virtual display (Xvfb) for headless server deployments
MoneyPrinterV2/
βββ src/ # Original Python CLI (unchanged)
β βββ main.py # Interactive menu
β βββ cron.py # Headless scheduler runner
β βββ classes/ # YouTube, Twitter, AFM, Outreach, TTS
β
βββ backend/ # FastAPI backend β¨
β βββ models/ # SQLAlchemy ORM (Job, Video, Account, Cost)
β βββ routes/ # REST API routers
β βββ schemas/ # Pydantic request/response schemas
β βββ workers/ # Celery tasks (youtube, twitter, remotion)
β βββ settings.py
β
βββ remotion-service/ # Node.js video renderer β¨
β βββ src/
β βββ server.ts # Express API (/render, /health, /media)
β βββ renderer.ts # Remotion bundle + renderMedia logic
β βββ types.ts # Zod schemas + shared types
β βββ compositions/ # TechDark, Minimal, Bold, Reel
β βββ components/ # GradientBackground, SubtitleWord, ImageSceneβ¦
β
βββ frontend/ # React dashboard β¨
β βββ src/
β βββ pages/ # Dashboard, YouTube, Twitter, TechVideo, Costs, Config
β βββ components/ # VideoPreview, PipelineView, AccountRow
β βββ hooks/ # useJobStream (WebSocket)
β βββ lib/ # api.ts β typed fetch client
β
βββ docs/
βββ scripts/
βββ config.example.json
βββ .env.example
Common issues and fixes are documented in docs/Troubleshooting.md.
| Issue | Quick link |
|---|---|
Firefox won't open / Process unexpectedly closed with status 0 |
Firefox crash on Ubuntu 24.04 dual-GPU |
| Firefox profile path not found | Profile path error |
| Project | Why |
|---|---|
| MoneyPrinterV2 by @FujiwaraChoki | The entire original automation foundation this fork is built on |
| Remotion | React-based video rendering engine |
| Ollama | Local LLM inference |
| fal.ai | Fast image generation API |
| edge-tts | Microsoft Neural TTS voices |
| faster-whisper | Word-level speech transcription |
Licensed under the GNU Affero General Public License v3.0 β same as the original project. See LICENSE for details.
For educational purposes only. All automation must comply with the terms of service of the platforms being accessed. The authors are not responsible for any misuse.