AX 爱鲜报

综合 / 后端 · 2026-10-19 09:04 · 2 阅读 · 0 赞

Lap:3.8k Star 的离线照片管理器,十万张图本地管

Lap 是一款基于 Tauri 2 和 Rust 的离线照片管理器,直接索引现有文件夹,支持十万张级图库,内置 CLIP 本地 AI 搜图与人脸聚类,不联网也能用。

硬盘里十万张照片,云盘会员一过期就看不了,换生态还得整体搬家。这个 3.8k Star 的本地照片管理器 Lap 走了相反的路,照片躺原地,不联网也能管。建议收藏。

它解决什么问题

云相册的账,大家都会算。会员费年年涨,照片一多就上传到天亮,想换平台等于扒层皮。

Lap 的思路是把「管理」和「存储」拆开,你的文件夹原地不动,它只负责索引和展示。README 里有一条写得很直白,不锁定图库,直接在现有文件夹上工作,不用把一切导入一个封闭数据库。

十万张以上的图库是它的目标场景,浏览、整理、找图都在本地完成。查重、选片、拼贴这些重活它也能干,重复文件会给出可释放空间汇总,支持批量清理。

技术栈拆解:安装包 217MB,大得有理

Lap 的核心是 Tauri 2 加 Rust,前端 Vue 加 Vite 加 Tailwind,数据落 SQLite。安装包大得有点吓人,Windows 版 MSI 有 217MB。大不是白大,一堆硬解码库都在里面:

打包进去的库 干什么用
LibRaw 各家 RAW 格式解码
libheif 加 libde265 HEIC/HEIF 与 HEVC 解码
libjpeg-turbo JPEG 缩略图高速生成
FFmpeg 视频处理与缩略图
ONNX Runtime 本地 AI 模型推理

Cargo.toml 的 release profile 也挺狠,lto 全开、opt-level="z" 体积优先、panic="abort"、strip 去符号,能省的地方都在省。

依赖里还藏着几个懂行的选择,hnsw_rs 做向量索引,blake3 和 sha2 管查重哈希,pinyin 支持拼音搜索,trash 让删除默认进回收站。

本地 AI 跑的是什么模型

搜图能用自然语言,靠的是 CLIP。构建时执行 scripts/download_models.sh,从 HuggingFace 拉五个文件,全是量化版 ONNX:

  • tokenizer.json,CLIP ViT-B/32 官方分词器
  • text_model.onnx,文本编码,量化
  • vision_model.onnx,图像编码,量化
  • det_500m.onnx,InsightFace buffalo_s 人脸检测
  • w600k_mbf.onnx,人脸识别,MobileFaceNet 骨干

buffalo_s 是 InsightFace 的轻量包,配上量化模型,明显是冲着普通人的笔记本去的。人脸聚类、以图搜图、智能标签,推理都在本机完成,断网也能用。

用起来就是输入一句话,比如「海边的日落」,文本和图像各自编码成向量,再算相似度。向量索引交给 hnsw_rs,十万张图的库也能即时出结果。

一个编译器 bug 的故事

10 月初的 issue 389,是我推荐你看这个项目的理由。有人在 VS 2026(MSVC 19.51)下编译,Lap.exe 还没跑到 main() 就崩。

排查结论很硬。MSVC 的 /O2 误编译了 libde265 里 scan.cc 的 fill_scan_pos(),scanpos 表错了 687 项,静态初始化直接越界。

报告者没停在「玄学编译问题」。他写了个独立小程序逐项校验扫描表,再把优化档位全试一遍。/Od、/O1、/Ot 全部正确,/O2、/Og、/O2 关内联、/O2 关 intrinsics 全部出错,问题锁定在全局优化这一档。

他的提议是 build.rs 只对 MSVC 降一档优化,不动上游子模块:

// 仅对 MSVC 生效,其他平台不受影响
if is_msvc {
    configure
        .arg("-DCMAKE_C_FLAGS_RELEASE=/O1 /Ob2 /DNDEBUG")
        .arg("-DCMAKE_CXX_FLAGS_RELEASE=/O1 /Ob2 /DNDEBUG");
}

我回 main 分支核对过,修复和注释都已落地,只对 msvc 目标生效。

维护者的回复也干脆,「请提交 PR」,还顺带感谢这位报告者此前实现的拼贴功能。报告者甚至主动交代代价,Windows 上 HEVC 解码可能会慢一点,他没测。

丑话也说在前面

这个项目诚实地有点少见。README 专门拿一章讲元数据边界,EXIF、GPS 这些内嵌信息跟着文件走。

标签、评分、智能相册规则、AI 索引只存在 Lap 自己的数据库里,复制出去不带走,删库也不删你的照片。

PRIVACY.md 里写明了网络触发的全部场景,检查更新、从 GitHub 下载更新、打开外链、地图瓦片走 OpenStreetMap。

隐私文档还承认默认开启 Aptabase 统计,但只发两个事件,应用启动和应用退出,只带版本、平台和系统,没有用户标识。

原话是「绝不发送照片、路径、搜索词、标签、评分」。这种事前讲清楚的做法,比满屏 privacy-first 口号可信得多。

当然它也有没关的 bug。issue 410 记录了一个 OOM 循环。在 11.7 万张图的库里,afiles 表只要有评分大于零的行,一打开图片就出事。

WebKit 前端进程的内存先慢后快地上涨,一度观测到约 102GB,最后被系统杀掉。报告者做了三组对照实验,把触发条件钉死在 rating 字段上,这个 issue 目前还开着。大库用户升级前,最好先备份数据库。

上手信息

macOS:brew tap julyx10/lap,再 brew install --cask lap,dmg 过了苹果公证

Windows:MSI 分 x64 和 arm64,未签名,SmartScreen 拦截时点「保留」

Linux:deb 或 AppImage,视频播放依赖系统 GStreamer 插件

节奏上,v0.1.0 今年 2 月 3 日才公开发布,251 天发了 24 个版本,v0.3.3 是昨天的事。README 有 15 种语言,中文在里面。

十万张照片是个坎,迈过去的方式不一定非是云。去 GitHub 给它点个 Star 吧。

GitHub:lap —— 离线优先的开源照片管理器,为十万张级本地图库设计

https://github.com/julyx10/lap

#开源 #效率工具 #照片管理 #Lap #Rust #Tauri #隐私保护

标签 隐私保护 开源 Rust GitHub Tauri 照片管理

评论

登录后才可评论

0 条评论

  • 暂无评论,来写第一条吧。