查询网站服务器地址网站创建费用
2026/5/24 15:22:26 网站建设 项目流程
查询网站服务器地址,网站创建费用,网站怎么做海外推广,面料 做网站Qwen-Image-2512-SDNQ实战教程#xff1a;批量生成自动重命名文件归档脚本 你是不是也遇到过这样的情况#xff1a;用Web界面一张张生成图片#xff0c;填提示词、选参数、点按钮、等进度、点下载……一上午过去#xff0c;只搞定了二十张图#xff1f;更别说还要手动给每…Qwen-Image-2512-SDNQ实战教程批量生成自动重命名文件归档脚本你是不是也遇到过这样的情况用Web界面一张张生成图片填提示词、选参数、点按钮、等进度、点下载……一上午过去只搞定了二十张图更别说还要手动给每张图改名字、按项目分类存进不同文件夹。重复劳动不仅耗时间还容易出错——比如把“产品海报_v2”误存成“产品海报_v1”或者漏掉某张关键图。今天这篇教程就是来帮你彻底甩掉这些琐碎操作的。我们不讲模型原理也不堆参数配置就聚焦一件事怎么用最简单的方式让Qwen-Image-2512-SDNQ Web服务真正为你干活。你会学到一个轻量但实用的Python脚本它能一次性批量提交几十个Prompt不用手动点每张图生成后自动按规则重命名比如城市夜景_16:9_42781.png按宽高比、日期或关键词自动归档到对应文件夹失败时自动记录日志不中断整个流程全程静默运行生成完直接弹出结果目录。整个过程不需要改一行Web服务代码也不用碰GPU显存管理——它只是聪明地“调用”你已有的服务。哪怕你刚接触Python照着抄、改两处路径就能跑起来。下面我们就从环境准备开始一步步带你搭好这个“图片生成流水线”。1. 前置准备确认服务已就绪在写脚本之前得先确保你的Qwen-Image-2512-SDNQ Web服务已经稳定运行。这不是额外步骤而是避免后续调试踩坑的关键。1.1 验证服务是否正常启动打开终端执行以下命令检查服务进程ps aux | grep app.py | grep -v grep你应该能看到类似这样的输出root 12345 0.1 12.3 1234567 89012 ? Sl Jan20 5:23 python /root/Qwen-Image-2512-SDNQ-uint4-svd-r32/app.py如果没看到说明服务没起来。可以手动启动一次试试cd /root/Qwen-Image-2512-SDNQ-uint4-svd-r32 python app.py观察控制台输出重点看有没有报错。正常启动后会显示* Running on http://0.0.0.0:7860 * Debug mode: off小贴士如果你用的是CSDN星图镜像服务默认由Supervisor托管只要镜像启动成功服务就已在后台运行。无需额外操作。1.2 测试API连通性别急着写脚本先用最简单的curl确认API能通curl -X GET http://127.0.0.1:7860/api/health预期返回{status: ok}再试一个最小化的生成请求生成一张极简图快curl -X POST http://127.0.0.1:7860/api/generate \ -H Content-Type: application/json \ -d {prompt:a red apple on white background, aspect_ratio:1:1} \ -o test_apple.png几秒后当前目录下应该出现test_apple.png。双击打开看看——如果画面清晰、内容合理说明服务完全ready可以进入脚本开发阶段了。2. 批量生成脚本核心逻辑拆解这个脚本不追求炫技只做三件事发请求、收文件、理目录。我们把它拆成四个模块每个都用最直白的方式实现。2.1 模块一读取Prompt列表支持多种格式你肯定不想每次跑脚本都改代码里的字符串。所以第一件事是让脚本能从外部读取任务清单。我们支持两种常用方式纯文本文件prompts.txt每行一个Prompt简单直接CSV文件prompts.csv支持多列比如prompt,negative_prompt,aspect_ratio,seed灵活可控。脚本会自动识别格式。你只需要准备一个文件放在和脚本同级目录下即可。示例prompts.txta cyberpunk street at night, neon lights, rain puddles a minimalist logo for a coffee brand, flat design, white background a close-up of a golden retriever puppy, soft focus, natural light示例prompts.csvprompt,negative_prompt,aspect_ratio,seed a futuristic city skyline,blurry, text, watermark,16:9,1234 hand-drawn sketch of a mountain cabin,photorealistic, photo,4:3,5678脚本会自动跳过空行和以#开头的注释行方便你临时禁用某条任务。2.2 模块二构造请求并调用APIQwen-Image-2512-SDNQ的API很干净POST/api/generate传JSON返回PNG。难点在于怎么让批量请求既稳定又不压垮服务我们采用“串行带延迟”的策略——不是为了慢而是为了稳每次只发一个请求请求完成后等待1秒再发下一个如果某次失败比如超时或返回非200记录错误并继续下一个不中断整体流程。这样做的好处是内存占用极低不用缓存所有响应日志清晰哪条失败一目了然且完全兼容服务端的线程锁机制不会触发排队冲突。核心代码片段带注释import requests import time import os def generate_image(prompt_data, api_urlhttp://127.0.0.1:7860/api/generate): 向Qwen-Image API发送单次请求 payload { prompt: prompt_data.get(prompt, ), negative_prompt: prompt_data.get(negative_prompt, ), aspect_ratio: prompt_data.get(aspect_ratio, 1:1), num_steps: prompt_data.get(num_steps, 50), cfg_scale: prompt_data.get(cfg_scale, 4.0), seed: prompt_data.get(seed, None) # None表示随机种子 } try: response requests.post( api_url, jsonpayload, timeout300 # 5分钟超时足够应对长生成 ) if response.status_code 200: return response.content # 返回原始PNG字节 else: return fERROR: HTTP {response.status_code} - {response.text[:100]} except requests.exceptions.RequestException as e: return fERROR: Request failed - {str(e)}2.3 模块三智能重命名与归档这是最体现“自动化价值”的部分。我们设计了一套命名规则兼顾可读性、可排序性和信息密度{clean_prompt}_{aspect_ratio}_{seed}.png其中clean_prompt把原始Prompt转成文件名安全格式去掉空格、标点截取前20字符aspect_ratio直接用16:9这类原始值一眼看出构图seed保留种子值方便复现。例如Prompta serene lake surrounded by autumn mountains, misty morning生成文件名a_serene_lake_surrounded_by_autu_16:9_42781.png归档逻辑更简单按宽高比自动建子目录。脚本会创建如下结构output/ ├── 1:1/ ├── 16:9/ ├── 9:16/ ├── 4:3/ └── logs/ └── batch_20240125_1430.log所有16:9的图自动进16:9/文件夹所有失败记录统一进logs/。2.4 模块四健壮性保障日志重试状态反馈真实场景中网络抖动、服务短暂卡顿、磁盘满等情况无法避免。脚本内置三层防护日志全记录每个请求的输入、耗时、状态、错误详情全部写入logs/下的时间戳日志单次失败不中断某张图生成失败不影响后续任务基础重试机制对网络类错误如连接拒绝自动重试1次间隔3秒。最后脚本结束时会打印汇总报告批量完成共处理 5 条任务 ✔ 成功生成3 张 生成失败2 张详见 logs/batch_20240125_1430.log 输出目录/root/Qwen-Image-2512-SDNQ-uint4-svd-r32/output3. 完整脚本复制即用含详细注释下面是你可以直接复制、保存为batch_generate.py并运行的完整脚本。它已通过Python 3.8测试无需额外安装依赖仅需标准库。#!/usr/bin/env python3 # -*- coding: utf-8 -*- Qwen-Image-2512-SDNQ 批量生成脚本 功能读取Prompt列表 → 调用Web API生成图片 → 自动重命名 按宽高比归档 作者技术实践者 import os import csv import json import time import requests import re from datetime import datetime from pathlib import Path # 配置区只需修改这里 API_URL http://127.0.0.1:7860/api/generate # Web服务地址 PROMPT_FILE prompts.txt # 或 prompts.csv OUTPUT_ROOT output # 输出根目录 DELAY_BETWEEN_REQUESTS 1 # 请求间隔秒数防并发冲突 MAX_RETRY 1 # 网络错误重试次数 # def sanitize_filename(text, max_len20): 将文本转为安全的文件名去空格、标点截断 # 只保留字母、数字、下划线、短横线 safe re.sub(r[^a-zA-Z0-9_\-\s], , text) # 替换空白为下划线去首尾限制长度 safe _.join(safe.split())[:max_len] return safe if safe else unnamed def read_prompts(file_path): 读取prompt列表支持txt和csv格式 prompts [] if not os.path.exists(file_path): raise FileNotFoundError(fPrompt文件未找到{file_path}) if file_path.endswith(.csv): with open(file_path, r, encodingutf-8) as f: reader csv.DictReader(f) for row in reader: # 清理空值设置默认值 prompt row.get(prompt, ).strip() if not prompt: continue prompts.append({ prompt: prompt, negative_prompt: row.get(negative_prompt, ).strip(), aspect_ratio: row.get(aspect_ratio, 1:1).strip(), num_steps: int(row.get(num_steps, 50)), cfg_scale: float(row.get(cfg_scale, 4.0)), seed: int(row.get(seed, -1)) if row.get(seed) else None }) else: # txt格式每行一个prompt with open(file_path, r, encodingutf-8) as f: for line in f: line line.strip() if not line or line.startswith(#): continue prompts.append({ prompt: line, negative_prompt: , aspect_ratio: 1:1, num_steps: 50, cfg_scale: 4.0, seed: None }) return prompts def generate_image(payload, url, retry0): 发送单次生成请求带重试 try: start_time time.time() response requests.post(url, jsonpayload, timeout300) elapsed time.time() - start_time if response.status_code 200: return {status: success, content: response.content, time: elapsed} else: return {status: error, msg: fHTTP {response.status_code}: {response.text[:100]}, time: elapsed} except requests.exceptions.RequestException as e: if retry MAX_RETRY: time.sleep(3) return generate_image(payload, url, retry 1) else: return {status: error, msg: fRequest failed after {MAX_RETRY1} tries: {str(e)}, time: 0} def main(): # 创建输出目录 output_dir Path(OUTPUT_ROOT) log_dir output_dir / logs log_dir.mkdir(exist_okTrue, parentsTrue) # 日志文件 timestamp datetime.now().strftime(%Y%m%d_%H%M) log_file log_dir / fbatch_{timestamp}.log # 读取任务 prompts read_prompts(PROMPT_FILE) if not prompts: print( 错误未读取到任何有效Prompt请检查文件格式和内容。) return print(f 开始批量生成共 {len(prompts)} 个任务...) print(f 日志将保存至{log_file}) # 统计 success_count 0 error_count 0 # 逐个处理 for i, p in enumerate(prompts, 1): print(f\n--- 任务 {i}/{len(prompts)} ---) print(fPrompt: {p[prompt][:50]}{... if len(p[prompt]) 50 else }) # 构造文件名 clean_prompt sanitize_filename(p[prompt]) aspect p[aspect_ratio].replace(:, _) seed_str str(p[seed]) if p[seed] else str(int(time.time()))[-5:] filename f{clean_prompt}_{aspect}_{seed_str}.png # 归档目录 sub_dir output_dir / p[aspect_ratio] sub_dir.mkdir(exist_okTrue) full_path sub_dir / filename # 发送请求 result generate_image(p, API_URL) # 记录日志 with open(log_file, a, encodingutf-8) as lf: lf.write(f[{datetime.now().strftime(%H:%M:%S)}] Task {i}\n) lf.write(f Input: {json.dumps(p, ensure_asciiFalse)}\n) lf.write(f File: {full_path}\n) if result[status] success: # 保存图片 with open(full_path, wb) as f: f.write(result[content]) msg f✔ 生成成功 ({result[time]:.1f}s) → {full_path} print(msg) lf.write(f Status: SUCCESS ({result[time]:.1f}s)\n\n) success_count 1 else: msg f 生成失败 ({result[time]:.1f}s) → {result[msg]} print(msg) lf.write(f Status: FAILED ({result[time]:.1f}s) → {result[msg]}\n\n) error_count 1 # 请求间隔 if i len(prompts): time.sleep(DELAY_BETWEEN_REQUESTS) # 汇总 print(\n *50) print( 批量完成) print(f✔ 成功生成{success_count} 张) print(f 生成失败{error_count} 张详见 {log_file}) print(f 输出目录{output_dir.absolute()}) print(*50) if __name__ __main__: main()4. 实战演示三步跑通全流程现在我们用一个真实例子走一遍从准备到收获的全过程。4.1 第一步准备Prompt文件在你的Qwen-Image项目根目录比如/root/Qwen-Image-2512-SDNQ-uint4-svd-r32/下新建一个prompts.txt内容如下# 电商主图系列 a high-resolution product shot of wireless earbuds on marble surface, studio lighting, white background a lifestyle photo of a young woman using laptop in cozy cafe, natural light, shallow depth of field # 社交配图系列 a vibrant abstract background with gradient purple and blue, smooth texture, no text a minimalist flat icon set for mobile app: home, search, profile, settings, all in line style4.2 第二步保存并运行脚本将上面的完整脚本复制保存为batch_generate.py放在同一目录下。然后执行cd /root/Qwen-Image-2512-SDNQ-uint4-svd-r32 python batch_generate.py你会看到类似这样的实时输出开始批量生成共 4 个任务... 日志将保存至/root/Qwen-Image-2512-SDNQ-uint4-svd-r32/output/logs/batch_20240125_1430.log --- 任务 1/4 --- Prompt: a high-resolution product shot of wireless earbuds on marble surface, studio lighting, white background ✔ 生成成功 (42.3s) → /root/.../output/1:1/a_high_resolution_product_shot_of_wireless_earbuds_on_marble_surface_1:1_42781.png --- 任务 2/4 --- Prompt: a lifestyle photo of a young woman using laptop in cozy cafe, natural light, shallow depth of field ✔ 生成成功 (58.7s) → /root/.../output/16:9/a_lifestyle_photo_of_a_young_woman_using_laptop_in_cozy_cafe_16:9_56782.png ...4.3 第三步查看成果几分钟后打开output/目录你会看到output/ ├── 1:1/ │ └── a_high_resolution_product_shot_of_wireless_earbuds_on_marble_surface_1:1_42781.png ├── 16:9/ │ └── a_lifestyle_photo_of_a_young_woman_using_laptop_in_cozy_cafe_16:9_56782.png ├── logs/ │ └── batch_20240125_1430.log所有图片已按宽高比分好类名字自带关键信息双击就能预览。再也不用一张张拖进文件夹、一个个改名字了。5. 进阶技巧让脚本更贴合你的工作流这个脚本设计为“开箱即用”但也留出了几个关键扩展点你可以根据实际需要微调。5.1 快速切换不同Prompt文件不想每次改脚本里的PROMPT_FILE加个命令行参数python batch_generate.py --file prompts_v2.csv只需在脚本开头加几行argparse代码就能支持。需要的话我可以单独提供这个增强版。5.2 按日期自动归档适合长期项目如果你每天都要生成一批图可以把OUTPUT_ROOT设为动态值OUTPUT_ROOT foutput_{datetime.now().strftime(%Y%m%d)}这样每天的输出都会进独立文件夹历史记录一目了然。5.3 与现有工具链集成配合Git把prompts.txt加入版本控制团队共享提示词库配合定时任务用crontab每天凌晨自动生成日报配图配合通知生成完成后用os.system(notify-send 完成 3张图已就绪)Linux桌面或邮件提醒。这些都不是必须的但当你发现某个环节重复了三次以上就是时候让它自动化了。6. 总结自动化不是替代而是释放回看整个过程我们没有改动Qwen-Image-2512-SDNQ Web服务的一行代码也没有深入模型推理细节。我们只是在“人机交互层”做了一次小小的优化把原本需要鼠标点击20次的操作压缩成一次命令行执行。这背后体现的是一种务实的AI工程思维——不追求技术深度而专注解决真实痛点不迷信大而全而相信小而精的工具链。你学到的不是一个孤立的脚本而是一种可迁移的方法论把重复动作识别出来找到服务暴露的标准接口这里是HTTP API用最轻量的胶水代码Python requests把它们粘起来加上日志、错误处理、状态反馈让它真正可靠。下次当你面对另一个Web UI工具时也可以问自己它的API在哪里我能用脚本代替多少次手动操作技术的价值从来不在它多酷炫而在它多省心。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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

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

立即咨询