ClipboardOnly 是一个常驻菜单栏的 macOS 应用。它通过把系统的截图保存目录
重定向到一个私有拦截目录(~/.clipboard_only/intercept),监听该目录的文件事件,
在截图落盘的瞬间把图片读入内存并写进剪贴板——从而让 ⌘⇧4 / ⌘⇧3
截图后无需打开任何文件即可直接 ⌘V 粘贴。
在此基础上叠加了三层增值能力:OCR 文字识别(Vision 框架)、 隐私脱敏(识别并遮挡 API Key / 邮箱 / 手机号 / 身份证 / 信用卡 / IP / 密码)、 以及面向多模态大模型的 图片瘦身(长边压到 1568px,经济模式压到 512px)。
拦截 screencapture 输出,截图完成即可直接粘贴,不留桌面文件。
基于 Vision 的中英文识别,识别结果可一键复制;浮动面板提供手动触发。
七类敏感信息检测,可逐项开关,对 OCR 文本和图片像素双重遮挡。
把图片长边压到模型实际使用的尺寸,最高省约 89% 视觉 token。
可选把剪贴板图片落到磁盘缓存,终端里 ⌘V 得到绝对路径。
一键把当前剪贴板内容发送到指定的 Obsidian vault。
| 文件 | 符号数 | 职责 |
|---|---|---|
| ClipboardOnlyApp.swift | 9 | 应用入口,NSApplicationDelegate 生命周期 |
| MenuBarController.swift | 111 | 核心控制器:菜单栏、拦截、剪贴板、OCR、流程编排 |
| ScreenshotWatcher.swift | 7 | FSEvents 监听拦截目录,文件稳定后回调 |
| PrivacyFilter.swift | 14 | PrivacyFilterType 枚举 + 文本敏感信息脱敏 |
| ImagePrivacyMasker.swift | 15 | 在图片像素层面遮挡敏感区域 |
| ClipboardImageCache.swift | 5 | 「粘贴为路径」模式的磁盘缓存读写/清理 |
| AppMenuView.swift | 4 | SwiftUI 菜单视图组件 |
| L10n.swift | 21 | 本地化字符串(含 21 个键,简中 / 英) |
MenuBarController 读取并备份 com.apple.screencapture 的原始 location/target,把保存目录改写到拦截目录。ScreenshotWatcher 通过 FSEvents 监听拦截目录,文件写入稳定后调用 handleNewFile。loadedScreenshotImage 把 PNG 解码为 CGImage;图片解码完成即调用 showManualOCRPanel 弹出浮动缩略图(早于完整管线,降低感知延迟)。ImagePrivacyMasker 在全分辨率图上遮挡敏感区域,保证 OCR 精度不受压缩影响。writeImageToClipboard 按 llmMaxLongEdge(1568 / 经济模式 512)缩放,编码 PNG 写入剪贴板,并提交真实 changeCount。performOCR 用 Vision 异步识别中英文;自动模式直接出结果,手动模式由浮动面板按钮触发。pendingDotfileBaseNames FIFO 识别该 rename 事件并静默删除,避免重复跑管线。PrivacyFilterType 枚举(PrivacyFilter.swift:32)支持逐项开关:
MenuBarController 全程主线程隔离,OCR / 图片编码下放到后台队列。
各开关写入 UserDefaults;启动时智能恢复被改写的 screencapture 偏好。
若检测到 location 仍指向拦截目录,说明上次未正常退出,回退到自存副本。
浮动面板与完整管线解耦,缩略图在解码后约 0.8s 即出现。