video-processor/pyproject.toml
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

196 lines
5.4 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "video-processor"
version = "0.3.0"
description = "Standalone video processing pipeline with multiple format encoding"
authors = [{name = "Ryan Malloy", email = "ryan@malloys.us"}]
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"ffmpeg-python>=0.2.0",
"pillow>=11.2.1",
"msprites2 @ git+https://github.com/rsp2k/msprites2.git",
"procrastinate>=2.15.1,<4.0.0", # Support both 2.x and 3.x during migration
"psycopg[pool]>=3.2.9",
"python-dateutil>=2.9.0",
"pydantic>=2.0.0",
"pydantic-settings>=2.0.0",
"exifread>=3.5.1",
]
[project.optional-dependencies]
dev = [
"ruff>=0.1.0",
"mypy>=1.7.0",
"pytest>=7.0.0",
"pytest-cov>=4.0.0",
"pytest-asyncio>=0.21.0",
# Integration testing dependencies
"docker>=6.1.0",
"psycopg2-binary>=2.9.0",
]
# Core 360° video processing
video-360 = [
"py360convert>=0.1.0", # 360° projection conversions
"opencv-python>=4.5.0", # Advanced image processing
"numpy>=1.21.0", # Mathematical operations
"scipy>=1.7.0", # Scientific computing for spherical geometry
]
# Spatial audio processing for 360° videos
spatial-audio = [
"librosa>=0.9.0", # Audio analysis and processing
"soundfile>=0.11.0", # Multi-channel audio I/O
]
# AI-powered video analysis
ai-analysis = [
"opencv-python>=4.5.0", # Advanced computer vision (shared with video-360)
"numpy>=1.21.0", # Mathematical operations (shared with video-360)
"scikit-learn>=1.0.0", # Machine learning utilities
"pillow>=9.0.0", # Image processing utilities
]
# Combined advanced features (360° + AI + spatial audio)
advanced = [
"video-processor[video-360]",
"video-processor[ai-analysis]",
"video-processor[spatial-audio]",
]
# Enhanced metadata extraction for 360° videos
metadata-360 = [
"exifread>=3.0.0", # 360° metadata parsing
]
# Complete 360° video package
video-360-full = [
"video-processor[video-360,spatial-audio,metadata-360]"
]
[tool.hatch.build.targets.wheel]
packages = ["src/video_processor"]
[tool.hatch.build.targets.sdist]
include = [
"/src",
"/tests",
"/README.md",
"/pyproject.toml",
]
[tool.hatch.metadata]
allow-direct-references = true
[tool.ruff]
target-version = "py311"
line-length = 88
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
]
ignore = [
"E501", # line too long (handled by formatter)
]
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["S101"] # Allow assert in tests
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
[tool.pytest.ini_options]
# Test discovery
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
# Async support
asyncio_mode = "auto"
# Plugin configuration
addopts = [
"-v", # Verbose output
"--strict-markers", # Require marker registration
"--tb=short", # Short traceback format
"--disable-warnings", # Disable warnings in output
"--color=yes", # Force color output
"--durations=10", # Show 10 slowest tests
]
# Test markers (registered by plugin but documented here)
markers = [
"unit: Unit tests for individual components",
"integration: Integration tests across components",
"performance: Performance and benchmark tests",
"smoke: Quick smoke tests for basic functionality",
"regression: Regression tests for bug fixes",
"e2e: End-to-end workflow tests",
"video_360: 360° video processing tests",
"ai_analysis: AI-powered video analysis tests",
"streaming: Streaming and adaptive bitrate tests",
"requires_ffmpeg: Tests requiring FFmpeg installation",
"requires_gpu: Tests requiring GPU acceleration",
"slow: Slow-running tests (>5 seconds)",
"memory_intensive: Tests using significant memory",
"cpu_intensive: Tests using significant CPU",
"benchmark: Benchmark tests for performance measurement",
]
# Test filtering
filterwarnings = [
"ignore::DeprecationWarning",
"ignore::PendingDeprecationWarning",
"ignore::UserWarning:requests.*",
]
# Parallel execution (requires pytest-xdist)
# Usage: pytest -n auto (auto-detect CPU count)
# Usage: pytest -n 4 (use 4 workers)
# Minimum test versions
minversion = "7.0"
# Test timeouts (requires pytest-timeout)
timeout = 300 # 5 minutes default timeout
timeout_method = "thread"
[dependency-groups]
dev = [
"docker>=7.1.0",
"mypy>=1.17.1",
"numpy>=2.3.2",
"opencv-python>=4.11.0.86",
"psycopg2-binary>=2.9.10",
"pytest>=8.4.2",
"pytest-asyncio>=0.21.0",
"pytest-cov>=6.2.1",
"pytest-xdist>=3.6.0", # Parallel test execution
"pytest-timeout>=2.3.1", # Test timeout handling
"pytest-html>=4.1.1", # HTML report generation
"pytest-json-report>=1.5.0", # JSON report generation
"psutil>=6.0.0", # System resource monitoring
"requests>=2.32.5",
"ruff>=0.12.12",
"tqdm>=4.67.1",
]