Automated Twitch/Kick clip processor with subtitle burning, AI-generated titles, and social media uploading.
- Multi-Platform Monitoring: Watch Twitch and Kick streamers for new clips
- Automatic Download: Uses yt-dlp for reliable clip downloading
- AI Transcription: Groq Whisper API for fast, free transcription
- Subtitle Burning: FFmpeg with TikTok-style centered captions
- AI Content Generation: OpenRouter for titles, descriptions, and hashtags
- Job Queue: BullMQ + Redis for reliable background processing
- Web Dashboard: Monitor clips, streamers, and processing queue
- Runtime: Bun + TypeScript
- API: Elysia
- Database: SQLite + Drizzle ORM
- Queue: BullMQ + Redis
- Video: FFmpeg + yt-dlp
# Clone the repo
git clone <your-repo-url>
cd stream-clipper
# Install dependencies
bun install
# Copy environment file
cp .env.example .env
# Edit .env with your API keysEdit .env with your credentials:
# Required
TWITCH_CLIENT_ID=your_twitch_client_id
TWITCH_CLIENT_SECRET=your_twitch_client_secret
GROQ_API_KEY=your_groq_api_key
# Optional (for AI titles)
OPENROUTER_API_KEY=your_openrouter_key# Start Redis (if not running)
docker run -d -p 6379:6379 redis:alpine
# Start API server
bun run dev:api
# In another terminal, start web dashboard
bun run dev:web# Build and start all services
docker compose up -d
# View logs
docker compose logs -f
# Stop services
docker compose down| Endpoint | Method | Description |
|---|---|---|
/api/health |
GET | Health check |
/api/stats |
GET | Queue and system stats |
/api/streamers |
GET/POST | List/add streamers |
/api/streamers/:id |
PATCH/DELETE | Update/remove streamer |
/api/streamers/:id/fetch |
POST | Trigger manual fetch |
/api/clips |
GET | List all clips |
/api/clips/:id |
GET/DELETE | Get/delete clip |
/api/clips/:id/reprocess |
POST | Reprocess a clip |
/api/queue/status |
GET | Queue status |
/api/logs |
GET | View processing logs |
stream-clipper/
├── apps/
│ ├── api/ # Elysia backend
│ │ └── src/
│ │ ├── routes/ # API routes
│ │ ├── services/ # Business logic
│ │ ├── jobs/ # Queue workers
│ │ ├── db/ # Database schema
│ │ └── utils/ # Helpers
│ └── web/ # Next.js dashboard
├── packages/
│ └── shared/ # Shared types
├── data/ # SQLite DB & clips
├── docker-compose.yml
└── README.md
Optimized for low-power servers (tested on i3-9100T with 12GB RAM):
- Single clip processing at a time
- Groq API for transcription (no local GPU needed)
- FFmpeg with 2 threads, medium preset
MIT