Spaces:
Running
Running
import gradio as gr | |
import torch | |
from diffusers import FluxPriorReduxPipeline, FluxPipeline | |
from PIL import Image | |
from huggingface_hub import login | |
import os | |
# Hugging Face HubのAPIキーを設定 | |
login(os.getenv("HF_API_KEY")) | |
# Lazy Loadingを実現するため、モデルロードは関数内で行う | |
def process_image(image_path): | |
# 入力画像をロードしてリサイズ | |
image = Image.open(image_path).convert("RGB") | |
image = image.resize((256, 256)) # サイズを256x256に制限してメモリ節約 | |
# Prior Reduxパイプラインのロードと処理 | |
pipe_prior_redux = FluxPriorReduxPipeline.from_pretrained( | |
"black-forest-labs/FLUX.1-Redux-dev", | |
use_auth_token=True | |
).to("cpu") | |
pipe_prior_output = pipe_prior_redux(image) | |
# FLUXパイプラインのロードと処理 | |
pipe = FluxPipeline.from_pretrained( | |
"black-forest-labs/FLUX.1-dev", | |
use_auth_token=True, | |
text_encoder=None, | |
text_encoder_2=None | |
).to("cpu") | |
images = pipe( | |
guidance_scale=2.5, | |
num_inference_steps=25, # 推論ステップを減らしてメモリ節約 | |
generator=torch.Generator("cpu").manual_seed(0), # 再現性のためのシード値 | |
**pipe_prior_output, | |
).images | |
# 結果画像を返す | |
return images[0] | |
# Gradioインターフェースを構築 | |
def infer(image): | |
result_image = process_image(image) | |
return result_image | |
with gr.Blocks() as demo: | |
gr.Markdown("# FLUX Image Generation App (Optimized for CPU)") | |
with gr.Row(): | |
input_image = gr.Image(type="filepath", label="Input Image") | |
output_image = gr.Image(type="pil", label="Generated Image") | |
submit_button = gr.Button("Generate") | |
submit_button.click(fn=infer, inputs=[input_image], outputs=[output_image]) | |
demo.launch() | |