news 2026/9/8 20:17:07

10分钟上手diffusers-rs:Rust实现Stable Diffusion 1.5/2.1文生图的完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10分钟上手diffusers-rs:Rust实现Stable Diffusion 1.5/2.1文生图的完整教程

10分钟上手diffusers-rs:Rust实现Stable Diffusion 1.5/2.1文生图的完整教程

【免费下载链接】diffusers-rsAn implementation of the diffusers api in Rust项目地址: https://gitcode.com/gh_mirrors/di/diffusers-rs

diffusers-rs 是一个用Rust语言实现的 Stable Diffusion 文生图项目,完整复刻了 Hugging Face 著名 diffusers 库的核心 API,基于 tch(Rust 版 Torch)构建,支持 Stable Diffusionv1.5 和 v2.1两个版本。它不仅能做文本生成图像(text2img),还内置了图生图(img2img)、局部重绘(inpainting)和 ControlNet四条主流 AI 绘图管线。想脱离 Python 环境、用 Rust 做文生图?这篇文章带你 10 分钟跑通全流程 🚀

📦 diffusers-rs 能做什么?

简单说,diffusers-rs 就是"Rust 版的 diffusers"。它把 Stable Diffusion 的三大核心组件都用 Rust 重新实现了一遍:

模块作用
CLIP 文本编码器把你的提示词(prompt)转成语义向量
UNet 去噪网络扩散模型的主力,负责一步步"雕刻"出图像
VAE 变分自编码器在潜在空间与像素空间之间互相转换

此外还内置了 DDIM、DDPM、Euler、Heun 等10 种采样调度器,供你自行切换速度与画质的平衡。

下图就是用它生成的文生图效果,提示词是 "A rusty robot holding a fire torch."(一个手持火把的生锈机器人):

✅ 环境准备:开始前检查清单

