An automated video generation pipeline that converts ideas into videos using AI.
- 📱 Mobile control via Telegram bot
- 🤖 AI-powered prompt generation (Gemini)
- 🎬 Video generation with Veo 3.1 API (15-key fallback)
- 💾 SQLite state persistence
- ⚡ Background processing (fire-and-forget)
- 🏥 Health check endpoint
veo_pipeline/
├── src/
│ └── main.rs # Main application code
├── config/
│ └── api_keys.toml # API keys configuration
├── videos/ # Downloaded videos (created at runtime)
├── Cargo.toml # Rust dependencies
├── pipeline.db # SQLite database (created at runtime)
└── README.md # This file
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shEdit config/api_keys.toml and add your keys:
- Veo 3.1 API keys (at least 1)
- Gemini API key for prompt generation
Get a token from @BotFather on Telegram.
Mac/Linux:
export TELOXIDE_TOKEN=your_telegram_bot_tokenWindows (PowerShell):
$env:TELOXIDE_TOKEN="your_telegram_bot_token"In src/main.rs, update the veo_url variable with your actual Veo 3.1 endpoint.
cargo run- Open Telegram on your mobile
- Send a message to your bot:
/idea A futuristic city at sunset - The bot will reply instantly confirming your idea
- Wait for the background processing to complete
- The bot will notify you when the video is ready
- Terminal prints
Loaded X Veo API keys. - Browser at
http://localhost:3000/healthshows{"status":"ok"}
- Bot replies instantly:
✅ Idea accepted... - Terminal prints
📝 Prompt generated: ...
- Terminal logs key fallback attempts
- Video file appears in
videos/folder - Video plays correctly in media player
- Open
pipeline.dbwith DB Browser for SQLite - Check
jobstable has correct data and status
- Phase 7: YouTube OAuth2 integration (coming soon)
- Phase 10: Cloud deployment
- Language: Rust
- Web Framework: Axum
- Async Runtime: Tokio
- Bot Framework: Teloxide
- Database: SQLite (rusqlite)
- HTTP Client: reqwest
- AI: Google Gemini
- Video: Veo 3.1
MIT