import torch
import gradio as gr
from modelscope import snapshot_download
from diffsynth import ModelManager, FluxImagePipeline
def init_models():
snapshot_download(model_id="MAILAND/majicflus_v1", allow_file_pattern="majicflus_v134.safetensors", cache_dir="models")
snapshot_download(model_id="black-forest-labs/FLUX.1-dev", allow_file_pattern=["ae.safetensors", "text_encoder/model.safetensors", "text_encoder_2/*"], cache_dir="models")
model_manager = ModelManager(torch_dtype=torch.bfloat16)
model_manager.load_models(
["models/MAILAND/majicflus_v1/majicflus_v134.safetensors"],
torch_dtype=torch.float8_e4m3fn,
device="cpu"
)
model_manager.load_models(
[
"models/black-forest-labs/FLUX.1-dev/text_encoder/model.safetensors",
"models/black-forest-labs/FLUX.1-dev/text_encoder_2",
"models/black-forest-labs/FLUX.1-dev/ae.safetensors",
],
torch_dtype=torch.bfloat16,
device="cpu"
)
pipe = FluxImagePipeline.from_model_manager(model_manager, device="cuda")
pipe.enable_cpu_offload()
pipe.dit.quantize()
return pipe
pipe = init_models()
def generate_fn(prompt, seed, steps):
if seed == -1:
import random
seed = random.randint(0, 99999999)
image = pipe(prompt=prompt, seed=seed, num_inference_steps=int(steps))
return image
with gr.Blocks(title="Flux WebUI") as demo:
gr.Markdown("# Flux 离线图像生成控制台")
with gr.Row():
with gr.Column(scale=1):
prompt_input = gr.Textbox(label="提示词 (Prompt)", placeholder="输入描述词,例如:水墨风格山水画...", lines=5)
with gr.Row():
seed_input = gr.Number(label="随机种子 (Seed)", value=0, precision=0)
steps_input = gr.Slider(label="步数 (Steps)", minimum=1, maximum=50, value=20, step=1)
btn = gr.Button("开始生成图像", variant="primary")
with gr.Column(scale=1):
output_image = gr.Image(label="生成结果")
btn.click(fn=generate_fn, inputs=[prompt_input, seed_input, steps_input], outputs=output_image)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=6006)