Risuko
CLI

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 ~/Downloads

With custom filename

risuko download https://example.com/archive.tar.gz -o my-archive.tar.gz

Behind a proxy

risuko download https://example.com/file.zip --proxy http://proxy.corp.com:8080

With 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

risuko download "magnet:?xt=urn:btih:abc123..."

.torrent file with seeding control

risuko download ./linux-distro.torrent \
  --seed-ratio 2.0 \
  --seed-time 120

Media (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 --ytdlp

Running as a Server

Start a headless server

# Default port 16800
risuko serve

# Custom port
risuko serve --rpc-port 6800

Remote downloads with a running server

# In another terminal
risuko download https://example.com/file.zip --rpc-port 6800
risuko status --rpc-port 6800

There 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 mysecret

A 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 6800

RSS Feeds

Subscribe to a feed

risuko rss add "https://nyaa.si/?page=rss"

List subscriptions

risuko rss list

Force refresh

risuko rss refresh

Remove a feed

# Get the feed ID from `rss list`
risuko rss remove feed_abc123

Configuration

View all settings

risuko config list

Change 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 dir

config 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
wait

Run 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.

On this page