No description
tui
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-22 23:09:58 +03:00
src feat(management): add title deletion modes 2026-09-22 12:53:13 +03:00
.gitignore feat(tui): add media management interface 2026-08-29 11:18:20 +03:00
Cargo.lock fix(tui): refine season workflows and layout 2026-08-29 13:58:27 +03:00
Cargo.toml fix(tui): refine season workflows and layout 2026-08-29 13:58:27 +03:00
config.example.json feat(management): add language policy and release search 2026-08-29 11:42:01 +03:00
Justfile chore(build): add release install recipe 2026-09-22 23:09:58 +03:00
README.md feat(management): add title deletion modes 2026-09-22 12:53:13 +03:00

arr

arr is a Rust/Ratatui terminal UI for understanding a title across Seerr, Radarr/Sonarr, the download queue, and Jellyfin. Its Requests view answers two questions directly: what is happening with this title, and what should I do next?

Configure

Copy config.example.json to ~/.config/arr/config.json (or set ARR_CONFIG to another path). Restrict that file to your user because it contains API keys and, optionally, the qBittorrent password.

Every service URL must include its reverse-proxy base path, for example https://bread.example.net/movies. arr appends /api/v3 itself.

Jellyfin is optional. Add its URL, API key, and the profile's user ID to enable the Watching view.

Seerr is optional. Add its URL and API key to enable title lookup, requesting, approval, retry, and request status. Requests are joined to their Radarr or Sonarr title and active queue item, so approved-but-idle titles are visible.

refresh_seconds controls automatic refreshes and defaults to 30 seconds.

language_policy.preferred lists acceptable languages. Set minimum to "subtitles" to accept preferred-language subtitles when dubbed audio is not available, or "audio" to require preferred-language audio in every file.

Run

cargo run --release

Keys: 1–6, Tab, or h/l change views; j/k move; / filters the current Library, Requests, Watching, or Watchlist view; in Search, / performs a separate Seerr title lookup. s cycles the current view's sorting, f cycles request status filters, m asks Radarr/Sonarr to search for missing media, a requests/approves/retries, o opens the selected title in an available Seerr, Sonarr, Radarr, Jellyfin, or qBittorrent source, r refreshes, and ? opens help.

In Library, b asks the selected title's Radarr/Sonarr instance to search its configured indexers for alternatives. Candidates show parsed audio language, custom-format score, quality, size, and *arr rejection reasons. Grabbing a candidate requires a separate confirmation. d offers two deletion modes: keep the Sonarr/Radarr entry while deleting files and unmonitoring it, or remove the *arr entry along with its files. Both modes retain the completed Seerr request/history.

Library defaults to title sorting. Repeated s cycles title, recently added, recently downloaded, size, missing-first, audio-language, and subtitle-language sorting. Rows stay focused on title, availability, file count, and size. A high-contrast details section shows the full audio/subtitle language sets plus per-file policy coverage and added/downloaded dates. Library rows use AUDIO ✓, SUBS ✓, or LANG ! as compact policy verdicts. PageUp/PageDown, Home, and End are supported, and list scroll position remains stable while moving back from the end.

In Search, w adds the selected result to Seerr Watchlist after confirmation. Covers for Library and Search selections appear inline in capable terminals. On wide terminals the cover shares a compact header area with core metadata.

Requests from Search and Watchlist use Seerr's configured default server and quality profile. TV requests select seasons first, then the request is confirmed. Existing requests can still have their server/profile edited with E.

In Downloads, j/k selects a grouped title and J/K selects an individual torrent inside that group. The status pane follows the selected torrent, and d removes that torrent after confirmation.

In Requests or Library, E edits the Radarr/Sonarr server and quality profile for the selected request. e opens the TV season manager. The new selection is applies immediately to Seerr after selection.

Watchlist reads the current Seerr user's synced watchlist and shows only titles that are absent from both Requests and the existing library. Requesting one uses the same confirmation flow as Search.

The header shows the combined media-file size plus free and total capacity for the configured library volumes. Shared volumes reported by multiple *arr instances are counted once.

Mutating actions always require confirmation.

Build

cargo fmt --check
cargo test
cargo build --release