A DVR for YouTube subscriptions, laid out so Jellyfin presents each channel as a show and each video as an episode. Cron-driven, idempotent, with a public admin UI for a non-operator. Verified end to end on susan against three real channels: PO tokens, h264 downloads, Jellyfin resolution from local NFOs with all providers disabled, retention and tombstones. Corrections to the original design handover (specs.md documents each with the evidence, and specs.handover-original.md preserves the original): - The format sort selected 360p. Ranking acodec above res makes `bv*` prefer the combined 360p stream, which carries AAC, over the 720p video-only stream whose acodec is none. vcodec now leads, so a video without h264 at 720p yields h264 lower down rather than VP9 this hardware cannot transcode. - yt-dlp now requires a JS runtime and the yt-dlp-ejs solver scripts, which only ship with the [default] extra. Without them the n challenge fails and the mweb formats disappear entirely. - --flat-playlist carries no upload dates, so the specced client-side date filter for backfill was impossible. Backfill is RSS-first. - skipped_old was terminal, so raising a channel's retention appeared to do nothing. Added an explicit rescan. - is_upcoming premieres now defer and retry instead of being skipped forever. - TubeArchivist is gone, so the media root and the tube.jihakuz.xyz vhost were both reclaimed; the latter still pointed at its dead port. 240 offline tests, no network and no real yt-dlp invocation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
21 lines
751 B
Bash
Executable File
21 lines
751 B
Bash
Executable File
#!/bin/bash
|
|
# Weekly yt-dlp update, run under runitor from susan's crontab.
|
|
#
|
|
# specs.md §12 calls a stale yt-dlp the single most likely cause of "everything
|
|
# broke", so this is monitored with its own Healthchecks UUID. It deliberately
|
|
# does NOT touch the bgutil plugin: that is pinned to match the container tag,
|
|
# and upgrading one half alone is how you get silent version skew.
|
|
#
|
|
# doctor runs afterwards so a successful install that nonetheless leaves the
|
|
# stack broken still fails the check.
|
|
set -euo pipefail
|
|
|
|
VENV=/var/lib/youtube-automate/venv
|
|
UV=/home/susan/.local/bin/uv
|
|
|
|
"$UV" pip install --python "$VENV" --quiet --upgrade 'yt-dlp[default]'
|
|
|
|
echo "yt-dlp now: $("$VENV/bin/yt-dlp" --version)"
|
|
|
|
exec "$VENV/bin/youtube-automate" doctor
|