flask==3.1.3 flask-socketio==5.6.1 flask-limiter==4.1.1 Flask-SQLAlchemy==3.1.1 Flask-Migrate==4.1.0 SQLAlchemy==2.0.46 alembic==1.18.4 anthropic==0.125.0 apispec==6.10.1 apispec-webframeworks==1.2.0 flask-swagger-ui==5.34.1 gunicorn==23.0.0 pysubs2==1.7.3 requests==2.33.0 PlexAPI==4.18.3 pydantic==2.10.6 pydantic-settings==2.7.1 python-dotenv==1.2.2 simple-websocket==1.1.0 rarfile==4.2 # Needed by the subcentral catalog provider (providers/hub/bundles), Apache-2.0, no deps. ua-generator==2.1.6 deepl==1.33.0 openai==3.46.0 google-cloud-translate==3.28.0 apprise==1.13.1 prometheus-client==0.25.0 psutil==6.1.0 APScheduler==3.11.3 beautifulsoup4==4.15.0 bcrypt==4.2.1 cryptography==50.0.2 click==8.5.0 lxml==6.1.3 # defusedxml wraps stdlib + lxml parsers to disable DOCTYPE / entity / DTD # processing - used by every XML caller that consumes 3rd-party or on-disk # data (anidb_mapper, anidb_sync, providers/podnapisi, standalone/nfo_parser). # See PENTEST_FINDINGS.md R4-02. defusedxml==0.7.1 watchdog==7.1.0 guessit==4.4.0 psycopg2-binary==2.9.10 # Optional: PostgreSQL support redis==7.1.0 # Optional: Redis caching/queue rq==2.6.1 # Optional: Redis-based job queue # Optional — video sync engines (graceful degradation if not installed) # setuptools used to be pinned <81 so webrtcvad (via ffsubsync) could import # pkg_resources. webrtcvad-wheels 2.0.14 reads its version through # importlib.metadata on Python 3.8+, so that shim is no longer needed and the # pin only kept setuptools on releases with known advisories. setuptools==84.2.1 ffsubsync==0.5.1 # alass is a standalone binary — see https://github.com/kaegi/alass/releases # Subliminal transitive deps (vendored Subliminal 2.2.0 lives in # backend/providers/_vendor/ but still needs these from pip) chardet==7.7.0 # subtitle_encoding: detect_all() ranking is tested against 7.x dogpile.cache==1.5.0 # enzyme backs subliminal's "metadata" refiner. Sublarr only calls # list_subtitles() and never refine(), but stevedore eagerly imports every # registered entry point, so a missing enzyme logs an ERROR on every start. enzyme==0.5.2 pysrt==1.1.2 stevedore==5.9.1 # Plan B8 — optional scene detection for the WaveformEditor's scene markers. # BSD-3-Clause; lazy-imported in services/scene_detector.py so the dep is # strictly optional at runtime (graceful degradation if not installed). scenedetect==0.7.2 # Subtitle health analysis — content-based language detection lingua-language-detector==2.2.0 # C-backed fuzzy string matching for Tier-4 AniDB title-dump resolution # (replaces a pure-Python difflib.SequenceMatcher loop over ~100k entries) rapidfuzz==3.14.6 # OCR for image-based subtitle streams (PGS/VobSub) — services/ocr_extractor.py. # The Dockerfile already installs tesseract-ocr plus the deu/eng language packs; # without these bindings the binary sits in the image unreachable and every # PGS extraction fails with "ffmpeg extraction failed". pytesseract==0.3.13 Pillow==13.0.0 # Spell checking — services/spell_checker.py. Same shape as above: hunspell and # both dictionaries ship in the image already, only the binding was missing. pyenchant==3.3.0