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

AI 生图工作台 dickpy/dsh-imagegen

DeepSeek Harnessv1.11.0
dickpy4 天前有提交已提供中文文档扫描:含敏感能力

在 DeepSeek Harness 里,生成、编辑、管理,一站完成。

62.2/100
综合分
154
GitHub 星标
4,032
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @dickpy/dsh-imagegen
npm 源 · @dickpy/dsh-imagegen 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v1.10.0,当前版本为 v1.11.0
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@dickpy/dsh-imagegen @ 1.11.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:02:52

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 187 处,展示前 82 条)
  • 发起网络请求
    lib/index.js:556
    const response = await fetch(url, { headers: headers(apiKey) });
  • 发起网络请求
    lib/index.js:686
    const body = await responseJson(await fetch(endpoint(config.apiUrl, "/chat/completions"), {
  • 发起网络请求
    lib/index.js:872
    const response = await fetch(`${config.apiUrl.replace(/ +$/, "")}/chat/completions`, {
  • 发起网络请求
    lib/index.js:1480
    response = await fetch(url, {
  • 发起网络请求
    lib/index.js:1741
    response = await fetch(pollUrl, {
  • 发起网络请求
    lib/index.js:1884
    response = await fetch(requestUrl, {
  • 读取密钥环境变量
    lib/index.js:2971
    const clientSecret = process.env.ANTIGRAVITY_CLIENT_SECRET?.trim() ?? "";
  • 读取本地文件
    lib/index.js:6822
    const manifest = JSON.parse(await readFile(join(host.profileDir, "node_modules", "@dickpy", "dsh-imagegen", "package.json"), "utf8"));
  • 写入本地文件
    lib/index.js:9438
    await mkdir(dir, { recursive: true });
  • 执行外部命令来自配置/变量
    lib/index.js:9448
    spawn(process.platform === "win32" ? "explorer.exe" : process.platform === "darwin" ? "open" : "xdg-open", [dir], {
  • 读取本地文件
    lib/index.js:11527
    entries = await readdir(root, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:11538
    const info = await stat(full).catch(() => void 0);
  • 读取本地文件
    lib/index.js:11678
    children = await readdir(root, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:11687
    if (existsSync(markdown)) files.push({
  • 读取本地文件
    lib/index.js:11702
    const info = await stat(candidatePath).catch(() => void 0);
  • 执行外部命令来自配置/变量
    lib/index.js:11853
    const child = spawn(command, args, {
  • 写入本地文件
    lib/index.js:11914
    await mkdir(destination, { recursive: true });
  • 写入本地文件
    lib/index.js:11921
    await mkdir(path.dirname(destination), { recursive: true });
  • 写入本地文件
    lib/index.js:11922
    await writeFile(destination, bytes);
  • 写入本地文件
    lib/index.js:11948
    await rename(from, to);
  • 删除本地文件
    lib/index.js:11951
    await rm(from, {
  • 删除本地文件
    lib/index.js:11988
    await rm(destination, {
  • 写入本地文件
    lib/index.js:11992
    await mkdir(root, { recursive: true });
  • 删除本地文件
    lib/index.js:12011
    await rm(staging, {
  • 删除本地文件
    lib/index.js:12035
    await rm(destination, {
  • 删除本地文件
    lib/index.js:12061
    await rm(staging, {
  • 删除本地文件
    lib/index.js:12086
    await rm(path.join(staging, "repo", ".git"), {
  • 执行外部命令来自配置/变量
    lib/index.js:12412
    const child = spawn(argv[0], argv.slice(1), {
  • 发起网络请求
    src/client/api.ts:45
    const response = await fetch(CANVAS_SKILL_API.pptRun, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ ...req
  • 发起网络请求
    src/client/api.ts:50
    return (await readEnvelope<{ ok: true; tasks: CanvasSkillTask[] }>(await fetch(CANVAS_SKILL_API.pptTasks, { method: 'POST' }))).tasks
  • 发起网络请求
    src/client/api.ts:54
    const response = await fetch(CANVAS_SKILL_API.pptRuntime, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ in
  • 发起网络请求
    src/client/api.ts:60
    const response = await fetch(UPDATE_API.check, { method: 'POST' })
  • 发起网络请求
    src/client/api.ts:67
    const response = await fetch(UPDATE_API.apply, {
  • 发起网络请求
    src/client/api.ts:78
    const response = await fetch(GENERATE_API, {
  • 写入剪贴板
    src/client/image-clipboard.ts:30
    await navigator.clipboard.write([new ClipboardItem({ 'image/png': pngBlob(image) })])
  • 发起网络请求
    src/client/index.ts:113
    ? (input, init) => fetch(input, init)
  • 发起网络请求
    src/engine.ts:490
    response = await fetch(url, {
  • 发起网络请求
    src/engine.ts:774
    response = await fetch(pollUrl, {
  • 发起网络请求
    src/engine.ts:954
    response = await fetch(requestUrl, {
  • 发起网络请求
    src/engine.ts:1086
    response = await fetch(requestUrl, {
  • 发起网络请求
    src/engine.ts:1218
    response = await fetch(requestUrl, {
  • 发起网络请求
    src/engine.ts:1334
    response = await fetch(requestUrl, {
  • 读取本地文件
    src/index.ts:734
    const data = readFileSync(filePath)
  • 写入本地文件
    src/index.ts:950
    await mkdir(runRoot, { recursive: true })
  • 发起网络请求
    src/layer-analyzer.ts:140
    const response = await fetch(`${config.apiUrl.replace(/ +$/, '')}/chat/completions`, {
  • 发起网络请求
    src/prompt-enhancer.ts:112
    const response = await fetch(url, { headers: headers(apiKey) })
  • 发起网络请求
    src/prompt-enhancer.ts:262
    const response = await fetch(endpoint(config.apiUrl, '/chat/completions'), {
  • 写入本地文件
    src/routes.ts:1918
    await fsMkdir(dir, { recursive: true })
  • 执行外部命令来自配置/变量
    src/routes.ts:1931
    const child = spawn(command, [dir], { detached: true, stdio: 'ignore' })
  • 读取本地文件
    src/skill-config.ts:213
    if (!existsSync(file)) return undefined
  • 读取本地文件
    src/skill-config.ts:216
    raw = JSON.parse(await readFile(file, 'utf8')) as unknown
  • 执行外部命令来自配置/变量
    src/skill-config.ts:363
    const child = spawn(argv[0]!, argv.slice(1), {
  • 写入本地文件
    src/skill-config.ts:396
    await mkdir(path.dirname(target), { recursive: true })
  • 写入本地文件
    src/skill-config.ts:399
    await writeFile(temporary, content, 'utf8')
  • 写入本地文件
    src/skill-config.ts:400
    await rename(temporary, target)
  • 删除本地文件
    src/skill-config.ts:402
    await rm(temporary, { force: true }).catch(() => { })
  • 读取本地文件
    src/skill-store.ts:95
    try { entries = await readdir(root, { withFileTypes: true }) } catch { return 0 }
  • 读取本地文件
    src/skill-store.ts:100
    const info = await stat(full).catch(() => undefined)
  • 读取本地文件
    src/skill-store.ts:262
    try { children = await readdir(root, { withFileTypes: true }) } catch { return [] }
  • 读取本地文件
    src/skill-store.ts:269
    if (existsSync(markdown)) files.push({ folder: child.name, path: markdown })
  • 读取本地文件
    src/skill-store.ts:282
    const info = await stat(candidatePath).catch(() => undefined)
  • 读取本地文件
    src/skill-store.ts:284
    return await readFile(candidatePath, 'utf8').catch(() => undefined)
  • 发起网络请求
    src/skill-store.ts:433
    response = await fetch(url, {
  • 执行外部命令来自配置/变量
    src/skill-store.ts:453
    const child = spawn(command, args, {
  • 写入本地文件
    src/skill-store.ts:496
    await mkdir(destination, { recursive: true })
  • 写入本地文件
    src/skill-store.ts:503
    await mkdir(path.dirname(destination), { recursive: true })
  • 写入本地文件
    src/skill-store.ts:504
    await writeFile(destination, bytes)
  • 写入本地文件
    src/skill-store.ts:532
    await rename(from, to)
  • 删除本地文件递归
    src/skill-store.ts:535
    await rm(from, { recursive: true, force: true })
  • 删除本地文件递归
    src/skill-store.ts:578
    await rm(destination, { recursive: true, force: true })
  • 写入本地文件
    src/skill-store.ts:579
    await mkdir(root, { recursive: true })
  • 删除本地文件递归
    src/skill-store.ts:599
    await rm(staging, { recursive: true, force: true }).catch(() => { })
  • 删除本地文件递归
    src/skill-store.ts:626
    await rm(destination, { recursive: true, force: true })
  • 写入本地文件
    src/skill-store.ts:627
    await mkdir(destination, { recursive: true })
  • 删除本地文件递归
    src/skill-store.ts:656
    await rm(staging, { recursive: true, force: true }).catch(() => { })
  • 删除本地文件递归
    src/skill-store.ts:677
    await rm(path.join(staging, 'repo', '.git'), { recursive: true, force: true })
  • 发起网络请求
    src/storage-sync.ts:83
    const response = await fetch(url, {
  • 发起网络请求
    src/subscription/manager.ts:326
    const response = await fetch(OPENROUTER_IMAGE_URL, {
  • 发起网络请求
    src/subscription/manager.ts:402
    const response = await fetch(url, {
  • 发起网络请求
    src/templates-store.ts:278
    response = await fetch(def.listUrl, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) })
  • 发起网络请求
    src/templates-store.ts:437
    response = await fetch(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) })
  • 读取本地文件
    src/updater.ts:169
    const manifest = JSON.parse(await readFile(join(host.profileDir, 'node_modules', '@dickpy', 'dsh-imagegen', 'package.json'), 'utf8')) as { name?: unkn
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-settings
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

功能亮点

  • 文生图与图生图
  • 历史记录跨设备共享
v1.11.02026-10-29
· v1.11.0 · 复制图片、隐私模式与订阅渠道修复 · 更新 · 复制图片(#59):在文生图、图生图、对比结果和放大预览中,右键图片或点击「复制图片」,可粘贴到其他应用。PNG 保留原始数据,JPEG/WebP 等转换为 PNG;剪贴板权限不足时显示错误,不影响下载。 · 隐藏图片(#60):点击顶部「隐藏图片」或按 Alt+Shift+H,可暂时隐藏工作室的图片预览,再次操作恢复。工作室历史、对比和放大预览同步隐藏,不删除生成结果。此功能不隐藏 DSH 原生对话中的图片,也不会清空系统剪贴板。 · 订阅渠道 Agent 生图(#57):采用贡献者 @Nyarlathoteppppp 的 PR #58,允许已配置的订阅渠道通过 Agent 预检。后续补充了所选渠道检查和文生图、图生图、/edit_image 回归;账号登录与凭据刷新仍由订阅管理器负责。 · 图片转 PPT 技能安装:兼容上游仓库 skills/image-to-editable-ppt/ 目录布局,并正确处理 GitHub 技能目录链接。上游技能和 CLI 本身没有改写。 · 安装 dsh plugin --profile web add @dickpy/dsh-imagegen@1.11.0 升级后请重启 DSH。剪贴板图片复制需要宿主允许 Clipboard API;不可用或权限被拒时可下载图片。 · 验证范围 类型检查、构建、单元测试、DOM 端到端、完整 smoke 和安装包检查;订阅和隐私/复制入口包含回归用例。技能安装另使用上游真实仓库检查了技能文件及 Python 运行环境安装。 未在真实 DSH Windows 桌面端验证图片转 PPT 的完整上传、生成和下载链路,也未在该宿主实测系统剪贴板;不能据此声称图片转 PPT 已完整跑通。
v1.10.02026-10-27
· v1.10.0 · Seedream 水印开关:渠道可以关闭「AI 生成」角标 本版处理 #56:火山方舟 / BytePlus 的 Seedream 模型默认会在图片右下角叠加「AI 生成」水印,插件此前没有开关,也从不透传该参数,导致导出的原图必然带角标。 · 主要更新 · 渠道新增「图片添加「AI 生成」水印」开关(默认开启,保持原有行为)。关闭后,文生图与图生图两条请求都会向上游透传 watermark: false,输出不再叠加右下角角标。 · 两处请求体同步透传:文生图走 effectiveParams(),图生图走手工构造的 Seedream 请求体(该分支不展开 params),两处都已覆盖,否则会出现"文生图没水印、图生图还有"的半修状态。 · 只对认这个字段的上游发送:命中官方模型 id(doubao-seedream-*)或官方域名(volces.com / bytepluses.com)才会带上该字段。第三方 OpenAI 兼容中转通常不认识它,避免因此返回 400;同时这也覆盖了插件内置的方舟预置渠道(模型 id 是 seedream-5.0-pro,只按名字匹配会漏)。 · 所有入口一致生效:生图面板、对比生图、无限画布、Agent 工具与 /edit_image 命令共用同一个生成运行时,渠道开关对它们同时有效。 · 合规提示写在开关旁:该角标属于生成合成内容标识,是否关闭由使用者决定,关闭后对外发布时的标注义务同样由使用者承担;上游的隐式水印不受此开关影响。 · 兼容性 · 渠道对象新增可选字段 watermark(schema 默认 true),旧的设置文档不需要迁移;开关保持开启时,请求体与之前完全一致。 · 未新增运行时依赖,未改动历史、画廊、画布、模板与技能数据。 · 安装 dsh plugin --profile web add @dickpy/dsh-imagegen@1.10.0 从本页的 tgz 附件安装: dsh plugin --profile web add /dickpy-dsh-imagegen-1.10.0.tgz · 验证 · 类型检查、构建、单元测试、DOM 端到端与全部 smoke 测试通过。 · 新增 B7b:默认不发送 watermark;渠道关闭后文生图与图生图请求体都带 watermark: false;中转网关(短模型名 + 非官方域名)不会收到该字段。 · 渠道表单新增设置往返断言:关闭开关后 watermark: false 会写进设置文档,读取时旧渠道仍视为开启。 · 出图效果未在真实火山方舟账号上实机验证,验收请以关闭开关后原图右下角角标消失为准。
v1.9.52026-10-24
· v1.9.5 · 侧栏历史面板稳定性 · 修复客户端重复应用时旧 UI 树和设置订阅没有清理,导致侧栏同一宿主收到多个历史面板 portal 的问题;同一文档仅保留一个生图 UI mount。 · 为侧栏历史宿主与生图面板补充不透明系统底色和主题层回退,避免宿主或壁纸主题把 --dsw-alias-bg-base 设为透明后透出底层内容。 · 增加会话/生图切换、重复应用客户端和背景声明回归检查。 验证:类型检查、构建、单元测试、DOM 端到端测试和包 smoke test 通过。未在 DSH Web、Windows Desktop 或 macOS Desktop 宿主中实机验证;本版本不宣称完成这些宿主环境的实机验证。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-imagegen 在 DeepSeek Harness 里,生成、编辑、管理,一站完成。 快速导航 🚀 快速开始 · 无限画布 · 电商套图 · 文生图 / 图生图 · 图片转 PPT · 模板 / 画廊 · 模型配置 · 👥 QQ 交流群 快速开始 需要已安装 DeepSeek Harness 和 Node.js 20+。 dsh plugin --profile web add @dickpy/dsh-imagegen 安装后重启 dsh web,侧边栏会出现「生图」入口。到「设置 → 生图配置」添加服务商、填写 API 地址与密钥、检测并选择生图模型,保存后即可开始创作。Windows 若遇 PowerShell 脚本策略限制,请使用 dsh.cmd。 其他安装方式、升级与回滚 - 让智能体安装:把上面的安装命令发给 DSH、Codex 或其他 coding agent。 - 指定版本:使用 @dickpy/dsh-imagegen@<版本号>,或从 GitHub Releases 下载 tgz 后安装。 - Web / 命令行升级:重复执行 add 命令;插件也会在面板中提示新版本。更新后重启 dsh web。
展开完整文档(README 剩余 1 节)
dsh-imagegen

在 DeepSeek Harness 里,生成、编辑、管理,一站完成。
快速导航 🚀 快速开始 · 无限画布 · 电商套图 · 文生图 / 图生图 · 图片转 PPT · 模板 / 画廊 · 模型配置 · 👥 QQ 交流群

快速开始

需要已安装 DeepSeek Harness 和 Node.js 20+。

dsh plugin --profile web add @dickpy/dsh-imagegen

安装后重启 dsh web,侧边栏会出现「生图」入口。到「设置 → 生图配置」添加服务商、填写 API 地址与密钥、检测并选择生图模型,保存后即可开始创作。Windows 若遇 PowerShell 脚本策略限制,请使用 dsh.cmd。

其他安装方式、升级与回滚

- 让智能体安装:把上面的安装命令发给 DSH、Codex 或其他 coding agent。
- 指定版本:使用 @dickpy/dsh-imagegen@<版本号>,或从 GitHub Releases 下载 tgz 后安装。
- Web / 命令行升级:重复执行 add 命令;插件也会在面板中提示新版本。更新后重启 dsh web。
- 桌面端升级:从插件1.8.2起,检测到宿主插件安装接口时,可直接在插件面板点击「在线更新」,由DSH内置插件管理器安装新版,完成后重启DSH。1.8.0/1.8.1的按钮已被旧逻辑禁用,首次需通过宿主支持的方式安装修复包。宿主未提供安装接口时需先升级DSH。详见 v1.8.2 更新说明。
- 渠道配置、历史记录和画廊数据保存在 DSH 宿主侧,正常升级不会清空。

核心功能

| 能力 | 用途 |
| 无限画布 | 把提示词、参考图和生成节点连成可迭代的创作流程。 |
| 图片转可编辑 PPT | 上传图片或从生图结果一键带入,直接执行官方技能,下载可编辑 PPTX。 |
| 电商套图 | 从商品参考图生成主图、卖点图、场景图等成套素材。 |
| 文生图 / 图生图 | 使用兼容的生图渠道生成、编辑并比较图片。 |
| 对话与智能体 | 在 DSH 对话中生成图片、继续编辑,并把结果带回会话。 |
| 画廊与历史 | 管理创作结果、模板与标签;在不同设备上接续创作。 |

把文字、图片和生成配置连起来;从历史或画廊加入素材,再继续生成和迭代。

画布、文件节点与技能细节

- 支持图片、文本、生成配置和文件节点;图片节点可标注、移除背景或拆分图层。
- 单个文件最大 50MB;可在画布内预览常见文档、表格、PDF、图片与音视频。
- 生图结果可右键选择「复制图片」,也可通过结果或放大预览中的按钮复制;剪贴板不可用时会提示,图片仍可下载。
- 顶部「隐藏图片」或 Alt+Shift+H 可暂时遮住工作室图片预览,再次操作恢复;该功能不会隐藏 DSH 原生对话中的图片,也不会删除文件或清空剪贴板。
- 内置文本润色、图片描述和内容抽取等技能。图片转 PPT 复用上游 image-to-editable-ppt 技能,可在设置中安装该技能与 Python 运行环境。
- 图片转 PPT 由宿主智能体按上游流程重建可编辑页面;可配置图像后端,PaddleOCR token 为可选项,离线文字检测仅提供位置和尺寸提示。
- 也可安装和管理外部技能。重任务技能会启动无头智能体,该智能体具有本机文件读写与命令执行能力;运行前请检查技能来源和权限。
- 技能配置格式与安全边界见 docs/skill-config.md。

从商品主体和可选风格参考出发,先预览套图计划、逐张调整提示词,再批量生成;主图可作为其他用途图片的一致性参考。

输入提示词即可生成,也可上传参考图进行编辑;支持多张结果、比例与清晰度设置、任务队列、历史恢复和全屏预览。

在 DSH 对话里可让 Agent 调用生图;用 /edit_image 描述修改内容,也可从工作台或画廊把图片加入当前会话继续编辑。

多模型对比

同一提示词可提交给多个模型并列查看结果,便于快速挑选风格与质量。

提示词模板库内置精选案例、沧河、手绘、Prompt/Signal 与 GPT Image 2 五个来源,可搜索、筛选、收藏并直接带入生图。生成结果可在画廊中用标签和收藏继续整理。

可编辑海报:文字与 Logo

在无限画布的图片工具栏或右键菜单选择 「海报编辑:文字 / Logo」,即可叠加可编辑标题、价格和品牌 Logo。支持多行文字、自动换行、字体类别、字号、颜色、对齐、Logo 等比缩放、拖动定位、图层顺序及撤销重做。

- 保存到画布:生成新图片节点并保存可编辑图层,原图保持原样;再次打开新节点可继续编辑。请等待画布保存完成再关闭页面。
- 导出 PNG:下载与预览一致的合成图;PNG 本身不保存可编辑工程。
- 合成过程在本地完成,不调用模型;底图已有文字不会自动移除。最长边上限 4096 像素。

模型配置

在「设置 → 生图配置」添加渠道,填写 API 地址与密钥,检测并选择生图模型。可配置多个提供方,并设置默认生图模型和可选的提示词增强聊天模型。

支持 OpenAI 兼容的 Images API / Chat Completions,以及 xAI Grok、Google Nano Banana、Seedream、Qwen-Image、GLM-Image、MiniMax 等预置渠道;也可手动添加兼容模型。

接口与渠道补充说明

- 通用渠道默认自动判断 Images API 与 Chat Completions;也可在设置中手动指定。
- One-API、New API、LiteLLM 等只暴露 /chat/completions 的网关,可填写完整接口地址并选择对应模型。
- API 密钥保存在 DSH 宿主设置中;未被自动识别的兼容模型可手动添加。
- 不同服务商的图生图、尺寸与返回格式可能不同,请确认所选模型实际支持的能力。
- 火山方舟 / BytePlus 的 Seedream 默认在图片右下角叠加「AI 生成」角标;渠道编辑里的「图片添加「AI 生成」水印」可关闭,关闭后请求体透传 watermark: false。该角标属于生成合成内容标识,关闭后的对外发布标注义务由使用者承担。

数据与安全

- API 请求经 DSH 宿主转发;密钥保存在本机设置中,不直接暴露给浏览器。
- 历史、画廊、画布和图片保存在 DSH 数据目录 ~/.dsh/dsh-imagegen/,由你控制。
- 生图与图生图会把提示词或参考图发送给所配置的上游服务;请按服务商政策处理敏感内容。
- 内置轻量技能会把所选内容发送给配置的聊天模型。图片转 PPT 由宿主 Agent 调用上游技能和所配置的模型或服务,在本地输出 PPTX;结果和可编辑程度需人工检查。
- 外部重任务技能可能读写本机文件并执行命令;运行前请确认技能可信、输入内容可共享。
- 生图会消耗上游 API 额度;请人工检查生成结果。不要把 API 密钥贴到 Issue、日志或截图中。

QQ 交流群与支持

欢迎加入 QQ 群,一起交流 DSH、AI 生图与插件使用,也欢迎分享提示词、工作流和改进建议。

- Bug 报告 · 功能建议
- 查看所有 Issues · GitHub Releases
- 如果这个插件对你有帮助,欢迎给项目点个 Star。

本地开发

pnpm run typecheck
pnpm run build
pnpm run watch
node scripts/smoke.mjs

冒烟测试会把数据根目录重定向到临时目录,不会写入你的 ~/.dsh/dsh-imagegen。

本地打包并安装到 DSH 验收:

pnpm pack --pack-destination .
dsh plugin --profile web add ./dickpy-dsh-imagegen-<版本>.tgz

许可证

Apache-2.0

内置模板引用的第三方项目与许可,见 THIRD_PARTY_NOTICES.md。

图片转可编辑 PPT

在「图片转 PPT」里最多上传 12 张 PNG/JPG/WebP(每张 20MB),调整缩略图顺序后转换;文生图、图生图、多模型对比和放大预览里的「生成可编辑 PPT」可直接带入。

首次使用前,先在「生图配置 → 图片转可编辑 PPT」安装官方技能和运行环境,需要 Python 3.10+。按需填写 PaddleOCR token、图像 API 并保存应用;也可选离线文字检测,图像后端支持已有的 Codex OAuth。转换由宿主默认模型和 Agent 预设执行,需要文件/命令能力,多页需子 Agent;请启用技能和长任务。

转换可能耗时数分钟,并产生模型/API 费用。任务支持取消、刷新恢复、下载及复用图片;宿主重启会中断在途任务。还原质量取决于原图、OCR 和模型,失败时会保留明确状态。详细前提和审核范围见 PPT 模式说明。
预览分享卡片长什么样 ↓dickpy/dsh-imagegen
分享 · DeepSeek Harness Hub
dickpy/dsh-imagegen

在 DeepSeek Harness 里,生成、编辑、管理,一站完成。

回到顶部