Obsidian plugin that stores note images in a dedicated WebDAV folder and syncs the rest of the vault to a separate remote notes folder using three-way comparison version sync.
将笔记图片存储到独立的 WebDAV 图片目录,并通过三向对比版本同步将其他 vault 内容同步到独立的远端笔记目录。
- Image separation / 图片分离:本地图片上传到远端图片目录后自动删除,笔记中以
secure-webdav代码块引用远端图片 - Three-way comparison sync / 三向对比同步:基于 local × remote × prevSync 状态矩阵的增量版本同步,覆盖创建、修改、删除、重命名、移动等全部操作
- Automatic sync / 自动同步:可配置定时自动同步间隔
- Image compression / 图片压缩:可配置的 JPEG 压缩参数(质量、最大尺寸、阈值)
- One-time migration / 一次性迁移:将旧笔记中的
和![[...]]本地图片引用批量转为远端引用 - Conflict backup / 冲突备份:双端同时修改时自动创建
.sync-conflict-*本地副本,保留双方内容供人工合并
| 远端目录 | 用途 |
|---|---|
| Image remote folder / 图片远端目录 | 存储上传的图片文件 |
| Remote notes folder / 笔记远端目录 | 存储 Markdown 笔记和非图片附件 |
- 图片上传成功后,本地图片文件被删除,笔记中替换为
secure-webdav代码块 - 笔记同步采用全量本地 + 远端双向同步模式,本地保留完整笔记内容
采用与 remotely-save V3 一致的三向对比算法:
- collectEntities — 收集本地文件、远端文件、上次同步记录(prevSyncRecords)
- computeDecision — 4×4 决策矩阵覆盖 16 种状态组合(LOCAL_NEW/DELETED/MODIFIED/UNCHANGED × REMOTE_NEW/DELETED/MODIFIED/UNCHANGED)
- executeDecisions — 执行推送/拉取/删除/冲突备份
- persistPrevSyncRecords — 持久化本轮同步状态作为下次对比基线
文件身份由内容哈希(SHA-256 前 16 位 hex)确定,签名格式为 mtime:size:contentHash16。
所有同步入口(手动、自动、ribbon)统一调用 syncVaultContent 方法。
- WebDAV Base URL — WebDAV 服务器地址
- Username / 用户名
- Password / 密码
- Image Remote Folder / 图片远端目录
- Remote Notes Folder / 笔记远端目录
- Excluded Sync Folders / 排除同步目录 — 不同步到远端的本地目录
- Auto Sync Interval / 自动同步频率 — 分钟数,设为 0 禁用自动同步
- Naming Strategy / 命名策略 — 远端图片文件命名方式(hash / 保留原名)
- Compress Images / 压缩图片
- Compress Threshold / 压缩阈值(KB)
- Max Image Dimension / 最大图片尺寸(px)
- JPEG Quality / JPEG 质量(1-100)
- Auto Update Check Interval / 自动更新检查间隔(小时)
- Language / 语言(auto / en / zh-cn)
- Max Retry Attempts / 最大重试次数
- Retry Delay / 重试间隔(秒)
- Run Migration / 执行迁移 — 将旧笔记中的 Obsidian 本地图片引用批量迁移为远端引用
| 命令 | 说明 |
|---|---|
| Upload local images in current note to WebDAV / 上传当前笔记中的本地图片到 WebDAV | 仅转换当前笔记的图片引用 |
| Test WebDAV connection / 测试 WebDAV 连接 | 执行 PUT / GET / DELETE 链路验证 |
| Sync vault content to WebDAV / 同步内容到 WebDAV | 手动触发全量三向对比同步 |
Ribbon 图标(🔄)点击执行同步。
- 从 Releases 页面下载最新版
main.js、manifest.json、styles.css - 将三个文件复制到 vault 的
.obsidian/plugins/secure-webdav-images/目录 - 在 Obsidian 设置中启用插件
npm install
npm run build
npm run release:local # 同步到本地 Obsidian 插件目录(需设置 OBSIDIAN_PLUGIN_DIR 环境变量)data.json包含 WebDAV 凭据(密码明文),切勿提交到 Git- 图片上传使用内容哈希命名可避免文件名碰撞和信息泄露
- WebDAV 连接使用 Basic Auth,建议通过 HTTPS 连接服务器
MIT