dsh-sd-bridge-guard
Verifieddsh-sd-bridge-guard · v0.7.0 · MIT
DeepSeek Harness 插件:本机 Stable Diffusion 生图六件套(文生图/图生图/蒙版重绘/只生成脚本/模型清单/服务管理)+ 违规分流协议。跨机器零适配——SD 目录自动探测,找不到可一键自举安装(先补齐 git/Python/VC++ 等环境),产物目录自动落在会话工作区;设置 → 插件可直接改配置。
Install
dsh plugin add dsh-sd-bridge-guard Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-sd-bridge-guard
DeepSeek Harness 插件 · 本机 Stable Diffusion 生图六件套 + 违规分流协议 · 跨机器零适配
让 DeepSeek Harness 直接调用你电脑里的 Stable Diffusion WebUI 生图:不用提前打开 SD(首次调用自动以纯 API 模式拉起)、不用改任何路径——装上插件就能用。
| 文生图 | 图生图 |
|---|---|
![]() |
![]() |
特性
- 零本地适配:SD 安装目录自动探测(配置 > 环境变量
DSH_SD_DIR> 自举安装记录 > 扫盘候选);产物、参考图、可复现脚本全部自动落在当前会话工作区(SD-Picture/、ref/、sd-direct.ps1)。 - 没装 SD 也能用:插件找不到 SD 时返回一条可直接运行的安装命令(包内
install-sd.ps1),一键装好 WebUI + AWPainting v1.2 模型 +vae-ft-mse-840000VAE + 质量默认配置并把路径记进~/.dsh-sd-bridge.json,重启即用(模型/VAE 都带 sha256 校验,哈希与画质已验证的本机文件一致)。 - 六个工具:
sd_txt2img文生图、sd_img2img图生图、sd_inpaint蒙版重绘、sd_script只生成可复现脚本不出图、sd_models模型清单、sd_server服务管理。 - 违规分流协议(
sd-paint技能内置):轻微违规删词后照常出图并附可复现脚本;明显违规不出图、只给合规素体的可复现脚本;回复最末尾列出被剔除的违规提示词英文。 - 可复现:每次出图返回单行 powershell 脚本(提示词高亮),用户复制整行即可在 PowerShell/cmd 复跑同一张图;脚本自带服务托管——SD 没开它自己拉起(首次含模型加载 1-3 分钟)、跑完自动打开这张图(
-NoOpen关闭)、任何失败只报一条错误就退出。 - 服务托管:SD 没开也能生图——插件自动以
--api --nowebui拉起、复用、可选空闲自动关闭。
安装
三种方式任选其一(装完重启 DeepSeek Harness):
# 1) 在 DSH「设置 → 插件」里粘贴 Git 安装源
github:savinglighting/dsh-sd-bridge-guard
# 2) 或粘贴 npm 包名
dsh-sd-bridge-guard
# 3) 或本地目录(开发者)
dsh plugin add link:D:\path\to\dsh-sd-bridge-guard
DSH 插件暂不支持自动更新:升级需先卸载再安装新版。
首次使用
- 已装 SD WebUI:什么都不用做。插件启动时自动探测(也认
DSH_SD_DIR环境变量与cordis.patch.yml的sdDir覆盖)。 - 没装 SD:让 Harness 帮你画张图,它会返回安装指引;或自己在 PowerShell 跑:
powershell -ExecutionPolicy Bypass -File "插件目录\install-sd.ps1"
装完重启 DSH。首次生图会在线安装 Python/torch 依赖(10-30 分钟),之后秒级响应。
install-sd.ps1 参数
脚本先跑环境预检(磁盘 ≥15GB → 镜像探活 → git → Python 3.10 → VC++ 运行库,缺啥补啥、每项失败只报一条错即退出,最后打一张就绪清单),再克隆 WebUI、按清单拉资源:
| 参数 | 默认 | 说明 |
|---|---|---|
-Models |
awpainting |
模型清单,逗号多选:awpainting / revanimated / anythingv5 / majicmix / darksushi(none = 不拉) |
-Vaes |
mse,animevae |
VAE 清单:mse(写进 config 默认)/ animevae |
-Loras |
add_detail,easynegative,badhandv4 |
常见资源:细节增强 LoRA + 负面嵌入 + 手部修复嵌入(none = 不拉) |
-Upgrade |
关 | 已存在文件做 sha 复验、不符重拉;旧版本命中 Supersedes 时补拉新版(旧版保留) |
-Mirror |
https://hf-mirror.com |
填 "" 用官方源 |
-SkipModel / -SkipVae / -SkipLora |
关 | 跳过对应类别的下载 |
-NoPrereq / -SkipVC / -SkipDiskCheck / -SkipGit / -SkipPython |
关 | 跳过环境预检的全部或某一项 |
-NoConfig |
关 | 不写 config.json 质量默认值 |
清单里每个条目的 sha256 都与本机出图正常的文件逐字节比对过(HF lfs oid = sha256);键写错会打印全部可用键。跑完会输出一张「资源清单汇总」表(已下载 / 已存在 / 失败原因)。
自己的 LoRA 怎么装:国内站资源(国风山水、赛博朋克、电商摄影这类)直链不稳,不进默认清单——手动把
.safetensors放进<SD目录>\models\Lora\(Embedding 放models\embeddings\)即可,sd_models能列出来。
提供的工具
| 工具 | 作用 |
|---|---|
sd_txt2img |
文生图:提示词、负面词、尺寸/步数/CFG/采样器/seed、批次 1-4、临时换 checkpoint、LoRA、hires fix、styles、summary;返回 script(【文生图】脚本) |
sd_img2img |
图生图:本地图片路径 + denoisingStrength 重绘;工作区外的参考图自动固化到 ref/;返回 script(【图生图】脚本) |
sd_inpaint |
蒙版重绘(inpaint):只改画面里一块(补手/去杂物/局部改色/换背景)。蒙版给 mask(白/不透明 = 重绘区)或 maskBox: "x,y,w,h"(插件手写 PNG 现场造蒙版存进 ref/);maskBlur/inpaintingFill/maskInvert/inpaintFullRes+padding 全可调;返回 script(【蒙版重绘】脚本,带 -Mask)与接缝自检 selfCheck |
sd_script |
只生成可复现脚本,不调 SD、不出图(generatesImage 恒为 false)——明显违规分流专用 |
sd_models |
列出 checkpoints / LoRA / 采样器 / VAE / 当前选项 |
sd_server |
status / start / stop;找不到 SD 时 status 返回安装指引 |
保存与命名
- 产物目录:会话工作区下的
SD-Picture/(可用outputDir改成绝对路径) - 文件名 = 提示词总结_三位序号.png;
summary参数决定文件名,序号自动递增永不覆盖 - 返回
paths(绝对路径)、fileNames、savedDir、replyImages(Markdown,贴进回复即全尺寸展示)、script(可复现脚本) - 用户手跑
sd-direct.ps1时,图保存成功后脚本会自动打开它;批量跑加-NoOpen
违规分流协议(sd-paint 技能全文内置)
判定标准 = 模型自己会拒绝执行的尺度,不依赖固定词表。需求里只要有一部分违规就触发分流,不整单拒绝:
- A 档 · 轻微违规(删几个词后完全正常)→ 剔除违规片段、照常出图存盘、说明剔除、附脚本、回复最末尾英文违规词清单。
- B 档 · 明显违规(露骨/整体性质)→ 一张图都不生成,只给合规素体的可复现脚本(
sd_script),末尾同样列英文违规词。
配置
推荐:设置 → 插件 → sd-bridge(0.7.0 起注册了配置 schema,全部字段可视化编辑、带中文说明,改完下一个工具调用即生效)。也可在 cordis.patch.yml 中按 id sd-bridge 覆盖——patch 层显式指定的键优先级最高,设置面板不会覆盖它们。
优先级:默认值 < 设置面板 < cordis.patch.yml。
| 键 | 默认 | 说明 |
|---|---|---|
sdDir |
''(自动探测) |
SD WebUI 安装目录;探测顺序:此配置 > DSH_SD_DIR > ~/.dsh-sd-bridge.json > 扫盘候选 |
port |
7860 |
API 端口 |
autoStart |
true |
探测不到 API 时自动启动 |
startupTimeoutMs |
420000 |
等待 SD 就绪的上限(含模型加载) |
requestTimeoutMs |
600000 |
单次生图上限 |
idleStopMinutes |
0 |
空闲 N 分钟后自动关闭插件拉起的 SD(0 = 不关) |
extraArgs |
[] |
追加给 launch.py 的参数(如 ["--medvram"]) |
outputDir |
'SD-Picture' |
产物目录;相对路径解析到会话工作区 |
refDir |
'ref' |
参考图固化目录;相对路径解析到会话工作区 |
defaultSampler |
'DPM++ 2M' |
未指定采样器时的默认(同步数下比 A1111 默认的 Euler a 更干净);留空 = 用 SD 默认 |
defaultNegative |
质量底线负面词 | 未传 negativePrompt 时自动补上(肢体/水印/低画质);留空 = 不补 |
img2imgDenoising |
0.55 |
图生图默认重绘幅度,越小越贴参考图(保画风建议显式传 0.30-0.50) |
enabled |
true |
关掉即不注册工具 |
测试
npm test # = 下面四条不出图的检查(CI 可跑,不需要本机 SD)
node smoke-skill.mjs # 注册冒烟 + 双分支协议要点 + 可移植性断言(不出图)
node test-install-record.mjs # 安装记录专项:BOM 读取 + 就地自愈(不出图、毫秒级)
node test-settings.mjs # 设置面板专项:schema 注册 13 字段 + 面板实时生效 + patch 优先(不出图)
node test-install-catalog.mjs # 安装清单专项:三张清单 sha/源 + 环境预检 + 干跑 + 非法键(不出图)
npm run acceptance # 真实出图验收:命名、序号、脚本字段、ref 固化(需本机 SD 在跑)
环境变量:DSH_SD_DIR 指定 SD 目录;ACCEPTANCE_WS 指定验收工作区(默认临时目录)。
验收方法(重要):改完插件后新开一个会话再画一张图复验——旧会话带着旧工具描述/旧上下文,跑通了也不代表新会话没问题,建议自己多试试。
踩坑排查表
| # | 现象 | 根因 | 解法(现状) |
|---|---|---|---|
| 1 | 写工作区被拒 grantWrite |
Windows 对工作区目录缺当前用户完全控制权 | 宿主侧 ACL 问题,用 diagnose-windows-sandbox-acl 技能一条命令诊断并修复(非插件 bug) |
| 2 | GUI 装插件失败 | 本机无 git,install-sd.ps1 与部分包管理都要 git |
install-sd.ps1 自动下 MinGit 便携版:GitHub 资源带 digest 就先校验 sha256、再 git --version 实测,装完写入用户 PATH |
| 3 | run_in_background / timeoutMs 报错 |
宿主 bug:数字与布尔被强制转成字符串 | 这两个参数干脆不传,靠 120 秒超时自动转后台 |
| 4 | 无独立 Python | 只有 WindowsApps 商店占位符(本机另有 3.13,而 A1111 在 Windows 只认 3.10) | install-sd.ps1 静默装官方 Python 3.10.6(用户级 PrependPath,sha256 记录),并把 pythonDir 写进安装记录,插件 resolvePython 兜底用它 |
| 5 | 大文件下载反复停滞/断流 | 网络对单连接限速掐断(单流 ~300KB/s) | Get-SegmentedFile:8 段并行 Range 下载 + 断点续传 + 长度/可选 sha256 校验(实测 4 段下载与单流逐字节一致) |
| 6 | RTX 5060 跑不起来 | Blackwell(sm_120)不支持 A1111 默认 torch==2.1.2+cu121 |
插件全新安装时探测 compute_cap ≥ 12 → 自动设 TORCH_COMMAND(torch 2.7.0 + torchvision 0.22.0,cu128,本机实测 CUDA 可用) |
| 7 | CLIP 源码构建失败 | 新版 setuptools 移除了 pkg_resources |
PIP_CONSTRAINT 钉 setuptools==69.5.1——约束作用到每一次 pip(含 PEP 517 构建隔离里那次),等于预装 + 免隔离双保险 |
| 8 | pip 在 opencv 上卡死 | 解析器版本回溯(4.14→4.13.0.92→…)反复重下 | PIP_CONSTRAINT 钉 numpy==1.26.2 + opencv-python==4.11.0.86 断开回溯,另设 PIP_RETRIES=10 / PIP_TIMEOUT=60;DSH_SD_PIP_CONSTRAINT=0 可关 |
| 9 | 环境准备克隆停滞 | Stability-AI/stablediffusion 仓库已删除(GitHub 对已删仓库要求认证) |
本地还没克隆该仓库时自动设 STABLE_DIFFUSION_REPO → camenduru fork(保留同一 commit cf1d67a6…,签名 verified) |
| 10 | 插件读不到 SD 目录、HTTP 500、反复指引重复安装 | 安装记录带 UTF-8 BOM 头,裸 JSON.parse 遇 BOM 抛错被静默吞掉 → sdDir 为空 |
读侧剥 BOM + 字段兜底提取 + 大声记日志 + 读到 BOM 就就地重写自愈;写侧用无 BOM UTF-8 并回读校验 BOM=False;test-install-record.mjs 专项覆盖。这是唯一影响所有会话的根因 |
| 11 | 离线模式 tokenizer 加载失败 | 插件指向空的 <SD>\.cache\huggingface 还强开离线开关;transformers 4.30 与新版 hub 离线查找不兼容 |
只有该缓存真有 models--* 模型才接管 HF_HOME 并离线;缓存为空则不接管、保持联网(DSH_SD_HF_ONLINE=1 强制联网) |
| 12 | (测试方法) | 只查文件内容没查字节编码 = 漏判 | 三层测试:smoke-skill(不出图)→ test-install-record(BOM 专项)→ acceptance(真实出图),且必须新开会话复验 |
| 13 | .ps1 一跑就语法错(本次新发现) |
.ps1 存成 UTF-8 无 BOM,Windows PowerShell 5.1 按 GBK 读 → 中文多字节把后面的 ) " 吞掉 |
sd-direct.ps1 / install-sd.ps1 固定存 UTF-8 with BOM(PS7 也认 BOM);注意 JSON 记录恰好相反——JSON 必须无 BOM |
| 14 | 脚本报 Cannot convert value "3845143617" to type System.Int32(本次新发现) |
SD 的 seed 是 uint32(可到 4294967295),脚本参数写成 [int]$Seed,超过 2147483647 就参数转换失败 |
sd-direct.ps1 的 -Seed 改为 [long];acceptance.mjs 新增第 8 步:真跑一遍脚本(PS5.1 执行 + uint32 seed),BOM/类型问题都会被它拦下 |
| 15 | 别人电脑上跑脚本:Invoke-RestMethod 无法连接到远程服务器 之后连炸 4 条(本次新发现) |
① 对方机器 SD API 没在跑,而脚本只会连、不会拉起;② 连接失败后没有短路,$result.images[0] 空数组 → WriteAllBytes 空值 → ConvertFrom-Json 空值逐级炸 |
sd-direct.ps1 先探测 API:没开就自己把它拉起(目录按 -SdDir > DSH_SD_DIR > ~/.dsh-sd-bridge.json > 各盘常见安装名扫描查找,轮询到就绪,-NoStart 关闭、-StartTimeout 调超时、日志在 %TEMP%\dsh-sd-direct-launch.log*);端口被别的服务占用、目录/解释器找不到、调用失败、结果没图——统一走 Fail 只报一条错误 + 一行提示就 exit 1 |
| 16 | 新拉取 SD 出图质量非常差(本次新发现) | ① 新装默认模型是 2022 年的 SD1.5 base(v1-5-pruned-emaonly)+ 默认 VAE + CLIP skip 1,而这台画质好的机器是 AWPainting v1.2 + vae-ft-mse-840000 + CLIP skip 2;② 没有专用 VAE 时画面发灰 |
install-sd.ps1 默认模型换成 AWPainting v1.2(远端 sha256 3d1b3c42ec… 与本机出图正常文件逐字节一致),补下 mse VAE(735e4c3a…),并合并写入 config.json 的 sd_model_checkpoint / sd_vae / CLIP_stop_at_last_layers=2(只改点名键、保留其他键、去 BOM、非 UTF-8 老文件按原编码读写、-NoConfig 可关);sd_models 检测到只有 base 模型时返回 qualityHint 提示升级 |
| 17 | 脚本拉起的 SD 启动卡几分钟(本次新发现) | 脚本没带 HF_HOME,transformers 去 %USERPROFILE%\.cache\huggingface 找 clip tokenizer,而 SD 缓存在 <SD>\.cache\huggingface → 找不到就连 huggingface.co 重试 5 次 × 10s × 多个文件 |
sd-direct.ps1 启动前按插件同一套规则设 HF 环境:缓存命中 → HF_HOME + 离线加载;未命中 → 保持联网并走 hf-mirror 镜像(DSH_SD_HF_ONLINE=1 可强制联网)。实测修复后 HF 重试 0 次、冷启动到出图 28 秒 |
| 18 | stderr 刷 Join-Path 找不到驱动器 E:(本次新发现) |
扫盘时对不存在的盘符也去拼路径 | 先 Test-Path "E:\" 跳过不存在的盘;候选路径再包一层 try/catch(非法路径跳过不报错) |
| 19 | 改完 .ps1 突然全文件语法错(本次新发现) |
编辑工具写回时丢掉 UTF-8 BOM(PS5.1 无 BOM 按 GBK 读,中文多字节吞掉 ) ") |
改完 .ps1 立刻补回 BOM(读首三字节 EF BB BF,不是就前插 3 字节),再用 [Parser]::ParseFile 解析一遍确认 SYNTAX OK |
| 20 | 设置面板没有 sd-bridge 分组(注册代码看着没问题) | 插件以符号链接装进 profile node_modules 时,Node 按 realpath 解析依赖 → 裸 import('@deepseek-ai/schemastery') 落空,注册被静默跳过 |
tryLoadConfigSchema 两条途径:裸 import 失败后扫 ~/.dsh/profiles/*/node_modules/.../schemastery/lib/index.mjs 按绝对路径导入;test-settings.mjs 覆盖 |
常见问题
- 新装的 SD 出图很差 / 发灰 / 不像样? 是模型与 VAE,不是提示词:跑一遍
install-sd.ps1(会补装 AWPainting v1.2 +vae-ft-mse-840000并写质量默认配置,已装过 SD 也只会补缺的那部分),或先调sd_models——它检测到只有新装默认的 SD1.5 base 会返回qualityHint;动漫模型记得 CLIP skip = 2。 - 设置里找不到插件配置? 0.7.0 起在 设置 → 插件 →
sd-bridge注册了配置面板(13 个字段全可视化、带中文说明);旧版只能改cordis.patch.yml。若面板没有该项,说明还在跑旧版插件,重装最新版后新开会话。 - 想多装几个模型 / 常见 LoRA?
install-sd.ps1 -Models "awpainting,majicmix" -Loras "add_detail,easynegative,badhandv4",键见上文参数表;已有文件会跳过,-Upgrade做 sha 复验并补拉新版。 - 安装时报缺 git / Python / VC++? 不用手动补——0.7.0 起脚本先跑环境预检,缺啥自举啥(MinGit 便携版、官方 Python 3.10.6、vc_redist),每项失败只报一条错;也可
-NoPrereq跳过整个预检。 - 首次启动很慢? 加载 checkpoint 约 1-3 分钟(可调大
startupTimeoutMs);全新安装还要先在线装依赖。脚本自己拉起 SD 时会带 HF 缓存/镜像环境,tokenizer 不会去连 huggingface.co 反复重试。 - 模型放哪?
<SD 目录>\models\Stable-diffusion\;LoRA 放models\Lora\。名字用sd_models查。 - 换机器/换盘符? 不用改任何配置——重新装插件即可,探测与工作区逻辑自动适配。
English
A DeepSeek Harness plugin that drives your local Stable Diffusion WebUI (AUTOMATIC1111 API) with six tools — txt2img, img2img, inpaint (mask redraw), script-only (no image), model listing, server management — plus a built-in content-guard protocol (mild violations: draw the safe part + reproducible script; explicit requests: no image, compliant-baseline script only).
Zero local setup: the SD install directory is auto-detected (sdDir config > DSH_SD_DIR env > ~/.dsh-sd-bridge.json install record > drive scan); outputs, reference images and the reproducible script always land in your session workspace. No SD installed? The plugin returns a one-line command that runs the bundled install-sd.ps1 bootstrap — it runs an environment preflight first (disk, mirror reachability, git, Python 3.10, VC++ runtime; each missing piece is bootstrapped automatically), then clones WebUI and pulls the selected model/VAE/LoRA catalog (-Models, -Vaes, -Loras, -Upgrade), every file verified by sha256.
Install: paste github:savinglighting/dsh-sd-bridge-guard (or the npm name dsh-sd-bridge-guard) into DSH Settings → Plugins, then restart.
Configuration lives in Settings → Plugins → sd-bridge (editable live, applied on the next tool call); cordis.patch.yml overrides under id sd-bridge keep the highest priority — see the table above.
License
MIT

