Qwen-Image-2512-ComfyUI代码实例:Python调用API生成图片详细步骤
1. Qwen-Image-2512-ComfyUI 是什么?
Qwen-Image-2512-ComfyUI 是基于阿里通义实验室开源的 Qwen-VL 系列图像生成能力构建的一套可视化工作流工具,集成在 ComfyUI 框架中。它支持通过图形化界面或 API 调用方式,实现高质量图像生成,尤其适用于文生图(Text-to-Image)任务。
该镜像版本为2512 最新版,针对推理性能和显存占用做了深度优化,仅需一张NVIDIA 4090D 显卡即可流畅运行,适合个人开发者、AI 创作者和中小企业快速部署使用。
与传统 WebUI 相比,ComfyUI 的最大优势在于其节点式工作流设计——你可以像搭积木一样组合不同的处理模块(如提示词编码、噪声生成、采样器、VAE 解码等),灵活控制整个生成流程。同时,它也开放了完整的 HTTP API 接口,方便你用 Python 脚本自动化调用,嵌入到自己的项目中。
2. 部署与环境准备
2.1 镜像部署
如果你使用的是 CSDN 星图平台或其他 AI 镜像市场:
- 搜索
Qwen-Image-2512-ComfyUI; - 选择配置(建议至少 24GB 显存,如 4090D/3090/4090);
- 点击“一键部署”;
- 等待几分钟完成初始化。
部署完成后,系统会自动安装以下组件:
- ComfyUI 主程序
- Qwen-Image-2512 模型权重
- Python 3.10 + PyTorch 2.x 环境
- 内置 FFmpeg、Pillow 等依赖库
2.2 启动服务
登录服务器后,进入/root目录,执行启动脚本:
cd /root ./1键启动.sh这个脚本会自动:
- 启动 ComfyUI 后端服务(默认监听
8188端口) - 加载 Qwen-Image-2512 模型
- 开放本地 Web 访问接口
启动成功后,在控制台输出中你会看到类似信息:
Starting server To see the GUI go to: http://127.0.0.1:8188此时返回你的算力平台管理页面,点击“ComfyUI网页”按钮,即可打开可视化操作界面。
3. 理解内置工作流与 API 原理
3.1 查看内置工作流
在 ComfyUI 界面左侧找到“工作流”面板,点击“内置工作流”,你会看到一个预设好的 Qwen-Image-2512 文生图流程。
这个工作流通常包含以下几个关键节点:
- CLIP Text Encode (Prompt):将正向提示词转换为模型可理解的向量
- Empty Latent Image:创建初始潜在空间图像(决定分辨率)
- KSampler:核心采样器,控制生成过程的步数、CFG 值、种子等
- VAE Decode:将潜在表示解码为真实像素图像
- Save Image:保存结果到本地
这些节点已经连接好,你只需要在提示词框输入描述,点击“Queue Prompt”就能出图。
3.2 API 调用机制解析
ComfyUI 提供了一套基于 HTTP 的 RESTful API,所有操作都可以通过发送 JSON 请求完成。主要接口包括:
| 接口 | 功能 |
|---|---|
POST /prompt | 提交生成任务 |
GET /history | 获取历史记录 |
GET /queue | 查看队列状态 |
GET /models | 获取已加载模型列表 |
当你提交一个 prompt 请求时,实际上是把整个工作流的节点参数打包成 JSON 发送给服务器,然后由后端解析并执行。
4. Python 调用 API 实例详解
现在我们来写一段 Python 脚本,远程调用 ComfyUI 的 API 自动生成图片。
4.1 准备条件
确保你的 Python 环境已安装requests库:
pip install requests并且你知道 ComfyUI 的访问地址(例如:http://your-server-ip:8188)
4.2 构建请求数据
我们需要构造一个符合 ComfyUI 格式的 prompt JSON。以下是对应 Qwen-Image-2512 工作流的关键节点 ID 和参数结构(可通过导出工作流获取)。
假设我们的工作流中有如下节点:
- 节点 A:
3→ CLIP 文本编码(提示词) - 节点 B:
6→ 创建潜变量图像(尺寸设置) - 节点 C:
14→ KSampler(采样参数) - 节点 D:
8→ VAE 解码 + 保存
4.3 完整调用代码示例
import requests import json import time import uuid from PIL import Image import io # 设置服务器地址 server_address = "http://127.0.0.1:8188" # 替换为实际 IP # 定义生成参数 prompt_text = "一只穿着宇航服的橘猫漫步在火星表面,夕阳西下,远处有地球,超现实风格,高清细节" negative_prompt = "模糊,低质量,失真,文字水印" width = 1024 height = 1024 steps = 25 cfg = 7.5 seed = int(time.time()) # 使用当前时间戳作为随机种子 # 构造 ComfyUI 所需的 prompt JSON 结构 prompt_data = { "3": { # CLIP 文本编码节点 "inputs": { "text": prompt_text, "clip": ["4", 0] # 连接到 CLIP 模型 } }, "6": { # 潜变量图像节点 "inputs": { "width": width, "height": height, "batch_size": 1 } }, "14": { # KSampler 节点 "inputs": { "model": ["4", 0], "positive": ["3", 0], "negative": ["5", 0], "latent_image": ["6", 0], "seed": seed, "steps": steps, "cfg": cfg, "sampler_name": "dpmpp_2m_sde", "scheduler": "karras", "denoise": 1.0 } }, "8": { # SaveImage 节点(同时也是 VAE 解码) "inputs": { "images": ["14", 0] # 接收 KSampler 输出 } }, "4": { # 模型加载节点(Qwen-Image-2512) "inputs": {} }, "5": { # Negative Prompt 编码节点 "inputs": { "text": negative_prompt, "clip": ["4", 0] } } } # 封装为顶层结构 payload = { "prompt": prompt_data, "client_id": str(uuid.uuid4()), # 唯一客户端标识 "prompt_id": str(uuid.uuid4()) } # 发送请求到 ComfyUI def queue_prompt(): try: response = requests.post(f"{server_address}/prompt", json=payload) return response.json() except Exception as e: print("连接失败,请检查服务器是否运行:", e) return None result = queue_prompt() if not result: exit() print("✅ 任务已提交!Prompt ID:", result.get('prompt_id')) # 获取生成结果 def get_history(prompt_id): url = f"{server_address}/history/{prompt_id}" for _ in range(60): # 最多等待 60 秒 time.sleep(1) try: r = requests.get(url) if r.status_code == 200: history = r.json() if prompt_id in history and len(history[prompt_id]['outputs']) > 0: return history[prompt_id] except: continue return None # 等待生成完成 history = get_history(result['prompt_id']) if not history: print("❌ 生成超时或失败,请检查日志") else: print("🎉 图片生成成功!") # 提取图片数据 output_images = [] for node_id, node_output in history['outputs'].items(): if 'images' in node_output: for img_info in node_output['images']: image_url = f"{server_address}/view?filename={img_info['filename']}&subfolder={img_info['subfolder']}&type=output" img_data = requests.get(image_url).content image = Image.open(io.BytesIO(img_data)) output_images.append((image, img_info['filename'])) # 显示第一张图 if output_images: output_images[0][0].show() # 弹窗显示(需图形界面) output_images[0][0].save("generated_qwen_image.png") print("💾 图片已保存为 generated_qwen_image.png")5. 参数说明与调优建议
5.1 关键参数解释
| 参数 | 说明 |
|---|---|
prompt_text | 正向提示词,描述你想生成的内容 |
negative_prompt | 负向提示词,排除不希望出现的元素 |
width/height | 输出图像尺寸,Qwen-Image-2512 支持最高 2048x2048 |
steps | 采样步数,一般 20~30 即可获得良好效果 |
cfg | 条件引导系数,控制提示词影响力,推荐 7~8.5 |
seed | 随机种子,固定值可复现相同结果 |
sampler_name | 采样算法,dpmpp_2m_sde在质量和速度间表现优秀 |
5.2 提示词写作技巧(小白也能上手)
不要只说“好看的风景”,试试这样写:
“清晨的江南古镇,薄雾笼罩着青石板路,河边垂柳轻拂水面,远处小桥上有撑伞行人,水墨画风格,柔和光影,静谧氛围”
要点:
- 包含主体 + 场景 + 细节 + 风格 + 光影
- 多用形容词和具体意象
- 可指定艺术风格:
赛博朋克、皮克斯动画风、胶片质感等
5.3 性能优化建议
- 若显存紧张,可将分辨率降至
768x768或启用taesd小模型预览 - 批量生成时,建议控制并发数不超过 GPU 能力上限
- 使用
--lowvram启动参数可进一步降低内存占用(牺牲速度)
6. 常见问题与解决方案
6.1 连接失败:无法访问 API
可能原因:
- 服务未启动
- 防火墙未开放 8188 端口
- IP 地址填写错误
解决方法:
- 登录服务器运行
ps aux | grep python查看进程 - 检查
1键启动.sh是否正常执行 - 在云平台安全组中放行 8188 端口
6.2 提示词无效或生成内容偏差
建议做法:
- 检查工作流中 CLIP 节点是否正确连接
- 尝试简化提示词,逐步增加复杂度
- 查看 ComfyUI 日志输出是否有警告信息
6.3 图片生成缓慢
- 确认使用的是4090D 或同等性能显卡
- 检查是否启用了 CPU 卸载(避免)
- 减少
steps至 20,更换更快采样器如euler或heun
6.4 如何自定义工作流?
- 在 ComfyUI 界面手动搭建新流程
- 点击右上角“Save”导出
.json文件 - 分析节点 ID 和连接关系
- 修改 Python 脚本中的
prompt_data结构以匹配新流程
7. 总结
通过本文,你应该已经掌握了如何使用 Python 脚本调用 Qwen-Image-2512-ComfyUI 的完整流程:
- 成功部署镜像并启动服务
- 理解 ComfyUI 的节点式工作流机制
- 编写 Python 脚本提交生成任务
- 获取并保存生成的图片
- 掌握常见问题排查方法
这套方案非常适合需要将 AI 图像生成能力集成到自动化系统中的场景,比如:
- 电商平台批量生成商品主图
- 内容平台自动配图
- 游戏素材快速原型设计
- 社交媒体动态内容生成
更重要的是,整个过程完全可控、可复现、可扩展。
下一步你可以尝试:
- 添加 LoRA 微调模型增强特定风格
- 实现多图批量生成队列
- 搭建 Web 前端让用户输入提示词
- 结合 OCR 或语音识别实现多模态交互
AI 图像创作的大门,现在已经为你敞开。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。