用途
stablediffusion-infinity 用于在无限画布上使用 Stable Diffusion 进行图像外绘(Outpainting),即扩展图像边界之外的内容。它由 Stable Diffusion inpainting 模型驱动。
主要能力
- 在无限画布上执行外绘,画布设计上是无限的,但实际受 RAM 和浏览器限制,缩小到一定比例时可能崩溃或表现异常。
- 提供基于 PyScript 和 Gradio 的 Web 应用;Jupyter Notebook 版本位于 ipycanvas 分支。
- 增加光度校正(photometric correction)以抑制接缝,需安装 fpie:pip install fpie(仅限 Linux/MacOS)。
- 支持通过 init_mode 指定填充空白/蒙版区域的方式,通常 patch_match 优于其他方式。
- 支持关闭安全检查器(safety_checker),因为其误报率相对较高。
- 支持通过命令行参数调整:python app.py --fp32 --lowvram,用于某些 GPU 不兼容 fp16 的情况。
使用方式
- Windows 安装指南:setup_guide;Linux 安装指南:setup_guide;MacOS 安装指南:setup_guide。
- 在 Windows 或 Linux 且配备 NVIDIA GPU 时,可用 Docker 运行:run_with_docker。
- 画布需要联网:可以本地 HTTP 服务器部署并服务 PyScript、Pyodide 及其他 JS/CSS 资源,并相应地修改 index.html。
- 画布使用 NumPy + PyScript 实现(项目最初在 Jupyter Notebook 内使用 ipycanvas),相比纯前端方案效率较低。
适用场景与限制
- 适用场景:需要扩展图像边界内容、进行外绘创作的用户。
- 限制:结果质量不保证,可能需要提示词工程、改变选区大小、减小外绘区域来改善效果。光度校正可能不起作用(taichi 不支持多线程环境,已实现不可靠的子进程 hack)。当选区大于 512x512 时,Stable Diffusion inpainting 模型会慢很多。结果出现黑方块:安全检查器误报率较高,可禁用 safety_checker。某些 GPU 可能不兼容 fp16。
其他信息
- 欢迎提交 Pull Request 以改进 UI 控制、获得更好结果的思路或其他改进。
- 关于 iframe 交互为何不使用 postMessage:iframe 和 gradio 同源;postMessage 版本请查看 gradio-space 版本。
- 代码来源说明:perlin2d.py 代码来自 StackOverflow 链接,不在本仓库 LICENSE 范围内;子模块 glid_3_xl_stable 基于 Jack000/glid-3-xl-stable;子模块 PyPatchMatch 基于 vacancy/PyPatchMatch;postprocess.py 和 process.py 代码基于 Trinkle23897/Fast-Poisson-Image-Editing 修改;convert_checkpoint.py 代码基于 huggingface/diffusers 脚本修改;子模块 sd_grpcserver 和 utils.py 中的 handleImageAdjustment() 基于 hafriedlander/stable-diffusion-grpcserver 和 parlance-zz/g-diffuser-bot;w2ui.min.js 和 w2ui.min.css 来自 vitmalina/w2ui,fabric.min.js 是 fabricjs/fabric.js 的自定义构建;interrogate.py 基于 pharmapsychotic/clip-interrogator v1,子模块 blip_model 基于 salesforce/BLIP。