在 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-imagegennpm 源 · @dickpy/dsh-imagegen 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 张 · 点击查看大图功能亮点
- 文生图与图生图
- 历史记录跨设备共享
最近更新
在 GitHub 查看全部 →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 模式说明。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dickpy/dsh-imagegen
在 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