dsh-bili-mini
Manifest validWatch Bilibili in the DSH sidebar: supports the recommendation feed, 1080P, danmaku, QR code login, and history sync. Doesn't consume Tokens.
BiliMini
为 DeepSeek Harness 打造的极客风 B 站侧边栏
推荐流 · 点击即播 · 实时弹幕 · DASH 1080P · 扫码登录 · 历史同步 · 状态持久化 · 0 Token
不离开工作台,也能刷 B 站。
一眼看懂
┌─ BiliMini ──────────────────────────────────────────┐
│ 推荐 | 历史 [1080P ▾] [同步] [×] │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 封面 │ │ 封面 │ │ 封面 │ │
│ │ 标题 │ │ 标题 │ │ 标题 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ 点击卡片 → ArtPlayer + DASH + 实时弹幕 │
└──────────────────────────────────────────────────────┘
BiliMini 把 B 站推荐流、播放器、弹幕、账号登录、历史记录和画质切换塞进 DSH 的侧边栏。没有额外窗口,没有浏览器标签页,也没有大模型调用。
简介
BiliMini 是一个面向 DeepSeek Harness 的第三方侧边栏插件。它注册在 DSH 的 sidebar.panellist,打开即可浏览推荐视频;点击卡片后在同一面板内播放,支持弹幕、DASH 720P/1080P、扫码登录、个性化推荐、历史记录与可选的观看进度同步。
整个插件运行在本地 DSH Host 中:账号 Cookie 只保存在本机,媒体流通过本地代理转发,前端只拿播放所需的短期令牌。插件不调用任何 LLM API,因此浏览和播放不会消耗 DSH Token。
非 B 站官方项目,与哔哩哔哩、DeepSeek、DSH 官方均无关联。
核心特性
| 特性 | 说明 | |
|---|---|---|
| 🧩 | 侧边栏推荐 | 直接在 DSH 内刷 B 站推荐流,支持刷新与换一批 |
| 🎬 | 点击即播 | ArtPlayer + 本地流代理,支持 Range 拖动进度 |
| 💬 | 实时弹幕 | B 站 XML 弹幕,支持开关、速度、透明度、字号、模式等设置 |
| 🎚️ | DASH 720P/1080P | 登录态使用 DASH 独立音视频轨;播放器右上角切换画质,保留当前进度 |
| 🔐 | 本地安全登录 | B 站扫码登录;SESSDATA / bili_jct 只存在 Host 本地,前端不可见 |
| ✨ | 个性化推荐 | 登录后自动带 Cookie 请求;退出后回退匿名推荐 |
| 🕘 | 历史记录 | 最近 30 条观看记录,支持继续播放 |
| 🔄 | 历史同步 | 按网页播放器的方式节流上报进度;可选关闭,失败静默 |
| 🧠 | 状态持久化 | 记住 Tab、列表缓存和当前播放进度;切换对话/插件再回来不重置 |
| 🪶 | 0 Token | 不调用大模型,不产生 LLM Token 费用 |
| 📦 | 零构建 | 无 npm 运行时依赖、无构建步骤,播放器/弹幕/DASH/二维码均已内置 |
| 🖥️ | 多端兼容 | macOS 为开发与主要验证平台;Windows 已做路径、权限、回环地址适配 |
安装
从 npm 安装(推荐)
dsh plugin add dsh-bili-mini
如果你的 DSH 版本要求显式 npm spec:
dsh plugin add npm:dsh-bili-mini
如果你的 DSH 使用显式 profile:
# 桌面版通常使用 desktop
dsh plugin --profile desktop add dsh-bili-mini
# Web 版
dsh plugin --profile web add dsh-bili-mini
也可以先检查 npm 包内容:
npm view dsh-bili-mini
安装后完整退出并重新打开 DSH,然后在侧边栏打开 BiliMini。
从 GitHub 安装(源码)
dsh plugin add https://github.com/tuanzhanghao/dsh-bili-mini
部分 DSH 版本也接受 GitHub 简写:
dsh plugin add github:tuanzhanghao/dsh-bili-mini
Host 代码更新后需要完整重启,而不是只刷新网页。从源码安装时,如果 pnpm 询问
allowBuilds:本项目没有构建脚本、原生依赖或postinstall,只在你信任本仓库时授权。
本地开发安装
dsh plugin add /path/to/dsh-bili-mini
把 /path/to/dsh-bili-mini 替换成你的本地仓库目录。
环境要求
- DSH 桌面版或 Web 版;
- Node.js 20+(DSH 通常已内置);
- 无需安装 npm 依赖,无需构建;
- 支持 MSE 的 Chromium/Electron 内核(DASH 播放需要)。
使用
- 在 DSH 侧边栏打开 BiliMini;
- 浏览推荐流,点击任意卡片开始播放;
- 播放器支持进度拖动、音量、全屏、画中画;
- 播放器右上角可选择 720P / 1080P(登录后按视频实际可用轨显示);
- 弹幕按钮位于播放器控制条,可在设置中调整样式;
- 点击右上角 登录,用 B 站手机客户端扫码;
- 登录后推荐流变为个性化,顶部显示头像与昵称;
- 点击 历史 查看最近观看记录,点击卡片继续播放;
- 播放器右上角的 同步历史 开关控制是否把进度写回 B 站,默认开启;
- 切换到其他对话/插件再回来,Tab、列表和播放进度会恢复。
DASH 与画质
| 状态 | 播放模式 | 可用画质 |
|---|---|---|
| 未登录 | 渐进式 MP4 | 最高 720P |
| 已登录 | DASH(独立视频/音频轨) | 720P / 1080P,取决于视频与账号权益 |
| 1080P+ / 4K | 未在 UI 开放 | 需要对应会员与视频权限 |
实现要点:
- 登录态请求
fnval=16,后端解析dash.video/dash.audio,生成静态 MPD; - 视频与音频分别通过本地
/bili-mini/stream/<token>代理,支持 HTTP Range; - MPD 通过
/bili-mini/dash/<token>提供,BaseURL使用当前 Host 的绝对地址; - 前端懒加载内置的 dash.js,通过 ArtPlayer
customType接入 MSE; - 切换画质时重新请求目标画质,记录当前
currentTime,新播放器ready后 seek 回原位置; - 切换/关闭时先
dash.destroy()再art.destroy(),避免双音频与实例泄漏。
说明:
- 720P 匿名可用;1080P 需要登录,并且依赖视频本身提供 1080P 轨、账号具备相应权益;
- 1080P+(qn=112)和 4K 当前不在 UI 中暴露;
- 本项目不做 DRM 绕过,只播放账号本来有权访问的流;
- 画质切换是“保留进度的短重载”,不是帧级无缝切换。
状态持久化
状态保存在 client 模块内部的内存对象 panelMemory 中:不挂 window、不写 localStorage/sessionStorage、不写 Cookie。面板组件卸载再挂载时状态仍在;整页刷新会清空。
弹幕偏好与“同步历史”开关仍使用 localStorage,这是纯 UI 设置,不包含 Cookie、UID、昵称或播放令牌。
| 内容 | 行为 |
|---|---|
| 当前 Tab | 推荐/历史;切换对话或插件后保持 |
| 推荐列表 | 5 分钟内直接复用缓存,不显示骨架屏、不重复请求 |
| 历史列表 | 5 分钟内直接复用缓存;手动刷新强制请求 |
| 当前播放 | 记住选中卡片、播放数据与进度;3 小时内切回来自动恢复并 seek |
| 登录/退出 | 清空推荐与历史缓存,避免串号或显示旧账号内容 |
| 整页刷新 | 内存清空,回到默认推荐 Tab |
播放恢复依赖播放响应里的 stream/manifest 临时令牌(有效期约 3 小时),因此缓存时间与令牌 TTL 对齐;过期后不会拿旧令牌强行播放。
安全与隐私
BiliMini 涉及 B 站账号 Cookie,边界如下:
| 项目 | 实现 |
|---|---|
| Cookie 位置 | 仅本地 Host 的 data/cookie.json;不写前端 localStorage/sessionStorage |
| POSIX 权限 | 数据目录 0700,Cookie 文件 0600 |
| Windows 权限 | 不调用 chmod,交由用户目录 ACL |
| 前端可见性 | 前端只拿 loggedIn、昵称、头像;永远拿不到 SESSDATA / bili_jct |
| 网络范围 | 带 Cookie 的请求只发往 *.bilibili.com |
| 重定向 | redirect: "error",避免 Cookie 被带到第三方 |
| 二维码 | 后端本地生成,不使用第三方二维码服务 |
| 日志 | 后端错误统一 redact();第一方代码不打印 Cookie、SESSDATA 或接口原始响应 |
| 媒体令牌 | 随机、短期、仅本地使用;不写入磁盘 |
| 退出登录 | 删除 data/cookie.json 及临时文件 |
| 版本管理 | .gitignore 已忽略 data/、cookie.json、*.log、.env*、.dsh-ops/ |
BiliMini 没有遥测、埋点、远程配置或第三方中转服务器。推荐、播放、弹幕、登录和历史同步都只在本机 DSH Host 与 B 站之间发生。
发布、打包或分享代码前,请确认
data/cookie.json不存在。.gitignore只能阻止 Git 提交,不能阻止手动压缩、网盘同步或上传。如果使用中的已安装插件仍处于登录状态,请在插件内点“退出登录”,或删除该安装目录下的
data/cookie.json;本仓库源码目录不包含任何 Cookie。
平台支持
| 平台 | 状态 | 说明 |
|---|---|---|
| macOS | ✅ 完美支持 | 开发与主要验证平台;DASH、弹幕、登录、历史同步均已实机验证 |
| Windows | ✅ 已做适配 | 路径、权限、文件替换、回环地址均已处理;未覆盖所有 Windows 版本 |
| Linux | ⚠️ 理论可用 | 未做专项验证,欢迎反馈 |
| DSH Web | ✅ 支持 | 需要浏览器支持 MSE;Firefox/Safari 的 DASH 行为可能不同 |
| DSH Desktop | ✅ 支持 | Electron/Chromium 内核,推荐使用 |
Windows 细节:
- 所有路径使用
path.join/fileURLToPath,不依赖/tmp或 macOS 固定路径; - Windows 下不调用
fs.chmod,Cookie 文件权限交由用户目录 ACL; rename失败时使用copyFileSync兜底,避免杀毒/索引器短暂占用;- 媒体地址中的
localhost/::1归一化为127.0.0.1,避免系统代理或双栈解析拦截。
已知限制
- 1080P 依赖登录与 DASH:匿名只有 720P;1080P 还取决于视频轨与账号权益;
- 1080P+ / 4K 未开放:qn=112 及更高画质当前不在 UI 中暴露;
- 不提供 DRM 绕过、去广告或付费内容破解;
- B 站接口、风控、区域限制和 Cookie 有效期都可能影响推荐、播放与历史同步;
- 历史同步是 best-effort,失败会静默,不保证 100% 写入;
- 画质切换是短重载,会有一瞬间的播放器初始化;
- 状态持久化是进程内内存,整页刷新或重启 DSH 后会重置;
- 侧边栏宽度有限,复杂播放器设置可能需要横向滚动;
- 本插件不提供视频下载功能。
为什么是 0 Token
BiliMini 只使用 B 站公开接口与本地播放器:
- 不调用大模型;
- 不消耗 LLM Token;
- 不需要 API Key;
- 不把观看内容发送给模型服务。
它消耗的只有正常的网络流量和本地 CPU/GPU 解码资源。
架构
DSH Client (React)
│ /bili-mini/api/feed · /play · /history · /login · /history/report
│ /bili-mini/dash/<token> · /bili-mini/stream/<token>
▼
DSH Host (Node.js)
│ Cookie 本地保存 · 请求头补齐 · DASH MPD · Range 流代理 · 日志脱敏
▼
Bilibili API / CDN
主要模块:
index.js:Host 路由、推荐/播放/历史/登录 API、DASH MPD、流代理、CORS、缓存;bili.js:B 站接口封装、DASH 轨道归一化、历史与进度上报;auth.js:扫码登录、Cookie 原子写入、权限、脱敏;danmaku.js:弹幕 XML 解析与格式转换;client.js:React 侧边栏 UI、ArtPlayer、dash.js、弹幕插件、面板状态缓存;vendor/:ArtPlayer、artplayer-plugin-danmuku、dash.js、qrcode-generator 的内置版本。
内置依赖:
- ArtPlayer 5.x(MIT);
- artplayer-plugin-danmuku 5.x(MIT);
- dash.js 4.7.4(BSD-3-Clause);
- qrcode-generator 1.4.4(MIT)。
项目结构
dsh-bili-mini/
├── .gitignore
├── LICENSE
├── README.md
├── package.json
├── cordis.patch.yml
├── icon.svg
├── index.js
├── bili.js
├── auth.js
├── danmaku.js
├── client.js
├── locale/
│ ├── en.json
│ └── zh.json
└── vendor/
├── README.md
├── LICENSE.artplayer
├── LICENSE.artplayer-plugin-danmuku
├── LICENSE.dashjs
├── LICENSE.qrcode-generator
├── artplayer.js
├── artplayer-plugin-danmuku.js
├── dash.all.min.js
├── dash.all.min.js.LICENSE.txt
└── qrcode-generator.cjs
data/ 是运行时目录(登录后创建),已被 .gitignore 忽略,不随仓库发布。
开发
本项目没有构建步骤,源码直接运行:
node --check index.js
node --check bili.js
node --check auth.js
node --check danmaku.js
node --check client.js
# 检查 npm 发布内容,确认不包含 data/、Cookie、日志或本地文件
npm pack --dry-run
约定:
- 保持零运行时 npm 依赖;
- 第三方浏览器资源继续使用
vendor/,不引入 CDN; - Host 代码中的错误信息统一走
redact(); - 不提交 Cookie、真实 UID、昵称、头像、本地绝对路径或接口原始响应;
- 修改 Windows 相关代码时同时检查路径、权限与回环地址。
常见问题
登录后仍然只有 720P?
先确认当前账号已登录、视频本身提供 1080P DASH 轨,并且账号具备对应权益。部分视频、地区或账号只返回 720P;1080P+ 不在 UI 中开放。
切换 1080P 会闪一下?
这是设计行为:切换画质会重新生成 MPD 并创建 dash.js 实例,随后 seek 回切换前的时间点,不是帧级无缝切换。
切换到其他对话/插件再回来,Tab 或播放进度重置?
正常应保持。若整页刷新或重启 DSH,内存缓存会清空。若面板模块被 DSH 重新加载,也会重置;可在 Issue 中附上 DSH 版本与复现步骤。
历史同步没有记录?
确认已登录且播放器右上角“同步历史”为开启状态。B 站写接口可能触发风控或限流,插件会静默失败,不影响播放。
二维码不显示 / 登录 404?
确认安装后已完整重启 DSH,而不是只刷新页面。Host 代码更新后尤其需要重启。
Cookie 存在哪里?如何退出?
<插件目录>/data/cookie.json
macOS 为 0600;Windows 使用用户目录 ACL。退出登录会自动删除该文件及临时文件。也可以直接删除 data/cookie.json。
Windows 上无法播放或拖动?
确认媒体地址使用 127.0.0.1 而不是 localhost;本项目已自动归一化。若仍有问题,请附上 DSH 日志中的脱敏错误。
免责声明
本项目仅用于学习与技术交流,与哔哩哔哩、DeepSeek、DSH 官方均无关联。
- B 站接口可能随时调整或触发风控,推荐、播放、历史同步等功能不保证长期可用;
- 请遵守 B 站用户协议与相关法律法规,不要用于批量抓取、账号滥用或其他违规用途;
- 本项目不提供破解、去广告或绕过付费内容的能力;
- 使用本项目产生的任何后果由使用者自行承担,作者不对账号风险、数据丢失或服务中断负责。
参与贡献
欢迎提交 Issue 和 Pull Request。
- 提交前请确保不包含
data/cookie.json、Cookie、真实 UID、昵称、头像或本地绝对路径; - 不要提交接口原始响应、调试日志或带个人信息的截图;
- 代码保持零运行时依赖,优先使用 Node 原生
fetch/fs/path; - 播放器、弹幕、DASH、二维码资源继续使用 vendored 版本;
- Windows 相关改动请同时验证路径、权限与回环地址。
License
MIT © 2026 tuanzhanghao
致谢
- ArtPlayer — MIT
- artplayer-plugin-danmuku — MIT
- dash.js — BSD-3-Clause
- qrcode-generator — MIT
- DeepSeek Harness
如果 BiliMini 让你的摸鱼更快乐,点个 Star ⭐
Comments
Loading…
Similar plugins
by pyf2818
🎬 DSH (DeepSeek Harness) B站悬浮看片插件:边 coding 边刷视频。推荐/热门/排行/搜索/关注UP主、自动连播、迷你模式、历史持久化
★ 4
MIT
JavaScript
Aug 17, 2026
dsh plugin --profile web add @dsh-external/dsh-bili-widgetby annasleepy
给 dsh-bili-scroll 补上 B站 点赞/收藏/关注/转发/发动态(默认关 + 代码级硬上限)
★ 0
MIT
JavaScript
Oct 19, 2026
dsh plugin --profile web add dsh-bili-interactby Suguyun
跨平台 fork of dsh-bili-widget:DSH B站悬浮看片小窗(Node 原生 fetch,macOS/Linux/Windows 通用)
★ 0
NOASSERTION
JavaScript
Aug 28, 2026
dsh plugin --profile web add @dsh-external/dsh-bili-miniplayby c1overzz
DSH 插件:每天替你刷一轮 B站,读字幕挑出值得的、写一份日报,值得的 @ 你
★ 698
↓ 5.3k/wk
MIT
JavaScript
Oct 24, 2026
dsh plugin --profile web add dsh-bili-scrollby Xinrea
DSH 插件:Niri 风格水平滚动多窗口 B 站直播页,支持上下分屏、Solo、弹幕与焦点音量闪避
★ 0
MIT
JavaScript
Oct 17, 2026
dsh plugin --profile web add dsh-bilibili-multiviewby ShingStars
DSH 插件:每天替你刷一轮 B站(读字幕、写日报)+ 四个免费模型渠道(LobsterAI / Qoder 中国版 / Cline / Raccoon)。合并自 dsh-bili-scroll 与 dsh-our-free-model。
★ 0
JavaScript
Oct 19, 2026
dsh plugin --profile web add dsh-bili-free-scroll