Programmatic video pipeline. Generate reels, YouTube videos, and captioned content from text. 40+ AI tools, CLI pipeline, self-hostable, API-first, no vendor lock-in.
Live Demo | Documentation | Pipeline Guide | Modules | API Reference | Report Bug
Generated entirely by ReelStack. No editing software, no designer, just one API call.
![]() AI Video Automation tip-card + karaoke captions |
![]() Science Facts quote-card + single-word mode |
![]() iPhone Tips tip-card + karaoke captions |
Click any preview to watch the full reel on YouTube.
ReelStack also generates standalone branded images for social media. No video required. Upload your brand CSS, pick a template and size, get a pixel-perfect PNG.
See examples, 12 templates, 3 sizes, 2 built-in brands
Dark theme (example brand)
| Post (1080x1080) | Story (1080x1920) | YouTube (1280x720) |
|---|---|---|
![]() |
![]() |
![]() |
| tip-card | tip-card | tip-card |
Light theme (example-light brand)
| Post (1080x1080) | Story (1080x1920) | YouTube (1280x720) |
|---|---|---|
![]() |
![]() |
![]() |
| quote-card | quote-card | quote-card |
More templates: ad-card, announcement, webinar-cover, webinar-point, webinar-cta-slide, webinar-countdown, webinar-lastcall, webinar-myth, webinar-program, webinar-question
Standalone image server: apps/image-gen-server. One docker compose up for a self-hosted image API.
Most video tools are either closed-source SaaS products with usage limits, or scattered scripts requiring manual assembly. ReelStack is a complete pipeline:
- Script to reel in seconds. Write text, get a finished video with voiceover, karaoke captions, transitions, and effects
- 40+ AI tools across 10+ providers. AI video (Veo 3.1, Seedance, Kling), AI images (NanoBanana, Flux, Ideogram), stock footage (Pexels), avatars (HeyGen)
- CLI pipeline for step-by-step production. Run each stage independently: TTS, plan, assets, assemble, render
- AI Director (Claude) for automated shot planning. Selects tools, plans shots, writes prompts, reviews quality
- Configurable prompt system. All LLM prompts are editable markdown templates. No code changes needed
- Transparent avatar overlay. Greenscreen or background removal for talking-head-over-content layouts
- Asset management. Regenerate or replace individual shots without re-running the whole pipeline
- 11 composable effects. Text cards, B-roll cutaways, punch-in zoom, highlight boxes, animated counters, lower thirds, CTAs, PiP, and more
- Two output formats. 9:16 reels (Instagram/TikTok/Shorts) and 16:9 YouTube videos with the same effect library
- Real karaoke captions. TTS voiceover + whisper.cpp word-level timestamps = pixel-accurate word-by-word highlighting
- API-first. REST API with auth, rate limiting, and scoped permissions. Automate from your app or n8n workflow
- Fully self-hostable. Deploy on your own VPS with Docker. Your data, your infrastructure
ReelStack is a programmatic video pipeline. You provide a script (or video + subtitles), configure effects and style, and the pipeline generates a finished MP4: text-to-speech voiceover, whisper-based word timestamps, karaoke captions, B-roll transitions, overlays, and more. It includes a web app with wizard UI, dashboard, and REST API.
- Content creators who want to generate reels and YouTube clips from scripts without editing software
- Developers who need programmatic video rendering via API or CLI
- Agencies who produce video content at scale with batch rendering
- Educators who teach video production with code
ReelStack replaces manual editing workflows in tools like Kapwing, Descript, VEED.io, Opus Clip, or scattered FFmpeg scripts, with a single self-hosted pipeline.
ReelStack is the production pipeline. HeyGen, Veo, Seedance, and other AI tools are the content generators. ReelStack orchestrates them.
Instead of competing with AI video platforms, ReelStack integrates them into a unified production workflow. You get the best of both worlds: AI-generated content (avatars, B-roll, images) with full pipeline control (timing, transitions, captions, effects, branding).
| AI Video SaaS alone | ReelStack (orchestrating AI tools) | |
|---|---|---|
| Control | Prompt in, video out. No timeline, no pacing control | Full programmatic control. Templates, effects, frame-level precision |
| Tool choice | Locked to one platform's models | 40+ tools across 10+ providers. Swap freely per shot |
| Avatar support | Platform-specific avatars only | HeyGen Avatar III/IV/V + transparent overlay on any content |
| Cost at scale | $1-5+ per reel (credit-based, credits expire) | ~$0.10-0.50 per reel (self-hosted TTS + Remotion Lambda) |
| Automation | Limited API, no webhook pipeline | REST API + BullMQ + CLI + n8n webhooks. Zero-click batch production |
| Data ownership | Your assets, their servers | Your infrastructure, your storage, your data. AGPL-3.0 |
| Customization | Choose from their templates | Build your own Remotion compositions in React. 11 effects, 5 transitions |
| Offline / air-gapped | Requires internet, their servers | Runs on a Raspberry Pi if you want |
If all you need is a quick avatar video and you do not care about pipeline automation, tools like HeyGen are great standalone. ReelStack adds value when you need batch production, brand consistency, multi-tool orchestration, or cost predictability.
ReelStack is video infrastructure. AI video tools are content engines. ReelStack connects them into a production line.
ReelStack includes a step-by-step CLI for local reel production. Each stage outputs a JSON file consumed by the next.
bun run rs tts "Your script text here"
bun run rs plan out/tts.json
bun run rs assets out/plan.json
bun run rs assemble out/plan.json out/tts.json
bun run rs render out/composition.jsonbun run rs heygen "Your script text here"
bun run rs transcribe out/heygen.mp4
bun run rs plan out/tts.json --director
bun run rs assets out/plan.json
bun run rs assemble out/plan.json out/tts.json
bun run rs render out/composition.jsonEach step can be re-run independently. Replace a single asset with bun run rs regen <shot-id> or bun run rs replace <shot-id> <file>.
For full CLI reference, see PRODUCTION-GUIDE.md.
ReelStack auto-discovers 40+ AI tools across 10+ providers based on which API keys are configured.
| Category | Providers | Example tools |
|---|---|---|
| AI Video | fal.ai, KIE, PiAPI, AIML, WaveSpeed, Replicate, Runway, Minimax, Google Vertex | Veo 3.1, Seedance 2.0, Kling, Wan, Hailuo |
| AI Images | fal.ai, KIE, WaveSpeed, Replicate | NanoBanana, Flux, Ideogram, Recraft |
| Stock | Pexels | Stock footage search |
| Avatars | HeyGen | Avatar III, IV, V |
| Self-hosted | RunPod | HuMo avatar |
Adding a new model is one config object in the provider file. No other files need changes. See PRODUCTION-GUIDE.md for details.
Each tool has an editable markdown prompt guideline in packages/agent/src/prompts/guidelines/. The AI Director uses these when writing generation prompts.
- Script to video. Write text, generate voiceover (Edge TTS / ElevenLabs / OpenAI), auto-caption with whisper.cpp, render with Remotion
- Two compositions. 9:16 vertical reels and 16:9 horizontal YouTube, sharing the same effect library
- Karaoke captions. Word-by-word highlighting with real whisper.cpp word-level timestamps
- 11 composable effects. Text cards, B-roll cutaways, punch-in zoom, highlight boxes, animated counters, lower thirds, CTAs, PiP, chapter cards, progress bar
- 5 transition types. Crossfade, slide-left, slide-right, zoom-in, wipe
- AI Director (Claude). Automated shot planning: selects tools, plans B-roll, writes generation prompts, reviews quality
- 40+ AI tools. Video generation, image generation, stock footage, avatars. Auto-discovered from environment
- Configurable prompt system. All LLM prompts are editable markdown files. Modify planning behavior without code changes
- Transparent avatar overlay. Greenscreen chromakey or native background removal for talking-head-over-content layouts
- Asset management. Regenerate or replace individual shots. Swap tools per shot
- Visual timeline editor. Drag and resize subtitle blocks with snap-to-grid
- 8 built-in templates. Classic, Cinematic, Bold Box, Modern, Minimal Top, Neon, Yellow Box, Typewriter
- Full style control. Font family, size, color, outline, shadow, position, alignment
- SRT import/export. Load existing subtitle files, edit visually, export back to SRT
- Remotion-based. React compositions rendered to MP4 with @remotion/renderer
- Remotion Lambda. AWS serverless rendering for fast, scalable output
- Client-side rendering. FFmpeg.wasm for subtitle burning in the browser
- Server-side rendering. Queue jobs to server with BullMQ for longer videos
- 3 render presets. Speed, balanced, and quality modes
- REST API with API key authentication (
Authorization: Bearer rs_...) - Reel pipeline endpoint. POST /api/v1/reel/generate with script, TTS config, style
- Full CRUD. Render jobs, projects, templates, API keys
- Zod-validated requests and responses
- Sellf webhook integration. Tier upgrades (Free/Pro/Enterprise) and token purchases
- Token system. Render credits with daily limits per tier + purchasable token packs
- API key scoping. Granular permissions (render, reel, publish, templates, projects)
- Docker deployment. PostgreSQL, Redis, MinIO, all in Docker Compose
- Cloud deployment. Vercel + Supabase + Inngest alternative
- No vendor lock-in. Swap storage or queue backends without code changes
| Requirement | Version |
|---|---|
| Bun | 1.3+ |
| Node.js | 20+ |
| PostgreSQL | 15+ (or use Docker) |
| OS | macOS, Linux, or Windows (WSL) |
The fastest path: everything in Docker, hot-reload, sign in without SMTP.
git clone https://github.com/jurczykpawel/reelstack.git
cd reelstack
bin/dev-up.sh # first run creates .env.dev, re-run after editingWhat this starts:
- Postgres, Redis, MinIO (S3-compatible storage) — all with auto-setup
web(Next.js) onhttp://localhost:3001worker(reel pipeline) with hot reload from mounted source
On first run the script prints the path to .env.dev. Open it and add at least:
ANTHROPIC_API_KEY=sk-ant-... # required — Claude plans the video
OPENAI_API_KEY=sk-... # required — Whisper transcribes for captionsThen re-run bin/dev-up.sh. Open http://localhost:3001/login and click “Dev login” to sign in with any email. No password, no SMTP.
Reset the environment (drop DB + storage): docker compose -f docker-compose.dev.yml down -v.
If you prefer running Next.js on the host:
bun install
docker compose up -d postgres redis minio # infra only
bunx prisma db push --schema=packages/database/prisma/schema.prisma
bun run dev # web
bun run worker --filter web # second terminalSet ALLOW_DEV_LOGIN=1 and NEXT_PUBLIC_ALLOW_DEV_LOGIN=1 in apps/web/.env for the Dev login button.
bun run buildFor full deployment instructions:
- VPS (Docker): See Self-host guide. PostgreSQL, Redis, MinIO, all in Docker
- Cloud (Vercel): See Vercel + Supabase guide. Vercel for app, Supabase for storage, Inngest for queue
| Layer | Technology | Role |
|---|---|---|
| Framework | Next.js 16 (App Router) | Server-side rendering, API routes, file-based routing |
| Language | TypeScript | Type safety across all packages |
| UI | React 19 | Component framework |
| Styling | Tailwind CSS + shadcn/ui | Utility-first CSS with accessible component library |
| State | Zustand | 4 client-side stores (project, engine, timeline, UI) |
| Auth | Auth.js (NextAuth v5) | Email/password + magic links, JWT sessions |
| Database | PostgreSQL + Prisma ORM | Relational storage with type-safe queries |
| Storage | MinIO / Supabase Storage | Video and rendered file storage (adapter pattern) |
| Queue | BullMQ + Redis / Inngest | Background render job processing (adapter pattern) |
| Client Rendering | FFmpeg.wasm | In-browser video processing via WebAssembly |
| Server Rendering | Remotion + Remotion Lambda | React-based video rendering, local or AWS Lambda |
| Transcription | whisper.cpp / Transformers.js | Word-level timestamps for karaoke captions |
| AI Orchestration | Claude (Opus/Sonnet/Haiku) | Shot planning, prompt expansion, quality review |
| TTS | Gemini Flash TTS / Edge TTS / ElevenLabs / OpenAI | Text-to-speech voiceover. Server-side resolver auto-picks the best provider from env (GEMINI_API_KEY > ELEVENLABS_API_KEY > OPENAI_API_KEY > free edge-tts fallback). |
| Monorepo | Turborepo + Bun workspaces | Build orchestration and dependency management |
| Testing | Vitest + Playwright | 1200+ unit tests + E2E tests |
reelstack/
├── apps/web/ # Next.js application
│ ├── src/
│ │ ├── app/ # Pages & API routes (internal + v1)
│ │ ├── components/ # React components (editor, timeline, video, UI)
│ │ ├── lib/ # Auth, API helpers, bridges, hooks
│ │ └── store/ # Zustand state management (4 stores)
│ ├── worker/ # BullMQ render worker (standalone process)
│ └── e2e/ # Playwright E2E tests
├── packages/
│ ├── agent/ # LLM planning, tool registry, CLI, orchestration
│ ├── types/ # Shared TypeScript interfaces
│ ├── core/ # Engines, action system, serializer, templates
│ ├── remotion/ # Remotion compositions + video components
│ ├── tts/ # Text-to-speech (Edge TTS, ElevenLabs, OpenAI)
│ ├── transcription/ # whisper.cpp wrapper + word grouping
│ ├── ffmpeg/ # SRT parser, ASS generator, time utils
│ ├── database/ # Prisma schema + query helpers
│ ├── queue/ # Queue adapters (Inngest, BullMQ)
│ ├── storage/ # Storage adapters (Supabase, MinIO, R2)
│ └── modules/ # Module system (private extensions)
├── docker/ # Dockerfiles + nginx config
├── scripts/ # Setup scripts
└── docs/ # Documentation
| Package | Purpose |
|---|---|
packages/agent |
LLM-powered planning (AI Director), 40+ tool registry, CLI pipeline, prompt system (editable markdown), orchestration, supervisor. The brain of the reel pipeline. |
packages/remotion |
Remotion compositions (Reel 9:16, YouTubeLongForm 16:9), 11 effect components (ZoomEffect, AnimatedCounter, HighlightBox, ChapterCard, etc.), schemas, and rendering helpers. See COMPOSITION.md. |
packages/tts |
Text-to-speech providers: Edge TTS (free), ElevenLabs, OpenAI. Unified interface for synthesis. |
packages/transcription |
whisper.cpp integration, audio normalization, BPE token merging, word-to-cue grouping. Produces karaoke-ready cues. |
packages/core |
Pure-function engines (SubtitleEngine, TemplateEngine, RenderEngine, ActionSystem, ProjectSerializer). |
packages/ffmpeg |
SRT parser, ASS generator (including karaoke timing tags), time-format utilities. |
packages/database |
Prisma schema (User, Video, RenderJob, ReelJob, Template, ApiKey, TokenTransaction, etc.) + query helpers. |
packages/queue |
Adapter: auto-detects Inngest (cloud) or BullMQ (VPS). |
packages/storage |
Adapter: auto-detects Supabase Storage (cloud), MinIO (VPS), or Cloudflare R2. |
packages/types |
Shared TypeScript interfaces and API scope constants. |
For full architecture details, see docs/ARCHITECTURE.md. For the reel generation pipeline, see docs/REEL_PIPELINE.md.
- Open the app at
http://localhost:3000 - Drop a video file (MP4, WebM, MOV, MKV, up to 500 MB)
- Add subtitles with the + Add Subtitle button or import an SRT file
- Edit text, timing, and style in the right panel
- Use the timeline to drag and resize subtitle blocks
- Click Render then Browser to burn subtitles client-side
- Download the rendered video
- Sign up or sign in at
/login - Upload videos from the dashboard. They are stored in cloud/MinIO storage
- Edit subtitles. Changes auto-save every 2 seconds
- Render using Server mode for faster processing of long videos
- Download rendered videos from the dashboard
| Key | Action |
|---|---|
Space |
Play / Pause |
Left Arrow |
Seek back 0.1s (Shift: 1s) |
Right Arrow |
Seek forward 0.1s (Shift: 1s) |
Delete / Backspace |
Remove selected subtitle |
- Click Import SRT in the toolbar to load existing subtitles
- Edit timing and text visually
- Click Export SRT to save the result
The public API uses API key authentication. Generate a key from the dashboard or via the API.
# Create a render job
curl -X POST https://your-instance.com/api/v1/render \
-H "Authorization: Bearer rs_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "videoId": "uuid", "style": { "fontFamily": "Arial", "fontSize": 48 }, "cues": [...] }'
# Check render status
curl https://your-instance.com/api/v1/render/job-uuid \
-H "Authorization: Bearer rs_live_your_api_key"
# Download rendered video
curl -L https://your-instance.com/api/v1/render/job-uuid/download \
-H "Authorization: Bearer rs_live_your_api_key" -o output.mp4For the full list of 21 API endpoints, see the API Routes section in ARCHITECTURE.md.
bun install # Install all dependencies
bun run dev # Start dev server (http://localhost:3000)
bun run build # Production build
bun run test # Run all tests (1200+ across agent, remotion, and web)
bun run lint # Lint all packages
bun run format # Format with Prettier
bun run format:check # Check formatting without writing| Variable | Required | Description |
|---|---|---|
AUTH_SECRET |
Yes | Random secret for JWT signing (openssl rand -base64 32) |
DATABASE_URL |
Yes | PostgreSQL connection string |
SMTP_HOST |
No | SMTP server for magic link emails |
SMTP_PORT |
No | SMTP port (default: 587) |
SMTP_USER |
No | SMTP username |
SMTP_PASS |
No | SMTP password |
EMAIL_FROM |
No | From address for emails |
REDIS_URL |
No | Redis for BullMQ (VPS mode) |
MINIO_ENDPOINT |
No | MinIO endpoint (VPS mode) |
MINIO_ACCESS_KEY |
No | MinIO access key |
MINIO_SECRET_KEY |
No | MinIO secret key |
MINIO_BUCKET |
No | MinIO bucket name |
NEXT_PUBLIC_FFMPEG_CORE_URL |
No | Custom CDN base URL for FFmpeg WASM core (defaults to unpkg) |
NEXT_PUBLIC_SUPABASE_URL |
No | Supabase URL (cloud mode, storage only) |
SUPABASE_SERVICE_ROLE_KEY |
No | Supabase service key (cloud mode) |
See docs/ROADMAP.md for the full roadmap with phase details.
- Visual timeline editor with drag and resize
- 8 built-in subtitle templates, 6 caption animation styles
- Client-side + server-side rendering (FFmpeg.wasm / BullMQ)
- Auto-transcription with in-browser Whisper
- Public REST API v1 (21 endpoints)
- Remotion-based reel rendering (React video compositions)
- TTS voiceover (Edge TTS / ElevenLabs / OpenAI) + Whisper word alignment
- Remotion Lambda renderer (AWS serverless)
- AI Director (Claude) with 40+ tools across 10+ providers
- CLI pipeline (tts, plan, assets, assemble, render)
- HeyGen Avatar integration (III/IV/V)
- Transparent avatar overlay (greenscreen + native background removal)
- Reel creation API + Postiz multi-platform publishing
- Sellf payment webhook (tier upgrades + token packs)
- Docker deployment with optional reel-worker (Chromium + pre-bundled Remotion)
- 1200+ tests across agent, remotion, and web packages
- Web UI reel editor (wizard, preview, publish flow)
- Multi-language subtitle tracks
- Batch reel rendering via API
- Custom font uploads
- GPU-accelerated server rendering
ReelStack is fully open source (AGPL-3.0). Premium montage templates and effects are available as optional closed-source modules for commercial use.
Contributions are welcome and appreciated. There are many ways to help:
- Report bugs. Open an issue with steps to reproduce
- Suggest features. Start a discussion or open an issue tagged
enhancement - Submit pull requests. Bug fixes, new features, documentation improvements
- Improve tests. The project has 1200+ tests but more coverage is always welcome
- Write documentation. Tutorials, guides, or translations
Please read docs/CONTRIBUTING.md for development setup, code style guidelines, commit conventions, and the PR process.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.
ReelStack can process user-uploaded video files and stores user accounts identified by email. Login is passwordless (magic link only). If you self-host this application:
- Review the SECURITY.md file for the security policy and vulnerability reporting process
- All video files are stored in your configured storage backend (MinIO, R2, or Supabase). No data is sent to third parties
- Client-side rendering processes video entirely in the browser. The file never leaves the user's device
- API keys are stored as SHA-256 hashes, never in plaintext
- All database queries are scoped to the authenticated user (application-level row security)
- Bug reports and feature requests. GitHub Issues
- Questions and discussions. GitHub Discussions
- Security vulnerabilities. Email security@reelstack.io (see SECURITY.md)
ReelStack is built on top of these excellent open-source projects:
| Project | Role |
|---|---|
| Next.js | Full-stack React framework |
| Remotion | React-based video rendering |
| FFmpeg / FFmpeg.wasm | Video processing (server and browser) |
| whisper.cpp | Word-level speech transcription |
| Zustand | Lightweight state management |
| Auth.js | Authentication framework |
| Prisma | Database ORM |
| BullMQ | Redis-backed job queue |
| Tailwind CSS | Utility-first CSS framework |
| shadcn/ui | Accessible UI components |
| Turborepo | Monorepo build system |
| Vitest | Unit testing framework |
| Playwright | End-to-end testing |








