打造 Local-First 的图像档案:范围界定

Mar 19, 2025

多年来,我一直在思考我们如何存储和访问我们的数字文件,特别是照片。一切都在朝着云端迁移,伴随着复杂的系统/应用,它们将本应简单的东西抽象化了:一个图像文件夹

我不想要那样。

我想要一些简单的东西。不需要服务器,不依赖数据库,也不会把我锁定在任何特定的生态系统中。我想要仅仅能处理文件和文件夹的东西,可以明天就消失而不会留下任何痕迹,或者运行一次,结果就永远存在。

在使用 Node.js 粗略地完成了原型并看到了价值之后——这里是对我想要更好地构建它的原因的思路整理。

我的快速原型。一个图像档案查看器,可以通过点击一个 HTML 文件在浏览器中打开。

1. 大多数照片解决方案的问题 (Google Photos, iCloud Photos 等)

照片管理变得过于复杂,并且只专注于组织,而不是存档。我不是在贬低这些服务,它们对于管理你生活中的工作窗口照片非常棒,但我们真的希望 10 年、15 年、20 年前的照片存储在这些服务上吗?

对于非技术人员(甚至对我自己来说),这并不理想。当你离开人世后,你的文件会发生什么?如果你的家人想在 10 年后浏览你的档案,他们能做到吗?

这应该是简单的

一个结构良好的文件夹,无论是在几个外部驱动器上,还是在异地远程备份,都已经是一种很好的组织图像的方式。为什么要复杂化它?

2. 纯文本运动:文件为王

现在有一种回归纯文本的运动。笔记本、wiki、文档——人们正在抛弃数据库和专有格式,转而选择简单、可读的文件

为什么?因为文件比应用更持久

我希望图像也能采用同样的理念。文件系统应该是结构——而不是一些建立在其之上的抽象界面。

这不是关于重新发明轮子——而是关于从一开始就不把事情复杂化

3. 本地优先、零依赖的图像档案

目标是一个工具,它:

本质上,它只是一个图像文件夹的静态站点生成器,它存在于你的库中。你可以完全忽略它,仍然像往常一样访问你的照片,或者在你觉得需要时使用它。

4. 最小的 JavaScript (或完全没有)

默认情况下,它应该是纯 HTML 和 CSS,并且使用浏览器功能,而不是花哨的东西。JavaScript 应该是可选的——仅用于 UX 改进,例如:

如果禁用 JavaScript,任何东西都不应该崩溃

5. 它的结构

文件夹组织

该项目没有使用数据库,而是使用文件系统作为数据库:

📂 Photos/
├── 📂 2024-Scotland-Trip/
│  ├── 🖼 image1.jpg
│  ├── 🖼 image2.png
│  ├── 📄 meta.md (可选元数据)
│  ├── 📂 .thumbs/ (自动生成的缩略图)
│  ├── 📜 index.html (自动生成的 UI)
│
├── 📂 2023-Italy/
│  ├── 🖼 photo.jpg
│  ├── 📄 meta.txt (纯文本元数据)
│  ├── 📂 .thumbs/ (自动生成的缩略图)
│  ├── 📜 index.html (自动生成的 UI)
│
├── 📜 style.css (全局样式)
├── 📜 index.html (根索引)

📂 Folders = 分类 📄 meta.md = 每个文件夹的可选元数据 📂 .thumbs/ = 系统隐藏的点文件夹,用于自动生成的缩略图,以帮助加快页面加载速度

没有数据库,没有外部依赖——只有文件。你可以构建它,把它放在一个 SSD 上,并在 10 年后拿起来,它仍然可以工作。

6. 它是如何工作的

  1. 一个小型的后台应用监视文件夹或手动触发。
  2. 当添加或删除文件时,它:
    • 为每个文件夹生成一个 静态 HTML 索引
    • 创建 缩略图(但从不修改原始图像)。
    • 使用 Markdown 或纯 txt 文件存储元数据
  3. 浏览器 中打开文件夹以浏览图像。

没有复杂的设置,没有同步,没有额外的废话。

7. 为什么要远离 Node.js?

现在,我已经用一个 Node.js 脚本 进行了原型设计,它工作正常,但它 并不理想

目标是用 RustGo 重建它,这将使它:

Rust 会让它更快,而 Go 会让跨平台支持更简单。无论如何,目标是一个微小的、原生应用,它只做它的工作,然后退出。

8. 最后的想法:保持简单

这个项目是 有主见但简单的

只是一个浏览图像文件夹的轻量级方式——不多也不少。

我将很快开始对 Rust 版本进行原型设计。如果这听起来很有趣,请告诉我。🚀

所有内容和媒体 © Copyright Chris Collins 2018-2025 最后构建时间:Mar 19, 2025, 7:58 PM