FLUX.1-Krea-dev / app.py
dangthr's picture
Update app.py
eb60676 verified
raw
history blame
3.09 kB
import argparse
import os
import random
import torch
import numpy as np
from diffusers import DiffusionPipeline, AutoencoderKL
from PIL import Image
import re
def generate_image(pipe, prompt, seed=42, randomize_seed=True, width=768, height=768, guidance_scale=4.5, num_inference_steps=20):
MAX_SEED = np.iinfo(np.int32).max
# 无论如何都先创建 generator
generator = torch.Generator(device=pipe.device)
if randomize_seed:
seed = random.randint(0, MAX_SEED)
# 使用最终确定的种子来设置 generator
generator.manual_seed(seed)
print(f"ℹ️ 使用种子: {seed}")
print("🚀 开始生成图像...")
image = pipe(
prompt=prompt,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
width=width,
height=height,
generator=generator,
output_type="pil"
).images[0]
return image, seed
def main():
parser = argparse.ArgumentParser(description="使用 FLUX.1-Krea-dev 模型从文本提示生成图像。")
parser.add_argument("--prompt", type=str, required=True, help="用于图像生成的文本提示。")
parser.add_argument("--seed", type=int, default=None, help="随机种子。如果未提供,将随机生成。")
parser.add_argument("--steps", type=int, default=20, help="推理步数。")
parser.add_argument("--width", type=int, default=768, help="图像宽度。")
parser.add_argument("--height", type=int, default=768, help="图像高度。")
parser.add_argument("--guidance", type=float, default=4.5, help="指导比例 (Guidance Scale)。")
args = parser.parse_args()
print("⏳ 正在加载模型,请稍候...")
dtype = torch.bfloat16
device = "cuda" if torch.cuda.is_available() else "cpu"
good_vae = AutoencoderKL.from_pretrained("black-forest-labs/FLUX.1-Krea-dev", subfolder="vae", torch_dtype=dtype)
pipe = DiffusionPipeline.from_pretrained("black-forest-labs/FLUX.1-Krea-dev", torch_dtype=dtype, vae=good_vae).to(device)
if device == "cuda":
torch.cuda.empty_cache()
print(f"✅ 模型加载完成,使用设备: {device}")
print(f"🎨 开始为提示生成图像: '{args.prompt}'")
randomize = args.seed is None
seed_value = args.seed if not randomize else 42
generated_image, used_seed = generate_image(
pipe=pipe,
prompt=args.prompt,
seed=seed_value,
randomize_seed=randomize,
width=args.width,
height=args.height,
num_inference_steps=args.steps,
guidance_scale=args.guidance
)
output_dir = "output"
os.makedirs(output_dir, exist_ok=True)
safe_prompt = re.sub(r'[^\w\s-]', '', args.prompt).strip()
safe_prompt = re.sub(r'[-\s]+', '_', safe_prompt)
filename = f"{safe_prompt[:50]}_{used_seed}.png"
filepath = os.path.join(output_dir, filename)
print(f"💾 正在保存图像到: {filepath}")
generated_image.save(filepath)
print("🎉 完成!")
if __name__ == "__main__":
main()