Media transcoding platform with three execution modes: local (Celery + MinIO), AWS (Step Functions + Lambda + S3), and GCP (Cloud Run Jobs + GCS). Storage is S3-compatible across all environments.
MPR separates media into input and output paths, each independently configurable. File paths are stored relative to their respective root to ensure portability between local development and cloud deployments (AWS S3, etc.).
MEDIA_IN - Source media files to process
MEDIA_OUT - Transcoded/trimmed output files
Why Relative Paths?
MEDIA_IN=/app/media/in
MEDIA_OUT=/app/media/out
/app/media/
├── in/ # Source files
│ ├── video1.mp4
│ └── subfolder/video3.mp4
└── out/ # Transcoded output
└── video1_h264.mp4
MEDIA_IN=s3://source-bucket/media/
MEDIA_OUT=s3://output-bucket/transcoded/
MEDIA_BASE_URL=https://source-bucket.s3.amazonaws.com/media/
Database paths remain unchanged (already relative). Just upload files to S3 and update environment variables.
All client interactions go through GraphQL at
/graphql.
scanMediaFolder - Scan S3 bucket for media
files
createJob - Create transcode/trim jobcancelJob / retryJob - Job lifecycle management
updateAsset / deleteAsset - Asset management
Supported File Types:
Video: mp4, mkv, avi, mov, webm, flv, wmv, m4v
Audio: mp3, wav, flac, aac, ogg, m4a
# Add to /etc/hosts
127.0.0.1 mpr.local.ar
# URLs
http://mpr.local.ar/admin - Django Admin
http://mpr.local.ar/graphql - GraphiQL IDE
http://mpr.local.ar/ - Timeline UI