import requests
import time
from PIL import Image
from io import BytesIO
def batch_generate_flux(prompts_with_ratios, model="flux-kontext-pro"):
"""批量生成不同比例的图像"""
results = []
for prompt, ratio in prompts_with_ratios:
try:
print(f"正在生成 {ratio} 比例的图像...")
response = client.images.generate(
model=model,
prompt=prompt,
extra_body={"aspect_ratio": ratio}
)
image_url = response.data[0].url
# 下载并保存图像
filename = save_image_from_url(image_url, prompt, ratio)
results.append({
"prompt": prompt,
"ratio": ratio,
"url": image_url,
"filename": filename,
"success": True
})
except Exception as e:
results.append({
"prompt": prompt,
"ratio": ratio,
"error": str(e),
"success": False
})
return results
def save_image_from_url(url, prompt, ratio):
"""从 URL 下载并保存图像(考虑 10 分钟失效)"""
try:
# 立即下载,避免 URL 失效
response = requests.get(url, timeout=30)
response.raise_for_status()
# 生成文件名
timestamp = int(time.time())
safe_prompt = prompt[:30].replace(" ", "_").replace("/", "_")
filename = f"flux_{safe_prompt}_{ratio.replace(':', 'x')}_{timestamp}.png"
with open(filename, 'wb') as f:
f.write(response.content)
print(f"✅ 已保存: {filename}")
return filename
except requests.exceptions.RequestException as e:
print(f"❌ 下载失败: {e}")
print("提示:Flux URL 仅 10 分钟有效,请确保及时下载!")
return None
# 批量生成示例
prompts_and_ratios = [
("A beautiful sunset over mountains", "3:2"),
("Portrait of a wise old wizard", "2:3"),
("Cyberpunk street scene", "16:9"),
("Minimalist app icon design", "1:1")
]
results = batch_generate_flux(prompts_and_ratios, "flux-kontext-max")
# 打印结果
for result in results:
if result["success"]:
print(f"✅ {result['prompt']} ({result['ratio']}) -> {result['filename']}")
else:
print(f"❌ {result['prompt']} ({result['ratio']}) -> {result['error']}")