跳到正文
Hacker News· malshe·· 7 天前AI 评分62

DigUp 发布 Mac 本地文件搜索工具,基于 Google DeepMind 的 EmbeddingGemma 2

Search files on your Mac with Google DeepMind's EmbeddingGemma 2

AI 导读

DigUp 发布 Mac 本地文件搜索工具,基于 Google DeepMind 2026 年 10 月发布的多模态嵌入模型 EmbeddingGemma 2,用自然语言描述即可按内容检索图片、PDF、文档、音视频和代码。

正文 · AI 翻译

描述它。把它挖出来。
借助 Google DeepMind 的 EmbeddingGemma 2,按文件内容搜索你 Mac 上的文件。

下载 Mac 版 · Apple 芯片, macOS 14 或更高版本 · 免费且开源

DigUp's search panel finding a zebra in a video, a podcast moment, a clause in a lease, a dog on the beach in English, Bengali and Arabic, and code that opens in Zed

EmbeddingGemma 2 是 Google DeepMind 于 2026 年 10 月发布的多模态嵌入模型。它把文本、图像、 音频和视频放进同一个共享空间:一张沙滩上狗狗的照片会落在“沙滩上的一只狗”这句话旁边,一段 谈论睡眠的录音会落在“他们谈论睡眠的地方”旁边。它理解 100 多种 语言,是开放的(Apache 2.0),而且 740M 参数的规模小到足以在笔记本电脑上轻松运行。

DigUp 把这一切带到你 Mac 上的文件中。选择要搜索的文件夹,它就会读取其中的图片、PDF、文档、 录音和视频。然后用你自己的话描述你在找什么,它就能找到匹配项, 无论是什么类型的文件。这一切都在你的 Mac 上完成。

你能找到什么

  • “视频里的斑马”会打开斑马出现的那一刻的片段
  • “他们谈论睡眠的地方”会跳到播客的那一分钟
  • “租约中关于宠物的条款”会显示 PDF 页面,并标出那些文字
  • “沙滩上的一只狗”能找到那张照片,而“付款被拒错误”能找到那张截图
  • 用英语搜索可以找到用孟加拉语、阿拉伯语或该模型支持的 100 多种语言写成的笔记,反过来 也一样
  • “code: retry a failed call with backoff”会在你的项目中找到那个函数,前提是你开启代码搜索

精确的字词也算数。发票号码、错误代码和名称会按原样匹配,无论是在文件名、文档文本 还是截图内的文字中,所以一次搜索既能得到含义,也能得到精确字符串。

私密

你索引的任何内容都不会离开你的 Mac。DigUp 只在首次下载模型和每天检查一次更新时 联网。更新检查不会发送任何关于你文件的信息,而且你可以关掉它。没有账户,没有遥测。

安装

  1. 从 Releases 下载 DMG,把 DigUp 拖到 Applications,或者使用 Homebrew:brew install --cask arahim3/tap/digup。
  2. 打开它。在模型下载期间(865 MB,仅一次),选择要搜索的文件夹:整个文件夹,或只选其中的 部分子文件夹。DigUp 会显示每个文件夹首次扫描需要多长时间。
  3. 在任何应用中按 ⇧⌘Space,描述你在找什么。

DigUp 需要一台搭载 Apple 芯片、运行 macOS 14 或更高版本的 Mac(已在 macOS 26 上测试),并且它会 自动保持更新。

使用它

按键 作用
⇧⌘Space 从任何应用打开搜索面板(你可以在设置中更改)
↓ ↑ 在结果之间移动
↩ 打开结果:视频和录音跳到那一刻,PDF 在 Preview 的搜索中显示你的词,代码在你的编辑器中跳到那一行
Space 快速查看,显示那一页或那一刻(在你移动到某个结果之后)
⌘↩ 在 Finder 中显示
⌘C 复制文件,以便粘贴到任何地方
⌘O 在更大的窗口中执行同样的搜索,带有图片网格和筛选器

DigUp 驻留在菜单栏中,你可以在那里查看索引进度、暂停它,或打开设置。第一次 视频在对应时刻打开时,macOS 会询问 DigUp 是否可以控制 QuickTime Player;它就是这样跳过去的。

它读取什么

只读取你选择的文件夹:

  • 图片和截图(HEIC、JPEG、PNG、RAW、WebP 等),按其显示的内容,截图也按其文字
  • PDF,逐页读取,包括扫描件。很长的 PDF 会先处理前 30 页,其余的在其他所有 内容都处理完后处理(每个文件最多 5,000 页)
  • documents: txt、md、rtf、doc、docx、odt、html,长文件也一样。以数字为主的内容,比如数据 export,只按精确文本匹配
  • 任意长度的音频:模型一次听 30 秒,所以 DigUp 采用重叠的 30 秒窗口,匹配结果指向其对应时刻
  • 任意长度的视频:每隔几秒取一帧,每个镜头一帧,外加与音频相同方式处理的音轨

在你为代码搜索选定的文件夹之外,它从不读取代码,而在代码项目(包含 .git、 package.json 等文件的文件夹)内,它只读取截图。它从不读取密钥、证书、密码文件、像 ~/.ssh 这样的隐藏 文件夹、应用包或缓存。它会跳过看起来像数据集的文件夹,也从不下载仅存在于云端的 iCloud 文件。你可以在设置中跳过更多文件夹或文件类型。DigUp 只读取你的文件; 它从不更改、移动或上传它们。

