nilsandClaude Opus 5.5 67f5cf6ce7 Switch the theme live
Widgets copy their colors when they are created, so they now get role
tokens (one unique RGB value per role) instead of colors, and a wrapper
around the tcell screen replaces the tokens with the current theme's
colors in SetContent. Changing the theme in the Config view swaps that
table; the next draw recolors everything. Poster colors that equal a
token are nudged off it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019reK4DUGYqDUjniWYJvwUW
2026-10-21 12:11:19 +02:00
2026-10-21 12:11:19 +02:00
2026-10-21 12:11:19 +02:00
2026-10-20 17:38:15 +02:00
2026-10-21 12:11:19 +02:00
2026-10-21 12:11:19 +02:00

arr-tui

A terminal UI to search for movies and series with Radarr and Sonarr, pick releases by hand, and follow the downloads in SABnzbd.

  • Movies / Series: search as you type, add titles with a quality profile and root folder, optionally start the automatic search.
  • Interactive search: list the releases Radarr/Sonarr find (approved or rejected, with reasons), sort and filter them (by approval, quality, x265 / x264 / AV1, HDR, Dolby Vision, audio format, language), and grab one. Series: pick a season or a single episode first.
  • Posters: the detail panes show the poster at the top right; title, facts, path and plot flow along its left side and continue at full width below it. In kitty and Ghostty it is a real image at the terminal's full resolution (Kitty graphics protocol with Unicode placeholders, so popups and dialogs cover it like text). Everywhere else it is drawn with colored block characters, which works over SSH and in any terminal with colors. Library items use the copy stored in Radarr/Sonarr; search results are downloaded from the metadata provider's image host (TMDb, TheTVDB). Turn it off with "ui": {"covers": false}. "ui": {"cover_style": ...} picks the drawing: auto (default: real images where the terminal is known to support them, otherwise plain cells in macOS Terminal, sextants on terminals known to have the glyphs or when fontconfig finds an installed font with them (not over SSH), else quadrants), kitty (force real images), sextant (2x3 pixels per cell, needs a font with the Symbols for Legacy Computing block) or quadrant (2x2, every font has them) or cells (one colored cell per pixel, no glyphs; for terminals whose block characters come out uneven, like macOS Terminal). Inside tmux or screen the block styles are used. If a poster looks wrong, set quadrant, or cells if the rows look shifted.
  • Calendar: the next two weeks of movie releases (cinemas, digital, physical) and airing episodes in one list grouped by day, with poster and plot. Move by weeks, include unmonitored items, search for releases or start an automatic search from there.
  • Downloads: SABnzbd queue and history plus the Radarr/Sonarr queues. Pause/resume, delete, retry failed downloads, remove from the arr queue and blocklist.
  • Config (F6): edit everything in the config file from inside the program, in one list you move through with the arrow keys: service addresses and API keys, the add-form defaults, refresh interval, posters, theme, notifications. Test checks the values you typed before saving; Save writes the file (permissions kept, 0600 for a new file) and applies the changes at once, no restart. Values that come from ARR_TUI_* environment variables are greyed out and are never written to the file.
  • Log (F7): actions report through popups that fade away; the log keeps the history.
  • Download notifications: a popup (and a log entry) when a SABnzbd download finishes or fails, whichever view is open. SABnzbd's history is checked every 15 seconds; downloads that finished before arr-tui started are not announced. "ui": {"notify_downloads": false} turns it off, "bell": true also rings the terminal bell.
  • Themes: fixed dark and light color sets that look the same in every terminal, whatever its color theme. "ui": {"theme": ...} is auto (default: light when the terminal reports a light background, else dark), dark or light; it can also be switched in the Config view, which recolors everything at once.
  • Connection indicators for all three services in the top right; F9 shows every key.

Requires Radarr/Sonarr v3+ API (Radarr 5/6, Sonarr 4) and SABnzbd 4+. Only Usenet releases are shown for grabbing, torrents are hidden.

Install

go install git.stinnesbeck.com/nils/arr-tui/cmd/arr-tui@latest

or build from a checkout (make build), or make dist for cross-compiled binaries in dist/.

Configure

Copy config.example.json to $XDG_CONFIG_HOME/arr-tui/config.json (usually ~/.config/arr-tui/config.json), or pass --config path. API keys are in each app under Settings → General.

{
  "radarr":  { "url": "http://localhost:7878", "apikey": "...", "default_quality_profile": "HD-1080p", "default_root_folder": "/movies" },
  "sonarr":  { "url": "http://localhost:8989", "apikey": "...", "default_quality_profile": "HD-1080p", "default_root_folder": "/tv" },
  "sabnzbd": { "url": "http://localhost:8080", "apikey": "..." },
  "ui":      { "refresh_seconds": 3, "covers": true, "cover_style": "auto", "theme": "auto", "notify_downloads": true, "bell": false }
}

default_* are optional preselections in the add dialog. URL and key can also come from the environment: ARR_TUI_{RADARR,SONARR,SABNZBD}_{URL,APIKEY}, which takes precedence over the file. Keep the file private (chmod 600); it holds your API keys.

Keys

Key Action
F1–F7 switch view (Movies, Series, Library, Downloads, Calendar, Config, Log)
Tab, Shift+Tab switch panel within a view
F9 help
/ focus search box
Enter, a add selected title
i interactive release search
Tab, f, F, /, t, s, d, i/Enter, r (library) movies/series list, status filter, file-property filter, text filter, monitor, search, remove, releases/episodes, reload
[, ], t, u, Enter, s (calendar) week back / forward, today, unmonitored, releases, search
Enter, i, s, t (episodes) expand season / releases, release search, search, monitor
Enter/g, s, f, F (release list) grab, cycle sort, hide rejected, filter by properties
p, d, t, b, r (downloads) pause, delete, retry, blocklist, refresh
Esc back / close dialog
Ctrl+C quit

Development

dev/ has a compose file with pinned Radarr, Sonarr and SABnzbd containers plus a fake indexer; see dev/README.md. make test runs vet and the unit tests. The design and milestone history are in SPECS.md.

Releases: tag and push, then scripts/release.sh (or make release) builds the binaries and publishes them on Gitea with the matching CHANGELOG.md section. It needs an access token with write access to the repository in $GITEA_TOKEN or ~/.config/arr-tui-release-token; --check verifies everything without publishing, --dry-run builds without publishing.

License

MIT, see LICENSE.

S
Description
No description provided
Readme MIT
6.4 MiB
2026-10-25 18:09:18 +00:00
Languages
Go 67.6%
TypeScript 22.9%
Python 3.9%
Shell 2%
CSS 1.8%
Other 1.8%