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] The engine's RPC server does not implement the RSS methods yet, so the CLI
rsssubcommands below currently fail with "Method not found" against a running engine. RSS works today through the desktop app's RSS panel. RSS is not available through the Node.js API.
Adding a Feed
CLI
risuko rss add "https://example.com/feed.xml"Node.js
The Node.js API does not expose RSS management. Use the desktop app's RSS panel instead.
Managing Feeds
List All Feeds
risuko rss listJSON output for scripting:
risuko rss list --jsonRefresh Feeds
Force an immediate refresh of all feeds:
risuko rss refreshThe engine also polls feeds periodically. Each feed has its own update interval (default 30 minutes, configurable per feed). A feed is deactivated after 5 consecutive fetch failures; re-activating it resets the error count.
Remove a Feed
# Get the feed ID (a UUID) from `rss list`
risuko rss remove 4f8a1b2c-9d3e-4f5a-8b6c-7d8e9f0a1b2cHow It Works
- When a feed is added, the engine fetches it immediately
- New items are detected by item ID — a SHA-256 hash of the entry's GUID (or its link when the GUID is missing)
- New items are matched against your rules; only items matching an active auto-download rule are grabbed (see Rules). Media items (enclosures, magnet links, torrent URLs) are queued as downloads; article items are saved as sanitized, self-contained HTML files with their inline media downloaded alongside
- Feed state is persisted via the
StorageBackendtrait - Periodic polling checks each feed on its own interval; after a poll finds new items the engine emits an
rss-new-itemsevent with the new-item count
Storage
RSS feed data is stored under the rss storage key using the StorageBackend trait. The desktop app — currently the only host that runs the RSS manager — backs it with tauri_plugin_store.
Feed state survives engine restarts. Previously downloaded items are not re-downloaded. Each feed retains at most 500 items, and the episode download history used for deduplication caps at 10,000 records (oldest pruned first).
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):
| Field | Description |
|---|---|
name, is_active, auto_download | Identification + master switches |
feed_ids | Restrict to specific feed IDs (empty = all feeds) |
priority, mode | Conflict resolution (any-match / best-match) |
title_must, title_must_not | Lists of { kind, value, case_sensitive } patterns where kind is contains, glob, or regex |
min_size_bytes, max_size_bytes, min_seeders | Size / health gates |
series_filter, seasons, episodes | Series name match plus season list and an episodes selector (all, from { start }, range { start, end }, specific { values }) |
quality_preferences, required_qualities, forbidden_qualities | Tokens matched (case-insensitively) against the title parser's canonicalized quality tags (e.g. 1080p, x265, WEB-DL, HDR10 — note HEVC/H.265 canonicalize to x265, H.264/AVC to x264) |
upgrade_existing | Re-download a previously-grabbed episode when a higher-ranked quality appears |
download_dir | Per-rule download directory override |
schedule, cooldown_secs | Time-of-day / weekday window, and minimum time since the same episode was last downloaded before the rule fires again |
Size bounds apply only when the feed reports an enclosure length, and
min_seeders only when the title carries a seeder count (e.g. [123S/45L]).
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. The desktop app can dry-run a rule against recent feed
items before saving it.