使用 Obsidian 搭建个人媒体记录库
实际效果:我的媒体库 - 北极星的博客
我有个需求挺简单的:看过的动画、电影、书、玩过的游戏,能有个地方统一记下来,最好有个画廊视图能翻看,筛选一下"哪些还没看""哪些评分高"。如果还能自动同步到博客上,就更省事了。
于是我在 Obsidian 里搭了一套媒体库系统,顺手写了个同步插件,用下来感觉还不错。这篇聊聊怎么搞的。
本地媒体库本身的搭建,主要是参考了这个博主的视频和代码来的:
Obsidian如何打造智能图书影视库管理系统,兼顾颜值和实用功能!_哔哩哔哩_bilibili
整体思路
分两块:
- Obsidian 本地 — 每种媒体类型一个文件夹,每条记录一个
.md文件,配合 DataviewJS 写一个画廊概览页,支持筛选、排序、搜索、改状态。 - 同步到博客 — 一个 Obsidian 插件,把本地媒体笔记转成 Typecho 兼容格式,上传图片,推到博客。同时生成一个和本地画廊功能一致的云端画廊页面。
架构大概长这样:
1 | Obsidian 媒体库 (.md + frontmatter) |
本地部分:在 Obsidian 里建媒体库
文件组织
目录结构很简单,按类型分文件夹:
1 | 媒体库/ |
每条记录是一个 markdown 文件,用 frontmatter 存元数据。以一部动画为例:
1 | --- |
不同来源的笔记字段名可能不一样——比如 Douban 插件用 title,Bangumi 插件用 中文名 和 原名。画廊页的脚本做了兼容,会自动映射。
画廊概览页
这是整个媒体库的门面,基于 DataviewJS 写的。核心功能:
筛选栏 — 顶部一排下拉菜单,可以按类型、状态、标签、评分、上映时间、季度、创建时间来筛。所有筛选条件实时生效,状态自动保存到 localStorage,下次打开还在。
搜索 — 右上角的搜索框支持多关键词,会在标题、创作者、标签、描述等字段里加权匹配,还能高亮结果。
排序 — 按评分、标题、日期升降序,最后一个下拉菜单搞定。
卡片网格 — 每条媒体一张卡片,包含:
- 封面图(自动从本地附件或网络 URL 加载)
- 左上角类型图标(🎬🎮📚✨ 一眼分辨)
- 右上角状态标签,点击可以切换(想看 → 在看 → 看过 → 搁置 → 抛弃),自动更新文件 frontmatter
- 左下角发布日期,右下角评分
- 标题(点击跳转到详情页)
- 导演/作者/制作方信息
- anime 和剧集还会显示进度条(已看/总集数)
添加新媒体
顶部有个"添加媒体"按钮,点了直接调起 Douban 插件的搜索导入——输入名字就能从豆瓣拉取元数据创建笔记,不用手敲。
同步部分:一键推到博客
本地记着爽,但有时候想分享,或者想在手机上看。我写了个 Obsidian 插件 media-typecho-sync,配合 Typecho 后端的 RESTful 插件,实现一键同步。
同步管理面板
点击侧边栏的云上传图标,弹出一个管理面板:
面板可以:
- 搜索和筛选 — 按名称搜,按类型/观看状态/同步状态/公开状态筛
- 增量同步 — 只同步本地有改动过的文件(按 mtime 判断)
- 强制同步 — 勾选指定条目强制推送,或者全量重推
- 预览变更 — 先看看哪些文件会被同步,确认无误再推
- 逐条设置公开状态 — 每条媒体可以独立设为公开/隐藏/私有
- 删除已选 — 从云端删掉已同步的文章
- 重建画廊 — 只更新画廊页,不动文章
同步过程做了什么
点击同步后,插件会:
- 测试连接 → 扫描本地媒体库 → 对比缓存,找改动
- 上传新图片(DJB2 内容哈希去重,同一张图不会传两次)
- 转换格式:Wiki 链接
[使用Obsidian搭建个人媒体记录库](https://blog.polaris2333.top/index.php/archives//)→ 普通链接、Callout 块 → HTML、DataviewJS → 静态内容 - 通过 REST API 创建/更新文章,附上封面、摘要、标签、分类
- 重建云端画廊页
整个过程在面板底部有实时进度,出错了也一目了然。
格式转换要点
Obsidian 的笔记语法和 Typecho 的 Markdown 解析不太一样,插件在推送前会自动处理:
| Obsidian 语法 | 转换结果 |
|---|---|
![[xxx.jpg]] | (图片已上传) |
别名 | [别名](博客文章链接) |
> [!info] 标题 | <div class="callout callout-info">...</div> |
`= this.score` | frontmatter 对应字段的值 |
| dataviewjs 代码块 | 静态 HTML(集数列表、描述等) |
| ep-box 集数标记 | 内联样式(紫色=已看,深灰=未看) |
云端画廊
同步后博客上会自动生成一个独立画廊页面,和 Obsidian 里的体验基本一致——筛选、排序、搜索、卡片展示都在,只是不能修改状态(毕竟是静态页面,没 Obsidian API)。
一些细节设计
差异检测三种模式:正常模式按 mtime 增量同步;强制模式全量重推;白名单模式只同步选中文件——改了一条笔记只想推这一条,没问题。
图片去重双层保险:先按路径匹配缓存,再按 DJB2 内容哈希匹配。同一张图在不同笔记里引用多次,只传一次。
集数追踪:anime 的集数数据来自 Bangumi 模板的 ep-box,统计 data-status="2"(已看标记)的数量生成进度条。剧集类也是同理。
跨插件兼容:画廊脚本同时兼容 Douban 插件和 Bangumi Sync 插件创建的文件,字段名不同也能正常显示。
需要准备什么
Obsidian 这边:
- Obsidian ≥ 1.5.0
- Dataview 插件(画廊页的核心依赖)
- Douban 插件或 Bangumi Sync(用来导入元数据,可选但推荐)
Typecho 这边:
- RESTful 插件(提供 API)
- Butterfly 主题(推荐,画廊和自定义字段支持最好)
最后
这套方案我从自己用着顺手出发,一点点补齐了筛选、进度、同步、管理面板这些功能。用"Obsidian 做本地数据库 + 画廊做可视化 + 插件做发布"的思路,把记录和分享串起来了。
插件代码和 RESTful 后端都在 GitHub 上开源了,有兴趣可以看看。有更好的想法也欢迎交流。
bluemoon23333/media-typecho-sync: 将obsidian的媒体库页面同步为typecho的一个独立页面的插件



这是一条测试评论OωO