13 eps imported, all matched on TVDB/IMDb. Run notes flag two new playbook bugs found: /Library/Refresh is a silent no-op (must trigger /ScheduledTasks/Running/<id> directly) and /Items/Counts is scope-cached (use /Shows/<id>/Episodes?Season=N for verify). Pending follow-ups recorded for v1.1 playbook revision.
103 lines
6.1 KiB
Markdown
103 lines
6.1 KiB
Markdown
# archer-s02-2009
|
||
|
||
Second run of `playbooks/import-media/` v1.0. First TV-season run (Lilo & Stitch was a movie).
|
||
|
||
## Provenance
|
||
|
||
- **Source path on onyx:** `/home/admin/Downloads/Archer Season 2 [1080p AI 10bit S91 Joy]/`
|
||
- **Release group:** Joy (AI-upscale tag `S91`)
|
||
- **Quality:** 1080p HEVC 10-bit (Main 10), AI-upscaled from SD source
|
||
- **Audio:** HE-AAC 5.1 English
|
||
- **Embedded subs:** 3× DVD bitmap (eng, spa, fre)
|
||
|
||
## Target
|
||
|
||
- **Library:** tv
|
||
- **Path:** `/home/user/media/tv/Archer (2009)/Season 02/`
|
||
- **Container view:** `/media/tv/Archer (2009)/Season 02/`
|
||
- **Series Item ID:** (existed pre-import; not re-fetched this run)
|
||
- **TVDB / TMDb:** matched on existing `Archer (2009)` series folder (Season 1 already in lib)
|
||
|
||
## Files imported (13)
|
||
|
||
```
|
||
Archer (2009) - S02E01 - Swiss Miss.mkv
|
||
Archer (2009) - S02E02 - A Going Concern.mkv
|
||
Archer (2009) - S02E03 - Blood Test.mkv
|
||
Archer (2009) - S02E04 - Pipeline Fever.mkv
|
||
Archer (2009) - S02E05 - The Double Deuce.mkv
|
||
Archer (2009) - S02E06 - Tragical History.mkv
|
||
Archer (2009) - S02E07 - Movie Star.mkv
|
||
Archer (2009) - S02E08 - Stage Two.mkv
|
||
Archer (2009) - S02E09 - Placebo Effect.mkv
|
||
Archer (2009) - S02E10 - El Secuestro.mkv
|
||
Archer (2009) - S02E11 - Jeu Monégasque.mkv
|
||
Archer (2009) - S02E12 - White Nights.mkv
|
||
Archer (2009) - S02E13 - Double Trouble.mkv
|
||
```
|
||
|
||
Total ~2.8 GiB.
|
||
|
||
## Counts
|
||
|
||
| | Before | After | Delta |
|
||
|---|---:|---:|---:|
|
||
| Episodes in `Archer (2009)` S02 | 0 | 13 | +13 ✅ |
|
||
| SeriesCount | 12 | 12 | 0 (series existed) |
|
||
| MovieCount | 4 | 4 | 0 |
|
||
| `/Items/Counts.EpisodeCount` global | 230 | 230 (stale) | endpoint scope-cached, not authoritative |
|
||
|
||
**Authoritative verify:** `GET /Shows/9d22c409d5319c3c6068cfd38569714f/Episodes?Season=2` → 13 items, all with `ProviderIds.Tvdb`+`Imdb`+`TvRage`, Primary image present, paths resolve.
|
||
|
||
## Stream summary (S02E01 sample)
|
||
|
||
```
|
||
Duration: 00:21:03.48, bitrate: 1452 kb/s
|
||
Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv), 1920x1080, SAR 1:1 DAR 16:9, 23.98 fps
|
||
Stream #0:1(eng): Audio: aac (HE-AAC), 48000 Hz, 5.1, fltp
|
||
Stream #0:2(eng): Subtitle: dvd_subtitle (dvdsub), 1920x1080
|
||
Stream #0:3(spa): Subtitle: dvd_subtitle (dvdsub), 1920x1080
|
||
Stream #0:4(fre): Subtitle: dvd_subtitle (dvdsub), 1920x1080
|
||
```
|
||
|
||
HEVC 10-bit Main10 — direct-play on most clients. DVD-bitmap subs (`dvd_subtitle`) — server burn-in works, but per ARRFLIX subtitle style (1× plain English `.srt` only, no SDH/forced) these may need WhisperX text rebuild later. Add to `playbooks/subtitles/STOPGAP-SUBS.md` if user wants text subs.
|
||
|
||
## Subtitle status
|
||
|
||
- Embedded: yes — 3× DVD bitmap (eng, spa, fre)
|
||
- External sidecar: none yet
|
||
- Action: none for now. Per ARRFLIX style, only English sidecar `.srt` is canonical; embedded multi-lang DVD-subs do not satisfy that. Defer to subtitle playbook if user wants text-based eng.
|
||
|
||
## Verification checks
|
||
|
||
- [x] Folder/filename canonical (`Archer (2009)/Season 02/Archer (2009) - S02E<NN> - <Title>.mkv`)
|
||
- [x] Permissions `user:user` 644 (file) / 755 (dir) — `ls -la` post-rsync confirmed
|
||
- [ ] LibraryMonitor auto-fired — **DID NOT trigger** (same as Lilo run; bind-mount inotify flake confirmed as a pattern, not one-off)
|
||
- [x] `POST /Library/Refresh` returned 204 but did NOT trigger task (silent no-op)
|
||
- [x] `POST /ScheduledTasks/Running/<scan-task-id>` returned 204 → task ran → episodes added
|
||
- [x] All 13 eps indexed with `Tvdb`+`Imdb`+`TvRage` providers populated
|
||
- [x] Per-episode Primary artwork present (`ImageTags.Primary` set on all 3 sampled)
|
||
- [x] HEVC 10-bit + HE-AAC → direct-play candidate on most clients
|
||
|
||
## Notes / surprises
|
||
|
||
- LibraryMonitor flake confirmed: same as Lilo run. v1.0 playbook wording ("auto-refreshes ~1–3 s") is wrong; force-refresh is mandatory. Update to README.
|
||
- **`POST /Library/Refresh` is also a silent no-op** in this Jellyfin build. Returned 204 but the `Scan Media Library` task didn't fire and counts stayed flat. Had to fetch the task ID from `/ScheduledTasks` and POST to `/ScheduledTasks/Running/<id>` directly. Update playbook to use task-trigger endpoint, not `/Library/Refresh`.
|
||
- **`/Items/Counts` is scope-cached/stale** — kept returning 230 even after 13 new eps were indexed. Use `/Shows/<series-id>/Episodes?Season=N` as authoritative count source, not `/Items/Counts`.
|
||
- API token retrieval: no docs in repo for getting an admin token. ApiKeys table empty (no operator-created keys). Pulled an active web-session token from `Devices` table via temp Alpine container mounting `jellyfin.db` read-only (`docker run --rm --userns=host -v ...:ro alpine sh -c "apk add sqlite && sqlite3 /db.sqlite ..."`). Per-session tokens work as `X-Emby-Token` for admin operations when source user has admin role. Worth documenting in ADMIN-GUIDE — or better, create an explicit ApiKeys row labelled "import-pipeline" with permanent rotation policy.
|
||
- Source filenames had double-space before `[1080p ...]` group tag — handled by `${f%% [*}` parameter expansion. May need to be more lenient in future imports (single-space variants, no-space variants).
|
||
- HE-AAC audio at 5.1 may transcode-pressure some clients (LG WebOS notably struggles with HE-AAC multichannel). Watch for transcode lines in `docker logs jellyfin | grep transcode` if Archer playback shows lag.
|
||
- Source download on laptop retained per `ADMIN-GUIDE.md:74` — DO NOT delete `/home/admin/Downloads/Archer Season 2 ...` until user confirms playback in browser.
|
||
|
||
## Operator action
|
||
|
||
User to verify in browser: `https://arrflix.s8n.ru` → Archer (2009) → Season 02 → spot-check episodes 1, 7, 13 → confirm artwork + Play. After confirmed, source download on onyx can be deleted.
|
||
|
||
## Pending follow-ups
|
||
|
||
1. Update `playbooks/import-media/README.md`:
|
||
- Drop "LibraryMonitor auto-fires" wording.
|
||
- Replace `/Library/Refresh` with `/ScheduledTasks/Running/<scan-task-id>` (true task trigger).
|
||
- Add note: do NOT use `/Items/Counts` as verification source (cached); use `/Shows/<id>/Episodes?Season=N` per-series.
|
||
2. Document API-token retrieval in `ADMIN-GUIDE.md` (DB pull recipe or instructions to mint an ApiKey row labelled `import-pipeline`).
|
||
3. Consider adding a `bin/import-tv.sh` that wraps stage → rsync → chmod → task-trigger → poll-by-series.
|