qBitrr2 5.6.1__tar.gz → 5.7.0__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 (89) hide show
  1. qbitrr2-5.7.0/PKG-INFO +282 -0
  2. qbitrr2-5.7.0/README.md +178 -0
  3. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/config.example.toml +36 -0
  4. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/pyproject.toml +1 -1
  5. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/arss.py +390 -89
  6. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/bundled_data.py +2 -2
  7. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/db_lock.py +24 -10
  8. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/main.py +232 -10
  9. qbitrr2-5.7.0/qBitrr/static/assets/ArrView.js +2 -0
  10. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/ArrView.js.map +1 -1
  11. qbitrr2-5.7.0/qBitrr/static/assets/ConfigView.js +6 -0
  12. qbitrr2-5.7.0/qBitrr/static/assets/ConfigView.js.map +1 -0
  13. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/LogsView.js +1 -1
  14. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/LogsView.js.map +1 -1
  15. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/ProcessesView.js +1 -1
  16. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/ProcessesView.js.map +1 -1
  17. qbitrr2-5.7.0/qBitrr/static/assets/app.css +1 -0
  18. qbitrr2-5.7.0/qBitrr/static/assets/app.js +11 -0
  19. qbitrr2-5.7.0/qBitrr/static/assets/app.js.map +1 -0
  20. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/vendor.js +1 -1
  21. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/vendor.js.map +1 -1
  22. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/tables.py +7 -0
  23. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/webui.py +48 -1
  24. qbitrr2-5.7.0/qBitrr2.egg-info/PKG-INFO +282 -0
  25. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/setup.cfg +1 -1
  26. qbitrr2-5.6.1/PKG-INFO +0 -1210
  27. qbitrr2-5.6.1/README.md +0 -1106
  28. qbitrr2-5.6.1/qBitrr/static/assets/ArrView.js +0 -2
  29. qbitrr2-5.6.1/qBitrr/static/assets/ConfigView.js +0 -5
  30. qbitrr2-5.6.1/qBitrr/static/assets/ConfigView.js.map +0 -1
  31. qbitrr2-5.6.1/qBitrr/static/assets/app.css +0 -1
  32. qbitrr2-5.6.1/qBitrr/static/assets/app.js +0 -11
  33. qbitrr2-5.6.1/qBitrr/static/assets/app.js.map +0 -1
  34. qbitrr2-5.6.1/qBitrr2.egg-info/PKG-INFO +0 -1210
  35. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/LICENSE +0 -0
  36. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/MANIFEST.in +0 -0
  37. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/__init__.py +0 -0
  38. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/auto_update.py +0 -0
  39. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/config.py +0 -0
  40. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/config_version.py +0 -0
  41. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/db_recovery.py +0 -0
  42. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/env_config.py +0 -0
  43. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/errors.py +0 -0
  44. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/ffprobe.py +0 -0
  45. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/gen_config.py +0 -0
  46. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/home_path.py +0 -0
  47. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/logger.py +0 -0
  48. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/search_activity_store.py +0 -0
  49. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/build.svg +0 -0
  50. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/check-mark.svg +0 -0
  51. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/close.svg +0 -0
  52. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/download.svg +0 -0
  53. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/gear.svg +0 -0
  54. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/lidarr.svg +0 -0
  55. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/live-streaming.svg +0 -0
  56. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/log.svg +0 -0
  57. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/logo.svg +0 -0
  58. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/plus.svg +0 -0
  59. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/process.svg +0 -0
  60. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/react-select.esm.js +0 -0
  61. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/react-select.esm.js.map +0 -0
  62. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/refresh-arrow.svg +0 -0
  63. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/table.js +0 -0
  64. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/table.js.map +0 -0
  65. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/trash.svg +0 -0
  66. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/up-arrow.svg +0 -0
  67. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/useInterval.js +0 -0
  68. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/useInterval.js.map +0 -0
  69. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/assets/visibility.svg +0 -0
  70. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/favicon-16x16.png +0 -0
  71. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/favicon-32x32.png +0 -0
  72. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/favicon-48x48.png +0 -0
  73. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/favicon.ico +0 -0
  74. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/icon-192.png +0 -0
  75. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/icon-512.png +0 -0
  76. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/index.html +0 -0
  77. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/logov2-clean.png +0 -0
  78. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/logov2-clean.svg +0 -0
  79. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/manifest.json +0 -0
  80. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/sw.js +0 -0
  81. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/static/vite.svg +0 -0
  82. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/utils.py +0 -0
  83. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr/versioning.py +0 -0
  84. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr2.egg-info/SOURCES.txt +0 -0
  85. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr2.egg-info/dependency_links.txt +0 -0
  86. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr2.egg-info/entry_points.txt +0 -0
  87. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr2.egg-info/requires.txt +0 -0
  88. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/qBitrr2.egg-info/top_level.txt +0 -0
  89. {qbitrr2-5.6.1 → qbitrr2-5.7.0}/setup.py +0 -0
