Operator Manual · 操作手册 · 上传与建档流程
The Cyberduck Archive赛博鸭子档案库
Operator Manual

怎么上传、怎么建档

从零开始到发布一条完整档案。全部操作在浏览器里完成,不需要命令行。

预计耗时 每条约 3 分钟 必需登录 /admin
先记住一件事:文件和管理数据是分开的。视频图片放 uploads/, 文字档案是 data/entries/SP-001.json。两者靠「文件名」关联, 所以文件一旦上传就别改文件名。
  1. 打开后台

    浏览器访问 /admin。如果服务端设置了管理令牌,顶部会出现「管理令牌」面板, 粘贴令牌后点保存。令牌只存在你浏览器本地,不会上传。

    没设置令牌时是本地演示模式,任何人都能写——只能在自己电脑上这么用, 放到公网前必须设令牌。

  2. 把视频、图片拖进去

    第 01 步那个虚线框就是投放区。可以直接从文件夹拖多个文件进来,也可以点一下选文件。 上传是串行的,一个传完再传下一个,避免抢带宽。

    每个文件下面有进度条。传完后右边会出现「加入档案」按钮。

    支持格式:视频 mp4 / webm / mov / m4v,图片 jpg / png / webp / gif / avif / svg,音频 mp3 / m4a / wav / ogg / aac。 单个视频上限 4GB,图片音频 200MB。
  3. 点「加入档案」,把素材挂到条目上

    上传完成不等于已经用到档案里。必须点「加入档案」,这个文件才会挂进当前正在编辑的条目。 点完会提示「已加入 N 个素材」。

    如果编号栏还是空的,系统会自动帮你填下一个可用编号(比如视频已有 3 条就填 SP-004,音频填 YP-xxx,评论填 PL-xxx)。

    顺序很重要:加入的顺序就是档案页里媒体显示的顺序。先加封面再加大视频。

  4. 填元数据

    第 02 步。带红色星号的是必填:编号和标题。

    几个字段的用法:

    发布时间 — 精确到几点几分。原视频/文章在原平台发出来的具体时间, 能查到分钟就填到分钟。档案列表默认按这个时间倒序排(最新的在最上面)。

    分类 — 完全由你自己定。想怎么分就怎么分,比如 主线 / 支线 / 番外 / 海外 / 已删。 写过的分类会自动进下拉框,下次直接选。留空也可以。

    标签 — 逗号分隔,随便加。分类是“大归类”(一条只能一个), 标签是“横切关键词”(一条可以有多个)。两者都会出现在关系图谱和筛选条里。

    证据类型 — 这是档案库最重要的字段,决定可信度。 原始影像 自己录的/原文件; 存档转载 别人转存的,可能被压过; 截图 静帧,无法验证; 观众投稿 无法独立验证; 传闻 有说法但没物证。

    摘要 — 列表页只显示两行,写「这是什么 + 为什么重要」就够。 详细记录 — 时间、画面细节、你的推断、还待验证的点,随便写多长。

  5. 连关系:填「关联条目编号」

    这是让图谱变好看的关键字段。比如你在写 SP-007,发现它和 SP-002 有同一个黑影,就在关联栏填 SP-002。多个用逗号隔开。

    关系是双向可见的:SP-007 会显示 SP-002, SP-002 的页面下方会多出一栏「反向引用」显示 SP-007。

    小技巧:不确定关联对不对就先别填。宁可少一条边,也不要把图谱搞乱。 关系图的价值在于准确,不在于密。
  6. 保存

    点「保存档案」,或者按 Ctrl/Cmd + S。 保存成功会提示「已保存 SP-001」,并出现「查看该条 →」按钮。

    保存后立刻生效,首页、图谱、条目页都会更新,不用重启服务。

  7. 改已有的条目

    第 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,并在视频详情页的「衍生条目」里列出来。

「关联条目」和「所属主条目」不是一回事:

所属主条目   从属关系,单向。视频 → 它的音频/评论都放这里
关联条目     平级的交叉引用,双向。两条视频提到同一个东西时用

编号一旦分配就别改,因为其他条目的引用是按编号写的。

卡住了怎么办:先看浏览器控制台(F12 → Console)有没有红字。 写不进去大概率是令牌问题——顶部「管理令牌」面板重新粘一次即可。 上传报 413 是文件超限,报 415 是格式不支持。