varshneydevansh/FilterTube
GitHub: varshneydevansh/FilterTube
一款浏览器扩展,通过关键词、频道等过滤YouTube视频,帮助用户解决内容干扰问题。
Stars: 90 | Forks: 9
FilterTube
Peace of Mind for your Digital Space
[](https://deepwiki.com/varshneydevansh/FilterTube)      
## 概述
FilterTube 是一个浏览器扩展,让你掌控自己的 YouTube 信息流。使用关键词和智能规则过滤视频、Shorts、频道和评论——所有处理都私密地发生在你的设备上。
公共网站现在也作为浏览器版本、Android 手机/平板构建包以及未来商店链接的下载中心:
👉 **[filtertube.in/downloads](https://filtertube.in/downloads)**
## v3.3.1 新版本特性
- **协作屏蔽在观看页面现在更加完整**:观看页面右侧栏、播放列表行和类似观看页面的锁定位点现在可以恢复完整的合作者列表,并刷新活动的三点菜单。
- **混合卡片和真正的协作得到更安全的区分**:包含 `&` 或 `and` 的纯名称,如果没有明确的合作者信号,不再会变成假的协作菜单。
- **跨浏览器订阅频道导入更具弹性**:导入器现在更依赖于真实的 `/feed/channels` 页面增长和最近的页面浏览响应。
- **频道管理行可以直接链接到频道页面**,使用最佳可用标识符。
- **注入的三点屏蔽菜单项现在可以独立于快速屏蔽功能被禁用**。
- **Firefox/Waterfox 导出更加可靠**,包括纯 JSON 和加密 JSON,这得益于更安全的手动下载回退路径。
- **新安装会遵循你的浏览器/操作系统主题**,直到你手动选择亮色或暗色主题。
- **仪表板侧边栏在较短的桌面窗口上保持可用**,带有一个可滚动的导航列表。
- **大型屏蔽频道列表过滤更快**,因为 YouTube JSON 负载现在使用索引频道匹配,而不是为每个渲染器扫描所有已保存的频道。
- **Nanah 应用/扩展同步保留频道派生的关键词**,因此从 Android 或其他 Nanah 客户端导入的行会保留其 `过滤所有` 源元数据、行着色和源徽章,而不是降级为普通用户关键词。
- **Nanah 配对码使用人类安全的字母表** `ABCDEFGHJKMNPQRSTUVWXYZ23456789`,与上游 Nanah 运行时匹配,并避免 `I/L/O/0/1` 等易混淆字符的输入漂移。
- **下个版本的更新说明已暂存于 `data/release_notes.json`**,而非带日期的文档,因此仪表板的“新功能”信息流仍是面向发布的来源。
## Nanah 设备信任与同步
FilterTube 现在包含一个由 Nanah 驱动的设备间同步系统。
它是什么:
- 私密的设备间设置传输
- 无需中心同步账户
- 支持一次性发送、家长控制子设备和完整账户迁移
通俗模型:
1. 两台设备通过一个小型中继服务器会面
2. 两台设备确认相同的安全短语
3. 真正的设置负载旨在从一台设备直接传输到另一台
这意味着:
- 中继服务器仅仅是会面地点
- FilterTube 不需要你的设置的云端副本
- 信任保存了关系和策略以供后续实时会话使用
- 信任**不**意味着隐藏的始终在线后台同步
- 应用/扩展同步在 Nanah 负载中保持频道派生关键词的所有权
- 配对码是字母数字的,但有意限制为 Nanah 安全字母表
公共中继页面:
- [nanah-signaling.varshney-devansh614.workers.dev](https://nanah-signaling.varshney-devansh614.workers.dev/)
简单的 Nanah 流程:
```
SEND THIS PROFILE ONCE
[Device A] -> pair -> [Device B]
| |
+-- verify phrase ---+
|
+-- send once ------> [Device B reviews and applies]
```
```
PARENT CONTROLS CHILD
[Parent / Source] == managed link == [Child / Replica]
|
+-- choose remote child profile
+-- send once
+-- save managed link for later sessions
```
重要的子设备规则:
- 第一个受管理的父设备 -> 子设备连接可能仍然需要在子设备上进行一次本地父设备批准
- 此后,子设备**不**总是需要按下允许
- 这取决于保存的受管理链接策略
文档:
- [Nanah 用户指南](docs/NANAH_USER_GUIDE.md)
- [Nanah 问题跟踪器](docs/NANAH_POST_IMPLEMENTATION_CONCERNS_TRACKER.md)
- [配置文件与 PIN 模型](docs/PROFILES_PIN_MODEL.md)
- [Nanah P2P 项目计划](docs/NANAH_P2P_PROJECT_PLAN.md)
## 功能
### 内容过滤
- **按关键词屏蔽**:隐藏标题中包含特定词语的视频。
- **屏蔽频道**:粘贴频道名称、`@handle`、`UCID` 甚至 `c/CustomURL`——FilterTube 会将它们全部规范化。
- **隐藏 Shorts**:可选开关,用于移除所有 Shorts 隔间和播放器切换。
- **智能匹配**:选择部分匹配或全词匹配,以保持严格或灵活。
- **隔间与播放列表清理**:重新过滤隔间和播放列表,即使在导航后,被屏蔽的创建者也保持被屏蔽状态。
- **快速屏蔽十字 (v3.2.7)**:卡片上的悬浮十字一键即可立即屏蔽(默认启用,可禁用)。
- **三点菜单开关 (v3.3.0)**:YouTube 原生三点菜单中的 FilterTube 项可以独立于快速屏蔽功能被禁用。
- **基于内容的过滤器 (v3.2.6)**:
- 按视频时长过滤(长于/短于/介于特定长度之间)
- 按上传日期过滤(新于/早于/介于特定日期之间)
- 检测并过滤点击诱饵全大写标题
### 频道与数据管理
- **多配置文件带 PIN 锁**:账户 + 子配置文件,每个都有独立的过滤器/设置;可选的 PIN 锁在解锁前会封锁 UI。
- **配置文件范围备份**:自动备份和手动导出遵循活动配置文件。默认(主)配置文件可以导出全部;非默认配置文件仅导出活动配置文件数据。
- **加密备份**:PBKDF2-SHA256 (150k) + AES-GCM。当活动配置文件设有 PIN(或你选择“加密”格式)时,加密会自动启用;后台在加密前会验证 PIN。
- **Firefox 安全导出 (v3.3.1)**:手动纯 JSON 和加密 JSON 导出现在使用 Firefox 安全回退,而不是依赖扩展下载 API 子文件夹路径。
- **系统主题默认 (v3.3.1)**:新安装会根据 `prefers-color-scheme` 解析初始 UI 主题;显式的亮/暗切换设置会保持粘性。
- **Handle 填充队列**:新导入的频道会在后台缓慢解析,以避免对 YouTube 造成请求压力。
- **儿童模式配置文件**:为 YouTube Kids 维护一套独立、更安全的规则集,与主配置文件分开;可选的“在主 YouTube 上应用儿童列表”同步开关。
- **频道管理链接 (v3.3.0)**:频道行可以通过 handle、UCID 或旧版自定义 URL 打开真实的 YouTube 频道页面。
### 评论控制
- **隐藏所有评论**:完全移除评论区,使界面更简洁。
- **过滤评论**:隐藏包含不需要关键词的特定评论。
### 发布感知
- **更新说明横幅**:YouTube 界面中不显眼的提示框会突出显示新功能。
- **“新功能”仪表板标签页**:完整的更新日志,带深度链接,让你能直接跳转到已发布的功能。
### 统计与洞察
- **节省时间**:查看你通过屏蔽干扰内容节省了多少时间。
- **每日跟踪**:今日隐藏的视频数量。
### 性能与隐私
- **无闪烁**:通过主动 XHR 拦截,在内容渲染到屏幕**之前**就对其进行过滤。
- **即时屏蔽**:三点菜单立即显示正确的频道名称——没有“正在获取...”的延迟。
- **协作感知菜单 (v3.3.0)**:观看页面的协作行、混合/观看恢复路径和观看侧锁定点现在可以在三点 UI 中升级为完整的合作者名单。
- **大型屏蔽列表匹配 (v3.3.1)**:频道检查使用共享的集合索引,用于 UC ID、handle、自定义 URL 和严格的回退名称,因此 200 多个已保存的频道不会造成逐个渲染器的扫描成本。
- **减少网络请求**:大多数频道身份信息来自拦截的 JSON,而非页面请求。
- **100% 私密**:没有数据离开你的浏览器。无分析。无追踪。
- **现代 UI/UX (v3.2.6)**:清晰的排版、精致的组件、增强的暗色模式和儿童模式主题。
### 主动频道身份识别 (v3.2.2)
FilterTube 现在使用 **主动、XHR 优先**的策略在渲染前提取频道身份信息,并通过无延迟的性能优化和改进的用户体验进行了增强:
- **XHR 拦截**:捕获 YouTube 的 JSON 响应(`/youtubei/v1/next`、`/browse`、`/player`)
- **即时标记**:跨世界广播频道信息,立即标记 DOM 卡片
- **零网络请求的 Kids**:YouTube Kids 完全无需网络请求即可工作
- **智能填充**:屏蔽后的填充以受控速率补充缺失的元数据
- **乐观 UI**:被屏蔽的内容立即隐藏,如果需要则自动恢复
- **移动端支持**:为 YouTube 移动端增强三点菜单注入,并正确处理渲染器
- **流畅渲染**:大型频道列表使用空闲调度和批量处理进行高效渲染
在[主动频道身份识别](docs/PROACTIVE_CHANNEL_IDENTITY.md)中了解更多。
### 帮助与文档
- **帮助页面(仪表板)**:在新标签页 UI 中,专门的帮助部分解释了每个功能、导入/导出流程和故障排除提示。
- **技术文档**:
- [频道屏蔽系统](docs/CHANNEL_BLOCKING_SYSTEM.md) – 架构与数据流
- [主动频道身份识别](docs/PROACTIVE_CHANNEL_IDENTITY.md) – XHR 拦截与即时标记
- [开发者指南](docs/DEVELOPER_GUIDE.md) – 为新的 YouTube 功能扩展 FilterTube
- [架构](docs/ARCHITECTURE.md) – 系统设计与跨世界消息传递
- [更新说明数据](data/release_notes.json) – 面向发布的打包“新功能”条目
- [YouTube Kids 集成](docs/YOUTUBE_KIDS_INTEGRATION.md) – Kids 特定优化
- [三点菜单改进](docs/THREE_DOT_MENU_IMPROVEMENTS.md) – 协作者感知的菜单恢复和混合/观看处理
- [订阅频道导入](docs/SUBSCRIBED_CHANNELS_IMPORT.md) – 白名单导入流程和跨浏览器页面捕获细节
- [Android 公开分发](docs/ANDROID_PUBLIC_DISTRIBUTION.md) – APK/AAB、GrapheneOS、F-Droid 和发布渠道计划
- [应用发布与运行时同步工作流](docs/APP_RELEASE_AND_RUNTIME_SYNC_WORKFLOW.md) – 扩展到原生运行时同步与跨平台发布顺序
## 安装
### 对于用户
安装 FilterTube 最简单的方式是通过我们的官方网站:
👉 **[安装 FilterTube.in](https://filtertube.in/downloads)**(今天提供浏览器构建包,Android 手机/平板发布链接待公开)
更喜欢直接的商店链接?选择你的浏览器:
- **Chrome / Brave**:[Chrome 应用商店列表](https://chromewebstore.google.com/detail/filtertube/cjmdggnnpmpchholgnkfokibidbbnfgc)
- **Firefox**:[Firefox 附加组件列表](https://addons.mozilla.org/en-US/firefox/addon/filtertube/)
- **Edge**:[Microsoft Edge 附加组件列表](https://microsoftedge.microsoft.com/addons/detail/filtertube/lgeflbmplcmljnhffmoghkoccflhlbem)
### 对于开发者
如果你想贡献代码或从源代码构建:
1. **克隆仓库**
git clone https://github.com/varshneydevansh/FilterTube.git
cd FilterTube
npm install
2. **以开发者模式运行**
* **Chrome/Edge/Brave**:`npm run dev:chrome`
* **Firefox**:`npm run dev:firefox`
3. **加载扩展**
* **Chrome**:前往 `chrome://extensions`,启用 **开发者模式**,点击 **加载已解压的扩展程序**,然后选择 `FilterTube` 文件夹。
* **Firefox**:前往 `about:debugging`,点击 **此 Firefox**,然后 **加载临时附加组件**,并选择 `manifest.json`。
### 📱 Firefox for Android
1. **设置**:通过 USB 将你的 Android 设备连接到电脑。
2. **安装**:使用 `npm run build:firefox` 生成的 Firefox 构建包 zip 文件。
3. **调试**:按照 Mozilla 的指南,使用 `web-ext` 或远程调试[调试 Android 上的扩展](https://extensionworkshop.com/documentation/develop/developing-extensions-for-firefox-for-android/)。
## 使用
### 基本过滤
1. 点击浏览器工具栏中的 FilterTube 图标
2. 输入要过滤的关键词(用逗号分隔)
3. 输入要过滤的频道名称、@handle 或频道/ID(用逗号分隔)
4. 点击“保存”以应用过滤器
### 查找要屏蔽的频道
1. 在 YouTube 上前往该频道的页面
2. 从 URL 复制频道标识符:
- `https://www.youtube.com/@HandleName` → 使用 `@HandleName`
- `https://www.youtube.com/channel/UCxxxxxxxx` → 使用 `UCxxxxxxxx` 或 `channel/UCxxxxxxxx`
3. 将其输入到频道过滤字段中
### 评论过滤
1. 点击 FilterTube 图标
2. 切换“隐藏所有评论”以完全隐藏评论
3. 或者选择“过滤包含关键词/频道的评论”以仅隐藏匹配的评论
## 工作原理
FilterTube 在不需要的内容出现在你屏幕上**之前**就将其过滤掉,为你提供干净的 YouTube 体验。
在底层,FilterTube 还维护轻量级的身份缓存:
- `channelMap`:`@handle` / `c/
` / `user/` ↔ `UC...`
- `videoChannelMap`:`videoId` → `UC...`
在 **YouTube 主站** 和 **YouTube Kids** 上,FilterTube 通常可以通过收集 YouTube 已加载的相同 JSON 负载(特别是 `ytInitialPlayerResponse` 和 `/youtubei/v1/player`)中的所属数据,来学习规范频道 ID **而无需额外的页面请求**。一旦学会,Shorts 和观看页面就能在下次遇到时立即解析身份。
```
┌─────────────────────────────────────────────────────────────┐
│ YouTube loads video data │
│ ↓ │
│ FilterTube intercepts the data BEFORE it renders │
│ ↓ │
│ Checks against your keywords & channels │
│ ↓ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Matches your │ → HIDDEN │ Doesn't match│ → SHOWN │
│ │ filters │ │ your filters │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ Result: Clean YouTube feed with only content you want │
└─────────────────────────────────────────────────────────────┘
```
### FilterTube 有何不同
**闪电般快速** - 在 YouTube 渲染内容之前就进行过滤,因此你永远看不到不需要的视频在屏幕上闪烁。
**100% 私密** - 一切都在你的浏览器中发生。没有数据发送到外部服务器。
**全面** - 在所有 YouTube 页面上过滤视频、Shorts、播放列表、频道、评论等。
**可靠** - 使用双层系统:首先拦截 YouTube 的数据,然后监控页面作为备份。
### 未来功能(即将推出)
- **语义 ML 过滤(未来)**:保留用于运行时支持实现后的本地、可解释的匹配;当前版本强制执行明确的关键词、频道、白名单规则和内容控制。
- **儿童模式**:PIN 保护的安全环境,仅允许白名单频道。
- **智能同步**:自动链接频道 @handle 和 ID 以实现更好的屏蔽。
## 隐私与权限
我们信奉隐私始于设计。
* **存储**:用于在本地保存你的设置。
* **活动标签页**:用于扫描你正在观看的 YouTube 页面。
* **无外部请求**:FilterTube 不会与 YouTube(为你请求的内容)以外的任何服务器通信。
## 🎬 Shorts 屏蔽体验
FilterTube 为 YouTube Shorts 使用了强大的混合屏蔽机制。
**当前行为 (v3.1.8):** Shorts 屏蔽通常是**近乎即时**的,因为 FilterTube 从拦截的 YouTube JSON 中学习 `videoId → UC...` 映射并持久化它们。这使得 Shorts 在主页/搜索页面上的行为更像常规视频。
```
[User Clicks "Block"]
|
v
+-------------------------------+
| 1. Resolve UC ID (fast path) |
| - DOM /channel/UC... OR |
| - videoChannelMap cache OR |
| - Main-world JSON harvest |
+-------------------------------+
|
v
+-----------------------+
| 2. Block & Hide |
+-----------------------+
```
- **强大验证**:只要可能,我们就会解析到规范的 `UC...` 频道 ID,以便屏蔽应用于 Shorts + 长视频 + 帖子。
- **零泄露**:通过解析规范 ID,我们确保屏蔽一个 Short 也会屏蔽该频道的长视频和帖子。
- **智能布局**:自动调整网格,防止出现尴尬的空白区域。
## 支持
发现错误或有功能请求?[在 GitHub 上提交 issue](https://github.com/varshneydevansh/FilterTube/issues)。
## 许可证
本项目根据 MIT 许可证授权 - 详情请见 LICENSE 文件。
## 更新日志
有关更改和改进的详细历史记录,请参阅 [CHANGELOG.md](CHANGELOG.md)。
### 为什么选择 FilterTube?
YouTube 的推荐算法有时会推荐不需要的内容。FilterTube 让你掌控信息流中出现的内容,提供更专注、更愉快的观看体验,没有干扰或不需要的内容。
**这一切都始于 Google 支持论坛上的这个帖子:**
当一位家长说他无助,他的孩子因为 YouTube Kids 上的内容而哭闹尖叫,并问我能否创建一个通过关键词或标签来屏蔽视频的工具。
后来 YouTube 论坛管理员删除了我和其他家长的评论并锁定了帖子,我决定创建 FilterTube。
[https://support.google.com/youtubekids/thread/54509605/how-to-block-videos-by-keyword-or-tag?hl=en](https://support.google.com/youtubekids/thread/54509605/how-to-block-videos-by-keyword-or-tag?hl=en)
非常适合:
- **希望保护孩子免受不当内容影响的家长**
- **需要在研究时保持专注的学生**
- **任何想要无干扰 YouTube 体验的人**
## 面向开发者
### 从源代码构建
```
# 安装依赖项
npm install
# 为 Chrome/Edge/Brave/Opera 开发
npm run dev:chrome
# 为 Firefox 开发
npm run dev:firefox
# 构建发布包
npm run build # All browsers
npm run build:chrome # Chrome only
npm run build:firefox # Firefox only
```
有关详细的技术文档,请参阅 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) 和 [docs/TECHNICAL.md](docs/TECHNICAL.md)。
## 维护者说明:脚本布局
FilterTube 在 YouTube 上的两个 JavaScript 上下文中运行代码:
### 隔离世界(内容脚本:DOM + UI)
以下脚本作为内容脚本加载(权威加载顺序请参见 `manifest*.json`):
- `js/shared/identity.js` – 共享的频道身份辅助函数,作为 `window.FilterTubeIdentity` 暴露。
- `js/content/menu.js` – 菜单样式 + 菜单 DOM 辅助函数。
- `js/content/dom_helpers.js` – 回退逻辑使用的小型 DOM 辅助函数。
- `js/content/dom_extractors.js` – DOM 提取辅助函数(视频 ID、时长、卡片查找)。
- `js/content/dom_fallback.js` – DOM 回退过滤层。
- `js/content/block_channel.js` – 三点菜单观察者/入口点(检测下拉菜单 + 定位点击的卡片)。
- `js/content_bridge.js` – 设置同步、桥接消息传递、菜单渲染/点击处理和屏蔽编排。
### 主世界(页面上下文:数据拦截)
- `js/seed.js` – 用于 `ytInitialData`、`fetch` 和 XHR 的钩子/重写入口点。
- `js/injector.js` – 协调器 + 主世界搜索辅助函数(例如,`ytInitialData` 查找)。
- `js/filter_logic.js` – 在渲染前从 YouTube 的 JSON 中移除被屏蔽内容的过滤引擎。标签:Android, CMS安全, DSL, JavaScript, YouTube, 关键词过滤, 内容控制, 协作阻塞, 多模态安全, 数字健康, 数据可视化, 智能规则, 浏览器扩展, 短片过滤, 移动应用, 类别过滤, 网络安全, 自定义脚本, 视频过滤, 订阅管理, 评论过滤, 隐私保护, 频道管理