dsh-bili-workbench
一个 DSH(DeepSeek Harness) 插件:把「刷 B站 / 素材库 / AI 出片 / 审核发布 / 自动互动」放进同一个工作台。
刷到的视频会落进素材库,出片引擎从库里取真实帧和金句;同一条视频只抓一次。不是又一个「B站信息流面板」,而是一条从看到做再到发的完整流水线。

功能
| 模块 | 做什么 |
|---|---|
| 📚 素材库 | 视频元数据、逐字稿(带时间戳)、关键帧、封面、AI 点评、可引用金句、热评、热门弹幕、热梗;按 BV 幂等,7 天内不重复抓 |
| 🎬 刷B站 | 综合热门 / 关键词搜索 / 看懂视频;按多时段 + 每日上限自动采集;每条采完自动判定、抽句、抓热评/弹幕/热梗、刷新日报 |
| ✍️ 创作 / 出片 | 一句话出方案 → 改一版(v1/v2…)→ 真实帧 + Edge-TTS 配音 + Remotion 渲染 → 1080p 成片 + 封面;库里没料时自动转成「长任务」;方案可删除(两次确认) |
| ✅ 审核 / 发布 | 待审列表、通过 / 打回、预览成片、删除成片、投稿 dry-run;真投稿默认关,打开后仍需二次确认 |
| 👤 我的 | 扫码登录 / 登出、账号数据、素材库信息、运行日志、模型健康检查、发布权限 |
| 💬 自动互动 | 可选:每条采到的视频自动留一条评论并 @ 你、称呼你;有人回复就自动回;主人身份与只读指令;12 秒发送间隔 + 每日上限;默认关 |
环境要求
- DSH
>= 0.2.1-rc.1(dsh --version) - Node.js
>= 22 - bili-cli(命令名
bili,PyPI 包bili-agent)—— 账号操作的“手” - ffmpeg(需要
libass,烧字幕用) - edge-tts(配音)
- Chrome 或 Edge(Remotion 渲染用,自动探测)
- 一个 OpenAI 兼容的模型端点(用于判定、写方案、写评论)
安装
方式 A:从 GitHub 直接装(推荐)
dsh plugin --profile web add github:Userluckytian/dsh-bili-workbench
仓库所有者是
Userluckytian;如果你 fork 了,把用户名换成自己的。pnpm 会同时安装插件依赖(Remotion / sharp)。
方式 B:克隆后 link(想改代码)
git clone https://github.com/Userluckytian/dsh-bili-workbench.git
cd dsh-bili-workbench
npm install
dsh plugin --profile web add link:$PWD
Windows PowerShell:
git clone https://github.com/Userluckytian/dsh-bili-workbench.git
cd dsh-bili-workbench
npm install
dsh plugin --profile web add "link:$PWD"
方式 C:npm(暂未发布)
dsh plugin --profile web add dsh-bili-workbench
装完重启 dsh,刷新浏览器页面,会话顶部会出现「B站工作台」页签。
外部命令
# bili-cli(需要 Python 3.10+;会装一个 bili 命令)
uv tool install bili-agent
bili auth login
# 配音
uv tool install edge-tts
# ffmpeg(Windows)
winget install Gyan.FFmpeg
# 自检
node scripts/doctor.mjs
第一次使用
- 打开 dsh → 会话顶部「B站工作台」。
- 我的 → 扫码登录(登录只在这一处;不要在别处再装老「刷B站」插件,会有两套账号)。
- 刷B站 → 刷B站设置:
- 模型链:一行一个模型名,失败会自动换下一个。
- 模型密钥:
llmKey(也可以设环境变量OC_API_KEY)。 - 模型端点:环境变量
BILI_OP_LLM_BASE,默认http://127.0.0.1:40080/v1。
- 点「立即跑一轮」,确认能采集、判定、写日报。
- 需要出片时,去「创作 / 出片」生成方案并渲染。
自动互动:默认关,打开前请读完
自动互动会用你的账号公开发评论 / 回复。为了安全,插件内置默认是:
定时自动刷 关
自动评论 关
自动回复 关
私信监听 关
真投稿 关
打开「自动评论」后,当天每条采到的视频都会留一条评论并 @ 你;打开「自动回复」后,有新回复会自动回。发送间隔固定 12 秒(B站要求至少 10 秒),并有每日上限。命中风控 / 限流 / 操作间隔会立即停止本轮,失败条目不写账本,下一轮再补。
手动「评论 / 回复 / 私信」仍然默认 dry-run:只生成并打印将要提交的内容,不真正发送;勾「真的发」才会发。
公开内容一旦发出就可能被缓存或转发。请自行确认账号、内容和使用场景符合 B站 的社区规则。
主人身份与只读指令
在「刷B站 → 刷B站设置」里填两个字段:
| 字段 | 说明 |
|---|---|
| 主人 UID | 你的 B站 UID(例如 498295893)。只有这个 UID 会被当主人 |
| 称呼 | 自动评论 / 回复里怎么称呼你,默认「老弟」 |
设置后:
- 自动评论会在正文里自然称呼你,并把这条评论
@到你(--at 主人UID)。 - 自动回复能区分主人和普通用户:主人留言即使已被界面标记已读也会处理;普通用户仍只回新消息。
- 主人可以问只读问题,答案从本地素材库和互动账本实时计算:
- 「今天逛了多少视频?」
- 「设定的时间是多久 / 时段是什么?」
- 「今天评论、回复多少条?」
- 非主人询问统计、配置、权限、密钥、路径等,会收到一句礼貌拒绝(不沉默、不给数据);让机器人代发/代删/代传的指令同样拒绝。
- 主人要求改配置、投稿、删除、私信、发评论时,只回复“去工作台手动改”,不会在评论里执行。
- 数据类回答会带人设语气:先用本地素材库和账本算出准确数字,再交给模型改写;改写后逐个核对数字,少一个、多一个或改写失败都会自动退回原句。称呼固定用账号设置里的「老弟」。
- 自动回复会跳过账本里已回复的
rpid和自己刚发出的回复文本,避免自问自答循环。
多人 @:设置页「额外 @(可多人)」可以加多个人,每个填「UID 或昵称」和「称呼」(例如爸爸、妈妈)。自动评论会把这些人都 @ 上,并在正文里自然喊出对应称呼;模型漏写时会把缺的称呼补在开头。
B站 一条评论最多
@3 个人,所以主人 UID + 最多再加 2 个;主人 UID 会自动@,不用重复添加。
人设是身份,不是记忆:设置页「人设」描述角色是谁、怎么说话、什么不能做,每次生成都放在提示词最前面,不会写进记忆,也不会被任务复盘改写。账号归属(谁在用这个号)和说话人格分开处理。
自己的视频(B站合集):在设置页填一个合集链接(如 https://space.bilibili.com/<UID>/lists/<ID>),插件会缓存里面每集的标题和日期。写评论、回复、方案时会挑「和当前话题相关的几集 + 最近几集」作为参考,明确要求不硬提、不编造,同样不写进记忆。启动时检查一次,之后每 6 小时看是否过期,也可以点「更新合集」立即刷新。
长期记忆:它记得住(1.0.0)
插件自带一套三层记忆,让它越用越顺手:
| 层 | 是什么 | 在哪看 |
|---|---|---|
| 主人画像(USER.md) | 你的口味和纠正:「标题别超过 18 字」「别用某梗」,跨场景生效 | 我的 → 记忆 |
| 工作台笔记(MEMORY.md) | 环境的坑:B站 限制、渲染参数、恢复办法 | 我的 → 记忆 |
| 经历流(events.jsonl) | 它经历过什么:看过哪些视频、出过什么方案、渲染/审核/评论结果 | 我的 → 记忆 |
怎么用:
- 写下来:主人在 B站 评论/回复里说「记住:标题别超过 18 字」,会自动进主人画像并回复确认;普通用户的「记住」会被礼貌拒绝。设置页「人设」下方也有「让咕嘎有记忆」总开关(关掉后行为回到无记忆版本)。
- 自己长记性:每次方案 / 渲染 / 审核 / 投稿结束后自动「复盘」,从最近经历里提炼跨次有效的偏好写进画像(只增不改、每条 ≤60 字、人设永不写入);「我的 → 记忆」里能看、能删、能点「立即复盘」。
- 想起旧素材:出方案和写评论时,会按题材把经历流里相关的过往经历想起来(长任务日志会显示「想起 N 条相关经历」),前两天看过的剧今天就能用上。
- 安全:记忆是纯文本(
<素材库>/memory/),可手改;命中注入扫描(「忽略以上指令」类)的条目写入被拒、注入时替换[BLOCKED]、界面标红;无人值守的修改/删除进待批区等批准。
主人 @ 任务:看视频 / 看评论 / 要总结
用主人账号在任意 B站 视频评论里 @ 它,写清要什么:
| 你说 | 它做什么 |
|---|---|
总结一下这个视频 BV... |
看视频(字幕 + AI 摘要 + 数据)并总结 |
看看这条视频的评论 BV... |
总结评论区:主要观点、梗、争议、整体氛围 |
视频和评论都看看 BV... |
两者都做 |
只 @ 它、不写 BV |
用你这条评论所在的视频 |
交付规则(重点):
- 默认:总结只走私信 / 工作台,不往评论区发,长文不会进评论区。
- 说「别发评论区 / 不要回复」→ 只发私信。
- 说「私信我」→ 只发私信。
- 说「回评论区」→ 压缩成 ≤45 字短版回评论(同时说「私信」就再发一份全文)。
- 没给 BV → 回一句问你要。
- 私信需要先在「我的」里扫码登录 bili-cli;没登录(B站返回 -101)时,全文留在工作台「消息 → 主人请求」,记录里会提示重新扫码。
- 每 3 分钟检查一次
@,每天最多处理 10 个;每次结果都留在工作台,可以点开看全文。
私信单条最多 500 字,长总结会拆成 2–4 条发;再长会截断并提示看工作台全文。
主人身份只影响回复策略,不会绕过 B站 的权限或风控;所有发送仍然是实名公开操作。
长任务:素材不够,自己去刷 B站
在「创作 / 出片」写一句需求(例如“找找素材,出一期新三国的名场面的热梗集锦”),不需要等它立刻出片:
- 先查素材库,按需求拆出的关键词匹配「相关且可用」的视频(有字幕或金句)。
- 够料(默认 3 条)就直接写分镜方案。
- 不够就自己去「刷B站」:按关键词搜索 → 采集字幕 / 关键帧 / 热评 / 弹幕 → 判定抽句 → 再查库。
- 还不够就每 3 小时再找一轮,最多找 5 天;期间任务卡一直显示进度。
- 够料后自动生成方案,停在「方案已生成」,不会自动渲染、不会自动投稿。
创作页下方会为每个任务显示一张卡片,状态包括:
| 状态 | 含义 |
|---|---|
| 排队中 | 刚创建,等宿主开跑 |
| 检查素材库 | 正在按关键词查库 |
| 逛 B站 中 | 正在搜索、采集、判定 |
| 素材不足,继续找 | 这一轮没凑够,过几小时再来 |
| 写方案中 | 素材够了,正在写分镜 |
| 方案已生成 | 可以去下面看方案,再决定是否渲染 |
| 已暂停 / 已停止 | 手动暂停,或到期/出错停止 |
卡片上有「现在再找一轮」「暂停 / 继续」「删除」「查看方案」。任务记录在素材库的 tasks.json;宿主重启后,跑到一半的任务会自动恢复排队。
任务自己采到的新视频也会按「自动评论」设置留评论并 @ 主人,和日常采集共用同一条每日上限。
审核 / 发布怎么走
在「创作 / 出片」点「开始渲染」之后,不需要再回创作页做任何操作。成片一完成,就会自动出现在「审核 / 发布」列表(页面每 5 秒刷新一次)。
- 审核按**成片(run)**为单位:同一方案重新渲染会生成一条新成片,需要重新点「通过」。
- 「预览」可以直接播放成片;「删除成片」只删本地
renders/<runId>,不会删除 B站 上已经发布的内容;关联项目会回到草稿,可以重新渲染。 - 在创作页「删除方案」只删方案本身,已经渲染的成片会留在「审核 / 发布」,需要单独删除。
- 「投稿 dry-run」会完整打印标题、标签、分区、封面、简介和命令,但不会真的发布。
- 「真投稿」默认关闭:先到「我的 → 发布权限」打开「允许真投稿」,再对成片点「通过」,之后才会出现可用的「真投稿」,发送前还有一次确认。
数据与配置
默认数据目录:
~/.dsh-bili-workbench/store/
videos/<BV>.json 视频事实 + 判定 + 金句
subs/<BV>.json 逐字稿
frames/<BV>/ 关键帧
covers/<BV>.jpg 封面
plans/<项目>/ 方案与版本
renders/<runId>/ 成片、封面、字幕、配音(升级插件不会丢)
reports/YYYY-MM-DD.md 素材日报
config.json 设置(含模型密钥,注意不要提交)
interactions.json 已评论 / 已回复账本
tasks.json 长任务(素材不够自己去刷B站)
默认位置是 ~/.dsh-bili-workbench/store;从原项目迁移的机器上,如果存在 D:\AI_projects\bibilili\bili-store 且没有设置 BILI_STORE,会自动使用旧目录。也可以:
- 在「我的 → 素材库与运行 → 素材库位置」里直接改,保存后即时切换;新目录为空时会复制现有素材
- 用环境变量
BILI_STORE指定
选择过的位置会写进 ~/.dsh-bili-workbench/location.json,重启后保持不变。
常用环境变量:
| 变量 | 作用 |
|---|---|
BILI_STORE |
素材库目录 |
BILI_OP_DIR |
出片引擎目录(默认用插件内置的 bili-op/) |
BILI_OP_LLM_BASE |
OpenAI 兼容端点,默认 http://127.0.0.1:40080/v1 |
OC_API_KEY |
模型密钥(没设则读 config.json 的 llmKey) |
BILI_OP_CHROME |
指定 Chrome / Edge 可执行文件 |
BILI_BIN |
指定 bili 可执行文件 |
目录
index.js dsh 宿主半端:路由 / 调度 / 子进程编排
client.js 浏览器半端:工作台界面
engine/ 采集、判定、日报、方案、渲染、互动、账本、长任务
engine/task.mjs 长任务:拆词 → 查库 → 逛B站 → 写方案
engine/taskstore.mjs 任务账本(tasks.json)
bili-op/ 出片引擎:脚本 → edge-tts → Remotion → ffmpeg → 封面
cordis.patch.yml dsh bundle patch
scripts/doctor.mjs 环境自检
常见问题
装完没有「B站工作台」页签?
先确认 dsh >= 0.2.1-rc.1;装完必须重启 dsh,再刷新浏览器。看 dsh 的启动日志有没有插件加载错误。
渲染报“找不到 Remotion CLI”?
说明依赖没装到包根。重新执行 npm install(方式 B),或重装插件(方式 A)。脚本会按 Node 解析规则找 @remotion/cli,不再写死 render/node_modules。
渲染时报找不到浏览器?
装 Chrome 或 Edge;也可以用 BILI_OP_CHROME 指定路径。Linux/macOS 下请把 bili-op/render/src/News.tsx 和 bili-op/cover.mjs 里的字体改成系统有的字体。
审核 / 发布里为什么没有「真投稿」?
真投稿默认是关的(publishEnabled: false)。先到「我的 → 发布权限」打开「允许真投稿」,再在审核卡上点「通过」,才会出现可用的「真投稿」按钮。投稿前建议先点「投稿 dry-run」:它会把标题、标签、分区、封面、简介完整打印出来,但不会真的发布。
渲染完成后「预览成片」还是灰的?
先确认成片文件存在:<素材库>/renders/<runId>/final-subbed.mp4。旧版本把成片放在插件的 bili-op/runs,升级重装会清掉;0.4.2 起已改到素材库目录,并会自动迁移旧成片。如果项目显示「已完成」但文件确实不存在,重启 dsh 后会自动改回草稿,重新渲染即可。
ffmpeg 烧字幕失败?
需要带 libass 的 ffmpeg:ffmpeg -filters | grep subtitles。
模型一直 429? 模型链会自动退避换下一个;也可以在设置里换一个可用的模型或端点。
pnpm 提示忽略了构建脚本?
在 dsh profile 目录执行 pnpm approve-builds,允许 sharp / Remotion 的平台包,然后重装。
安全边界
- 不自动投稿:
publishEnabled默认false。 - 不自动私信:私信监听默认关。
- 自动评论 / 回复默认关;手动流程默认 dry-run。
- 账号凭证由
bili管理,不写进本仓库;bili-store/config.json可能含模型密钥,已被.gitignore排除。
致谢与许可
本项目以 MIT 发布。
灵感来源:
- dsh-bili-scroll(c1overzz,MIT)—— 前身「刷B站」插件,字段、调度与互动设计参考
- bili-cli(kukemc,MIT)—— B站 账号操作 CLI
其他运行时依赖(Remotion、edge-tts、FFmpeg 等)遵循各自许可证,详见 NOTICE.md。Remotion 不是 OSI 许可证,商业使用前请自行确认其授权条款。
本项目与哔哩哔哩官方无关联。使用本工具产生的账号行为、内容与后果由使用者自行承担。
No comments yet. Be the first to write one.