Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ webui/coverage/
*.db-shm

# Config files (use example)
.config/
config.toml

# Test files
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
## Key Features

- **Manage** – Configure and run all ten recovery, organization, and storage tools in one workspace. Compact cards keep advanced settings out of the client configuration dialog. [Maintenance guide](docs/features/torrent-maintenance.md) and [worked examples](docs/features/maintenance-examples.md).
- **Radarr v3 through v7 support** – All versions use `/api/v3`; no configuration changes. [Radarr configuration](docs/configuration/arr/radarr.md).
- **Sonarr v3, v4, and v5 support** – Automatic API version detection with the same configuration format. [Sonarr configuration](docs/configuration/arr/sonarr.md).
- **Multi-qBittorrent Support** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
- **Torrent Health Monitoring** – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
Expand Down
6 changes: 4 additions & 2 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ OIDCEnabled = false
# Enable live updates for Arr views
LiveArr = true

# WebUI theme (Light or Dark)
Theme = "Dark"
# WebUI theme (System, Light, Dark, or Midnight)
Theme = "System"

# View density (Comfortable or Compact)
ViewDensity = "Comfortable"
Expand Down Expand Up @@ -225,6 +225,8 @@ ExcludedCategories = []
ExcludedTags = []

# Explicit mappings describe the same folder in the client and Torrentarr.
# Recycling requires mappings even when both paths are identical. In Docker,
# LocalPath is inside Torrentarr; the directory must already be mounted/readable.
# [[qBit.Maintenance.PathMappings]]
# ClientPath = '/downloads'
# LocalPath = '/data/downloads'
Expand Down
Binary file modified docs/assets/favicon-16x16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/favicon-32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/favicon-48x48.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
65 changes: 18 additions & 47 deletions docs/assets/logov2-clean.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
306 changes: 306 additions & 0 deletions docs/assets/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,28 @@
],
"type": "string"
},
"restartRequirements": {
"items": {
"properties": {
"category": {
"type": "string"
},
"component": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"required": [
"component",
"category",
"kind"
],
"type": "object"
},
"type": "array"
},
"status": {
"example": "ok",
"type": "string"
Expand Down Expand Up @@ -5902,6 +5924,7 @@
},
"/web/qbit/overview": {
"get": {
"description": "Includes optional summaries per available client: instance, torrentCount, totalSize, downloading, seeding, stopped, other. These monitored-category totals are computed before the display cap and deduplicated by client and torrent hash. Clients without an inventory response are omitted.",
"operationId": "web_qbit_overview",
"parameters": [
{
Expand Down Expand Up @@ -6426,6 +6449,289 @@
]
}
},
"/web/statistics/arr-activity": {
"get": {
"description": "Follows WebUI authentication. Worker-level series retain seven days; no backfill. Queue depth averages fresh heartbeats, rounded to whole items. Completions count only tracked Torrentarr submissions: searches require successful command completion; imports require positive correlated download-import history after submission. Counts are timestamped when confirmed, not when requested. Missing/partial coverage is explicit. Buckets are 1, 5, or 30 minutes. Disabled/deleted workers can remain in retained history.",
"parameters": [
{
"in": "query",
"name": "range",
"schema": {
"default": "24h",
"enum": [
"1h",
"24h",
"7d"
],
"type": "string"
}
},
{
"description": "Optional configured Arr section name.",
"in": "query",
"name": "worker",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"properties": {
"bucketMinutes": {
"type": "integer"
},
"generatedAt": {
"format": "date-time",
"type": "string"
},
"range": {
"type": "string"
},
"series": {
"items": {
"properties": {
"instance": {
"type": "string"
},
"points": {
"items": {
"properties": {
"completionSamples": {
"type": "integer"
},
"expectedSamples": {
"type": "integer"
},
"importsConfirmed": {
"nullable": true,
"type": "integer"
},
"queueDepth": {
"nullable": true,
"type": "integer"
},
"queueSamples": {
"type": "integer"
},
"searchesCompleted": {
"nullable": true,
"type": "integer"
},
"timestamp": {
"format": "date-time",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"type": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
}
},
"description": "OK"
},
"400": {
"description": "Invalid range or worker"
},
"401": {
"description": "Authentication required"
}
},
"summary": "Persistent Arr queue and confirmed activity history",
"tags": [
"Torrentarr Statistics"
]
}
},
"/web/statistics/catalog": {
"get": {
"description": "Follows configured WebUI authentication. Transfer rates are bytes/second, collected once per minute and retained seven days. Completed buckets use 1, 5, or 30 minutes. Null rates indicate no observations; samples below expectedSamples indicate partial coverage. Catalog availability is monitored media with files; missing is monitored minus available. Catalog counts ignore page and text filters.",
"parameters": [
{
"in": "query",
"name": "kind",
"required": true,
"schema": {
"enum": [
"radarr",
"sonarr",
"lidarr",
"readarr"
],
"type": "string"
}
},
{
"description": "Arr section name; omitted or aggregate selects all instances of this kind.",
"in": "query",
"name": "instance",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"properties": {
"available": {
"type": "integer"
},
"missing": {
"type": "integer"
},
"monitored": {
"type": "integer"
},
"total": {
"type": "integer"
},
"unit": {
"type": "string"
}
},
"type": "object"
}
}
},
"description": "OK"
},
"400": {
"description": "Invalid range, kind, or instance"
},
"401": {
"description": "Authentication required"
}
},
"summary": "Complete catalog availability rollup",
"tags": [
"Torrentarr Statistics"
]
}
},
"/web/statistics/transfers": {
"get": {
"description": "Follows configured WebUI authentication. Transfer rates are bytes/second, collected once per minute and retained seven days. Completed buckets use 1, 5, or 30 minutes. Null rates indicate no observations; samples below expectedSamples indicate partial coverage. Catalog availability is monitored media with files; missing is monitored minus available. Catalog counts ignore page and text filters.",
"parameters": [
{
"description": "Enabled client name; omitted or all selects all enabled clients.",
"in": "query",
"name": "instance",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "range",
"schema": {
"default": "24h",
"enum": [
"1h",
"24h",
"7d"
],
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"properties": {
"bucketMinutes": {
"type": "integer"
},
"generatedAt": {
"format": "date-time",
"type": "string"
},
"range": {
"enum": [
"1h",
"24h",
"7d"
],
"type": "string"
},
"series": {
"items": {
"properties": {
"instance": {
"type": "string"
},
"points": {
"items": {
"properties": {
"downloadRate": {
"format": "double",
"nullable": true,
"type": "number"
},
"expectedSamples": {
"type": "integer"
},
"samples": {
"type": "integer"
},
"timestamp": {
"format": "date-time",
"type": "string"
},
"uploadRate": {
"format": "double",
"nullable": true,
"type": "number"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
}
},
"description": "OK"
},
"400": {
"description": "Invalid range, kind, or instance"
},
"401": {
"description": "Authentication required"
}
},
"summary": "Persistent whole-client transfer history",
"tags": [
"Torrentarr Statistics"
]
}
},
"/web/status": {
"get": {
"description": "All clients are equal. Read qbitInstances by instance name; the legacy qbit field has been removed.",
Expand Down
2 changes: 1 addition & 1 deletion docs/configuration/arr/radarr.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Radarr Configuration

This guide covers how to configure Radarr instances in Torrentarr for movie management, automated searching, and quality upgrades.
This guide covers how to configure Radarr instances in Torrentarr for movie management, automated searching, and quality upgrades. Torrentarr supports Radarr v3.x through v7.x; all versions use the `/api/v3` API.

---

Expand Down
Loading
Loading