使用 Obsidian 搭建个人媒体记录库实际效果：我的媒体库 - 北极星的博客我有个需求挺简单的：看过的动画、电影、书、玩过的游戏，能有个地方统一记下来，最好有个画廊视图能翻看，筛选一下"哪些还没看""哪些评分高"。如果还能自动同步到博客上，就更省事了。于是我在 Obsidian 里搭了一套媒体库系统，顺手写了个同步插件，用下来感觉还不错。这篇聊聊怎么搞的。本地媒体库本身的搭建，主要是参考了这个博主的视频和代码来的：Obsidian如何打造智能图书影视库管理系统，兼顾颜值和实用功能！_哔哩哔哩_bilibili整体思路分两块：Obsidian 本地 — 每种媒体类型一个文件夹，每条记录一个 .md 文件，配合 DataviewJS 写一个画廊概览页，支持筛选、排序、搜索、改状态。同步到博客 — 一个 Obsidian 插件，把本地媒体笔记转成 Typecho 兼容格式，上传图片，推到博客。同时生成一个和本地画廊功能一致的云端画廊页面。架构大概长这样：Obsidian 媒体库 (.md + frontmatter) │ ├─ 本地画廊（DataviewJS，可交互） │ └─ 同步插件 → REST API → Typecho 博客 ├─ 文章（每条媒体一篇） └─ 画廊页（独立页面，纯前端渲染）本地部分：在 Obsidian 里建媒体库文件组织目录结构很简单，按类型分文件夹：媒体库/ ├─ 媒体库概览.md ← 画廊页面 ├─ anime/ ← 动画 ├─ book/ ← 书籍 ├─ movie/ ← 电影 ├─ teleplay/ ← 剧集 ├─ game/ ← 游戏 └─ music/ ← 音乐每条记录是一个 markdown 文件，用 frontmatter 存元数据。以一部动画为例：--- title: 葬送的芙莉莲 type: anime score: 8.8 genre: - 奇幻 - 冒险 tags: - 治愈 - 公路片 datePublished: 2023-09-29 观看状态: 看过✅ 集数: "28" ---不同来源的笔记字段名可能不一样——比如 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]]![xxx](远程URL)（图片已上传）别名[别名](博客文章链接)> [!info] 标题 ... `= 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.0Dataview 插件（画廊页的核心依赖）Douban 插件或 Bangumi Sync（用来导入元数据，可选但推荐）Typecho 这边：RESTful 插件（提供 API）Butterfly 主题（推荐，画廊和自定义字段支持最好）最后这套方案我从自己用着顺手出发，一点点补齐了筛选、进度、同步、管理面板这些功能。用"Obsidian 做本地数据库 + 画廊做可视化 + 插件做发布"的思路，把记录和分享串起来了。插件代码和 RESTful 后端都在 GitHub 上开源了，有兴趣可以看看。有更好的想法也欢迎交流。bluemoon23333/media-typecho-sync: 将obsidian的媒体库页面同步为typecho的一个独立页面的插件