This is a major modernization release focused on rewriting the codebase with modern async patterns and comprehensive type safety.
⚠️ Breaking Change: emp Image Uploader and WebDAV Seedbox Support Removed
Images hosted on jerking.empornium.ph can no longer be loaded from other sites, so the emp image uploader has been removed. Please switch to an alternative image host. WebDAV support was deprecated several versions ago and has now been officially removed — use rclone to connect to your WebDAV server instead.
🔄 Modern Async Architecture
The entire codebase has been rewritten to use fully asynchronous I/O patterns:
- All import-time asyncio loop usage has been replaced with proper
async/awaitpatterns - CLI migrated to
asyncclickfor consistent async entry points - File I/O migrated to
anyio.open_fileandanyio.Path - All subprocess calls migrated to
anyiowith proper async handling - HTTP client unified to
aiohttp(replacing httpx and synchronous requests) - Rate limiting migrated from
ratelimittoaiolimiter
🎵 Audio Processing Improvements
- ffmpeg is no longer required as an external dependency. All audio processing (log analysis, MQA detection, transcoding) has been migrated to
PyAV, which is bundled as a Python package. - MQA detection rewritten with
PyAVandNumPy, removing the custom FLAC decoder - Audio log analysis now uses
PyAVinstead of ffmpeg subprocess calls - Transcoding pipeline rewritten with
anyiofor proper async execution - Cover image validation migrated from
filetypedependency toPillow
✨ New Features & Improvements
- Added smoked-salmon upload footer to release descriptions
- Use bit-depth-specific icons in torrent descriptions — 16-bit lossless and 24-bit releases now use distinct markers
- Add alpha Docker image build workflow — every commit is now automatically pushed as an alpha image
- Network request exceptions during tracker uploads can now be retried
- Requests list now filtered to Music requests only
- Add Discogs collection hint in metadata search results — see if a release is in your collection before uploading
- Extend
yes_allto auto-confirm folder rename prompt and downconversion
🐛 Bug Fixes
All reported bugs since 0.9.7.4 have been addressed. Due to the large-scale rewrite, some features may still behave unexpectedly — please report any crashes or issues you encounter.
- Fix upload failure when using cookie-only authentication — uploading to an existing group no longer prompts
Please enter at least one main artist (200) - Fix image upload retry mechanism not working — image hosting uploads now retry on exception
- Fix
asyncio.run(asyncio.gather())crash on Python 3.13+ - Fix import-time asyncio loop usage for Python 3.14 compatibility
- Fix dupe checker for trackers missing
remasteredfield — now usesremasterRecordLabel/catalogueNumber - Fix crash when attempting to embed cover art into non-FLAC files
- Fix skipping seedbox upload when exiting after uploading to another tracker
- Fix FLAC integrity check always reporting success on newer versions of flac
- Fix crash when incomplete files are detected during upload
- Fix MQA detection result being silently ignored
- Fix various typos, uninitialized variables, and incorrect calls caused by lack of type annotations in the old codebase
🔒 Type Safety Improvements
- Full
basedpyrighttype checking integrated into CI - Removed all
# type: ignorecomments — all type issues resolved - Version file migrated from
version.pyto TOML format
🖼️ Image Hosting
- Removed emp image uploader (service no longer works)
- Added imgbox and imgbb as new image hosting options
What's Changed
- Add a hint to the metadata results if a release is saved in the users discogs collection by @StackOverBuffer in #188
- Bump pyperclip from 1.10.0 to 1.11.0 by @dependabot[bot] in #184
- Bump beautifulsoup4 from 4.13.5 to 4.14.2 by @dependabot[bot] in #190
- Bump ruff from 0.13.1 to 0.13.3 by @dependabot[bot] in #191
- Fix broken deluge URL parser by @KarlKode in #202
- Bump rich from 14.1.0 to 14.2.0 by @dependabot[bot] in #193
- Bump platformdirs from 4.4.0 to 4.5.0 by @dependabot[bot] in #195
- Bump aiohttp from 3.12.15 to 3.13.1 by @dependabot[bot] in #199
- Bump setuptools-scm from 9.2.0 to 9.2.2 by @dependabot[bot] in #200
- Bump ruff from 0.13.3 to 0.14.1 by @dependabot[bot] in #201
- Fix ID extraction for OPS uploads. by @yafbot in #208
- Bump pillow from 11.3.0 to 12.0.0 by @dependabot[bot] in #205
- Bump aiohttp from 3.13.1 to 3.13.2 by @dependabot[bot] in #209
- Bump ruff from 0.14.1 to 0.14.4 by @dependabot[bot] in #213
- add imgbb.com uploader by @KarlKode in #203
- Hardcore genre fix added by @minicoz in #214
- Update README with new features by @KyokoMiki in #217
- adding imgbox as img hoster by @minicoz in #218
- Bump qbittorrent-api from 2025.7.0 to 2025.11.1 by @dependabot[bot] in #222
- Bump ruff from 0.14.4 to 0.14.6 by @dependabot[bot] in #223
- Bump click from 8.3.0 to 8.3.1 by @dependabot[bot] in #224
- Bump ruff from 0.14.6 to 0.14.7 by @dependabot[bot] in #226
- Bump beautifulsoup4 from 4.14.2 to 4.14.3 by @dependabot[bot] in #227
- Bump msgspec from 0.19.0 to 0.20.0 by @dependabot[bot] in #228
- Bump platformdirs from 4.5.0 to 4.5.1 by @dependabot[bot] in #232
- Bump ruff from 0.14.7 to 0.14.8 by @dependabot[bot] in #233
- Bump ruff from 0.14.8 to 0.14.10 by @dependabot[bot] in #239
- Only keep Music requests by @Moreasan in #250
- Bump aiohttp from 3.13.2 to 3.13.3 by @dependabot[bot] in #241
- Bump pillow from 12.0.0 to 12.1.0 by @dependabot[bot] in #243
- Bump torf from 4.3.0 to 4.3.1 by @dependabot[bot] in #247
- Bump send2trash from 1.8.3 to 2.1.0 by @dependabot[bot] in #248
- Bump ruff from 0.14.10 to 0.14.13 by @dependabot[bot] in #249
- Fix import-time asyncio loop usage for Python 3.14 compatibility by @nironics in #251
- Bump wheel from 0.45.1 to 0.46.3 by @dependabot[bot] in #253
- Bump rich from 14.2.0 to 14.3.2 by @dependabot[bot] in #254
- Bump tqdm from 4.67.1 to 4.67.3 by @dependabot[bot] in #255
- Bump ruff from 0.14.13 to 0.15.0 by @dependabot[bot] in #256
- Bump urllib3 from 2.4.0 to 2.6.3 in the uv group across 1 directory by @dependabot[bot] in #258
- Bump pillow from 12.1.0 to 12.1.1 in the uv group across 1 directory by @dependabot[bot] in #260
- Fix asyncio bugs for Python 3.13+ compatibility by @0rkag in #261
- Modernize codebase with type safety improvements and async pattern upgrades by @KyokoMiki in #262
- Fix dupe checker crash on trackers missing
remastered+ use remaster fields for label/catalogue by @kisiel92 in #267 - Add pyright type checking and fix version management in CI by @KyokoMiki in #269
- Bump docker/metadata-action from 4 to 5 by @dependabot[bot] in #270
- Bump docker/login-action from 2 to 3 by @dependabot[bot] in #271
- Bump docker/setup-buildx-action from 2 to 3 by @dependabot[bot] in #272
- Bump docker/build-push-action from 4 to 6 by @dependabot[bot] in #273
- Bump docker/setup-qemu-action from 2 to 3 by @dependabot[bot] in #274
- Upgrade pycambia to 0.2.0 and adapt to new API by @KyokoMiki in #275
- Fix figles typo throughout codebase by @KyokoMiki in #276
- Bump ruff from 0.15.1 to 0.15.2 by @dependabot[bot] in #277
- Bump actions/checkout from 3 to 6 by @dependabot[bot] in #278
- Replace subprocess calls with async and reduce external CLI dependencies by @KyokoMiki in #281
- Bump ruff from 0.15.2 to 0.15.4 by @dependabot[bot] in #283
- Fix bugs and add smoked-salmon upload footer to descriptions by @KyokoMiki in #284
- Migrate version file to TOML format by @KyokoMiki in #285
- Fix inability to retry after image upload exceptions by @KyokoMiki in #286
- Fix upload failure with cookie-only auth and other improvements by @KyokoMiki in #287
- Add alpha image build workflow and upgrade to Python 3.13 by @KyokoMiki in #288
- Fix release notification and changelog rendering by @KyokoMiki in #289
New Contributors
- @StackOverBuffer made their first contribution in #188
- @KarlKode made their first contribution in #202
- @yafbot made their first contribution in #208
- @minicoz made their first contribution in #214
- @Moreasan made their first contribution in #250
- @nironics made their first contribution in #251
- @0rkag made their first contribution in #261
- @kisiel92 made their first contribution in #267
Full Changelog: 0.9.7.4...0.10.0