qbitrr2-5.7.0/PKG-INFO ADDED
@@ -0,0 +1,282 @@
1
+ Metadata-Version: 2.4
2
+ Name: qBitrr2
3
+ Version: 5.7.0
4
+ Summary: Intelligent automation for qBittorrent and *Arr apps (Radarr/Sonarr/Lidarr) - health monitoring, instant imports, quality upgrades, request integration
5
+ Home-page: https://github.com/Feramance/qBitrr
6
+ Author: Feramance
7
+ Author-email: fera@fera.wtf
8
+ License: MIT
9
+ Project-URL: Homepage, https://github.com/Feramance/qBitrr
10
+ Project-URL: Documentation, https://feramance.github.io/qBitrr/
11
+ Project-URL: Issue Tracker, https://github.com/Feramance/qBitrr/issues
12
+ Project-URL: Source Code, https://github.com/Feramance/qBitrr
13
+ Project-URL: Changelog, https://github.com/Feramance/qBitrr/blob/master/CHANGELOG.md
14
+ Project-URL: Docker Hub, https://hub.docker.com/r/feramance/qbitrr
15
+ Project-URL: PyPI, https://pypi.org/project/qBitrr2/
16
+ Project-URL: Systemd Guide, https://feramance.github.io/qBitrr/getting-started/installation/systemd/
17
+ Keywords: qbittorrent,radarr,sonarr,lidarr,arr,automation,torrent,media,plex,jellyfin,overseerr,ombi
18
+ Classifier: Development Status :: 5 - Production/Stable
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: Intended Audience :: End Users/Desktop
21
+ Classifier: Intended Audience :: System Administrators
22
+ Classifier: License :: OSI Approved :: MIT License
23
+ Classifier: Natural Language :: English
24
+ Classifier: Operating System :: MacOS :: MacOS X
25
+ Classifier: Operating System :: Microsoft :: Windows
26
+ Classifier: Operating System :: POSIX :: Linux
27
+ Classifier: Programming Language :: Python :: 3 :: Only
28
+ Classifier: Programming Language :: Python :: 3.11
29
+ Classifier: Programming Language :: Python :: 3.12
30
+ Classifier: Programming Language :: Python :: Implementation :: CPython
31
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
32
+ Classifier: Topic :: Communications
33
+ Classifier: Topic :: Internet
34
+ Classifier: Topic :: Multimedia :: Video
35
+ Classifier: Topic :: System :: Monitoring
36
+ Classifier: Topic :: Terminals
37
+ Classifier: Topic :: Utilities
38
+ Classifier: Typing :: Typed
39
+ Requires-Python: <4,>=3.11
40
+ Description-Content-Type: text/markdown
41
+ License-File: LICENSE
42
+ Requires-Dist: cachetools
43
+ Requires-Dist: colorama
44
+ Requires-Dist: coloredlogs
45
+ Requires-Dist: flask
46
+ Requires-Dist: environ-config
47
+ Requires-Dist: ffmpeg-python
48
+ Requires-Dist: jaraco.docker
49
+ Requires-Dist: packaging
50
+ Requires-Dist: pathos
51
+ Requires-Dist: peewee
52
+ Requires-Dist: ping3
53
+ Requires-Dist: pyarr
54
+ Requires-Dist: qbittorrent-api
55
+ Requires-Dist: requests
56
+ Requires-Dist: tomlkit
57
+ Requires-Dist: waitress
58
+ Requires-Dist: croniter
59
+ Provides-Extra: dev
60
+ Requires-Dist: black==24.3.0; extra == "dev"
61
+ Requires-Dist: bump2version==1.0.1; extra == "dev"
62
+ Requires-Dist: isort==5.10.1; extra == "dev"
63
+ Requires-Dist: pip-tools==7.3.0; extra == "dev"
64
+ Requires-Dist: pre-commit==3.3.3; extra == "dev"
65
+ Requires-Dist: pyinstaller==5.13.1; extra == "dev"
66
+ Requires-Dist: pyupgrade==2.31.0; extra == "dev"
67
+ Requires-Dist: twine==3.7.1; extra == "dev"
68
+ Requires-Dist: ujson==5.10.0; extra == "dev"
69
+ Requires-Dist: upgrade-pip==0.1.4; extra == "dev"
70
+ Provides-Extra: fast
71
+ Requires-Dist: ujson==5.10.0; extra == "fast"
72
+ Provides-Extra: docs
73
+ Requires-Dist: mkdocs>=1.5.3; extra == "docs"
74
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "docs"
75
+ Requires-Dist: mkdocs-material-extensions>=1.3.0; extra == "docs"
76
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin>=1.2.0; extra == "docs"
77
+ Requires-Dist: mkdocs-minify-plugin>=0.7.0; extra == "docs"
78
+ Requires-Dist: mkdocs-redirects>=1.2.0; extra == "docs"
79
+ Requires-Dist: mkdocs-include-markdown-plugin>=6.0.0; extra == "docs"
80
+ Requires-Dist: pymdown-extensions>=10.0.0; extra == "docs"
81
+ Requires-Dist: markdown-include>=0.8.0; extra == "docs"
82
+ Provides-Extra: all
83
+ Requires-Dist: black==24.3.0; extra == "all"
84
+ Requires-Dist: bump2version==1.0.1; extra == "all"
85
+ Requires-Dist: isort==5.10.1; extra == "all"
86
+ Requires-Dist: pip-tools==7.3.0; extra == "all"
87
+ Requires-Dist: pre-commit==3.3.3; extra == "all"
88
+ Requires-Dist: pyinstaller==5.13.1; extra == "all"
89
+ Requires-Dist: pyupgrade==2.31.0; extra == "all"
90
+ Requires-Dist: twine==3.7.1; extra == "all"
91
+ Requires-Dist: ujson==5.10.0; extra == "all"
92
+ Requires-Dist: upgrade-pip==0.1.4; extra == "all"
93
+ Requires-Dist: ujson==5.10.0; extra == "all"
94
+ Requires-Dist: mkdocs>=1.5.3; extra == "all"
95
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "all"
96
+ Requires-Dist: mkdocs-material-extensions>=1.3.0; extra == "all"
97
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin>=1.2.0; extra == "all"
98
+ Requires-Dist: mkdocs-minify-plugin>=0.7.0; extra == "all"
99
+ Requires-Dist: mkdocs-redirects>=1.2.0; extra == "all"
100
+ Requires-Dist: mkdocs-include-markdown-plugin>=6.0.0; extra == "all"
101
+ Requires-Dist: pymdown-extensions>=10.0.0; extra == "all"
102
+ Requires-Dist: markdown-include>=0.8.0; extra == "all"
103
+ Dynamic: license-file
104
+
105
+ # <img src="assets/logov2-clean.png" alt="qBitrr Logo" width="40" style="vertical-align: middle;"/> qBitrr
106
+
107
+ [![PyPI](https://img.shields.io/pypi/v/qBitrr2?label=PyPI)](https://pypi.org/project/qBitrr2/)
108
+ [![Downloads](https://img.shields.io/pypi/dm/qBitrr2)](https://pypi.org/project/qBitrr2/)
109
+ [![Docker Pulls](https://img.shields.io/docker/pulls/feramance/qbitrr.svg)](https://hub.docker.com/r/feramance/qbitrr)
110
+ [![CodeQL](https://github.com/Feramance/qBitrr/actions/workflows/codeql.yml/badge.svg?branch=master)](https://github.com/Feramance/qBitrr/actions/workflows/codeql.yml)
111
+ [![Nightly Build](https://github.com/Feramance/qBitrr/actions/workflows/nightly.yml/badge.svg?branch=master)](https://github.com/Feramance/qBitrr/actions/workflows/nightly.yml)
112
+ [![pre-commit.ci](https://results.pre-commit.ci/badge/github/Feramance/qBitrr/master.svg)](https://results.pre-commit.ci/latest/github/Feramance/qBitrr/master)
113
+ [![License: MIT](https://img.shields.io/pypi/l/qbitrr)](LICENSE)
114
+
115
+ > 🧩 The intelligent glue between qBittorrent and the *Arr ecosystem (Radarr, Sonarr, Lidarr). Monitors torrent health, triggers instant imports, automates quality upgrades, manages disk space, integrates with request systems (Overseerr/Ombi), and provides a modern React dashboard for complete visibility and control.
116
+
117
+ ## 📚 Documentation
118
+
119
+ **Full documentation is available at: https://feramance.github.io/qBitrr/**
120
+
121
+ - [Getting Started](https://feramance.github.io/qBitrr/getting-started/) – Installation guides for pip, Docker, and native setups
122
+ - [Configuration](https://feramance.github.io/qBitrr/configuration/) – qBittorrent, Arr instances, quality profiles, and more
123
+ - [Features](https://feramance.github.io/qBitrr/features/) – Health monitoring, automated search, quality management, disk space, auto-updates
124
+ - [WebUI](https://feramance.github.io/qBitrr/webui/) – Built-in React dashboard with live monitoring and config editor
125
+ - [Troubleshooting](https://feramance.github.io/qBitrr/troubleshooting/) – Common issues and debug logging
126
+ - [API Reference](https://feramance.github.io/qBitrr/reference/api/) – REST API documentation
127
+
128
+ ## ⚡ Quick Start
129
+
130
+ ### 🐍 Install with pip
131
+ ```bash
132
+ python -m venv .venv
133
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
134
+ pip install qBitrr2
135
+
136
+ # First run creates ~/config/config.toml
137
+ qbitrr
138
+ ```
139
+
140
+ ### 🐳 Run with Docker
141
+ ```bash
142
+ docker run -d \
143
+ --name qbitrr \
144
+ --tty \
145
+ -e TZ=Europe/London \
146
+ -p 6969:6969 \
147
+ -v /path/to/appdata/qbitrr:/config \
148
+ -v /path/to/completed/downloads:/completed_downloads:rw \
149
+ --restart unless-stopped \
150
+ feramance/qbitrr:latest
151
+ ```
152
+
153
+ **Docker Compose:**
154
+ ```yaml
155
+ services:
156
+ qbitrr:
157
+ image: feramance/qbitrr:latest
158
+ container_name: qbitrr
159
+ restart: unless-stopped
160
+ tty: true
161
+ environment:
162
+ TZ: Europe/London
163
+ ports:
164
+ - "6969:6969"
165
+ volumes:
166
+ - /path/to/appdata/qbitrr:/config
167
+ - /path/to/completed/downloads:/completed_downloads:rw
168
+ ```
169
+
170
+ Access the WebUI at `http://<host>:6969/ui` after startup.
171
+
172
+ ## ✨ Key Features
173
+
174
+ - **🚀 Multi-qBittorrent Support (v3.0+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
175
+ - **🚑 Torrent Health Monitoring** – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
176
+ - **🔍 Automated Search** – Missing media, quality upgrades, custom format scoring
177
+ - **🎯 Request Integration** – Pull requests from Overseerr/Ombi, prioritize user-requested media
178
+ - **📊 Quality Management** – RSS sync, queue refresh, profile switching, custom format enforcement
179
+ - **🌱 Seeding Control** – Per-tracker settings, ratio/time limits, tracker injection
180
+ - **💾 Disk Space Management** – Auto-pause when low on space, configurable thresholds
181
+ - **🔄 Auto-Updates** – GitHub release-based updates with scheduled cron support
182
+ - **💻 Modern WebUI** – Live process monitoring, log viewer, Arr insights, config editor
183
+
184
+ ## 🛠️ Essential Configuration
185
+
186
+ 1. **Configure qBittorrent** in `~/config/config.toml`:
187
+ ```toml
188
+ [qBit]
189
+ Host = "localhost"
190
+ Port = 8080
191
+ UserName = "admin"
192
+ Password = "adminpass"
193
+ ```
194
+
195
+ 2. **Add Arr instances**:
196
+ ```toml
197
+ [Radarr-Movies]
198
+ URI = "http://localhost:7878"
199
+ APIKey = "your-radarr-api-key"
200
+ Category = "radarr-movies"
201
+ ```
202
+
203
+ 3. **Set completed folder**:
204
+ ```toml
205
+ [Settings]
206
+ CompletedDownloadFolder = "/path/to/completed"
207
+ ```
208
+
209
+ ### 🆕 Multi-qBittorrent (v3.0+)
210
+
211
+ Manage torrents across multiple qBittorrent instances:
212
+
213
+ ```toml
214
+ [qBit] # Default instance (required)
215
+ Host = "localhost"
216
+ Port = 8080
217
+ UserName = "admin"
218
+ Password = "password"
219
+
220
+ [qBit-seedbox] # Additional instance (optional)
221
+ Host = "192.168.1.100"
222
+ Port = 8080
223
+ UserName = "admin"
224
+ Password = "seedboxpass"
225
+ ```
226
+
227
+ See [Multi-qBittorrent Guide](MULTI_QBIT_V3_USER_GUIDE.md) for complete documentation.
228
+
229
+ ---
230
+
231
+ See [Configuration Guide](https://feramance.github.io/qBitrr/configuration/) and [config.example.toml](config.example.toml) for all available options.
232
+
233
+ ## 📖 Resources
234
+
235
+ - **Documentation:** https://feramance.github.io/qBitrr/
236
+ - **PyPI Package:** https://pypi.org/project/qBitrr2/
237
+ - **Docker Hub:** https://hub.docker.com/r/feramance/qbitrr
238
+ - **Example Config:** [config.example.toml](config.example.toml)
239
+ - **API Documentation:** [API_DOCUMENTATION.md](API_DOCUMENTATION.md)
240
+ - **Systemd Setup:** [SYSTEMD_SERVICE.md](SYSTEMD_SERVICE.md)
241
+
242
+ ## 🐛 Issues & Support
243
+
244
+ - **Report Bugs:** [Bug Report Template](.github/ISSUE_TEMPLATE/bug_report.yml)
245
+ - **Request Features:** [Feature Request Template](.github/ISSUE_TEMPLATE/feature_request.yml)
246
+ - **Discussions:** [GitHub Discussions](https://github.com/Feramance/qBitrr/discussions)
247
+ - **Troubleshooting:** [Common Issues](https://feramance.github.io/qBitrr/troubleshooting/)
248
+
249
+ ## 🤝 Contributing
250
+
251
+ Contributions welcome! See [CONTRIBUTION.md](CONTRIBUTION.md) for coding guidelines and development setup.
252
+
253
+ **Development setup:**
254
+ ```bash
255
+ # Python backend
256
+ make newenv && make syncenv
257
+ make reformat # Format and lint
258
+
259
+ # WebUI
260
+ cd webui && npm ci
261
+ npm run dev # Dev server at localhost:5173
262
+ ```
263
+
264
+ ## ❤️ Support
265
+
266
+ If qBitrr saves you time and headaches:
267
+ - ⭐ **Star the repo** – helps others discover qBitrr
268
+ - 💰 **Sponsor:** [Patreon](https://patreon.com/qBitrr) | [PayPal](https://www.paypal.me/feramance)
269
+
270
+ ## 📄 License
271
+
272
+ Released under the [MIT License](LICENSE). Use it, modify it, share it—commercially or personally.
273
+
274
+ ---
275
+
276
+ <div align="center">
277
+
278
+ **Made with ❤️ by the qBitrr community**
279
+
280
+ [Documentation](https://feramance.github.io/qBitrr/) • [PyPI](https://pypi.org/project/qBitrr2/) • [Docker](https://hub.docker.com/r/feramance/qbitrr) • [GitHub](https://github.com/Feramance/qBitrr)
281
+
282
+ </div>
@@ -0,0 +1,178 @@
1
+ # <img src="assets/logov2-clean.png" alt="qBitrr Logo" width="40" style="vertical-align: middle;"/> qBitrr
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/qBitrr2?label=PyPI)](https://pypi.org/project/qBitrr2/)
4
+ [![Downloads](https://img.shields.io/pypi/dm/qBitrr2)](https://pypi.org/project/qBitrr2/)
5
+ [![Docker Pulls](https://img.shields.io/docker/pulls/feramance/qbitrr.svg)](https://hub.docker.com/r/feramance/qbitrr)
6
+ [![CodeQL](https://github.com/Feramance/qBitrr/actions/workflows/codeql.yml/badge.svg?branch=master)](https://github.com/Feramance/qBitrr/actions/workflows/codeql.yml)
7
+ [![Nightly Build](https://github.com/Feramance/qBitrr/actions/workflows/nightly.yml/badge.svg?branch=master)](https://github.com/Feramance/qBitrr/actions/workflows/nightly.yml)
8
+ [![pre-commit.ci](https://results.pre-commit.ci/badge/github/Feramance/qBitrr/master.svg)](https://results.pre-commit.ci/latest/github/Feramance/qBitrr/master)
9
+ [![License: MIT](https://img.shields.io/pypi/l/qbitrr)](LICENSE)
10
+
11
+ > 🧩 The intelligent glue between qBittorrent and the *Arr ecosystem (Radarr, Sonarr, Lidarr). Monitors torrent health, triggers instant imports, automates quality upgrades, manages disk space, integrates with request systems (Overseerr/Ombi), and provides a modern React dashboard for complete visibility and control.
12
+
13
+ ## 📚 Documentation
14
+
15
+ **Full documentation is available at: https://feramance.github.io/qBitrr/**
16
+
17
+ - [Getting Started](https://feramance.github.io/qBitrr/getting-started/) – Installation guides for pip, Docker, and native setups
18
+ - [Configuration](https://feramance.github.io/qBitrr/configuration/) – qBittorrent, Arr instances, quality profiles, and more
19
+ - [Features](https://feramance.github.io/qBitrr/features/) – Health monitoring, automated search, quality management, disk space, auto-updates
20
+ - [WebUI](https://feramance.github.io/qBitrr/webui/) – Built-in React dashboard with live monitoring and config editor
21
+ - [Troubleshooting](https://feramance.github.io/qBitrr/troubleshooting/) – Common issues and debug logging
22
+ - [API Reference](https://feramance.github.io/qBitrr/reference/api/) – REST API documentation
23
+
24
+ ## ⚡ Quick Start
25
+
26
+ ### 🐍 Install with pip
27
+ ```bash
28
+ python -m venv .venv
29
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
30
+ pip install qBitrr2
31
+
32
+ # First run creates ~/config/config.toml
33
+ qbitrr
34
+ ```
35
+
36
+ ### 🐳 Run with Docker
37
+ ```bash
38
+ docker run -d \
39
+ --name qbitrr \
40
+ --tty \
41
+ -e TZ=Europe/London \
42
+ -p 6969:6969 \
43
+ -v /path/to/appdata/qbitrr:/config \
44
+ -v /path/to/completed/downloads:/completed_downloads:rw \
45
+ --restart unless-stopped \
46
+ feramance/qbitrr:latest
47
+ ```
48
+
49
+ **Docker Compose:**
50
+ ```yaml
51
+ services:
52
+ qbitrr:
53
+ image: feramance/qbitrr:latest
54
+ container_name: qbitrr
55
+ restart: unless-stopped
56
+ tty: true
57
+ environment:
58
+ TZ: Europe/London
59
+ ports:
60
+ - "6969:6969"
61
+ volumes:
62
+ - /path/to/appdata/qbitrr:/config
63
+ - /path/to/completed/downloads:/completed_downloads:rw
64
+ ```
65
+
66
+ Access the WebUI at `http://<host>:6969/ui` after startup.
67
+
68
+ ## ✨ Key Features
69
+
70
+ - **🚀 Multi-qBittorrent Support (v3.0+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
71
+ - **🚑 Torrent Health Monitoring** – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
72
+ - **🔍 Automated Search** – Missing media, quality upgrades, custom format scoring
73
+ - **🎯 Request Integration** – Pull requests from Overseerr/Ombi, prioritize user-requested media
74
+ - **📊 Quality Management** – RSS sync, queue refresh, profile switching, custom format enforcement
75
+ - **🌱 Seeding Control** – Per-tracker settings, ratio/time limits, tracker injection
76
+ - **💾 Disk Space Management** – Auto-pause when low on space, configurable thresholds
77
+ - **🔄 Auto-Updates** – GitHub release-based updates with scheduled cron support
78
+ - **💻 Modern WebUI** – Live process monitoring, log viewer, Arr insights, config editor
79
+
80
+ ## 🛠️ Essential Configuration
81
+
82
+ 1. **Configure qBittorrent** in `~/config/config.toml`:
83
+ ```toml
84
+ [qBit]
85
+ Host = "localhost"
86
+ Port = 8080
87
+ UserName = "admin"
88
+ Password = "adminpass"
89
+ ```
90
+
91
+ 2. **Add Arr instances**:
92
+ ```toml
93
+ [Radarr-Movies]
94
+ URI = "http://localhost:7878"
95
+ APIKey = "your-radarr-api-key"
96
+ Category = "radarr-movies"
97
+ ```
98
+
99
+ 3. **Set completed folder**:
100
+ ```toml
101
+ [Settings]
102
+ CompletedDownloadFolder = "/path/to/completed"
103
+ ```
104
+
105
+ ### 🆕 Multi-qBittorrent (v3.0+)
106
+
107
+ Manage torrents across multiple qBittorrent instances:
108
+
109
+ ```toml
110
+ [qBit] # Default instance (required)
111
+ Host = "localhost"
112
+ Port = 8080
113
+ UserName = "admin"
114
+ Password = "password"
115
+
116
+ [qBit-seedbox] # Additional instance (optional)
117
+ Host = "192.168.1.100"
118
+ Port = 8080
119
+ UserName = "admin"
120
+ Password = "seedboxpass"
121
+ ```
122
+
123
+ See [Multi-qBittorrent Guide](MULTI_QBIT_V3_USER_GUIDE.md) for complete documentation.
124
+
125
+ ---
126
+
127
+ See [Configuration Guide](https://feramance.github.io/qBitrr/configuration/) and [config.example.toml](config.example.toml) for all available options.
128
+
129
+ ## 📖 Resources
130
+
131
+ - **Documentation:** https://feramance.github.io/qBitrr/
132
+ - **PyPI Package:** https://pypi.org/project/qBitrr2/
133
+ - **Docker Hub:** https://hub.docker.com/r/feramance/qbitrr
134
+ - **Example Config:** [config.example.toml](config.example.toml)
135
+ - **API Documentation:** [API_DOCUMENTATION.md](API_DOCUMENTATION.md)
136
+ - **Systemd Setup:** [SYSTEMD_SERVICE.md](SYSTEMD_SERVICE.md)
137
+
138
+ ## 🐛 Issues & Support
139
+
140
+ - **Report Bugs:** [Bug Report Template](.github/ISSUE_TEMPLATE/bug_report.yml)
141
+ - **Request Features:** [Feature Request Template](.github/ISSUE_TEMPLATE/feature_request.yml)
142
+ - **Discussions:** [GitHub Discussions](https://github.com/Feramance/qBitrr/discussions)
143
+ - **Troubleshooting:** [Common Issues](https://feramance.github.io/qBitrr/troubleshooting/)
144
+
145
+ ## 🤝 Contributing
146
+
147
+ Contributions welcome! See [CONTRIBUTION.md](CONTRIBUTION.md) for coding guidelines and development setup.
148
+
149
+ **Development setup:**
150
+ ```bash
151
+ # Python backend
152
+ make newenv && make syncenv
153
+ make reformat # Format and lint
154
+
155
+ # WebUI
156
+ cd webui && npm ci
157
+ npm run dev # Dev server at localhost:5173
158
+ ```
159
+
160
+ ## ❤️ Support
161
+
162
+ If qBitrr saves you time and headaches:
163
+ - ⭐ **Star the repo** – helps others discover qBitrr
164
+ - 💰 **Sponsor:** [Patreon](https://patreon.com/qBitrr) | [PayPal](https://www.paypal.me/feramance)
165
+
166
+ ## 📄 License
167
+
168
+ Released under the [MIT License](LICENSE). Use it, modify it, share it—commercially or personally.
169
+
170
+ ---
171
+
172
+ <div align="center">
173
+
174
+ **Made with ❤️ by the qBitrr community**
175
+
176
+ [Documentation](https://feramance.github.io/qBitrr/) • [PyPI](https://pypi.org/project/qBitrr2/) • [Docker](https://hub.docker.com/r/feramance/qbitrr) • [GitHub](https://github.com/Feramance/qBitrr)
177
+
178
+ </div>
@@ -109,6 +109,7 @@ Theme = "Dark"
109
109
 
110
110
 
111
111
  [qBit]
112
+ # Default qBittorrent instance (REQUIRED)
112
113
  # If this is enabled qBitrr can run in headless mode where it will only process searches.
113
114
  # If media search is enabled in their individual categories
114
115
  # This is useful if you use for example Sabnzbd/NZBGet for downloading content but still want the faster media searches provided by qbit
@@ -127,6 +128,41 @@ UserName = "CHANGE_ME"
127
128
  Password = "CHANGE_ME"
128
129
 
129
130
 
131
+ # ============================================================
132
+ # MULTI-QBITTORRENT SUPPORT (v3.0+)
133
+ # ============================================================
134
+ # You can configure multiple qBittorrent instances using the [qBit-NAME] syntax.
135
+ # Each Arr instance will monitor ALL qBit instances for torrents in its category.
136
+ # This allows load balancing, redundancy, and VPN isolation.
137
+ #
138
+ # IMPORTANT: Use dash (-) notation, NOT dot (.) notation!
139
+ # ✅ CORRECT: [qBit-seedbox]
140
+ # ❌ WRONG: [qBit.seedbox]
141
+ #
142
+ # Examples:
143
+ #
144
+ # [qBit-seedbox]
145
+ # Host = "192.168.1.100"
146
+ # Port = 8080
147
+ # UserName = "admin"
148
+ # Password = "seedboxpass"
149
+ #
150
+ # [qBit-vpn]
151
+ # Host = "10.8.0.2"
152
+ # Port = 8080
153
+ # UserName = "admin"
154
+ # Password = "vpnpass"
155
+ #
156
+ # [qBit-remote]
157
+ # Host = "remote.example.com"
158
+ # Port = 8443
159
+ # UserName = "admin"
160
+ # Password = "remotepass"
161
+ #
162
+ # For more information, see: MULTI_QBIT_V3_USER_GUIDE.md
163
+ # ============================================================
164
+
165
+
130
166
  [Sonarr-TV]
131
167
  # Toggle whether to manage the Servarr instance torrents.
132
168
  Managed = true
@@ -28,7 +28,7 @@ target-version = ['py311']
28
28
 
29
29
  [tool.poetry]
30
30
  name = "pypi-public"
31
- version = "5.6.1"
31
+ version = "5.7.0"
32
32
  description = "Intelligent automation for qBittorrent and *Arr apps (Radarr/Sonarr/Lidarr) - health monitoring, instant imports, quality upgrades, request integration"
33
33
  authors = ["Drapersniper", "Feramance"]
34
34
  readme = "README.md"