关于 blackout
Blackout 是面向敏感文档处理的 PDF 涂黑工具,提供浏览器应用、命令行和 MCP 服务。它会将涂黑页面栅格化,并验证导出的 PDF 不含可提取文本;处理过程留在设备本地。
主要功能
- 01检测常见敏感信息
- 02搜索自定义词语
- 03手动绘制涂黑框
- 04栅格化并烧录涂黑内容
- 05验证导出 PDF 已移除文本
- 06提供浏览器、命令行和 MCP 版本
适用场景
- 01移除文件中的个人信息
- 02涂黑 PDF 中的自定义词语
- 03检查涂黑后的 PDF 是否仍有文本
MCP 相关
MCP 服务提供 `redact_pdf` 和 `check_pdf` 工具。它在本地运行,不进行网络调用,并在返回结果前验证输出文件。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 此机器上 PDF 文件的绝对路径。 |
| terms | array | 否 | 要进行涂黑的字面字符串,无论大小写,只要出现都会匹配——姓名、案件编号、地址。用于内置检测器无法覆盖的内容。 |
| detect | array | 否 | 要查找的敏感数据类别。检测器 ID:ssn、card、email、phone。省略时扫描所有类别;如果提供了 `terms`,则省略后仅匹配这些词条。 |
详细介绍
Blackout
真正的 PDF 涂黑,完全在浏览器中完成。
blackout.thrain.ai
Blackout 可以在 PDF 中查找社会安全号码、电子邮件地址、电话号码和银行卡号, 让你搜索自定义词语或手动绘制方框,并导出扁平化 PDF,其中涂黑的文本 确实已被移除,而不是被矩形遮住。
它基于同一个引擎运行于三个场景:浏览器应用、CLI 和 MCP 服务。
npx @thrain/blackout redact filing.pdf --detect ssn,email --out clean.pdf
工作原理
- 所有内容都留在你的设备上。 渲染(pdf.js)、检测和导出 (pdf-lib)都在客户端运行。加载页面后断开网络,仍然可以使用。
- 涂黑是真正有效的。 导出时会将每页栅格化,并将方框烧录到 像素中,然后根据这些图像重建 PDF。原始文本层会被丢弃,因此无法通过复制粘贴或 文本提取恢复任何内容。
开发
npm install
npm install
npm run dev # local dev server
npm run build # type-check + production build to dist/
npm run build:agent # type-check + bundle the CLI and MCP server to packages/
npm run smoke # headless browser end-to-end test
npm run smoke:cli # CLI end-to-end test
npm run smoke:mcp # MCP server end-to-end test
npm run smoke:agent-dist # the same two, against the built bundles
node scripts/make-test-pdf.mjs out.pdf 12 # fixture with fake PII
node scripts/test-worker.mjs # license worker tests
node scripts/visual-check.mjs [test.pdf] [outdir] # screenshot spot-check
浏览器冒烟测试脚本需要 Chrome/Chromium 二进制文件;如果你的二进制文件不在
Playwright 默认缓存位置,请设置 CHROME_BIN。每项冒烟测试都会进行
同一项核心断言——导出的 PDF 中没有可提取文本——因为这项断言就是产品的核心,
而且所有正式发布的路径都必须满足该断言,不只是容易检查的那条路径。
架构
- 引擎(
src/pdf/)——检测、标记排序和栅格化并烧录的 导出功能。与平台无关:它与外部世界唯一的交互是通过src/pdf/platform.ts,由其提供 canvas。src/platform/browser.ts使用 DOM canvas,src/platform/node.ts使用 Skia。涂黑功能只有一种实现, 因此浏览器和 CLI 不会出现行为偏差。 - 网站——静态 React 应用,每次向
main推送代码时,都会通过.github/workflows/deploy.yml部署到 GitHub Pages。 - CLI 和 MCP 服务(
src/agent/)——基于引擎的轻量非交互式封装, 打包到packages/blackout和packages/blackout-mcp。 - 许可证 Worker(
worker/)——Cloudflare Worker,用于验证 Stripe 结账会话并生成签名许可证令牌;应用使用内嵌的公钥进行验证。通过.github/workflows/deploy-worker.yml部署。
面向 Agent
如果要求 Agent 为 PDF 涂黑,它可能会编写脚本,在文本上绘制一个黑色 矩形,但底层文本仍可选中。为让“涂黑此 PDF”能够对应到正确完成这项工作的工具, 提供了两种形式:
- CLI —
packages/blackout·npx @thrain/blackout redact in.pdf - MCP 服务 —
packages/blackout-mcp· 工具redact_pdf、check_pdf
两者都会在返回结果前验证自身输出:从刚写入的文件中重新提取文本,如果文档仍有 文本层,就会报错,而不会交付该文档。两者都不会发起网络请求,包括许可证检查, 因此任何内容都不会离开本机。
许可证
Apache-2.0 © Thrain LLC。“Blackout”名称和徽标是 Thrain LLC 的商标(参见 NOTICE)——欢迎自由分叉,但发布分叉版本时 请使用你自己的名称。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。