让 DeepSeek Harness 会画图、会出片。 一个插件、一套设置页、三个工具、多条供应商通道。
33.6/100
综合分
5
GitHub 星标
1,310
npm 周下载
—/5
用户评分
数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-media-gennpm 源 · dsh-media-gen 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-media-gen @ 0.1.4
✓Node 引擎要求 >=22.19 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/23 06:15:33
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 53 处,展示前 48 条)
- 发起网络请求lib/client.js:2568
fetch(VIDEO_ROUTE, { - 写入剪贴板lib/client.js:2730
try { await navigator.clipboard.writeText(item.prompt); onToast(t("copiedPrompt")); } - 写入剪贴板lib/client.js:2801
try { await navigator.clipboard.writeText(item.prompt); onToast(t("copiedPrompt")); } - 发起网络请求lib/image-core.js:224
const response = await fetch(url, { redirect: 'follow', signal }) - 发起网络请求lib/image-core.js:342
response = await fetch(url, { - 写入本地文件lib/image-core.js:711
await mkdir(directory, { recursive: true }) - 写入本地文件lib/image-core.js:717
await writeFile(join(directory, name), image.data) - 发起网络请求lib/image-core.js:813
const response = await fetch(target, { - 读取本地文件lib/image-core.js:840
const data = await readFile(abs, signal !== undefined ? { signal } : {}) - 发起网络请求lib/video-core.js:52
const response = await fetch(`${input.endpoint}/services/aigc/video-generation/video-synthesis`, { - 发起网络请求lib/video-core.js:87
const response = await fetch(`${input.endpoint}/services/aigc/video-generation/video-synthesis`, { - 发起网络请求lib/video-core.js:131
const poll = await fetch(`${input.endpoint}/tasks/${encodeURIComponent(taskId)}`, { - 发起网络请求lib/video-core.js:176
const submit = await fetch(`${input.baseURL}/contents/generations/tasks`, { - 发起网络请求lib/video-core.js:200
const poll = await fetch(`${input.baseURL}/contents/generations/tasks/${encodeURIComponent(taskId)}`, { - 发起网络请求lib/video-core.js:236
const poll = await fetch(url, { - 读取本地文件lib/video-core.js:373
const parsed = JSON.parse(await readFile(join(dir, WORKSPACE_MARKER_NAME), "utf8")); - 读取本地文件lib/video-core.js:390
const parsed = JSON.parse(await readFile(markerPath, "utf8")); - 写入本地文件lib/video-core.js:398
await writeFile(staging, JSON.stringify({ version: 1, videos }, null, "\t"), { flag: "wx" }); - 写入本地文件lib/video-core.js:399
await rename(staging, markerPath); - 删除本地文件lib/video-core.js:401
await unlink(staging).catch(() => {}); - 读取本地文件lib/video-core.js:448
const realFile = await realpath(savedTo); - 读取本地文件lib/video-core.js:451
try { realRoot = await realpath(root); } - 读取本地文件lib/video-core.js:454
const data = await readFile(realFile); - 读取本地文件lib/video-core.js:470
const realFile = await realpath(join(dir, entry.file)); - 写入本地文件lib/video-core.js:583
await mkdir(dir, { recursive: true }); - 写入本地文件lib/video-core.js:586
await writeFile(staging, options.data, { flag: "wx", signal: options.signal }); - 写入本地文件lib/video-core.js:588
await rename(staging, target); - 删除本地文件lib/video-core.js:590
await unlink(staging).catch(() => {}); - 写入本地文件lib/cli-config.js:51
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件lib/cli-config.js:53
writeFileSync(staging, JSON.stringify(mirror, null, 2) + '\n', 'utf8') - 写入本地文件lib/cli-config.js:54
renameSync(staging, path) - 写入本地文件lib/rpc-route.js:19
void appendFile(logPath, `${new Date().toISOString()} ${message}\n`).catch(() => {}) - 读取本地文件lib/credential-refs.js:57
return parseCredentialRefs(readFileSync(path, 'utf8')) - 写入本地文件lib/video-task-store.js:74
await fs.mkdir(this.directory, { recursive: true, mode: 0o700 }) - 写入本地文件lib/video-task-store.js:76
try { await fs.mkdir(lock) } catch (e) { - 删除本地文件lib/video-task-store.js:80
try { return await action() } finally { await fs.rmdir(lock) } - 写入本地文件lib/video-task-store.js:95
await fs.rename(temp, target) - 删除本地文件lib/video-task-store.js:98
try { await fs.unlink(temp) } catch (cleanup) { if (cleanup.code !== 'ENOENT') throw new AggregateError([e, cleanup], 'Write and cleanup failed') } - 读取本地文件lib/video-task-store.js:126
try { text = await fs.readFile(this._path(id), 'utf8') } catch (e) { - 读取本地文件lib/video-task-store.js:130
const stat = await fs.stat(this.directory) - 读取本地文件lib/video-task-store.js:157
try { names = await fs.readdir(this.directory) } catch (e) { if (e.code === 'ENOENT') return []; throw e } - 发起网络请求lib/video-google.js:51
const response = await fetch(input.endpoint, { - 读取本地文件lib/video-reference-image.js:105
[realRoot, realCandidate] = await Promise.all([realpath(root), realpath(candidate)]); - 读取本地文件lib/video-reference-image.js:116
const file = await stat(realCandidate); - 读取本地文件lib/video-reference-image.js:122
const data = await readFile(realCandidate, { signal: input.signal }); - 发起网络请求lib/client-video.js:1293
fetch(VIDEO_ROUTE, { - 写入剪贴板lib/client-video.js:1455
try { await navigator.clipboard.writeText(item.prompt); onToast(t("copiedPrompt")); } - 写入剪贴板lib/client-video.js:1526
try { await navigator.clipboard.writeText(item.prompt); onToast(t("copiedPrompt")); }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-attachment@deepseek-ai/dsh-credentials@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-settings@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 生图与生视频整合
- 统一供应商目录
- 设置页与画廊
展开完整介绍(125 字)↓
DeepSeek Harness 生图+生视频整合插件:统一服务商目录、三个工具、中转站实测的异步视频契约、限流退避纪律、设置页+画廊+快车道命令行。MIT,fork 合并自 dsh-image-generation 与 dsh-video-gen。
最近更新
在 GitHub 查看全部 →v0.1.42026-10-17
· 0.1.4
· 视频通道加固(含 PR #7)
· fail_to_fetch_task 不再被当作限流:它是 New API 的"取上游任务失败"包装码,内层可能是配置错误,过去会被 60s+ 长退避反复重试,把配置问题伪装成"卡住"
· 新增 lib/upstream-error.js:向下钻取中转的嵌套错误(如 model_not_found / No available channel for model …)并摘出 request id,报错文案可直接拿去开工单
· 新增 retryOnDispatchFailure:仅对"确认未建成任务"的 503 fail_to_fetch_task 做 15s→30s 短退避(最多 2 次),与限流长退避分离
· 三个适配器统一加固:id / task_id 兼容、拒绝空白字符任务号(此前会带着空号轮询到超时)、缺失任务号时报错带上上游原文
· 修正火山适配器在缺少任务号时引用未定义变量导致的崩溃
· 图像通道修复(0.1.3)
· connection RPC 通道在 DSH 0.2.0-rc.2 上静默缺失(POST /image-gen/* 405):改为在插件自己的 webServer 上按同协议自注册路由,设置页「拉取上游模型」、图片工具视图加载、CLI 镜像同步全部恢复。详见 docs/DEVELOPMENT.md
· 其他
· 测试 84 项全绿(新增 host-stubs 桩、视频适配器、任务号校验三套用例)
· 安装:dsh plugin --profile desktop add dsh-media-gen
v0.12026-09-30
· v0.1 — first public release
npm: dsh-media-gen@0.1.2
· 三个工具:image_generate / generate_video / animate_image
· 多供应商目录:生图(OpenAI images / xAI / Gemini / chat 携图)、
生视频(通义万相 / 火山 Seedance / Google Veo / Sora 风格中转)
· 中转图生视频(input_reference)、限流指数退避、任务登记簿(先查旧任务再重提)
· 设置页(生图 / 视频生成)、视频画廊、对话内联卡片、快车道 CLI + 配置镜像
· CI:测试(Node 22/24 矩阵 + 构建确定性门)+ Release 自动发布(npm Trusted Publishing / provenance)
安装:dsh plugin --profile desktop add dsh-media-gen
License: MIT(fork 合并自 dsh-image-generation 与 dsh-video-gen,声明见 NOTICE.md)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-media-gen
让 DeepSeek Harness 会画图、会出片。 一个插件、一套设置页、三个工具、多条供应商通道。
为 DeepSeek Harness 统一生图与生视频 —— image_generate / generate_video / animate_image,多服务商(OpenAI 兼容中转站、DashScope 通义万相、火山引擎 Seedance、Google Veo、Sora 风格 /v1/videos),设置界面、视频画廊、MIT。
30 秒上手
1. 安装插件(三种渠道任选,推荐 npm)
① npm 注册表(推荐,自动跟随最新版)
dsh plugin --profile desktop add dsh-media-gen
② GitHub 仓库直装
dsh plugin --profile desktop add github:EmberwingAviation/dsh-media-gen
③ 本地源码(开发用,改源码即生效)
dsh plugin --profile desktop add link:/path/to/dsh-media-gen
或者用图形界面:设置 → 内置插件 → 添加插件 → 输入 dsh-media-gen(也接受 GitHub 地址或本地目录路径)。
展开完整文档(README 剩余 1 节)
dsh-media-gen
让 DeepSeek Harness 会画图、会出片。 一个插件、一套设置页、三个工具、多条供应商通道。
为 DeepSeek Harness 统一生图与生视频 —— image_generate / generate_video / animate_image,多服务商(OpenAI 兼容中转站、DashScope 通义万相、火山引擎 Seedance、Google Veo、Sora 风格 /v1/videos),设置界面、视频画廊、MIT。
30 秒上手
1. 安装插件(三种渠道任选,推荐 npm)
① npm 注册表(推荐,自动跟随最新版)
dsh plugin --profile desktop add dsh-media-gen
② GitHub 仓库直装
dsh plugin --profile desktop add github:EmberwingAviation/dsh-media-gen
③ 本地源码(开发用,改源码即生效)
dsh plugin --profile desktop add link:/path/to/dsh-media-gen
或者用图形界面:设置 → 内置插件 → 添加插件 → 输入 dsh-media-gen(也接受 GitHub 地址或本地目录路径)。
npm 包页:https://www.npmjs.com/package/dsh-media-gen | 装完可在「设置 → 内置插件」列表看到 dsh-media-gen 与版本号
升级:重复执行同一条安装命令即可取到最新版(升级后需重启 DSH)
2. 完全重启 DSH(插件在启动时装载)
3. 填一个生图供应商 → 设置 → 生图 → 供应商目录卡 → 新建:
- 名称、Base URL(如 https://你的中转站/v1)、API 格式(多数中转站选 openai-images)
- 密钥(写入 DSH 凭据服务,不会明文存配置文件)
- 模型列表:可以点 「拉取上游模型」 一键从上游 GET /models 拉取候选
4. 选默认模型 → 同一页的默认配置卡 → 当前模型选一个(image_generate 就跟着它走)
5.(可选)配视频 → 设置 → 视频生成 → 加供应商(类型 / Base URL / 模型 / 密钥 / 是否支持图生视频)
6. 开始用 —— 新建一个会话,直接对智能体说:
「画一只在深夜海面上跃起的座头鲸,电影海报风格」「把这张图做成 5 秒视频」(附图)「生成一段视频:赛博朋克城市雨夜,镜头缓慢推进」
⚠️ 工具只在新建的会话里出现:DSH 的会话工具集在会话创建时快照,装完插件后请开新会话。
你会得到什么
| 工具 | 做什么 |
| image_generate | 文生图、参考图改图(referenceImages 传 1–5 张对话里的图);结果存 generate/image/ 并直接显示在对话里 |
| generate_video | 文生视频(异步任务 + 自动轮询);结果存 generate/video/、对话内播放,并收录进视频画廊 |
| animate_image | 图生视频:源图可以是工作区文件、对话附件、或「对话里最新那张图」 |
产物都在工作区的 generate/ 下,随时可再引用;视频还能在会话顶栏的 视频画廊 里回看。
支持哪些服务商
生图(按供应商选择 API 格式):
| 格式 | 适用 |
| openai-images | OpenAI 官方、以及绝大多数 New API 系中转站的 /v1/images/generations(推荐) |
| openai-chat-image | 只提供 chat 路由携图的中转站(兼容兜底) |
| xai-images / gemini-image | xAI、Google Gemini 系原生格式 |
生视频(按供应商选择类型):
| 类型 | 说明 | 图生视频 |
| dashscope | 阿里云通义万相 | ✅ 默认支持 |
| volcengine | 火山引擎 Seedance | ✅ 默认支持 |
| google | Google Veo | ✅ 默认支持 |
| openai-compatible | OpenAI / Sora 风格 /v1/videos 异步任务,含各类中转站 | ⚠️ 需手动勾选「支持图生视频」(经 input_reference 传图) |
同一条通道可配多个模型,默认供应商在设置页单选;单次调用还可用工具参数 provider 临时换。
配置详解
设置 → 生图(一页两卡)
- 供应商目录卡:增删改供应商(名称 / Base URL / API 格式 / Key / 模型列表),每行有密钥状态徽章;「拉取上游模型」按钮会带着你填的密钥向 GET {BaseURL}/models 请求,把返回的模型 id 去重合并进列表
- 默认配置卡:
- 启用 image_generate:关掉后工具会拒答
- 当前模型:image_generate 实际使用的模型
- 默认尺寸 / 默认质量:不给参数时用这套
- 智能体出图通道:auto(默认,简单出图走命令行、需要参考图/内联/画廊时走原生工具)/cli/tool/subagent
- 命令行出图输出目录 / 请求超时:给下面的命令行工具用
设置 → 视频生成
供应商目录(类型 / Base URL / 模型 / Key / 图生视频开关)、默认供应商单选、轮询间隔、等待超时、落盘目录。
密钥放哪
所有 Key 都交给 DSH 凭据服务(配置里只存引用名),不会明文写进配置文件、不会传进浏览器、不会进命令行。
命令行直连出图(可选)
不想经过智能体回合、想最快拿到图:
node scripts/gen-image.mjs "提示词" [--model qwen-image-3.0-pro] [--size 1024x1024] [--dry-run]
- 默认值来自「设置 → 生图」保存的配置(host 会把它同步成配置文件镜像),命令行参数可临时覆盖
- --dry-run 只打印生效配置,不消耗额度
- 参数、优先级、镜像机制见 docs/DEVELOPMENT.md
常见问题
Q:为什么新会话里才有这三个工具? DSH 的会话工具集在会话创建时快照,装完插件或改了工具开关,新开一个会话即可。
Q:报 429 / 限流 / "负载已饱和"怎么办? 插件会自动指数退避重试(默认 ≥60 秒起步,最多 3 次),不要手动连发;上游拥堵时等一会儿或换个供应商。
Q:视频任务一直转圈? 异步视频任务偶尔会长时间停滞(上游排队)。插件会保留任务 id:超时后先查旧任务,而不是盲目重提;确实要开新任务时,明确说「重提」或让智能体传 resubmit。
Q:图/视频存哪了? 工作区 generate/image/、generate/video/;图片会内联在对话里,视频同时出现在视频画廊。
Q:改了设置要重启吗? 改配置(供应商、模型、开关)不用重启;安装/升级插件、改插件自身代码需要重启 DSH。
Q:图生视频为什么提示不支持? openai-compatible 类型默认关闭图生视频(不同中转站能力不一),到「视频生成」页把该供应商的「支持图生视频」勾上。
反馈与贡献
- 遇到问题或有需求:开 Issue
- 开发、架构、测试、发布流程:见 docs/DEVELOPMENT.md
English quick start
dsh plugin --profile desktop add dsh-media-gen # restart DSH afterwards
Then go to Settings → Image generation: add a provider (Base URL / key / models), pick a default model, and ask the
agent in a new session:
"Draw a humpback whale breaching at night, movie-poster style"
Three tools are exposed: image_generate (text-to-image and reference-image edits), generate_video (text-to-video,
async polling) and animate_image (image-to-video). Outputs land in generate/image/ and generate/video/, inline in the
conversation, with a video gallery tab. Keys are stored through the DSH credential service — never in config files.
Attribution & License
MIT © dsh-media-gen contributors. 本插件是以下两个 MIT 项目的 fork 合并与再创作:
| 上游 | 版权 | 使用范围 |
| dsh-image-generation @0.1.2 | whiteS18, MIT | lib/image-core.js、lib/client-image.js |
| dsh-video-gen @0.2.4(npm) | Yang-wudi / shanliuling, MIT | lib/video-core.js、lib/video-*.js、lib/client-video.js |
完整声明见 NOTICE.md;上游 LICENSE 与源码副本保留于 vendor/;各改编文件头部均有来源注释。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
EmberwingAviation/dsh-media-gen
让 DeepSeek Harness 会画图、会出片。 一个插件、一套设置页、三个工具、多条供应商通道。
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71
这是你的仓库?认领条目