开始之前,请确认你的机器满足以下条件:

  • Rust 工具链:安装最新 stable 版本的 Rust(rustup
  • Python 3:仅用于下载和转换模型权重(需要torch库)
  • 显卡:NVIDIA GPU,显存8GB 以上(没有 GPU 也能用 CPU 跑,只是慢一些)
  • 磁盘:预留约 10GB 空间存放权重文件

📥 第一步:获取 diffusers-rs 项目源码

打开终端,执行以下命令克隆项目并进入目录:

git clone https://gitcode.com/gh_mirrors/di/diffusers-rs cd diffusers-rs

项目结构非常清晰,核心代码都在src/下:models/是 UNet 和 VAE 等模型实现,pipelines/是 Stable Diffusion 主管线,schedulers/是各种采样调度器,transformers/是 CLIP 文本编码器。四个可运行的示例程序位于examples/目录,稍后我们会用到。

⬇️ 第二步:下载 Stable Diffusion 模型权重

权重文件需要放到项目根目录的data/文件夹中。项目提供了现成的 Python 脚本,一条命令搞定(下载 + 格式转换自动完成):

# 默认下载 Stable Diffusion 2.1 权重 python3 ./scripts/get_weights.py # 如需下载 1.5 版本权重,加上版本号参数 python3 ./scripts/get_weights.py --sd_version 1.5

该脚本(scripts/get_weights.py)会自动下载 CLIP 编码器、UNet、VAE 以及 BPE 词表,并转换为 Rust 可直接加载的.safetensors格式。下载完成后,data/目录里会有 4 个文件,例如 2.1 版本对应的是clip_v2.1.safetensorsunet_v2.1.safetensorsvae_v2.1.safetensorsbpe_simple_vocab_16e6.txt

🎨 第三步:10分钟跑出第一张 AI 图

这是最激动人心的时刻——执行下面这条命令:

cargo run --example stable-diffusion --features clap -- --prompt "A rusty robot holding a fire torch."

首次运行会自动编译依赖(torch-sys 会下载 libtorch,稍需耐心等待)。运行过程中会逐步打印去噪进度:

Timestep 0/30 Timestep 1/30 ... Generating the final image for sample 1/1.

默认使用DDIM 调度器、30 步去噪、guidance scale 7.5,最终图像保存为sd_final.png。除了机器人,换个提示词你也能得到完全不同的画面,比如另一只手持火把的复古机器人:

🔧 常用参数速查表

stable-diffusion示例通过命令行参数控制生成过程,常用参数如下:

参数默认值说明
--prompt沙滩上的生锈机器人提示词,英文效果最佳
--seed32随机种子,固定后可复现结果
--n-steps30去噪步数,越大越精细越慢
--sd-versionv2-1可选v1-5/v2-1
--num-samples1一次生成多张图
--width/--height512 / 512输出图像尺寸
--cpu指定模块(如unetvae)跑在 CPU 上
--final-imagesd_final.png输出文件名

🖼️ 图生图(img2img):让 AI 重绘你的画面

除了纯文生图,diffusers-rs 还支持图像到图像的转换:以一张图作为构图参考,用提示词引导重新生成。示例程序是stable-diffusion-img2img

cargo run --example stable-diffusion-img2img --features clap -- --input-image media/in_img2img.jpg

下面对比一下:左边是手绘风格的输入图,右边是 AI 重绘后的结果——构图保留,风格被提示词(默认是 "A fantasy landscape, trending on artstation.")彻底重塑:

🪄 局部重绘(Inpainting):只改图中一部分

想只替换画面中的某个区域而保持其他部分不变?这就是inpainting的强项。使用它需要额外下载一个专门的unet-inpaint.safetensors权重文件放入data/目录,然后:

cargo run --example stable-diffusion-inpaint --features clap \ --input-image sd_input.png --mask-image sd_mask.png

其中--input-image是原图,--mask-image是白色遮罩图(白色区域将被重绘)。默认提示词是 "Face of a yellow cat, high resolution, sitting on a park bench.",最终效果如下图——掩膜区域被精准替换成了一只坐在长椅上的橘猫,背景完整保留:

🎯 ControlNet:用边缘线条精确控制生成

diffusers-rs 还集成了ControlNet管线,这是目前最主流的"可控生成"方案之一。它以一张参考图(默认自动做 Canny 边缘检测)作为骨架,生成符合指定构图的图像。需要先下载 SD 1.5 权重和 ControlNet canny 权重(保存为data/controlnet.safetensors),然后:

cargo run --example controlnet --features clap,image,imageproc -- \ --prompt "a rusty robot, lit by a fire torch, hd, very detailed" \ --input-image media/vermeer.jpg

以名画《戴珍珠耳环的少女》为输入,AI 先提取出她的边缘轮廓,再据此生成一个"机器人少女"——构图、发带姿态与原作几乎一一对应,这正是 ControlNet 的精髓所在:

❓ 常见问题 FAQ

Q:显存不足 / 报错 CUDA out of memory 怎么办?

Stable Diffusion 完整模型通常需要 8GB 以上显存。两个解决方案:

  • 纯 CPU 模式(慢但能跑):加上--cpu all参数

    cargo run --example stable-diffusion --features clap -- --prompt "A very rusty robot holding a fire torch." --cpu all
  • 混合模式(8GB 显卡):只把 UNet 放在 GPU 上,CLIP 和 VAE 放 CPU,并可配合 fp16 精度的 UNet 权重进一步省显存:

    PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128 \ cargo run --example stable-diffusion --features clap -- \ --cpu vae --cpu clip --unet-weights data/unet-fp16.safetensors

Q:1.5 和 2.1 版本怎么选?

两者命令完全相同,只需通过--sd-version v1-5--sd-version v2-1切换,并保证data/里有对应版本的权重。2.1 版默认开启,画面色彩通常更浓烈;1.5 版生态更成熟,ControlNet 权重也只适配 1.5。

Q:生成的图和 Python 版 diffusers 一样吗?

diffusers-rs 是 Hugging Face diffusers 的 Rust 移植版,相同的提示词、种子和调度器下,两者输出高度一致。Rust 的优势在于零 GC 的内存管理和更好的并发性能,很适合把 AI 绘图能力嵌入 Rust 服务或桌面应用。

📚 总结:从 0 到 AI 绘图只需 10 分钟

回顾一下我们走完的路径:克隆项目 → 下载权重 → 一条命令出图。diffusers-rs 用纯 Rust 实现了 Stable Diffusion 文生图的完整能力栈,包括:

  • ✅ 文本生成图像(SD 1.5 / 2.1)
  • ✅ 图生图 img2img
  • ✅ 局部重绘 inpainting
  • ✅ ControlNet 可控生成
  • ✅ GPU / CPU 灵活调度

如果你正计划在 Rust 技术栈中集成 AI 绘图能力,或者单纯好奇"不用 Python 能不能跑 Stable Diffusion",diffusers-rs 都是一个值得 Star 的优质参考实现。快去试试吧,你的第一张 AI 图已经在 10 分钟之后了 🎉

【免费下载链接】diffusers-rsAn implementation of the diffusers api in Rust项目地址: https://gitcode.com/gh_mirrors/di/diffusers-rs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 20:14:52

基于微信云开发的云笔记小程序:从架构设计到部署上线的完整实践

简介:云开发作为一种创新的后端服务模式,其核心原理在于将服务器、数据库和存储等基础设施抽象为服务,开发者无需管理服务器即可快速构建应用。这种模式的技术价值在于极大降低了个人开发者和小团队的运维与开发门槛,实现了快速原…

作者头像 李华
网站建设 2026/8/30 16:56:15

QQ 空间说说导出完全指南:历史说说一次性存成 Excel 和网页版

QQ 空间说说导出完全指南:历史说说一次性存成 Excel 和网页版 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一款面向想把 QQ 空间旧动态备份下来的普通…

作者头像 李华
网站建设 2026/8/30 22:44:54

银行排号系统实战:Spring Boot+MySQL+SSE实现高并发取号与实时显示

简介:在Java Web开发领域,数据库事务与并发控制是保障系统数据一致性的核心基础。其原理在于通过ACID特性,确保在高并发场景下多个操作仍能正确执行。这项技术对于构建如银行、政务等对数据准确性要求极高的业务系统具有关键价值。典型的应用…

作者头像 李华
网站建设 2026/9/2 22:59:04

推理引擎升级的检查路径

推理引擎升级的检查路径技术范围 升级风险来自 API、默认值、数据格式、运行时行为和构建工具链的组合变化。隔离环境的回归与兼容检查应先于实际替换。 升级前先列出会变的东西 阅读版本说明和依赖树,关注默认行为、数据格式、运行时特性和废弃接口。先在隔离环境跑…

作者头像 李华
网站建设 2026/9/2 21:54:08

如何快速上手 MarkItDown:一行命令把各种文件转 Markdown

如何快速上手 MarkItDown:一行命令把各种文件转 Markdown 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 手头一堆 PDF、PPT、Excel、扫描…

作者头像 李华
网站建设 2026/9/2 13:54:11

灰色关联分析:小样本下量化因素关联度的核心原理与Python实践

1. 项目概述:从“关系”到“关联”的量化思维在数据分析、系统评估和决策支持领域,我们常常面临一个核心问题:如何量化多个因素之间的“关系”或“影响程度”?比如,一个地区的经济发展水平(结果&#xff09…

作者头像 李华