前言¶
在 DeepSeek Harness(DSH)里跑出图链路时,常见做法是让 dsh-draw 的 cogview-clean 引擎或自定义的 image_generate 调用指向本机 127.0.0.1:3089。该端口上跑的是 image-shim.py:向智谱 CogView 取图,去掉右下角「AI生成」角标,再以无损 PNG 返回。
若仍用 Windows 注册表 HKCU\...\Run 做开机自启,往往会遇到两条自启项(例如 image-shim-cogview-clean 与 image-shim-watchdog)争抢同一端口,或 DSH 崩溃、服务中途退出后无人再拉起代理。下面介绍社区插件 dsh-image-shim(维护者 tang-coder-hub,分类:工作流):在 DSH 宿主 apply 时探活并启动代理,之后按间隔复查,不健康则自动拉回。
这是什么¶
dsh-image-shim 是 DSH 的 desktop 侧插件(bundle 通过 cordis.patch.yml 注入)。它不负责改上游 API,而是把插件目录自带的 image-shim.py / dewatermark.py 以子进程形式托管:DSH 起来代理应在,进程挂掉或探活失败则按策略重启。插件以 MIT 许可发布,当前 package 版本为 1.0.0;DSH 兼容范围为 >=0.2.1-rc.2 <0.3.0,Node >=20.18。
它解决什么问题¶
出图链路统一走 127.0.0.1:3089 的前提下,插件替代「登录时触发一次」的自启方案:
- 避免多条自启互相占端口,出现「自启项都在、3089 上却没有健康服务」。
- DSH 重启或 shim 中途退出后,由插件在宿主生命周期内继续守护,而不是等下次登录。
探活不是只看 TCP:GET /draw/status 必须返回 HTTP 200 且 JSON 里 ok === true,以免进程还在但事件循环卡死时被误判为健康。
核心行为¶
| 行为 | 说明 |
|---|---|
| 启动即检查 | apply 里立刻探一次,不等第一个 interval |
| 连续失败才动手 | 默认连续 failureThreshold(2)次失败才拉起,减轻抖动误杀 |
| 僵尸清理 | 端口在听但探活失败时,杀掉本插件 spawn 的 child 再重拉 |
| 不误杀别人 | 端口被其他进程占用时只记日志 |
| 脱离宿主 | spawn(..., detached: true) + unref(),DSH 重启不带走子进程 |
| 优雅退出 | ctx.effect 清定时器;stopOnDispose: true 时可一并停进程 |
默认每 30 秒复查一次(probeIntervalSec);单次探活超时默认 6000 ms(probeTimeoutMs)。README 提醒:出图本身约需 10 秒,超时设太小可能在机器满载时误判不健康并触发多余重启。
配置¶
在 cordis.patch.yml 中可覆盖以下项(均有默认值,不配也能跑):
- insert:
- id: image-shim
name: dsh-image-shim
config:
enabled: true
pythonPath: auto
port: 3089
probeIntervalSec: 30
probeTimeoutMs: 6000
failureThreshold: 2
startupGraceSec: 8
stopOnDispose: false
pythonPath:默认auto,按文档顺序探测本机 Python,第一个能import PIL, numpy的即用;找到python.exe会改用同目录pythonw.exe以免弹黑框。port:若修改,需与dsh-draw引擎的baseURL一致。stopOnDispose:默认false,DSH 退出后代理可继续运行,下次启动直接复用。
智谱 API key 从 ~/.dsh/.credentials.yaml 或环境变量 GLM_API_KEY 读取。Python 侧依赖 Pillow、numpy;插件探测时会真实 import 验证。
安装与卸载¶
插件在 DSH 启动时加载;宿主已运行时,dsh plugin add 后 bundle 可热挂载,README 记载本机 2026-10-25 验证装完无需重启 DSH 即可生效。安装前请自行阅读仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行子进程。
从 GitHub 安装(推荐):
dsh plugin --profile desktop add github:tang-coder-hub/dsh-image-shim
本地目录开发调试:
dsh plugin --profile desktop add 'file:<插件目录绝对路径>'
卸载:
dsh plugin --profile desktop remove dsh-image-shim
装好后建议删除 HKCU\...\Run 里 image-shim-watchdog 一类条目,避免与插件两套守护重复拉起(一般不会坏,但没必要并存)。
手动验证¶
确认代理健康:
curl http://127.0.0.1:3089/draw/status
# {"ok":true,"shim":{"pid":...},"requests":0,...}
运行日志位于 <插件目录>/draws/shim.log。
适用场景与使用边界¶
适合:已在本地工作流里依赖 127.0.0.1:3089 的 CogView 出图 + 去服务端叠加角标,并希望守护逻辑跟 DSH desktop 宿主走,而不是注册表自启。
插件用途是处理上游返回图里由服务端烧进像素的水印角标,并转无损 PNG;不破解付费墙、不绕过用量、不动 DRM,请求仍发上游、仍计费。
README 明确:抹掉生成内容上的 AI 标识,在部分服务商条款中可能不允许(智谱 CogView 当前角标烧在图内,且 watermark_enabled: false 无效)。仅建议用于本地个人工作流;使用前请自行核对所调用图像服务商的服务条款,后果由使用者承担。若需合规去标识,更稳妥的是选用条款允许无水印或可调标识的上游,而非客户端抹除。
结尾¶
dsh-image-shim 把 image-shim.py 的启停与 HTTP 级探活绑到 DSH desktop 宿主上,减少端口争抢和「只自启一次」带来的空窗。社区目录页:skillhub.cn/plugins/tang-coder-hub/dsh-image-shim;源码与完整说明:github.com/tang-coder-hub/dsh-image-shim。DSH 生态强调「一切皆插件」;skillhub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。