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: 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: 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: 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(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(configuration): note path-verification after auto-migration
docs(configuration): document auto-migration of older config formats
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(border_replacerr): image-mode borders + 13-holiday bundled gallery
Documents the new themed-border feature shipped in chub ffcb652:
image mode that composites a decorative PNG per holiday, the 56-border
bundled set across 13 holidays, /config/borders/<holiday>/ override
path, and a YAML example showing color-mode and image-mode side by
side.
docs: document poster_cleanarr overlays_only + upgradinatorr count_mode
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: 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.
Restructure wiki for readability: split install, unify module docs, add Kometa guide
- Add Kometa-Integration page: end-to-end setup between Kometa's
asset_directory and CHUB's poster_renamerr (Docker mount alignment,
PUID/PGID gotchas, verification steps).
- Modules.md: each module now carries its full YAML block next to
the prose (was split across Modules and Configuration). Emoji
anchors for every module with a jump-to TOC at the top.
- Configuration.md: drop per-module YAML (moved to Modules). Keep
top-level blocks (general/auth/instances/schedule/notifications/
user_interface) plus a complete end-to-end example config.yml that
covers every module minimally — previous version was missing
several modules.
- Installation.md: focus on Docker Compose + single-run Docker as
the primary paths. Move Unraid and bare-metal to sibling pages.
- Installation-Unraid.md, Installation-Bare-Metal.md: new sibling
pages with platform-specific guidance (Unraid PUID/GID, systemd
unit for bare metal).
- First-Run.md: new page for post-install setup — admin user,
instance wiring, module enablement, schedule, smoke test, and
the password-reset flow.
- sync_gdrive: replace the inline service-account walkthrough with
a link to the DAPS rclone configuration guide (CHUB uses the same
rclone backend; DAPS's version has screenshots and covers both
service account and OAuth paths).
- Sidebar reorganised with the new pages grouped under Install.
Fix factual errors + add Google SA setup guide
- Nestarr: rewrite description — it's a detection/reporting module
that scans for ARR↔Plex mismatches and nested paths, it does NOT
move items. Config uses library_mappings, not mappings.
- Kometa mount: drop :ro from the Installation examples. Read/write
is required when poster_renamerr runs with action_type: move.
- Developer Guide: correct the AuthMiddleware exempt prefix list
(includes /api/version and static asset paths; webhooks aren't in
the list — they use verify_webhook_secret instead).
- Configuration → sync_gdrive: add full Google service account setup
steps (Cloud Console → IAM & Admin → Service Accounts → key JSON)
so users have an end-to-end path from zero to a working sync.
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.