video-processor/docker-compose.yml
Ryan Malloy 840bd34f29 🎬 Video Processor v0.4.0 - Complete Multimedia Processing Platform
Professional video processing pipeline with AI analysis, 360° processing,
and adaptive streaming capabilities.

 Core Features:
• AI-powered content analysis with scene detection and quality assessment
• Next-generation codec support (AV1, HEVC, HDR10)
• Adaptive streaming (HLS/DASH) with smart bitrate ladders
• Complete 360° video processing with multiple projection support
• Spatial audio processing (Ambisonic, binaural, object-based)
• Viewport-adaptive streaming with up to 75% bandwidth savings
• Professional testing framework with video-themed HTML dashboards

🏗️ Architecture:
• Modern Python 3.11+ with full type hints
• Pydantic-based configuration with validation
• Async processing with Procrastinate task queue
• Comprehensive test coverage with 11 detailed examples
• Professional documentation structure

🚀 Production Ready:
• MIT License for open source use
• PyPI-ready package metadata
• Docker support for scalable deployment
• Quality assurance with ruff, mypy, and pytest
• Comprehensive example library

From simple encoding to immersive experiences - complete multimedia
processing platform for modern applications.
2025-09-22 01:18:49 -06:00

140 lines
3.8 KiB
YAML

# Docker Compose setup for Video Processor with Procrastinate
# Complete development and testing environment
services:
# PostgreSQL database for Procrastinate
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: video_processor
POSTGRES_USER: video_user
POSTGRES_PASSWORD: video_password
POSTGRES_HOST_AUTH_METHOD: trust
volumes:
- postgres_data:/var/lib/postgresql/data
- ./docker/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U video_user -d video_processor"]
interval: 10s
timeout: 5s
retries: 5
networks:
- video_net
# Video Processor API service
app:
build:
context: .
dockerfile: Dockerfile
target: development
environment:
- DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- PYTHONPATH=/app
volumes:
- .:/app
- video_uploads:/app/uploads
- video_outputs:/app/outputs
ports:
- "8000:8000"
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "examples/docker_demo.py"]
# Procrastinate worker for background processing
worker:
build:
context: .
dockerfile: Dockerfile
target: worker
environment:
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- WORKER_CONCURRENCY=4
- WORKER_TIMEOUT=300
volumes:
- video_uploads:/app/uploads
- video_outputs:/app/outputs
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "-m", "video_processor.tasks.worker_compatibility", "worker"]
# Migration service (runs once to setup DB)
migrate:
build:
context: .
dockerfile: Dockerfile
target: migration
environment:
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "-c", "
import asyncio;
from video_processor.tasks.migration import migrate_database;
asyncio.run(migrate_database('postgresql://video_user:video_password@postgres:5432/video_processor'))
"]
# Test runner service
test:
build:
context: .
dockerfile: Dockerfile
target: development
environment:
- DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor_test
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor_test
volumes:
- .:/app
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["uv", "run", "pytest", "tests/", "-v", "--cov=src/", "--cov-report=html", "--cov-report=term"]
# Demo web interface (optional)
demo:
build:
context: .
dockerfile: Dockerfile
target: development
environment:
- DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
ports:
- "8080:8080"
volumes:
- .:/app
- video_uploads:/app/uploads
- video_outputs:/app/outputs
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "examples/web_demo.py"]
volumes:
postgres_data:
driver: local
video_uploads:
driver: local
video_outputs:
driver: local
networks:
video_net:
driver: bridge