-
-
Notifications
You must be signed in to change notification settings - Fork 96
Home
yt-dlp-web-ui provides a JSON-RPC 1.0 compliant RPC interface.
The available transport protocols are: HTTP-POST and WebSockets with their respective secure extensions (HTTPS-POST and WebSocketsSecurity).
This wiki is about wiring up a custom RPC client to the RPC server. (the examples will be written in JavaScript and Python3).
- Service.Exec
- Service.Progess
- Service.Formats
- Service.Pending
- Service.Running
- Service.Kill
- Service.KillAll
- Service.Clear
- Service.FreeSpace
- Service.DirectoryTree
- Service.UpdateExecutable
{
"id": 0, // sequence number, useful to identify requests/responses
"method": "service.*", // rpc method name
"params": [] // method params usually a JSON object
}
The following request bodies will be inside the params array.
Invoke a new process of yt-dlp
and start a download with options.
Each request will spawn a new process. Future releases will implement a download queue with a configurable size.
Request Body
{
"URL": "https://...", // the url of the resource to download
"Params" "--no-mtime, -X", // (optional) yt-dlp cli arguments
"Path": "", // (optional) path to download the file, if not specified will be the default download folder
"Rename" "" // (optional) rename the download file to the specified one
}
Response Body
string // started process UUIDv4 (e.g. d856b872-4f7d-487f-a29e-c2ea8c71592f)
Example code
def call(url, method, args):
data = {
'id': 0,
'method': method,
'params': [args]
}
res = requests.post(url=url, json=data, headers={'Content-Type': 'application/json'})
response = json.loads(res.text)
return response
addr = 'ip or hostname'
rpc = f'http://{addr}/rpc'
args = {
'URL': 'some url'
'Params': ['--no-mtime']
'Rename': '👍.mp4'
}
call(rpc, 'Service.Exec', args)
Progess retrieves the Progress of a specific Process given its ID
Request Body
{
"ID": 0 // Process identification number
}
Response Body
{
"percentage": "29.3%", // download percentage string
"speed": 92374832, // speed in bytes/s int32
"ETA": 300 // time to complete in seconds int32
}
Example code
def call(url, method, args):
data = {
'id': 0,
'method': method,
'params': [args]
}
res = requests.post(url=url, json=data, headers={'Content-Type': 'application/json'})
response = json.loads(res.text)
return response
addr = 'ip or hostname'
rpc = f'http://{addr}/rpc'
args = {
'ID': 'UUIDv4'
}
call(rpc, 'Service.Progress', args)
Retrieves all running processes progress
Request Body
{} // or null
Response Body
{
[
{
"percentage": "29.3%", // download percentage string
"speed": 92374832, // speed in bytes/s int32
"ETA": 300 // time to complete in seconds int32
},
...
]
} // or null
Example code
def call(url, method, args):
data = {
'id': 0,
'method': method,
'params': [args]
}
res = requests.post(url=url, json=data, headers={'Content-Type': 'application/json'})
response = json.loads(res.text)
return response
addr = 'ip or hostname'
rpc = f'http://{addr}/rpc'
args = None
call(rpc, 'Service.Running', args)