Skip to content

openinary/openinary

Repository files navigation

Openinary - self-hosted media processing platform

build Docker pulls license

Openinary is an open-source, self-hosted media processing platform that includes:

  • on-the-fly transformations for images and videos via URL
  • built-in S3-compatible storage with automatic caching
  • smart optimization with WebP, AVIF, and modern codecs
  • simple REST API with URL-based transformations
  • convenient admin dashboard for asset management

For documentation and more examples, please visit https://docs.openinary.dev.

Warning

Please keep in mind that Openinary is still under active development and therefore full backward compatibility is not guaranteed before reaching v1.0.0.

Quick Start

Deploy with Railway  Deploy with Coolify  Deploy with Dokploy

Installation

Make sure to have Docker 20.x+ installed and running.

docker run --platform linux/amd64 -d -p 3000:3000 \
  -v openinary-cache:/app/apps/api/cache \
  -v openinary-public:/app/apps/api/public \
  -v openinary-db:/app/data \
  openinary/openinary:latest

Initial Setup

  1. Open http://localhost:3000
  2. Visit /setup to create admin account
  3. Click on your profile in the bottom left navigation, then go to 'API Keys' to generate your first API key

Usage Examples

Images

# Simple resize
GET /t/w_800,h_600/image.jpg

# Smart cropping with face detection
GET /t/w_400,h_400,c_fill,g_face/portrait.jpg

# Format conversion + optimization
GET /t/w_1200,h_800,f_avif,q_80/photo.jpg

# Aspect ratio with automatic detection
GET /t/ar_16:9,g_auto,w_1920,h_1080/banner.jpg

Videos

# Thumbnail with resize
GET /t/w_800,h_450,so_5,f_avif/video.mp4

# Web optimized compression
GET /t/w_1280,h_720,q_75/video.mp4

# Extract a clip (from 10s to 30s)
GET /t/so_10,eo_30/interview.mp4

# Lightweight preview (low quality, small size)
GET /t/w_480,h_270,q_50/demo.mp4

# Format conversion with resize
GET /t/w_1920,h_1080,f_mp4/video.mov

S3-Compatible Configuration

Openinary supports any S3-compatible storage. Configure via environment variables in apps/api/.env:

AWS S3

STORAGE_REGION=us-east-1
STORAGE_ACCESS_KEY_ID=your_aws_access_key
STORAGE_SECRET_ACCESS_KEY=your_aws_secret_key
STORAGE_BUCKET_NAME=your-bucket-name
STORAGE_PUBLIC_URL=https://your-bucket-name.s3.us-east-1.amazonaws.com

Cloudflare R2

STORAGE_REGION=auto
STORAGE_ACCESS_KEY_ID=your_r2_access_key
STORAGE_SECRET_ACCESS_KEY=your_r2_secret_key
STORAGE_BUCKET_NAME=your-bucket-name
STORAGE_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com
STORAGE_PUBLIC_URL=https://your-custom-domain.com

Other S3-Compatible Providers

STORAGE_REGION=us-east-1
STORAGE_ACCESS_KEY_ID=your_access_key
STORAGE_SECRET_ACCESS_KEY=your_secret_key
STORAGE_BUCKET_NAME=your-bucket-name
STORAGE_ENDPOINT=https://your-s3-compatible-endpoint.com
STORAGE_PUBLIC_URL=https://your-cdn-domain.com

Resources

Full Documentation | Issues | Contact

License

This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.