🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

全模态设置 yzhclcl/dsh-omni-modal

DeepSeek Harness
yzhclcl21 天前有提交已提供中文文档扫描:含敏感能力

为纯文本模型接入生图与生视频能力

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/14 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yzhclcl/dsh-omni-modal
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · vision
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 21 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 14 条)
  • 写入本地文件
    lib/index.js:64
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/index.js:145
    if (!existsSync(file)) return defaultConfig();
  • 读取本地文件
    lib/index.js:147
    return normalizeConfig(JSON.parse(readFileSync(file, 'utf8')));
  • 写入本地文件
    lib/index.js:157
    writeFileSync(tmp, `${JSON.stringify(config, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
  • 写入本地文件
    lib/index.js:158
    renameSync(tmp, file);
  • 读取本地文件
    lib/index.js:160
    statSync(file);
  • 读取本地文件
    lib/index.js:171
    if (!existsSync(file)) return [];
  • 读取本地文件
    lib/index.js:173
    const parsed = JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    lib/index.js:184
    writeFileSync(file, `${JSON.stringify(trimmed, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
  • 发起网络请求
    lib/index.js:226
    const res = await fetch(url, { method, headers, body, signal: controller.signal });
  • 发起网络请求
    lib/index.js:259
    const res = await fetch(url, { method: 'GET', headers, signal: controller.signal });
  • 写入本地文件
    lib/index.js:351
    writeFileSync(target, bytes);
  • 读取本地文件
    lib/index.js:935
    if (!target.startsWith(rootDir) || !existsSync(target)) return sendText(res, 404, 'not found');
  • 发起网络请求
    lib/client.js:98
    response = await fetch(url, init);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

给 DeepSeek Harness 加上全模态设置区:配置 OpenAI 兼容的图像/视频生成端点,支持切换配置档,另带 generate_image / generate_video / check_video 工具。

README

由 DeepSeek 最新模型翻译生成
dsh-omni-modal(全模态设置) 给没有生图 / 生视频能力的模型补上这两项能力 —— 不用改 DSH 一行源码。 dsh-omni-modal 在 DSH 的「设置」左栏新增一个 全模态设置 分区:把 harness 指向任意 OpenAI 兼容的生图 / 生视频端点,并注册三个模型可见的工具: | 工具 | 作用 | | generate_image | 同步文生图。图片落盘为 PNG/JPEG/WebP,附件服务可用时还会返回一张可直接预览的图片卡片。 | | generate_video | 异步提交。立刻返回任务 id,视频还在渲染。 | | check_video | 查询该任务;成功后自动把成品视频下载到本地。 | 状态:可用,跟随 Harness 开发者预览版演进,接口可能变化。 生图 tab 生视频 tab 特性 - 可实时编辑的设置页 —— 是真正的 DSH 设置分区(不是静态技能)。改完端点、密钥、模型、路径或默认尺寸,点「保存」即对三个工具生效,无需重启。 - 多套配置档案 —— 可并存多套端点,各自命名,随时切换生效档案。每个工具也支持可选的 profile 参数,单次调用临时改用非生效档案。 - 生图与生视频分开配置 —— 两类 API 的形状往往不同。
展开完整文档(README 剩余 1 节)
dsh-omni-modal(全模态设置)

给没有生图 / 生视频能力的模型补上这两项能力 —— 不用改 DSH 一行源码。

dsh-omni-modal 在 DSH 的「设置」左栏新增一个 全模态设置 分区:把 harness 指向任意 OpenAI 兼容的生图 / 生视频端点,并注册三个模型可见的工具:

| 工具 | 作用 |
| generate_image | 同步文生图。图片落盘为 PNG/JPEG/WebP,附件服务可用时还会返回一张可直接预览的图片卡片。 |
| generate_video | 异步提交。立刻返回任务 id,视频还在渲染。 |
| check_video | 查询该任务;成功后自动把成品视频下载到本地。 |

状态:可用,跟随 Harness 开发者预览版演进,接口可能变化。

生图 tab

生视频 tab

特性

- 可实时编辑的设置页 —— 是真正的 DSH 设置分区(不是静态技能)。改完端点、密钥、模型、路径或默认尺寸,点「保存」即对三个工具生效,无需重启。
- 多套配置档案 —— 可并存多套端点,各自命名,随时切换生效档案。每个工具也支持可选的 profile 参数,单次调用临时改用非生效档案。
- 生图与生视频分开配置 —— 两类 API 的形状往往不同。每套档案为两侧各存一份独立的 baseUrl / apiKey / model / 路径 / 尺寸。
- 额外请求参数 —— 一个自由 JSON 对象,会合并进请求体,用于传递端点特有的参数({"quality":"high"}、{"mode":"text","aspect_ratio":"16:9"} 等)。
- 连通性测试 —— 一键探测 GET <baseUrl>/models(不支持时回退探测接口地址本身),不消耗生成额度。
- 生视频天然异步 —— 提交、记任务、稍后查询。任务记录跨重启保留。
- 无构建步骤 —— 宿主半是纯 ESM,客户端半是手写 CJS bundle,不需要编译,也不需要打包器。

安装

需要 Node.js ≥ 18 与 DeepSeek Harness。

dsh plugin --profile <profile> add github:yzhclcl/dsh-omni-modal

<profile> 是你的 DSH 档案名(web、desktop 等)。加 #v0.1.0 可锁定到某个 tag。

装完 重启 DSH —— 宿主半在启动时注册路由与工具,设置分区出现在「设置 → 全模态设置」。

手工安装(无 pnpm / 离线)

把本仓库复制到一个固定位置,然后在 ~/.dsh/profiles/<profile>/package.json 中加上:

{
"dependencies": {
"dsh-omni-modal": "link:/absolute/path/to/dsh-omni-modal"
},
"dsh": {
"profile": {
"bundles": ["dsh-omni-modal"]
}
}
}

并在 pnpm-lock.yaml 的 importers. → dependencies 段补上同名条目,然后建立链接:

New-Item -ItemType SymbolicLink
-Path "$HOME\.dsh\profiles\<profile>\node_modules\dsh-omni-modal"
-Target "/absolute/path/to/dsh-omni-modal"

不要把包复制进 node_modules 代替链接。DSH 以 Symbol 作为跨模块调用密钥,模块重复加载会让 Symbol 互不相等,导致所有工具调用抛 Cannot read properties of undefined (reading 'prepare'),且重启无法恢复。

使用

装好之后直接对 agent 说话即可:

- 「画一个浅蓝盘子上的草莓」→ generate_image
- 「做一段小红纸船顺流而下的短视频」→ generate_video,随后 check_video

设置页

| 分区 | 内容 |
| 配置档案 | 选择当前生效档案、改档案名、新增(复制当前档案)/ 删除档案 |
| 生图 | 接口地址、API Key、模型名称、请求路径、默认尺寸、额外请求参数 |
| 生视频 | 接口地址、API Key、模型名称、提交路径、查询路径、默认分辨率、默认时长、额外请求参数 |
| 任务记录 | 已提交的生视频任务及其状态 / 产物路径 |

要点:

- 保存后立即对工具生效,无需重启。
- 「接口地址」只填地址本身。 照文档抄时很容易把示例里的请求方法一起抄进来(写成 POST https://api.example.com/v1);插件会自动剥掉开头的 POST/GET 等词,但只填 https://api.example.com/v1 更稳妥。
- 「查询路径」支持两种写法:相对路径(如 /videos/generations/{id})拼在接口地址之后;或 完整 URL(如 https://api.example.com/agnesapi?video_id={id}&model_name={model})原样使用。当查询接口根本不在 baseUrl 之下时,只能用后者。
- 查询路径里可用的占位符:

| 占位符 | 替换为 |
| {id} | 提交时拿到的任务 ID |
| {model} | 该档案配置的模型名 |

- 三个工具始终使用「当前生效档案」,除非显式传入 profile。

工具

generate_image(prompt, size?, model?, profile?, save_to?)
generate_video(prompt, model?, profile?, size?, seconds?, image_url?)
check_video(task_id, profile?, save_to?)

- generate_image 同步返回。图片落盘到插件数据目录的 media/,若附件服务可用还会生成图片附件,在对话里直接可见。模型侧看不到图片内容 —— 要看图请对返回的路径再调 read_image。
- generate_video 异步:提交后立刻返回 taskId。之后用 check_video(task_id) 查询;状态变成 succeeded 时会自动把成品下载到 media/。
- 传入不存在的档案会直接报错并列出可用档案,不会静默回退到别的档案 —— 否则模型会悄悄用错端点与模型,而返回里仍写着它要的那个档案名,完全看不出问题。
- check_video 的失败是软失败:任务查不到(404)、下载地址不可用或下载失败,都返回 status: "failed" / "succeeded" 加 message,而不是抛异常。这些是可预期的业务结果,抛异常会让整轮工具调用失败。
- 视频地址识别覆盖多种常见返回形状:video_url / videoUrl / url、嵌套 video.url、data.、output.、result.、videos[0].url 等。
- 任务 ID 的识别优先取 video_id / videoId,其次才是 id / task_id —— 有些服务(如 Agnes)返回的 id 是内部任务号,用它查询会查不到。
- 接口返回 429(限流)/ 503(繁忙、队列满) 时,错误信息里会附带「稍等一会儿再试」的提示:这两类是可重试的服务端状态,不是配置错误。

接入示例:Agnes AI

Agnes AI 的图片与视频端点形状不同,视频侧需要按官方文档配置。以 apihub.agnes-ai.com 为例:

生图

| 字段 | 值 |
| 接口地址 | https://apihub.agnes-ai.com/v1 |
| 模型名称 | agnes-image-2.5-flash |
| 请求路径 | /images/generations |
| 默认尺寸 | 如 1312x736 |

生视频

| 字段 | 值 |
| 接口地址 | https://apihub.agnes-ai.com/v1 |
| 模型名称 | agnes-video-2.5-flash |
| 提交路径 | /videos |
| 查询路径 | https://apihub.agnes-ai.com/agnesapi?video_id={id}&model_name={model} |
| 默认分辨率 | 720P(Flash 仅支持 720P,其它值返回 400) |
| 默认时长 | 5(字符串,范围 "4"–"12") |
| 额外请求参数 | {"mode":"text","aspect_ratio":"16:9"} |

- 视频提交是 POST /v1/videos(不是 /v1/videos/generations),且 mode 是必填项(text / keyframe / reference),放进「额外请求参数」。
- 查询走 GET /agnesapi?video_id=…&model_name=…,不在 /v1 之下,所以「查询路径」要写完整 URL。
- 输出宽高由 aspect_ratio 决定:21:9→1680x720、16:9→1280x704、4:3→960x720、1:1→720x720、3:4→720x960、9:16→720x1280。
- 免费额度限流较严格;短时间内反复调用会收到 429,等一会儿即可恢复。

数据位置

| 内容 | 路径 |
| 配置 | ~/.dsh-omni-modal/config.json(含 API Key,权限 0600) |
| 生成产物 | ~/.dsh-omni-modal/media/ |
| 视频任务记录 | ~/.dsh-omni-modal/tasks.json |

设置环境变量 DSH_OMNI_DATA_DIR 可整体改到别处(便于隔离测试)。

卸载

dsh plugin --profile <profile> remove dsh-omni-modal

手工安装的话,删掉依赖与 bundles 条目、pnpm-lock.yaml 里的同名条目,然后删除符号链接:

cmd /c rmdir "$HOME\.dsh\profiles\<profile>\node_modules\dsh-omni-modal"

删符号链接只能用 cmd /c rmdir 或 [IO.Directory]::Delete(path, $false);绝不要用 Remove-Item -Recurse —— 它会顺着链接删掉源目录。操作前先完全退出 DSH。

~/.dsh-omni-modal/ 为插件数据,按需自行删除。

实现说明

- lib/index.js — 宿主半(Node ESM):配置存储、/omni-modal/ 路由、三个工具的定义与注册。
- lib/client.js — 浏览器半(手写 CJS bundle,经 window.__ModuleLoader__.load 装载):注册 settings.section 座位并渲染设置页。
- cordis.patch.yml — 插件名册插入行,由 dsh.bundle.patch 承载。

宿主半不导入任何 @deepseek-ai/ 裸模块(第三方插件解析不到那些内部导出),只用 node: 与相对路径;工具的参数与输出 schema 一律写成标准 JSON Schema(required 为字符串数组),而非 defineTool 的属性表 DSL —— 后者会让 LLM API 拒绝整个函数 schema。

See README.md.

License

MIT
预览分享卡片长什么样 ↓yzhclcl/dsh-omni-modal
分享 · DeepSeek Harness Hub
yzhclcl/dsh-omni-modal

为纯文本模型接入生图与生视频能力

这是你的仓库?认领条目

回到顶部