前言¶
DeepSeek Harness(DSH)在对话里已经能渲染指向本地文件的图片,但没有对等的视频、音频内联播放能力。若你在 Harness 里调试媒体管线、复盘本地素材,或希望助手直接展示一段 MP4 而不是只给出路径,就需要从插件层补这一环。下面介绍社区插件 dsh-plugin-media-gen:它在聊天里提供本地图片/视频/音频播放器,并可选调用 xAI Grok Imagine 生成短片。
这是什么¶
dsh-plugin-media-gen 由维护者 atzx 发布,分类为客户端插件。一句话定位:在 DSH 聊天中内联播放本地媒体,并通过 xAI Grok Imagine API 生成视频后同样内联展示。Harness 本体不负责视频/音频的 Turn 级卡片;该插件用两个工具和一个自定义媒体路由填补缺口。
- 目录页:https://www.skillhub.cn/plugins/atzx/dsh-plugin-media-gen
- 源码:https://github.com/atzx/dsh-plugin-media-gen
- 许可证:MIT(README 与
package.json一致) - 当前包版本:
0.1.0(见仓库package.json)
核心功能¶
工具 show_media¶
展示已存在的本地图片、视频或音频文件。参数:
| 参数 | 类型 | 说明 |
|---|---|---|
path |
string | 必填。 文件的绝对路径。 |
title |
string | 可选,播放器上方的标题。 |
支持的扩展名:图片 png jpg jpeg webp gif avif bmp;视频 mp4 mov m4v webm mkv;音频 mp3 wav m4a flac ogg opus aac。其它扩展名会被拒绝并返回支持列表。返回 { path, kind, bytes },并在 presentationMeta 中记录 { path, title? },Turn 卡片从元数据读路径,不依赖正文解析。
README 说明:图片仍可通过 Markdown 渲染;show_media 主要针对 Markdown 无法覆盖的视频与音频。
工具 generate_video¶
调用 xAI Imagine API(POST /v1/videos/generations,轮询 GET /v1/videos/{id}),将 MP4 下载到 <DSH_HOME>/media/,返回绝对路径。参数包括:prompt(必填)、image_path、duration(1–15 秒)、aspect_ratio、resolution、model、generate_audio、output_dir。
API Key 每次调用从 GROK_API_KEY 解析,来源为启动环境或 ~/.dsh/.credentials.yaml,轮换密钥无需重启应用。
展示位置:Turn 尾部卡片与工具行¶
工具调用默认折叠在可折叠组里;若只在 tool.call.toolview 注册卡片,需展开组才能看到播放器。插件的主展示面是 Turn tail:Turn Definition(media-shown)累积媒体工具产生的路径,conversation.chat.turnTail 注册的卡片在助手收束段落下绘制——与 present、schedule_create 同类位置。同时写入带 key 的工具行,不展开折叠组也能看到播放器。
媒体工具结果会引用路径(例如 Shown audio: "/…/file.mp3" (2.8 MB)),以便会话重放时从含空格的文件名中仍能提取路径。
自定义媒体路由(Range 请求)¶
Harness 的 GET /api/file 会忽略 Range 头并始终以完整 200 响应;<video> 需要字节范围,收到全量 200 会触发 error,而音频管线对全量响应更宽容。插件因此注册认证路由:
GET|HEAD /api/media-gen/file?path=<absolute>
- 支持
Accept-Ranges: bytes与正确 MIME 206与Content-Range(含bytes=a-b、bytes=a-、bytes=-n)- 不可满足范围时
416 - 流式传输,不整文件缓冲
客户端优先走该路由,失败则回退 /api/file,再回退为普通链接;连接载体不可用时仍可部分工作。
安装与启用¶
官方 README 给出的步骤是符号链接到 desktop profile 的 node_modules,并在 package.json 中声明 link 依赖与 bundle。不要凭插件名拼接 dsh plugin add github:... 一类未在文档出现的命令。
1、在插件源码目录执行:
ln -sfn "$PWD" ~/.dsh/profiles/desktop/node_modules/dsh-plugin-media-gen
2、编辑 ~/.dsh/profiles/desktop/package.json:添加 link: 依赖,并把 dsh-plugin-media-gen 写入 dsh.profile.bundles。
3、重启 DSH 应用。
插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,确认工具与自定义 HTTP 路由符合你的安全策略。
典型用法¶
在对话中让助手调用工具即可(具体措辞因模型与 Harness 配置而异,行为以工具 schema 为准)。
展示本地文件: 提供绝对路径,必要时加 title。例如助手调用 show_media,path 为 /home/user/clips/demo.mp4。
生成视频: 调用 generate_video,prompt 必填;按需设置 duration(1–15)、aspect_ratio、resolution、model、generate_audio、image_path、output_dir。需事先配置 GROK_API_KEY(环境变量或 ~/.dsh/.credentials.yaml)。
适用场景与限制¶
适合: 在 DSH 桌面 profile 里内联试听/预览本地音视频;在对话中生成 Grok Imagine 短片并直接在 Turn 卡片里播放;需要正确 HTTP Range 的视频 seek 行为时。
限制(README 原文要点):
- 播放器只出现在 Turn 卡片与工具行,不会作为裸 assistant 块或 Markdown 扩展出现;Harness 未把文本渲染器作为扩展点暴露。
generate_video在轮询期间阻塞当前 turn;生成约 1–3 分钟,声明超时为 15 分钟。- 第三方插件不 import
@deepseek-ai/*;浏览器侧通过 Harness 的window.__ModuleLoader__.load加载,仅依赖react。
社区插件目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;星标等元数据以目录页与 GitHub 为准(撰写时 GitHub 星标为 0)。
结尾¶
dsh-plugin-media-gen 从插件层补上了 DSH 对本地视频/音频的内联播放,并用 Grok Imagine 把「生成 → 落盘 → 播放」串在同一条对话 Turn 里;自定义 /api/media-gen/file 解决了全量 200 导致 <video> 失败的问题。需要启用时按 README 的 link 与 bundle 步骤操作即可。