Skip to content
ffmpeglabPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 

Repository files navigation

🎬 FFmpegLab

The FFmpeg runtime β€” run entirely in your browser & then scale to your servers.

License: MIT GitHub Stars


πŸ“– Table of Contents


What is FFmpegLab?

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.


Quick Start

🌐 Try FFmpegLab in Your Browser

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.

🏠 One‑Line Install (Self‑Hosted Supabase)

To deploy the complete FFmpegLab stack with self‑hosted Supabase:

curl -sSL https://ffmpeglab.com/sh/install.sh | bash

This script will:

  1. Clone and configure a self‑hosted Supabase instance
  2. Enable pgmq and create the rendering_queue
  3. Create storage buckets with RLS policies
  4. Deploy FFmpegLab Server with Docker Compose
  5. Generate an API key for authentication

πŸ“¦ Deploy with GitHub Pages

Fork and deploy the webapp for free:

  1. Fork ffmpeglab/webapp
  2. Enable GitHub Pages β€” Settings β†’ Pages β†’ main branch β†’ /(root)
  3. Access your instance at https://yourusername.github.io/webapp

Architecture

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   β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Deployment Options

βœ… GitHub Pages (Free, Zero‑Server)

Step Command
1. Fork https://github.com/ffmpeglab/webapp
2. Enable Pages Settings β†’ Pages β†’ main branch β†’ /(root)
3. Access https://yourusername.github.io/webapp

βœ… Docker Compose (Minimal Server+GUI)

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"]

Features

🎨 Visual Editor

  • 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

πŸš€ Scalable Backend

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

πŸ€– AI & DNN

  • 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

πŸ‘₯ Collaboration

  • 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

πŸ”’ Privacy & Security

  • 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

🧩 Developer Experience

  • 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

Environment Variables

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 ⚠️ For server/runner
QUEUE_NAME pgmq queue name for rendering jobs ⚠️ For runner
S3_BUCKET_ID Storage bucket name ⚠️ For file-runner
S3_ACCESS_KEY S3 access key ⚠️ For file-runner
S3_SECRET_KEY S3 secret key ⚠️ For file-runner

Documentation

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

SQL Pipeline Templates

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

Guides for Enterprise & Teams

Guide Description
Figma for Video Collaborative video editing with templates
Environment Variables & Runners Scale your rendering pipeline
FFmpeg GUI Libraries Comparison of 12+ frontends

Project Structure

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

Open Source Community

FFmpegLab is open source and community‑driven. We welcome contributions of all kinds:

How to Contribute

  1. Fork the repository
  2. Create a feature branch β€” git checkout -b feature/amazing-feature
  3. Make your changes β€” add your improvements
  4. Submit a pull request β€” describe what you changed and why

Join the Community


License

FFmpegLab is open source and available under the MIT License.


Links


Run the whole editing pipeline on your own infrastructure. Open source and offline-first. Free in your browser to start.

Star on GitHub

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors