Skip to content

UI Guide

chodeus edited this page Apr 29, 2026 · 6 revisions

UI Guide

A page-by-page tour of CHUB's web interface. Open http://localhost:8000 and follow along.

Dashboard

Dashboard

The landing page at /dashboard. It's designed to answer three questions at a glance: is anything running right now, what ran recently, and what's due to run next?

At the top you'll see a friendly greeting, a live status dot (green when CHUB is receiving live updates, amber if it's polling), and a New run button that opens a picker for any module.

Below that there's a row of five pastel quick-start cards — Run module, Browse media, Browse posters, Find duplicates, and Inspect logs. Each one deep-links into the relevant page.

Under the cards, a Recent jobs strip shows the four most recent runs and whether they succeeded or failed. Click any card to open the full job log.

A Scheduler callout tells you which module is due to fire next and when. Finally, a Module status grid gives you one tile per installed module showing its current state (idle, running, queued, error).

Media

/media/search — Search & browse

Media search

One search box across every Radarr, Sonarr, and Lidarr you've configured. Filters on the right let you narrow by type (movie, series, album), sort, and order; your choice is remembered per browser. The recent-search dropdown under the box pulls from the last ten queries you ran on this device. Clicking any result opens its detail drawer.

/media/manage — Details and editing

The full page for a single item. You can edit title, year, status, rating, studio, language, edition, and genre inline; every save records a row in the edit history so you can see what changed and when. A Delete button in the header opens a confirm dialog with an optional "also delete files from disk" checkbox.

If the item is part of a duplicate group, you'll see a resolution panel with a side-by-side picker — choose the copy to keep, optionally delete files from the others, and optionally add an import-list exclusion so CHUB doesn't re-download them.

A History tab shows every edit made to this item.

/media/statistics — Library stats

Time-windowed counters: additions, edits, duplicates resolved, low-rating and incomplete-metadata counts. Pick a period with ?period=7d|30d|90d|all in the URL or the selector on the page.

/media/labelarr — Labelarr management

Shows the current sync state between your ARR tags and your Plex labels for every mapping configured in labelarr.mappings. There's a Sync now button that queues a labelarr job immediately rather than waiting for the schedule.

Posters

/poster/search/gdrive — GDrive search

Browse everything CHUB has indexed from your configured sync_gdrive sources. Filter across indexes by title, type, or path.

/poster/search/assets — Local asset search

Browse what's already landed in your destination_dir. Filter by low-resolution, recently-added, or type.

/poster/cleanarr — Poster Cleanarr

Poster Cleanarr

Master-detail view over Plex's Metadata folder: find poster variants Plex no longer references ("bloat"), review them per title, and reclaim disk. Modes are Report (scan only), Move (relocate to a restore folder), and Remove (delete). Filter by title, type (movies / shows / collections), or use the search box. Clicking a title on the left opens the variant grid on the right, with active / bloat / Plex-referenced status colour-coded. Run from here with Run scan.

/poster/manage is an old bookmark path and redirects here.

/poster/border-replacerr — Border Replacerr preview

Live preview of border_replacerr on a small mix of your real posters — 2 movies + 2 series + 2 collections by default. Each card shows a side-by-side composite of the original poster on the left and what border_replacerr would write on the right, using the colors currently configured on the module.

Holiday dropdown lets you preview any configured holiday's palette without waiting for the date to roll around: pick Default border colors to see what border_colors does on its own; Current state to mirror what a real run would do today (it calls the same holiday resolver as the module); or any of your configured holidays by name. Selecting a holiday immediately re-renders all six previews. Refresh picks a fresh sample from the matched-media cache.

The page surfaces the active holiday name and the effective border_width so you can sanity-check the resolution at a glance. If the matched-media cache is empty (you haven't run poster_renamerr yet) the page tells you so instead of returning blanks.

/poster/statistics

Total count, storage used, orphan count, duplicate count, and how many posters are below your resolution threshold. A Backfill dimensions button populates width/height for older posters so the low-resolution filter works on them.

Settings

The Settings section of the sidebar has eight pages.

/settings/general

The general block from config.yml — log level, update notifications, max log files, webhook delay and retries, webhook secret, and duplicate exclude groups. Saving writes the file back immediately.

/settings/interface

Theme picker (light / dark). This sets the server-wide default; your current browser also remembers its own choice, so switching the theme in the header sticks on that device.

/settings/modules

One page per module, with a sidebar nav. Each page is generated from the module's config schema, so every field is validated and documented. Per-module pages include:

  • A Run now button to queue a manual job
  • A Test button for modules that talk to external services (Plex / ARR / GDrive)
  • A live run-state indicator

/settings/schedule

Each scheduled module shows its current cron or interval rule plus the next-run time. Saving writes config.yml.schedule and updates the in-process scheduler — no restart required.

/settings/instances

Manage your Radarr, Sonarr, Lidarr, and Plex connections. Per-instance controls: Test connectivity, view status, enable or disable without deleting. For Plex instances, the libraries list is fetched live so you can confirm CHUB sees what you expect. The most-recent health-probe result is shown per instance.

/settings/notifications

Discord, Email, and Apprise configuration per module, plus an optional main entry for global notifications. A template preview shows what your Discord/Email will actually look like before you save.

/settings/jobs

Queue view with filters for status, module, and type. Per-row actions: retry, view log tail, open full log. A bulk action purges completed jobs older than N days.

/settings/webhooks

Generated webhook URLs for Sonarr / Radarr / Tautulli — if you set a webhook secret, the URLs have it pre-applied. A Recent origins panel shows which hosts and endpoints have fired webhooks in the last 7 days.

Logs

/logs

Combined log viewer. The left rail lists modules; the right panel tails the selected module's latest file. Controls include:

  • Level filter (debug / info / warning / error)
  • Search within the current buffer
  • Auto-scroll toggle
  • Download the full file

Secrets (API keys, tokens, webhook URLs, etc.) are automatically replaced with placeholders before anything is written to disk — so log excerpts are safe to paste into issue reports without leaking credentials.

Conventions

Deep links. Every page is URL-addressable. Filters on media and poster search persist to your browser so they survive reloads and tab switches.

Theme. Toggle in the header; applies instantly, remembered per device.

Responsive. Below 768px the sidebar collapses to a drawer and grids reduce to one or two columns.

Navigation shortcuts. / redirects to /dashboard; /media redirects to /media/search; /poster redirects to /poster/search/gdrive. Unknown URLs bounce to the dashboard.

Clone this wiki locally