FFmpegLab Server is the API backend for the FFmpegLab ecosystem. It handles render job management, project configuration, and media processing orchestration.
# Clone and configure
git clone https://github.com/ffmpeglab/server.git
cd server
cp .env.example .env
# Edit .env with your database credentials
nano .env
# Start all services
docker compose up -dThe server will be available at http://localhost:3000.
| Service | Description | Port |
|---|---|---|
api |
Main API server | 3000 |
render-runner |
Executes FFmpeg rendering jobs | - |
file-runner |
Handles file operations with S3 | - |
logs-runner |
Processes logs | - |
FFmpegLab Server is built on Supabase — the open-source Firebase alternative — as a full-cycle provider for all backend services:
| Service | Provider | Description |
|---|---|---|
| PostgreSQL | Supabase | Primary database with Row Level Security (RLS) |
| pgmq | Supabase | Job queue for asynchronous render processing |
| S3-compatible Storage | Supabase | File storage for media assets and rendered output |
| REST API | Supabase | Auto-generated REST API with JWT authentication |
| API Keys | Supabase | User-managed API keys with role-based access |
| Logs | Supabase | Centralized logging with retention policies |
The server uses TypeORM with models defined in src/models/:
| Model | Description |
|---|---|
Render |
Render job tracking and status |
ApiKey |
API key management with permissions |
LogPiece |
System and user activity logs |
# Database
DB_HOST=postgres
DB_USER=postgres
DB_PORT=5432
DB_PASSWORD=your_password
DB_NAME=ffmpeglab
# Queue Database (can be the same as DB_HOST)
QUEUE_DB_HOST=postgres
QUEUE_DB_USER=postgres
QUEUE_DB_PORT=5432
QUEUE_DB_PASSWORD=your_password
QUEUE_DB_NAME=ffmpeglab_queue
# S3 Storage (required for file-runner)
S3_ACCESS_KEY=your_access_key
S3_SECRET_KEY=your_secret_key
S3_REGION=us-east-1
S3_ENDPOINT=https://s3.amazonaws.com| Variable | Description | Required |
|---|---|---|
DB_HOST |
PostgreSQL host | Yes |
DB_USER |
PostgreSQL user | Yes |
DB_PASSWORD |
PostgreSQL password | Yes |
DB_NAME |
PostgreSQL database name | Yes |
QUEUE_DB_HOST |
Queue PostgreSQL host | Yes |
QUEUE_DB_NAME |
Queue PostgreSQL database name | Yes |
S3_ACCESS_KEY |
S3 access key | For file-runner |
S3_SECRET_KEY |
S3 secret key | For file-runner |
DB_MIGRATION_ENABLED |
Auto-run migrations | No (default: false) |
IS_RENDER_RUNNER |
Enable render runner mode | For render-runner |
IS_FILE_RUNNER |
Enable file runner mode | For file-runner |
IS_LOGS_RUNNER |
Enable logs runner mode | For logs-runner |
Full API documentation: api.ffmpeglab.com/api
All schemas are defined in the OpenAPI specification. Key models from src/models/:
| Schema | Model | Description | Link |
|---|---|---|---|
EditorProjectConfiguration |
Project |
Full editor project configuration | View |
EditorProject |
Project |
Project metadata | View |
RenderData |
Render |
Render job data | View |
RenderDto |
Render |
Render data transfer object | View |
RunDto |
Render |
Run execution request | View |
RenderResponse |
Render |
API response for render operations | View |
EditorLayer |
Project |
Individual editor layer | View |
EncoderProject |
Project |
Encoder project configuration | View |
Media |
Project |
Media file metadata | View |
| Method | Endpoint | Description | Model |
|---|---|---|---|
GET |
/ |
Health check | - |
GET |
/renders |
List all renders | Render[] |
POST |
/renders |
Create a render job | Render |
GET |
/renders/{id} |
Get render by ID | Render |
PUT |
/renders/run |
Trigger render execution | RunDto |
npm install
npm run build
npm startMIT
- Website: ffmpeglab.com
- API Docs: api.ffmpeglab.com/api
- GitHub: github.com/ffmpeglab/server
Open source and self‑hostable. Powered by Supabase.