The FFmpeg runtime β run entirely in your browser & then scale to your servers.
- What is FFmpegLab?
- Quick Start
- Architecture
- Deployment Options
- Features
- Environment Variables
- Documentation
- Project Structure
- Open Source Community
- License
FFmpegLab is a complete ecosystem for video processing β from a browserβbased IDE to a scalable, selfβhostable rendering backend.
| Component | Description |
|---|---|
| ffmpeglab/webapp | Browserβbased IDE running FFmpeg via WebAssembly |
| ffmpeglab/server | API server with PostgreSQL, pgmq, and Supabase Storage |
| ffmpeglab/ffmpeglab.com | Documentation, guides, and deployment scripts |
Everything runs on your own infrastructure. Open source. Selfβhosted. Privacyβfirst.
The fastest way to try FFmpegLab is to open the webapp:
π ffmpeglab.com/webapp
No account, no download, no installation. Just open the link and start editing.
To deploy the complete FFmpegLab stack with selfβhosted Supabase:
curl -sSL https://ffmpeglab.com/sh/install.sh | bashThis script will:
- Clone and configure a selfβhosted Supabase instance
- Enable pgmq and create the
rendering_queue - Create storage buckets with RLS policies
- Deploy FFmpegLab Server with Docker Compose
- Generate an API key for authentication
Fork and deploy the webapp for free:
- Fork ffmpeglab/webapp
- Enable GitHub Pages β Settings β Pages β
mainbranch β/(root) - Access your instance at
https://yourusername.github.io/webapp
FFmpegLab uses a modern, privacyβfirst architecture:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FFmpegLab Client (WebAssembly) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Browser IDE ββ
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββ
β β β Visual β β Realβtimeβ β Filter β β Linting β ββ
β β β Editor β β Preview β β Graph β β & Debug β ββ
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTPS / WebSocket
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FFmpegLab Server (SelfβHosted) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β REST API (Express) ββ
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββ
β β β Renders β β Projects β β Users β β API Keys β ββ
β β β API β β API β β API β β API β ββ
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Supabase Backend ββ
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββ
β β βPostgreSQLβ β pgmq β β Storage β β Auth β ββ
β β β(Render, β β (Job β β (S3β β β(JWT, RLS)β ββ
β β β Projects)β β Queue) β βcompatible)β β β ββ
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Scalable Runners β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Render β β File β β Logs β β DNN β β
β β Runner β β Runner β β Runner β β Runner β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Step | Command |
|---|---|
| 1. Fork | https://github.com/ffmpeglab/webapp |
| 2. Enable Pages | Settings β Pages β main branch β /(root) |
| 3. Access | https://yourusername.github.io/webapp |
services:
ffmpeglab:
image: ffmpeglab/ide
ports: ["8080:8080"]
environment:
- FFMPEGLAB_HOST=http://localhost:8080/webapp/
- FFMPEGLAB_API=http://localhost:3000
- EVOLU_DB_HOST=http://localhost:4000
- EVOLU_DB_NAME=ffmpeglab
- PUBLIC_HOST=https://localhost:8080/
- PEXELS_API_HOST=https://pexels.starpy.me/
- SUPABASE_HOST=https://office.starpy.me
- SUPABASE_ANON_KEY=123456789qwerty
api:
restart: unless-stopped
image: ffmpeglab/server
ports:
- "3000:3000"
environment:
- DB_HOST=${DB_HOST}
- DB_USER=${DB_USER}
- DB_PORT=${DB_PORT}
- DB_PASSWORD=${DB_PASSWORD}
- DB_NAME=${DB_NAME}
- DB_MIGRATION_ENABLED=true
- S3_BUCKET_ID=${S3_BUCKET_ID}
- S3_ACCESS_KEY=${S3_ACCESS_KEY}
- S3_SECRET_KEY=${S3_SECRET_KEY}
- S3_REGION=${S3_REGION}
- S3_ENDPOINT=${S3_ENDPOINT}
- IS_FILE_RUNNER=true
- IS_RENDER_RUNNER=true
- IS_LOGS_RUNNER=true
evolu:
image: evoluhq/evolu:pr-5
ports: ["4000:4000"]- Live preview β see edits in real time
- 30+ video operations β crop, trim, scale, filter, transition
- Visual filtergraph editor β build complex pipelines without the command line
- Realβtime linting β catch syntax errors before they fail
- PostgreSQL + pgmq β durable job queuing with transactional guarantees
- S3βcompatible storage β media assets and rendered output
- Three runner types β render, file, and logs β each with specific responsibilities
- Hardware acceleration β NVENC, QSV, VAAPI support (5β10Γ faster)
- Superβresolution β upscale videos 2Γ, 3Γ, or 4Γ
- Object detection β detect faces, objects, and scenes
- Speechβtoβtext β Whisper AI subtitle generation
- Video labeling β automatic metadata generation
- Live cursor β see where teammates are working
- Comments β leave feedback on specific frames
- Version history β every render is reproducible and scriptable
- Selfβhosted β complete control over your data
- 0 bytes uploaded β all processing happens in your browser
- Selfβhostable β own your entire pipeline
- RLS policies β perβuser data isolation
- Open source β audit the code yourself
- Environment variables β parameterize renders
- Scalable runners β distribute encoding across workers
- YAML to SQL transpiler β define pipelines declaratively
- TypeScript SDK β full API coverage
- SQL pipeline templates β readyβtoβuse Supabase migrations
| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | β Yes |
SUPABASE_URL |
Supabase project URL | β Yes |
SUPABASE_ANON_KEY |
Supabase anonymous key | β Yes |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key | |
QUEUE_NAME |
pgmq queue name for rendering jobs | |
S3_BUCKET_ID |
Storage bucket name | |
S3_ACCESS_KEY |
S3 access key | |
S3_SECRET_KEY |
S3 secret key |
| Guide | Description |
|---|---|
| AgentβFirst Setup | Complete setup guide with selfβhosted Supabase |
| Debugging & Troubleshooting | Master -loglevel and filtergraph errors |
| Dynamic Runtime Commands | sendcmd and zmq for realβtime changes |
| Hardware Acceleration | NVENC, QSV, VAAPI deep dive |
| Video Denoising | Remove noise with hqdn3d, nlmeans, bm3d |
| Lens Correction | Correct GoPro fisheye and barrel distortion |
| Slideshow Creation | Ken Burns, transitions, and music |
| YAML to SQL Transpiler | Define pipelines declaratively |
| Pipeline | Description |
|---|---|
| Video Onboarding | Thumbnails, resized videos, realβtime notifications |
| Audio Processing | Loudness normalization, noise reduction, waveforms |
| AI Upscaling | DNNβbased superβresolution (2Γ, 3Γ, 4Γ) |
| Subtitle Generation | Whisper AI transcription and burnβin |
| Video Labeling | Object detection and classification |
| Guide | Description |
|---|---|
| Figma for Video | Collaborative video editing with templates |
| Environment Variables & Runners | Scale your rendering pipeline |
| FFmpeg GUI Libraries | Comparison of 12+ frontends |
ffmpeglab/
βββ .github/
β βββ README.md # This file
βββ webapp/ # Browser IDE
β βββ README.md
βββ server/ # API backend
β βββ src/
β β βββ models/ # TypeORM entities
β βββ sdk/ # SDK source
β β βββ ts/ # TypeScript SDK
βββ ffmpeglab.com/ # Documentation
β βββ articles/ # Guides and tutorials
β βββ sh/ # Deployment scripts
FFmpegLab is open source and communityβdriven. We welcome contributions of all kinds:
- π Bug reports β Open an issue
- π‘ Feature requests β Start a discussion
- π Documentation β Improve our guides
- π§ Code contributions β Submit a PR
- Fork the repository
- Create a feature branch β
git checkout -b feature/amazing-feature - Make your changes β add your improvements
- Submit a pull request β describe what you changed and why
- Discord: discord.gg/ffmpeglab
- Twitter: @ffmpeglab
- GitHub Discussions: github.com/ffmpeglab/webapp/discussions
FFmpegLab is open source and available under the MIT License.
- Website: ffmpeglab.com
- Documentation: ffmpeglab.com/articles
- GitHub: github.com/ffmpeglab
- Web App: ffmpeglab.com/webapp
- Selfβhosting Guide: ffmpeglab.com/articles/agent-first-setup
Run the whole editing pipeline on your own infrastructure. Open source and offline-first. Free in your browser to start.