98 lines
5.6 KiB
Markdown
98 lines
5.6 KiB
Markdown
# arr-tui
|
||
|
||
A terminal UI to search for movies and series with [Radarr](https://radarr.video) and
|
||
[Sonarr](https://sonarr.tv), pick releases by hand, and follow the downloads in
|
||
[SABnzbd](https://sabnzbd.org).
|
||
|
||
- **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. It is drawn with colored block characters (works over SSH, needs a 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 characters: `quadrant` (2x2
|
||
pixels per cell, every font has them), `sextant` (2x3, sharper, needs a font with the Symbols for
|
||
Legacy Computing block, e.g. kitty, WezTerm, foot, Ghostty) or `auto` (default: sextant on
|
||
terminals known to support it, quadrant elsewhere). If you see boxes or question marks in the
|
||
poster, set `quadrant`.
|
||
- **Library**: browse movies (top) and series (below) with a details pane on the right, filter by status (missing / downloaded / monitored) and by file properties (quality, x265 / x264 / AV1, HDR, Dolby Vision, audio format, language), toggle
|
||
monitoring, trigger searches, remove titles (the files stay on disk unless you tick "Delete files"). Series open into seasons and episodes with per-season and
|
||
per-episode monitoring, automatic search and release search.
|
||
- **Calendar**: movie releases (cinemas, digital, physical) and airing episodes in one scrolling list
|
||
grouped by day, starting at today, with poster and plot. More days load as you scroll; 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.
|
||
- **Log (F6)**: 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.
|
||
- Connection indicators for all three services in the top right; `?` 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
|
||
|
||
```sh
|
||
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.
|
||
|
||
```json
|
||
{
|
||
"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", "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`–`F6` | switch view (Movies, Series, Library, Downloads, Calendar, 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) | today, unmonitored, releases, search; scroll for more days |
|
||
| `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 |
|
||
| `q`, `Ctrl+C` | quit |
|
||
|
||
## Development
|
||
|
||
`dev/` has a compose file with pinned Radarr, Sonarr and SABnzbd containers plus a fake indexer;
|
||
see [dev/README.md](dev/README.md).
|
||
`make test` runs vet and the unit tests. The design and
|
||
milestone history are in [SPECS.md](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](LICENSE).
|