diff --git a/serverAppConfigs-docs/Dankserver/Audiobookshelf.md b/serverAppConfigs-docs/Dankserver/Audiobookshelf.md index d7e15a2..55fb1c3 100644 --- a/serverAppConfigs-docs/Dankserver/Audiobookshelf.md +++ b/serverAppConfigs-docs/Dankserver/Audiobookshelf.md @@ -36,7 +36,7 @@ manager) — **Internal-only:** LAN address, no vhost, no DNS name. | Self-healing | `Restart=always`, `RestartSec=5`, `WantedBy=default.target` | | Deploy | `./scripts/deploy.sh dankserver --service audiobookshelf` | | Handler | `deploy_audiobookshelf` in `scripts/deploy-remote.sh` | -| Library layout | one book per folder — ABS groups by the first directory holding a media file (see Laws); every move is journalled at `/mnt/entropy/media-relayout-audiobooks.jsonl` | +| Library layout | one book per folder — ABS groups by the first directory holding a media file (see Laws); every move is journalled at `/mnt/entropy/.media-campaign/media-relayout-audiobooks.jsonl` | ## Bootstrap diff --git a/serverAppConfigs-docs/Dankserver/Media Audiobook Relayout.md b/serverAppConfigs-docs/Dankserver/Media Audiobook Relayout.md index 7806b66..bb91d21 100644 --- a/serverAppConfigs-docs/Dankserver/Media Audiobook Relayout.md +++ b/serverAppConfigs-docs/Dankserver/Media Audiobook Relayout.md @@ -41,7 +41,7 @@ python3 scripts/media-audiobooks.py --root /mnt/entropy/Audiobooks \ # library too ([[Audiobookshelf]]) — otherwise it keeps rows for folders that # no longer exist. scripts/media-apply.py apply --plan /tmp/ab_plan.tsv --root /mnt/entropy \ - --journal /mnt/entropy/media-relayout-audiobooks.jsonl --apply + --journal /mnt/entropy/.media-campaign/media-relayout-audiobooks.jsonl --apply ``` The group is the identity Plex asserts in its own database — **(narrator, book, @@ -68,7 +68,7 @@ no chapter row names, and a loose file in a folder holding two books all park un that unrelated books share, or a chapter number mistagged as the artist (`0.4`). `Various Artists` is not a placeholder — that is a multi-cast read. -The reviewed plan lives at `/mnt/entropy/media-relayout-audiobooks-plan.tsv`; it +The reviewed plan lives at `/mnt/entropy/.media-campaign/media-relayout-audiobooks-plan.tsv`; it applies on its own journal, behind the music writer, and then refreshes the Plex section. Verify it with `--db-kind plex` — Jellyfin holds no rows here, so a Jellyfin pass proves nothing either way. diff --git a/serverAppConfigs-docs/Dankserver/Media Duplicate Prune.md b/serverAppConfigs-docs/Dankserver/Media Duplicate Prune.md index 943c359..336ceeb 100644 --- a/serverAppConfigs-docs/Dankserver/Media Duplicate Prune.md +++ b/serverAppConfigs-docs/Dankserver/Media Duplicate Prune.md @@ -65,8 +65,8 @@ executor's own format; it never moves anything itself. python3 scripts/media-tvdupes.py --library /mnt/entropy/TVShows \ --hold /mnt/entropy/.AGENTTRASH/-tv-duplicates \ --meta /var/lib/media-meta/view/TVShows --witness witness.tsv \ - --ids /mnt/entropy/tv-tvdb-ids.tsv \ - --out /mnt/entropy/tv-dupes-plan.tsv --json /tmp/tv-groups.json + --ids /mnt/entropy/.media-campaign/tv-tvdb-ids.tsv \ + --out /mnt/entropy/.media-campaign/tv-dupes-plan.tsv --json /tmp/tv-groups.json # then media-apply.py apply / verify / sweep / rollback, exactly as for a film prune ``` @@ -76,7 +76,7 @@ python3 scripts/media-tvdupes.py --library /mnt/entropy/TVShows \ match, not a lookup: `BaseItems` (`Type like '%TV.Series'`) joined to `BaseItemProviders` where `ProviderId = 'Tvdb'`, the `/data/TVShows/` prefix stripped to the bare top-level folder name — 616 folders, none carrying two - ids, written to `/mnt/entropy/tv-tvdb-ids.tsv`. Two folders with disjoint ids + ids, written to `/mnt/entropy/.media-campaign/tv-tvdb-ids.tsv`. Two folders with disjoint ids are two shows however alike they read — *Avatar: The Last Airbender* (1999) beside the 2024 remake, *Millennium* (1996) beside a German thriller Jellyfin had also titled *Millennium* — and a pair whose identity cannot be proven is @@ -158,12 +158,12 @@ Nothing is deleted. Every doomed copy moves into a dated hold with the same executor the relayout uses, so any file comes back: ```bash -scripts/media-apply.py apply --plan /mnt/entropy/dup-prune-similar-plan.tsv \ - --root /mnt/entropy --journal /mnt/entropy/dup-prune-similar.jsonl # dry +scripts/media-apply.py apply --plan /mnt/entropy/.media-campaign/dup-prune-similar-plan.tsv \ + --root /mnt/entropy --journal /mnt/entropy/.media-campaign/dup-prune-similar.jsonl # dry scripts/media-apply.py apply --plan … --root /mnt/entropy --journal … --apply -scripts/media-apply.py verify --plan … --journal /mnt/entropy/dup-prune-similar.jsonl -scripts/media-apply.py sweep --journal /mnt/entropy/dup-prune-similar.jsonl --root /mnt/entropy --apply -scripts/media-apply.py rollback --journal /mnt/entropy/dup-prune-similar.jsonl --root /mnt/entropy --apply +scripts/media-apply.py verify --plan … --journal /mnt/entropy/.media-campaign/dup-prune-similar.jsonl +scripts/media-apply.py sweep --journal /mnt/entropy/.media-campaign/dup-prune-similar.jsonl --root /mnt/entropy --apply +scripts/media-apply.py rollback --journal /mnt/entropy/.media-campaign/dup-prune-similar.jsonl --root /mnt/entropy --apply ``` The plan rows are the tool's own format (`action src dst kind`, `mkdir` rows for diff --git a/serverAppConfigs-docs/Dankserver/Media Music Relayout.md b/serverAppConfigs-docs/Dankserver/Media Music Relayout.md index 77693fe..0d67a52 100644 --- a/serverAppConfigs-docs/Dankserver/Media Music Relayout.md +++ b/serverAppConfigs-docs/Dankserver/Media Music Relayout.md @@ -33,7 +33,7 @@ python3 scripts/media-music.py --root /mnt/entropy/Music --enum /tmp/music_enum. # 4. Read the exceptions file FIRST — it is the review, not a log. Then the same # executor, journal and rollback as [[Media Relayout]] shows, on its own journal. scripts/media-apply.py apply --plan /tmp/music_plan.tsv --root /mnt/entropy \ - --journal /mnt/entropy/media-relayout-music.jsonl --apply + --journal /mnt/entropy/.media-campaign/media-relayout-music.jsonl --apply ``` The group is what the tags assert, not where the files sit: **(album-artist tag, diff --git a/serverAppConfigs-docs/Dankserver/Media Relayout.md b/serverAppConfigs-docs/Dankserver/Media Relayout.md index 88fbb34..912152f 100644 --- a/serverAppConfigs-docs/Dankserver/Media Relayout.md +++ b/serverAppConfigs-docs/Dankserver/Media Relayout.md @@ -71,12 +71,23 @@ that would be filed wrong, and the plan is not run until it is understood. ```bash scripts/media-apply.py apply --plan /tmp/jf-plan.tsv --root /mnt/entropy/Movies # dry, writes nothing scripts/media-apply.py apply --plan /tmp/jf-plan.tsv --root /mnt/entropy/Movies --apply -scripts/media-apply.py verify --plan /tmp/jf-plan.tsv --journal /mnt/entropy/media-relayout.jsonl -scripts/media-apply.py sweep --journal /mnt/entropy/media-relayout.jsonl --root /mnt/entropy/Movies # dry -scripts/media-apply.py sweep --journal /mnt/entropy/media-relayout.jsonl --root /mnt/entropy/Movies --apply -scripts/media-apply.py rollback --journal /mnt/entropy/media-relayout.jsonl --root /mnt/entropy/Movies --apply +scripts/media-apply.py verify --plan /tmp/jf-plan.tsv --journal /mnt/entropy/.media-campaign/media-relayout.jsonl +scripts/media-apply.py sweep --journal /mnt/entropy/.media-campaign/media-relayout.jsonl --root /mnt/entropy/Movies # dry +scripts/media-apply.py sweep --journal /mnt/entropy/.media-campaign/media-relayout.jsonl --root /mnt/entropy/Movies --apply +scripts/media-apply.py rollback --journal /mnt/entropy/.media-campaign/media-relayout.jsonl --root /mnt/entropy/Movies --apply ``` +**Every campaign artifact — plan, journal, exceptions file, run log — lives in +`/mnt/entropy/.media-campaign/`.** The array root carries libraries and nothing +else: a root strewn with `*.jsonl` and `*-plan.tsv` gets browsed as content, and +the dot-directory is ignored by both media servers. Relocated 2026-11-02, 48 files, +undo with `media-apply.py rollback --journal /mnt/entropy/.media-campaign/media-campaign-relocate.jsonl --root /mnt/entropy --apply`. +The holds and trash (`.AGENTTRASH`, `.HOLD--*`) stay at the root on purpose: +the purge machinery is given those paths as `--hold`, and a hold that moves out +from under the tool that made it is a hold nobody can find. Name `--journal` +explicitly on every run — the tool's default is `media-relayout.jsonl` beside +`--root`, so a bare run recreates exactly the root-level log this page forbids. + An apply also leaves the release folders it emptied standing where they were — hundreds of them at the library root — which is what `sweep` removes, dry-run first, from the same journal. @@ -110,7 +121,7 @@ a read beside a running scan can fail as "database disk image is malformed". `immutable` stays only the fallback for a database whose `-shm` cannot be read. ```bash -scripts/media-verify.py --journal /mnt/entropy/media-relayout-music.jsonl \ +scripts/media-verify.py --journal /mnt/entropy/.media-campaign/media-relayout-music.jsonl \ --db-kind jellyfin --ignore-ext jpg,jpeg,png,log,cue,toc,nfo,txt,m3u,accurip ``` @@ -150,11 +161,11 @@ by series, and writes a plan in the executor's own format: ```bash scripts/media-tv.py --root /mnt/entropy/Movies --library /mnt/entropy/TVShows \ - --out /mnt/entropy/media-tv-plan.tsv -scripts/media-apply.py apply --plan /mnt/entropy/media-tv-plan.tsv --root /mnt/entropy -scripts/media-apply.py apply --plan /mnt/entropy/media-tv-plan.tsv --root /mnt/entropy \ - --journal /mnt/entropy/media-relayout-tv.jsonl --apply -scripts/media-apply.py sweep --journal /mnt/entropy/media-relayout-tv.jsonl \ + --out /mnt/entropy/.media-campaign/media-tv-plan.tsv +scripts/media-apply.py apply --plan /mnt/entropy/.media-campaign/media-tv-plan.tsv --root /mnt/entropy +scripts/media-apply.py apply --plan /mnt/entropy/.media-campaign/media-tv-plan.tsv --root /mnt/entropy \ + --journal /mnt/entropy/.media-campaign/media-relayout-tv.jsonl --apply +scripts/media-apply.py sweep --journal /mnt/entropy/.media-campaign/media-relayout-tv.jsonl \ --root /mnt/entropy --apply ``` diff --git a/serverAppConfigs-docs/Dankserver/Media TV Relayout.md b/serverAppConfigs-docs/Dankserver/Media TV Relayout.md index a7ed683..78ccfd9 100644 --- a/serverAppConfigs-docs/Dankserver/Media TV Relayout.md +++ b/serverAppConfigs-docs/Dankserver/Media TV Relayout.md @@ -51,16 +51,16 @@ python3 scripts/media-census.py probe --root /mnt/entropy/TVShows \ # against scp'd TSVs — which is where the two provider secrets live. python3 scripts/media-shows.py --root /mnt/entropy/TVShows --enum /tmp/tv_enum.tsv \ --titles /tmp/tv_titles.tsv --probed /tmp/tv_probed.tsv \ - --tmdb-cache /mnt/entropy/media-tv-names.json --tmdb --tvdb \ + --tmdb-cache /mnt/entropy/.media-campaign/media-tv-names.json --tmdb --tvdb \ --park /mnt/entropy/media-park/TVShows \ - --out /mnt/entropy/media-relayout-shows2-plan.tsv \ - --exceptions /mnt/entropy/media-relayout-shows2-exceptions.txt + --out /mnt/entropy/.media-campaign/media-relayout-shows2-plan.tsv \ + --exceptions /mnt/entropy/.media-campaign/media-relayout-shows2-exceptions.txt # 4. Read the exceptions file FIRST — it is the review, not a log. Same executor # as above, but on this arm's OWN journal, NAMED PER PASS: the journal of an # applied pass is its unwind record, so a second pass that reuses the name # destroys the only map back. -scripts/media-apply.py apply --plan /mnt/entropy/media-relayout-shows2-plan.tsv \ - --root /mnt/entropy --journal /mnt/entropy/media-relayout-shows2.jsonl --apply +scripts/media-apply.py apply --plan /mnt/entropy/.media-campaign/media-relayout-shows2-plan.tsv \ + --root /mnt/entropy --journal /mnt/entropy/.media-campaign/media-relayout-shows2.jsonl --apply ``` Evidence, strongest first — the order the planner believes things: