Filter YouTube videos by channel, keyword, duration, language, live streams and members-only content. Full blocklist/whitelist management with quick action buttons on video cards.
v1.1.0 | Tampermonkey userscript | Traditional Chinese & English
youtube-channel-filter-v1.1.0.user.jsOpen the panel (click 🔍 or use Tampermonkey menu "⚙️ Open management panel"). The top-right corner of the panel should show v1.1.0.
The UI follows system language by default (Traditional Chinese / English). To switch:
The language setting is stored in ytf_lang and syncs across browser tabs.
All channels added to this list will have their videos completely hidden from all listing pages (home, search, recommendations, subscriptions, etc.).
| Button | Description |
|---|---|
| ✏️ | Edit channel name / ID / Regex mode / tags |
| ✕ | Remove (two-step confirmation to prevent accidents) |
| 🏷 | Open the tag management panel for this entry |
| 🗑 Clear all | Clear the entire blocklist (with confirmation) |
The search bar at the top filters by channel name or @handle; the tag filter bar filters by tag.
All channels added to this list will always be shown (bypassing all filter rules).
Operations are the same as the Blocklist (use the card's ⭐ quick button or add manually from the panel).
Whitelist entries also support:
Whitelist and Blocklist have completely independent tag pools — identical tag names are counted separately.
Create multiple "keyword groups", each containing multiple keywords. A video whose title or description matches any keyword is hidden.
| Button | Description |
|---|---|
| 🔴 / ⚪ | Enable / disable the group (preserves data) |
| ↑ ↓ | Adjust group priority |
| ✏️ | Edit group name / scope |
| 🗑 Delete group | Delete the entire group (with confirmation) |
The search bar above the group list filters in real time:
The Settings page is organized into sections, from top to bottom:
Click this to save all configuration changes.
When enabled, only whitelisted channels are shown; everything else is hidden. This is the core switch for the child-safety setup.
60 / 600 → only show videos between 1 and 10 minutesHide members-only videos.
nl, pl, sv)Bundles all blocklist, whitelist, keywords, and filter settings into a single JSON file.
All CSVs include UTF-8 BOM, so Windows Excel opens them correctly without character corruption.
yt-filter-backup-)Generate a URL containing selected lists (blocklist / whitelist / keywords / all). Recipients click the URL to quickly import the settings. No server involved (data encoded in URL itself).
When blocklist or whitelist grows to hundreds of channels, tagging makes management easier:
Click ✏️ to open the edit form. The "tags" field accepts comma-separated input. Below the input, an "📌 All tags" chip row lets you click to toggle.
Each list has a tag filter bar at the top:
All (200) → show all entriesPolitics (15) → show only entries tagged "Politics"| Item | Description |
|---|---|
| Tag isolation | Blocklist tags vs Whitelist tags are completely independent, even if named identically |
| Real-time sync | All related UI refreshes instantly after adding/removing tags |
| Auto-reset on empty filter | If a filtered tag is removed entirely, the list auto-returns to "All" |
Enable ⌥R.* Regex mode in blocklist/whitelist entries or keyword groups. Use it for:
Case-insensitive by default.
| Pattern | Description |
|---|---|
^abc |
Starts with abc |
abc$ |
Ends with abc |
| `a\ | b` |
\d+ |
One or more digits |
\b |
Word boundary (avoids partial match) |
.* |
Any characters (zero or more) |
[0-9] |
Character range |
| Pattern | Matches |
|---|---|
^\[Ad\] |
All videos with titles starting with "[Ad]" |
\bNASA\b |
Standalone NASA (avoids "NASA-related") |
| `(stocks\ | investing\ |
EP\.?\d+ |
Matches EP1 / EP.1 / EP 1 episode formats |
^(?!.*official).*$ |
Titles that do NOT contain "official" (negative lookahead) |
No need to add / slashes or /i flags — just enter the pattern. Backslash escaping is handled by the UI.
Build a child-friendly browsing environment using existing features:
Step 1 | Whitelist: Go to ⭐ Whitelist tab, add child-safe channels (e.g., @PBSKids, @SesameStreet, @CocomelonOfficial)
Step 2 | Whitelist-only: Go to ⚙️ Settings (top), enable "⭐ Show only whitelisted channels" — everything else will be hidden
Step 3 | No live streams: In "📡 Live / Premiere" section, enable "Hide live streams" and "Hide upcoming premieres" — avoids live chat risks
Step 4 | Keyword blocklist: In 🔤 Keywords, create a "Harmful content" group with words like "violence, gore, horror, adult, gambling" and enable it (regex: (violence|gore|horror|adult|gambling))
Step 5 (optional) | Date limit: In 📅 Upload date, set "Hide videos older than 30 days" — prevents algorithm pushing old controversial content
Step 6 (optional) | Language filter: In 🌐 Language filter, select "Show only selected languages" and check only the child's native language
This script only filters listing pages (home / search / recommendations). It cannot:
Strongly recommended additions:
| Action | Behavior |
|---|---|
| Top bar 🔍 button left-click | Open management panel |
| Top bar 🔍 button right-click | Toggle filter on/off (temporarily see raw YouTube) |
| Video card hover | Bottom slides out "🚫 Block" & "⭐ Whitelist" buttons |
| Tampermonkey menu | Provides "Open panel", "Toggle filter", "Backup settings now" options |
Enable via Tampermonkey menu "🔍 Toggle debug mode":
__ytfReport() to view statisticsDelete the old version → install the new one. Verify the loaded version via the top-right version badge in the panel.
Verify version is v1.1.0 or higher (UTF-8 BOM fix). If still garbled, use Excel's "Data → From Text" with UTF-8 encoding.
Latin-based languages (English, Spanish, Vietnamese, French) have lower accuracy due to character overlap. Combine with keyword filters for more precise results.
Possible causes:
Keywords only match visible title and description. If a video's description is collapsed or truncated by YouTube, description matching may fail. Always include "Title" in the scope.
ytf_bl / ytf_wl / ytf_kg / ytf_fl / ytf_gl: lists and settingsytf_st / ytf_hi: stats and historyytf_vcm: videoId→channelId cacheytf_lang: interface languageAll data is stored in Tampermonkey's GM Storage. Nothing is uploaded to any server.