docs: document poster_cleanarr stale-duplicate cleanup (3rd cleaner), scan API, and UI pills/checkboxes
docs: rewrite wiki for readability — validated against source, restructured nav, instructional voice
docs(asset): drop project-key support; reword clear logos -> logos; fix stale TMDB mention
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: 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(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: 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: 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: drop incremental_border_replacerr; clarify border_replacerr; document Border Replacerr preview page
- Modules.md: remove dead incremental_border_replacerr toggle from poster_renamerr example; clarify border_replacerr crops a fixed border_width regardless of color (TPDB white-border standard); rename Skip to Holiday-only mode.
- Configuration.md: surface skip and clarify border_width; convert holiday schedule to range(MM/DD-MM/DD) form.
- UI-Guide.md: document /poster/border-replacerr preview page (live composite gallery + holiday dropdown).
- Developer-API.md: document /api/plex/{instance}/libraries returning {title, type} and the new /api/border-replacerr/* endpoints.
docs(ui-guide): embed poster-cleanarr screenshot in its section
docs: sync with v1.4.1 product state
* Module coverage bumped from 12 to 13 — adds plex_maintenance
(split out of poster_cleanarr to run Plex-side housekeeping on
its own cron). Section added to Modules.md; Home, Credits,
Configuration, Troubleshooting updated to match.
* Fixes poster_cleanarr YAML: removes photo_transcoder,
empty_trash, clean_bundles, optimize_db — those fields live on
plex_maintenance now, not poster_cleanarr, and Pydantic was
silently dropping them from user configs following these docs.
Adds the real fields (local_db, use_existing_db).
* Fixes nestarr YAML: removes the fake dry_run field (not in
NestarrConfig; nestarr is report-only by design).
* Cancellation wording across Modules, Troubleshooting,
Developer-API, FAQ, Credits now reflects reality:
border_replacerr runs to completion (full exception);
plex_maintenance is partial — its PhotoTranscoder loop checks
the cancel flag, but the three Plex-API tasks (empty_trash,
clean_bundles, optimize_db) run to completion since Plex has
no interrupt.
* UI-Guide /poster/manage section now points at /poster/cleanarr
(its actual destination — the old path is a back-compat
redirect), describing the Plex bloat cleanup master-detail UI.
* Developer-API removes POST /api/media/import (endpoint was
dropped intentionally — adding media via CHUB wasn't wanted);
adds GET /api/media/{id}/poster proxy.
* dashboard-light.png captured from the rebranded UI.
Split wiki into User Guide and Developer Guide
- Rename API.md to Developer-API.md
- Add Developer-Guide.md with repo layout, local dev, writing a new
module, security internals, and contributing checklist
- Add _Sidebar.md splitting nav into User Guide and Developer Guide
- Trim engineering detail from end-user pages (Home, Configuration,
UI-Guide, FAQ, Troubleshooting, Webhooks) — replace jargon with
plain language and redirect users to UI flows where possible
Rewrite wiki pages to match actual code
- Module cancellation: 11 of 12 modules cooperatively cancel; only
border_replacerr does not (previously claimed 5 of 12).
- poster_cleanarr exposes six modes (report/move/remove/restore/
clear/nothing), not two.
- Fix API paths: media list is /api/media/search, edit is
/{media_id}/metadata; posters list is /api/posters/list; instances
use {instance_id} (not {type}/{name}); system.py router is at /api
prefix with only three routes keeping /system/*.
- Document --reset-auth CLI flag, correct PUID/PGID defaults (100/99),
login rate limiter (0.2/5), SSE token query-param fallback, webhook
debounce (5s via SHA-256 payload hash).
- UI-Guide: correct frontend routes (/media/statistics,
/poster/search/gdrive, etc.) per React Router config.