modules/programs/agents/shared/skills/add-youtube-channel/SKILL.md
Subscribe a YouTube channel in TubeArchivist, queue its top videos by views from recent uploads, wait for the first file, scan Jellyfin, and rename + lock the channel folder to a friendly display name. Use when the user says "add a youtube channel", "subscribe to <channel>", or wants a curated TubeArchivist + Jellyfin import for a creator.
npx skillsauth add MichaelVessia/nixos-config add-youtube-channelInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
End-to-end pipeline: TubeArchivist subscribe -> download top-by-views from recent uploads -> Jellyfin scan -> rename + lock the Jellyfin folder.
User wants a new creator imported into TubeArchivist and surfaced cleanly in
Jellyfin under a human-readable name (not a UC... id).
This skill has side effects. Confirm with the user before running because it will:
Name field so future
metadata refreshes do not overwrite itRead back the resolved channel name from yt-dlp (run with --resolve-only
first if you want a dry-check) before you commit to the full run.
Credentials come from sops-nix (see modules/programs/shell.nix):
TUBEARCHIVIST_URL, TUBEARCHIVIST_USERNAME, TUBEARCHIVIST_PASSWORDJELLYFIN_URL, JELLYFIN_API_KEYThe script asserts all five and aborts cleanly otherwise.
bash scripts/add-youtube-channel.sh <handle-or-url> <friendly-name> [--top N] [--recent K]
Arguments:
<handle-or-url> — @example, https://www.youtube.com/@example, or
UC... channel id. Anything yt-dlp accepts.<friendly-name> — Display name to set in Jellyfin (quote if it has spaces).--top N — Number of top-viewed videos to queue. Default 20.--recent K — Sample size: yt-dlp pulls the most recent K uploads and sorts
by view count. Default 30.Dry-run helpers:
--resolve-only — Only run the yt-dlp handle resolution and print the
resolved JSON {channel_id, channel, uploader_id, webpage_url}. Use this to
sanity-check a handle (mistyped handles return 404; you'll find out here
instead of after subscribing).--top 20 --recent 30 keeps the initial download light while still favouring
the channel's most popular videos.
/api/channel/ to subscribe in TubeArchivist--flat-playlist, sort by view_count,
take top N/api/download/?autostart=true with the YouTube IDs/api/task-name/download_pending/ to kick the worker*.mp4 under /mnt/media/youtube/<channel_id>/ inside
the TubeArchivist LXC (pct exec 120). 10-minute timeout, 15s poll/Library/Refresh to trigger a Jellyfin scanName to the friendly
name, add "Name" to LockedFields, POST back to /Items/<id>yt-dlp runs via ssh -o BatchMode=yes proxmox 'pct exec 120 -- /opt/tubearchivist/.venv/bin/yt-dlp ...'
so we use TubeArchivist's bundled binary and don't depend on the workstation
having yt-dlp installed.
On success, prints a JSON summary to stdout:
{
"channel_id": "UC...",
"youtube_name": "Example Channel Name",
"jellyfin_name": "Example Channel",
"queued": 20,
"first_file": "/mnt/media/youtube/UC.../Some-Video [abc].mp4",
"jellyfin_item_id": "..."
}
Progress is logged to stderr with [HH:MM:SS] timestamps for each phase.
tubearchivist tasks and proxmox LXC 120 logsdevelopment
Generate self-contained HTML visualizations with Plannotator theming. Use for implementation plans, PR explainers, architecture diagrams, data tables, slide decks, and any visual explanation of technical concepts. Plans and PR explainers follow Plannotator's prescriptive approach; all other visual content delegates to nicobailon/visual-explainer.
development
Turn an idea or objective into a goal package for /goal. Interviews the user, builds a reviewed fact sheet via Plannotator, then explores the codebase to produce an execution plan.
development
Open Plannotator's browser-based code review UI for the current worktree or a pull request URL, then act on the feedback that comes back.
testing
Open Plannotator on the latest rendered assistant message and use the returned annotations to revise that message or continue.