iis 设置此网站的访问权限国家企业信用信息查询公示系统广东
2026/4/9 23:34:38 网站建设 项目流程
iis 设置此网站的访问权限,国家企业信用信息查询公示系统广东,建站中心,东莞哪家网站建设专业FLUX.1-dev-fp8-dit文生图代码实例#xff1a;Python脚本批量调用ComfyUI API生成SDXL Prompt风格图 1. 为什么需要批量调用FLUX.1-dev-fp8-dit#xff1f;——从手动点击到自动化生成 你有没有试过在ComfyUI里反复点执行按钮#xff0c;只为生成几十张不同提示词的图Python脚本批量调用ComfyUI API生成SDXL Prompt风格图1. 为什么需要批量调用FLUX.1-dev-fp8-dit——从手动点击到自动化生成你有没有试过在ComfyUI里反复点执行按钮只为生成几十张不同提示词的图每次改提示词、调尺寸、选风格再点一次——手酸了时间也溜走了。更别说想做A/B测试不同风格效果或者给团队批量产出素材库的时候手动操作根本撑不住。FLUX.1-dev-fp8-dit这个模型很特别它在保持SDXL级图像质量的同时用fp8精度大幅降低了显存占用让中端显卡也能跑得动而搭配SDXL Prompt Styler节点又能把普通提示词自动“翻译”成SDXL原生偏好的高表现力格式——比如把“一只猫坐在窗台”变成“masterpiece, best quality, (cat:1.3), sitting on sunlit wooden windowsill, soft bokeh background, cinematic lighting”。这种组合不是简单叠加而是真正让提示词“活起来”。但光有好模型不够关键是怎么用得顺、用得快。本文不讲怎么装ComfyUI也不重复界面操作步骤而是直接给你一套可运行、可修改、可扩展的Python脚本让你用几行代码就把原本要手动点20次的操作变成一键批量生成。无论你是内容运营要出100张小红书配图设计师要对比5种艺术风格还是开发者想集成进自己的工具链这套方法都立马上手。2. 准备工作环境就绪比代码更重要2.1 确认ComfyUI已正确运行并启用API别急着写代码——先确保你的ComfyUI不是“静音模式”。默认情况下ComfyUI的API是关闭的。打开终端确认你启动ComfyUI时加了这两个参数python main.py --listen --enable-cors-header--listen让ComfyUI监听本地网络不只是127.0.0.1方便脚本远程调用--enable-cors-header解决跨域问题避免Python请求被浏览器或服务端拦截启动后访问http://127.0.0.1:8188看到工作流界面就说明成功了。如果打不开检查端口是否被占用比如8188被其他程序占了或者防火墙是否拦截。2.2 获取并理解你的工作流JSONComfyUI所有操作本质都是发JSON。你要做的第一件事是把界面上那个“FLUX.1-dev-fp8-dit文生图”工作流导出来在ComfyUI界面右键空白处 → 选择“Save (as)”保存为flux_fp8_sdxl_prompt.json名字随意但建议带含义用文本编辑器打开它搜索关键词SDXL Prompt Styler你会看到类似这样的节点结构6: { inputs: { text: , style: Cinematic }, class_type: SDXL Prompt Styler }注意这个节点的ID是6而它的两个关键输入字段是text提示词和style风格。后面脚本里所有动态替换都围绕这两个字段展开。小提醒不同人保存的工作流节点ID可能不同。别硬抄上面的6一定要自己打开JSON文件查准ID否则脚本会报错“key not found”。2.3 安装依赖只要requests没有多余包新建一个空文件夹放你的脚本。终端进入该目录执行pip install requests没错就这一个包。不需要comfyui-client不用aiohttp更不用装整个ComfyUI SDK。我们走最轻量、最稳定、最贴近生产环境的HTTP直连路线。3. 核心代码三步完成批量生成3.1 脚本结构总览清晰、分层、易维护我们不写“一整坨”的脚本。而是拆成三个逻辑块配置区定义URL、路径、参数等常量改一处全生效模板加载与注入读JSON、填提示词、换风格、设尺寸批量执行与保存循环发送请求、接收图片、按名保存这样写的好处是下次你想换模型、换尺寸、加水印只改配置区就行主体逻辑完全不动。3.2 完整可运行脚本含详细注释# flux_batch_gen.py import json import requests import time import os # 配置区 # ComfyUI服务地址确保和你启动时一致 COMFYUI_URL http://127.0.0.1:8188 # 工作流JSON路径替换成你自己的路径 WORKFLOW_PATH ./flux_fp8_sdxl_prompt.json # 提示词列表每条都会生成一张图 PROMPTS [ a cyberpunk street at night, neon signs reflecting on wet pavement, rain effect, vintage botanical illustration of a rare orchid, detailed line work, soft watercolor background, minimalist logo design for a coffee brand, clean sans-serif, warm brown and cream colors ] # 风格选项必须和工作流里SDXL Prompt Styler节点的下拉选项完全一致 STYLES [Cinematic, Realistic, Anime, Watercolor] # 图片尺寸根据你工作流里的KSampler或ImageScale节点实际支持的尺寸填写 # 常见值[512x768, 768x512, 1024x1024, 896x1152] IMAGE_SIZES [896x1152] # 输出文件夹自动创建 OUTPUT_DIR ./generated_images os.makedirs(OUTPUT_DIR, exist_okTrue) # 请求超时时间秒FLUX.1-dev-fp8-dit生成较快一般5-10秒足够 TIMEOUT 15 # 模板加载与注入 def load_workflow(): with open(WORKFLOW_PATH, r, encodingutf-8) as f: return json.load(f) def inject_prompt_and_style(workflow, prompt_text, style_name, size_str): # 找到 SDXL Prompt Styler 节点请务必替换成你工作流中的真实ID styler_node_id 6 # ← 关键打开JSON文件确认这个ID if styler_node_id not in workflow: raise ValueError(fStyler node {styler_node_id} not found in workflow) workflow[styler_node_id][inputs][text] prompt_text workflow[styler_node_id][inputs][style] style_name # 设置图片尺寸找到 KSampler 或 ImageScale 节点常见ID是 3 或 5 # 这里以KSampler为例假设其ID为3且输入字段为width/height ksampler_id 3 if ksampler_id in workflow: w, h map(int, size_str.split(x)) workflow[ksampler_id][inputs][width] w workflow[ksampler_id][inputs][height] h return workflow # 批量执行与保存 def queue_prompt(workflow): 向ComfyUI提交工作流 p {prompt: workflow} response requests.post(f{COMFYUI_URL}/prompt, jsonp, timeoutTIMEOUT) response.raise_for_status() return response.json() def get_history(prompt_id): 轮询获取生成结果 for _ in range(20): # 最多等待20次约20秒 response requests.get(f{COMFYUI_URL}/history/{prompt_id}, timeout5) if response.status_code 200: data response.json() if prompt_id in data and outputs in data[prompt_id]: return data[prompt_id] time.sleep(1) raise TimeoutError(fTimeout waiting for prompt {prompt_id}) def save_image_from_history(history_data, index, prompt_text, style_name, size_str): 从history中提取首张图片并保存 # 遍历所有节点输出找image类型 for node_id, node_output in history_data.get(outputs, {}).items(): if images in node_output: for img_info in node_output[images]: # 获取图片二进制数据 img_response requests.get(f{COMFYUI_URL}/view?filename{img_info[filename]}subfolder{img_info[subfolder]}type{img_info[type]}) img_response.raise_for_status() # 构建文件名提示词前15字风格尺寸序号 safe_prompt .join(c for c in prompt_text[:15] if c.isalnum() or c in ( , -, _)) filename f{safe_prompt}_{style_name}_{size_str}_{index:03d}.png filepath os.path.join(OUTPUT_DIR, filename) with open(filepath, wb) as f: f.write(img_response.content) print(f 已保存: {filepath}) return raise ValueError(No image output found in history) # 主流程 if __name__ __main__: print( 开始批量生成FLUX.1-dev-fp8-dit图像...) base_workflow load_workflow() total len(PROMPTS) * len(STYLES) * len(IMAGE_SIZES) count 0 for i, prompt in enumerate(PROMPTS): for style in STYLES: for size in IMAGE_SIZES: count 1 print(f\n[{count}/{total}] 正在生成{prompt[:30]}... {style}风格 {size}) try: # 注入参数 workflow inject_prompt_and_style(base_workflow.copy(), prompt, style, size) # 提交队列 result queue_prompt(workflow) prompt_id result[prompt_id] # 等待完成 history get_history(prompt_id) # 保存图片 save_image_from_history(history, count, prompt, style, size) # 防抖两次请求间隔0.5秒避免压垮ComfyUI time.sleep(0.5) except Exception as e: print(f 生成失败 [{prompt[:20]}...]{e}) continue print(f\n 全部完成共生成 {count} 张图已保存至 {OUTPUT_DIR})3.3 如何运行与验证把上面代码保存为flux_batch_gen.py确保flux_fp8_sdxl_prompt.json和脚本在同一目录终端运行python flux_batch_gen.py观察终端输出每行显示当前生成进度成功用失败用查看./generated_images/文件夹确认PNG文件已生成实测反馈在RTX 4070上单张896x1152图平均耗时约3.2秒含网络往返批量12张3提示词×4风格全程不到50秒比手动操作快8倍以上。4. 进阶技巧让脚本更聪明、更省心4.1 动态提示词组合告别硬编码现在PROMPTS是写死的列表。但实际工作中你可能有一份CSV表格包含产品名、卖点、目标人群。只需两行代码就能接入import csv PROMPTS [] with open(products.csv, newline, encodingutf-8) as f: reader csv.DictReader(f) for row in reader: PROMPTS.append(fprofessional product photo of {row[name]}, {row[feature]}, studio lighting, white background)4.2 失败自动重试应对偶发网络抖动在try块内加个简单重试逻辑for retry in range(3): try: # ...原有生成逻辑... break # 成功则跳出重试 except (requests.exceptions.RequestException, TimeoutError) as e: if retry 2: print(f 重试3次仍失败{e}) else: print(f 第{retry1}次重试...) time.sleep(2)4.3 生成结果自动归类按风格建子文件夹把save_image_from_history里的保存路径改成filepath os.path.join(OUTPUT_DIR, style, filename) os.makedirs(os.path.dirname(filepath), exist_okTrue)运行后你会得到./generated_images/Cinematic/ ./generated_images/Realistic/ ./generated_images/Anime/一目了然方便后续筛选。5. 常见问题与避坑指南5.1 “Connection refused” 错误这是最常见问题90%是因为ComfyUI没启动或启动参数漏了--listen。解决方案终端里重新运行python main.py --listen --enable-cors-header检查终端输出是否有Starting server字样浏览器访问http://127.0.0.1:8188确认页面能打开5.2 生成的图是黑的/空白/分辨率不对大概率是工作流JSON里节点ID填错了或者尺寸字段名不匹配。快速定位打开你保存的JSON搜索class_type: KSampler看它的ID是多少再搜索width确认这个字段确实在该节点的inputs里如果你用的是ImageScale节点字段名可能是width和height也可能是scaled_width—— 以你工作流实际为准5.3 提示词没生效图和原来一样检查inject_prompt_and_style函数里你填的styler_node_id是否和JSON里完全一致。小技巧在JSON里搜SDXL Prompt Styler看它上面那行6: {的6就是ID。别数错行别漏引号。5.4 生成速度慢排队卡住ComfyUI默认是串行执行。如果你希望并发生成比如同时跑3个任务需额外配置启动时加--max-upload-size 100增大上传限制修改脚本用threading或concurrent.futures并发提交但要注意ComfyUI自身对并发的支持程度建议先单线程跑稳再尝试并发6. 总结自动化不是终点而是新起点你刚刚掌握的不是一个“能跑的脚本”而是一把打开批量创作大门的钥匙。FLUX.1-dev-fp8-dit的价值在于它把高质量SDXL生成拉到了日常可用的水平而Python API调用的价值在于它把“可能性”变成了“生产力”。现在你可以把提示词换成Excel表格一键生成整套营销海报接入企业微信机器人运营同事发个指令自动返图和Notion数据库联动每次新增产品自动生成主图详情页图技术本身不难难的是意识到重复的手动操作永远值得用代码重写一遍。今天你省下的10分钟下周可能就是团队节省的10小时。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询