fastapi>=0.110.0 uvicorn[standard]>=0.29.0 websockets>=12.0 pyguitarpro>=0.10.1 cloudscraper>=1.2.71 curl_cffi>=0.7.0 midiutil>=1.2.1 mido>=1.3.0 Pillow>=10.0.0 PyYAML>=6.0 python-multipart>=0.0.9 structlog>=24.1.0 asgi-correlation-id>=4.3.3 psutil>=5.9.0 py-cpuinfo>=9.0.0 yt-dlp>=2025.1.1 # Used by lib/sloppak_convert.py:_run_demucs_remote and # lib/lyrics_transcribe.py:transcribe_vocals_remote to talk to optional # remote Demucs / WhisperX servers. Currently transitively pulled by # cloudscraper, but declaring it explicitly avoids breakage if that # transitive dep ever changes upstream. requests>=2.31 # Hard dependency of anyio (FastAPI/Starlette's async layer): anyio imports it # lazily, so `import anyio` succeeds without it but the server crashes with # `ModuleNotFoundError: sniffio` the moment it enters its async loop. Normally # transitive via fastapi -> starlette -> anyio, but the desktop bundle's Python # install doesn't reliably include it (observed missing in clean Windows AND # Linux bundles, causing "backend failed before startup"). Declare it # explicitly, same as requests above. sniffio>=1.3.1