第一遍处理几百个文件需要几分钟,处理一个大的下载文件夹可能需要一小时。这 只发生一次,用电池时也会进行,除非你让它等到接上充电器,并且在低电量模式下会暂停。之后,一个 新文件落地后一两秒即可被搜索到。

代码

EmbeddingGemma 2 也能读取代码,所以 DigUp 可以搜索你的项目。代码搜索默认关闭,直到你在 设置 → 代码中或设置过程中为你选定的文件夹开启它。每个仓库都会显示读取它需要多长时间以及 其索引需要多少空间。然后用 code: 开始搜索,说出代码的功能,或输入其中包含的名称:

  • "code: retry a failed call with backoff" 会找到那个函数,无论它叫什么名字
  • "code: refreshAccessToken" 会跳到定义它的那一行,而不是调用它的地方
  • "code: plot how many examples each class has" 会找到那个 notebook 单元格

结果会在你的编辑器中打开并定位到该行:Zed、VS Code、Cursor、Xcode、Sublime Text、JetBrains IDE 以及更多 (在设置中选择一个)。代码有自己独立的索引,从不出现在其他搜索中。DigUp 读取源文件、 notebook(不含其输出)以及仓库自带的文档。它会跳过 git 忽略的内容、第三方和生成的代码、数据 文件,以及任何看起来像密钥或密码的东西。当你在处理代码时,索引会在一切安静下来一分钟后 跟上进度。

读取代码对于一个小型应用大约需要 20 秒,而对于整个 llama.cpp 大约需要 20 分钟和 130 MB 的索引。

工作原理

your folders ─► readers (ImageIO, PDFKit, AVFoundation, and Vision for the text in screenshots)
             ─► EmbeddingGemma 2 on llama.cpp (Metal), in a helper process that quits when it's done
             ─► one SQLite file: a vector for every picture, page, passage, video frame and 30 s of sound,
                plus a keyword index (code search keeps a second one, for code)
your words   ─► the same model's text part (~250 MB, only while you search) ─► nearest vectors + exact words

DigUp 通过 llama.cpp 在 Mac 的 GPU 上运行 ggml-org 的 8 位版 EmbeddingGemma 2。每个向量都位于同一个 768 维空间中,这就是为什么一次查询可以将一个视频帧 与一个 PDF 页面进行排序比较。一次搜索会在几毫秒内嵌入你的文字,并将它们与索引中的所有内容进行比较。 精确词匹配会获得加权,因为没有任何嵌入能精确表示一个发票号码。

索引会记住其向量是由哪个模型版本生成的。不改变向量的更新会保留你的 索引,并且每次 llama.cpp 更新在发布前都会用存储的参考向量进行测试。

从源码构建

你需要 Xcode 26、git 和 CMake(或 uv)来构建 llama.cpp。如果 xcode-select -p 显示的是 Command Line Tools, 请先切换到 Xcode(sudo xcode-select -s /Applications/Xcode.app):它们缺少构建所需的 SwiftUI 和 Swift Testing 宏。

git clone https://github.com/ARahim3/DigUp && cd DigUp
scripts/build-llama.sh            # llama.cpp at a pinned tag, with a one-line patch (a few minutes)
swift build -c release && swift test
./build.sh                        # → build.noindex/DigUp.app

还有一个命令行工具 .build/release/digup,可以在终端中建立索引、搜索和运行评估 (digup --help)。scripts/make-testbed.sh 会构建一个测试文件文件夹供你试用(它需要 ffmpeg),而 evals/ 保存着用于衡量排名变化的查询。

FAQ

这和 Spotlight 有什么不同? Spotlight 按文件名、文本和元数据查找文件。DigUp 还能按文件展示或讲述的内容来查找,并直接带你到对应的页面或时刻。两者可以很好地并存。

为什么下载有 865 MB?那是模型:文本部分(310 MB)加上图像和音频编码器(555 MB)。应用本身大约 20 MB。

它会让我的 Mac 变慢吗?只有第一遍处理比较吃资源。之后它只读取新文件。模型在单独的进程中运行,完成后就会退出,搜索部分只在你搜索时加载。

支持哪些语言?该模型掌握 100 多种语言,DigUp 可以用所有这些语言搜索,还能跨语言搜索。评测只覆盖英语、孟加拉语和阿拉伯语,因为这些是 DigUp 测试所用文件的语言,而且 Google 指出该模型并非在每种语言上都同样出色。有两项限制针对的是精确词,而非含义:截图中的文字由 Apple 的文本识别读取,它认识约 25 种语言;而像中文、日文和泰文这类不用空格分隔的语言,不会被切分成词。

如何卸载它?先退出,然后删除 DigUp.app 和 ~/Library/Application Support/DigUp,后者存放模型和索引。它的设置位于 ~/Library/Preferences/com.abdurrahim.DigUp.plist。使用 Homebrew 时,brew uninstall --cask --zap digup 可将其全部移除。

谢谢

DigUp 基于 Google DeepMind 的 EmbeddingGemma 2(Apache 2.0)、llama.cpp(MIT)和 Sparkle(MIT)构建。它们的许可声明随应用一同发布,位于 DigUp.app/Contents/Resources/Acknowledgements.txt。

DigUp 与 Google 或 Apple 无关联。Gemma 是 Google LLC 的商标;Mac 和 Spotlight 是 Apple Inc. 的商标。

许可证

MIT

来源:Hacker News · github.com