Bundle
@gw/dsh-media-studio
DeepSeek Harness plugin: generate and send images/videos directly in the chat. Agnes / OpenAI-compatible providers, preset models, custom API models, background generation with chat push, inline preview with download and native open.
- Source
- 1497105876
- License
- MIT
- Updated
- Updated 8 days ago
Readme
# dsh-media-studio
[](./LICENSE)
[](https://github.com/deepseek-ai/deepseek-harness)
[](https://nodejs.org)
在 dsh(DeepSeek Harness)聊天里**直接生成图片 / 视频**并发送到会话的插件。
模型侧拿到 `generate_image` / `generate_video` / `send_media` 三个工具,人侧拿到
内联画廊、可播放的视频卡片,支持下载与用系统默认应用打开;长耗时生成默认走
后台任务,完成后自动把结果推送回会话。
生成后端可插拔:内置 **Agnes**(免费额度,图生图 / 首尾帧 / 参考图视频)与
**OpenAI 兼容**两种适配器,预设硅基流动、阿里百炼、Gemini(OpenAI 兼容端点)、
Sora 2 等条目,也可以在配置里加任意 `baseURL + model + apiKeyEnv` 的自定义条目。
## 功能
| 能力 | 说明 |
|---|---|
| 文生图 / 图生图 | `generate_image`:本地路径、https URL、data URI 均可作参考图 |
| 文生视频 | `generate_video`:支持首尾帧(keyframe)与参考图(reference)两种模式 |
| 发送本地媒体 | `send_media`:把已有图片 / 视频文件以画廊 / 文件卡片形式进入会话 |
| 斜杠命令 | `/image`、`/video`,加 `--wait` 前缀同步等待并在命令卡片内联展示 |
| 后台生成 | 默认走 `ctx.jobs` 后台任务,立即返回任务句柄,完成后自动推送 |
| 富渲染 | 工具行 / 命令行内联画廊与视频播放器,支持下载、灯箱查看、系统默认应用打开 |
| 自动保存 | 生成结果写进输出目录(默认 `~/.dsh/media-studio`,`~` 展开到用户主目录;相对路径基于会话工作目录) |
| 凭据安全 | API key 走 `credential-ref`(环境变量名),永不写进配置文件 |
| 设置卡片 | 插件详情页内的官方样式配置卡片:模型条目、默认参数、高级参数 |
## 安装
要求 dsh `0.2.0-rc.2`、Node `>=22.19.0`。
打开 dsh 的 **插件** 页,点右上角 **「+ 添加插件」**,输入 GitHub 地址:
```
https://github.com/1497105876/dsh-media-studio
```
安装完成并启用即可。设置卡片在插件详情页里,API Key 直接在卡片里填。
## 凭据
每个模型条目通过 `apiKeyEnv` 引用一个**环境变量名**,插件运行时先走
`ctx.credentials` 解析,取不到再回退普通环境变量。例如用 Agnes 免费生图:
```bash
export AGNES_API_KEY=sk-...
```
## 模型配置
默认只内置 **Agnes**(有免费额度,填一个 `AGNES_API_KEY` 就能用,支持文生图 /
图生图 / 文生视频)。
其他服务商在设置卡片里「+ 添加」后**选服务商即可**——OpenAI 生图 / Sora 2、
Gemini、硅基流动、阿里云百炼等常见服务商已内置,选中自动填好接口地址和
参考模型名,再填一个 API Key 就能用;下拉里没有的服务商选「自定义」手填
`provider`(适配器)+ `model`(模型名)+ `baseURL`(接口地址)三件套。
常见服务商参考:
| 服务商 | provider | baseURL | model 示例 | Key 引用名 |
|---|---|---|---|---|
| OpenAI 生图 | `openai` | `https://api.openai.com/v1` | `gpt-image-1` | `OPENAI_API_KEY` |
| OpenAI Sora 2 | `openai-videos` | `https://api.openai.com/v1` | `sora-2` | `OPENAI_API_KEY` |
| Gemini 生图 | `openai` | `https://generativelanguage.googleapis.com/v1beta/openai` | `gemini-2.5-flash-image` | `GEMINI_API_KEY` |
| 硅基流动 | `openai` | `https://api.siliconflow.cn/v1` | `Kwai-Kolors/Kolors` | `SILICONFLOW_API_KEY` |
| 阿里云百炼 | `openai` | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `wanx2.1-t2i-turbo` | `DASHSCOPE_API_KEY` |
provider 三选一:`agnes`(Agnes 专有 quirks)、`openai`(OpenAI 兼容图片接口)、
`openai-videos`(OpenAI Videos 风格异步接口)。任何 OpenAI 兼容的中转 /
自建服务都能接。
## 工具
- **`generate_image`** — `prompt` 必填;可选 `model`、`resolution`(1K–4K)、
`aspect_ratio`、`reference_images`(图生图)、`run_in_background`(默认 true)。
- **`generate_video`** — `prompt` 必填;可选 `model`、`seconds`(4–12)、`size`
(720P–2K)、`aspect_ratio`、`mode`(text / keyframe / reference)、
`first_frame` / `last_frame`、`reference_images`、`run_in_background`(默认 true)。
- **`send_media`** — `paths`(本地文件路径的字符串数组)+ 可选 `caption`。
三个工具都声明了规范 JSON 输出 schema,并在工具结果里直接渲染媒体块,
同时投影 `presentationMeta` 供浏览器半渲染富视图。
## 斜杠命令
```
/image <提示词> # 后台生成,完成后推送
/image --wait <提示词> # 同步等待,命令卡片内联展示(可附图做图生图)
/video <提示词> # 后台生成(通常几分钟),完成后推送
/video --wait <提示词> # 同步等待,卡片内联播放
```
## 配置
**设置卡片(推荐)**:插件详情页里的配置卡片,分四区:
- **图片模型 / 视频模型**:选服务商自动填好地址和模型,填上 API Key 就能用;
Key 走官方 `remote.credentials` 通道存进 dsh 凭据库(只写不读),保存即时生效。
- **默认参数**:默认模型、输出目录、分辨率 / 画幅 / 时长(常见档位下拉点选)。
这些只是默认值,对话里明确指定了参数时以对话指定的为准。
- **高级**:请求超时与视频轮询节奏(秒),默认折叠,一般不用动。
凭据也可以用系统环境变量代替(`setx AGNES_API_KEY sk-...` 后重启 dsh),
两种方式插件都会识别。
也可以用 profile patch 整值覆盖(patch 语义是整值替换,不做深合并):
| 键 | 默认 | 说明 |
|---|---|---|
| `imageModels` / `videoModels` | 预设清单 | 模型条目目录 |
| `defaultImageModel` / `defaultVideoModel` | `agnes-image` / `agnes-video` | 工具省略 `model` 时的兜底 |
| `outputDir` | `~/.dsh/media-studio` | 自动保存目录(`~` 展开到用户主目录;相对路径基于会话工作目录) |
| `autoSave` | `true` | 是否自动落盘一份 |
| `imageResolution` / `imageAspectRatio` | `2K` / `16:9` | 图片默认参数(允许服务商支持的其他档位) |
| `videoSeconds` / `videoSize` / `videoAspectRatio` | `5` / `720P` / `16:9` | 视频默认参数(允许服务商支持的其他档位) |
| `requestTimeoutSec` | `300` | 生成请求超时(秒) |
| `videoPollIntervalSec` / `videoPollTimeoutSec` | `30` / `300` | 视频任务轮询(秒) |
## 架构
```
src/
index.ts host 半入口:export const name / inject / Config / apply
tools.ts 三个媒体工具(schema / render / presentationMeta / execute)
commands.ts /image /video 斜杠命令
jobs.ts ctx.jobs 后台任务 + 完成通知(followup / inject)
providers.ts agnes / openai / openai-videos 三种适配器
media.ts 落盘、附件提交、参考图读取、媒体类型嗅探
presets.ts 内置模型预设(Agnes)
types.ts 两半共享的类型与命令 payload 编解码
config.ts schemastery 配置(volatile,卡片即时生效)
client/ 浏览器半(React)
tool-row.tsx 工具行:内联画廊 / 视频播放器
command-row.tsx /image /video 命令行
gallery.tsx 消息图片画廊(替换 stock gallery)
media.tsx 画廊 / 灯箱 / 播放器 / 下载 / 系统打开
native-open.ts 宿主原生打开通道(系统默认应用)
settings-card.tsx 设置卡片(官方 SettingsForm 风格,走 remote.credentials)
scripts/
build-client.mjs esbuild 打包浏览器半为 lazy-CJS client bundle
```
host 半是 tsc 直出的 ESM(`lib/index.js`);浏览器半打包成官方
`window.__ModuleLoader__.load({ id, factory })` 形状(`lib/client.js`),
`react` 走平台注入的模块表,不自带 react 副本。
## License
[MIT](./LICENSE)
Install
dsh plugin --profile web add github:1497105876/dsh-media-studio
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install gw-dsh-media-studio from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.