开源一个自用的 macOS 截图工具 - V2EX
skyrin

开源一个自用的 macOS 截图工具

  •  
  •   skyrin 2 days ago 415 iews

    一个常驻菜单栏的小工具,双击 截图、标注、长截、美化、OCR 、翻译、上传图床纯 AppKit 、零依赖、零订阅、零遥测。


    起因:我受够了在多个 App 之间来回切

    做内容、写文档、VibeCoding 的时候,截图是高频动作。macOS 自带的截图功能不全,微信截图够用吧但是每次得把微信开着才能用,其它的截图工具如 pixpin 、Snipaste 也都用过,感觉功能太重了,很多用不上,而且图床上传又得开一个 App 。

    于是直接,我把它做成了一个叫 capcap 的菜单栏 App 。

    只做一件事:双击 截图,到剪贴板里出来一张已经标好注、可以直接粘出去的图。很自然的支持直接在编辑栏里上传到图床,并且把 url 自动复制到剪贴板。

    capcap 编辑器主界面

    GitHub:realskyrin/capcap,MIT 协议,免费开源。


    一个快捷键,从截图到可分享,就一步

    capcap 的核心交互只有一个:**在任何 App 里双击 **。这个灵感来自于 Claude App ,它可以在任意 App 里双击 直接把图送进会话窗口。

    如果你不喜欢双击 ,也可以在设置里录一个自己的全局快捷键。而且不只是触发截图编辑剪贴板里的图、钉图、保存到剪贴板、保存到文件,每个动作都能独立录一个快捷键,冲突会被拒掉,避免互相打架。

    触发之后会进入选区模式:

    • 悬停任意窗口 → 自动识别窗口边界,点一下就贴边截取;
    • 拖一个区域 → 像素级精准,Retina 原生分辨率;
    • 多显示器 → 所有屏幕同时进入选区状态,拖到哪截到哪。

    智能窗口识别绿色虚线自动贴合应用窗口边缘

    不需要凭眼力对齐窗口边把鼠标移到窗口上,绿色虚线就贴上去了,按一下完事。

    顺手补一句:直接截窗口出来的图会带上真实的窗口透明度 + 圆角 + 轻量阴影,省去后面再去 PS 描边描阴影的活儿。


    真正能"二次编辑"的标注,不是一次性 mark

    很多截图工具的标注其实是一次性栅格化画完一个箭头之后,想挪一下、改个颜色,只能撤销重画。

    capcap 的标注都是对象化的,全程可改:

    • 箭头:放完之后还能拖端点、把直箭头掰成曲线;
    • 直线:可拖端点、可旋转,画对齐线、连接线都顺手;
    • 序号标注:自动递增的数字圆点,拖出来可以带一根引线;
    • 文字:双击直接改文案,10100 pt 字号、颜色随便切;
    • 矩形 / 椭圆 / 画笔 / 高亮笔:颜色和线宽都能事后改;
    • 马赛克:现在是一块可拖拽、可缩放的矩形拖出来再调位置和大小,块大小也能事后改,比"刷过去回不来"舒服多了;
    • 撤销 / 重做:和文档编辑器一样自然。

    选中已有标注后,还会出现旋转手柄、端点手柄、曲线手柄。意思就是截完图不满意,不用全部重来


    工具栏自己排:哪个常用、哪个塞旁边,自己说了算

    每个人用顺手的标注工具都不一样有人天天画箭头,有人主要用马赛克和文字,序号、画笔可能根本用不上。

    设置里多了一个 工具栏 面板,按住拖一下就能把工具放进主工具栏、侧边栏、或者藏起来。主工具栏放最常用的,侧边栏放偶尔用的,剩下的折叠掉,编辑器看起来干干净净

    工具栏改完是自动应用的,不用再点保存拖完关掉设置就行


    长截图:自动滚动,边滚边拼

    写文档时经常要截一整页表格、一整段聊天记录。capcap 内置长截图,这一块在最近一次更新里被重做过一次:

    1. 框出要滚动的区域;
    2. 剩下的交给 capcap自动匀速往下滚 + 实时拼接长截图:边滚边拼,右侧实时预览拼接结果
    3. 右侧实时预览,差不多了按一下就收尾;
    4. 还可以进入 fit-to-screen 裁切模式,跟随光标的放大镜帮你把头尾对齐到像素;
    5. 拼好的长图直接回到主编辑器,继续标注

    自动滚动期间手动滚轮会被锁住,免得触控板碰一下就把节奏打乱。


    美化模式:随手做出"看上去像样"的成图

    写公众号、做 Twitter 配图的时候,光秃秃的截图总差点意思。capcap 内置一个轻量美化模式:

    • 渐变背景 / 桌面壁纸背景;
    • 圆角;
    • 柔和阴影(可关闭,也可以零内边距出图);
    • 可调内边距。

    美化模式:壁纸背景 + 圆角 + 阴影,一键出"看上去像样"的成图

    不用打开 PS ,也不用上一堆"截图美化"网站在编辑器里一个 tab 就切过去了。


    OCR + AI 翻译:图里的字,抠出来再顺手翻一下

    这是最近做出来的最大一块新功能,也是我自己用得最爽的。

    以前看到一张图里有想要的文字一段报错、一条命令、一张外文截图只能对着屏幕手敲。现在 capcap 内置了 OCR 文字识别:截完图框一下,里面的文字就被抠出来,一键复制走。OCR 走的是系统 Vision 框架,完全本地识别,不联网、不上云。

    更进一步还接了 AI 翻译:识别完直接翻译,看英文文档、读外文界面、对照报错信息都顺手。

    OCR 识别 + AI 翻译

    翻译走 BYOK ( Bring Your Own Key )用你自己的 API Key ,模型和服务商自己选。不绑定任何一家、不经过我的服务器,你的额度你做主。配置填完点保存,capcap 会当场帮你测一次连通性,配没配对一眼就知道,不用等到真要翻译时才发现配错了。

    BYOK 翻译配置


    顺手做的几件小事,反而是日常用得最多的

    很多功能不是 README 第一屏的重点,但用起来非常顺手:

    直接编辑 Finder / 剪贴板里的图片 在桌面/Finder 中点选一张图片,按下截图快捷键,capcap 跳过截图直接把它载入编辑器,原文件不动。或者剪贴板里有图(从网页、聊天窗口拷的都行),按一下编辑剪贴板的快捷键,也是一秒进编辑器。

    也就是说,capcap 不只是"截图工具",它也是一个随叫随到的图片标注台手上有图就能改,不一定非得现截。

    钉图:单张能钉,多张也能一次性都钉上 把当前截图作为一个浮动窗口钉在所有 App 之上做对照参考抄设计稿、对比改版的时候特别有用。这次又升级了几下:

    • 钉图窗口支持缩放控件,对照设计稿时方便对比尺寸;
    • 历史里多张图,也能一次性全部钉出来
    • 钉当前图、钉剪贴板图、钉 Finder 选中的图,各有独立的快捷键。

    菜单栏历史,一键复用 最近的截图缩略图和取色记录都在菜单栏,再次复制只需要一次点击。** + 点击** 可以直接复制成 Markdown 格式的图床链接,写文档一贴就是 ![](url)。完全本地存储(~/Library/Application Support/capcap/History),数量可配置 520 张。

    菜单栏历史子菜单显示截图缩略图和取色记录

    取色器 调用 macOS 原生取色器,吸到的颜色 #RRGGBB 直接进剪贴板,也写进历史记录。

    应用内自动更新 有新版本会自己提示,可以一键下载、安装,全程进度可见。某个版本暂时不想升,可以跳过它,不会反复来烦你。

    多语言界面 内置 中文 / 英文 / 日文 / 韩文 / 俄文 / 法文 六种语言,跟随系统自动切换,不用单独设置。

    关于页 + 错误日志 设置里有一个"关于"页,版本信息、开源信息、Star on GitHub 、提需求和报 bug 的入口都在这儿。万一 capcap 哪天抽风了,关于页里能直接展开错误日志,不用去翻系统目录,反馈问题的时候顺手就能贴给我


    一键上传到你自己的图床

    这是我个人最离不开的功能。配置一次之后,编辑器里的上传按钮会被点亮:

    目前支持 5 家对象存储,国内外都能照顾到:

    • 腾讯云 COS
    • 七牛云 Kodo
    • 阿里云 OSS
    • Amazon S3
    • Cloudflare R2(免出口流量费,做图床很合适)

    点一下上传按钮,公网 URL 会直接写到剪贴板,同时和缩略图一起进历史。还可以打开"复制为 Markdown 链接"的开关,上传完直接得到 ![](url) 格式,写文档贴出去就可以

    密钥只保存在本机的 UserDefaults 里,不走任何中间服务器。 这不是一个"capcap 图床",是你自己的图床出问题、被封号、想搬家,都是你自己的事;同样,安全和隐私也只取决于你自己。

    顺便说一句:你现在看到的这篇文章里的所有图片,就是用 capcap 的「上传到阿里云 OSS 」功能传上去的。


    技术上有意思的几个选择

    如果你也是 macOS 开发者,可能会对这几个选择感兴趣:

    • 纯 AppKit ,没有 SwiftUI。理由很简单:要的是"像 macOS 该有的样子"精确的窗口控制、流畅的命中测试、可预测的事件循环。SwiftUI 在 14.0 上还做不到这些。
    • 零第三方依赖Package.swift 里只有标准库和系统框架。结果就是包体很小、启动很快、维护成本低。
    • ScreenCaptureKit 做屏幕捕获,Retina 原生分辨率。
    • Carbon Hotkey API 注册自定义全局快捷键( macOS 至今没给出更现代的 API )

    要求 macOS 14.0+,universal binary ,Apple Silicon + Intel 都能跑。


    安装:两种方式

    方式一:Homebrew

    brew tap realskyrin/capcap https://github.com/realskyrin/capcap brew install --cask capcap 

    (仓库名是 capcap 不是 homebrew-capcap,所以要显式指定 URL )

    方式二:直接下载

    去 GitHub Release 页面下载最新的 DMG ,拖进 Applications 就行。

    如果遇到 "Apple 无法验证 capcap 是否包含恶意软件" 的提示,是因为还没做 Apple 公证(一年 99 刀我暂时不想交),可以:

    xatr -dr com.apple.quarantine /Applications/capcap.app 

    只对你信任的来源做这个操作就好。

    装完之后,后面的新版本直接靠 App 内的"检查更新"就能搞定,不用再走一遍。


    写在最后

    capcap 是我"自己每天在用的工具"这意味着:

    1. 我不会塞一堆没人用的功能进来;
    2. 但凡有 bug ,我比你更先发现;
    3. 它不会收一分钱,也没有任何遥测和数据上报。

    如果你也受够了在三四个截图/标注/图床 App 之间来回切,欢迎试试看。GitHub 上点个 Star 是对我最大的鼓励:

    https://github.com/realskyrin/capcap

    有任何想法、bug 、想要的功能,issue 区见

    6 replies    2026-05-23 22:10:20 +08:00
    83f420984
        1
    83f420984  
       2 days ago
    下载试用了,感觉不错
    ahu
        2
    ahu  
       2 days ago


    不错
    ahu
        3
    ahu  
       2 days ago
    顺带把玩了一下楼主的“一条通知”,死活没成功。就试了微信好友那个规则模板,完全不行。原先试过 smsforwarder 也不太好使就卸载了,难道华为 mate 系列都不太支持吗?
    skyrin
        4
    skyrin  
    OP
       1 day ago
    @ahu 是不是后台保活没设置好,我有一台 MATE 40 长期在用是没问题的
    ahu
        5
    ahu  
       1 day ago
    @skyrin 我就是即时测试的,涉及到后台保活吗?也已安装引导都开了,就差没 root 了
    zm2020
        6
    zm2020  
       18h 3m ago
    好用,可以把 Longshot 删了
    About     Help     Advertise     Blog     API     FAQ     Solana     2941 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 106ms UTC 08:13 PVG 16:13 LAX 01:13 JFK 04:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86