diff --git a/playbooks/import-media/runs/more-perfect-union-palantir-20250417.md b/playbooks/import-media/runs/more-perfect-union-palantir-20250417.md new file mode 100644 index 0000000..78578e9 --- /dev/null +++ b/playbooks/import-media/runs/more-perfect-union-palantir-20250417.md @@ -0,0 +1,124 @@ +# more-perfect-union-palantir-20250417 + +Single-video YouTube import into the **STOCK** Jellyfin at `tv.s8n.ru` +(container `jellyfin-stock`), **Education** library +(`collectionType=movies`, internet providers disabled, fresh path). + +First import for channel `More Perfect Union` — creates the channel folder +under `/media/education/`. + +## Provenance + +- **Source:** YouTube — `https://www.youtube.com/watch?v=DZ95Gmvg_D4` +- **Channel:** More Perfect Union +- **Title:** "I Worked At Palantir: The Tech Company Reshaping Reality" +- **Upload date:** 2025-04-17 +- **Duration:** 16:31 +- **Tool:** `yt-dlp` on onyx +- **Format selector:** `bv*[height<=1080][ext=mp4]+ba[ext=m4a]/b[height<=1080][ext=mp4]/bv*[height<=1080]+ba/b[height<=1080]/b` → `--merge-output-format mp4` (source native 1080p AV1+AAC) +- **Subs:** `--write-subs --sub-langs 'en' --embed-subs --convert-subs srt` — author-provided English subs embedded AND sidecar `.en.srt` +- **Thumbnail:** `--write-thumbnail --convert-thumbnails jpg` → sidecar `.jpg`, Primary via Local Posters +- **yt-dlp output template:** `-o "%(title)s — %(upload_date)s.%(ext)s"` +- **Staging path on onyx:** `/home/admin/staging-jelly/More Perfect Union/` + +### Filename normalisation + +Raw yt-dlp output (with fullwidth colon substitute): +`I Worked At Palantir: The Tech Company Reshaping Reality — 20250417.mp4` + +Applied playbook §1f rules: +- Replaced U+FF1A FULLWIDTH COLON (yt-dlp's safe substitute for `:`) with + ` - `. Playbook §1f forbids ASCII `:`; the fullwidth fallback is + cosmetically ugly and breaks search. + +Final filename (per playbook §1d Education pattern — date as suffix, em-dash): +`I Worked At Palantir - The Tech Company Reshaping Reality — 20250417.mp4` + +## Target + +- **Server:** `jellyfin-stock` on nullstone, `https://tv.s8n.ru` +- **Library:** Education (`collectionType=movies`, `EnableInternetProviders=false`) +- **Library Item ID:** `484cf52875118e03bd7effc72621bec0` +- **Movie Item ID:** `d9127cf53df5f81565bc217305179962` +- **Path on host:** `/home/user/media/education/More Perfect Union/I Worked At Palantir - The Tech Company Reshaping Reality — 20250417.mp4` + +### Sidecar files + +| Kind | File | +|---|---| +| Media | `… — 20250417.mp4` (89,599,403 B, ~85 MiB) | +| Subtitle | `… — 20250417.en.srt` (22,955 B) | +| Thumbnail | `… — 20250417.jpg` (56,398 B) — Primary via Local Posters | + +## Counts + +| | Before | After | Delta | +|---|---:|---:|---:| +| Education library items | 11 | 12 | +1 | +| `More Perfect Union/` channel folder | — | created | new channel | + +## Stream summary + +``` +Container: mp4 Size: 85.5 MiB Duration: 16:31 + Video av1 und 1080p AV1 SDR + Audio aac eng English AAC stereo + Subtitle mov_text eng English — Default — MOV_TEXT (embedded) + Subtitle subrip eng English — SUBRIP — External (.en.srt) +``` + +AV1 1080p source — direct-play in any AV1-capable client (Chromium 100+, +recent VLC, mpv). + +## Subtitle status + +- Embedded: yes — one English `mov_text` track from `--embed-subs`. +- External sidecar: yes — `.en.srt`. +- Source: channel-published (author-provided) — yt-dlp `--sub-langs 'en'` + fetches manual subs only, never auto-CC. +- Action: none. No WhisperX rebuild needed. + +## Verification checks + +- [x] Folder/filename canonical (playbook §1d — date suffix, em-dash, no Season dir). +- [x] No forbidden chars in path. +- [x] Permissions `user:user` 644 / 755. +- [x] `Scan Media Library` triggered via `/ScheduledTasks/Running/`, + `LastExecutionResult.Status=Completed`. +- [x] Item resolved as `Type=Movie` in Education library. +- [x] `ImageTags.Primary` present (Local Posters from sidecar `.jpg`). +- [x] Embedded + external subtitle streams both registered. +- [x] `LockData=true` set after manual Name override (see Notes). +- [ ] Direct-play in mobile / Smart-TV client not exercised. + +## Notes / surprises + +### JF single-file-in-channel-folder leaked folder name as title + +First import for a brand-new channel folder produces exactly **one** file in +`/media/education/More Perfect Union/`. JF's movie resolver applied the +folder-name-as-title heuristic and registered the item as +`Name="More Perfect Union"` — wiping the actual episode title. + +This matches the documented pattern in +`feedback_jellyfin_single_file_channel`: movie-in-own-folder → folder name +wins. Fix: PUT `/Items/` with corrected `Name` + `LockData=true` so +future scans don't revert it. + +Working fix: + +```bash +TOK= +ITEM=d9127cf53df5f81565bc217305179962 +USER_ID=2ad8033c4f97486788d4a4b4915b9c0f + +curl -sf -H "X-Emby-Token: $TOK" \ + "$SERVER_URL/Users/$USER_ID/Items/$ITEM" \ + | jq '.Name = "I Worked At Palantir - The Tech Company Reshaping Reality — 20250417" | .LockData = true' \ + | curl -sf -X POST -H "X-Emby-Token: $TOK" -H 'Content-Type: application/json' \ + --data @- "$SERVER_URL/Items/$ITEM" # → HTTP 204 +``` + +Generalises to all single-file YouTube imports: drop a second file into the +channel folder before scanning, OR accept the post-import `Name`+`LockData` +override. Once the channel has ≥2 files, JF parses filenames correctly.