upload-assistant 3.9__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.
Files changed (495) hide show
  1. upload_assistant-3.9/LICENSE +116 -0
  2. upload_assistant-3.9/PKG-INFO +503 -0
  3. upload_assistant-3.9/README.md +419 -0
  4. upload_assistant-3.9/bin/__init__.py +0 -0
  5. upload_assistant-3.9/bin/download_integrity.py +58 -0
  6. upload_assistant-3.9/bin/get_7z.py +146 -0
  7. upload_assistant-3.9/bin/get_bdinfo.py +231 -0
  8. upload_assistant-3.9/bin/get_bdinfo_docker.py +164 -0
  9. upload_assistant-3.9/bin/get_dvd_mediainfo.py +189 -0
  10. upload_assistant-3.9/bin/get_dynamic_hdr_tools.py +122 -0
  11. upload_assistant-3.9/bin/get_ffmpeg.py +76 -0
  12. upload_assistant-3.9/bin/get_ffmpeg_docker.py +116 -0
  13. upload_assistant-3.9/bin/get_mediainfo.py +183 -0
  14. upload_assistant-3.9/bin/get_mkbrr.py +367 -0
  15. upload_assistant-3.9/bin/get_nyuu.py +169 -0
  16. upload_assistant-3.9/bin/get_par2.py +149 -0
  17. upload_assistant-3.9/bin/get_pesto.py +107 -0
  18. upload_assistant-3.9/bin/get_playlist.py +122 -0
  19. upload_assistant-3.9/config-generator.py +1244 -0
  20. upload_assistant-3.9/data/__init__.py +18 -0
  21. upload_assistant-3.9/data/example_config.py +3619 -0
  22. upload_assistant-3.9/data/tags.json +21 -0
  23. upload_assistant-3.9/data/templates/summary-mediainfo.csv +7 -0
  24. upload_assistant-3.9/data/templates/user-args-template.json +47 -0
  25. upload_assistant-3.9/pyproject.toml +199 -0
  26. upload_assistant-3.9/setup.cfg +7 -0
  27. upload_assistant-3.9/setup.py +23 -0
  28. upload_assistant-3.9/src/__init__.py +0 -0
  29. upload_assistant-3.9/src/add_comparison.py +181 -0
  30. upload_assistant-3.9/src/app_paths.py +41 -0
  31. upload_assistant-3.9/src/apply_overrides.py +196 -0
  32. upload_assistant-3.9/src/args.py +1466 -0
  33. upload_assistant-3.9/src/artwork.py +209 -0
  34. upload_assistant-3.9/src/audio.py +695 -0
  35. upload_assistant-3.9/src/audio_classifier.py +397 -0
  36. upload_assistant-3.9/src/audio_spectrogram.py +384 -0
  37. upload_assistant-3.9/src/bbcode.py +730 -0
  38. upload_assistant-3.9/src/bdinfo_comparator.py +196 -0
  39. upload_assistant-3.9/src/binaries.py +40 -0
  40. upload_assistant-3.9/src/bluray_com.py +1794 -0
  41. upload_assistant-3.9/src/book_extractors.py +803 -0
  42. upload_assistant-3.9/src/book_prep.py +1078 -0
  43. upload_assistant-3.9/src/btnid.py +249 -0
  44. upload_assistant-3.9/src/check_requirements.py +114 -0
  45. upload_assistant-3.9/src/cleanup.py +259 -0
  46. upload_assistant-3.9/src/clients.py +755 -0
  47. upload_assistant-3.9/src/cogs/__init__.py +0 -0
  48. upload_assistant-3.9/src/cogs/redaction.py +192 -0
  49. upload_assistant-3.9/src/config_helpers.py +36 -0
  50. upload_assistant-3.9/src/configvalidator.py +879 -0
  51. upload_assistant-3.9/src/console.py +343 -0
  52. upload_assistant-3.9/src/cookie_auth.py +818 -0
  53. upload_assistant-3.9/src/description_languages.py +150 -0
  54. upload_assistant-3.9/src/description_review.py +86 -0
  55. upload_assistant-3.9/src/disc_menus.py +401 -0
  56. upload_assistant-3.9/src/discparse.py +1179 -0
  57. upload_assistant-3.9/src/dupe_checking.py +1044 -0
  58. upload_assistant-3.9/src/dynamic_hdr_plot.py +179 -0
  59. upload_assistant-3.9/src/early_tasks.py +144 -0
  60. upload_assistant-3.9/src/edition.py +428 -0
  61. upload_assistant-3.9/src/exceptions.py +46 -0
  62. upload_assistant-3.9/src/exportmi.py +568 -0
  63. upload_assistant-3.9/src/genre_map.py +565 -0
  64. upload_assistant-3.9/src/get_desc.py +2305 -0
  65. upload_assistant-3.9/src/get_disc.py +90 -0
  66. upload_assistant-3.9/src/get_name.py +705 -0
  67. upload_assistant-3.9/src/get_source.py +97 -0
  68. upload_assistant-3.9/src/get_tracker_data.py +572 -0
  69. upload_assistant-3.9/src/getseasonep.py +529 -0
  70. upload_assistant-3.9/src/google_books.py +149 -0
  71. upload_assistant-3.9/src/igdb.py +175 -0
  72. upload_assistant-3.9/src/imdb.py +954 -0
  73. upload_assistant-3.9/src/is_scene.py +273 -0
  74. upload_assistant-3.9/src/languages.py +491 -0
  75. upload_assistant-3.9/src/manualpackage.py +109 -0
  76. upload_assistant-3.9/src/media_extensions.py +7 -0
  77. upload_assistant-3.9/src/mediainfo.py +127 -0
  78. upload_assistant-3.9/src/meta.py +696 -0
  79. upload_assistant-3.9/src/metadata_cache.py +153 -0
  80. upload_assistant-3.9/src/metadata_searching.py +1026 -0
  81. upload_assistant-3.9/src/music/__init__.py +7 -0
  82. upload_assistant-3.9/src/music/analyzer.py +556 -0
  83. upload_assistant-3.9/src/music/models.py +148 -0
  84. upload_assistant-3.9/src/music/prep.py +447 -0
  85. upload_assistant-3.9/src/music/sources.py +615 -0
  86. upload_assistant-3.9/src/music/validation.py +114 -0
  87. upload_assistant-3.9/src/myanonamouse.py +188 -0
  88. upload_assistant-3.9/src/openlibrary.py +196 -0
  89. upload_assistant-3.9/src/post_upload_hooks.py +197 -0
  90. upload_assistant-3.9/src/prep.py +447 -0
  91. upload_assistant-3.9/src/prep_game.py +890 -0
  92. upload_assistant-3.9/src/prep_helpers.py +1801 -0
  93. upload_assistant-3.9/src/qbitwait.py +378 -0
  94. upload_assistant-3.9/src/queuemanage.py +762 -0
  95. upload_assistant-3.9/src/radarr.py +129 -0
  96. upload_assistant-3.9/src/region.py +2419 -0
  97. upload_assistant-3.9/src/rehostimages.py +921 -0
  98. upload_assistant-3.9/src/screenshot_manifest.py +126 -0
  99. upload_assistant-3.9/src/screenshot_review.py +505 -0
  100. upload_assistant-3.9/src/sonarr.py +143 -0
  101. upload_assistant-3.9/src/tags.py +175 -0
  102. upload_assistant-3.9/src/takescreens.py +2872 -0
  103. upload_assistant-3.9/src/temp_paths.py +51 -0
  104. upload_assistant-3.9/src/tmdb.py +2060 -0
  105. upload_assistant-3.9/src/torrent_clients/__init__.py +13 -0
  106. upload_assistant-3.9/src/torrent_clients/deluge.py +28 -0
  107. upload_assistant-3.9/src/torrent_clients/path_utils.py +89 -0
  108. upload_assistant-3.9/src/torrent_clients/qbittorrent.py +2170 -0
  109. upload_assistant-3.9/src/torrent_clients/rtorrent.py +439 -0
  110. upload_assistant-3.9/src/torrent_clients/transmission.py +43 -0
  111. upload_assistant-3.9/src/torrentcreate.py +680 -0
  112. upload_assistant-3.9/src/tracker_descriptions.py +102 -0
  113. upload_assistant-3.9/src/tracker_images.py +35 -0
  114. upload_assistant-3.9/src/trackerhandle.py +408 -0
  115. upload_assistant-3.9/src/trackermeta.py +792 -0
  116. upload_assistant-3.9/src/trackers/AVISTAZ/__init__.py +1350 -0
  117. upload_assistant-3.9/src/trackers/AVISTAZ/avistaz.py +484 -0
  118. upload_assistant-3.9/src/trackers/AVISTAZ/cinemaz.py +388 -0
  119. upload_assistant-3.9/src/trackers/AVISTAZ/privatehd.py +651 -0
  120. upload_assistant-3.9/src/trackers/AVISTAZ/routing.py +360 -0
  121. upload_assistant-3.9/src/trackers/NEXUSPHP/__init__.py +454 -0
  122. upload_assistant-3.9/src/trackers/NEXUSPHP/lajidui.py +406 -0
  123. upload_assistant-3.9/src/trackers/NEXUSPHP/lemonhd.py +228 -0
  124. upload_assistant-3.9/src/trackers/NEXUSPHP/longpt.py +236 -0
  125. upload_assistant-3.9/src/trackers/NEXUSPHP/oneptba.py +275 -0
  126. upload_assistant-3.9/src/trackers/NEXUSPHP/ptcafe.py +419 -0
  127. upload_assistant-3.9/src/trackers/NEXUSPHP/ptfans.py +155 -0
  128. upload_assistant-3.9/src/trackers/NEXUSPHP/ptgtk.py +192 -0
  129. upload_assistant-3.9/src/trackers/NEXUSPHP/ptzone.py +233 -0
  130. upload_assistant-3.9/src/trackers/NEXUSPHP/railgunpt.py +186 -0
  131. upload_assistant-3.9/src/trackers/NEXUSPHP/xingyungept.py +247 -0
  132. upload_assistant-3.9/src/trackers/UNIT3D/UNIT3D_TEMPLATE.py +118 -0
  133. upload_assistant-3.9/src/trackers/UNIT3D/__init__.py +641 -0
  134. upload_assistant-3.9/src/trackers/UNIT3D/aither.py +163 -0
  135. upload_assistant-3.9/src/trackers/UNIT3D/asiancinema.py +195 -0
  136. upload_assistant-3.9/src/trackers/UNIT3D/bitporn.py +238 -0
  137. upload_assistant-3.9/src/trackers/UNIT3D/blutopia.py +290 -0
  138. upload_assistant-3.9/src/trackers/UNIT3D/capybarabr.py +388 -0
  139. upload_assistant-3.9/src/trackers/UNIT3D/cinematik.py +624 -0
  140. upload_assistant-3.9/src/trackers/UNIT3D/darkpeers.py +657 -0
  141. upload_assistant-3.9/src/trackers/UNIT3D/dreadvault.py +72 -0
  142. upload_assistant-3.9/src/trackers/UNIT3D/emuwarez.py +637 -0
  143. upload_assistant-3.9/src/trackers/UNIT3D/hawkeuno.py +352 -0
  144. upload_assistant-3.9/src/trackers/UNIT3D/homiehelpdesk.py +238 -0
  145. upload_assistant-3.9/src/trackers/UNIT3D/infinityhd.py +189 -0
  146. upload_assistant-3.9/src/trackers/UNIT3D/itatorrents.py +185 -0
  147. upload_assistant-3.9/src/trackers/UNIT3D/lastdigitalunderground.py +211 -0
  148. upload_assistant-3.9/src/trackers/UNIT3D/latteam.py +321 -0
  149. upload_assistant-3.9/src/trackers/UNIT3D/locadora.py +142 -0
  150. upload_assistant-3.9/src/trackers/UNIT3D/lst.py +323 -0
  151. upload_assistant-3.9/src/trackers/UNIT3D/luminarr.py +64 -0
  152. upload_assistant-3.9/src/trackers/UNIT3D/midnightscene.py +250 -0
  153. upload_assistant-3.9/src/trackers/UNIT3D/nordicquality.py +178 -0
  154. upload_assistant-3.9/src/trackers/UNIT3D/oldtoonsworld.py +219 -0
  155. upload_assistant-3.9/src/trackers/UNIT3D/onlyencodes.py +278 -0
  156. upload_assistant-3.9/src/trackers/UNIT3D/peergarden.py +267 -0
  157. upload_assistant-3.9/src/trackers/UNIT3D/polishtorrent.py +53 -0
  158. upload_assistant-3.9/src/trackers/UNIT3D/portugas.py +186 -0
  159. upload_assistant-3.9/src/trackers/UNIT3D/racing4everyone.py +137 -0
  160. upload_assistant-3.9/src/trackers/UNIT3D/rastastugan.py +132 -0
  161. upload_assistant-3.9/src/trackers/UNIT3D/reelflix.py +87 -0
  162. upload_assistant-3.9/src/trackers/UNIT3D/retromoviesclub.py +203 -0
  163. upload_assistant-3.9/src/trackers/UNIT3D/rockethd.py +385 -0
  164. upload_assistant-3.9/src/trackers/UNIT3D/samaritano.py +176 -0
  165. upload_assistant-3.9/src/trackers/UNIT3D/seedpool.py +239 -0
  166. upload_assistant-3.9/src/trackers/UNIT3D/shareisland.py +1067 -0
  167. upload_assistant-3.9/src/trackers/UNIT3D/skipthecommercials.py +86 -0
  168. upload_assistant-3.9/src/trackers/UNIT3D/theoldschool.py +134 -0
  169. upload_assistant-3.9/src/trackers/UNIT3D/tlzdigital.py +90 -0
  170. upload_assistant-3.9/src/trackers/UNIT3D/torrentdesi.py +138 -0
  171. upload_assistant-3.9/src/trackers/UNIT3D/torrenteros.py +148 -0
  172. upload_assistant-3.9/src/trackers/UNIT3D/torrenthr.py +65 -0
  173. upload_assistant-3.9/src/trackers/UNIT3D/ulcx.py +308 -0
  174. upload_assistant-3.9/src/trackers/UNIT3D/utopia.py +204 -0
  175. upload_assistant-3.9/src/trackers/UNIT3D/yuscene.py +174 -0
  176. upload_assistant-3.9/src/trackers/UNIT3D/znth.py +499 -0
  177. upload_assistant-3.9/src/trackers/USENET/__init__.py +0 -0
  178. upload_assistant-3.9/src/trackers/USENET/curupira.py +508 -0
  179. upload_assistant-3.9/src/trackers/USENET/drunkenslug.py +188 -0
  180. upload_assistant-3.9/src/trackers/USENET/nzbgeek.py +195 -0
  181. upload_assistant-3.9/src/trackers/USENET/search_helpers.py +238 -0
  182. upload_assistant-3.9/src/trackers/USENET/suio.py +531 -0
  183. upload_assistant-3.9/src/trackers/__init__.py +0 -0
  184. upload_assistant-3.9/src/trackers/alpharatio.py +473 -0
  185. upload_assistant-3.9/src/trackers/amigosshare.py +1296 -0
  186. upload_assistant-3.9/src/trackers/anthelion.py +621 -0
  187. upload_assistant-3.9/src/trackers/beyondhd.py +533 -0
  188. upload_assistant-3.9/src/trackers/bithdtv.py +200 -0
  189. upload_assistant-3.9/src/trackers/bjshare.py +1890 -0
  190. upload_assistant-3.9/src/trackers/brasiltracker.py +1242 -0
  191. upload_assistant-3.9/src/trackers/broadcasthenet.py +736 -0
  192. upload_assistant-3.9/src/trackers/cathoderaytube.py +654 -0
  193. upload_assistant-3.9/src/trackers/common.py +3516 -0
  194. upload_assistant-3.9/src/trackers/digitalcore.py +314 -0
  195. upload_assistant-3.9/src/trackers/filelist.py +478 -0
  196. upload_assistant-3.9/src/trackers/flood.py +272 -0
  197. upload_assistant-3.9/src/trackers/funfile.py +524 -0
  198. upload_assistant-3.9/src/trackers/greatposterwall.py +1186 -0
  199. upload_assistant-3.9/src/trackers/hdbits.py +929 -0
  200. upload_assistant-3.9/src/trackers/hdspace.py +298 -0
  201. upload_assistant-3.9/src/trackers/hdtorrents.py +292 -0
  202. upload_assistant-3.9/src/trackers/immortalseed.py +331 -0
  203. upload_assistant-3.9/src/trackers/iptorrents.py +489 -0
  204. upload_assistant-3.9/src/trackers/makingoff.py +1900 -0
  205. upload_assistant-3.9/src/trackers/mteam.py +631 -0
  206. upload_assistant-3.9/src/trackers/nebulance.py +285 -0
  207. upload_assistant-3.9/src/trackers/orpheus.py +608 -0
  208. upload_assistant-3.9/src/trackers/passthepopcorn.py +1705 -0
  209. upload_assistant-3.9/src/trackers/pterclub.py +477 -0
  210. upload_assistant-3.9/src/trackers/ptskit.py +123 -0
  211. upload_assistant-3.9/src/trackers/retroflix.py +444 -0
  212. upload_assistant-3.9/src/trackers/speedapp.py +365 -0
  213. upload_assistant-3.9/src/trackers/swarmazon.py +212 -0
  214. upload_assistant-3.9/src/trackers/torrentleech.py +427 -0
  215. upload_assistant-3.9/src/trackers/totheglory.py +379 -0
  216. upload_assistant-3.9/src/trackers/tvchaosuk.py +958 -0
  217. upload_assistant-3.9/src/trackersetup.py +1542 -0
  218. upload_assistant-3.9/src/trackerstatus.py +406 -0
  219. upload_assistant-3.9/src/tvdb.py +697 -0
  220. upload_assistant-3.9/src/tvmaze.py +340 -0
  221. upload_assistant-3.9/src/type_utils.py +29 -0
  222. upload_assistant-3.9/src/uphelper.py +850 -0
  223. upload_assistant-3.9/src/uploadscreens.py +1037 -0
  224. upload_assistant-3.9/src/usenetcreate.py +1443 -0
  225. upload_assistant-3.9/src/version.py +5 -0
  226. upload_assistant-3.9/src/video.py +393 -0
  227. upload_assistant-3.9/src/vs.py +161 -0
  228. upload_assistant-3.9/src/webui_progress.py +115 -0
  229. upload_assistant-3.9/src/xxx_keywords.py +43 -0
  230. upload_assistant-3.9/src/xxx_keywords_list.py +4123 -0
  231. upload_assistant-3.9/src/xxx_platforms.py +239 -0
  232. upload_assistant-3.9/tests/test_amigosshare_rules.py +150 -0
  233. upload_assistant-3.9/tests/test_anthelion.py +114 -0
  234. upload_assistant-3.9/tests/test_app_paths.py +81 -0
  235. upload_assistant-3.9/tests/test_artwork_requirements.py +242 -0
  236. upload_assistant-3.9/tests/test_audio_classifier.py +124 -0
  237. upload_assistant-3.9/tests/test_audio_spectrogram.py +54 -0
  238. upload_assistant-3.9/tests/test_audiobook_series_titles.py +34 -0
  239. upload_assistant-3.9/tests/test_avistaz_names.py +85 -0
  240. upload_assistant-3.9/tests/test_avistaz_network_routing.py +116 -0
  241. upload_assistant-3.9/tests/test_avistaz_rules.py +57 -0
  242. upload_assistant-3.9/tests/test_avistaz_screenshots_and_desc.py +102 -0
  243. upload_assistant-3.9/tests/test_bbcode.py +25 -0
  244. upload_assistant-3.9/tests/test_binaries.py +66 -0
  245. upload_assistant-3.9/tests/test_bitporn.py +76 -0
  246. upload_assistant-3.9/tests/test_bjshare.py +184 -0
  247. upload_assistant-3.9/tests/test_bjshare_book_titles.py +56 -0
  248. upload_assistant-3.9/tests/test_book_detection.py +98 -0
  249. upload_assistant-3.9/tests/test_broadcasthenet.py +71 -0
  250. upload_assistant-3.9/tests/test_cathoderaytube.py +329 -0
  251. upload_assistant-3.9/tests/test_check_requirements.py +27 -0
  252. upload_assistant-3.9/tests/test_cinemaz_rules.py +68 -0
  253. upload_assistant-3.9/tests/test_cli_smoke.py +61 -0
  254. upload_assistant-3.9/tests/test_client_path_handling.py +108 -0
  255. upload_assistant-3.9/tests/test_clients.py +88 -0
  256. upload_assistant-3.9/tests/test_clients_tracker_comments.py +60 -0
  257. upload_assistant-3.9/tests/test_config_generator_tag_overrides.py +84 -0
  258. upload_assistant-3.9/tests/test_config_helpers.py +26 -0
  259. upload_assistant-3.9/tests/test_console_links.py +56 -0
  260. upload_assistant-3.9/tests/test_curupira.py +17 -0
  261. upload_assistant-3.9/tests/test_darkpeers.py +259 -0
  262. upload_assistant-3.9/tests/test_description_review.py +145 -0
  263. upload_assistant-3.9/tests/test_description_tag_overrides.py +58 -0
  264. upload_assistant-3.9/tests/test_digitalcore.py +8 -0
  265. upload_assistant-3.9/tests/test_disc_menus.py +18 -0
  266. upload_assistant-3.9/tests/test_dreadvault.py +79 -0
  267. upload_assistant-3.9/tests/test_dvd_screenshots.py +21 -0
  268. upload_assistant-3.9/tests/test_dynamic_hdr_plot.py +121 -0
  269. upload_assistant-3.9/tests/test_early_tasks.py +99 -0
  270. upload_assistant-3.9/tests/test_edition.py +58 -0
  271. upload_assistant-3.9/tests/test_example_config_structure.py +40 -0
  272. upload_assistant-3.9/tests/test_execution_preview.py +89 -0
  273. upload_assistant-3.9/tests/test_exportmi.py +250 -0
  274. upload_assistant-3.9/tests/test_ffmpeg_binary.py +25 -0
  275. upload_assistant-3.9/tests/test_flood.py +71 -0
  276. upload_assistant-3.9/tests/test_get_desc_mediainfo.py +26 -0
  277. upload_assistant-3.9/tests/test_get_dvd_mediainfo.py +159 -0
  278. upload_assistant-3.9/tests/test_get_name_music.py +45 -0
  279. upload_assistant-3.9/tests/test_get_name_xxx.py +38 -0
  280. upload_assistant-3.9/tests/test_greatposterwall_image_host.py +76 -0
  281. upload_assistant-3.9/tests/test_hardcoded_subtitle_detection.py +7 -0
  282. upload_assistant-3.9/tests/test_hardcoded_subtitle_language.py +11 -0
  283. upload_assistant-3.9/tests/test_hawkeuno.py +37 -0
  284. upload_assistant-3.9/tests/test_hdbits.py +26 -0
  285. upload_assistant-3.9/tests/test_hdbits_images.py +42 -0
  286. upload_assistant-3.9/tests/test_hdbits_search.py +67 -0
  287. upload_assistant-3.9/tests/test_homiehelpdesk.py +38 -0
  288. upload_assistant-3.9/tests/test_imdb_cache.py +56 -0
  289. upload_assistant-3.9/tests/test_lostimg_screenshot_validation.py +16 -0
  290. upload_assistant-3.9/tests/test_lst.py +95 -0
  291. upload_assistant-3.9/tests/test_makingoff_dupes.py +6 -0
  292. upload_assistant-3.9/tests/test_makingoff_index.py +72 -0
  293. upload_assistant-3.9/tests/test_makingoff_rules.py +71 -0
  294. upload_assistant-3.9/tests/test_manual_category.py +32 -0
  295. upload_assistant-3.9/tests/test_meta.py +36 -0
  296. upload_assistant-3.9/tests/test_metadata_cache.py +55 -0
  297. upload_assistant-3.9/tests/test_metadata_search_year.py +19 -0
  298. upload_assistant-3.9/tests/test_midnightscene.py +73 -0
  299. upload_assistant-3.9/tests/test_mkbrr.py +70 -0
  300. upload_assistant-3.9/tests/test_music_architecture.py +990 -0
  301. upload_assistant-3.9/tests/test_music_cover_hosting.py +34 -0
  302. upload_assistant-3.9/tests/test_new_nexusphp_trackers.py +100 -0
  303. upload_assistant-3.9/tests/test_nordicquality.py +131 -0
  304. upload_assistant-3.9/tests/test_nzbgeek.py +65 -0
  305. upload_assistant-3.9/tests/test_openlibrary_cache.py +63 -0
  306. upload_assistant-3.9/tests/test_peergarden.py +261 -0
  307. upload_assistant-3.9/tests/test_portuguese_subtitles.py +37 -0
  308. upload_assistant-3.9/tests/test_post_upload_hooks.py +91 -0
  309. upload_assistant-3.9/tests/test_prep_early_screenshots.py +326 -0
  310. upload_assistant-3.9/tests/test_privatehd_rules.py +67 -0
  311. upload_assistant-3.9/tests/test_qbittorrent_proxy_retry.py +160 -0
  312. upload_assistant-3.9/tests/test_rastastugan.py +23 -0
  313. upload_assistant-3.9/tests/test_rehostimages.py +150 -0
  314. upload_assistant-3.9/tests/test_retromoviesclub.py +50 -0
  315. upload_assistant-3.9/tests/test_rockethd.py +55 -0
  316. upload_assistant-3.9/tests/test_samaritano.py +55 -0
  317. upload_assistant-3.9/tests/test_screenshot_par.py +19 -0
  318. upload_assistant-3.9/tests/test_screenshot_review.py +296 -0
  319. upload_assistant-3.9/tests/test_seedpool.py +31 -0
  320. upload_assistant-3.9/tests/test_shell_completions.py +31 -0
  321. upload_assistant-3.9/tests/test_stdin_paths.py +55 -0
  322. upload_assistant-3.9/tests/test_takescreens_ffmpeg.py +185 -0
  323. upload_assistant-3.9/tests/test_temp_paths.py +50 -0
  324. upload_assistant-3.9/tests/test_tlzdigital.py +63 -0
  325. upload_assistant-3.9/tests/test_tonemapped_header_import.py +298 -0
  326. upload_assistant-3.9/tests/test_torrent_reuse.py +215 -0
  327. upload_assistant-3.9/tests/test_torrenthr.py +35 -0
  328. upload_assistant-3.9/tests/test_torrentleech_description.py +40 -0
  329. upload_assistant-3.9/tests/test_tracker_descriptions.py +260 -0
  330. upload_assistant-3.9/tests/test_tracker_id_args.py +293 -0
  331. upload_assistant-3.9/tests/test_tracker_metadata_cache.py +59 -0
  332. upload_assistant-3.9/tests/test_tracker_setup.py +78 -0
  333. upload_assistant-3.9/tests/test_tracker_tags.py +35 -0
  334. upload_assistant-3.9/tests/test_ulcx_rules.py +214 -0
  335. upload_assistant-3.9/tests/test_unit3d_flags.py +301 -0
  336. upload_assistant-3.9/tests/test_unit3d_search_existing.py +76 -0
  337. upload_assistant-3.9/tests/test_update_notification.py +29 -0
  338. upload_assistant-3.9/tests/test_uphelper_prompts.py +169 -0
  339. upload_assistant-3.9/tests/test_upload_xxx.py +16 -0
  340. upload_assistant-3.9/tests/test_uploadscreens.py +236 -0
  341. upload_assistant-3.9/tests/test_usenet_cli.py +51 -0
  342. upload_assistant-3.9/tests/test_usenet_par2.py +88 -0
  343. upload_assistant-3.9/tests/test_video_hdr.py +23 -0
  344. upload_assistant-3.9/tests/test_webui_config_paths.py +47 -0
  345. upload_assistant-3.9/tests/test_webui_conpty.py +87 -0
  346. upload_assistant-3.9/tests/test_webui_kill.py +132 -0
  347. upload_assistant-3.9/tests/test_webui_subprocess_ui.py +51 -0
  348. upload_assistant-3.9/tests/test_webui_trackers.py +88 -0
  349. upload_assistant-3.9/tests/test_windows_release_workflow.py +43 -0
  350. upload_assistant-3.9/tests/test_windows_update_atomic_install.py +112 -0
  351. upload_assistant-3.9/tests/test_xxx_contact_sheets.py +195 -0
  352. upload_assistant-3.9/tests/test_xxx_detection.py +131 -0
  353. upload_assistant-3.9/tests/test_zipline_upload.py +135 -0
  354. upload_assistant-3.9/tests/test_znth.py +92 -0
  355. upload_assistant-3.9/upload.py +3201 -0
  356. upload_assistant-3.9/upload_assistant.egg-info/PKG-INFO +503 -0
  357. upload_assistant-3.9/upload_assistant.egg-info/SOURCES.txt +494 -0
  358. upload_assistant-3.9/upload_assistant.egg-info/dependency_links.txt +1 -0
  359. upload_assistant-3.9/upload_assistant.egg-info/entry_points.txt +3 -0
  360. upload_assistant-3.9/upload_assistant.egg-info/requires.txt +63 -0
  361. upload_assistant-3.9/upload_assistant.egg-info/top_level.txt +6 -0
  362. upload_assistant-3.9/web_ui/__init__.py +4 -0
  363. upload_assistant-3.9/web_ui/access_log.py +182 -0
  364. upload_assistant-3.9/web_ui/auth.py +640 -0
  365. upload_assistant-3.9/web_ui/server.py +6133 -0
  366. upload_assistant-3.9/web_ui/static/css/theme.css +261 -0
  367. upload_assistant-3.9/web_ui/static/favicon.ico +0 -0
  368. upload_assistant-3.9/web_ui/static/img/apple-touch-icon.png +0 -0
  369. upload_assistant-3.9/web_ui/static/img/icon-192.png +0 -0
  370. upload_assistant-3.9/web_ui/static/img/logo.png +0 -0
  371. upload_assistant-3.9/web_ui/static/img/logo.svg +177 -0
  372. upload_assistant-3.9/web_ui/static/img/providers/discogs.svg +20 -0
  373. upload_assistant-3.9/web_ui/static/img/providers/douban.svg +1 -0
  374. upload_assistant-3.9/web_ui/static/img/providers/google_books.svg +1 -0
  375. upload_assistant-3.9/web_ui/static/img/providers/igdb.svg +13 -0
  376. upload_assistant-3.9/web_ui/static/img/providers/igdb_light.svg +11 -0
  377. upload_assistant-3.9/web_ui/static/img/providers/imdb.svg +3 -0
  378. upload_assistant-3.9/web_ui/static/img/providers/mal.svg +21 -0
  379. upload_assistant-3.9/web_ui/static/img/providers/musicbrainz.ico +0 -0
  380. upload_assistant-3.9/web_ui/static/img/providers/openlibrary.svg +123 -0
  381. upload_assistant-3.9/web_ui/static/img/providers/steam.svg +1 -0
  382. upload_assistant-3.9/web_ui/static/img/providers/tmdb.svg +1 -0
  383. upload_assistant-3.9/web_ui/static/img/providers/tvdb.svg +1 -0
  384. upload_assistant-3.9/web_ui/static/img/providers/tvmaze.svg +17 -0
  385. upload_assistant-3.9/web_ui/static/img/trackers/1ptba.png +0 -0
  386. upload_assistant-3.9/web_ui/static/img/trackers/aither.png +0 -0
  387. upload_assistant-3.9/web_ui/static/img/trackers/alpharatio.png +0 -0
  388. upload_assistant-3.9/web_ui/static/img/trackers/amigosshare.png +0 -0
  389. upload_assistant-3.9/web_ui/static/img/trackers/anthelion.png +0 -0
  390. upload_assistant-3.9/web_ui/static/img/trackers/asiancinema.png +0 -0
  391. upload_assistant-3.9/web_ui/static/img/trackers/avistaz.png +0 -0
  392. upload_assistant-3.9/web_ui/static/img/trackers/beyondhd.png +0 -0
  393. upload_assistant-3.9/web_ui/static/img/trackers/bithdtv.png +0 -0
  394. upload_assistant-3.9/web_ui/static/img/trackers/bitporn.png +0 -0
  395. upload_assistant-3.9/web_ui/static/img/trackers/bjshare.png +0 -0
  396. upload_assistant-3.9/web_ui/static/img/trackers/blutopia.png +0 -0
  397. upload_assistant-3.9/web_ui/static/img/trackers/brasiltracker.png +0 -0
  398. upload_assistant-3.9/web_ui/static/img/trackers/broadcasthenet.png +0 -0
  399. upload_assistant-3.9/web_ui/static/img/trackers/capybarabr.png +0 -0
  400. upload_assistant-3.9/web_ui/static/img/trackers/cathoderaytube.png +0 -0
  401. upload_assistant-3.9/web_ui/static/img/trackers/cinematik.png +0 -0
  402. upload_assistant-3.9/web_ui/static/img/trackers/cinemaz.png +0 -0
  403. upload_assistant-3.9/web_ui/static/img/trackers/curupira.png +0 -0
  404. upload_assistant-3.9/web_ui/static/img/trackers/darkpeers.png +0 -0
  405. upload_assistant-3.9/web_ui/static/img/trackers/desitorrents.png +0 -0
  406. upload_assistant-3.9/web_ui/static/img/trackers/digitalcore.png +0 -0
  407. upload_assistant-3.9/web_ui/static/img/trackers/dreadvault.png +0 -0
  408. upload_assistant-3.9/web_ui/static/img/trackers/drunkenslug.png +0 -0
  409. upload_assistant-3.9/web_ui/static/img/trackers/emuwarez.png +0 -0
  410. upload_assistant-3.9/web_ui/static/img/trackers/filelist.png +0 -0
  411. upload_assistant-3.9/web_ui/static/img/trackers/flood.png +0 -0
  412. upload_assistant-3.9/web_ui/static/img/trackers/funfile.png +0 -0
  413. upload_assistant-3.9/web_ui/static/img/trackers/greatposterwall.png +0 -0
  414. upload_assistant-3.9/web_ui/static/img/trackers/hawkeuno.png +0 -0
  415. upload_assistant-3.9/web_ui/static/img/trackers/hdbits.png +0 -0
  416. upload_assistant-3.9/web_ui/static/img/trackers/hdspace.png +0 -0
  417. upload_assistant-3.9/web_ui/static/img/trackers/hdtorrents.png +0 -0
  418. upload_assistant-3.9/web_ui/static/img/trackers/homiehelpdesk.png +0 -0
  419. upload_assistant-3.9/web_ui/static/img/trackers/immortalseed.png +0 -0
  420. upload_assistant-3.9/web_ui/static/img/trackers/infinityhd.png +0 -0
  421. upload_assistant-3.9/web_ui/static/img/trackers/iptorrents.png +0 -0
  422. upload_assistant-3.9/web_ui/static/img/trackers/itatorrents.png +0 -0
  423. upload_assistant-3.9/web_ui/static/img/trackers/lajidui.png +0 -0
  424. upload_assistant-3.9/web_ui/static/img/trackers/lastdigitalunderground.png +0 -0
  425. upload_assistant-3.9/web_ui/static/img/trackers/latteam.png +0 -0
  426. upload_assistant-3.9/web_ui/static/img/trackers/lemonhd.png +0 -0
  427. upload_assistant-3.9/web_ui/static/img/trackers/locadora.png +0 -0
  428. upload_assistant-3.9/web_ui/static/img/trackers/longpt.png +0 -0
  429. upload_assistant-3.9/web_ui/static/img/trackers/lst.png +0 -0
  430. upload_assistant-3.9/web_ui/static/img/trackers/luminarr.png +0 -0
  431. upload_assistant-3.9/web_ui/static/img/trackers/makingoff.png +0 -0
  432. upload_assistant-3.9/web_ui/static/img/trackers/midnightscene.png +0 -0
  433. upload_assistant-3.9/web_ui/static/img/trackers/mteam.png +0 -0
  434. upload_assistant-3.9/web_ui/static/img/trackers/nebulance.png +0 -0
  435. upload_assistant-3.9/web_ui/static/img/trackers/nordicquality.png +0 -0
  436. upload_assistant-3.9/web_ui/static/img/trackers/nzbgeek.png +0 -0
  437. upload_assistant-3.9/web_ui/static/img/trackers/oldtoonsworld.png +0 -0
  438. upload_assistant-3.9/web_ui/static/img/trackers/onlyencodes.png +0 -0
  439. upload_assistant-3.9/web_ui/static/img/trackers/orpheus.png +0 -0
  440. upload_assistant-3.9/web_ui/static/img/trackers/passthepopcorn.png +0 -0
  441. upload_assistant-3.9/web_ui/static/img/trackers/peergarden.png +0 -0
  442. upload_assistant-3.9/web_ui/static/img/trackers/polishtorrent.png +0 -0
  443. upload_assistant-3.9/web_ui/static/img/trackers/portugas.png +0 -0
  444. upload_assistant-3.9/web_ui/static/img/trackers/privatehd.png +0 -0
  445. upload_assistant-3.9/web_ui/static/img/trackers/ptcafe.png +0 -0
  446. upload_assistant-3.9/web_ui/static/img/trackers/pterclub.png +0 -0
  447. upload_assistant-3.9/web_ui/static/img/trackers/ptfans.png +0 -0
  448. upload_assistant-3.9/web_ui/static/img/trackers/ptgtk.png +0 -0
  449. upload_assistant-3.9/web_ui/static/img/trackers/ptskit.png +0 -0
  450. upload_assistant-3.9/web_ui/static/img/trackers/ptzone.png +0 -0
  451. upload_assistant-3.9/web_ui/static/img/trackers/racing4everyone.png +0 -0
  452. upload_assistant-3.9/web_ui/static/img/trackers/railgunpt.png +0 -0
  453. upload_assistant-3.9/web_ui/static/img/trackers/rastastugan.png +0 -0
  454. upload_assistant-3.9/web_ui/static/img/trackers/reelflix.png +0 -0
  455. upload_assistant-3.9/web_ui/static/img/trackers/retroflix.png +0 -0
  456. upload_assistant-3.9/web_ui/static/img/trackers/retromoviesclub.png +0 -0
  457. upload_assistant-3.9/web_ui/static/img/trackers/rockethd.png +0 -0
  458. upload_assistant-3.9/web_ui/static/img/trackers/samaritano.png +0 -0
  459. upload_assistant-3.9/web_ui/static/img/trackers/seedpool.png +0 -0
  460. upload_assistant-3.9/web_ui/static/img/trackers/shareisland.png +0 -0
  461. upload_assistant-3.9/web_ui/static/img/trackers/skipthecommercials.png +0 -0
  462. upload_assistant-3.9/web_ui/static/img/trackers/speedapp.png +0 -0
  463. upload_assistant-3.9/web_ui/static/img/trackers/swarmazon.png +0 -0
  464. upload_assistant-3.9/web_ui/static/img/trackers/theleachzone.png +0 -0
  465. upload_assistant-3.9/web_ui/static/img/trackers/theoldschool.png +0 -0
  466. upload_assistant-3.9/web_ui/static/img/trackers/torrenteros.png +0 -0
  467. upload_assistant-3.9/web_ui/static/img/trackers/torrenthr.png +0 -0
  468. upload_assistant-3.9/web_ui/static/img/trackers/torrentleech.png +0 -0
  469. upload_assistant-3.9/web_ui/static/img/trackers/totheglory.png +0 -0
  470. upload_assistant-3.9/web_ui/static/img/trackers/tvchaosuk.png +0 -0
  471. upload_assistant-3.9/web_ui/static/img/trackers/ulcx.png +0 -0
  472. upload_assistant-3.9/web_ui/static/img/trackers/utopia.png +0 -0
  473. upload_assistant-3.9/web_ui/static/img/trackers/xingyungept.png +0 -0
  474. upload_assistant-3.9/web_ui/static/img/trackers/yuscene.png +0 -0
  475. upload_assistant-3.9/web_ui/static/img/trackers/zenith.png +0 -0
  476. upload_assistant-3.9/web_ui/static/img/webui-icons/book.svg +6 -0
  477. upload_assistant-3.9/web_ui/static/img/webui-icons/file-structure.svg +2 -0
  478. upload_assistant-3.9/web_ui/static/img/webui-icons/gamepad.svg +4 -0
  479. upload_assistant-3.9/web_ui/static/img/webui-icons/movie.svg +7 -0
  480. upload_assistant-3.9/web_ui/static/img/webui-icons/music.svg +9 -0
  481. upload_assistant-3.9/web_ui/static/img/webui-icons/palette.svg +8 -0
  482. upload_assistant-3.9/web_ui/static/img/webui-icons/screenshots.svg +17 -0
  483. upload_assistant-3.9/web_ui/static/img/webui-icons/settings.svg +4 -0
  484. upload_assistant-3.9/web_ui/static/img/webui-icons/tv.svg +20 -0
  485. upload_assistant-3.9/web_ui/static/js/app.js +6626 -0
  486. upload_assistant-3.9/web_ui/static/js/config_app.js +3988 -0
  487. upload_assistant-3.9/web_ui/static/js/package-lock.json +3866 -0
  488. upload_assistant-3.9/web_ui/static/js/package.json +20 -0
  489. upload_assistant-3.9/web_ui/static/js/shared_utils.js +213 -0
  490. upload_assistant-3.9/web_ui/static/js/web_ui/static/js/package-lock.json +6 -0
  491. upload_assistant-3.9/web_ui/static/manifest.webmanifest +20 -0
  492. upload_assistant-3.9/web_ui/templates/config.html +81 -0
  493. upload_assistant-3.9/web_ui/templates/index.html +130 -0
  494. upload_assistant-3.9/web_ui/templates/login.html +320 -0
  495. upload_assistant-3.9/web_ui/templates/login_recovery.html +128 -0
