upload-assistant 4.1__tar.gz → 4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {upload_assistant-4.1/upload_assistant.egg-info → upload_assistant-4.2}/PKG-INFO +6 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/README.md +5 -0
- upload_assistant-4.2/bin/binary_dependencies.py +7 -0
- upload_assistant-4.2/bin/binary_dependency_pins/__init__.py +33 -0
- upload_assistant-4.2/bin/binary_dependency_pins/bdinfo.py +12 -0
- upload_assistant-4.2/bin/binary_dependency_pins/dovi_tool.py +11 -0
- upload_assistant-4.2/bin/binary_dependency_pins/ffmpeg.py +7 -0
- upload_assistant-4.2/bin/binary_dependency_pins/hdr10plus_tool.py +11 -0
- upload_assistant-4.2/bin/binary_dependency_pins/mkbrr.py +13 -0
- upload_assistant-4.2/bin/binary_dependency_pins/nyuu.py +10 -0
- upload_assistant-4.2/bin/binary_dependency_pins/par2.py +12 -0
- upload_assistant-4.2/bin/binary_dependency_pins/pesto.py +8 -0
- upload_assistant-4.2/bin/binary_dependency_pins/seven_zip.py +11 -0
- upload_assistant-4.2/bin/download_integrity.py +43 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_7z.py +13 -11
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_bdinfo.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_bdinfo_docker.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_dynamic_hdr_tools.py +5 -21
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_ffmpeg.py +3 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_mkbrr.py +3 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_nyuu.py +13 -12
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_par2.py +3 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_pesto.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/data/example_config.py +31 -3
- {upload_assistant-4.1 → upload_assistant-4.2}/pyproject.toml +1 -1
- upload_assistant-4.2/src/api_key_expiry.py +180 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/args.py +22 -7
- {upload_assistant-4.1 → upload_assistant-4.2}/src/bbcode.py +34 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/book_prep.py +12 -3
- {upload_assistant-4.1 → upload_assistant-4.2}/src/clients.py +98 -27
- {upload_assistant-4.1 → upload_assistant-4.2}/src/configvalidator.py +21 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/discparse.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/dynamic_hdr_plot.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/early_tasks.py +23 -19
- {upload_assistant-4.1 → upload_assistant-4.2}/src/external_tools.py +10 -5
- {upload_assistant-4.1 → upload_assistant-4.2}/src/get_desc.py +43 -24
- {upload_assistant-4.1 → upload_assistant-4.2}/src/get_disc.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/getseasonep.py +83 -74
- {upload_assistant-4.1 → upload_assistant-4.2}/src/manualpackage.py +4 -3
- {upload_assistant-4.1 → upload_assistant-4.2}/src/meta.py +1 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/music/prep.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/prep_helpers.py +7 -4
- {upload_assistant-4.1 → upload_assistant-4.2}/src/prompt_sound.py +3 -6
- {upload_assistant-4.1 → upload_assistant-4.2}/src/qbitwait.py +9 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/src/region.py +255 -20
- {upload_assistant-4.1 → upload_assistant-4.2}/src/rehostimages.py +1 -1
- upload_assistant-4.2/src/screenshot_overlays.py +120 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/tags.py +2 -5
- {upload_assistant-4.1 → upload_assistant-4.2}/src/takescreens.py +13 -128
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrent_clients/qbittorrent.py +26 -10
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrent_clients/rtorrent.py +1 -8
- upload_assistant-4.2/src/torrent_manifest.py +215 -0
- upload_assistant-4.2/src/torrent_policy.py +113 -0
- upload_assistant-4.2/src/torrent_provision.py +103 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrentcreate.py +57 -62
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackerhandle.py +9 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/AVISTAZ/__init__.py +2 -1
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/alpharatio.py +3 -2
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/anthelion.py +38 -48
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/brasiltracker.py +1 -1
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/greatposterwall.py +22 -10
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/nebulance.py +1 -1
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/orpheus.py +3 -1
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/passthepopcorn.py +28 -29
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/lajidui.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/lemonhd.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/longpt.py +6 -7
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/NEXUSPHP}/pterclub.py +71 -18
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/NEXUSPHP}/ptskit.py +18 -27
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/ptzone.py +2 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/xingyungept.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/__init__.py +14 -3
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/aither.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/darkpeers.py +3 -2
- upload_assistant-4.2/src/trackers/UNIT3D/dreadvault.py +181 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/hawkeuno.py +26 -7
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/infinityhd.py +130 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/lst.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/oldtoonsworld.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/onlyencodes.py +7 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/rockethd.py +2 -4
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/ulcx.py +5 -3
- upload_assistant-4.2/src/trackers/USENET/nzbnest.py +169 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/broadcasthenet.py +15 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/common.py +22 -5
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/digitalcore.py +8 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/hdbits.py +7 -23
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/hdspace.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/hdtorrents.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/iptorrents.py +7 -6
- upload_assistant-4.2/src/trackers/naming.py +49 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/speedapp.py +4 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/torrentleech.py +2 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackersetup.py +44 -10
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackerstatus.py +21 -18
- {upload_assistant-4.1 → upload_assistant-4.2}/src/tvdb.py +41 -4
- {upload_assistant-4.1 → upload_assistant-4.2}/src/usenetcreate.py +17 -6
- upload_assistant-4.2/src/version.py +5 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/vs.py +27 -11
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_anthelion.py +46 -2
- upload_assistant-4.2/tests/test_api_key_expiry.py +253 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_audiobook_series_titles.py +11 -0
- upload_assistant-4.2/tests/test_bbcode.py +154 -0
- upload_assistant-4.2/tests/test_binary_dependency_updater.py +245 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_bjshare.py +1 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_bjshare_book_titles.py +1 -1
- upload_assistant-4.2/tests/test_brasiltracker.py +15 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_broadcasthenet.py +17 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_clients_tracker_comments.py +1 -1
- upload_assistant-4.2/tests/test_config_generator_autofill.py +46 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_darkpeers.py +0 -6
- upload_assistant-4.2/tests/test_digitalcore.py +25 -0
- upload_assistant-4.2/tests/test_dreadvault.py +562 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_dynamic_hdr_plot.py +6 -3
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_early_tasks.py +72 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_example_config_structure.py +16 -0
- upload_assistant-4.2/tests/test_execution_preview.py +215 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_external_tools.py +16 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_game_description.py +28 -1
- upload_assistant-4.2/tests/test_greatposterwall_image_host.py +160 -0
- upload_assistant-4.2/tests/test_hawkeuno.py +105 -0
- upload_assistant-4.2/tests/test_hdbits_pieces.py +202 -0
- upload_assistant-4.2/tests/test_hdbits_result_links.py +72 -0
- upload_assistant-4.2/tests/test_incomplete_tracker_names.py +118 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_manual_category.py +15 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_music_architecture.py +37 -2
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_nfo_service.py +2 -1
- upload_assistant-4.2/tests/test_nzbnest.py +148 -0
- upload_assistant-4.2/tests/test_onlyencodes.py +100 -0
- upload_assistant-4.2/tests/test_passthepopcorn.py +33 -0
- upload_assistant-4.2/tests/test_pterclub.py +103 -0
- upload_assistant-4.2/tests/test_qbittorrent_scheme.py +49 -0
- upload_assistant-4.2/tests/test_region_service.py +98 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_rehostimages.py +38 -0
- upload_assistant-4.2/tests/test_screenshot_overlays.py +304 -0
- upload_assistant-4.2/tests/test_season_pack_completeness.py +261 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tags.py +9 -0
- upload_assistant-4.2/tests/test_torrent_manifest.py +205 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_torrent_reuse.py +105 -4
- upload_assistant-4.2/tests/test_trackerstatus_douban.py +60 -0
- upload_assistant-4.2/tests/test_tvdb_season_episodes.py +111 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_ulcx_rules.py +7 -1
- upload_assistant-4.2/tests/test_usenet_pesto.py +70 -0
- upload_assistant-4.2/tests/test_webui_screenshot_overlays.py +86 -0
- upload_assistant-4.2/tests/test_webui_subprocess_ui.py +127 -0
- upload_assistant-4.2/tests/test_webui_tracker_default_overrides.py +98 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_trackers.py +13 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/upload.py +19 -13
- {upload_assistant-4.1 → upload_assistant-4.2/upload_assistant.egg-info}/PKG-INFO +6 -1
- {upload_assistant-4.1 → upload_assistant-4.2}/upload_assistant.egg-info/SOURCES.txt +52 -10
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/server.py +393 -12
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/css/theme.css +273 -0
- upload_assistant-4.2/web_ui/static/img/providers/audible.svg +1 -0
- upload_assistant-4.2/web_ui/static/img/trackers/curupira.png +0 -0
- upload_assistant-4.2/web_ui/static/img/trackers/nzbnest.png +0 -0
- upload_assistant-4.2/web_ui/static/img/webui-icons/pepper.svg +4 -0
- upload_assistant-4.2/web_ui/static/js/api_key_status.js +267 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/app.js +204 -329
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/config_app.js +978 -328
- upload_assistant-4.2/web_ui/static/js/config_release_group_inheritance.js +76 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/package-lock.json +31 -25
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/templates/config.html +2 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/templates/index.html +1 -0
- upload_assistant-4.1/bin/download_integrity.py +0 -58
- upload_assistant-4.1/src/trackers/UNIT3D/dreadvault.py +0 -86
- upload_assistant-4.1/src/version.py +0 -5
- upload_assistant-4.1/tests/test_bbcode.py +0 -25
- upload_assistant-4.1/tests/test_digitalcore.py +0 -8
- upload_assistant-4.1/tests/test_dreadvault.py +0 -108
- upload_assistant-4.1/tests/test_execution_preview.py +0 -89
- upload_assistant-4.1/tests/test_greatposterwall_image_host.py +0 -76
- upload_assistant-4.1/tests/test_hawkeuno.py +0 -37
- upload_assistant-4.1/tests/test_passthepopcorn.py +0 -9
- upload_assistant-4.1/tests/test_region_service.py +0 -43
- upload_assistant-4.1/tests/test_webui_subprocess_ui.py +0 -51
- upload_assistant-4.1/web_ui/static/img/trackers/curupira.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/LICENSE +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_dvd_mediainfo.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_ffmpeg_docker.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_mediainfo.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/bin/get_playlist.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/config-generator.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/data/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/data/tags.json +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/data/templates/summary-mediainfo.csv +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/data/templates/user-args-template.json +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/setup.cfg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/setup.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/add_comparison.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/app_paths.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/apply_overrides.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/artwork.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/audible.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/audio.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/audio_classifier.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/audio_spectrogram.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/bdinfo_comparator.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/binaries.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/bluray_com.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/book_extractors.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/btnid.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/check_requirements.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/cleanup.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/cogs/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/cogs/redaction.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/config_helpers.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/console.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/cookie_auth.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/description_languages.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/description_review.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/disc_menus.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/dupe_checking.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/edition.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/exceptions.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/exportmi.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/gazellegames.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/genre_map.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/get_name.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/get_source.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/get_tracker_data.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/google_books.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/igdb.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/imdb.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/is_scene.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/languages.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/media_extensions.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/mediainfo.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/metadata_cache.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/metadata_searching.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/music/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/music/analyzer.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/music/models.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/music/sources.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/music/validation.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/myanonamouse.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/nfo.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/openlibrary.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/post_upload_hooks.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/prep.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/prep_game.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/prowlarr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/queuemanage.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/radarr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/screenshot_manifest.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/screenshot_review.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/sonarr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/temp_paths.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/tmdb.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrent_clients/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrent_clients/deluge.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrent_clients/path_utils.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/torrent_clients/transmission.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/tracker_descriptions.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/tracker_images.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackermeta.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/AVISTAZ/avistaz.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/AVISTAZ/cinemaz.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/AVISTAZ/privatehd.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/AVISTAZ/routing.py +0 -0
- {upload_assistant-4.1/src/trackers → upload_assistant-4.2/src/trackers/GAZELLE}/bjshare.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/oneptba.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/ptcafe.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/ptfans.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/ptgtk.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/NEXUSPHP/railgunpt.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/UNIT3D_TEMPLATE.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/asiancinema.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/bitporn.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/blutopia.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/capybarabr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/cinematik.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/emuwarez.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/homiehelpdesk.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/itatorrents.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/lastdigitalunderground.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/latteam.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/locadora.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/luminarr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/midnightscene.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/nordicquality.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/peergarden.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/polishtorrent.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/portugas.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/racing4everyone.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/rastastugan.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/reelflix.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/retromoviesclub.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/samaritano.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/seedpool.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/shareisland.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/skipthecommercials.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/theoldschool.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/tlzdigital.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/torrentdesi.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/torrenteros.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/torrenthr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/utopia.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/yuscene.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/UNIT3D/znth.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/USENET/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/USENET/curupira.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/USENET/drunkenslug.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/USENET/nzbgeek.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/USENET/search_helpers.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/USENET/suio.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/amigosshare.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/beyondhd.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/bithdtv.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/cathoderaytube.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/filelist.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/flood.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/funfile.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/immortalseed.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/makingoff.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/mteam.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/retroflix.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/swarmazon.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/totheglory.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/trackers/tvchaosuk.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/tvmaze.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/type_utils.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/update_checker.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/uphelper.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/uploadorder.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/uploadscreens.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/video.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/webui_progress.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/xxx_keywords.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/xxx_keywords_list.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/src/xxx_platforms.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_aither.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_amigosshare_rules.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_app_paths.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_artwork_requirements.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_audible.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_audio_classifier.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_audio_multitrack_naming.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_audio_spectrogram.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_avistaz_names.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_avistaz_network_routing.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_avistaz_rules.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_avistaz_screenshots_and_desc.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_avistaz_tags.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_binaries.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_bitporn.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_book_detection.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_cathoderaytube.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_check_requirements.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_cinemaz_rules.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_cli_smoke.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_client_path_handling.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_clients.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_config_generator_tag_overrides.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_config_helpers.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_console_links.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_curupira.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_description_review.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_description_tag_overrides.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_digitalcore_description.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_disc_menus.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_dvd_screenshots.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_edition.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_exportmi.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_ffmpeg_binary.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_flood.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_gazellegames.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_get_desc_mediainfo.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_get_desc_packs.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_get_dvd_mediainfo.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_get_name_music.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_get_name_xxx.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_get_source.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_hardcoded_subtitle_detection.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_hardcoded_subtitle_language.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_hdbits.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_hdbits_images.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_hdbits_search.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_homiehelpdesk.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_igdb.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_imdb_cache.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_inline_description.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_is_scene.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_lostimg_screenshot_validation.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_lst.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_makingoff_dupes.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_makingoff_index.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_makingoff_rules.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_meta.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_metadata_cache.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_metadata_search_year.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_midnightscene.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_mkbrr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_music_cover_hosting.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_new_nexusphp_trackers.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_no_imdb.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_nordicquality.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_nzbgeek.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_openlibrary_cache.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_pack_multi_screens.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_peergarden.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_portuguese_subtitles.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_post_upload_hooks.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_prep_early_screenshots.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_prep_helpers_bluray.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_privatehd_rules.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_prompt_sound.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_prowlarr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_qbittorrent_proxy_retry.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_rastastugan.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_retromoviesclub.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_rockethd.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_samaritano.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_screenshot_par.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_screenshot_review.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_season_episode_fallback.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_seedpool.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_shell_completions.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_skipthecommercials.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_stdin_paths.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_suio.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_takescreens_ffmpeg.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_temp_paths.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tlzdigital.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tonemapped_header_import.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_torrenthr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_torrentleech_description.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tracker_descriptions.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tracker_id_args.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tracker_metadata_cache.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tracker_setup.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tracker_tags.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_tvdb_cache.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_unit3d_flags.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_unit3d_search_existing.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_update_checker.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_update_notification.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_uphelper_prompts.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_upload_order.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_upload_xxx.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_uploadscreens.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_usenet_cli.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_usenet_par2.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_video_hdr.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_config_paths.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_conpty.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_example_metadata.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_image_hosts.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_kill.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_release_group_overrides.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_runtime_safety.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_webui_same_origin.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_windows_release_workflow.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_windows_update_atomic_install.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_xxx_contact_sheets.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_xxx_detection.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_zipline_upload.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/tests/test_znth.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/upload_assistant.egg-info/dependency_links.txt +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/upload_assistant.egg-info/entry_points.txt +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/upload_assistant.egg-info/requires.txt +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/upload_assistant.egg-info/top_level.txt +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/__init__.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/access_log.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/auth.py +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/favicon.ico +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/apple-touch-icon.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/icon-192.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/logo.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/logo.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/discogs.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/douban.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/google_books.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/igdb.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/igdb_light.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/imdb.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/mal.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/musicbrainz.ico +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/openlibrary.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/steam.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/tmdb.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/tvdb.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/providers/tvmaze.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/1ptba.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/aither.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/alpharatio.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/amigosshare.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/anthelion.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/asiancinema.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/avistaz.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/beyondhd.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/bithdtv.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/bitporn.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/bjshare.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/blutopia.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/brasiltracker.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/broadcasthenet.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/capybarabr.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/cathoderaytube.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/cinematik.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/cinemaz.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/darkpeers.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/desitorrents.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/digitalcore.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/dreadvault.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/drunkenslug.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/emuwarez.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/filelist.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/flood.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/funfile.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/greatposterwall.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/hawkeuno.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/hdbits.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/hdspace.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/hdtorrents.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/homiehelpdesk.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/immortalseed.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/infinityhd.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/iptorrents.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/itatorrents.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/lajidui.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/lastdigitalunderground.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/latteam.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/lemonhd.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/locadora.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/longpt.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/lst.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/luminarr.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/makingoff.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/midnightscene.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/mteam.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/nebulance.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/nordicquality.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/nzbgeek.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/oldtoonsworld.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/onlyencodes.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/orpheus.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/passthepopcorn.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/peergarden.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/polishtorrent.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/portugas.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/privatehd.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/ptcafe.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/pterclub.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/ptfans.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/ptgtk.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/ptskit.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/ptzone.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/racing4everyone.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/railgunpt.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/rastastugan.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/reelflix.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/retroflix.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/retromoviesclub.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/rockethd.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/samaritano.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/seedpool.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/shareisland.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/skipthecommercials.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/speedapp.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/swarmazon.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/theleachzone.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/theoldschool.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/torrenteros.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/torrenthr.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/torrentleech.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/totheglory.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/tvchaosuk.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/ulcx.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/utopia.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/xingyungept.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/yuscene.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/trackers/zenith.png +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/book.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/file-structure.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/gamepad.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/movie.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/music.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/palette.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/screenshots.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/settings.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/img/webui-icons/tv.svg +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/config_image_host_fallback.js +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/package.json +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/prompt_sound.js +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/shared_utils.js +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/js/web_ui/static/js/package-lock.json +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/static/manifest.webmanifest +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/templates/_theme_bootstrap.html +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/templates/login.html +0 -0
- {upload_assistant-4.1 → upload_assistant-4.2}/web_ui/templates/login_recovery.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: upload-assistant
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.2
|
|
4
4
|
Summary: A simple tool to take the work out of uploading.
|
|
5
5
|
Author: wastaken7
|
|
6
6
|
Maintainer: wastaken7
|
|
@@ -149,6 +149,10 @@ This branch introduces new media categories and automation features not present
|
|
|
149
149
|
- **Discogs & MusicBrainz APIs**: Optionally queries external APIs (Discogs via release/master ID or URL, and MusicBrainz) for metadata enrichment.
|
|
150
150
|
- **Artwork & Cover Extraction**: Automatically searches for local cover images or extracts embedded artwork from FLAC/MP3/M4A tags to upload to image hosts.
|
|
151
151
|
- **Preflight & Rule Validation**: Enforces mechanical validation for audio formats, sample/bit rates, track counts, and hybrid setups before uploading.
|
|
152
|
+
- **Adult Video (`XXX` Category)**:
|
|
153
|
+
- **Automatic Detection & Metadata**: Recognizes supported adult-platform release names, extracts common title, studio, and date fields, and builds descriptive keywords.
|
|
154
|
+
- **Contact Sheets & Artwork**: Generates one configurable contact sheet per video and creates a fallback cover from the source when artwork is not supplied.
|
|
155
|
+
- **Workflow Guide**: See the dedicated [XXX category upload guide](docs/xxx-upload.md) for naming, overrides, WebUI usage, and supported destinations.
|
|
152
156
|
|
|
153
157
|
### 2. Audio Stream Spectrogram Generation
|
|
154
158
|
|
|
@@ -293,6 +297,7 @@ Sequence Usenet and torrent tracker uploads while limiting contention with qBitt
|
|
|
293
297
|
| <img src="web_ui/static/img/trackers/curupira.png" width="16" height="16" /> | Curupira | CURUPIRA | MOVIE, TV, BOOK, GAME |
|
|
294
298
|
| <img src="web_ui/static/img/trackers/drunkenslug.png" width="16" height="16" /> | DrunkenSlug | DRUNKENSLUG | MOVIE, TV, BOOK, GAME |
|
|
295
299
|
| <img src="web_ui/static/img/trackers/nzbgeek.png" width="16" height="16" /> | NZBGeek | NZBGEEK | MOVIE, TV, BOOK, GAME, MUSIC |
|
|
300
|
+
| <img src="web_ui/static/img/trackers/nzbnest.png" width="16" height="16" /> | NzbNest | NZBNEST | MOVIE, TV, BOOK, GAME, MUSIC |
|
|
296
301
|
|
|
297
302
|
</details>
|
|
298
303
|
|
|
@@ -66,6 +66,10 @@ This branch introduces new media categories and automation features not present
|
|
|
66
66
|
- **Discogs & MusicBrainz APIs**: Optionally queries external APIs (Discogs via release/master ID or URL, and MusicBrainz) for metadata enrichment.
|
|
67
67
|
- **Artwork & Cover Extraction**: Automatically searches for local cover images or extracts embedded artwork from FLAC/MP3/M4A tags to upload to image hosts.
|
|
68
68
|
- **Preflight & Rule Validation**: Enforces mechanical validation for audio formats, sample/bit rates, track counts, and hybrid setups before uploading.
|
|
69
|
+
- **Adult Video (`XXX` Category)**:
|
|
70
|
+
- **Automatic Detection & Metadata**: Recognizes supported adult-platform release names, extracts common title, studio, and date fields, and builds descriptive keywords.
|
|
71
|
+
- **Contact Sheets & Artwork**: Generates one configurable contact sheet per video and creates a fallback cover from the source when artwork is not supplied.
|
|
72
|
+
- **Workflow Guide**: See the dedicated [XXX category upload guide](docs/xxx-upload.md) for naming, overrides, WebUI usage, and supported destinations.
|
|
69
73
|
|
|
70
74
|
### 2. Audio Stream Spectrogram Generation
|
|
71
75
|
|
|
@@ -210,6 +214,7 @@ Sequence Usenet and torrent tracker uploads while limiting contention with qBitt
|
|
|
210
214
|
| <img src="web_ui/static/img/trackers/curupira.png" width="16" height="16" /> | Curupira | CURUPIRA | MOVIE, TV, BOOK, GAME |
|
|
211
215
|
| <img src="web_ui/static/img/trackers/drunkenslug.png" width="16" height="16" /> | DrunkenSlug | DRUNKENSLUG | MOVIE, TV, BOOK, GAME |
|
|
212
216
|
| <img src="web_ui/static/img/trackers/nzbgeek.png" width="16" height="16" /> | NZBGeek | NZBGEEK | MOVIE, TV, BOOK, GAME, MUSIC |
|
|
217
|
+
| <img src="web_ui/static/img/trackers/nzbnest.png" width="16" height="16" /> | NzbNest | NZBNEST | MOVIE, TV, BOOK, GAME, MUSIC |
|
|
213
218
|
|
|
214
219
|
</details>
|
|
215
220
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""Pinned versions and upstream repositories for managed binary dependencies."""
|
|
2
|
+
|
|
3
|
+
from bin.binary_dependency_pins import PINS
|
|
4
|
+
|
|
5
|
+
DEPENDENCY_VERSIONS = {dependency: pin.version for dependency, pin in PINS.items()}
|
|
6
|
+
DEPENDENCY_REPOSITORIES = {dependency: pin.repository for dependency, pin in PINS.items()}
|
|
7
|
+
DEPENDENCY_CHECKSUMS = {dependency: pin.checksums for dependency, pin in PINS.items()}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Independently updatable version and integrity pins for managed binaries."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from bin.binary_dependency_pins import bdinfo, dovi_tool, ffmpeg, hdr10plus_tool, mkbrr, nyuu, par2, pesto, seven_zip
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass(frozen=True)
|
|
10
|
+
class BinaryDependencyPin:
|
|
11
|
+
version: str
|
|
12
|
+
repository: str
|
|
13
|
+
checksums: dict[str, str]
|
|
14
|
+
path: Path
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _pin(module_path: str | None, version: str, repository: str, checksums: dict[str, str]) -> BinaryDependencyPin:
|
|
18
|
+
if module_path is None:
|
|
19
|
+
raise RuntimeError(f"Cannot update binary dependency pins without a source file for {repository}")
|
|
20
|
+
return BinaryDependencyPin(version, repository, checksums, Path(module_path))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
PINS = {
|
|
24
|
+
"7zip": _pin(seven_zip.__file__, seven_zip.VERSION, seven_zip.REPOSITORY, seven_zip.SHA256_BY_ASSET),
|
|
25
|
+
"bdinfo": _pin(bdinfo.__file__, bdinfo.VERSION, bdinfo.REPOSITORY, bdinfo.SHA256_BY_ASSET),
|
|
26
|
+
"dovi_tool": _pin(dovi_tool.__file__, dovi_tool.VERSION, dovi_tool.REPOSITORY, dovi_tool.SHA256_BY_ASSET),
|
|
27
|
+
"ffmpeg": _pin(ffmpeg.__file__, ffmpeg.VERSION, ffmpeg.REPOSITORY, ffmpeg.SHA256_BY_ASSET),
|
|
28
|
+
"hdr10plus_tool": _pin(hdr10plus_tool.__file__, hdr10plus_tool.VERSION, hdr10plus_tool.REPOSITORY, hdr10plus_tool.SHA256_BY_ASSET),
|
|
29
|
+
"mkbrr": _pin(mkbrr.__file__, mkbrr.VERSION, mkbrr.REPOSITORY, mkbrr.SHA256_BY_ASSET),
|
|
30
|
+
"nyuu": _pin(nyuu.__file__, nyuu.VERSION, nyuu.REPOSITORY, nyuu.SHA256_BY_ASSET),
|
|
31
|
+
"par2": _pin(par2.__file__, par2.VERSION, par2.REPOSITORY, par2.SHA256_BY_ASSET),
|
|
32
|
+
"pesto": _pin(pesto.__file__, pesto.VERSION, pesto.REPOSITORY, pesto.SHA256_BY_ASSET),
|
|
33
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Release and integrity pins for BDInfo."""
|
|
2
|
+
|
|
3
|
+
VERSION = "v0.4.2"
|
|
4
|
+
REPOSITORY = "autobrr/go-bdinfo"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"bdinfo_0.4.2_darwin_amd64.tar.gz": "f4679bd06077f1f9080b58559b235f1f4d8fb8ddbb49b872956904d28b33e65c",
|
|
7
|
+
"bdinfo_0.4.2_darwin_arm64.tar.gz": "98dffc9dbd6f81f6b691271ecf5462b8164ec07a4f7ea357b9f03eefba06969a",
|
|
8
|
+
"bdinfo_0.4.2_linux_amd64.tar.gz": "8794988af6e154bc34ceccd8c327e4eb2b6386e10f248a20e21e190d472fe9b1",
|
|
9
|
+
"bdinfo_0.4.2_linux_arm.tar.gz": "c6a49181961836fde75e15f9dfd19284a12bc3037f164de72bd9470211461053",
|
|
10
|
+
"bdinfo_0.4.2_linux_arm64.tar.gz": "f9f791534b48ad6c507bef3284be8a8395edc2f7193ac18f7bcde2a5e22467dd",
|
|
11
|
+
"bdinfo_0.4.2_windows_amd64.zip": "e68d48912b1ca7dba73c872a67c36abaabb7c46b73ac5dad32998025246bc462",
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Release and integrity pins for dovi_tool."""
|
|
2
|
+
|
|
3
|
+
VERSION = "2.3.4"
|
|
4
|
+
REPOSITORY = "quietvoid/dovi_tool"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"dovi_tool-2.3.4-aarch64-pc-windows-msvc.zip": "4056206e28f7d733fd8a29add91d286d22956b41138d6ae0d51dbbf2289d9483",
|
|
7
|
+
"dovi_tool-2.3.4-aarch64-unknown-linux-musl.tar.gz": "b4f22a7db56954efe4ed8d02276d0f991799e84602f3584711be6c9df950cb15",
|
|
8
|
+
"dovi_tool-2.3.4-universal-macOS.zip": "30d4f512eb67b7f1632cd28be5c62989bedad23f4710578aafc20c384b48ece6",
|
|
9
|
+
"dovi_tool-2.3.4-x86_64-pc-windows-msvc.zip": "0d9733d311dfe49f9dca0c350f7e6d978182673d333c6f07f7365daf9e6c81eb",
|
|
10
|
+
"dovi_tool-2.3.4-x86_64-unknown-linux-musl.tar.gz": "1844258e13c26607b32224bf1fa82b595d3b35949f5467405fda560daad32b3f",
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Release and integrity pins for hdr10plus_tool."""
|
|
2
|
+
|
|
3
|
+
VERSION = "1.7.2"
|
|
4
|
+
REPOSITORY = "quietvoid/hdr10plus_tool"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"hdr10plus_tool-1.7.2-aarch64-pc-windows-msvc.zip": "0cc1cd6ae9fb1115e5dc3d1f6daed47c486410ad5731f60a298e5d78fe995d6b",
|
|
7
|
+
"hdr10plus_tool-1.7.2-aarch64-unknown-linux-musl.tar.gz": "5fb90607cd94296640f1fc2355207b8107b67baac96d37481423d08a9fce437d",
|
|
8
|
+
"hdr10plus_tool-1.7.2-universal-macOS.zip": "d76977ed2ea90f8d6bce9035e37ea9dbffcead4725ceb1acf455c25d8658ff28",
|
|
9
|
+
"hdr10plus_tool-1.7.2-x86_64-pc-windows-msvc.zip": "82b2d560073941b14c6511a431f429e33e134e5caefb60d7e8f6f6e6da8e16ba",
|
|
10
|
+
"hdr10plus_tool-1.7.2-x86_64-unknown-linux-musl.tar.gz": "06385f37a639d61ba21d4be3150c863846933bc3b58110e094d8fc8f1c2249f2",
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Release and integrity pins for mkbrr."""
|
|
2
|
+
|
|
3
|
+
VERSION = "v1.25.1"
|
|
4
|
+
REPOSITORY = "autobrr/mkbrr"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"mkbrr_1.25.1_darwin_arm64.tar.gz": "42f1c32bd86c3d7b1e1c900ab6d29a43eec74fe3b7f3374fb8da5da19f09f013",
|
|
7
|
+
"mkbrr_1.25.1_darwin_x86_64.tar.gz": "410525eb87a3372346072c43bab000de3efdbe31e569cf4e477508dc6a514b40",
|
|
8
|
+
"mkbrr_1.25.1_freebsd_x86_64.tar.gz": "dd1a8e265263359f51605085423ba1e8214ae852fdb49c4de6c0b2f9b6543788",
|
|
9
|
+
"mkbrr_1.25.1_linux_arm.tar.gz": "3d59ba8b78cf60471f092e3bdc2eb3b53387259873a935dab66af88f78707e40",
|
|
10
|
+
"mkbrr_1.25.1_linux_arm64.tar.gz": "6cd2347406c7b2f03a12d240022c9f2d23684c336a3802e5706a6ea3e360552d",
|
|
11
|
+
"mkbrr_1.25.1_linux_x86_64.tar.gz": "a48a3032fad09c033918a6e7a712eb45069b2a2f02546f8672768b19991bbb3b",
|
|
12
|
+
"mkbrr_1.25.1_windows_x86_64.zip": "2a1ca85148d558b680d16d37e3c83b03883494b3445f82f3fd5fd97a4cbe928f",
|
|
13
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Release and integrity pins for Nyuu."""
|
|
2
|
+
|
|
3
|
+
VERSION = "v0.4.2"
|
|
4
|
+
REPOSITORY = "animetosho/Nyuu"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"nyuu-v0.4.2-linux-aarch64.tar.xz": "8a94f3f775996e4469736494074ac7663ff463748b0e302c2bc13d0ff4a88c0b",
|
|
7
|
+
"nyuu-v0.4.2-linux-amd64.tar.xz": "bbea69ffaf1d8ed3465935157e3842fe7a38bade2703504879eb8bc7c0a83dff",
|
|
8
|
+
"nyuu-v0.4.2-macos-x64.tar.xz": "040c56a486bc4ac7e3b0eed7a482ffce1bbf747ff731ad45ffd99d7230fcb2a0",
|
|
9
|
+
"nyuu-v0.4.2-win32.7z": "b14eb105e064ec2bd8f6d872c1c652a9943ea54d767c80554617f4eff6c801b8",
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Release and integrity pins for par2."""
|
|
2
|
+
|
|
3
|
+
VERSION = "v1.5.0"
|
|
4
|
+
REPOSITORY = "animetosho/par2cmdline-turbo"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"par2cmdline-turbo-1.5.0-linux-amd64.zip": "5a9f64386813456693c2ea1fb7649436fe7544bbdf97fd73b3483dfcc8aca464",
|
|
7
|
+
"par2cmdline-turbo-1.5.0-linux-arm64.zip": "3afb2f0b319fc4e6353c6d4261994757cbe3189f968a72420b4ba1d63f9c9a70",
|
|
8
|
+
"par2cmdline-turbo-1.5.0-macos-amd64.zip": "3786d7c947ecb8048d688e0fdca3a4ce7e945d2bd248f54523ecc8d086e143cd",
|
|
9
|
+
"par2cmdline-turbo-1.5.0-macos-arm64.zip": "d016436356ef706c50ad5a4ee6316eef8138ab8d8177732ab97b9c2ad95b0990",
|
|
10
|
+
"par2cmdline-turbo-1.5.0-win-arm64.zip": "bb73312747b706dcedd13b8d4de7acd20e17367ebb0b26ebc3ea7d55ea744735",
|
|
11
|
+
"par2cmdline-turbo-1.5.0-win-x64.zip": "873a6f25822415f432224cc6f734407ca2732004184e002960fc68ed1e99c5d7",
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""Release and integrity pins for pesto."""
|
|
2
|
+
|
|
3
|
+
VERSION = "pesto-v0.10.4"
|
|
4
|
+
REPOSITORY = "franzopl/pesto"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"pesto-linux-x86_64": "99d78f64f7876f79a34ef252be66d672e3f0cfad150c33b8f65b79ef3d1007f8",
|
|
7
|
+
"pesto-windows-x86_64.exe": "dcca9067f0ff70a49cc65bba7b00738c2a76e65d64a8381fb815e761dbdd53c4",
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Release and integrity pins for 7zip."""
|
|
2
|
+
|
|
3
|
+
VERSION = "26.03"
|
|
4
|
+
REPOSITORY = "ip7z/7zip"
|
|
5
|
+
SHA256_BY_ASSET = {
|
|
6
|
+
"7z2603-linux-arm.tar.xz": "4efd099f6112b39054faea9424ded044b7bcaaf494dba49b918daa781297f57f",
|
|
7
|
+
"7z2603-linux-arm64.tar.xz": "2389ba20e4d8295e8709c20b6263b69bd1ec4972fe38a04ad7a1badbf595b996",
|
|
8
|
+
"7z2603-linux-x64.tar.xz": "dc99eff5008f1ab79bd7084c68513701547a808a89502bf4133683535ab3c695",
|
|
9
|
+
"7z2603-mac.tar.xz": "5ca87677072c59f5602e5c49baa27d4694bacd2259b4e507f0094249d4281480",
|
|
10
|
+
"7zr.exe": "ad4c82fadcbdf93c03b4fc440f300509c7d60c5c2f4d183e35d9d70d6957037d",
|
|
11
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Pinned SHA-256 verification for third-party executable downloads."""
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from bin.binary_dependencies import DEPENDENCY_CHECKSUMS
|
|
7
|
+
|
|
8
|
+
SHA256_BY_ASSET = {
|
|
9
|
+
"MediaInfo_CLI_23.04_Windows_x64.zip": "b1beafae0a15168ca37db8a3061d55eba55c1a120d6a6423ac1d3f30ed869270",
|
|
10
|
+
"MediaInfo_CLI_26.05_Lambda_arm64.zip": "57268dcfc044cdcbe4641e26432392f002b7fa4bcb06e9d738be04cd047a2c1e",
|
|
11
|
+
"MediaInfo_CLI_26.05_Lambda_x86_64.zip": "1ae3744a78c93492b69f0b38bb2d1de1433c3eae04030ff1ea82ee1f60ac9a99",
|
|
12
|
+
"MediaInfo_CLI_26.05_Mac.dmg": "507605a7c8f1054a6996d99a4ef5b5a0711cfbf2f8ca2ef5161d6ee701ea8015",
|
|
13
|
+
"MediaInfo_CLI_26.05_Windows_ARM64.zip": "6b403fa1411730672adefa8d49d97cbf7163eed7fc5c1256c9a6e9f915fde1a8",
|
|
14
|
+
"MediaInfo_CLI_26.05_Windows_x64.zip": "f7f80620ce6d14f4995f0de6f98e3ef18ad29496db01899571152ee3311229f9",
|
|
15
|
+
"mkbrr_1.18.0_linux_arm.tar.gz": "f622595f6afee302c72c89abdd9f31ad3197bd85d45a8b482f97ebd21930ac51",
|
|
16
|
+
"mkbrr_1.18.0_linux_arm64.tar.gz": "1c187ab2b860e637296d6f0deb4c2e7754a4c1e249b0226f0be671170689de24",
|
|
17
|
+
"mkbrr_1.18.0_linux_x86_64.tar.gz": "a796bd97dfb093e18a1a509c8986580498e65253582983a462b977b359f987b9",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
for dependency, checksums in DEPENDENCY_CHECKSUMS.items():
|
|
21
|
+
if duplicates := SHA256_BY_ASSET.keys() & checksums.keys():
|
|
22
|
+
raise RuntimeError(f"Duplicate checksum pins for {dependency}: {', '.join(sorted(duplicates))}")
|
|
23
|
+
SHA256_BY_ASSET.update(checksums)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def verify_downloaded_asset(path: Path, asset: str) -> None:
|
|
27
|
+
"""Fail closed unless a downloaded executable archive matches its pinned hash."""
|
|
28
|
+
expected = SHA256_BY_ASSET.get(asset)
|
|
29
|
+
if expected is None:
|
|
30
|
+
raise RuntimeError(f"No SHA-256 checksum is pinned for {asset}")
|
|
31
|
+
with path.open("rb") as asset_file:
|
|
32
|
+
actual = hashlib.file_digest(asset_file, "sha256").hexdigest()
|
|
33
|
+
if actual != expected:
|
|
34
|
+
raise RuntimeError(f"SHA-256 checksum mismatch for {asset}")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def verify_downloaded_content(content: bytes, asset: str) -> None:
|
|
38
|
+
"""Fail closed unless downloaded content matches its pinned hash."""
|
|
39
|
+
expected = SHA256_BY_ASSET.get(asset)
|
|
40
|
+
if expected is None:
|
|
41
|
+
raise RuntimeError(f"No SHA-256 checksum is pinned for {asset}")
|
|
42
|
+
if hashlib.sha256(content).hexdigest() != expected:
|
|
43
|
+
raise RuntimeError(f"SHA-256 checksum mismatch for {asset}")
|
|
@@ -9,6 +9,7 @@ from pathlib import Path
|
|
|
9
9
|
import aiofiles
|
|
10
10
|
import httpx
|
|
11
11
|
|
|
12
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
12
13
|
from bin.download_integrity import verify_downloaded_asset
|
|
13
14
|
|
|
14
15
|
try:
|
|
@@ -30,9 +31,10 @@ class SevenZipBinaryManager:
|
|
|
30
31
|
"""Download 7-Zip binaries for the host architecture."""
|
|
31
32
|
|
|
32
33
|
@staticmethod
|
|
33
|
-
async def ensure_7z_binary(base_dir: str | Path, version: str = "
|
|
34
|
+
async def ensure_7z_binary(base_dir: str | Path, version: str = DEPENDENCY_VERSIONS["7zip"]) -> str:
|
|
34
35
|
system = platform.system().lower()
|
|
35
36
|
machine = platform.machine().lower()
|
|
37
|
+
asset_version = version.replace(".", "")
|
|
36
38
|
logger.debug(f"[blue]7-Zip: Detected system: {system}, architecture: {machine}[/blue]")
|
|
37
39
|
|
|
38
40
|
platform_map: dict[str, dict[str, dict[str, str]]] = {
|
|
@@ -43,18 +45,18 @@ class SevenZipBinaryManager:
|
|
|
43
45
|
"arm64": {"file": "7zr.exe", "folder": "windows/arm64"},
|
|
44
46
|
},
|
|
45
47
|
"darwin": {
|
|
46
|
-
"arm64": {"file": "
|
|
47
|
-
"x86_64": {"file": "
|
|
48
|
-
"amd64": {"file": "
|
|
48
|
+
"arm64": {"file": f"7z{asset_version}-mac.tar.xz", "folder": "macos/arm64"},
|
|
49
|
+
"x86_64": {"file": f"7z{asset_version}-mac.tar.xz", "folder": "macos/x86_64"},
|
|
50
|
+
"amd64": {"file": f"7z{asset_version}-mac.tar.xz", "folder": "macos/x86_64"},
|
|
49
51
|
},
|
|
50
52
|
"linux": {
|
|
51
|
-
"x86_64": {"file": "
|
|
52
|
-
"amd64": {"file": "
|
|
53
|
-
"arm64": {"file": "
|
|
54
|
-
"aarch64": {"file": "
|
|
55
|
-
"arm": {"file": "
|
|
56
|
-
"armv7l": {"file": "
|
|
57
|
-
"armv6l": {"file": "
|
|
53
|
+
"x86_64": {"file": f"7z{asset_version}-linux-x64.tar.xz", "folder": "linux/amd64"},
|
|
54
|
+
"amd64": {"file": f"7z{asset_version}-linux-x64.tar.xz", "folder": "linux/amd64"},
|
|
55
|
+
"arm64": {"file": f"7z{asset_version}-linux-arm64.tar.xz", "folder": "linux/arm64"},
|
|
56
|
+
"aarch64": {"file": f"7z{asset_version}-linux-arm64.tar.xz", "folder": "linux/arm64"},
|
|
57
|
+
"arm": {"file": f"7z{asset_version}-linux-arm.tar.xz", "folder": "linux/arm"},
|
|
58
|
+
"armv7l": {"file": f"7z{asset_version}-linux-arm.tar.xz", "folder": "linux/arm"},
|
|
59
|
+
"armv6l": {"file": f"7z{asset_version}-linux-arm.tar.xz", "folder": "linux/arm"},
|
|
58
60
|
},
|
|
59
61
|
}
|
|
60
62
|
|
|
@@ -11,6 +11,7 @@ from pathlib import Path
|
|
|
11
11
|
import aiofiles
|
|
12
12
|
import httpx
|
|
13
13
|
|
|
14
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
14
15
|
from bin.download_integrity import verify_downloaded_asset
|
|
15
16
|
|
|
16
17
|
try:
|
|
@@ -35,7 +36,7 @@ class BDInfoBinaryManager:
|
|
|
35
36
|
"""
|
|
36
37
|
|
|
37
38
|
@staticmethod
|
|
38
|
-
async def ensure_bdinfo_binary(base_dir: str | Path, version: str = "
|
|
39
|
+
async def ensure_bdinfo_binary(base_dir: str | Path, version: str = DEPENDENCY_VERSIONS["bdinfo"]) -> str:
|
|
39
40
|
system = platform.system().lower()
|
|
40
41
|
machine = platform.machine().lower()
|
|
41
42
|
logger.debug(f"[blue]Detected system: {system}, architecture: {machine}[/blue]")
|
|
@@ -15,6 +15,7 @@ import requests
|
|
|
15
15
|
|
|
16
16
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
17
17
|
|
|
18
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
18
19
|
from bin.download_integrity import verify_downloaded_asset
|
|
19
20
|
|
|
20
21
|
try:
|
|
@@ -32,7 +33,7 @@ except ImportError:
|
|
|
32
33
|
logger = logging.getLogger(__name__)
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
BDINFO_VERSION = "
|
|
36
|
+
BDINFO_VERSION = DEPENDENCY_VERSIONS["bdinfo"]
|
|
36
37
|
BASE_RELEASE_URL = "https://github.com/autobrr/go-bdinfo/releases/download"
|
|
37
38
|
|
|
38
39
|
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
-
import hashlib
|
|
7
6
|
import platform
|
|
8
7
|
import shutil
|
|
9
8
|
import stat
|
|
@@ -13,24 +12,13 @@ from pathlib import Path
|
|
|
13
12
|
|
|
14
13
|
import httpx
|
|
15
14
|
|
|
15
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
16
|
+
from bin.download_integrity import verify_downloaded_content
|
|
16
17
|
from src.console import logger
|
|
17
18
|
|
|
18
19
|
TOOLS = {
|
|
19
|
-
"dovi": {"command": "dovi_tool", "repository": "quietvoid/dovi_tool", "version": "
|
|
20
|
-
"hdr10plus": {"command": "hdr10plus_tool", "repository": "quietvoid/hdr10plus_tool", "version": "
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
ASSET_SHA256 = {
|
|
24
|
-
"dovi_tool-2.3.3-aarch64-pc-windows-msvc.zip": "559ed634ef0b956ab89ed965b4920371bb228983f105d99fafeb372a8190c872",
|
|
25
|
-
"dovi_tool-2.3.3-aarch64-unknown-linux-musl.tar.gz": "daf538c275f4e702219ce8eb61db28382193ac9d0126e1ef4185a88303af4485",
|
|
26
|
-
"dovi_tool-2.3.3-universal-macOS.zip": "b113c83fed2d8d7ed9e43f0428d02fa0d0030e20965fc24a3cd4d48597d88685",
|
|
27
|
-
"dovi_tool-2.3.3-x86_64-pc-windows-msvc.zip": "37ae198f2a535c910befad39fc09c21cded76bf3ef2d5459d542e58c2c158311",
|
|
28
|
-
"dovi_tool-2.3.3-x86_64-unknown-linux-musl.tar.gz": "5dae82cb2becd3b9fd726127f936a8d32635e60746d16238fdfded12aa05988c",
|
|
29
|
-
"hdr10plus_tool-1.7.2-aarch64-pc-windows-msvc.zip": "0cc1cd6ae9fb1115e5dc3d1f6daed47c486410ad5731f60a298e5d78fe995d6b",
|
|
30
|
-
"hdr10plus_tool-1.7.2-aarch64-unknown-linux-musl.tar.gz": "5fb90607cd94296640f1fc2355207b8107b67baac96d37481423d08a9fce437d",
|
|
31
|
-
"hdr10plus_tool-1.7.2-universal-macOS.zip": "d76977ed2ea90f8d6bce9035e37ea9dbffcead4725ceb1acf455c25d8658ff28",
|
|
32
|
-
"hdr10plus_tool-1.7.2-x86_64-pc-windows-msvc.zip": "82b2d560073941b14c6511a431f429e33e134e5caefb60d7e8f6f6e6da8e16ba",
|
|
33
|
-
"hdr10plus_tool-1.7.2-x86_64-unknown-linux-musl.tar.gz": "06385f37a639d61ba21d4be3150c863846933bc3b58110e094d8fc8f1c2249f2",
|
|
20
|
+
"dovi": {"command": "dovi_tool", "repository": "quietvoid/dovi_tool", "version": DEPENDENCY_VERSIONS["dovi_tool"]},
|
|
21
|
+
"hdr10plus": {"command": "hdr10plus_tool", "repository": "quietvoid/hdr10plus_tool", "version": DEPENDENCY_VERSIONS["hdr10plus_tool"]},
|
|
34
22
|
}
|
|
35
23
|
|
|
36
24
|
|
|
@@ -50,11 +38,7 @@ def _asset_name(tool: str) -> tuple[str, str]:
|
|
|
50
38
|
|
|
51
39
|
def _verify_checksum(asset: str, content: bytes) -> None:
|
|
52
40
|
"""Reject release assets whose content differs from the pinned digest."""
|
|
53
|
-
|
|
54
|
-
if expected_checksum is None:
|
|
55
|
-
raise RuntimeError(f"Missing checksum for {asset}")
|
|
56
|
-
if hashlib.sha256(content).hexdigest() != expected_checksum:
|
|
57
|
-
raise RuntimeError(f"Checksum mismatch for {asset}")
|
|
41
|
+
verify_downloaded_content(content, asset)
|
|
58
42
|
|
|
59
43
|
|
|
60
44
|
def _safe_extract(archive: Path, destination: Path) -> None:
|
|
@@ -11,6 +11,7 @@ from pathlib import Path
|
|
|
11
11
|
import aiofiles
|
|
12
12
|
import httpx
|
|
13
13
|
|
|
14
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
14
15
|
from bin.download_integrity import verify_downloaded_asset
|
|
15
16
|
from src.console import logger
|
|
16
17
|
|
|
@@ -18,8 +19,8 @@ from src.console import logger
|
|
|
18
19
|
class FfmpegBinaryManager:
|
|
19
20
|
"""Download the verified Windows FFmpeg build into the runtime ``bin`` cache."""
|
|
20
21
|
|
|
21
|
-
VERSION = "
|
|
22
|
-
ASSET_NAME = "ffmpeg-
|
|
22
|
+
VERSION = DEPENDENCY_VERSIONS["ffmpeg"]
|
|
23
|
+
ASSET_NAME = f"ffmpeg-{VERSION}-essentials_build.zip"
|
|
23
24
|
DOWNLOAD_URL = f"https://github.com/GyanD/codexffmpeg/releases/download/{VERSION}/{ASSET_NAME}"
|
|
24
25
|
|
|
25
26
|
@classmethod
|
|
@@ -11,6 +11,7 @@ from typing import ClassVar
|
|
|
11
11
|
import aiofiles
|
|
12
12
|
import httpx
|
|
13
13
|
|
|
14
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
14
15
|
from bin.download_integrity import verify_downloaded_asset
|
|
15
16
|
|
|
16
17
|
try:
|
|
@@ -77,7 +78,7 @@ class MkbrrBinaryManager:
|
|
|
77
78
|
return shutil.which("mkbrr")
|
|
78
79
|
|
|
79
80
|
@staticmethod
|
|
80
|
-
async def ensure_mkbrr_binary(base_dir: str | Path, version: str) -> str:
|
|
81
|
+
async def ensure_mkbrr_binary(base_dir: str | Path, version: str = DEPENDENCY_VERSIONS["mkbrr"]) -> str:
|
|
81
82
|
existing_binary = MkbrrBinaryManager.find_existing_binary(base_dir, version)
|
|
82
83
|
if existing_binary:
|
|
83
84
|
return existing_binary
|
|
@@ -235,7 +236,7 @@ class MkbrrBinaryManager:
|
|
|
235
236
|
raise Exception(f"Failed to extract mkbrr binary: {e}") from e
|
|
236
237
|
|
|
237
238
|
@staticmethod
|
|
238
|
-
def download_mkbrr_for_docker(base_dir: str | Path = ".", version: str = "
|
|
239
|
+
def download_mkbrr_for_docker(base_dir: str | Path = ".", version: str = DEPENDENCY_VERSIONS["mkbrr"]) -> str:
|
|
239
240
|
"""Download mkbrr binary for Docker/Linux - synchronous version."""
|
|
240
241
|
system = platform.system().lower()
|
|
241
242
|
machine = platform.machine().lower()
|
|
@@ -10,6 +10,7 @@ from pathlib import Path
|
|
|
10
10
|
import aiofiles
|
|
11
11
|
import httpx
|
|
12
12
|
|
|
13
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
13
14
|
from bin.download_integrity import verify_downloaded_asset
|
|
14
15
|
|
|
15
16
|
try:
|
|
@@ -31,28 +32,28 @@ class NyuuBinaryManager:
|
|
|
31
32
|
"""Download Nyuu binaries for the host architecture."""
|
|
32
33
|
|
|
33
34
|
@staticmethod
|
|
34
|
-
async def ensure_nyuu_binary(base_dir: str | Path, path_7z: str | None = None, version: str = "
|
|
35
|
+
async def ensure_nyuu_binary(base_dir: str | Path, path_7z: str | None = None, version: str = DEPENDENCY_VERSIONS["nyuu"]) -> str:
|
|
35
36
|
system = platform.system().lower()
|
|
36
37
|
machine = platform.machine().lower()
|
|
37
38
|
logger.debug(f"[blue]Nyuu: Detected system: {system}, architecture: {machine}[/blue]")
|
|
38
39
|
|
|
39
40
|
platform_map: dict[str, dict[str, dict[str, str]]] = {
|
|
40
41
|
"windows": {
|
|
41
|
-
"x86_64": {"file": "nyuu-
|
|
42
|
-
"amd64": {"file": "nyuu-
|
|
43
|
-
"x86": {"file": "nyuu-
|
|
44
|
-
"arm64": {"file": "nyuu-
|
|
42
|
+
"x86_64": {"file": f"nyuu-{version}-win32.7z", "folder": "windows/x86_64"},
|
|
43
|
+
"amd64": {"file": f"nyuu-{version}-win32.7z", "folder": "windows/x86_64"},
|
|
44
|
+
"x86": {"file": f"nyuu-{version}-win32.7z", "folder": "windows/x86"},
|
|
45
|
+
"arm64": {"file": f"nyuu-{version}-win32.7z", "folder": "windows/arm64"},
|
|
45
46
|
},
|
|
46
47
|
"darwin": {
|
|
47
|
-
"arm64": {"file": "nyuu-
|
|
48
|
-
"x86_64": {"file": "nyuu-
|
|
49
|
-
"amd64": {"file": "nyuu-
|
|
48
|
+
"arm64": {"file": f"nyuu-{version}-macos-x64.tar.xz", "folder": "macos/arm64"},
|
|
49
|
+
"x86_64": {"file": f"nyuu-{version}-macos-x64.tar.xz", "folder": "macos/x86_64"},
|
|
50
|
+
"amd64": {"file": f"nyuu-{version}-macos-x64.tar.xz", "folder": "macos/x86_64"},
|
|
50
51
|
},
|
|
51
52
|
"linux": {
|
|
52
|
-
"x86_64": {"file": "nyuu-
|
|
53
|
-
"amd64": {"file": "nyuu-
|
|
54
|
-
"arm64": {"file": "nyuu-
|
|
55
|
-
"aarch64": {"file": "nyuu-
|
|
53
|
+
"x86_64": {"file": f"nyuu-{version}-linux-amd64.tar.xz", "folder": "linux/amd64"},
|
|
54
|
+
"amd64": {"file": f"nyuu-{version}-linux-amd64.tar.xz", "folder": "linux/amd64"},
|
|
55
|
+
"arm64": {"file": f"nyuu-{version}-linux-aarch64.tar.xz", "folder": "linux/arm64"},
|
|
56
|
+
"aarch64": {"file": f"nyuu-{version}-linux-aarch64.tar.xz", "folder": "linux/arm64"},
|
|
56
57
|
},
|
|
57
58
|
}
|
|
58
59
|
|
|
@@ -9,6 +9,7 @@ from pathlib import Path
|
|
|
9
9
|
import aiofiles
|
|
10
10
|
import httpx
|
|
11
11
|
|
|
12
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
12
13
|
from bin.download_integrity import verify_downloaded_asset
|
|
13
14
|
|
|
14
15
|
try:
|
|
@@ -30,12 +31,12 @@ class Par2BinaryManager:
|
|
|
30
31
|
"""Download par2cmdline-turbo binaries for the host architecture."""
|
|
31
32
|
|
|
32
33
|
@staticmethod
|
|
33
|
-
async def ensure_par2_binary(base_dir: str | Path, version: str = "
|
|
34
|
+
async def ensure_par2_binary(base_dir: str | Path, version: str = DEPENDENCY_VERSIONS["par2"]) -> str:
|
|
34
35
|
system = platform.system().lower()
|
|
35
36
|
machine = platform.machine().lower()
|
|
36
37
|
logger.debug(f"[blue]PAR2: Detected system: {system}, architecture: {machine}[/blue]")
|
|
37
38
|
|
|
38
|
-
#
|
|
39
|
+
# Release tags include "v", while asset filenames use the numeric version.
|
|
39
40
|
v_num = version.lstrip("v")
|
|
40
41
|
|
|
41
42
|
platform_map: dict[str, dict[str, dict[str, str]]] = {
|
|
@@ -8,6 +8,7 @@ from pathlib import Path
|
|
|
8
8
|
import aiofiles
|
|
9
9
|
import httpx
|
|
10
10
|
|
|
11
|
+
from bin.binary_dependencies import DEPENDENCY_VERSIONS
|
|
11
12
|
from bin.download_integrity import verify_downloaded_asset
|
|
12
13
|
|
|
13
14
|
try:
|
|
@@ -29,7 +30,7 @@ class PestoBinaryManager:
|
|
|
29
30
|
"""Download Pesto binaries for the host architecture."""
|
|
30
31
|
|
|
31
32
|
@staticmethod
|
|
32
|
-
async def ensure_pesto_binary(base_dir: str | Path, version: str = "pesto
|
|
33
|
+
async def ensure_pesto_binary(base_dir: str | Path, version: str = DEPENDENCY_VERSIONS["pesto"]) -> str:
|
|
33
34
|
system = platform.system().lower()
|
|
34
35
|
machine = platform.machine().lower()
|
|
35
36
|
logger.debug(f"[blue]Pesto: Detected system: {system}, architecture: {machine}[/blue]")
|
|
@@ -299,11 +299,25 @@ config: dict[str, Any] = {
|
|
|
299
299
|
# Works only when the input frame has a supported color tag.
|
|
300
300
|
"desat": "10.0",
|
|
301
301
|
# Screenshot overlays
|
|
302
|
-
#
|
|
302
|
+
# Layout examples and manual setup: docs/screenshot-overlays.md
|
|
303
|
+
# Show enabled screenshot labels without changing the individual selections below.
|
|
304
|
+
# Enable at least one label below to display overlay text.
|
|
303
305
|
# Enabling overlays uses FFmpeg tone mapping instead of libplacebo.
|
|
304
306
|
"frame_overlay": False,
|
|
305
|
-
# Overlay text size, scaled with resolution.
|
|
307
|
+
# Overlay text size (1-100), scaled with resolution. VapourSynth rounds to whole font-scale steps.
|
|
306
308
|
"overlay_text_size": "18",
|
|
309
|
+
# Keep labels at the top, aligned to "left" or "right".
|
|
310
|
+
"overlay_position": "left",
|
|
311
|
+
# Use "stacked" for one label per line, or "single_line" for compact labels separated by bullets.
|
|
312
|
+
"overlay_layout": "stacked",
|
|
313
|
+
# Show the estimated frame number at the capture position.
|
|
314
|
+
"overlay_frame_number": False,
|
|
315
|
+
# Show the frame's picture type (I, P, or B).
|
|
316
|
+
"overlay_frame_type": False,
|
|
317
|
+
# Show the captured frame's elapsed video time (HH:MM:SS.mmm).
|
|
318
|
+
"overlay_timestamp": False,
|
|
319
|
+
# Show only when screenshots have been tonemapped to SDR.
|
|
320
|
+
"overlay_tonemapped": False,
|
|
307
321
|
# --- DISC MENU SCREENSHOTS ---
|
|
308
322
|
# Set to True to capture DVD menu screenshots from menu VOBs.
|
|
309
323
|
"auto_dvd_menus": True,
|
|
@@ -524,7 +538,7 @@ config: dict[str, Any] = {
|
|
|
524
538
|
# BRASILTRACKER, BROADCASTHENET, CAPYBARABR, CATHODERAYTUBE, CINEMATIK, CINEMAZ, CURUPIRA, DARKPEERS, DESITORRENTS, DIGITALCORE,
|
|
525
539
|
# DREADVAULT, DRUNKENSLUG, EMUWAREZ, FILELIST, FLOOD, FUNFILE, GREATPOSTERWALL, HAWKEUNO, HDBITS, HDSPACE, HDTORRENTS, HOMIEHELPDESK,
|
|
526
540
|
# IMMORTALSEED, INFINITYHD, IPTORRENTS, ITATORRENTS, LAJIDUI, LASTDIGITALUNDERGROUND, LATTEAM, LEMONHD, LOCADORA, LONGPT, LST,
|
|
527
|
-
# LUMINARR, MAKINGOFF, MIDNIGHTSCENE, MTEAM, NEBULANCE, NORDICQUALITY, NZBGEEK, OLDTOONSWORLD, ONLYENCODES, ORPHEUS, PASSTHEPOPCORN,
|
|
541
|
+
# LUMINARR, MAKINGOFF, MIDNIGHTSCENE, MTEAM, NEBULANCE, NORDICQUALITY, NZBGEEK, NZBNEST, OLDTOONSWORLD, ONLYENCODES, ORPHEUS, PASSTHEPOPCORN,
|
|
528
542
|
# PEERGARDEN, POLISHTORRENT, PORTUGAS, PRIVATEHD, PTCAFE, PTERCLUB, PTFANS, PTGTK, PTSKIT, PTZONE, RACING4EVERYONE, RAILGUNPT,
|
|
529
543
|
# RASTASTUGAN, REELFLIX, RETROFLIX, RETROMOVIESCLUB, ROCKETHD, SAMARITANO, SEEDPOOL, SHAREISLAND, SKIPTHECOMMERCIALS, SPEEDAPP,
|
|
530
544
|
# SUIO, SWARMAZON, THELEACHZONE, THEOLDSCHOOL, TORRENTEROS, TORRENTHR, TORRENTLEECH, TOTHEGLORY, TVCHAOSUK, ULCX, UTOPIA,
|
|
@@ -1162,6 +1176,8 @@ config: dict[str, Any] = {
|
|
|
1162
1176
|
# You can find your api key at Settings -> Security -> API Key -> Generate API Key
|
|
1163
1177
|
"api_key": "",
|
|
1164
1178
|
"anon": True,
|
|
1179
|
+
# Force DigitalCore uploads to re-host screenshots on img.digitalcore.club using DEFAULT.sharex_api_key.
|
|
1180
|
+
"force_rehost_images": False,
|
|
1165
1181
|
# If True, the script will use the metadata-based title instead of the directory/file name.
|
|
1166
1182
|
"use_metadata_name": False,
|
|
1167
1183
|
# The configurations below override the DEFAULT configuration
|
|
@@ -2115,6 +2131,16 @@ config: dict[str, Any] = {
|
|
|
2115
2131
|
"exact_match_only": False,
|
|
2116
2132
|
"inject_delay": 0,
|
|
2117
2133
|
},
|
|
2134
|
+
"NZBNEST": {
|
|
2135
|
+
# NzbNest API key
|
|
2136
|
+
"api_key": "",
|
|
2137
|
+
# Maximum number of API hits the script may make within 24 hours for duplicate search.
|
|
2138
|
+
# Set to 0 to disable duplicate search via API.
|
|
2139
|
+
"daily_api_hit_limit": 0,
|
|
2140
|
+
# Only block uploads when the existing release exactly matches files.
|
|
2141
|
+
"exact_match_only": False,
|
|
2142
|
+
"inject_delay": 0,
|
|
2143
|
+
},
|
|
2118
2144
|
"OLDTOONSWORLD": {
|
|
2119
2145
|
# Instead of using the tracker acronym for folder name when sym/hard linking, you can use a custom name
|
|
2120
2146
|
"link_dir_name": "",
|
|
@@ -2809,6 +2835,7 @@ config: dict[str, Any] = {
|
|
|
2809
2835
|
# "use_for_search": False, set to True if using this tracker for automatic ID searching or description parsing
|
|
2810
2836
|
"use_for_search": False,
|
|
2811
2837
|
"api_key": "",
|
|
2838
|
+
"anon": True,
|
|
2812
2839
|
# Only block uploads when the existing release exactly matches files and size.
|
|
2813
2840
|
"exact_match_only": False,
|
|
2814
2841
|
# For authorized users only. Do not change this unless you know what you are doing
|
|
@@ -3125,6 +3152,7 @@ config: dict[str, Any] = {
|
|
|
3125
3152
|
# "use_for_search": False, set to True if using this tracker for automatic ID searching or description parsing
|
|
3126
3153
|
"use_for_search": False,
|
|
3127
3154
|
"api_key": "",
|
|
3155
|
+
"anon": True,
|
|
3128
3156
|
# For authorized users only. Do not change this unless you know what you are doing
|
|
3129
3157
|
# Upload as featured
|
|
3130
3158
|
"featured": False,
|