Removes the OpenCLIP-on-ONNX classifier and everything that fed or
consumed it:
- backend: app/services/vision/, app/tasks/vision.py,
app/services/feature_flags.py, app/routers/features.py — all
deleted; admin AI/feature-flag endpoints and the worker-vision
bootstrap call gone. Photo.needs_review and its index dropped.
- frontend: AI Settings tab, useFeaturesQuery hook, FeatureFlag
types, "Needs Review" sidebar entry + filter, needs_review filter
URL param all gone.
- infra: worker-vision compose service + models_data volume deleted;
worker-light command no longer runs bootstrap_models; the db
image switches from pgvector/pgvector:pg16 to postgres:16; backend
Dockerfile drops the dedicated torch RUN layer; requirements.txt
drops torch/torchvision/open-clip-torch/onnxruntime.
Alembic 0019_drop_ai_remnants:
- drops photos.needs_review + ix_photos_needs_review
- DROP EXTENSION IF EXISTS vector (must run before the image swap;
the new postgres:16 doesn't ship pgvector)
New scripts/full_refresh.py: one-shot DB ↔ filesystem reconciliation.
Runs cleanup_data_integrity, scans every active SourceRoot inline
(no celery dependency so the worker can be stopped), hard-prunes
photo + folder rows for files that are gone, removes orphan
/data/thumbs/{user}/{photo}/ directories. New helper
prune_orphan_thumbnails in cleanup.py.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
66 lines
1.8 KiB
Plaintext
66 lines
1.8 KiB
Plaintext
# 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 |