# Core dependencies
fastapi==0.109.0
uvicorn[standard]==0.27.0
python-multipart==0.0.6

# Database
sqlalchemy[asyncio]==2.0.25
aiosqlite==0.19.0           # SQLite escape hatch (docker-compose.sqlite.yml override)
asyncpg==0.29.0             # async Postgres driver (default)
psycopg2-binary==2.9.9      # sync Postgres driver, used by Alembic CLI
alembic==1.13.1

# Redis and Celery
redis==5.0.1
celery==5.3.6
flower==2.0.1

# Image processing
# pyvips==2.2.1  # Optional - having compatibility issues, using Pillow as fallback
rawpy==0.26.1               # RAW decoder (CR2/NEF/ARW/DNG/…). cp312 wheels
                            # ship with libraw bundled; the older 0.19 pin
                            # had numpy 2.x incompatibilities — 0.26 is fine
                            # with our numpy 1.26. iPhone ProRAW-style DNGs
                            # that aren't real RAW still fail here; thumbs.py
                            # falls back to opening them as JPEG in that case.
pillow==10.2.0
pillow-heif==0.15.0
imagehash==4.3.1  # perceptual hash for duplicate detection
imageio==2.33.1
imageio-ffmpeg==0.4.9

# Video processing
ffmpeg-python==0.2.0

# Metadata extraction
pyexiftool==0.5.6

# File watching
watchfiles==0.21.0

# Transitive dep of rawpy 0.26.1, which requires numpy<2 (see comment above).
numpy>=1.26.0,<2.0

# Utilities
pyyaml==6.0.1
pydantic==2.5.3
pydantic-settings==2.1.0
python-dotenv==1.0.0
httpx[http2]==0.26.0
aiofiles==23.2.1

# Security and authentication
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
bcrypt==4.0.1
# OIDC single sign-on (Authentik, etc.). Authlib drives the Auth Code +
# PKCE flow; itsdangerous signs the short-lived Starlette session cookie
# that holds the PKCE state during the IdP round-trip.
authlib==1.3.1
itsdangerous==2.1.2

# Development
pytest==7.4.4
pytest-asyncio==0.23.3
black==23.12.1
ruff==0.1.11