README.md

June 9, 2026 · View on GitHub


image

A friendly AI powered open-source alternative to Capcut, Canva.
Discord   Twitter   Website

✨Features

Advanced Multi‑Track Editing

Edit across unlimited tracks with precise control, snapping, and effortless layer management.


image

Real‑Time Preview

See every change instantly with low‑latency playback—no waiting, no rendering.


Fast Export

Render high‑quality videos quickly and export exactly where you need them.


Vibe AI Assistant

Describe your idea and let Kimu generate edits, timing, and layouts automatically.


Smart Media Library

Organize by type, tags, and sentiment—search and filter your assets in seconds.


Cloud‑Synced Projects

Keep 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 with openssl 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.