We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
docs(home): correct DAPS migration claim — config auto-migrates
docs: document poster_cleanarr stale-duplicate cleanup (3rd cleaner), scan API, and UI pills/checkboxes
docs: align First-Run with the 8-step setup wizard (add TMDB step); clarify DAPS config auto-migration
docs: rewrite wiki for readability — validated against source, restructured nav, instructional voice
docs(asset_renamerr): media-level support matrix — season logos vs backgrounds
docs(asset_renamerr): spell out local naming convention + Plex/Kometa capability matrix
docs: sync wiki with develop — remove unimplemented options, document real ones, add cl2k_maker - nohl: source_dirs mode is scan|resolve (was movie|series) - health_checkarr: drop report_only + Lidarr; describe actual removed-item scope - border_replacerr: drop skip (holiday-only) — never implemented; document border_workers - poster_renamerr: orphan_assets_mode belongs to poster_cleanarr - poster_cleanarr: drop unused sleep; document orphan_instances + orphan_ignore_titles - plex_maintenance: document new dry_run plus sleep/timeout - sync_gdrive verbose, asset_renamerr print_only_renames, unmatched_assets dict-form instances - new cl2k_maker section in Modules + Configuration - Developer-API: document /api/cache endpoints with new pagination - install docs: image PUID/PGID default 100:99, Python 3.9+, Node 24.16+ - dry_run note: unmatched_assets and nestarr are report-only (no flag)
docs(asset): drop project-key support; reword clear logos -> logos; fix stale TMDB mention
docs(asset): clarify fanart.tv needs only a personal key (no project key)
docs(asset): switch logos/backgrounds source from TMDB to fanart.tv Document the fanart.tv source for asset_renamerr (likes-ranked clear logos + backgrounds, personal key requirement, tmdb->fanart migration), the optional FANART_PROJECT_API_KEY env var, and a fanart.tv credit.
docs: document the strict Plex|Kometa apply_method across modules - poster_renamerr: add apply_method (kometa default), document the either/or behavior and that add_posters only applies on the plex path - asset_renamerr: rename direct -> plex (legacy direct still accepted), tmdb_language is now a list, add per-instance add_posters to the example - Kometa-Integration: clarify kometa vs plex are mutually exclusive; fix the now-incorrect "uploads after copying into destination_dir" note - Webhooks: the webhook pipeline's final step follows apply_method
docs(ui): document the Locked tab and Unlock / re-open action
docs: finish dropping email notifications (remove SMTP setup section + refs) Removes the "Setting up Email (SMTP)" section from Configuration.md and the Email mentions in First-Run and UI-Guide. (First-Run's "no forgot-password email" note is auth-related and stays.)
docs: drop email notifications (Discord + Notifiarr only) Email notifications were removed from CHUB; update Configuration.md notification examples and the supported-services line accordingly.
docs: cover asset_renamerr + upload tuning + Needs Review/manual matching - Modules: new asset_renamerr section (clear logo / square art / background; local + TMDB sources; direct vs kometa apply matrix; chaining via run_asset_renamerr; idempotency). poster_renamerr config gains run_asset_renamerr + upload_delay_ms. Count 13 → 14. - Home: feature blurb + module count. - Kometa-Integration: logos/backgrounds via asset directory (Kometa reads logo/background; season naming; square art is direct-only). - Webhooks: season-aware "wait for Plex to scan" before applying season posters. - UI-Guide: /poster/unmatched Needs Review tabs — Choose a poster (immediate apply + lock), Approve, Ignore/Restore; Asset Renamerr settings page.
docs(matching): clarify poster matching uses *arr API, not media folder names Add a 'How matching works' section to poster_renamerr in Modules.md and an FAQ entry explaining that match quality comes from *arr metadata + poster-set naming, not your media folder/file names (TRaSH scheme, Season 1 vs Season 01, {tvdb-}/{tmdb-} in folders all make no difference to matching).
docs(notifications): drop Notifiarr Bot Name field from setup Form no longer asks for it (Notifiarr Passthrough has no per- notification bot override). Updated the Common Fields section, the Notifiarr setup walkthrough, and the YAML example. Pointed users at Notifiarr Custom Bot as the way to customize the bot identity.
docs(notifications): rewrite Discord / Notifiarr / Email setup - Drop Apprise from user-facing pages (UI doesn't expose it; the backend API explicitly rejects it). - Drop mention_role from the YAML example (was never wired in the backend). - Fix smtp_host -> smtp_server in the YAML example (the wiki had the wrong key; only smtp_server is read by the backend). - Fix the email YAML example to show 'from' as the sender and 'to' as recipients (the previous shape was internally consistent but the new UI form labels match the keys now too). - Add 'What gets sent' table explaining each module's notification body. - Add Common Fields section explaining Bot Name and Embed Color. - Add full setup walkthroughs for Discord webhooks, Notifiarr Passthrough (with the honest caveat that Bot Name is a CHUB-side label for Notifiarr since Passthrough has no per-notification override), and Email SMTP. - First-Run.md and UI-Guide.md updated to match.
docs: clarify source_dirs priority (bottom-of-list wins)
docs(unraid): correct template install instructions Unraid has no 'paste a URL' field. Document the wget-to-templates-user flow instead so the template actually shows up in the Template dropdown.
docs(unraid): point at the new XML template
docs: heartbeat helper, progress reporting, migration system UI-Guide: - /logs: describe the Hide Heartbeat toggle behaviour (now backed by the [hb] marker, not a frontend regex), per-line search semantics, per-character match highlighting, and the debug pill's accent colour distinguishing on/off. Modules: - unmatched_assets: clarify that Sonarr seasons use episodeFileCount (files on disk) for the has_content gate, not episodeCount (aired episodes); the per-season monitored flag now propagates correctly so ignore_unmonitored honours per-season decisions; Discord copy- to-clipboard links directly at the season page when exactly one season is missing. Developer-Guide / Writing a new module: - _report_progress() helper — when to wire it, how to allocate the 0..100 range across phases, link to poster_renamerr as reference. - logger.heartbeat() — what to use it for, how it interacts with the Hide Heartbeat toggle. - _apply_once() one-shot data migrations — naming convention, the schema_migrations gating table, atomic commit guarantee.
docs(ui-guide): document the new /settings/system page Cover the four summary tiles, the database-statistics + schema-migrations tables, and the two maintenance actions (Compact via VACUUM and Rebuild Poster Cache). The Rebuild paragraph calls out the regex-bug-recovery use case explicitly so the next time something similar happens, the fix is one button-click away.
docs(modules,ui): expand unmatched_assets section + Statistics page - Modules.md: document the actual filtering pipeline (matched=0, status blocklist, has_content gate, ignore lists), explain where to act on the report (Statistics page) and the Discord copy-paste request button with TVDb fallback behaviour - UI-Guide.md: describe the three unmatched-asset tables now visible on /poster/statistics and the per-row Request button
docs(configuration): note path-verification after auto-migration
docs(configuration): document auto-migration of older config formats
docs: remove /webhooks/cleanarr/* endpoints + pending-deletion references The pending_deletions ledger and its webhook drainers were removed — nothing was scheduled or wired to call /webhooks/cleanarr/process, so the queue just accumulated. Orphan-asset cleanup in poster_cleanarr (title- scan based) supersedes it for both manual and renamerr-chained workflows.
docs(poster_cleanarr): document orphan-asset cleanup + pending-deletion ledger rename - Modules: rewrite the poster_cleanarr section to cover both passes (bloat + orphan-asset) with a clear contrast against the Unmatched Assets module. Update poster_renamerr's run_cleanarr -> clean_orphan_assets toggle. - Configuration: add orphan_assets_* + asset_dirs to the example. - Webhooks: rename 'orphaned-poster count' -> 'pending-deletion count' in the /webhooks/cleanarr/{status,process} descriptions (URLs unchanged). - Developer-API: pending-deletion queue terminology in /posters/stats and /system/cleanup-candidates descriptions. - Troubleshooting: split the 'poster_cleanarr does nothing' answer into bloat vs. orphan-asset modes.
docs: Interface settings merged into General Settings page Mirrors the chub@48bcc88 refactor — the standalone Interface page is gone; the theme picker now lives as a card on the General Settings page, and /settings/interface redirects to /settings/general for old bookmarks. - UI-Guide.md: settings count 8 → 7. The /settings/general section now describes both cards (Interface + General) and notes the redirect. - First-Run.md: collapses the two separate 'set the theme' / 'set the log level' bullets into one. - Home.md: fixes a stale 'Settings → Interface' reference for looking up the CHUB version (the UI doesn't surface the version in settings; the authoritative source is GET /api/version).
docs: Border Replacerr settings split between Module Settings and the Border Replacerr page Mirrors the chub@59911cf refactor — Module Settings now holds only the non-visual knobs and the holiday name/schedule list; default colors, per-holiday colors, and the bundled/custom border picker live on the Border Replacerr page next to the live preview. - Adds a 'Where each setting lives in the UI' table at the top of the border_replacerr section explaining the split and the rationale (keep the basic 'strip the 26px white border' flow uncluttered). - Updates the custom-border workflow to mention the new thumbnail picker instead of telling users to edit the borders: list directly. (The YAML path still works — both routes write the same config field.)