Skip to content
chantysothyPublic

About

Programmatic video pipeline — generate reels and social media images from text. Self-hostable, API-first, open source.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

143 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReelStack

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.

CI License: AGPL-3.0 Status: Beta Open Source PRs Welcome

Live Demo | Documentation | Pipeline Guide | Modules | API Reference | Report Bug


Demo Reels

Generated entirely by ReelStack. No editing software, no designer, just one API call.

AI Video Automation
AI Video Automation
tip-card + karaoke captions
Science Facts
Science Facts
quote-card + single-word mode
iPhone Tips
iPhone Tips
tip-card + karaoke captions

Click any preview to watch the full reel on YouTube.

Image Generator

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.


Why ReelStack?

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

What It Does

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.

Who It's For

  • 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

Alternative To

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 + HeyGen, Veo, Seedance

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

When to use AI Video SaaS directly

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.


CLI Pipeline

ReelStack includes a step-by-step CLI for local reel production. Each stage outputs a JSON file consumed by the next.

Pipeline A: Voiceover (TTS generates audio)

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.json

Pipeline B: HeyGen avatar (audio from talking head)

bun 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.json

Each 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.


Tool Registry

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.


Features

Reel & YouTube Pipeline

  • 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 & Tool Orchestration

  • 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

Subtitle Editor

  • 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

Rendering

  • 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

Public API v1

  • 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

Monetization

  • 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)

Self-Hosting

  • 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

Quick Start

Prerequisites

Requirement Version
Bun 1.3+
Node.js 20+
PostgreSQL 15+ (or use Docker)
OS macOS, Linux, or Windows (WSL)

Run Locally (Docker, one command)

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 editing

What this starts:

  • Postgres, Redis, MinIO (S3-compatible storage) — all with auto-setup
  • web (Next.js) on http://localhost:3001
  • worker (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 captions

Then 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.

Run Locally (bare metal, no Docker)

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 terminal

Set ALLOW_DEV_LOGIN=1 and NEXT_PUBLIC_ALLOW_DEV_LOGIN=1 in apps/web/.env for the Dev login button.

Build for Production

bun run build

For full deployment instructions:


Tech Stack

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

Architecture

Directory Structure

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

Key Packages

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.


Usage

Local Mode (No Account Required)

  1. Open the app at http://localhost:3000
  2. Drop a video file (MP4, WebM, MOV, MKV, up to 500 MB)
  3. Add subtitles with the + Add Subtitle button or import an SRT file
  4. Edit text, timing, and style in the right panel
  5. Use the timeline to drag and resize subtitle blocks
  6. Click Render then Browser to burn subtitles client-side
  7. Download the rendered video

Dashboard Mode (With Account)

  1. Sign up or sign in at /login
  2. Upload videos from the dashboard. They are stored in cloud/MinIO storage
  3. Edit subtitles. Changes auto-save every 2 seconds
  4. Render using Server mode for faster processing of long videos
  5. Download rendered videos from the dashboard

Keyboard Shortcuts

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

SRT Workflow

  1. Click Import SRT in the toolbar to load existing subtitles
  2. Edit timing and text visually
  3. Click Export SRT to save the result

API Usage Examples

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.mp4

For the full list of 21 API endpoints, see the API Routes section in ARCHITECTURE.md.


Development Commands

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

Environment Variables

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)

Roadmap

See docs/ROADMAP.md for the full roadmap with phase details.

Completed

  • 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

Planned

  • Web UI reel editor (wizard, preview, publish flow)
  • Multi-language subtitle tracks
  • Batch reel rendering via API
  • Custom font uploads
  • GPU-accelerated server rendering

Premium Modules

ReelStack is fully open source (AGPL-3.0). Premium montage templates and effects are available as optional closed-source modules for commercial use.


Contributing

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.


License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.

Security and Privacy

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)

Support


Acknowledgments

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

About

Programmatic video pipeline — generate reels and social media images from text. Self-hostable, API-first, open source.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages