自动拉起本地媒体服务,历史图片视频点击即播
27.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add awa-123-cw/better-deepseek-harness该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 80 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
- 写入本地文件.dsh-plugin/index.mjs:43
mkdirSync(dirname(LOG_FILE), { recursive: true }) - 写入本地文件.dsh-plugin/index.mjs:44
appendFileSync(LOG_FILE, `[${new Date().toISOString()}] ${line}\n`) - 执行外部命令固定命令.dsh-plugin/index.mjs:167
child = spawn('python', ['-u', PIC_SERVER], { - 读取本地文件.dsh-plugin/index.mjs:255
const st = statSync(abs) - 读取本地文件.dsh-plugin/index.mjs:291
createReadStream(abs, { start: range.start, end: range.end }).pipe(res) - 读取本地文件.dsh-plugin/index.mjs:293
createReadStream(abs).pipe(res) - 发起网络请求.dsh-plugin/client.js:98
fetch(STATUS_URL, { cache: "no-store" })
扫描于 2026/11/3(1 天前) · 范围 入口文件闭包 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 自动拉起本地静态服务
- 点击即播媒体
DSH 图片/音视频托管插件:自动拉起 8899 静态服务 + 3080 /files/ 路由(HTTP Range 流式)+ WebUI 内点击即播(视频静音/音频 20% 音量/互斥懒加载)
README
由 DeepSeek 最新模型翻译生成pic-host — DSH 图片/视频托管插件
DSH(web profile)启动时自动拉起本地图片/视频静态服务,让 WebUI 里的图片 URL 始终可用。
GitHub: https://github.com/awa-123-cw/better-deepseek-harness(Release 附件含打包好的 tgz;旧名 pic-host 自动 301 重定向)
解决什么问题
历史会话消息里的图片形如 http://127.0.0.1:8899//,由独立静态服务提供。
每次重启 DSH / 机器后该服务消失,WebUI 历史图片全部变成损坏图标,需要手动拉起。
本插件挂载后无需任何人工操作:
| 时机 | 行为 |
| DSH 启动 | 探测 127.0.0.1:8899;未监听则分离进程拉起 pic_server.py(历史 URL 立即恢复) |
| DSH 启动 | 注册 3080 同源路由 /files/*(映射 D:\ds4,新图用 http://:3080/files/... 引用,浏览器加载最稳) |
| DSH 退出 | 自动结束自己拉起的 python 进程(不留孤儿);强杀后残留的 python 下次启动会被探测复用 |
展开完整文档(README 剩余 1 节)
pic-host — DSH 图片/视频托管插件
DSH(web profile)启动时自动拉起本地图片/视频静态服务,让 WebUI 里的图片 URL 始终可用。
GitHub: https://github.com/awa-123-cw/better-deepseek-harness(Release 附件含打包好的 tgz;旧名 pic-host 自动 301 重定向)
解决什么问题
历史会话消息里的图片形如 http://127.0.0.1:8899//,由独立静态服务提供。
每次重启 DSH / 机器后该服务消失,WebUI 历史图片全部变成损坏图标,需要手动拉起。
本插件挂载后无需任何人工操作:
| 时机 | 行为 |
| DSH 启动 | 探测 127.0.0.1:8899;未监听则分离进程拉起 pic_server.py(历史 URL 立即恢复) |
| DSH 启动 | 注册 3080 同源路由 /files/*(映射 D:\ds4,新图用 http://:3080/files/... 引用,浏览器加载最稳) |
| DSH 退出 | 自动结束自己拉起的 python 进程(不留孤儿);强杀后残留的 python 下次启动会被探测复用 |
| 状态查询 | 浏览器开 http://127.0.0.1:8899/ → 可视化状态页(PID/运行时长/请求数/目录映射,5 秒自动刷新) |
| 状态查询 | GET http://127.0.0.1:3080/pic-host/status → 插件 JSON 状态(DSH 重启后可用) |
| WebUI 指示 | 侧栏左下角(设置按钮旁)出现鲸鱼线条图标按钮(DeepSeek 吉祥物,与 DSH 内置图标统一,无文字):绿点=在线/红点=离线(每 5 秒刷新);点击弹紧凑状态卡(渲染在 shell.overlay 全局最高层,不被会话区遮挡)——「更好的DeepSeekHarness」 名称 + 端口/PID/状态 + 打开状态页,点卡片外任意处关闭 |
| 图片预览 | 聊天里双击任意图片 → 全屏 lightbox 放大预览(shell.overlay 最高层):滚轮缩放(0.2x–8x,以光标位置为锚点,光标下的画面内容缩放后纹丝不动;无过渡动画、连续快速滚轮零漂移——布局位置状态推导 + zoomRef 最新值,不读 DOM 实测位置)、拖拽平移、双击图片复位、点击遮罩或按 Esc 关闭。DSH 原生无预览功能,由本插件补齐 |
媒体能力(v0.4.0:视频 + 音频)
- 服务端(8899 + 3080 /files/ 双通道)全类型支持 HTTP Range(206 Partial Content + Accept-Ranges: bytes):浏览器 / 可直接引用媒体 URL 播放,拖动进度条/seek 丝滑。
- 视频/音频 MIME 完整:mp4 / m4v / webm / mov / mkv / avi / mpeg / ogv / 3gp / wmv / flv / mp3 / m4a / aac / wav / ogg / flac / opus / weba。
- WebUI 内直接播放(不跳转)(client):聊天消息里的视频/音频地址——markdown 链接(xx)、图片语法误用(xx 渲染成破图)、裸 URL 文本、代码块整块=单个媒体 URL、本地路径描述(AI 常输出 📁 D:\IndexTTS2\gen_xxx.wav(1.31 秒),自动识别 D:\ds4 / D:\IndexTTS2 路径并转成可播放 URL)——五通道全部原地替换为「点击即播」卡片:点「在 WebUI 内播放」即在消息里内嵌播放(controls + 拖动进度条 + 全屏),双击卡片 → 全屏播放器(倍速 + 全屏 + 下载文件),全程不离开 webui。
- 音频(语音)播放:wav / mp3 / m4a / aac / ogg / flac / opus / weba 走同样链路,卡片与播放器使用 元素(🎵 图标),不默认静音;视频保持默认静音。
- 单击链接兜底(100% 可靠):捕获阶段拦截视频/音频链接的单击——即使卡片替换被 React 重渲染撤销(链接复活),单击链接也绝不会新开标签页,而是直接在 WebUI 内打开播放器。
任何会话、任何时刻,媒体链接单击即播,绝不离开 webui。
- HTML5 播放页(备用,独立开页):http://127.0.0.1:8899/__watch__/ → 深色主题播放器页面(自动播放、进度拖动、全屏、原始文件直达), 指向原始文件 URL。
- 示例 URL:http://127.0.0.1:8899/h3_outputs/xxx/files/xxx.mp4 或 http://127.0.0.1:3080/files/h3_outputs/xxx/files/xxx.mp4。
- 状态页增加视频引用示例与播放页入口提示。
性能控制(防 webui 卡死)
内嵌播放按「最省资源」原则设计,历史消息里几十上百个媒体链接也不会拖垮 WebUI:
| 机制 | 说明 |
| 点击即播 | 卡片只是轻量 div(文件名 + ▶/🎵 按钮),创建时零网络请求;点击才创建 / |
| preload=metadata | 只拉文件索引,不预下载全片,点开即播、拖动进度条按需拉取 |
| 全局互斥播放 | 同一时刻只允许一路媒体解码:任意视频/音频开始播放 → 其他所有媒体自动暂停 |
| 滚动离视口暂停 | IntersectionObserver 监视,卡片滚出视口 300px 外立即暂停,解码器不空转 |
| rAF 帧合并 | MutationObserver 回调合并到每帧一次扫描,流式输出高频 DOM 变化不卡 |
| 四通道原地替换 | 链接 / 破图 img / 裸 URL / 整块=URL 的代码块都转卡片,多行代码块不处理,防误伤 |
8899 别名表(pic_server.py)
- / → D:\ds4\anima_outputs(历史 URL 根,兼容 /furina_mast_001/xxx.png 旧链接)
- /anima_outputs /k2_outputs /krea2_outputs /comfy_outputs /h3_outputs
/runninghub_outputs /runninghub_tmp /image2-test-a /anima_doujin → 对应 D:\ds4 目录
- /IndexTTS2 → D:\IndexTTS2(TTS 语音输出目录)
- /workspace → 整个 D:\ds4(兜底)
安全:只读 GET/HEAD;路径净化拒绝 ..、\(Windows 穿越)→ 403。
文件
pic-host/
├── package.json # dsh.bundle.patch + dsh.client 声明(cordis bundle 清单) ├── cordis.patch.yml # 插件行(insert pic-host) ├── .dsh-plugin/ │ ├── index.mjs # 宿主插件:探测/拉起 8899 + /files/ 路由(Range 流式)+ /pic-host/status │ ├── pic_server.py # 8899 多别名静态服务(python 标准库,零依赖;媒体 MIME + Range + 播放页) │ └── client.js # 浏览器半区:侧栏「更好的DeepSeekHarness」按钮 + 图片 lightbox + 媒体内嵌点击即播(五通道 + 互斥/懒加载性能控制)+ 双击全屏播放器 └── logs/ # pic-host.log(插件日志)、pic-server.log(访问日志)
开发备忘
- 改动 index.mjs / client.js 后免重启生效:staging 工具 reload_pic_host_pkg (super-injector 后侧,dev_stage_call reload_pic_host_pkg {})——purge 缓存 → import 新代码 → 重建 fiber → 清 disabled 标记 → 重注册 client bundle;刷新 WebUI 页面后 client 新功能生效。
- pic_server.py 是独立 python 进程,改完需重启 8899(杀旧进程后由插件自愈或手动拉起)。
安装位置
- 插件本体:D:\dsh-plugins\pic-host
- profile 注册:D:\dsh\profiles\web\package.json(dependencies + dsh.profile.bundles)
- 卸载:从 package.json 移除依赖与 bundles 条目,pnpm install,删除插件目录即可
常用排查
- 图片/视频仍不显示 → Invoke-WebRequest http://127.0.0.1:8899/ 看是否 200;或看 logs/pic-host.log 是否记录了"已拉起"。
- 视频不能拖进度条 → 请求必须带 Range 头返回 206;Invoke-WebRequest -Headers @{Range="bytes=0-1023"} ... 验证。
- 换端口 / 换工作区根目录 → 改 index.mjs 顶部常量(PIC_PORT / WS_ROOT / ANIMA_ROOT)与 pic_server.py 的 ALIASES。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
awa-123-cw/better-deepseek-harness
自动拉起本地媒体服务,历史图片视频点击即播
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目