https://github.com/chaniug/filterfusion
⚡ 多源广告过滤规则聚合引擎:HTTP/2 异步并发抓取、NFKC 智能去重、ABP/uBlock/AdGuard 全格式兼容、AdBlock & DNS 双模输出,GitHub Actions 每日全自动更新!
https://github.com/chaniug/filterfusion
adblock-plus adblocker adguard adguard-list aiblocks easylist ublock-origin-filters
Last synced: 22 days ago
JSON representation
⚡ 多源广告过滤规则聚合引擎:HTTP/2 异步并发抓取、NFKC 智能去重、ABP/uBlock/AdGuard 全格式兼容、AdBlock & DNS 双模输出,GitHub Actions 每日全自动更新!
- Host: GitHub
- URL: https://github.com/chaniug/filterfusion
- Owner: Chaniug
- License: mit
- Created: 2025-06-05T02:29:34.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-06-22T00:50:17.000Z (29 days ago)
- Last Synced: 2026-06-22T02:28:47.853Z (28 days ago)
- Topics: adblock-plus, adblocker, adguard, adguard-list, aiblocks, easylist, ublock-origin-filters
- Language: Python
- Homepage: https://github.com/Chaniug/FilterFusion
- Size: 22.8 MB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

FilterFusion
多源广告过滤规则的自动聚合引擎 — 抓取 · 去重 · 融合 · 分发,一气呵成
**中文** | **[English](./README_EN.md)**
---
## 目录
- [关于](#关于)
- [规则订阅地址](#规则订阅地址)
- [系统要求](#系统要求)
- [快速开始](#快速开始)
- [工作原理](#工作原理)
- [使用指南](#使用指南)
- [应用场景](#应用场景)
- [常见问题](#常见问题)
- [如何参与](#如何参与)
- [许可证](#许可证)
- [联系方式](#联系方式)
## 关于
FilterFusion 是一个自动聚合和融合多源广告过滤规则的工具集。它帮你**抓取主流规则源 → 去重合并 → 输出标准格式**,彻底告别手动维护自定义规则列表。
| 对比维度 | 手动维护 | FilterFusion |
|---------|---------|-------------|
| 多源聚合 | 逐个打开、复制粘贴 | 自动并发抓取 |
| 规则去重 | 肉眼比对、手动删除 | Unicode NFKC 算法自动去重 |
| 规则分类 | 手动整理 | 按 ABP 标准 7 级自动分类 |
| 持续更新 | 想起来才更新 | GitHub Actions 每日自动 |
| 分发部署 | 手动上传 | jsDelivr + GitHub Raw 多 CDN 分发 |
| 元数据统计 | 无 | 自动输出控制台摘要 |
### 核心亮点
- **极致性能** — 异步并发 + 预编译正则,大规模规则秒级处理
- **高度可定制** — 自由配置规则源、模板和输出格式
- **一键自动化** — 一条命令完成抓取、合并、发布全流程
- **双管道并行** — AdBlock 浏览器拦截 + DNS 网络级拦截独立运行
## 规则订阅地址
将对应链接导入你的广告拦截工具即可。**每个代码块内 3 行为同一规则的不同 CDN 源,任选其一复制即可**(推荐第一行 jsDelivr):
### 🟦 AdBlock 规则(浏览器广告拦截)
**📱 移动端(Mobile)**
```text
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)**
```text
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(备用)
### 🟪 DNS 过滤规则(网络级广告拦截)
```text
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**](https://github.com/Chaniug/AdSuper) 提交规则 Issue,我们会及时处理!
---
## 系统要求
### 最低配置
| 项目 | 要求 |
|------|------|
| 🐍 **Python** | 3.14+ |
| 💻 **操作系统** | Windows / macOS / Linux |
| 🌐 **网络** | 需要互联网连接以抓取规则源 |
| 📦 **依赖** | `httpx[http2]>=0.27.0`(仅此一个) |
```bash
# 检查 Python 版本
python --version
```
## 快速开始
### 1. 克隆项目
```bash
git clone https://github.com/Chaniug/FilterFusion.git
cd FilterFusion
```
### 2. 安装依赖
```bash
pip install -r requirements.txt
```
### 3. 抓取并合并规则
| 管道 | 抓取 | 合并去重 |
|------|------|---------|
| 🟦 **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` |
### 4. 使用生成的规则
- 生成的规则文件位于 `dist/` 目录
- 直接导入到支持自定义规则的广告拦截工具中
---
## 工作原理
FilterFusion 的工作流程分为四个阶段,由两条独立管道并行运行:
```mermaid
flowchart LR
subgraph PIPE["两条独立管道"]
direction TB
subgraph AD["AdBlock 管道"]
A1["📋 配置
sources.yaml"] --> A2["⬇️ 抓取
fetch_rules.py"]
A2 --> A3["🔀 合并
merge_all.py → merge_custom
按 custom_rules 配置驱动"]
A3 --> A4a["📤 输出
adblock-mo.txt"]
A3 --> A4b["📤 输出
adblock-pc.txt"]
A3 --> A4c["📤 输出
自定义.txt"]
end
subgraph DNS["DNS 管道"]
D1["📋 配置
dns_sources.yaml"] --> D2["⬇️ 抓取
fetch_dns_rules.py"]
D2 --> D3["🔀 合并
merge_dns_rules.py"]
D3 --> D4["📤 输出
dns-blocklist.txt"]
end
end
A4a --> CDN["jsDelivr + GitHub Raw
多 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
# 组合规则 — 按 ID 引用源,合并去重后输出到 dist/
# 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
# sources: [m1, b1]
```
```yaml
# config/dns_sources.yaml — DNS 规则源
sources:
- name: AdGuard DNS
url: https://raw.githubusercontent.com/.../filter.txt
# - name: HaGeZi DNS
# url: https://...
```
- AdBlock 源需 `name`、`category`、`url`、`id` 四个字段(`id` 是唯一短编号,被组合规则引用)
- `category: bo` 的源同 URL 只下载一次,自动分发给 mo 和 pc(`mo`=手机端 / `pc`=电脑端 / `bo`=两端共用,也兼容全称 mobile/pc/both)
- `custom_rules` 段定义所有 AdBlock 产出文件(含核心的 `adblock-mo.txt` / `adblock-pc.txt`),按 ID 引用已抓取的源,`description` 字段可选
- DNS 源仅需 `name` 和 `url`,不支持组合规则
### **抓取规则**
```bash
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/`。
### **合并去重**
```bash
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 的两条管道覆盖从浏览器到网络层的全链路过滤需求:
```mermaid
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
```
## 常见问题
### Q1: 多久更新一次规则?
项目的 GitHub Actions 每日自动运行抓取和合并流程,`dist/` 下的规则文件始终保持最新。如果你本地使用,建议每天或每周执行一次脚本。
### Q2: 如何自定义规则源?
编辑 `config/sources.yaml`(AdBlock)或 `config/dns_sources.yaml`(DNS),YAML 格式:
```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 格式)。
### Q3: 支持哪些格式?不生效怎么办?
支持 Adblock Plus(ABP)、uBlock Origin、EasyList 等兼容格式。
规则导入后不生效的常见原因:格式不兼容、工具对规则数量有限制、缓存未刷新。大多数工具支持多个规则列表同时使用——建议保留官方规则为基础,添加 FilterFusion 作为补充。
### Q4: 生成的规则文件在哪里?
| 文件 | 类型 | 说明 |
|------|:---:|------|
| `dist/adblock-mo.txt` | AdBlock | 移动端合并规则,**订阅推荐用此链接** |
| `dist/adblock-pc.txt` | AdBlock | PC 端合并规则 |
| `dist/dns-blocklist.txt` | DNS | 最新合并 DNS 规则,**订阅推荐用此链接** |
### Q5: 规则文件多大?性能如何?
文件大小通常 2–5 MB(取决于规则源数量),现代浏览器和 DNS 工具均可轻松处理。建议定期检查文件大小,移除不需要的源。
### Q6: 发现误拦截或漏拦截怎么办?
前往 [AdSuper 项目](https://github.com/Chaniug/AdSuper) 提交 Issue,描述具体网址和拦截情况,我们会及时处理并更新规则。
### Q7: 为什么每日更新工作流使用 `secrets.PAT`?
因为 GitHub Actions 默认的 `GITHUB_TOKEN` 触发的推送**不会触发其他工作流**(包括 Pages 部署)。为了让 `.github/workflows/static.yml` 在规则文件更新后自动重新部署 GitHub Pages,`daily-update.yaml` 使用 Personal Access Token(PAT)进行检出和推送。
如果你要 Fork 本项目自行部署,需要在仓库 **Settings → Secrets and variables → Actions** 中创建名为 `PAT` 的 Secret,并确保该 Token 至少拥有当前仓库的 `contents:write` 权限。
---
## 如何参与
[](https://github.com/Ashutosh00710/github-readme-activity-graph)
### 支持项目
- 点亮 [Star](https://github.com/Chaniug/FilterFusion/stargazers) 支持项目
- [Fork](https://github.com/Chaniug/FilterFusion/fork) 项目参与开发
- 分享给更多人使用
### 参与开发
- 通过 [Issue](https://github.com/Chaniug/FilterFusion/issues) 反馈问题和建议
- 提交 [Pull Request](https://github.com/Chaniug/FilterFusion/pulls) 贡献代码
- 在 [Discussions](https://github.com/Chaniug/FilterFusion/discussions) 区分享想法
### 贡献流程
1. Fork 本项目
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request
## 许可证
本项目采用 **MIT License** 开源协议。允许自由使用、修改、分发(含商业用途),仅需保留原始许可证和版权声明。详见 [LICENSE](./LICENSE) 文件。
## 联系方式
- **GitHub**: [@Chaniug](https://github.com/Chaniug)
- **Issues**: [FilterFusion Issues](https://github.com/Chaniug/FilterFusion/issues)
- **Discussions**: [FilterFusion Discussions](https://github.com/Chaniug/FilterFusion/discussions)
---
喜欢这个项目?请点个 Star ⭐ 来支持我们!