CLI Examples
Practical examples for common Risuko CLI workflows.
Basic Downloads
HTTP/HTTPS file
risuko download https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso \
-t 16 \
-d ~/DownloadsWith custom filename
risuko download https://example.com/archive.tar.gz -o my-archive.tar.gzBehind a proxy
risuko download https://example.com/file.zip --proxy http://proxy.corp.com:8080With DNS over HTTPS
risuko config set engine-overrides '{"doh-enable":true,"doh-url":"https://cloudflare-dns.com/dns-query","doh-bootstrap":"1.1.1.1,1.0.0.1"}'DoH is engine-wide configuration, not a per-download flag. The doh-* keys
(doh-enable, doh-url, doh-bootstrap, doh-fallback) are system keys, so
risuko config set doh-enable true alone has no effect; put them in
engine-overrides (as above, which replaces the whole object) or in
system.json. The engine reads them at startup, so restart a running
risuko serve for changes to take effect.
With authentication
risuko download https://example.com/private/file.zip \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."With cookies
risuko download https://example.com/session-file.zip \
--cookie "session_id=abc123; user=john"BitTorrent
Magnet link
risuko download "magnet:?xt=urn:btih:abc123...".torrent file with seeding control
risuko download ./linux-distro.torrent \
--seed-ratio 2.0 \
--seed-time 120Media (yt-dlp)
URLs on known media hosts (YouTube, Twitch, Vimeo, bilibili, TikTok, X, and others) are routed through the yt-dlp media engine automatically. Media downloads accept only one URL.
Video with a format selector
risuko download "https://www.youtube.com/watch?v=dQw4w9WgXcQ" \
--media-format "bestvideo+bestaudio"Force a URL through yt-dlp
# For hosts not in the built-in allowlist
risuko download https://example.com/watch/12345 --ytdlpRunning as a Server
Start a headless server
# Default port 16800
risuko serve
# Custom port
risuko serve --rpc-port 6800Remote downloads with a running server
# In another terminal
risuko download https://example.com/file.zip --rpc-port 6800
risuko status --rpc-port 6800There is no host flag: the CLI always dials the host from the rpc-host
config key (default 127.0.0.1), and serve binds to it. To reach a server
from another machine, set rpc-host in the config on both ends.
With an RPC secret
Set "rpc-secret": "mysecret" in system.json in the config directory
(<OS config dir>/app.risuko.Risuko, or the legacy dev.risuko.app if it already exists; see Config Directory Locations). risuko config set rpc-secret writes
user.json, which the engine does not read for this key, and
engine-overrides ignores *-secret keys.
# `serve` has no --rpc-secret flag; it reads the secret from system.json
risuko serve
# Clients pass --rpc-secret (or read it from the same system.json)
risuko status --rpc-secret mysecretA server with an empty secret accepts any token, so a working
--rpc-secret call does not prove authentication is on.
Graceful shutdown
risuko shutdown --rpc-port 6800RSS Feeds
Subscribe to a feed
risuko rss add "https://nyaa.si/?page=rss"List subscriptions
risuko rss listForce refresh
risuko rss refreshRemove a feed
# Get the feed ID from `rss list`
risuko rss remove feed_abc123Configuration
View all settings
risuko config listChange download directory and max concurrent downloads
dir and max-concurrent-downloads are system keys, so set them through
engine-overrides (this replaces the whole object) or edit system.json:
risuko config set engine-overrides '{"dir":"/home/user/downloads","max-concurrent-downloads":5}'Check a specific setting
risuko config get dirconfig get and config list show user.json layered over system.json,
which is not always what the engine uses; see
Configuration.
Scripting
JSON output for automation
# Get active downloads as JSON
risuko status --json | jq '.[] | select(.status == "active")'
# Get download speed
risuko global-stat --json | jq '.downloadSpeed'Download and wait
# The download command blocks until complete (with progress bar)
risuko download https://example.com/file.zip && echo "Done!"Batch downloads from a file
# urls.txt contains one URL per line
while IFS= read -r url; do
risuko download "$url" -d ~/Downloads &
done < urls.txt
waitRun risuko serve (or the desktop app) first. With no engine running, each
invocation starts its own temporary engine, and parallel invocations race for
the RPC port.