docs(35): import lex-fridman-podcast S01E491 OpenClaw to stock Jellyfin Podcasts
Episode resolved as Type=Episode under correct Series + Season but JF MovieResolver did not parse SxxEyy from filename — ParentIndexNumber and IndexNumber were null. Series-level + item-level full refresh did not fix. Required manual API override (PUT IndexNumber=491, ParentIndexNumber=1, LockData=true). All 5 prior LFP episodes already have LockData=true — this appears to be the established pattern for new Lex Fridman Podcast episodes. Generalise into playbook §1c after one more confirmation.
This commit is contained in:
parent
4750a2c4cc
commit
675e6ab1ec
1 changed files with 127 additions and 0 deletions
|
|
@ -0,0 +1,127 @@
|
||||||
|
# lex-fridman-podcast-s01e491-openclaw
|
||||||
|
|
||||||
|
Single-episode YouTube import into the **STOCK** Jellyfin at `tv.s8n.ru`
|
||||||
|
(container `jellyfin-stock`), **Podcasts** library
|
||||||
|
(`collectionType=tvshows`, internet providers disabled).
|
||||||
|
|
||||||
|
Extends the existing `Lex Fridman Podcast` Season 01 series — sparse numbering
|
||||||
|
already in use (400 / 461 / 478 / 479 / 481). Adds episode 491.
|
||||||
|
|
||||||
|
## Provenance
|
||||||
|
|
||||||
|
- **Source:** YouTube — `https://www.youtube.com/watch?v=YFjfBk8HI5o`
|
||||||
|
- **Channel / Series:** Lex Fridman Podcast
|
||||||
|
- **Episode:** #491 "OpenClaw: The Viral AI Agent that Broke the Internet — Peter Steinberger"
|
||||||
|
- **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)
|
||||||
|
- **Subs:** `--write-subs --sub-langs 'en' --embed-subs --convert-subs srt` — user-uploaded English subs embedded AND sidecar `.en.srt`
|
||||||
|
- **Thumbnail:** `--write-thumbnail --convert-thumbnails jpg` → sidecar `.jpg`, Primary via Local Posters
|
||||||
|
- **yt-dlp output template:** `-o "Lex Fridman Podcast - S01E491 - OpenClaw - The Viral AI Agent that Broke the Internet - Peter Steinberger.%(ext)s"` (downloaded straight to canonical filename — no post-download rename needed)
|
||||||
|
- **Staging path on onyx:** `/home/admin/staging-jelly/Lex Fridman Podcast/Season 01/`
|
||||||
|
|
||||||
|
### Filename normalisation
|
||||||
|
|
||||||
|
Raw YouTube title:
|
||||||
|
> `OpenClaw: The Viral AI Agent that Broke the Internet - Peter Steinberger | Lex Fridman Podcast #491`
|
||||||
|
|
||||||
|
Applied playbook §1f rules:
|
||||||
|
- Dropped suffix ` | Lex Fridman Podcast #491` (redundant with `Lex Fridman Podcast - S01E491 -` prefix).
|
||||||
|
- Replaced ASCII `:` after `OpenClaw` with ` - ` (forbidden char).
|
||||||
|
- Pipe `|` not present in episode-title portion after suffix drop.
|
||||||
|
|
||||||
|
Final filename (per playbook §1c numbered-podcast pattern):
|
||||||
|
`Lex Fridman Podcast - S01E491 - OpenClaw - The Viral AI Agent that Broke the Internet - Peter Steinberger.mp4`
|
||||||
|
|
||||||
|
## Target
|
||||||
|
|
||||||
|
- **Server:** `jellyfin-stock` on nullstone, `https://tv.s8n.ru`
|
||||||
|
- **Library:** Podcasts (`collectionType=tvshows`, `EnableInternetProviders=false`)
|
||||||
|
- **Series Item ID:** `6c01ab0084d87b94c124948f64f87c15`
|
||||||
|
- **Season Item ID:** `67d2aaba01fe73f2ba90e36514823632`
|
||||||
|
- **Episode Item ID:** `fbeeffb256a04f103987f9b22d0bd442`
|
||||||
|
- **Path on host:** `/home/user/media/podcasts/Lex Fridman Podcast/Season 01/Lex Fridman Podcast - S01E491 - OpenClaw - The Viral AI Agent that Broke the Internet - Peter Steinberger.mp4`
|
||||||
|
|
||||||
|
### Sidecar files
|
||||||
|
|
||||||
|
| Kind | File |
|
||||||
|
|---|---|
|
||||||
|
| Media | `… - S01E491 - … .mp4` (749,120,258 B, ~715 MiB) |
|
||||||
|
| Subtitle | `… - S01E491 - … .en.srt` (270,915 B) |
|
||||||
|
| Thumbnail | `… - S01E491 - … .jpg` (64,605 B) — Primary via Local Posters |
|
||||||
|
|
||||||
|
## Counts
|
||||||
|
|
||||||
|
| | Before | After | Delta |
|
||||||
|
|---|---:|---:|---:|
|
||||||
|
| Lex Fridman Podcast / Season 01 episodes | 5 | 6 | +1 |
|
||||||
|
|
||||||
|
## Stream summary
|
||||||
|
|
||||||
|
```
|
||||||
|
Duration: 03:15:51.67, bitrate: 509 kb/s
|
||||||
|
Stream #0:0[0x1](und): Video: av1 (libdav1d) (Main), yuv420p(tv, bt709), 1920x1080, 375 kb/s, 29.97 fps
|
||||||
|
Stream #0:1[0x2](eng): Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s
|
||||||
|
Stream #0:2[0x3](eng): Subtitle: mov_text (tx3g)
|
||||||
|
```
|
||||||
|
|
||||||
|
AV1 1080p29.97 + stereo AAC + embedded English mov_text + external .en.srt
|
||||||
|
sidecar. 3:15:52 runtime, ~715 MiB — well under the 1080p cap budget for
|
||||||
|
long-form content.
|
||||||
|
|
||||||
|
## Subtitle status
|
||||||
|
|
||||||
|
- Embedded: yes — one English `mov_text` track from `--embed-subs`.
|
||||||
|
- External sidecar: yes — `.en.srt`.
|
||||||
|
- Action: none. WhisperX rebuild not required (channel-published subs trusted
|
||||||
|
for podcast transcripts; per `feedback_subtitle_accuracy_priority` only
|
||||||
|
auto-CC is rejected — these are author-provided).
|
||||||
|
|
||||||
|
## Verification checks
|
||||||
|
|
||||||
|
- [x] Folder/filename canonical (`Lex Fridman Podcast - S01E491 - <Title>.mp4` per playbook §1c).
|
||||||
|
- [x] No forbidden chars in path.
|
||||||
|
- [x] Permissions `user:user` 644.
|
||||||
|
- [x] `Scan Media Library` triggered, `State=Idle`, episode appeared in
|
||||||
|
`/Shows/<id>/Episodes?Season=1`.
|
||||||
|
- [x] `/Items?searchTerm=OpenClaw` returns the expected single Episode item.
|
||||||
|
- [x] `ImageTags.Primary` present (Local Posters from sidecar `.jpg`).
|
||||||
|
- [x] `Type=Episode`, `SeriesId` / `SeasonId` correctly attached.
|
||||||
|
- [x] `ParentIndexNumber=1`, `IndexNumber=491` populated (see Notes — required
|
||||||
|
manual override, JF scan did not parse SxxEyy from filename despite
|
||||||
|
the filename containing `S01E491`).
|
||||||
|
- [x] `LockData=true` set so future series refresh cannot revert the SE.
|
||||||
|
- [ ] Direct-play in mobile / Smart-TV client not exercised.
|
||||||
|
|
||||||
|
## Notes / surprises
|
||||||
|
|
||||||
|
### JF MovieResolver did not parse `S01E491` from filename — manual SE override required
|
||||||
|
|
||||||
|
After the `Scan Media Library` pass, the episode resolved as `Type=Episode`
|
||||||
|
attached to the correct Series + Season, but `ParentIndexNumber` and
|
||||||
|
`IndexNumber` were both `null`. The other 5 episodes in Season 01 (E400 /
|
||||||
|
E461 / E478 / E479 / E481) all have the same `Lex Fridman Podcast - S<NN>E<NN>
|
||||||
|
- <Title>.mp4` pattern and parsed correctly — root cause unclear.
|
||||||
|
|
||||||
|
Tried fixes that did **not** work:
|
||||||
|
1. Series-level `POST /Items/<seriesId>/Refresh?MetadataRefreshMode=FullRefresh&Recursive=true` → state did not change.
|
||||||
|
2. Item-level `POST /Items/<episodeId>/Refresh?MetadataRefreshMode=FullRefresh&ReplaceAllMetadata=true` → state did not change.
|
||||||
|
|
||||||
|
Working fix — direct API override:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
EP_ID=fbeeffb256a04f103987f9b22d0bd442
|
||||||
|
curl -sf -H "X-Emby-Token: $TOK" \
|
||||||
|
"$SERVER_URL/Users/$USER_ID/Items/$EP_ID" \
|
||||||
|
| jq '.ParentIndexNumber = 1 | .IndexNumber = 491 | .LockData = true' \
|
||||||
|
| curl -sf -X POST -H "X-Emby-Token: $TOK" -H 'Content-Type: application/json' \
|
||||||
|
--data @- "$SERVER_URL/Items/$EP_ID" # → HTTP 204
|
||||||
|
```
|
||||||
|
|
||||||
|
Inspecting the 5 known-good episodes, **all of them** already have
|
||||||
|
`LockData=true`, so this is the established pattern for the `Lex Fridman
|
||||||
|
Podcast` series — every new episode appears to need the override. Generalise
|
||||||
|
to a post-import step in the playbook §1c "numbered podcast" section.
|
||||||
|
|
||||||
|
Possible upstream cause: episode-resolver in JF 10.11.8 may bail when the
|
||||||
|
filename contains additional hyphen-separated segments that resemble more
|
||||||
|
SxxEyy tokens. Investigate after second occurrence.
|
||||||
Loading…
Reference in a new issue