Wiki 图片视频管理规范
本文给所有要往 wiki 里塞图片、视频、PDF 等二进制资产的人和 agent 看。一句话总结:正常拖进文件夹、正常
git add即可,仓库已配 Git LFS 自动接管。
1. 为什么要有规范
Git 本身擅长存文本(一行改 → 一行 diff),不擅长存二进制(一个像素改 → 整张图重存)。如果不管,仓库大小很快从几 MB 涨到几 GB,clone 慢、push 慢、CI 慢,最后没人愿意用。
我们的方案:
- 文本(
.md)走普通 Git - 二进制(图片/视频/PDF/Office/设计稿)走 Git LFS,仓库里只存 120 字节的 pointer,真正的二进制存在 GitHub LFS 服务器
- 你写内容时完全感受不到:
还是普通 markdown 写法
2. 放哪里
2.1 目录约定
wiki-vault/
└── canon/ ← 你写的页面
├── 品类/
│ └── 蒸汽挂烫机.md
└── _assets/ ← 所有资产统一这里
├── 蒸汽挂烫机/ ← 按主题分子目录
│ ├── bsr-trend.png
│ ├── 拆解图.jpg
│ └── unboxing.mp4
└── _common/ ← 多页复用的图(如 logo、icon)
└── 86lux-logo.png规则:
- 一个主题/页面对应一个
_assets/<主题名>/子目录 - 多页共享的资产放
_assets/_common/ - ECS 上 Hermes 写 drafts 时,资产放
drafts/<agent>/_assets/<topic>/,promote 时一起搬
2.2 在 markdown 里怎么引用
始终用相对路径:
<!-- canon/品类/蒸汽挂烫机.md 里 -->

