The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
60,
440
],
"parameters": {
"path": "72a05ff6-05f5-4e7a-9eee-54a350bb6a47",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
640,
580
],
"parameters": {
"rules": {
"rules": [
{
"value2": "media.resume",
"operation": "contains"
},
{
"output": 1,
"value2": "media.play",
"operation": "contains"
},
{
"output": 2,
"value2": "media.pause",
"operation": "contains"
},
{
"output": 3,
"value2": "media.stop",
"operation": "contains"
}
]
},
"value1": "={{$node[\"Webhook\"].json[\"body\"][\"payload\"]}}",
"dataType": "string"
},
"typeVersion": 1
},
{
"name": "Resume",
"type": "n8n-nodes-base.noOp",
"position": [
860,
280
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Check if Local",
"type": "n8n-nodes-base.if",
"position": [
460,
440
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json[\"body\"][\"payload\"]}}",
"value2": "\"local\":false",
"operation": "contains"
}
]
}
},
"typeVersion": 1
},
{
"name": "Play",
"type": "n8n-nodes-base.noOp",
"position": [
860,
440
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Don't Do Anything",
"type": "n8n-nodes-base.noOp",
"position": [
660,
220
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Pause",
"type": "n8n-nodes-base.noOp",
"position": [
860,
680
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Stop",
"type": "n8n-nodes-base.noOp",
"position": [
860,
840
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Get QB Cookie",
"type": "n8n-nodes-base.httpRequest",
"position": [
1260,
360
],
"parameters": {
"url": "=http://{{$node[\"Global Variables\"].json[\"qbittorent\"][\"internalIP\"]}}:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}/api/v2/auth/login",
"options": {
"fullResponse": true
},
"responseFormat": "string",
"queryParametersUi": {
"parameter": [
{
"name": "username",
"value": "={{$node[\"Global Variables\"].json[\"qbittorent\"][\"username\"]}}"
},
{
"name": "password",
"value": "={{$node[\"Global Variables\"].json[\"qbittorent\"][\"password\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Referer",
"value": "=http://localhost:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}"
}
]
}
},
"typeVersion": 1
},
{
"name": "Get QB Cookie1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1260,
760
],
"parameters": {
"url": "=http://{{$node[\"Global Variables\"].json[\"qbittorent\"][\"internalIP\"]}}:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}/api/v2/auth/login",
"options": {
"fullResponse": true
},
"responseFormat": "string",
"queryParametersUi": {
"parameter": [
{
"name": "username",
"value": "={{$node[\"Global Variables\"].json[\"qbittorent\"][\"username\"]}}"
},
{
"name": "password",
"value": "={{$node[\"Global Variables\"].json[\"qbittorent\"][\"password\"]}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Referer",
"value": "=http://localhost:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}"
}
]
}
},
"typeVersion": 1
},
{
"name": "Global Variables",
"type": "n8n-nodes-base.set",
"position": [
280,
440
],
"parameters": {
"values": {
"string": [
{
"name": "qbittorent.username",
"value": "yourusername"
},
{
"name": "qbittorent.password",
"value": "yourpassword"
},
{
"name": "qbittorent.internalIP",
"value": "192.168.1.218"
},
{
"name": "qbittorent.port",
"value": "2020"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"name": "Check Throttle State",
"type": "n8n-nodes-base.httpRequest",
"position": [
1460,
360
],
"parameters": {
"url": "=http://{{$node[\"Global Variables\"].json[\"qbittorent\"][\"internalIP\"]}}:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}/api/v2/transfer/speedLimitsMode",
"options": {
"fullResponse": true
},
"requestMethod": "POST",
"queryParametersUi": {
"parameter": [
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Referer",
"value": "=http://localhost:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}"
},
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
}
},
"typeVersion": 1
},
{
"name": "Check if Throttled",
"type": "n8n-nodes-base.if",
"position": [
1680,
360
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{$json[\"body\"]}}",
"value2": 1,
"operation": "equal"
}
],
"string": []
}
},
"typeVersion": 1
},
{
"name": "Do Nothing",
"type": "n8n-nodes-base.noOp",
"position": [
1900,
260
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Check Throttle State2",
"type": "n8n-nodes-base.httpRequest",
"position": [
1460,
760
],
"parameters": {
"url": "=http://{{$node[\"Global Variables\"].json[\"qbittorent\"][\"internalIP\"]}}:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}/api/v2/transfer/speedLimitsMode",
"options": {
"fullResponse": true
},
"requestMethod": "POST",
"queryParametersUi": {
"parameter": [
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie1\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Referer",
"value": "=http://localhost:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}"
},
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie1\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
}
},
"typeVersion": 1
},
{
"name": "Check if Throttled1",
"type": "n8n-nodes-base.if",
"position": [
1660,
760
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{$json[\"body\"]}}",
"value2": 1,
"operation": "equal"
}
],
"string": []
}
},
"typeVersion": 1
},
{
"name": "Do Nothing1",
"type": "n8n-nodes-base.noOp",
"position": [
1900,
860
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Throttle Connection",
"type": "n8n-nodes-base.noOp",
"position": [
1060,
360
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Resume Downloads",
"type": "n8n-nodes-base.noOp",
"position": [
1060,
760
],
"parameters": {},
"typeVersion": 1
},
{
"name": "Disable Throttle",
"type": "n8n-nodes-base.httpRequest",
"position": [
1900,
660
],
"parameters": {
"url": "=http://{{$node[\"Global Variables\"].json[\"qbittorent\"][\"internalIP\"]}}:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}/api/v2/transfer/toggleSpeedLimitsMode",
"options": {},
"requestMethod": "POST",
"queryParametersUi": {
"parameter": [
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie1\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Referer",
"value": "=http://localhost:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}"
},
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie1\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
}
},
"typeVersion": 1
},
{
"name": "Enable Throttle",
"type": "n8n-nodes-base.httpRequest",
"position": [
1900,
440
],
"parameters": {
"url": "=http://{{$node[\"Global Variables\"].json[\"qbittorent\"][\"internalIP\"]}}:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}/api/v2/transfer/toggleSpeedLimitsMode",
"options": {},
"requestMethod": "POST",
"queryParametersUi": {
"parameter": [
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Referer",
"value": "=http://localhost:{{$node[\"Global Variables\"].json[\"qbittorent\"][\"port\"]}}"
},
{
"name": "Cookie",
"value": "={{$node[\"Get QB Cookie\"].json[\"headers\"][\"set-cookie\"][0].match(/[^;]*/).toString()}}"
}
]
}
},
"typeVersion": 1
}
],
"connections": {
"Play": {
"main": [
[
{
"node": "Throttle Connection",
"type": "main",
"index": 0
}
]
]
},
"Stop": {
"main": [
[
{
"node": "Resume Downloads",
"type": "main",
"index": 0
}
]
]
},
"Pause": {
"main": [
[
{
"node": "Resume Downloads",
"type": "main",
"index": 0
}
]
]
},
"Resume": {
"main": [
[
{
"node": "Throttle Connection",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Resume",
"type": "main",
"index": 0
}
],
[
{
"node": "Play",
"type": "main",
"index": 0
}
],
[
{
"node": "Pause",
"type": "main",
"index": 0
}
],
[
{
"node": "Stop",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Global Variables",
"type": "main",
"index": 0
}
]
]
},
"Get QB Cookie": {
"main": [
[
{
"node": "Check Throttle State",
"type": "main",
"index": 0
}
]
]
},
"Check if Local": {
"main": [
[
{
"node": "Don't Do Anything",
"type": "main",
"index": 0
}
],
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Get QB Cookie1": {
"main": [
[
{
"node": "Check Throttle State2",
"type": "main",
"index": 0
}
]
]
},
"Global Variables": {
"main": [
[
{
"node": "Check if Local",
"type": "main",
"index": 0
}
]
]
},
"Resume Downloads": {
"main": [
[
{
"node": "Get QB Cookie1",
"type": "main",
"index": 0
}
]
]
},
"Check if Throttled": {
"main": [
[
{
"node": "Do Nothing",
"type": "main",
"index": 0
}
],
[
{
"node": "Enable Throttle",
"type": "main",
"index": 0
}
]
]
},
"Check if Throttled1": {
"main": [
[
{
"node": "Disable Throttle",
"type": "main",
"index": 0
}
],
[
{
"node": "Do Nothing1",
"type": "main",
"index": 0
}
]
]
},
"Throttle Connection": {
"main": [
[
{
"node": "Get QB Cookie",
"type": "main",
"index": 0
}
]
]
},
"Check Throttle State": {
"main": [
[
{
"node": "Check if Throttled",
"type": "main",
"index": 0
}
]
]
},
"Check Throttle State2": {
"main": [
[
{
"node": "Check if Throttled1",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow automatically throttles qBittorrent downloads when you're streaming media on your Plex server, ensuring smooth playback without buffering interruptions. It's ideal for home users managing personal media libraries who want to prioritise video quality over torrent speeds during viewing sessions. The key step involves a webhook trigger from Plex detecting playback activity, which then pauses or adjusts qBittorrent via HTTP requests to prevent bandwidth contention.
Use this when your Plex and qBittorrent run on the same network and you frequently multitask streaming with downloads, saving time on manual adjustments. Avoid it if your setup uses separate networks or if you prefer constant torrent speeds without interruptions. Common variations include adding notifications via email or integrating with other torrent clients like Transmission for broader compatibility.
About this workflow
Plex Automatic Qbittorent Throttler. Uses noOp, httpRequest. Webhook trigger; 21 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Portfolio Orchestrator. Uses httpRequest. Webhook trigger; 59 nodes.
jump-section: Comment Fix Pipeline. Uses httpRequest. Webhook trigger; 24 nodes.
GitHub Issues Router (Linear / Jira / ClickUp). Uses stickyNote, httpRequest, respondToWebhook. Webhook trigger; 23 nodes.
Form to CRM Lead Router (Pipedrive / HubSpot / Salesforce). Uses stickyNote, httpRequest, respondToWebhook. Webhook trigger; 22 nodes.
Calendly to CRM Sync (Pipedrive / HubSpot / Salesforce). Uses stickyNote, httpRequest, respondToWebhook. Webhook trigger; 22 nodes.