dsh-media-preview

August 31, 2026 · View on GitHub

中文 English npm

DSH 插件:在聊天记录中自动将本地音视频路径渲染为可播放的预览组件

当助手消息或工具结果中出现本地音频/视频路径时,自动将其替换为内联的 <audio> / <video controls playsInline> 播放器,并指向同源 /api/media-preview/<base64-path> 路由。

默认模式为 unrestricted:DSH 进程可读的任何文件路径均可访问;权限 / IO 错误会以明确的 HTTP 状态码和原因字符串返回,方便浏览器原生播放器呈现有意义的错误提示。


功能特性

  • Range 请求bytes=start-end)→ 206 Partial Content,支持 <video> 进度拖拽
  • 全文件 GET200 OK
  • 缓存Cache-Control: private, max-age=60
  • 客户端正则仅匹配 /Users|/tmp|/private/tmp|/var/folders|/var/tmp 根路径 + 15 种扩展名,避免误匹配外部 URL
  • UTF-8 安全路径编码,支持非 ASCII 文件夹名
  • <style> 自动清理:插件卸载时客户端 Fiber 自动移除注入样式

支持格式(27 种)

音频/视频(15 种)mp3 wav m4a flac ogg opus aac mp4 mov mkv m4v webm avi 3gp ogv

图片(12 种)png jpg jpeg gif bmp webp svg tiff ico avif heic heif

Preview

Demo


安装

# 进入 DSH web profile
cd ~/.dsh/profiles/web

# 方式一(推荐):dsh 官方命令(自动写入 bundles 与 cordis.patch.yml)
dsh plugin --profile web add xiaokaizhou/dsh-media-preview

# 方式二:pnpm 直装(需手动补一步,见下方说明)
pnpm add xiaokaizhou/dsh-media-preview

package.json 位于 DSH profile 根目录:

  • 默认路径:~/.dsh/profiles/web/package.json(macOS / Linux)
  • Windows:%USERPROFILE%\.dsh\profiles\web\package.json
  • 自定义路径:$DSH_HOME/profiles/web/package.json,可通过环境变量 DSH_HOME 覆盖
  • 如有多个 profile,对应路径为 ~/.dsh/profiles/<profile-name>/package.json

方式二手动补全:在上面的 package.json 中添加:

"dsh": {
  "profile": {
    "bundles": [
      "media-preview"
    ]
  }
}

源码修改后需重启 dsh web


限制

  • 全文件缓冲读取(上限 500 MB)。大视频首帧可能较慢;Range 请求在同一内存缓冲区上切片。
  • 无目录列表。无符号链接策略(依赖 fs.stat)。
  • 500 MB 限制是单请求的,不是会话级的。未来版本可能会通过 child_process dd 流式传输。

错误状态码

条件状态码原因
文件不存在404not found: <errno>
权限不足500permission denied: <errno>
是目录415is a directory, not a file
符号链接循环400symlink loop or too many links
路径过长400path too long
不支持的扩展名415unsupported media type: <ext>
文件 > 500 MB413file too large: <bytes> > 524288000 cap
Range 无效416Content-Range: bytes */<total>

开源协议

MIT

打赏支持

若这个插件帮到了你,欢迎用下面的二维码请我喝杯咖啡。

WeChat Pay
微信支付
Alipay
支付宝