Stable Diffusion WebUI的txt2img功能出现空白图,很多时候并不是模型权重损坏或者显存不足,而是提示词输入层面触发了异常的采样路径。尤其是Prompt为空时,去噪过程会退化为一种接近无条件的生成模式,如果此时CFG Scale设置偏高或者采样器对初始噪声比较敏感,最终画面就可能被纯色或噪声填满。Negative Prompt的语法问题同样值得警惕,一个看似不起眼的多余空格或者半角逗号,就足以让负面条件解析失败,从而把原本该被抑制的劣质特征重新引入生成结果。

Prompt为空时txt2img为什么会输出空白图
在Stable Diffusion的推理过程中,正向提示词负责把去噪方向拉向用户描述的内容,而CFG Scale则控制生成结果在正向条件与无条件结果之间插值的强度。当Prompt为空时,模型只能依赖无条件分支进行采样。如果CFG Scale设置为1,理论上就等同于完全无条件生成,此时某些模型会输出灰蒙蒙的噪声图或者接近纯色的低信息图像。很多用户习惯把CFG Scale调到7甚至更高,但在空Prompt场景下,高CFG会试图在空条件和无条件之间强行拉开差距,这种没有实际语义约束的放大操作,很容易让去噪过程发散,最终形成大面积空白或色块。
另一个容易忽略的因素是采样器。DDIM、DPM++ 2M Karras等确定性采样器对初始噪声的利用方式不同,在空Prompt条件下,它们可能把噪声均匀分布到整个画布,看起来就像一张纯色图。相比之下,Euler a这类带有随机性的祖先采样器在空Prompt下有时还能生成一些抽象纹理。所以如果你需要测试空Prompt行为,建议先把CFG Scale降到1到3之间,采样器换成Euler a,步数设置在20步左右,看空白图是否消失。这样能快速判断问题是出在参数配置还是提示词本身。
# 使用WebUI API测试空Prompt时的参数组合
import requests
import base64
url = "http://127.0.0.1:7860/sdapi/v1/txt2img"
payload = {
"prompt": "",
"negative_prompt": "",
"steps": 20,
"cfg_scale": 2.0,
"sampler_name": "Euler a",
"width": 512,
"height": 512
}
response = requests.post(url, json=payload)
if response.status_code == 200:
data = response.json()
image_data = base64.b64decode(data["images"][0])
with open("empty_prompt_test.png", "wb") as f:
f.write(image_data)
print("测试图已保存")
else:
print("请求失败:", response.status_code, response.text)
上面的脚本将CFG Scale设为2.0,并选用Euler a采样器,这是排查空Prompt空白图时一个相对温和的起点。如果你仍然得到纯色图,那么问题可能不在采样参数,而在于WebUI前端向API传递的Prompt字符串里包含了不可见字符,例如零宽空格或从网页复制时带入的特殊换行符。这些字符虽然视觉上看起来是空的,但会被分词器当成有效token,导致正向条件被污染,采样方向偏离预期。可以用Python快速检查字符串长度和编码,确认Prompt是否真的为空。
Negative Prompt的常见语法错误与排查
Negative Prompt在WebUI中通常填写在单独输入框里,多个负面词用英文逗号分隔。一个常见的错误是把中文逗号或全角逗号混入负面提示词中,例如写lowres,bad anatomy,extra fingers。这种写法下,分词器会把整个字符串当成一个长短语,而不会按逗号切分,负面条件就会失效。更隐蔽的问题是多余空格:lowres, bad anatomy 和 lowres,bad anatomy 在解析结果上可能存在差异,某些版本的WebUI对空格比较敏感,空格会被编码为额外的分隔符,导致负面词被截断或合并。
权重语法也是出错重灾区。WebUI支持用圆括号提高负面词权重,例如(worst quality:1.4),但如果括号不匹配,比如(worst quality:1.4,整个负面提示词会解析失败,甚至影响正向提示词的编码。需要特别注意的是,负面提示词中如果出现类似<lora:badhands:0.8>这样的扩展语法,尖括号必须完整闭合,否则前端可能直接报错或者静默忽略。建议在修改负面提示词后,先清空生成参数,再逐步添加,每加一段就测试一次,这样可以快速锁定是哪一组词导致空白图或异常。
错误示例1:lowres,bad anatomy,extra fingers (使用了全角逗号) 错误示例2:lowres, bad anatomy (bad anatomy前多了一个空格,可能导致解析异常) 错误示例3:(worst quality:1.4 (括号不闭合) 正确示例:lowres,bad anatomy,extra fingers,(worst quality:1.4)
从实际排查角度看,先把负面提示词全部清空,只保留正向Prompt测试,能判断Negative Prompt是否就是空白图的诱因。如果清空后出图正常,再逐条恢复负面词。这种二分法虽然原始,但比盲目调整采样参数有效得多。同时也要检查WebUI设置里的CLIP Skip层数,如果CLIP Skip设置过高,模型会跳过部分文本编码层,对空Prompt或极短Prompt的编码质量影响更明显,可能让负面提示词完全无法参与条件计算。
从空白图到正常出图的完整排查流程
当你面对一张txt2img输出的空白图时,第一件事不是换模型,而是确认Promp是否真的为空。打开WebUI页面,用鼠标全选输入框内容并删除,再手动输入一个最简单的测试词,比如1girl,然后生成。如果能正常出图,说明模型和采样器基本正常,问题集中在空Prompt场景。如果连简单测试词也输出空白,就要检查VAE是否加载正确,有些模型自带的VAE损坏或者未加载时,输出会呈现纯灰或纯黑,但这种空白通常带有一点噪点,和提示词无关。
确认VAE正常后,再检查Negative Prompt。建议暂时使用最简负面提示词模板:lowres,bad anatomy,bad hands,text,error,missing fingers,extra digit,fewer digits,cropped,worst quality,low quality,normal quality,jpeg artifacts,signature,watermark,username,blurry。这个模板覆盖了绝大多数需要抑制的劣质特征,语法上也没有多余的标点或空格。生成时把CFG Scale保持在7左右,步数25到30步,采样器可以选DPM++ 2M Karras或Euler a。如果这个组合下依然空白,再把CFG Scale逐级降低,观察画面是否从空白慢慢出现轮廓。
# 逐步降低CFG Scale并测试负面提示词影响的脚本
import requests
import base64
def generate_image(prompt, negative, cfg):
payload = {
"prompt": prompt,
"negative_prompt": negative,
"steps": 28,
"cfg_scale": cfg,
"sampler_name": "DPM++ 2M Karras",
"width": 512,
"height": 512
}
r = requests.post("http://127.0.0.1:7860/sdapi/v1/txt2img", json=payload)
if r.status_code == 200:
img = base64.b64decode(r.json()["images"][0])
with open(f"test_cfg_{cfg}.png", "wb") as f:
f.write(img)
return True
return False
negative_template = "lowres,bad anatomy,bad hands,text,error,missing fingers,extra digit,fewer digits,cropped,worst quality,low quality,normal quality,jpeg artifacts,signature,watermark,username,blurry"
for cfg in [7.0, 5.0, 3.0, 1.5]:
ok = generate_image("1girl, solo, looking at viewer", negative_template, cfg)
print(f"CFG={cfg} 生成结果: {ok}")
这段脚本用固定正向提示词和标准负面模板,循环测试不同CFG Scale下的生成结果。通过观察从7.0到1.5的变化,可以判断空白图是否由CFG与负面提示词联合作用引起。如果低CFG下图像恢复,说明高CFG放大了负面条件中的某个异常项;如果所有CFG下都空白,则提示词解析层一定有更深层的问题,比如扩展插件冲突或者WebUI版本与模型不兼容。此时可以尝试禁用所有扩展,或者在启动参数中加入--no-half-vae避免半精度计算误差。
最后还要留意一个容易被忽视的细节:txt2img界面中的宽度和高度设置。如果误将宽高设为1像素,生成结果当然就是一个几乎不可见的点,视觉上等同空白图。检查这个最简单的可能性,可以省去大量无谓的排查时间。把这些步骤串联起来,从空Prompt机制、负面提示词语法、VAE与采样参数再到基础尺寸设置,绝大多数SD WebUI txt2img空白图问题都能在几分钟内定位并解决。
SD WebUItxt2imgNegative Prompt修改时间:2026-09-20 18:01:30