快速结论:在 SwarmUI 中把已经带 Alpha 通道的 8-bit sRGB RGBA 图像转换为 WebP 并开启 stealth metadata(”Alpha”)时,像素会被破坏。优先排查 ImageMagick 像素缓存的共享/分离行为差异,以及扩展调用 ConvertTo 的方式。
适用环境:Issue 已确认涉及 SwarmUI、SeedVR2 扩展、ImageMagick(在 SwarmUI 换用 ImageMagick 之后出现)以及 ConvertTo("WEBP_LOSSLESS", metadata, stealthMetadata: "Alpha") 这个特定的转换流程;正文未提供操作系统、Python、CUDA、显卡或具体版本号。
最快修复方案:暂无确认的一步修复方案。Issue 的评论只写了“fixed”,没有公开具体的改法,因此不要把正文里的 Possible fix 当成已经验证过的修复方法。
注意事项:Issue 正文中的 Possible fix 是报告者推测的代码方案,其中涉及 MetadataHelper.cs 的内部实现细节,不能直接作为用户侧的修复步骤。PNG + Alpha、不带 stealth 的 WebP 以及 RGB 源图在 Issue 中都没有出现该问题,可以先用这些组合做对照,确认问题是否只出现在 WebP + Alpha stealth 这一条路径上。
问题场景
用户更新 SeedVR2 扩展时,对一张已经是 8-bit sRGB TrueColorAlpha 的图像调用 ConvertTo("WEBP_LOSSLESS", metadata, stealthMetadata: "Alpha"),得到的 WebP 输出几乎每一个像素都被打乱。Issue 用一张 256px 带 Alpha 通道的照片复现了这个现象:40960 个像素中有 40939 个出错,最大通道差值为 255。同一条路径下,PNG + Alpha 以及不带 stealth 的 WebP 都正常,RGB 源图也正常。
报错原文
WebP + Alpha stealth metadata corrupts RGBA images since the ImageMagick swap
Issue 说明这个过程中没有产生错误日志,属于图像内容被静默破坏。
原因分析
可能原因(以 Issue 正文的分析为准):ConvertTo 在 ToMagickFrames.Clone() 出来的副本上操作,而这个 clone 与原始图像共享同一个像素缓存(pixel cache)。当图像本身已经是 TrueColorAlpha 时,EncodeStealthMetadata / PrepareImageForWebPAlpha 中对 ColorType 的赋值不会产生实际效果。于是 PrepareImageForWebPAlpha(MetadataHelper.cs:94)里第一次逐像素写入就落在共享缓存上,ImageMagick 随后把 clone 分离到一个新的缓存,却没有把像素拷贝过去。之后 ToByteArray(PixelMapping.RGBA)(MetadataHelper.cs:78)读到的就是未初始化内存,再由第 87 行的 SetPixels 写出。
环境排查
- 确认 SwarmUI 是否运行在换用 ImageMagick 之后的版本上;Issue 标题明确指出问题是在这次替换之后出现的。
- 确认触发转换的源图是否已经带 Alpha 通道,且为 8-bit sRGB TrueColorAlpha;只有这个类别被确认会出问题。
- 确认调用参数是否为
WEBP_LOSSLESS加stealthMetadata: "Alpha";去掉 stealth metadata 后输出正常的现象已经在 Issue 中得到确认。 - 确认是否经 SeedVR2 扩展或其他扩展间接调用该转换,因为报告者的复现起点就是更新 SeedVR2 扩展时。
- Issue 没有给出 ImageMagick、SwarmUI 的具体版本号,也没有提到操作系统、Python、CUDA 或显卡,因此这些项目无法用来缩小范围。
解决步骤
- 先按 Issue 的复现方式做对照:用同一张带 Alpha 的源图,分别输出 PNG + Alpha、WebP(不带 stealth)和 WebP + Alpha stealth。如果只有最后一种出现像素错乱,就可以把问题范围缩小到这条特定的转换路径。
- 在问题修复之前,可以优先尝试绕开该组合:要么改用 PNG + Alpha,要么在输出 WebP 时不带 stealth metadata。这两种做法在 Issue 中都被确认是正常的。
- 如果必须使用 WebP + Alpha stealth,可以关注 SwarmUI 在 2026-11-08 关闭该 Issue 之后发布的包含修复的版本,因为评论中只说明已经修复,没有给出公开的代码改动细节。
- 不要直接把 Issue 正文里的 Possible fix 当作操作步骤;其中提到的“在
SetPixels之前直接在data的右边缘列写入 alpha 254”属于源码层面的推测性修改,需要由维护者在MetadataHelper.cs中落实。
验证方法
按复现步骤重新生成输出文件,用 new MagickImage(outFile.RawData) 的 RGB 与原始 file.ToMagick 逐像素比较。如果不再出现近乎全图范围的通道差异(Issue 中 40960 个像素里有 40939 个出错),就可以认为问题已经解决。同时可以抽查输出是否带有预期的 stealth metadata。
参考来源
mcmonkeyprojects/SwarmUI #1590
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: Wiki REFINE does not recover after transient LLM retries are exhausted](https://www.chat-gpts.plus/wp-content/uploads/2026/11/20929-0b02e3f8-768x403.jpg)
![[Bug]: Admin user list returns only the first 10 users when no page_size is given](https://www.chat-gpts.plus/wp-content/uploads/2026/11/21722-e4a3b681-768x403.jpg)
![[Bug]: GET /api/v1/models/all-models returns null rows or panics when a page straddles the end, and page=1 skips the first page](https://www.chat-gpts.plus/wp-content/uploads/2026/11/21727-74cc2885-768x403.jpg)