可行,但vscode插件仅作为http客户端调用本地webui的api服务,需手动启用--api参数、配置正确地址与端口、对中文提示词urlencode,并自行处理图片保存与插入。

直接用 VSCode 调用本地运行的 Stable Diffusion WebUI(比如 AUTOMATIC1111 的 webui)是可行的,但**不能靠“安装一个插件就自动连上模型”**——VSCode 本身不跑 PyTorch,所有图像生成必须由独立的 Python 进程(即 webui)提供 API 服务,插件只是个 HTTP 客户端。关键在两端对齐:webui 得开 API,插件得配对、发对请求。
确认 webui 已启用 API 端点
默认情况下,Stable Diffusion WebUI 不开放外部 API。如果你只双击 webui-user.bat 启动,/sdapi/v1/txt2img 是 404 的。
- 启动时加参数:
--api(基础 API)或更推荐--api --cors-allow-origins="*"(允许 VSCode 插件跨域调用) - 验证是否生效:浏览器访问
http://127.0.0.1:7860/sdapi/v1/cmd-flags,能返回 JSON 就说明 API 已启用 - 常见坑:Windows 下如果用 PowerShell 启动,
--api参数可能被吞掉;建议改用 CMD 或直接编辑webui-user.bat,在python launch.py后追加参数
插件必须走 HTTP 调用,不是直连模型
所有声称“VSCode 内置 SD”的插件(如 sdxl-vscode-helper、SDXL Drawing Helper),底层都只是封装了对 http://localhost:7860/sdapi/v1/txt2img 的 POST 请求。它们不带模型、不装 PyTorch、也不调 CUDA。
- 插件配置里的
sdxlDrawing.apiUrl必须和你 webui 实际监听地址一致(注意端口,比如你用了--port=6006,那插件里就得填http://localhost:6006) - 插件发送的 payload 需匹配 webui 的 API schema,例如
width/height是数字,不是字符串"1024x1024";sampler_name必须是 webui 启动后实际列出的名称(如"DPM++ 2M Karras",不是"dpm2m") - 如果你启用了
xFormers或TensorRT加速,插件完全无感——它只管发请求、等响应,性能全看 webui 进程
中文提示词和负面提示要 urlencode
VSCode 插件多用 Node.js 的 axios 或 fetch 发请求,而 webui 的 API 对非 ASCII 字符敏感。直接传中文会 400 或出图乱码。
- 正确做法:在插件代码中对
prompt和negative_prompt字段做encodeURIComponent()(不是encodeURI) - 示例:
encodeURIComponent("一只猫,赛博朋克风格")→%E4%B8%80%E5%8F%AA%E7%8C%AB%EF%BC%8C%E8%B5%9B%E5%8D%9A%E6%9C%8B%E5%85%8B%E9%A3%8E%E6%A0%BC - 漏做这步的典型现象:API 返回 400 错误,或生成图完全不符合提示,甚至触发 webui 控制台报错
UnicodeDecodeError
插件生成的图默认保存在哪?别指望自动插入 Markdown
绝大多数插件(包括官方推荐的)调用 /txt2img 后,只拿到 base64 编码的图片数据,然后在 Webview 里展示。它**不会自动存文件,也不会帮你写  到当前文档中**。
- 想落地使用:插件需额外实现「保存到工作区」逻辑,比如调用 VSCode 的
vscode.workspace.fs.writeFile(),并生成相对路径 - 更现实的做法:在插件设置里指定一个固定输出目录(如
./assets/images/),生成后手动复制路径插入文档 - 容易忽略的细节:webui 的
save_images设置(在settings.json里)会影响插件能否读到磁盘上的文件;若设为 false,插件只能靠 base64 解码再保存,多一次转换开销











