README.md
June 9, 2026 · View on GitHub
A friendly AI powered open-source alternative to Capcut, Canva.
Discord Twitter Website
✨Features
Advanced Multi‑Track EditingEdit across unlimited tracks with precise control, snapping, and effortless layer management. |
Real‑Time PreviewSee every change instantly with low‑latency playback—no waiting, no rendering. |
Fast ExportRender high‑quality videos quickly and export exactly where you need them. |
Vibe AI AssistantDescribe your idea and let Kimu generate edits, timing, and layouts automatically. |
Smart Media LibraryOrganize by type, tags, and sentiment—search and filter your assets in seconds. |
Cloud‑Synced ProjectsKeep timelines and assets in sync across devices so you can pick up right where you left off. |
transitions, offline datastore, OAuth based security, change control
and much more...
💻 Development
🛠️ Local Development
Only postgres runs in Docker. All three services run directly on your machine — Vite handles proxying so no nginx is needed.
# Install dependencies
pnpm i
cd backend && uv sync && cd ..
# 1. Start postgres
docker compose -f docker-compose.dev.yml up -d
# 2. Start FastAPI (terminal 1)
cd backend && uv run uvicorn main:app --reload --port 3000
# 3. Start renderer (terminal 2)
pnpm dlx tsx app/videorender/videorender.ts
# 4. Start frontend (terminal 3)
pnpm dev
Open http://localhost:5173. The Vite dev server proxies requests transparently:
/backend/*→ FastAPI at:3000/renderer/*→ Renderer at:8000/*→ React Router SSR (Vite)
Requirements
- Node.js 20+
- Python 3.12+
- pnpm
- Docker (for postgres only)
🚀 Production
Everything runs in Docker behind nginx. One command:
docker compose up -d
With Custom Domain:
PROD_DOMAIN=yourdomain.com docker compose up -d
nginx routes:
/backend/*→ FastAPI/renderer/*→ Renderer (video rendering)/*→ Frontend (React Router SSR)
Ports:
- HTTP:
80(redirects to HTTPS) - HTTPS:
443
⚙️ Environment Configuration
Copy .env.example to .env and fill in your values:
# Local/Docker Postgres (dev or self-hosted prod):
DATABASE_URL=postgresql://videoeditor:videoeditor@localhost:5432/videoeditor
# — OR — Supabase Session Pooler (cloud):
DATABASE_URL=postgresql://postgres.REF:password@aws-0-REGION.pooler.supabase.com:5432/postgres
DATABASE_SSL=true # required for Supabase; omit for local/Docker Postgres
# BetterAuth
BETTER_AUTH_SECRET= # generate with: openssl rand -hex 32
BETTER_AUTH_URL=https://yourdomain.com # http://localhost:5173 for dev
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# AI Features (optional)
GEMINI_API_KEY=your_gemini_api_key
Environment Variables Explained:
DATABASE_URL: PostgreSQL connection string. Use the local Docker URL for dev/self-hosted prod, or the Supabase Session Pooler URL for cloud.DATABASE_SSL: Set to"true"when connecting to Supabase or any remote DB that requires SSL. Leave unset for local/Docker Postgres.BETTER_AUTH_SECRET: Random secret used to sign sessions — generate withopenssl rand -hex 32.BETTER_AUTH_URL: The public URL of the app. Used by BetterAuth for OAuth callbacks.GOOGLE_CLIENT_ID/SECRET: Google OAuth credentials — register at console.cloud.google.com.GEMINI_API_KEY: Required for AI-powered video editing features.
📃TODO
We have a lot of work! For starters, we plan to integrate all Remotion APIs. I'll add a proper roadmap soon. Join the Discord Server for updates and support.
❤️Contribution
We would love your contributions! ❤️ Check the contribution guide.
📜License
This project is licensed under a dual-license. Refer to LICENSE for details. The Remotion license also applies to the relevant parts of the project.