怎么上传、怎么建档
从零开始到发布一条完整档案。全部操作在浏览器里完成,不需要命令行。
uploads/,
文字档案是 data/entries/SP-001.json。两者靠「文件名」关联,
所以文件一旦上传就别改文件名。
-
打开后台
浏览器访问
/admin。如果服务端设置了管理令牌,顶部会出现「管理令牌」面板, 粘贴令牌后点保存。令牌只存在你浏览器本地,不会上传。没设置令牌时是本地演示模式,任何人都能写——只能在自己电脑上这么用, 放到公网前必须设令牌。
-
把视频、图片拖进去
第 01 步那个虚线框就是投放区。可以直接从文件夹拖多个文件进来,也可以点一下选文件。 上传是串行的,一个传完再传下一个,避免抢带宽。
每个文件下面有进度条。传完后右边会出现「加入档案」按钮。
支持格式:视频mp4 / webm / mov / m4v,图片jpg / png / webp / gif / avif / svg,音频mp3 / m4a / wav / ogg / aac。 单个视频上限 4GB,图片音频 200MB。 -
点「加入档案」,把素材挂到条目上
上传完成不等于已经用到档案里。必须点「加入档案」,这个文件才会挂进当前正在编辑的条目。 点完会提示「已加入 N 个素材」。
如果编号栏还是空的,系统会自动帮你填下一个可用编号(比如视频已有 3 条就填
SP-004,音频填YP-xxx,评论填PL-xxx)。顺序很重要:加入的顺序就是档案页里媒体显示的顺序。先加封面再加大视频。
-
填元数据
第 02 步。带红色星号的是必填:编号和标题。
几个字段的用法:
发布时间 — 精确到几点几分。原视频/文章在原平台发出来的具体时间, 能查到分钟就填到分钟。档案列表默认按这个时间倒序排(最新的在最上面)。
分类 — 完全由你自己定。想怎么分就怎么分,比如
主线/支线/番外/海外/已删。 写过的分类会自动进下拉框,下次直接选。留空也可以。标签 — 逗号分隔,随便加。分类是“大归类”(一条只能一个), 标签是“横切关键词”(一条可以有多个)。两者都会出现在关系图谱和筛选条里。
证据类型 — 这是档案库最重要的字段,决定可信度。
原始影像自己录的/原文件;存档转载别人转存的,可能被压过;截图静帧,无法验证;观众投稿无法独立验证;传闻有说法但没物证。摘要 — 列表页只显示两行,写「这是什么 + 为什么重要」就够。 详细记录 — 时间、画面细节、你的推断、还待验证的点,随便写多长。
-
连关系:填「关联条目编号」
这是让图谱变好看的关键字段。比如你在写
SP-007,发现它和SP-002有同一个黑影,就在关联栏填SP-002。多个用逗号隔开。关系是双向可见的:
SP-007会显示SP-002,SP-002的页面下方会多出一栏「反向引用」显示SP-007。小技巧:不确定关联对不对就先别填。宁可少一条边,也不要把图谱搞乱。 关系图的价值在于准确,不在于密。 -
保存
点「保存档案」,或者按 Ctrl/Cmd + S。 保存成功会提示「已保存 SP-001」,并出现「查看该条 →」按钮。
保存后立刻生效,首页、图谱、条目页都会更新,不用重启服务。
-
改已有的条目
第 04 步「已有档案」列表里,每条右边有「编辑 / 查看 / 删」。
点「编辑」会把全部字段载回表单,包括已挂的素材。改完再保存,覆盖原来那条 (
createdAt保留,只更新updatedAt)。注意:编辑时如果先把素材都删了再从素材库加,顺序会变。 如果只是想改文字,别动素材区。
文件到底存在哪
cyberduck-archive/
├── server.js 服务端(零依赖)
├── uploads/ 你上传的所有文件
│ ├── video/ CD-xxx 的原始视频
│ ├── image/ 截图、封面
│ └── audio/ 音频
├── data/entries/ 每条档案一个 json
│ ├── SP-001.json
│ └── PL-001.json
└── public/ 前端页面
├── index.html 档案馆首页
├── entry.html 单条档案模板
├── graph.html 关系图谱
├── admin.html 上传后台
├── guide.html 这页
├── css/archive.css 全部样式
└── js/ 前端脚本
备份 = 直接复制 uploads/ + data/ 两个文件夹。
没有数据库,不需要导出,拷走就是完整档案。
启动和放到公网
本地跑:
cd cyberduck-archive
node server.js
# → http://localhost:8787
带着管理令牌跑(公网必须):
ADMIN_TOKEN='你自己定一串足够长的随机字符' node server.js
换端口:
PORT=3000 node server.js
ADMIN_TOKEN,否则任何人都能删你的档案;
② 前面套一层 Nginx 或 Caddy 做 HTTPS;
③ 视频很占带宽,1 小时 1080P 视频几百 MB,访问量上来要上对象存储(R2/B2/OSS),
否则服务器流量会烧穿。
Nginx 反代示例(顺便解决大文件上传限制):
server {
listen 443 ssl http2;
server_name your-domain.com;
# 放宽上传体积,否则 Nginx 默认 1MB 会直接 413
client_max_body_size 4096m;
client_body_timeout 300s;
location / {
proxy_pass http://127.0.0.1:8787;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off; # 视频流必须关,否则拖进度条会卡
}
}
上传文件名的规矩
系统会自动处理文件名:保留中文,去掉 / \ : * ? " < > | 这类非法字符,
重名自动加序号(门呢.mp4 → 门呢-1.mp4),绝不覆盖。
建议自己命名成有信息量的形式,方便以后在素材库认出来:
SP-001_门呢_20261017.mp4
SP-007_小红书泄露_20261026_0344.mp4
PL-012_评论截图_8814回复.png
格式固定为 编号_内容_日期,以后档案一多,光看文件名就知道是什么。
删东西前想一下
SP-00X.json,
uploads/ 里的视频图片还在,可以重新挂到别的条目上。
反过来,删素材文件会让引用它的档案失去媒体,而且没得恢复。
删素材要确认两次,且素材库的删除按钮只在鼠标移上去才显示,就是为了防误点。
编号怎么分配
按建档顺序编号,不按发布时间。这样即使后面发现 10 月 17 日漏了一条,
补成 SP-092 也没问题——档案页里显示的是真实发布时间,
编号只是索引号。
前缀用两个字母表示内容形态,看编号就知道这一条是什么:
SP-xxx 视频(Shipin)—— 视频本体,通常是主条目
YP-xxx 音频(Yinpin)—— 视频抽取的声音,挂在 SP 下
PL-xxx 评论(Pinglun)—— 评论区内容,挂在 SP 下
TP-xxx 图片
JT-xxx 截图
衍生项要用「所属主条目」字段挂到主条目下,不要只写在「关联条目」里。
比如一条评论是 SP-001 下面的,就把「所属主条目」填 SP-001,
页面会自动显示成 SP-001 - PL-001,并在视频详情页的「衍生条目」里列出来。
「关联条目」和「所属主条目」不是一回事:
所属主条目 从属关系,单向。视频 → 它的音频/评论都放这里
关联条目 平级的交叉引用,双向。两条视频提到同一个东西时用
编号一旦分配就别改,因为其他条目的引用是按编号写的。