| import os
|
| import gradio as gr
|
| from diffusers import DiffusionPipeline
|
| import torch
|
| from huggingface_hub import login
|
|
|
|
|
| if os.getenv('HF_TOKEN'):
|
| login(token=os.getenv('HF_TOKEN'))
|
|
|
|
|
| def load_model():
|
| model_id = "IndexTeam/Index-anisora"
|
| print("正在加载模型...")
|
|
|
| pipe = DiffusionPipeline.from_pretrained(
|
| model_id,
|
| torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
|
| variant="fp16" if torch.cuda.is_available() else None,
|
| use_safetensors=True
|
| )
|
|
|
| if torch.cuda.is_available():
|
| print("使用CUDA加速")
|
| pipe = pipe.to("cuda")
|
| pipe.enable_attention_slicing()
|
| if hasattr(pipe, 'enable_xformers_memory_efficient_attention'):
|
| pipe.enable_xformers_memory_efficient_attention()
|
| else:
|
| print("警告:未检测到CUDA,使用CPU模式运行")
|
|
|
| return pipe
|
|
|
|
|
| pipe = load_model()
|
|
|
|
|
| def generate_image(prompt, negative_prompt, steps=30, guidance_scale=7.5, seed=None):
|
| if seed is not None and seed >= 0:
|
| generator = torch.Generator("cuda" if torch.cuda.is_available() else "cpu").manual_seed(int(seed))
|
| else:
|
| generator = None
|
|
|
| try:
|
| with torch.inference_mode():
|
| print(f"生成图像: {prompt[:50]}...")
|
| image = pipe(
|
| prompt=prompt,
|
| negative_prompt=negative_prompt,
|
| num_inference_steps=steps,
|
| guidance_scale=guidance_scale,
|
| generator=generator
|
| ).images[0]
|
| return image
|
| except Exception as e:
|
| print(f"生成失败: {str(e)}")
|
| raise gr.Error(f"生成图像时出错: {str(e)}")
|
|
|
|
|
| with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| gr.Markdown("""
|
| # Index-anisora 演示
|
| """)
|
|
|
| with gr.Row():
|
| with gr.Column():
|
| prompt = gr.Textbox(
|
| label="提示词",
|
| value="1girl, beautiful anime style, detailed background",
|
| placeholder="描述你想要生成的图像..."
|
| )
|
| negative_prompt = gr.Textbox(
|
| label="负面提示词",
|
| value="low quality, blurry, bad anatomy",
|
| placeholder="描述你不希望在图像中出现的内容..."
|
| )
|
|
|
| with gr.Row():
|
| steps = gr.Slider(
|
| label="推理步数",
|
| minimum=10,
|
| maximum=50,
|
| value=30,
|
| step=1
|
| )
|
| guidance_scale = gr.Slider(
|
| label="引导强度",
|
| minimum=1.0,
|
| maximum=20.0,
|
| value=7.5,
|
| step=0.5
|
| )
|
| seed = gr.Number(
|
| label="随机种子",
|
| value=-1,
|
| precision=0
|
| )
|
|
|
| submit_btn = gr.Button("生成", variant="primary")
|
|
|
| with gr.Column():
|
| output_image = gr.Image(label="生成结果")
|
|
|
|
|
| submit_btn.click(
|
| fn=generate_image,
|
| inputs=[prompt, negative_prompt, steps, guidance_scale, seed],
|
| outputs=output_image
|
| )
|
|
|
|
|
| if __name__ == "__main__":
|
| demo.launch(
|
| server_name="0.0.0.0",
|
| server_port=7860,
|
| share=False
|
| ) |