多源广告过滤规则的自动聚合引擎 — 抓取 · 去重 · 融合 · 分发,一气呵成
中文 | English
FilterFusion 是一个自动聚合和融合多源广告过滤规则的工具集。它帮你抓取主流规则源 → 去重合并 → 输出标准格式,彻底告别手动维护自定义规则列表。
| 对比维度 | 😰 手动维护 | ✨ FilterFusion |
|---|---|---|
| 多源聚合 | 逐个打开、复制粘贴 | 自动并发抓取 |
| 规则去重 | 肉眼比对、手动删除 | Unicode NFKC 算法自动去重 |
| 规则分类 | 手动整理 | 按 ABP 标准 7 级自动分类 |
| 持续更新 | 想起来才更新 | GitHub Actions 每日自动 |
| 分发部署 | 手动上传 | jsDelivr + GitHub Raw 多 CDN 分发 |
| 元数据统计 | 无 | 自动输出控制台摘要 |
| 🚀 极致性能 | 🎨 高度可定制 | ⚡ 一键自动化 | 🔄 双管道并行 |
|---|---|---|---|
| 异步并发 + 预编译正则,大规模规则秒级处理 | 自由配置规则源、模板和输出格式 | 一条命令完成抓取、合并、发布全流程 | AdBlock 浏览器拦截 + DNS 网络级拦截独立运行 |
💡 一句话总结:FilterFusion = 自动抓取 + 智能去重 + 标准输出 + 每日更新,让你专注规则质量,而不是重复劳动。
将对应链接导入你的广告拦截工具即可。每个地址为独立代码块,点击右上角复制按钮即可复制单个地址(推荐第一行 jsDelivr):
📱 移动端(Mobile)
https://cdn.jsdelivr.net/gh/Chaniug/FilterFusion@main/dist/adblock-mo.txt
https://raw.githubusercontent.com/Chaniug/FilterFusion/main/dist/adblock-mo.txt
https://gh.llkk.cc/https://raw.githubusercontent.com/Chaniug/FilterFusion/main/dist/adblock-mo.txt
🖥️ 电脑端(PC)
https://cdn.jsdelivr.net/gh/Chaniug/FilterFusion@main/dist/adblock-pc.txt
https://raw.githubusercontent.com/Chaniug/FilterFusion/main/dist/adblock-pc.txt
https://gh.llkk.cc/https://raw.githubusercontent.com/Chaniug/FilterFusion/main/dist/adblock-pc.txt
📌 三个地址依次为:jsDelivr CDN(中国大陆推荐)/ GitHub Raw(全球)/ gh.llkk.cc(备用)
https://cdn.jsdelivr.net/gh/Chaniug/FilterFusion@main/dist/dns-blocklist.txt
https://raw.githubusercontent.com/Chaniug/FilterFusion/main/dist/dns-blocklist.txt
https://gh.llkk.cc/https://raw.githubusercontent.com/Chaniug/FilterFusion/main/dist/dns-blocklist.txt
📌 三个地址依次为:jsDelivr CDN(中国大陆推荐)/ GitHub Raw(全球)/ gh.llkk.cc(备用)
如需反馈误拦截、漏拦截或希望补充的新规则,请前往我们的子项目 @Chaniug/AdSuper 提交规则 Issue,我们会及时处理!
| 项目 | 要求 |
|---|---|
| 🐍 Python | 3.14+ |
| 💻 操作系统 | Windows / macOS / Linux |
| 🌐 网络 | 需要互联网连接以抓取规则源 |
| 📦 依赖 | httpx[http2]>=0.27.0(仅此一个) |
# 检查 Python 版本
python --versiongit clone https://github.com/Chaniug/FilterFusion.git
cd FilterFusionpip install -r requirements.txt| 管道 | 抓取 | 合并去重 |
|---|---|---|
| 🟦 AdBlock (Mobile) | python scripts/fetch_rules.py |
python scripts/merge_rules.py --category mobile |
| 🟦 AdBlock (PC) | python scripts/fetch_rules.py |
python scripts/merge_rules.py --category pc |
| 🟪 DNS | python scripts/fetch_dns_rules.py |
python scripts/merge_dns_rules.py |
- 生成的规则文件位于
dist/目录 - 直接导入到支持自定义规则的广告拦截工具中
FilterFusion 的工作流程分为四个阶段,由两条独立管道并行运行。
点击查看详细工作流程图和技术细节
flowchart LR
subgraph PIPE["两条独立管道"]
direction TB
subgraph AD["AdBlock 管道"]
A1["📋 配置<br/>sources.yaml"] --> A2["⬇️ 抓取<br/>fetch_rules.py"]
A2 --> A3["🔀 合并<br/>merge_all.py → merge_custom<br/>按 custom_rules 配置驱动"]
A3 --> A4a["📤 输出<br/>adblock-mo.txt"]
A3 --> A4b["📤 输出<br/>adblock-pc.txt"]
A3 --> A4c["📤 输出<br/>自定义.txt"]
end
subgraph DNS["DNS 管道"]
D1["📋 配置<br/>dns_sources.yaml"] --> D2["⬇️ 抓取<br/>fetch_dns_rules.py"]
D2 --> D3["🔀 合并<br/>merge_dns_rules.py"]
D3 --> D4["📤 输出<br/>dns-blocklist.txt"]
end
end
A4a --> CDN["jsDelivr + GitHub Raw<br/>多 CDN 全球分发"]
A4b --> CDN
A4c --> CDN
D4 --> CDN
style AD fill:#ebf5ff,stroke:#2196f3
style DNS fill:#f3e5f5,stroke:#9c27b0
style CDN fill:#e8f5e9,stroke:#4caf50
规则格式: Adblock Plus(ABP)/ uBlock Origin / EasyList / 兼容 ABP 的格式均支持。
||example.com^ # 域名屏蔽
example.com##.ad-banner # 元素隐藏
@@||whitelist.com^$document # 白名单放行
合并引擎会自动将规则按以下 7 级分类标准整理:
| 级别 | 类型 | 示例 | 说明 |
|---|---|---|---|
| 🟢 1 | 通用域名屏蔽 | ||doubleclick.net^ |
拦截已知广告域名 |
| 🔵 2 | 第三方拦截 | ||adservice.google.com^$third-party |
仅拦截第三方请求的广告 |
| 🟡 3 | 元素隐藏 | example.com##.ad-banner |
隐藏页面中的广告元素 |
| 🟠 4 | 白名单 | @@||trusted.com^$document |
放行被误拦截的域名 |
| 🔴 5 | 正则规则 | /ads\.example\.com/ |
使用正则表达式匹配 |
| 🟣 6 | DNS 级别 | 0.0.0.0 ad.example.com |
网络层直接拦截 |
| ⚪ 7 | 其他/未分类 | — | 无法归类的特殊规则 |
编辑 config/sources.yaml(AdBlock)或 config/dns_sources.yaml(DNS),YAML 格式,GitHub 网页编辑有语法高亮。
点击查看详细配置说明和 YAML 示例
# config/sources.yaml — AdBlock 规则源
# category: mo(手机端) / pc(电脑端) / bo(两端共用,同 URL 只下载一次)
# 也兼容旧全称 mobile / pc / both;YAML 对大小写敏感,建议全小写
# 存在即启用,行首 # 注释即禁用
# 给源写说明:在某个源上方加一行 # 注释即可(脚本忽略,仅给人看)
sources:
# AdGuard 官方移动端过滤规则
- name: AdGuard Mobile
category: mo
url: https://raw.githubusercontent.com/.../filter.txt
id: m1
# AdGuard 中文广告过滤规则(两端共用)
- name: AdGuard Chinese
category: bo
url: https://raw.githubusercontent.com/.../filter.txt
id: b1
# 组合规则(custom_rules)— 按 ID 引用源,合并去重后输出到 dist/
# output : 输出文件名(保存到 dist/ 目录下,可自定义)
# sources : 引用上方 sources 里定义的 id 列表(按 id 引用源来组合产出文件)
# description : 可选,规则文件的描述文本(会写入输出文件开头作为注释,不填则自动生成)
custom_rules:
# 核心规则(文件名保持不变,订阅链接无需修改)
- output: adblock-mo.txt
description: FilterFusion - Ad blocking rules (Mobile)
sources: [m1, m2, m3, b1, b2]
- output: adblock-pc.txt
description: FilterFusion - Ad blocking rules (PC)
sources: [p1, b1, b2]
# 示例:新增自定义规则(取消注释即可启用)
# - output: exten.txt # 输出文件名(可自定义,如 my-rules.txt)
# description: 我的自定义规则 # 可选,不填则自动生成
# sources: [m1, b1] # 引用哪些源(填 id 列表),合并去重后输出到 exten.txt# config/dns_sources.yaml — DNS 规则源
sources:
- name: AdGuard DNS
url: https://raw.githubusercontent.com/.../filter.txt
# - name: HaGeZi DNS
# url: https://...配置说明:
-
AdBlock 源(
sources段):需name、category、url、id四个字段id是唯一短编号(如m1、b1、p1),被custom_rules引用category: bo的源同 URL 只下载一次,自动分发给 mo 和 pcmo=手机端 /pc=电脑端 /bo=两端共用(也兼容全称mobile/pc/both)
-
组合规则(
custom_rules段):定义所有 AdBlock 产出文件output:输出文件名(保存到dist/目录下,可自定义,如exten.txt、my-rules.txt)sources:引用sources里定义的id列表(如[m1, b1]表示合并m1和b1两个源)description:可选,规则文件的描述文本(会写入输出文件开头作为注释,不填则自动生成)- 新增自定义规则:取消注释示例行(第 253-255 行),修改
output、sources、description即可
-
DNS 源(
config/dns_sources.yaml):仅需name和url,不支持组合规则
python scripts/fetch_rules.py # 抓取所有 AdBlock 规则
python scripts/merge_rules.py --category mobile # 合并移动端规则
python scripts/merge_rules.py --category pc # 合并电脑端规则
python scripts/fetch_dns_rules.py # 抓取 DNS 规则
python scripts/fetch_dns_rules.py # DNS 规则异步并发下载所有源,验证格式并缓存到 scripts/。
python scripts/merge_rules.py # AdBlock 规则
python scripts/merge_dns_rules.py # DNS 规则自动分类 → NFKC 规范化去重 → 输出到 dist/。
AdBlock(uBlock Origin / AdGuard / Brave 等):打开扩展设置 → Filter lists → 粘贴订阅链接 → 导入。
DNS(AdGuard Home / Pi-hole / Clash 等):管理界面 → DNS blocklists → 添加订阅链接。
点击查看支持的工具列表
| 工具 | 平台 | AdBlock 规则 | DNS 规则 |
|---|---|---|---|
| uBlock Origin | 浏览器扩展 | ✅ | ❌ |
| AdGuard 浏览器扩展 | 浏览器扩展 | ✅ | ❌ |
| Brave 内置拦截 | 浏览器 | ✅ | ❌ |
| AdGuard Home | DNS 服务器 | ❌ | ✅ |
| Pi-hole | DNS 服务器 | ❌ | ✅ |
| AdGuard for Windows/Mac | 桌面客户端 | ✅ | ✅ |
| Clash / Sing-Box / Surge | 代理客户端 | ❌ | ✅ |
FilterFusion 的两条管道覆盖从浏览器到网络层的全链路过滤需求:
flowchart LR
subgraph S1["🎯 个人使用"]
P1["构建个人规则库"] --> P2["每日自动更新"]
end
subgraph S2["🏢 企业部署"]
E1["内网 DNS 拦截"] --> E2["统一分发到全设备"]
end
subgraph S3["👪 家长控制"]
F1["专用过滤规则"] --> F2["屏蔽不良内容"]
end
subgraph S4["🛠️ 工具集成"]
D1["API 获取规则"] --> D2["嵌入自有产品"]
end
style S1 fill:#e3f2fd,stroke:#1976d2
style S2 fill:#e8f5e9,stroke:#388e3c
style S3 fill:#fff3e0,stroke:#f57c00
style S4 fill:#fce4ec,stroke:#c62828
点击查看常见问题解答(共 7 个)
项目的 GitHub Actions 每日自动运行抓取和合并流程,dist/ 下的规则文件始终保持最新。如果你本地使用,建议每天或每周执行一次脚本。
编辑 config/sources.yaml(AdBlock)或 config/dns_sources.yaml(DNS),YAML 格式:
# AdBlock 源(需 name / category / url / id)
sources:
- name: 你的规则名
category: mo # mo=手机端 / pc=电脑端 / bo=两端共用(也兼容全称)
url: https://example.com/filter.txt
id: m1
# - name: 不需要的源
# category: mo
# url: https://example.com/other.txt (行首 # 注释即禁用)
# id: m2规则源 URL 必须返回可直链访问的纯文本规则文件(ABP/uBlock/AdGuard 格式)。
支持 Adblock Plus(ABP)、uBlock Origin、EasyList 等兼容格式。
规则导入后不生效的常见原因:格式不兼容、工具对规则数量有限制、缓存未刷新。大多数工具支持多个规则列表同时使用——建议保留官方规则为基础,添加 FilterFusion 作为补充。
| 文件 | 类型 | 说明 |
|---|---|---|
dist/adblock-mo.txt |
AdBlock | 移动端合并规则,订阅推荐用此链接 |
dist/adblock-pc.txt |
AdBlock | PC 端合并规则 |
dist/dns-blocklist.txt |
DNS | 最新合并 DNS 规则,订阅推荐用此链接 |
文件大小通常 2–5 MB(取决于规则源数量),现代浏览器和 DNS 工具均可轻松处理。建议定期检查文件大小,移除不需要的源。
前往 AdSuper 项目 提交 Issue,描述具体网址和拦截情况,我们会及时处理并更新规则。
因为 GitHub Actions 默认的 GITHUB_TOKEN 触发的推送不会触发其他工作流(包括 Pages 部署)。为了让规则文件更新后自动重新部署 GitHub Pages,daily-update.yaml 使用 Personal Access Token(PAT)进行检出和推送(PAT 触发的推送会触发后续工作流)。
如果你要 Fork 本项目自行部署,需要在仓库 Settings → Secrets and variables → Actions 中创建名为 PAT 的 Secret,并确保该 Token 至少拥有当前仓库的 contents:write 权限。
- 通过 Issue 反馈问题和建议
- 提交 Pull Request 贡献代码
- 在 Discussions 区分享想法
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT License 开源协议。允许自由使用、修改、分发(含商业用途),仅需保留原始许可证和版权声明。详见 LICENSE 文件。
- GitHub: @Chaniug
- Issues: FilterFusion Issues
- Discussions: FilterFusion Discussions
喜欢这个项目?请点个 Star ⭐ 来支持我们!
