Youtube feed declutter
Use when someone wants to clean up or reset polluted YouTube recommendations by splitting one account's mixed interests into separate single-topic channels (e.g. a dedicated "study", "film", or "music" channel) — migrating curated subscriptions and seeding each channel's algorithm so its feed stays on-topic.From its SKILL.md
npx -y skills add SandyCodfish/youtube-feed-declutterAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.0 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
YouTube Feed Declutter
Overview
One YouTube account with years of mixed subscriptions has a noisy recommendation feed. Fix: build separate single-topic channels (YouTube brand accounts under one Google login), each with its own curated subscriptions and watch history, so each feed stays on-topic.
This skill bundles a small Python CLI (scripts/yt_segmenter) that does the automatable parts —
resolving channel names → exact channels, batch-subscribing via the official API, and generating
a ranked watch-guide to seed the algorithm. One install drives many channels via a profile env var.
When to use
- "My YouTube feed is a mess / too random / mixes work and entertainment."
- "I want a clean channel just for <topic>."
- Migrating a curated subset of subscriptions onto a fresh channel.
Not for: boosting view counts, automating other people's accounts, or anything at scale — this is personal, single-account curation only.
Two hard facts that shape everything
- The YouTube Data API can write subscriptions but cannot watch videos or read the
recommendation feed (no "mark watched" endpoint;
activities?home=trueis deprecated). So subscriptions go through the clean API; seeding the feed needs real watching → the optional browser auto-watcher (watch), which is TOS-sensitive and opt-in only. - The only manual, human-gated steps are account stuff: creating each brand channel and the OAuth consent (picking the right channel). Never automate logins, passwords, or account creation — hand those to the user.
Prerequisites (one-time, ~15 min)
Google Cloud OAuth client + a brand channel. Full click-by-click walkthrough:
see references/SETUP.md (covers the org_internal fix and the client-secret gotcha).
Install
cd scripts
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
playwright install chromium # only needed for the optional `watch` step
Workflow
Pipeline: setup → auth → resolve → subscribe → seed → watch (status anytime). Resume-safe.
python -m yt_segmenter setup # checklist + readiness
python -m yt_segmenter auth # OAuth; USER picks the target channel on the consent screen
python -m yt_segmenter resolve # seed names → exact channels (edit seeds/<profile>.txt first)
python -m yt_segmenter subscribe # quota preview, then batch-subscribe (resumable)
python -m yt_segmenter seed # writes a ranked watch-guide (JSON + markdown)
python -m yt_segmenter watch # OPTIONAL browser auto-watcher, behind a TOS prompt
Multiple channels (profiles)
YT_SEG_PROFILE isolates each channel's state, seeds, and output. Unset = the film profile.
YT_SEG_PROFILE=study python -m yt_segmenter auth # study channel, isolated state
YT_SEG_PROFILE=study python -m yt_segmenter subscribe
Recipe: add a new channel
- User creates the brand channel in YouTube (Settings → "Add or manage your channel(s)" → Create).
- Write
seeds/<profile>.txtasDisplay Name | @handle-or-UCidlines (seeseeds/example.txt). YT_SEG_PROFILE=<profile> python -m yt_segmenter auth— user picks that channel + Allow.resolve, thensubscribe, thenseed. (Optional)watch.
Tip — finding channels to migrate: the API only sees the logged-in channel's subscriptions.
To read a user's full personal subscription list, open youtube.com/feed/channels in their browser
and read the DOM (the page loads all subs at once), then curate from there.
Auto-watcher — TOS gate
watch is opt-in, behind a typed "I understand". It drives a real browser playing videos in the
user's own logged-in session (no stealth, no scraping) — but YouTube's Terms discourage automated
interaction. Keep it gated and honest; treat it as experimental / at-your-own-risk. Watching even
the top 1–2 videos per channel by hand seeds the feed with zero TOS exposure.
Gotchas
Error 403: org_internalat auth → the OAuth consent screen is set to "Internal". Personal Gmail needs External audience + yourself added as a Test user.- Client secret only shows at creation in Google's console. If the download misbehaves, copy
the Client ID + secret from the creation dialog and build
~/.yt_segmenter/config.jsonby hand (a desktop-app secret is a public client per RFC 8252). - Occasional channel-name rejections on creation — pick a slight variant.
What's in this skill
scripts/yt_segmenter/— the CLI package ·scripts/requirements.txt— depsscripts/seeds/example.txt— sample seed file (copy toseeds/<profile>.txt)references/SETUP.md— Google Cloud + brand-channel setup walkthrough
What ships with it: 17 files
38.9 KB alongside SKILL.md, 11 of them executable
references/
- SETUP.md2.7 KB
scripts/
- requirements.txt99 B
- seeds/example.txt802 B
- yt_segmenter/auth.pyruns1.4 KB
- yt_segmenter/cli.pyruns4.7 KB
- yt_segmenter/config.pyruns1.5 KB
- yt_segmenter/db.pyruns3.3 KB
- yt_segmenter/__init__.pyruns79 B
- yt_segmenter/__main__.pyruns61 B
- yt_segmenter/resolve.pyruns5.1 KB
- yt_segmenter/seed.pyruns4.7 KB
- yt_segmenter/subscribe.pyruns2.0 KB
- yt_segmenter/watch.pyruns3.8 KB
- yt_segmenter/youtube.pyruns4.1 KB
- .gitignore192 B
- LICENSE1.0 KB
- README.md3.3 KB
Gives 0 of the 12 instructions most social media skills give in ~1.1k tokens
Counted across 489 of the 492 authors here whose files we hold, read 2026-08-07
- Adapt formats and tone to each platformin 26 of 489, across 14 files
- Build content around three to five pillarsin 25 of 489, across 13 files
- Read product marketing context before asking questionsin 23 of 489, across 13 files
- Respond to all comments on your postsin 21 of 489, across 9 files
- Use the output flag to specify an output directoryin 14 of 489, across 4 files
- Generate output logo images with white backgroundin 13 of 489, across 4 files
- Fix failing generation scripts directlyin 13 of 489, across 4 files
- Ask user about HTML preview after logo generationin 12 of 489, across 3 files
- Run the download script with a URLin 12 of 489, across 3 files
- Implement exponential backoff for 429 responsesin 12 of 489, across 3 files
- Write the hook firstin 12 of 489, across 7 files
- Include a single clear call to actionin 12 of 489, across 9 files
Said here and by no other author read
- use separate single-topic brand accounts
- use the python cli for automatable parts
- hand account creation and oauth to the user
- never automate logins passwords or account creation
- run setup auth resolve subscribe seed and watch
- set the profile env var to isolate channel state
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.