<!-- 视频 -->
<video src="../_assets/蒸汽挂烫机/unboxing.mp4" controls width="600"></video>不要用:
- ❌ 绝对路径
/Users/xxx/...—— 别人 clone 后路径不对 - ❌
wiki.86lux.net/...URL —— 站点搬域名后全断 - ❌ Obsidian 默认的
!<span class="wikilink-dead" title="未找到: image.png" style="color:#c33;border-bottom:1px dashed #c33">image.png</span>嵌入(除非你知道 VitePress 渲染兼容性,目前不建议) - ❌ 图床外链(imgur、微信图床)—— 几个月后会被删,wiki 烂尾
2.3 Obsidian 默认附件路径设置(推荐)
Obsidian → Settings → Files & Links:
- Default location for new attachments:选
In subfolder under current folder→ 填_assets - New link format:选
Relative path to file - Use Wikilinks:开(虽然图片走
![]()不走[[]])
这样你截图直接 ⌘V 粘贴进 Obsidian 时,会自动存到 <当前页所在目录>/_assets/,并生成相对路径引用。
3. Git LFS 自动跟踪哪些后缀
仓库根的 .gitattributes 已配,下列后缀全部自动走 LFS,你什么都不用做:
| 类别 | 后缀 |
|---|---|
| 图片 | .png .jpg .jpeg .gif .webp .bmp .tiff .heic(大小写都跟踪) |
| 视频 | .mp4 .mov .webm .mkv .avi .m4v |
| 音频 | .mp3 .wav .m4a .flac .ogg |
| 大档案 | .pdf .zip .tar .tar.gz .tgz .7z .rar |
| Office | .docx .xlsx .pptx |
| 设计稿 | .psd .ai .sketch .fig .xd |
不走 LFS 的(保持普通文本 diff):
.svg—— 通常很小且是文本,diff 友好.md.txt.json.yaml.csv—— 显然.html.css.js—— 显然
要新增类型,编辑 .gitattributes 加一行 *.xxx filter=lfs diff=lfs merge=lfs -text。
4. 大小指南
| 资产类型 | 推荐上限 | 超了怎么办 |
|---|---|---|
| 截图 | 1 MB | 用 Squoosh / TinyPNG 压一下再传 |
| 高清照片 | 5 MB | 压到 1920px 长边 + 80% jpg 质量 |
| 视频 | 50 MB | 压到 1080p H.264 < 5 Mbps,或外链 B 站 |
| 20 MB | 压缩 PDF,或拆成多份 | |
| 设计源文件(PSD/AI) | 200 MB | 仅必要时上传,更建议存 Figma/网盘+留链接 |
| 任何单文件 | 硬上限 100 MB | GitHub LFS 单文件 hard limit |
超过 100 MB 的文件 Git LFS 会拒收。超大视频 / 设计稿不要硬塞,传到对象存储或视频平台,wiki 里留链接 + 截图缩略图。
5. LFS 配额与成本
GitHub LFS 的 付费基础版(已开通,$5/月):
- 50 GB 存储
- 50 GB / 月下载流量
按当前规模这个量级管够,不用担心。
如果某天接近上限:
- 看 https://github.com/settings/billing/payment_information
- 加 1 个 data pack(50GB 存储 + 50GB 流量 = 额外 $5/月)
- 不会自动扣,需要人工买,所以不会被坑钱
6. 实战范例
范例 1:粘一张截图进笔记
- 在 Obsidian 里打开
public/品类/蒸汽挂烫机.md - 截图后 ⌘V 粘贴
- Obsidian 自动存到
public/品类/_assets/蒸汽挂烫机-2026-04-17.png,并写入 - 保存
- Claude Code → "发布 wiki"
- vault-publish 自动跑
git add public/,PNG 走 LFS 上传,commit + push
push 时你会看到:
Uploading LFS objects: 100% (1/1), 245 KB | 110 KB/s, done.这就是 LFS 在干活。
范例 2:传一份视频
# 假设你有一个 35 MB 的开箱视频
cp ~/Desktop/unboxing.mp4 wiki-vault/canon/_assets/蒸汽挂烫机/unboxing.mp4在页面里:
<video src="../_assets/蒸汽挂烫机/unboxing.mp4" controls width="600"></video>发布。VitePress 渲染时会变成可播放的 <video> 元素。
范例 3:超大视频不能塞
500 MB 的产品宣传 4K 视频?别塞。
- 上传到 B 站 / 阿里云 OSS / 飞书云空间
- wiki 里嵌入 iframe 或留链接
- 同时存一张视频封面图 + 30 秒压缩版预览(< 50MB)作为 LFS
7. 故障排查
7.1 我 push 时报 LFS 相关错误
batch response: This repository is over its data quota.→ 流量/存储超了,让 Allen 加 data pack。
ERROR: file is X MB, but LFS file size limit is 100 MB.→ 单文件超 100MB,按 §4 处理(外链/拆分/压缩)。
7.2 我 clone 后图片打不开
git lfs install # 装 hook
git lfs pull # 拉所有 LFS 实际文件如果你只 clone 了仓库但 LFS 没装,工作区里图片会是 120 字节的 pointer 文本,浏览器/Obsidian 打不开。
7.3 我想确认某个文件确实走了 LFS
cd wiki-vault
git lfs ls-files | grep <filename>能看到说明 LFS 跟踪了。
git show HEAD:path/to/image.png | head -3如果输出是 version https://git-lfs.github.com/spec/v1 三行 pointer,说明 git 仓库里只存了 pointer(正确)。如果输出是 PNG 二进制乱码,说明这文件没走 LFS(错误,可能 .gitattributes 加得晚)。
7.4 历史文件没走 LFS 现在想迁
git lfs migrate import --include="*.png,*.jpg" --everything
git push --force origin main # 改写了历史,需要 force push⚠️ 改写历史是破坏性操作,所有人需要重新 clone。找 Allen 协调时间窗口操作。
8. 不要做的事
- ❌ 用
git add -A或git add .(会把 personal/ 也加进去) - ❌ 把 100 MB+ 的源 PSD / AI 设计稿硬塞 LFS(外链)
- ❌ 把同一张图复制 5 份分别放 5 个目录(用相对路径或 _common/ 共享)
- ❌ 在 markdown 里写 base64 嵌入图(
<img src="data:image/png;base64,...">),单页变 MB 级、wikilink 插件还可能不认 - ❌ 删掉某张图前不搜全 wiki 是否还有引用
- ❌ 改图片名不更新引用(用 IDE 全局替换或先
rg "old-name")
关联
- vault-publish — 发布流程,背后已自动配 LFS
- Docs-as-Code 发布架构 — 整体架构里 LFS 的位置
- 同事接入wiki发布流程 — 新同事接入指南
- Hermes Agents — 它们也走同一套 _assets/ 目录约定