@@ -0,0 +1,116 @@
1
+ # Upload Assistant Public License (UAPL) v1.0
2
+ Copyright © Audionut & wastaken7
3
+
4
+ Permission is hereby granted to any person obtaining a copy of this software and
5
+ associated documentation files (the “Software”) to use, copy, modify, merge,
6
+ publish, and distribute the Software, subject to the following conditions:
7
+
8
+ ---
9
+
10
+ ## 1. Branding and Attribution Protection
11
+
12
+ **1.1.**
13
+ The names **“Upload Assistant”**, **“Audionut”**, and any confusingly similar
14
+ variants **may not** be used in derivative works in a manner that suggests the
15
+ derivative is an official version, endorsed version, approved continuation, or
16
+ authorized build of the original project.
17
+
18
+ **1.2.**
19
+ Derivative works **must not** replace, modify, rename, or repurpose:
20
+ - Any identifiers, markers, strings, signatures, metadata blocks, timestamps,
21
+ or other automated output branding generated by the Software, **except to remove such identifiers entirely**;
22
+ - **Any license headers or attribution notices in source files must be preserved**.
23
+
24
+
25
+ **1.3.**
26
+ Derivative works **may not** introduce new identifiers, branding, promotional
27
+ markings, or tool-generated labels or HTTP/S links that imply the derivative is:
28
+ - an **upload tool**,
29
+ - a replacement or continuation of **Upload Assistant**,
30
+ - or any other tool intended to performing the same function or role,
31
+ by **reusing or adapting the original branding mechanisms, output structures,
32
+ or auto-generated identifiers** provided by the Software.
33
+
34
+ **1.4.**
35
+ The Software and derivative works **must not** misrepresent authorship,
36
+ affiliation, origin, identity, project lineage, or repository linkage.
37
+
38
+ ---
39
+
40
+ ## 2. Fork Disclosure Requirement
41
+
42
+ Any distributed derivative work **must disclose** that it is a fork or
43
+ modification of the original “Upload Assistant” project and must include a clear
44
+ notice that it is **not** the official version.
45
+
46
+ ---
47
+
48
+ ## 3. Credential and Key Restrictions
49
+
50
+ **3.1.**
51
+ The embedded, obfuscated key included with the Software is licensed
52
+ **solely for use in the official “Upload Assistant” project**.
53
+
54
+ **3.2.**
55
+ You may **not**:
56
+ - extract, reuse, modify, deobfuscate, or redistribute the key;
57
+ - use the key in forks, derivative works, modified builds, or alternative tools;
58
+ - circumvent or attempt to circumvent any obfuscation or protective measures.
59
+
60
+ **3.3.**
61
+ Any use of the key outside the official project is strictly prohibited and
62
+ terminates all rights granted by this license.
63
+
64
+ ---
65
+
66
+ ## 4. Modification and Distribution
67
+
68
+ You may modify the Software and distribute such modifications, provided that:
69
+
70
+ **4.1.**
71
+ You comply with all branding and credential restrictions in Sections 1 and 3.
72
+
73
+ **4.2.**
74
+ You retain this license text in full.
75
+
76
+ **4.3.**
77
+ You include a notice stating:
78
+ *“This is a modified version of the Upload Assistant project and is not
79
+ affiliated with or endorsed by Audionut.”*
80
+
81
+ **4.4.**
82
+ You do not imply that the upstream project or author endorses your modifications.
83
+
84
+ ---
85
+
86
+ ## 5. No Warranty
87
+
88
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
89
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
90
+ FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
91
+
92
+ THE AUTHOR SHALL NOT BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY
93
+ ARISING FROM THE SOFTWARE OR ITS USE.
94
+
95
+ ---
96
+
97
+ ## 6. Termination
98
+
99
+ Any breach of Sections **1**, **2**, or **3** results in **automatic and immediate
100
+ termination** of all rights granted under this license.
101
+
102
+ Upon termination, you must cease all distribution and delete all copies of the
103
+ Software and derivative works in your possession.
104
+
105
+ ---
106
+
107
+ ## 7. Compatibility
108
+
109
+ This license is **not** an OSI-approved license.
110
+ Software licensed under this license may not be combined with code under
111
+ licenses that require unrestricted modification or removal of branding or
112
+ identification clauses.
113
+
114
+ ---
115
+
116
+ **END OF LICENSE**
@@ -0,0 +1,503 @@
1
+ Metadata-Version: 2.4
2
+ Name: upload-assistant
3
+ Version: 3.9
4
+ Summary: A simple tool to take the work out of uploading.
5
+ Author: wastaken7
6
+ Maintainer: wastaken7
7
+ Project-URL: Homepage, https://github.com/wastaken7/Upload-Assistant
8
+ Project-URL: Documentation, https://github.com/wastaken7/Upload-Assistant/tree/master/docs
9
+ Project-URL: Issues, https://github.com/wastaken7/Upload-Assistant/issues
10
+ Project-URL: Source, https://github.com/wastaken7/Upload-Assistant
11
+ Keywords: media,torrent,upload-assistant
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: End Users/Desktop
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Classifier: Topic :: Multimedia
18
+ Classifier: Topic :: Utilities
19
+ Requires-Python: >=3.14
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: aiofiles==25.1.0
23
+ Requires-Dist: aiohttp==3.14.3
24
+ Requires-Dist: anitopy==2.1.1
25
+ Requires-Dist: argcomplete>=3.7.2
26
+ Requires-Dist: argon2-cffi==25.1.0
27
+ Requires-Dist: babel==2.17.0
28
+ Requires-Dist: bbcode==1.1.0
29
+ Requires-Dist: beautifulsoup4==4.14.2
30
+ Requires-Dist: bencode-py==4.0.0
31
+ Requires-Dist: cachelib==0.13.0
32
+ Requires-Dist: certifi==2026.1.4
33
+ Requires-Dist: cli-ui==0.19.0
34
+ Requires-Dist: click==8.4.2
35
+ Requires-Dist: cloudscraper==1.2.71
36
+ Requires-Dist: cryptography==50.0.0
37
+ Requires-Dist: defusedxml==0.7.1
38
+ Requires-Dist: deluge-client==1.10.2
39
+ Requires-Dist: discord-py==2.6.4
40
+ Requires-Dist: ffmpeg-python==0.2.0
41
+ Requires-Dist: flask==3.1.3
42
+ Requires-Dist: flask-cors==6.0.2
43
+ Requires-Dist: flask-limiter==3.11.0
44
+ Requires-Dist: flask-session==0.8.0
45
+ Requires-Dist: guessit==3.8.0
46
+ Requires-Dist: httpx==0.28.1
47
+ Requires-Dist: jinja2==3.1.6
48
+ Requires-Dist: keyring==25.6.0
49
+ Requires-Dist: langcodes==3.5.1
50
+ Requires-Dist: language-data==1.4.0
51
+ Requires-Dist: librosa>=1.0.0
52
+ Requires-Dist: lxml==6.1.0
53
+ Requires-Dist: matplotlib>=3.10.9
54
+ Requires-Dist: mobi==0.4.1
55
+ Requires-Dist: mutagen==1.47.0
56
+ Requires-Dist: nest-asyncio==1.6.0
57
+ Requires-Dist: numpy==2.4.4
58
+ Requires-Dist: packaging<25,>=21
59
+ Requires-Dist: pillow==12.3.0
60
+ Requires-Dist: psutil==7.2.2
61
+ Requires-Dist: pycountry==24.6.1
62
+ Requires-Dist: pyimgbox==1.0.7
63
+ Requires-Dist: pymediainfo==7.0.1
64
+ Requires-Dist: pymupdf==1.28.0
65
+ Requires-Dist: pyotp==2.9.0
66
+ Requires-Dist: pywinpty==3.0.5; sys_platform == "win32"
67
+ Requires-Dist: qbittorrent-api==2026.6.0
68
+ Requires-Dist: rarfile==4.2
69
+ Requires-Dist: regex==2025.11.3
70
+ Requires-Dist: requests==2.33.0
71
+ Requires-Dist: resvg-py==0.3.3
72
+ Requires-Dist: rich==13.9.4
73
+ Requires-Dist: setuptools==83.0.0
74
+ Requires-Dist: tmdbsimple==2.9.1
75
+ Requires-Dist: torf==4.3.0
76
+ Requires-Dist: tqdm==4.67.1
77
+ Requires-Dist: transmission-rpc==7.0.11
78
+ Requires-Dist: tvdb-v4-official==1.1.0
79
+ Requires-Dist: typing-extensions==4.15.0
80
+ Requires-Dist: unidecode==1.4.0
81
+ Requires-Dist: urllib3==2.7.0
82
+ Requires-Dist: waitress==3.0.2
83
+ Dynamic: license-file
84
+
85
+ <div align="center">
86
+ <img src="docs/assets/logo.svg" alt="Upload Assistant Logo" width="160" height="160" />
87
+ <h1>Upload-Assistant</h1>
88
+ <p>Streamline media preparation and uploads across private trackers & usenet indexers.</p>
89
+
90
+ [![Python Version](https://img.shields.io/badge/Python-3.14%2B-blue?logo=python&logoColor=white)](https://www.python.org/) [![License](https://img.shields.io/badge/License-UAPL%20v1.0-orange)](LICENSE) [![Ruff](https://img.shields.io/badge/Ruff-000000?logo=ruff&logoColor=white)](https://github.com/astral-sh/ruff) [![Pyright](https://img.shields.io/badge/Pyright-strict-brightgreen)](https://github.com/microsoft/pyright) [![code style: prettier](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io) [![Docker Image CI](https://github.com/wastaken7/Upload-Assistant/actions/workflows/docker-image.yml/badge.svg)](https://github.com/wastaken7/Upload-Assistant/actions/workflows/docker-image.yml)
91
+
92
+ </div>
93
+
94
+ > [!IMPORTANT]
95
+ > **This is a modified version of the Upload Assistant project and is not affiliated with or endorsed by Audionut.**
96
+
97
+ ## Table of Contents
98
+
99
+ - [Fork Features & Differences from Upstream (Audionut/Upload-Assistant)](#fork-features--differences-from-upstream-audionutupload-assistant)
100
+ - [1. New Media Category Support](#1-new-media-category-support)
101
+ - [2. Audio Stream Spectrogram Generation](#2-audio-stream-spectrogram-generation)
102
+ - [3. qBittorrent Bandwidth Control](#3-qbittorrent-bandwidth-control)
103
+ - [4. Argument-Embedded Text Queue](#4-argument-embedded-text-queue)
104
+ - [5. Usenet & Indexer Posting](#5-usenet--indexer-posting)
105
+ - [6. Interactive Screenshot Review Workflow](#6-interactive-screenshot-review-workflow)
106
+ - [7. Persistent TTL-Based Metadata Cache](#7-persistent-ttl-based-metadata-cache)
107
+ - [8. Modern Web UI & Real-Time Engine](#8-modern-web-ui--real-time-engine)
108
+ - [Supported Sites](#supported-sites)
109
+ - [Setup Guide](#setup-guide)
110
+ - [Step 1: Install Required Tools](#step-1-install-required-tools)
111
+ - [Step 2: Download Upload Assistant](#step-2-download-upload-assistant-linuxmacos)
112
+ - [Step 3: Install Python Packages](#step-3-install-python-packages-linuxmacos)
113
+ - [Step 4: Configure the Assistant](#step-4-configure-the-assistant)
114
+ - [Updating](#updating)
115
+ - [CLI Usage](#cli-usage)
116
+ - [Shell Completions](docs/shell-completions.md)
117
+ - [Docker Usage](#docker-usage)
118
+ - [Seedbox / Linux Install](docs/seedbox.md)
119
+ - [Attributions](#attributions)
120
+ - [Contributors](#contributors)
121
+
122
+ ## Fork Features & Differences from Upstream (Audionut/Upload-Assistant)
123
+
124
+ This branch introduces new media categories and automation features not present in the upstream Audionut repository:
125
+
126
+ ### 1. New Media Category Support
127
+
128
+ - **Ebook & Audiobook (`BOOK` Category)**:
129
+ - **Automatic Type Detection**: Classifies uploads into Ebooks (PDF, EPUB, MOBI), Comics/Manga (CBR, CBZ), Newspapers, or Audiobooks.
130
+ - **Local Metadata Extraction**: Reads metadata from OPF files in EPUB/MOBI, `ComicInfo.xml` in CBR/CBZ, parses tags via Mutagen for audiobooks, and uses PyMuPDF (`fitz`) with checksum-validated regex to extract ISBNs from PDFs.
131
+ - **API Integrations**: Queries **MyAnonamouse (MAM) API**, **Google Books API**, and **OpenLibrary API** for automated metadata lookup.
132
+ - **Artwork & Screenshot Generation**: Renders gallery screenshots from PDF/EPUB pages, extracts cover artwork, and auto-generates `POSTER.png`.
133
+ - **Smart Duplicate Checking**: Custom rules distinguishing formats (e.g., EPUB vs PDF) and audiobooks vs ebooks, with tracker-specific overrides.
134
+ - **Video Game (`GAME` Category)**:
135
+ - **Game Directory Parsing**: Priority scans for executables (`.exe`), disc images (`.iso`), or archives (`.rar`, `.zip`, etc.) in the upload path.
136
+ - **IGDB & Steam Metadata API**: Queries Twitch/IGDB API for storyline, ratings, involved companies, release year, genre mapping, and downloads cover images. Fetches PC system requirements via Steam Store API.
137
+ - **Platform Detection**: Identifies systems (PC, PS5, Switch, Xbox Series X|S, etc.) and enforces platform-group duplicate checks (so Switch uploads aren't blocked by PC dupes).
138
+ - **Platform-specific Prompts**: Attended prompts for console TV standard (NTSC/PAL) and region codes (USA/EUR/JPN) for trackers like BJSHARE.
139
+ - **Music (`MUSIC` Category)**:
140
+ - **Local Tag & Metadata Extraction**: Parses audio tags, cue sheets, and rip logs (EAC, XLD, etc.) using Mutagen to extract tracklists, artists, and audio metadata.
141
+ - **Discogs & MusicBrainz APIs**: Optionally queries external APIs (Discogs via release/master ID or URL, and MusicBrainz) for metadata enrichment.
142
+ - **Artwork & Cover Extraction**: Automatically searches for local cover images or extracts embedded artwork from FLAC/MP3/M4A tags to upload to image hosts.
143
+ - **Preflight & Rule Validation**: Enforces mechanical validation for audio formats, sample/bit rates, track counts, and hybrid setups before uploading.
144
+
145
+ ### 2. Audio Stream Spectrogram Generation
146
+
147
+ - **Spectrogram Extraction & Plotting**: Use `-as` / `--audio-spectrogram` to automatically extract audio streams from MKVs, Blu-ray BDInfo, music tracks, or audiobook chapters using FFmpeg and plot frequency/time graphs (inferno theme) via `librosa` and `matplotlib`. Music and audiobook processing is capped by `audio_spectrogram_max_files`.
148
+ - **Dynamic HDR Metadata Plots**: Use `--dynamic-hdr-plot` to create and upload separate Dolby Vision and HDR10+ metadata plots. The required `dovi_tool` and `hdr10plus_tool` binaries are downloaded automatically for the current platform on first use.
149
+ - **Automated Upload**: Automatically uploads generated spectrograms along with your screenshots for release verification.
150
+ - **Stream Selection**: Supports targeting specific tracks using `-ast` / `--audio-spectrogram-tracks` (e.g., track indexes or `all`).
151
+
152
+ ### 3. qBittorrent Bandwidth Control
153
+
154
+ - **Traffic Control**: Prevents overloading your connection during uploads using `-qbcon` / `--qbit-bw-control`.
155
+ - **Dynamic Wait**: Pauses uploading if your active client upload speed exceeds a threshold (`qbit_bandwidth_threshold` KB/s) and resumes once it stays below the limit for a set time (`qbit_bandwidth_time` seconds).
156
+ - **Safe Rechecking**: Performs a second duplicate check after the bandwidth wait to ensure a duplicate wasn't posted while the client was waiting.
157
+
158
+ ### 4. Argument-Embedded Text Queue
159
+
160
+ - **Custom Parameter Queues**: When running batch uploads with a `.txt` queue file, each line is treated as an independent execution command.
161
+ - **shlex-Split Parsing**: Allows specifying unique CLI arguments (e.g., different IMDB IDs, tags, or tracker targets) for each file/folder on its respective line.
162
+ - **Resume Capability**: Logs processed lines to prevent reprocessing completed uploads if a queue run is interrupted.
163
+
164
+ ### 5. Usenet & Indexer Posting
165
+
166
+ - **Usenet Upload Support**: Automatically archives and splits files/folders (via `7z`), generates parity recovery blocks (via `par2`), and uploads them to Usenet (via `nyuu`).
167
+ - **Anonymity & Privacy**: Generates randomized poster details and obfuscates post subject lines to protect privacy.
168
+ - **Indexer Integration**: Automatically uploads the generated `.nzb` file to configured Usenet indexers.
169
+
170
+ ### 6. Interactive Screenshot Review Workflow
171
+
172
+ - **Manual Screenshot Review**: Inspect, add, delete, or replace/recapture individual frames before uploading through the interactive Web UI.
173
+
174
+ ### 7. Persistent TTL-Based Metadata Cache
175
+
176
+ - **Provider-Scoped API Caching**: Disk-cached metadata for TMDb, IMDb, TVDB, TVmaze, OpenLibrary, IGDB, Discogs, and MusicBrainz.
177
+ - **Performance & Rate Limit Protection**: Configurable TTL and negative caching reuse fetched metadata across runs, avoiding redundant API calls and preventing rate-limiting bans.
178
+
179
+ ### 8. Modern Web UI & Real-Time Engine
180
+
181
+ - **Full Parity Web UI**: Modern interface providing full feature parity with CLI options (`--webui`).
182
+ - **Real-Time Execution & Presets**: Live log streams, real-time preparation preview, preset saving, and interactive screenshot management.
183
+
184
+ ## Supported Sites
185
+
186
+ <details>
187
+ <summary><strong>Click to view Supported Torrent Trackers</strong></summary>
188
+
189
+ | | Site | Usage | Supported Categories |
190
+ | ------------------------------------------------------------------------------------------ | ---------------------- | ---------------------- | ---------------------------- |
191
+ | <img src="web_ui/static/img/trackers/1ptba.png" width="16" height="16" /> | 1PTBA | 1PTBA | MOVIE, TV |
192
+ | <img src="web_ui/static/img/trackers/aither.png" width="16" height="16" /> | Aither | AITHER | MOVIE, TV |
193
+ | <img src="web_ui/static/img/trackers/alpharatio.png" width="16" height="16" /> | Alpharatio | ALPHARATIO | MOVIE, TV |
194
+ | <img src="web_ui/static/img/trackers/amigosshare.png" width="16" height="16" /> | Amigos-Share | AMIGOSSHARE | MOVIE, TV, BOOK, GAME |
195
+ | <img src="web_ui/static/img/trackers/anthelion.png" width="16" height="16" /> | Anthelion | ANTHELION | MOVIE |
196
+ | <img src="web_ui/static/img/trackers/asiancinema.png" width="16" height="16" /> | AsianCinema | ASIANCINEMA | MOVIE, TV |
197
+ | <img src="web_ui/static/img/trackers/avistaz.png" width="16" height="16" /> | AvistaZ | AVISTAZ | MOVIE, TV |
198
+ | <img src="web_ui/static/img/trackers/beyondhd.png" width="16" height="16" /> | Beyond-HD | BEYONDHD | MOVIE, TV |
199
+ | <img src="web_ui/static/img/trackers/bithdtv.png" width="16" height="16" /> | BitHDTV | BITHDTV | MOVIE, TV |
200
+ | <img src="web_ui/static/img/trackers/bitporn.png" width="16" height="16" /> | BitPorn | BITPORN | XXX |
201
+ | <img src="web_ui/static/img/trackers/blutopia.png" width="16" height="16" /> | Blutopia | BLUTOPIA | MOVIE, TV |
202
+ | <img src="web_ui/static/img/trackers/bjshare.png" width="16" height="16" /> | BrasilJapão-Share | BJSHARE | MOVIE, TV, BOOK, GAME, XXX |
203
+ | <img src="web_ui/static/img/trackers/brasiltracker.png" width="16" height="16" /> | BrasilTracker | BRASILTRACKER | MOVIE, TV, BOOK, GAME |
204
+ | <img src="web_ui/static/img/trackers/broadcasthenet.png" width="16" height="16" /> | BroadcasTheNet | BROADCASTHENET | TV |
205
+ | <img src="web_ui/static/img/trackers/capybarabr.png" width="16" height="16" /> | CapybaraBR | CAPYBARABR | MOVIE, TV, BOOK, GAME |
206
+ | <img src="web_ui/static/img/trackers/cathoderaytube.png" width="16" height="16" /> | Cathode-Ray.Tube | CATHODERAYTUBE | MOVIE, TV, GAME |
207
+ | <img src="web_ui/static/img/trackers/cinematik.png" width="16" height="16" /> | Cinematik | CINEMATIK | MOVIE, TV |
208
+ | <img src="web_ui/static/img/trackers/cinemaz.png" width="16" height="16" /> | CinemaZ | CINEMAZ | MOVIE, TV |
209
+ | <img src="web_ui/static/img/trackers/darkpeers.png" width="16" height="16" /> | DarkPeers | DARKPEERS | MOVIE, TV, BOOK, GAME, MUSIC |
210
+ | <img src="web_ui/static/img/trackers/desitorrents.png" width="16" height="16" /> | DesiTorrents | DESITORRENTS | MOVIE, TV |
211
+ | <img src="web_ui/static/img/trackers/digitalcore.png" width="16" height="16" /> | DigitalCore | DIGITALCORE | MOVIE, TV, BOOK, GAME, MUSIC |
212
+ | <img src="web_ui/static/img/trackers/dreadvault.png" alt="" width="16" height="16" /> | DreadVault | DREADVAULT | MOVIE, TV |
213
+ | <img src="web_ui/static/img/trackers/emuwarez.png" width="16" height="16" /> | Emuwarez | EMUWAREZ | MOVIE, TV |
214
+ | <img src="web_ui/static/img/trackers/filelist.png" width="16" height="16" /> | FileList | FILELIST | MOVIE, TV |
215
+ | <img src="web_ui/static/img/trackers/flood.png" width="16" height="16" /> | Flood | FLOOD | MOVIE, TV |
216
+ | <img src="web_ui/static/img/trackers/funfile.png" width="16" height="16" /> | FunFile | FUNFILE | MOVIE, TV |
217
+ | <img src="web_ui/static/img/trackers/greatposterwall.png" width="16" height="16" /> | GreatPosterWall | GREATPOSTERWALL | MOVIE |
218
+ | <img src="web_ui/static/img/trackers/hawkeuno.png" width="16" height="16" /> | hawke-uno | HAWKEUNO | MOVIE, TV |
219
+ | <img src="web_ui/static/img/trackers/hdbits.png" width="16" height="16" /> | HDBits | HDBITS | MOVIE, TV |
220
+ | <img src="web_ui/static/img/trackers/hdspace.png" width="16" height="16" /> | HD-Space | HDSPACE | MOVIE, TV |
221
+ | <img src="web_ui/static/img/trackers/hdtorrents.png" width="16" height="16" /> | HD-Torrents | HDTORRENTS | MOVIE, TV |
222
+ | <img src="web_ui/static/img/trackers/homiehelpdesk.png" width="16" height="16" /> | HomieHelpDesk | HOMIEHELPDESK | MOVIE, TV, BOOK, GAME, MUSIC |
223
+ | <img src="web_ui/static/img/trackers/immortalseed.png" width="16" height="16" /> | ImmortalSeed | IMMORTALSEED | MOVIE, TV, BOOK, MUSIC, GAME |
224
+ | <img src="web_ui/static/img/trackers/infinityhd.png" width="16" height="16" /> | InfinityHD | INFINITYHD | MOVIE, TV |
225
+ | <img src="web_ui/static/img/trackers/iptorrents.png" width="16" height="16" /> | IPTorrents | IPTORRENTS | MOVIE, TV, BOOK, GAME, MUSIC |
226
+ | <img src="web_ui/static/img/trackers/itatorrents.png" width="16" height="16" /> | ItaTorrents | ITATORRENTS | MOVIE, TV |
227
+ | <img src="web_ui/static/img/trackers/lajidui.png" width="16" height="16" /> | lajidui | LAJIDUI | MOVIE, TV |
228
+ | <img src="web_ui/static/img/trackers/lemonhd.png" width="16" height="16" /> | LemonHD | LEMONHD | MOVIE, TV |
229
+ | <img src="web_ui/static/img/trackers/lastdigitalunderground.png" width="16" height="16" /> | LastDigitalUnderground | LASTDIGITALUNDERGROUND | MOVIE, TV, BOOK |
230
+ | <img src="web_ui/static/img/trackers/latteam.png" width="16" height="16" /> | Lat-Team | LATTEAM | MOVIE, TV, BOOK |
231
+ | <img src="web_ui/static/img/trackers/locadora.png" width="16" height="16" /> | Locadora | LOCADORA | MOVIE, TV |
232
+ | <img src="web_ui/static/img/trackers/longpt.png" width="16" height="16" /> | LongPT | LONGPT | MOVIE, TV |
233
+ | <img src="web_ui/static/img/trackers/lst.png" width="16" height="16" /> | LST | LST | MOVIE, TV, BOOK, MUSIC, XXX |
234
+ | <img src="web_ui/static/img/trackers/luminarr.png" width="16" height="16" /> | Luminarr | LUMINARR | MOVIE, TV |
235
+ | <img src="web_ui/static/img/trackers/makingoff.png" width="16" height="16" /> | MakingOff | MAKINGOFF | MOVIE |
236
+ | <img src="web_ui/static/img/trackers/midnightscene.png" width="16" height="16" /> | MidnightScene | MIDNIGHTSCENE | MOVIE, TV, GAME, MUSIC |
237
+ | <img src="web_ui/static/img/trackers/mteam.png" width="16" height="16" /> | M-Team | MTEAM | MOVIE, TV |
238
+ | <img src="web_ui/static/img/trackers/nebulance.png" width="16" height="16" /> | Nebulance | NEBULANCE | TV |
239
+ | <img src="web_ui/static/img/trackers/nordicquality.png" width="16" height="16" /> | NordicQuality | NORDICQUALITY | MOVIE, TV, MUSIC, BOOK, GAME |
240
+ | <img src="web_ui/static/img/trackers/oldtoonsworld.png" width="16" height="16" /> | OldToonsWorld | OLDTOONSWORLD | MOVIE, TV |
241
+ | <img src="web_ui/static/img/trackers/onlyencodes.png" width="16" height="16" /> | OnlyEncodes+ | ONLYENCODES | MOVIE, TV |
242
+ | <img src="web_ui/static/img/trackers/orpheus.png" width="16" height="16" /> | Orpheus | ORPHEUS | MUSIC |
243
+ | <img src="web_ui/static/img/trackers/passthepopcorn.png" width="16" height="16" /> | PassThePopcorn | PASSTHEPOPCORN | MOVIE |
244
+ | <img src="web_ui/static/img/trackers/peergarden.png" width="16" height="16" /> | PeerGarden | PEERGARDEN | MOVIE, TV, GAME, BOOK, MUSIC |
245
+ | <img src="web_ui/static/img/trackers/polishtorrent.png" width="16" height="16" /> | PolishTorrent | POLISHTORRENT | MOVIE, TV |
246
+ | <img src="web_ui/static/img/trackers/portugas.png" width="16" height="16" /> | Portugas | PORTUGAS | MOVIE, TV |
247
+ | <img src="web_ui/static/img/trackers/privatehd.png" width="16" height="16" /> | PrivateHD | PRIVATEHD | MOVIE, TV |
248
+ | <img src="web_ui/static/img/trackers/ptgtk.png" width="16" height="16" /> | PT GTK | PTGTK | MOVIE, TV |
249
+ | <img src="web_ui/static/img/trackers/ptzone.png" width="16" height="16" /> | PTZone | PTZONE | MOVIE, TV |
250
+ | <img src="web_ui/static/img/trackers/ptcafe.png" width="16" height="16" /> | ptcafe | PTCAFE | MOVIE, TV |
251
+ | <img src="web_ui/static/img/trackers/pterclub.png" width="16" height="16" /> | PTerClub | PTERCLUB | MOVIE, TV |
252
+ | <img src="web_ui/static/img/trackers/ptfans.png" width="16" height="16" /> | PTFans | PTFANS | MOVIE, TV |
253
+ | <img src="web_ui/static/img/trackers/ptskit.png" width="16" height="16" /> | PTSKIT | PTSKIT | MOVIE, TV |
254
+ | <img src="web_ui/static/img/trackers/racing4everyone.png" width="16" height="16" /> | Racing4Everyone | RACING4EVERYONE | MOVIE, TV |
255
+ | <img src="web_ui/static/img/trackers/railgunpt.png" width="16" height="16" /> | RailgunPT | RAILGUNPT | MOVIE, TV |
256
+ | <img src="web_ui/static/img/trackers/rastastugan.png" width="16" height="16" /> | Rastastugan | RASTASTUGAN | MOVIE, TV, BOOK, GAME, MUSIC |
257
+ | <img src="web_ui/static/img/trackers/reelflix.png" width="16" height="16" /> | ReelFLiX | REELFLIX | MOVIE |
258
+ | <img src="web_ui/static/img/trackers/retroflix.png" width="16" height="16" /> | RetroFlix | RETROFLIX | MOVIE, TV |
259
+ | <img src="web_ui/static/img/trackers/retromoviesclub.png" width="16" height="16" /> | RetroMoviesClub | RETROMOVIESCLUB | MOVIE |
260
+ | <img src="web_ui/static/img/trackers/rockethd.png" width="16" height="16" /> | RocketHD | ROCKETHD | MOVIE, TV |
261
+ | <img src="web_ui/static/img/trackers/samaritano.png" width="16" height="16" /> | Samaritano | SAMARITANO | MOVIE, TV, BOOK, GAME |
262
+ | <img src="web_ui/static/img/trackers/seedpool.png" width="16" height="16" /> | seedpool | SEEDPOOL | MOVIE, TV, BOOK, GAME, MUSIC |
263
+ | <img src="web_ui/static/img/trackers/shareisland.png" width="16" height="16" /> | ShareIsland | SHAREISLAND | MOVIE, TV |
264
+ | <img src="web_ui/static/img/trackers/skipthecommercials.png" width="16" height="16" /> | SkipTheCommerials | SKIPTHECOMMERCIALS | MOVIE, TV |
265
+ | <img src="web_ui/static/img/trackers/speedapp.png" width="16" height="16" /> | SpeedApp | SPEEDAPP | MOVIE, TV, BOOK, GAME, MUSIC |
266
+ | <img src="web_ui/static/img/trackers/swarmazon.png" width="16" height="16" /> | Swarmazon | SWARMAZON | MOVIE, TV |
267
+ | <img src="web_ui/static/img/trackers/theleachzone.png" width="16" height="16" /> | The Leach Zone | THELEACHZONE | MOVIE, TV |
268
+ | <img src="web_ui/static/img/trackers/theoldschool.png" width="16" height="16" /> | TheOldSchool | THEOLDSCHOOL | MOVIE, TV |
269
+ | <img src="web_ui/static/img/trackers/torrenteros.png" width="16" height="16" /> | Torrenteros | TORRENTEROS | MOVIE, TV |
270
+ | <img src="web_ui/static/img/trackers/torrenthr.png" width="16" height="16" /> | TorrentHR | TORRENTHR | MOVIE, TV |
271
+ | <img src="web_ui/static/img/trackers/torrentleech.png" width="16" height="16" /> | TorrentLeech | TORRENTLEECH | MOVIE, TV, BOOK, GAME, MUSIC |
272
+ | <img src="web_ui/static/img/trackers/totheglory.png" width="16" height="16" /> | ToTheGlory | TOTHEGLORY | MOVIE, TV |
273
+ | <img src="web_ui/static/img/trackers/tvchaosuk.png" width="16" height="16" /> | TVChaosUK | TVCHAOSUK | MOVIE, TV |
274
+ | <img src="web_ui/static/img/trackers/xingyungept.png" width="16" height="16" /> | XingyungePT | XINGYUNGEPT | MOVIE, TV |
275
+ | <img src="web_ui/static/img/trackers/ulcx.png" width="16" height="16" /> | ULCX | ULCX | MOVIE, TV |
276
+ | <img src="web_ui/static/img/trackers/utopia.png" width="16" height="16" /> | UTOPIA | UTOPIA | MOVIE, TV |
277
+ | <img src="web_ui/static/img/trackers/yuscene.png" width="16" height="16" /> | YUSCENE | YUSCENE | MOVIE, TV, BOOK, GAME, MUSIC |
278
+ | <img src="web_ui/static/img/trackers/zenith.png" width="16" height="16" /> | Zenith | ZENITH | MOVIE, TV, BOOK, GAME, MUSIC |
279
+
280
+ </details>
281
+
282
+ <details>
283
+ <summary><strong>Click to view Supported Usenet Indexers</strong></summary>
284
+
285
+ | | Site | Usage | Supported Categories |
286
+ | ------------------------------------------------------------------------------- | ----------- | ----------- | ---------------------------- |
287
+ | <img src="web_ui/static/img/trackers/curupira.png" width="16" height="16" /> | Curupira | CURUPIRA | MOVIE, TV, BOOK, GAME |
288
+ | <img src="web_ui/static/img/trackers/drunkenslug.png" width="16" height="16" /> | DrunkenSlug | DRUNKENSLUG | MOVIE, TV, BOOK, GAME |
289
+ | <img src="web_ui/static/img/trackers/nzbgeek.png" width="16" height="16" /> | NZBGeek | NZBGEEK | MOVIE, TV, BOOK, GAME, MUSIC |
290
+
291
+ </details>
292
+
293
+ ## **Setup Guide**
294
+
295
+ Setting up Upload Assistant is straightforward, even if you are not a developer. Follow these steps to get up and running:
296
+
297
+ ### Step 1: Install Required Tools
298
+
299
+ Windows users should install Upload Assistant with the [Windows `.exe` installer](docs/windows-install.md). It includes everything needed to run the assistant.
300
+
301
+ For a manual Linux/macOS/Windows installation, Upload Assistant needs a few tools to process media and run:
302
+
303
+ 1. **Python (version 3.14 or newer)**:
304
+ - Download and install it from the [official Python website](https://www.python.org/downloads/).
305
+ 2. **MediaInfo & FFmpeg**:
306
+ - These are helper tools used to scan files and generate screenshots/spectrograms.
307
+ - The official MediaInfo CLI is downloaded and checksum-verified automatically on supported Windows, Linux, and macOS systems. Android/Termux uses its native `mediainfo` package (`pkg install mediainfo`).
308
+ - Install FFmpeg using your system's software manager:
309
+ - Debian/Ubuntu: `sudo apt install ffmpeg`
310
+ - Arch Linux: `sudo pacman -S ffmpeg`
311
+ - RedHat/Fedora: `sudo dnf install ffmpeg`
312
+ - _Having issues with FFmpeg? Check out our [FFmpeg troubleshooting guide](docs/ffmpeg-max-workers-issues.md)._
313
+
314
+ ---
315
+
316
+ ### Install from PyPI with `uv` (Windows, Linux, or macOS)
317
+
318
+ The recommended command-line installation uses the published PyPI package. It automatically manages the virtual environment and exposes the `ua` and `ua-config` commands on your system path:
319
+
320
+ ```bash
321
+ uv tool install upload-assistant
322
+ ```
323
+
324
+ If `uv` reports that its tool directory is not on your `PATH`, run `uv tool update-shell`, then open a new terminal.
325
+
326
+ ### Install the latest development version with `uv`
327
+
328
+ If you have [uv](https://github.com/astral-sh/uv) installed, you can install Upload Assistant directly from the repository as a globally available standalone CLI tool. This automatically manages the virtual environment and exposes the `ua` and `ua-config` commands directly to your system path. This method resolves dependencies from `pyproject.toml`; skip Steps 2 and 3 below.
329
+
330
+ ```bash
331
+ uv tool install git+https://github.com/wastaken7/Upload-Assistant.git
332
+ ```
333
+
334
+ If `uv` reports that its tool directory is not on your `PATH`, run `uv tool update-shell`, then open a new terminal.
335
+
336
+ ---
337
+
338
+ ### Step 2: Download Upload Assistant (Linux/macOS)
339
+
340
+ Choose **one** of the two options below to get the files onto your computer:
341
+
342
+ #### Option A: Clone using Git (Recommended)
343
+
344
+ Using Git is the recommended method because it makes updating the assistant in the future extremely easy.
345
+
346
+ 1. **Install Git** (if you don't already have it):
347
+ - **Linux:** Install it via your package manager.
348
+ - **macOS:** Install it via Homebrew or Xcode Command Line Tools.
349
+ 2. **Clone the project**:
350
+ Open your command prompt or terminal, navigate to the folder where you want to keep the assistant, and run:
351
+
352
+ ```bash
353
+ git clone https://github.com/wastaken7/Upload-Assistant.git
354
+ cd Upload-Assistant
355
+ ```
356
+
357
+ #### Option B: Download as a ZIP file (Alternative)
358
+
359
+ If you do not want to install Git, you can download a copy of the files directly:
360
+
361
+ 1. Go to the [GitHub Repository Page](https://github.com/wastaken7/Upload-Assistant).
362
+ 2. Click the green **Code** button near the top right, and click **Download ZIP**.
363
+ 3. Extract the ZIP file to a folder of your choice on your computer.
364
+
365
+ ---
366
+
367
+ ### Step 3: Install Python Packages (Linux/macOS)
368
+
369
+ On Linux/macOS, open a terminal, navigate to the folder where you downloaded Upload Assistant, and run:
370
+
371
+ ```bash
372
+ pip3 install --user -U -r requirements.txt
373
+ ```
374
+
375
+ > [!TIP]
376
+ > **Getting an "externally managed environment" error?**
377
+ > This means your system prefers keeping Python packages separated. You can set up a "Virtual Environment" (a private workspace for this tool) by running:
378
+ >
379
+ > - **Linux / macOS:**
380
+ >
381
+ > ```bash
382
+ > python3 -m venv venv
383
+ > source venv/bin/activate
384
+ > pip install -r requirements.txt
385
+ > ```
386
+
387
+ ---
388
+
389
+ ### Step 4: Configure the Assistant
390
+
391
+ You need to add your API keys (like TMDb) and tracker credentials so the tool knows where to upload.
392
+
393
+ #### Method A: Use the Web UI (Easiest)
394
+
395
+ If you plan to use the Web UI, **your configuration file will be generated automatically** when you launch and configure it for the first time.
396
+
397
+ #### Method B: Use the Interactive Generator
398
+
399
+ In your terminal, run the command for your operating system and follow the on-screen prompts:
400
+
401
+ - **Windows:** Install with the [`.exe` installer](docs/windows-install.md), then run `ua-config` in a new terminal.
402
+ - **Linux / macOS (Standard):**
403
+
404
+ ```bash
405
+ python3 config-generator.py
406
+ ```
407
+
408
+ - **Linux / macOS (uv installation):**
409
+
410
+ ```bash
411
+ ua-config
412
+ ```
413
+
414
+ #### Method C: Manual Configuration
415
+
416
+ 1. Go to the `data/` folder inside the project.
417
+ 2. Copy `example_config.py` and rename the copy to `config.py` (leave the original `example_config.py` file as-is).
418
+ 3. Open `config.py` in a text editor (like Notepad, VS Code, or TextEdit) and fill in your information.
419
+ - For detailed info on what each setting does, see [Example Config Docs](docs/example-config.md).
420
+ - Get a free TMDb API key from [TheMovieDB API settings](https://www.themoviedb.org/settings/api).
421
+
422
+ ---
423
+
424
+ **Additional Resources:**
425
+
426
+ - Check out our [Wiki Help Page](docs/home.md).
427
+ - Windows installation and basic commands: see [Windows Install](docs/windows-install.md).
428
+ - Need a no-root Linux or seedbox setup? See [Seedbox / Linux Install](docs/seedbox.md).
429
+ - Found an issue or need help? Please [open a GitHub Issue](https://github.com/wastaken7/Upload-Assistant/issues) so we can track and resolve it. If you prefer not to create a GitHub account for privacy reasons, join our [Signal group](https://signal.group/#CjQKILmkUCLe5mZULkQGI6B5knmX1ytrIBFicpJ_NZGAHmOrEhDD5F7ctp-obLeLOsa0yCoJ) instead.
430
+
431
+ ## **Updating:**
432
+
433
+ - To update a Git installation, navigate into the Upload-Assistant directory and pull the latest changes:
434
+
435
+ ```bash
436
+ cd Upload-Assistant
437
+ git pull
438
+ ```
439
+
440
+ - Or, if you downloaded the ZIP file, download a fresh ZIP from GitHub and overwrite your existing files.
441
+ - For the Windows installation, run `ua-update`.
442
+ - For the `uv` standalone installation, run: `uv tool upgrade upload-assistant`
443
+ - Run the command to update dependencies:
444
+ - **Linux / macOS:** `python3 -m pip install --user -U -r requirements.txt`
445
+ - Run the configuration generator to fetch any new settings:
446
+ - **Windows / uv installations:** run `ua-config` from any folder.
447
+ - **Linux / macOS (Standard):** `python3 config-generator.py`
448
+
449
+ ## **CLI Usage:**
450
+
451
+ To run the assistant, use the command for your system:
452
+
453
+ - **Windows / uv installations:**
454
+
455
+ ```cmd
456
+ ua "/path/to/content" --args
457
+ ```
458
+
459
+ - **Linux / macOS (Standard):**
460
+
461
+ ```bash
462
+ python3 upload.py "/path/to/content" --args
463
+ ```
464
+
465
+ Arguments are optional and normally follow the path. Input modes such as `--paths-from-stdin` may omit the positional path. For a list of all available arguments, pass `--help`.
466
+ The file/folder path works best enclosed in double quotes.
467
+
468
+ - CLI arguments: [docs/cli-args.md](docs/cli-args.md)
469
+ - Usenet uploading: [docs/usenet.md](docs/usenet.md)
470
+
471
+ ## **Docker Usage:**
472
+
473
+ Visit our wonderful [docker usage](docs/docker.md)
474
+
475
+ Also see this excellent video put together by a community member <https://videos.badkitty.zone/ua>
476
+
477
+ Web UI setup (Docker GUI / Unraid): [docs/docker-gui.md](docs/docker-gui.md)
478
+ Web UI docs: [docs/web-ui.md](docs/web-ui.md)
479
+
480
+ ## **Attributions:**
481
+
482
+ Built with [autobrr/go-bdinfo](https://github.com/autobrr/go-bdinfo)
483
+
484
+ Features automated binary managers for:
485
+
486
+ - [nyuu](https://github.com/animetosho/nyuu)
487
+ - [par2cmdline-turbo](https://github.com/animetosho/par2cmdline-turbo)
488
+ - [pesto](https://github.com/franzopl/pesto)
489
+ - [7-Zip](https://www.7-zip.org/)
490
+
491
+ <p>
492
+ <a href="https://github.com/autobrr/mkbrr"><img src="https://github.com/autobrr/mkbrr/blob/main/.github/assets/mkbrr-dark.png?raw=true" alt="mkbrr" height="40px;"></a>&nbsp;&nbsp;
493
+ <a href="https://github.com/autobrr/qui"><img src="https://github.com/autobrr/qui/blob/develop/documentation/static/img/qui.png?raw=true" alt="qui" height="40px;"></a>&nbsp;&nbsp;
494
+ <a href="https://ffmpeg.org/"><img src="https://i.postimg.cc/xdj3BS7S/FFmpeg-Logo-new-svg.png" alt="FFmpeg" height="40px;"></a>&nbsp;&nbsp;
495
+ <a href="https://mediaarea.net/en/MediaInfo"><img src="https://i.postimg.cc/vTkjXmHh/Media-Info-Logo-svg.png" alt="Mediainfo" height="40px;"></a>&nbsp;&nbsp;
496
+ <a href="https://www.themoviedb.org/"><img src="https://i.postimg.cc/1tpXHx3k/blue-square-2-d537fb228cf3ded904ef09b136fe3fec72548ebc1fea3fbbd1ad9e36364db38b.png" alt="TMDb" height="40px;"></a>&nbsp;&nbsp;
497
+ <a href="https://www.imdb.com/"><img src="https://i.postimg.cc/CLVmvwr1/IMDb-Logo-Rectangle-Gold-CB443386186.png" alt="IMDb" height="40px;"></a>&nbsp;&nbsp;
498
+ <a href="https://thetvdb.com/"><img src="https://i.postimg.cc/Hs1KKqsS/logo1.png" alt="TheTVDB" height="40px;"></a>&nbsp;&nbsp;
499
+ <a href="https://www.tvmaze.com/"><img src="https://i.postimg.cc/2jdRzkJp/tvm-header-logo.png" alt="TVmaze" height="40px"></a>
500
+ </p>
501
+
502
+ ## **Contributors:**
503
+ [![Contributors](https://contrib.rocks/image?repo=wastaken7/Upload-Assistant)](https://github.com/wastaken7/Upload-Assistant/graphs/contributors)