diff --git a/docs/IMPORT-LOG/2026-05-08-youtube-sassy-the-sasquatch.md b/docs/IMPORT-LOG/2026-05-08-youtube-sassy-the-sasquatch.md new file mode 100644 index 0000000..532a0db --- /dev/null +++ b/docs/IMPORT-LOG/2026-05-08-youtube-sassy-the-sasquatch.md @@ -0,0 +1,147 @@ +# 2026-05-08 — YouTube import: Sassy the Sasquatch (2022) + +## Source + +| Field | Value | +|---|---| +| Upstream platform | YouTube | +| Channel name | THE BIG LEZ SHOW OFFICIAL | +| Channel id | `UCV1G6JkQtB2nobFm3MGNsBQ` | +| Playlist title | `SASSY THE SASQUATCH` | +| Playlist id | `PLGMC7oz7XpmDMGrALMQiNXCi9p7aqkWbj` | +| Playlist URL | `youtube.com/playlist?list=PLGMC7oz7XpmDMGrALMQiNXCi9p7aqkWbj` (no clickable link by policy) | + +## Date imported + +`2026-05-08` + +## Episodes imported + +| # | YouTube id | YouTube title | Canonical filename | Jellyfin episode id | Resolution | Size (bytes) | +|---|---|---|---|---|---|---| +| 1 | `9OmR0ypCyOU` | `SASSY THE SASQUATCH \| EP01 \| SEEN A DINOSAUR` | `Sassy the Sasquatch (2022)/Season 01/Sassy the Sasquatch (2022) - S01E01 - Seen a Dinosaur.mkv` | `2ef02448506b543f39b9372c2b0cdef2` | 1920x1080 | 36,434,608 | +| 2 | `tvCUmH92HfU` | `SASSY THE SASQUATCH \| EP02 \| WATER YOU TALKINABEET` | `Sassy the Sasquatch (2022)/Season 01/Sassy the Sasquatch (2022) - S01E02 - Water You Talkinabeet.mkv` | `3b7809d6840e5ee230fbba951fee227e` | 1920x1080 | 28,928,772 | +| 3 | `QvIgmc2G6lk` | `SASSY THE SASQUATCH \| EP03 \| WALKABEET` | `Sassy the Sasquatch (2022)/Season 01/Sassy the Sasquatch (2022) - S01E03 - Walkabeet.mkv` | `4a0188c67c1d6d08000997177143d6f2` | 1920x1080 | 22,663,417 | +| 4 | `RU9zuIqPcJw` | `SASSY THE SASQUATCH \| EP04 \| AREA 51` | `Sassy the Sasquatch (2022)/Season 01/Sassy the Sasquatch (2022) - S01E04 - Area 51.mkv` | `3dc35c7341f4476e6218840dceb63163` | 1920x1080 | 30,784,810 | +| 5 | `vUyJq1kd-bc` | `SASSY THE SASQUATCH \| EP05 \| SNOW WORRIES` | `Sassy the Sasquatch (2022)/Season 01/Sassy the Sasquatch (2022) - S01E05 - Snow Worries.mkv` | `f79032d3bfbed6371e11375bdfc1b8a6` | 1920x1080 | 36,913,187 | +| 6 | `bi_HbwZDdPg` | `SASSY THE SASQUATCH \| EP06 \| AS ABOING SO BADOING` | _(not imported)_ | _(n/a)_ | _(n/a)_ | 0 | + +**Imported: 5 / 6.** EP06 is age-restricted on YouTube and the sibling +downloader had no authenticated cookie store — see Known caveats. + +## Naming rules applied + +Cited section numbers refer to files under `docs/`: + +- **`docs/05` §0 rule 5 — mandatory `(Year)`.** Year `2022` (from manifest) + appended to the show folder and every episode basename, even though the + show name is unique in the library. +- **`docs/05` §2 + `docs/08` §1.2 — TV canonical layout.** Final layout is + `Show (Year)/Season NN/Show (Year) - SxxEyy - Title.ext`. Applied + literally across all 5 episodes. +- **`docs/05` §2.1 + `docs/08` §4.2 — zero-padded `Season 01`.** All five + files placed under `Season 01/` (single-playlist → single-season default). +- **`docs/08` §1.2 — zero-padded two-digit episode marker.** `S01E01` + through `S01E05`, never `S1E1` / `1x01` / `Ep1`. +- **`docs/08` §2.1 + §3.4 — strip channel-pollution prefix and + bracket/id tags.** The repeated `SASSY_THE_SASQUATCH_`, the `EPxx_` + fragment, and the `[]` suffix in raw filenames were all + removed; only the human-readable episode title survives in the + canonical name. +- **`docs/08` §2.5 — underscores → spaces.** `WATER_YOU_TALKINABEET` → + `Water You Talkinabeet`; `AREA_51` → `Area 51`; `SEEN_A_DINOSAUR` → + `Seen a Dinosaur`; `SNOW_WORRIES` → `Snow Worries`; `WALKABEET` left + as a single word. +- **`docs/08` §5.1 — smart title case.** All-uppercase YouTube titles + recased; small word `a` lowercased mid-title (`Seen a Dinosaur`); the + number `51` preserved as-is (`Area 51`). +- **`docs/05` §0 rule 3 / `docs/08` §5.5 — ASCII-only, no forbidden + characters.** Source titles contained no `< > : " / \ | ? *`, so no + substitutions were needed; verified post-rename. +- **`docs/08` §1.1 / §1.2 forbidden list — no resolution/codec/group + tags.** `1080p`, `av01`, `opus`, `WEB-DL`, etc. all stripped; canonical + names contain title only. + +## rsync stats + +``` +sent 155,763,373 bytes +received 126 bytes +throughput 44,503,856 bytes/sec (~42.4 MiB/s) +total size 155,724,794 bytes +speedup 1.00 (initial transfer, no rolling-checksum reuse) +flags -av --partial --append-verify +files 5 transferred + 2 dirs created +``` + +## Jellyfin verification + +| Field | Value | +|---|---| +| Series id | `b2d1afd8a4a30c59adb42ccaf47376c2` | +| Series name | `Sassy the Sasquatch` | +| ProductionYear | `2022` | +| Path | `/media/tv/Sassy the Sasquatch (2022)` | +| Provider ids | `Tmdb=321760 Imdb=tt21209936 Tvdb=421839` | +| Episode count | 5 | +| Direct-play (E01 sample) | `SupportsDirectPlay=True`, `SupportsDirectStream=True`, `SupportsTranscoding=False`, video `av1` profile Main, audio `opus` | +| Library scan | `RefreshLibrary` reached `Idle / Completed` < 10 s after `POST /Library/Refresh`; full series refresh queued via `POST /Items/.../Refresh?Recursive=true&MetadataRefreshMode=FullRefresh&ImageRefreshMode=FullRefresh` (HTTP 204) | + +All 5 episodes mapped to correct `SxxEyy` via filename → Jellyfin parser +(no manual identify required). + +## Known caveats + +1. **EP06 age-restricted, not imported.** YouTube requires authenticated + cookies for `bi_HbwZDdPg` (`AS ABOING SO BADOING`); sibling downloader + ran without a logged-in browser session. Library currently shows + 5/6 episodes. Operator's call whether to retry with cookies or + accept the gap. +2. **Jellyfin display titles uppercase.** TVDB has the official episode + titles entered in all-caps (`SEEN A DINOSAUR`, etc.) and Jellyfin + prefers provider data over filename-derived titles. Filenames on disk + remain canonical-cased per `docs/08` §5.1; only the API/UI display + layer follows TVDB. Not a bug. +3. **No subtitles.** Source has YouTube auto-generated captions only; + sibling did not pull them, so no `.srt` / `.ass` siblings exist in + the library. +4. **Cross-device hard-link failure during staging.** Sibling's first + staging attempt at `/tmp/yt-norm/staged/` failed (`/tmp` is `tmpfs`, + source is on LUKS+ext4); re-staged at `/home/admin/yt-norm-staged/` + on the same FS. Net disk impact: zero (inode-only links). Cosmetic. +5. **Brief said "6 episodes," manifest had 6 with 1 failed.** Reconciled + to actual 5 successful downloads; counts in this log reflect reality, + not the brief. + +## Source manifest copied + +Top-level fields of `manifest.json` (sibling agent's output, originally at +`/home/admin/yt-import-staging/manifest.json` on onyx): + +```json +{ + "show_name": "Sassy the Sasquatch", + "year": "2022", + "channel": "THE BIG LEZ SHOW OFFICIAL", + "channel_id": "UCV1G6JkQtB2nobFm3MGNsBQ", + "playlist_id": "PLGMC7oz7XpmDMGrALMQiNXCi9p7aqkWbj", + "playlist_title": "SASSY THE SASQUATCH", + "raw_dir": "/home/admin/yt-import-staging/raw", + "downloaded_count": 5, + "failed_count": 1, + "total_bytes": 155724794 +} +``` + +The full per-episode `episodes[]` array is **not** embedded here. Trace +each episode by canonical path under the live tree on nullstone: + +``` +/home/user/media/tv/Sassy the Sasquatch (2022)/ +└── Season 01/ + ├── Sassy the Sasquatch (2022) - S01E01 - Seen a Dinosaur.mkv + ├── Sassy the Sasquatch (2022) - S01E02 - Water You Talkinabeet.mkv + ├── Sassy the Sasquatch (2022) - S01E03 - Walkabeet.mkv + ├── Sassy the Sasquatch (2022) - S01E04 - Area 51.mkv + └── Sassy the Sasquatch (2022) - S01E05 - Snow Worries.mkv +``` diff --git a/docs/IMPORT-LOG/README.md b/docs/IMPORT-LOG/README.md new file mode 100644 index 0000000..be4e186 --- /dev/null +++ b/docs/IMPORT-LOG/README.md @@ -0,0 +1,42 @@ +# IMPORT-LOG + +Append-only ledger of media-import events for ARRFLIX. Each file in this +directory documents a single import operation so future audits can trace +content on disk back to its provenance. + +## Convention + +- **One file per import event.** +- **Filename format:** `YYYY-MM-DD--.md` + - `` is the upstream type (`youtube`, `tvdb-rip`, `bluray`, `manual`, etc.). + - `` is the lowercase show name with `-` separators. + - Example: `2026-05-08-youtube-sassy-the-sasquatch.md`. +- **Date** is the day the import landed on the live library (not the day the + source was published). + +## Required sections + +Each entry should include: + +1. **Source** — upstream URL/handle, channel/distributor, identifiers. +2. **Date imported** — ISO-8601. +3. **Episodes imported** — table mapping source identifier → canonical + filename → Jellyfin item id (resolution + size where applicable). +4. **Naming rules applied** — citations of the `docs/0X.md` rule numbers + invoked, with a short note on the specific edit each made. +5. **rsync stats** — `sent / received / speedup` from the transfer. +6. **Jellyfin verification** — series id, episode count, direct-play status. +7. **Known caveats** — anything that wasn't perfect (missing metadata, + failed thumbnails, age-restricted episodes, etc.). +8. **Source manifest copied** — top-level fields of the operator's + `manifest.json`. Do **not** embed the full `episodes[]` array — link to + the canonical files in the live library instead. + +## Boundaries + +- **No access tokens, API keys, or session cookies** in any log file. +- For YouTube imports, **do not include full video URLs** — record the bare + `videoId` only, so import logs are not indexable as a re-distribution + pointer. +- Logs are **immutable once committed**. To correct a mistake, append a + follow-up entry rather than rewriting history.