Draw2Img
一个简单的网页界面,用于交互式文本引导的图像到图像生成,适合任何年龄和技能水平的用户。
社区展示
"海浪,日落,光线,照片,35毫米数码,4K"
你用Draw2Img创作了酷炫的作品吗?在这里展示你的艺术作品!
特性
- 基于网页的界面,带有基本绘画工具和颜色选择器的交互式画布
- 通过SDXL-Turbo实现实时文本引导的图像到图像生成(512 x 512像素)
- 可编辑的提示词、种子、步骤和强度参数
- 导出按钮,可将输入和输出图像保存为PNG文件,并将参数保存为JSON
- 多线程服务器支持多个并发用户
- 易于在局域网上托管,与家人和朋友一起享受创意乐趣
- 本地(无需互联网)、私密且开源
要求
硬件:
- 推荐使用至少10 GB显存的GPU,但不是严格要求
- 支持仅CPU环境,但图像生成速度会显著降低
操作系统:
- Linux、Mac或Windows
软件:
- Python >= 3.10 且 <= 3.11
浏览器:
- 任何现代浏览器(Firefox、Chrome、Edge、Safari等)
互联网:
- 不需要(首次运行时下载模型除外)
使用方法
安装
克隆此仓库
git clone https://github.com/GradientSurfer/Draw2Img.git
安装依赖
pip install .
启动服务器
启动服务器,默认将在http://localhost:8080上监听
python draw2img/main.py
通过浏览器导航到HTTP URL,就这样,开始享受吧!
选项
你可以通过--host
和--port
选项在特定接口和端口上托管服务器。例如,要在192.168.1.123:4269
上监听:
python draw2img/main.py --host 192.168.1.123 --port 4269
查看所有可用选项
python draw2img/main.py --help
容器(Docker/Podman)
你可以使用提供的Dockerfile来构建和运行容器镜像:
DOCKER_BUILDKIT=1 docker build -t draw2img .
请务必挂载你的 huggingface 缓存目录,以避免每次容器启动时都下载 SDXL-Turbo 模型(-v ~/.cache/huggingface:/root/.cache/huggingface
)。要使用 GPU,你需要添加 --gpus all
选项。
docker run -it -p 8080:8080 -p 8079:8079 -v ~/.cache/huggingface:/root/.cache/huggingface --gpus all draw2img
开发
服务器
以可编辑模式安装 Python 包
pip install -e .
用户界面
可以手动构建用户界面(静态文件输出到 dist
文件夹)
cd draw2img/ui
npm run build
或者,Vue 3 模板自带文件服务器和热重载功能,方便开发
npm run dev
容器(Docker/Podman)
你可以使用已包含 UI 工具链(node:lts-slim
)的容器镜像,避免在主机上安装 node
和 npm
。
cd draw2img/ui
# 构建 UI
docker run -it -v $(pwd):/ui -p 5173:5173 node:lts-slim bash -c "cd ui && npm run build"
# 或运行开发服务器
docker run -it -v $(pwd):/ui -p 5173:5173 node:lts-slim bash -c "cd ui && npm run dev -- --host"
设计说明
后端是一个多线程 Python websocket 服务器,同时也提供 Web UI 的静态文件服务。
前端是一个 JS/TS 应用程序(Vue 3),通过 npm create vue@latest
引导创建。构建产生的静态文件可以用任何 Web 服务器软件提供服务。
性能
虽然 websocket 服务器是多线程的,但由于单例 Pipeline
对象不是线程安全的,所以使用互斥锁保护它。这意味着图像生成实际上是单线程的,因此随着并发用户数量的增加,性能可能会变差,CPU/GPU 资源可能未被充分利用。此外,由于缺乏对某些参数(如强度和步数)在单个批次内的样本之间进行变化的底层支持,没有对推理请求进行批处理。
实际上,多线程/锁原语表现出一定程度的公平性,所以即使输入请求排队,有限的 CPU/GPU 资源也似乎在并发用户之间相对均匀地共享。不过从技术上讲,Python 并不保证在锁争用时线程调度的顺序(根据文档)。
如果你需要更高的并发性,并且有可用的内存/显存和计算资源,可以考虑启动多个 draw2img
进程实例。
安全性
此代码尚未经过漏洞审核。
贡献
欢迎贡献!在开启 PR 或 issue 时,请牢记本项目的宗旨。
安全性
没有安全过滤器来防止生成令人反感或不适当的图像,请谨慎使用。像平常使用电脑/互联网一样,请监督儿童。
非目标 / 其他项目
如果你是寻找更多功能的高级用户,其他项目如 Stable Diffusion Web UI 或 ComfyUI 可能更适合你的需求。
许可证
请参阅 Stability AI 针对 SDXL-Turbo 的非商业许可证 和他们的可接受使用政策。