Risuko
Guides

RSS Feeds

Automatically download new content from RSS feeds.

Risuko can subscribe to RSS/Atom feeds and automatically download new items as they appear.

[!WARNING] RSS feed management via CLI requires the standalone risuko-cli binary. The RSS RPC methods are not yet implemented in the engine's RPC server. RSS is not available through the Node.js API at this time.

Adding a Feed

CLI

risuko rss add "https://example.com/feed.xml"

Node.js

RSS management via the Node.js API is done through the RPC interface when the engine is running with RPC enabled.

Managing Feeds

List All Feeds

risuko rss list

JSON output for scripting:

risuko rss list --json

Refresh Feeds

Force an immediate refresh of all feeds:

risuko rss refresh

The engine also polls feeds periodically on a configurable interval.

Remove a Feed

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

How It Works

  1. When a feed is added, the engine fetches it immediately
  2. New items are detected by comparing with previously seen entries
  3. Downloadable items (direct links, magnet links, torrent URLs) are queued automatically
  4. Feed state is persisted via the StorageBackend trait
  5. Periodic polling checks for new items at configurable intervals

Storage

RSS feed data is stored using the StorageBackend trait:

  • Desktop app: Uses tauri_plugin_store
  • CLI/Node.js: Uses FileStorage (JSON files in the config directory)

Feed state survives engine restarts. Previously downloaded items are not re-downloaded.

Rules

The desktop app's RSS panel exposes a rule engine that decides which items get downloaded automatically. Rules are evaluated against the parsed item metadata (title, parsed series/season/episode, size, seeders, quality tags) and either match in priority order (AnyMatch, the default) or by best score across the active set (BestMatch).

Each rule supports the following knobs (RssRule in engine/rss/types.rs):

FieldDescription
name, is_active, auto_downloadIdentification + master switches
feed_idsRestrict to specific feed IDs (empty = all feeds)
priority, modeConflict resolution (any-match / best-match)
title_must, title_must_notLists of { kind, value, case_sensitive } patterns where kind is contains, glob, or regex
min_size_bytes, max_size_bytes, min_seedersSize / health gates
series_filter, seasons, episodesSeries name match plus season list and an episodes selector (all, from { start }, range { start, end }, specific { values })
quality_preferences, required_qualities, forbidden_qualitiesTokens matched against the title parser's extracted quality tags (e.g. 1080p, HEVC, WEB-DL)
upgrade_existingRe-download a previously-grabbed episode when a higher-ranked quality appears
download_dir, filename_templatePer-rule output overrides; supports {title}, {series}, {season}, {episode}, {quality} placeholders
schedule, cooldown_secsTime-of-day / weekday window and minimum interval between matches

Title metadata (series, season, episode, quality, codec, group) is extracted by the parser in engine/rss/parser.rs before rules run, so filters can address parsed fields directly without needing custom regex.

On this page