KizunaShelf 简介:一个为你所爱之物而设的书架

Hacker News Top 工具

摘要

KizunaShelf 是一款自托管、模式灵活的媒体追踪器,数据以 Markdown 文件存储,提供桌面和移动应用,可用于追踪书籍、电影、动漫等。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/16 13:51

# KizunaShelf 简介:收纳你所爱的一切的架子 来源:https://mudkip.me/2026/07/16/Introduction-to-KizunaShelf/ 每个人都有自己的方式来记录生活中留下印记的事物——无论是一本书、一部电影、一部电视剧、一部动漫还是一首歌。有时,依靠一个拥有海量目录的在线服务,但平台的去留不由你掌控;有时,用一款设计精美、离线使用的手机应用,但你多样的兴趣很少能塞进某个预设的目录或数据模型中。而且,这些应用和服务明天就可能消失。 在辗转尝试无数工具后,我意识到自己需要真正能掌控的东西。我先在 Airtable 里搭建自定义数据库,后来转到 Notion,还尝试过自托管 NocoDB。最终,为了不再频繁迁移数据库,我接受了"文件优先于应用"的理念(https://stephango.com/file-over-app)。我选定了一个 Obsidian 库,把我关心的所有东西都存成 Markdown 文件,配上 front matter,并用 Dataview 以及后来的 Obsidian Bases 来组织。 但手动管理一个超过 2000 个 Markdown 文件的数据库又带来了新的不便:查找元数据、更新状态、记录日期。像图书管理员一样繁琐的工作,取代了发现下一件爱好的真正乐趣。 KizunaShelf 正是为了解决这一切。 ## 设计理念 我一直铭记一个原则:KizunaShelf 不仅仅是又一个媒体追踪器。它带来了类似 Airtable 的动态灵活性,让用户可以精确地定义自己的数据意味着什么。schema 由你自行查看和修改,并作为"意义"的唯一真实来源。 保存在你的库文件夹中的单个 `KizunaShelf/config.yaml` 文件,声明了你的类型、它们的字段以及每个字段的具体作用。它定义了: - 哪个字段代表条目标题,以及该标题使用哪种语言。 - 哪个字段描述一个日期以及这个日期代表什么(例如,游戏的发行日期、你开始看某部动漫的日期、或某个特定事件发生的日期)。 - 哪个字段代表状态,以及其自定义选项列表。 - 对象之间的关联方式以及如何连接不同类型。 但不必被 schema 的复杂度吓到。开箱即用,KizunaShelf 提供了传统媒体追踪器所应有的一切默认预设。你可以立刻从预设好的类型中选择:动漫、电视剧与戏剧、电影、游戏、桌游、书籍、漫画与图像小说、音乐专辑、播客、艺术家与创作者、角色。 这些类型还能直接连接到你熟悉的外部元数据提供商,包括 TMDB、TheTVDB、IGDB、Bangumi、Apple Music、MyAnimeList、Google Books 等等。 在 KizunaShelf 中添加条目极其快速简单:点击加号按钮,搜索你想要的内容,再点击添加即可。封面可以本地下载,状态和日期可以稍后按自己的节奏记录。KizunaShelf 还理解"子条目"的概念,比如动漫的单集或 CD 的曲目列表,让你能在同一个 Markdown 文件中以清单或项目符号列表的形式单独追踪它们。 ## 工程架构 在底层,这是一次非常有趣的工程实验。 对于这个项目,我有一份具体且雄心勃勃的需求清单: - 一个可以随时随地访问的自托管 Web 应用。 - 一个轻量级的 macOS、Linux 和 Windows 桌面应用,能打开与 Obsidian 相同的本地文件夹。 - 一个真正的手机应用,快速、愉悦且原生。 桌面端的答案是 Tauri。但解决移动端时,我冒出了一个"如果……会怎样"的想法:*如果我通过 UniFFI 将 Rust 核心直接桥接到 Swift 模块中,然后围绕它编写一个原生 SwiftUI 应用呢?* 这又带来了另一个挑战:如何让 Rust 核心在本质上是"2.5 个客户端"(因为 Tauri 桌面应用与 Web 应用共享几乎所有前端代码)之间保持完美一致? 我的解决方案是直接从 Rust 后端生成 OpenAPI(Swagger)规范,然后利用该规范自动生成 TypeScript 和 Swift 客户端。 结果是一个真正的跨平台架构。iOS 应用是完全原生的 SwiftUI,桌面应用避免了 Electron 的臃肿。未来的 Android 应用可以遵循完全相同的架构,在保持平台原生的同时,与其他客户端功能一致。 构建应用时遇到的一个小问题是不同平台上 Unicode NFC 与 NFD 规范化的问题。此问题已解决,现在可以安全地在文件名中使用 *Pokémon* 或 *ポケモン*。维基链接和关系匹配已在 NFC/NFD 差异之间进行了规范化。 ## *kizuna*(絆):连接在一起的事物之间的纽带 许多作品对我意义重大,无论是动漫系列、电子游戏,还是启发了本应用名称的音乐项目(https://www.youtube.com/watch?v=0aBsD9jpL5I)。它们值得被铭记,也值得与我们生命中特定的时刻相连。KizunaShelf 正是为描绘这些连接而设计。日历追踪即将发布的计划、以及提及你所关心事物的日常日记条目。而活动动态则将你观看、游玩和阅读的瞬间汇聚成一条时间线,记录下它们何时成为你生活的一部分。 条目之间的连接是 KizunaShelf 的核心。通过将 front matter 关系、维基链接、反向链接和列表整合到一个统一的、详细的视图中,应用把所有东西汇集在一处:你最爱的动漫角色、她的声优、你参加过的现实活动,以及你书架上摆放的手办。 2017 年 5 月初的一天,我走进秋叶原的一家复古游戏店,买了一捆 PSP 游戏,其中包括 *Ever17(https://en.wikipedia.org/wiki/Ever_17:_The_Out_of_Infinity)*。就在那一刻,LeMU 的故事正在实时展开。那份记忆正是这个应用存在的理由——为了保存这样的羁绊。 ## 永远,为梦想 我开发这个应用已经好几个月,并亲自使用了几周。KizunaShelf 的 iOS 版本现已通过 TestFlight(https://testflight.apple.com/join/hE7k3sWd)提供测试,开源桌面版和自托管 Web 版不久后也将上线。Android 版本计划于今年晚些时候或明年推出。我承诺会长期维护这个应用。 但所有应用终会消失。KizunaShelf 在设计时考虑到了自身的"寿命"。该应用没有服务器来存储你的数据,也没有专有格式。保存在 KizunaShelf 中的所有内容都是纯 Markdown,附带一些人类可读的 front matter。我还采用了一些技巧,使其能与现有生态良好集成:动漫或电视剧的每一集都有 📅 表示播出日期,勾选该集后会添加一个 ✅ 日期,遵循 Obsidian Tasks(https://publish.obsidian.md/tasks/Reference/Task+Formats/Tasks+Emoji+Format)的表示方式。智能列表使用了 Obsidian Bases 格式的子集,因此你可以在 Obsidian 中打开它们并显示完全相同的条目。 你的数据将永远与你同在,无论有没有这个应用。

相似文章

AutoShelf

Product Hunt

AutoShelf 是一款自动整理文件的 Mac 应用。

karakeep-app/karakeep

GitHub Trending (daily)

Karakeep 是一款可自托管的全能书签应用,使用AI(包括通过Ollama的本地大语言模型)进行自动标签、摘要和OCR。它支持链接、笔记、图片、PDF,并提供协作、全文搜索、浏览器扩展和移动应用。