| import os |
| import gradio as gr |
| import torch |
| import spaces |
| import random |
| from diffusers import StableDiffusion3Pipeline |
| from diffusers.loaders import SD3LoraLoaderMixin |
|
|
| |
| device = "cuda" if torch.cuda.is_available() else "cpu" |
| torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32 |
|
|
| |
| token = os.getenv("HF_TOKEN") |
|
|
| |
| model_repo_id = "stabilityai/stable-diffusion-3.5-large" |
|
|
| |
| pipeline = StableDiffusion3Pipeline.from_pretrained( |
| model_repo_id, |
| torch_dtype=torch_dtype, |
| use_safetensors=True, |
| ).to(device) |
|
|
| |
| lora_path = "lora_trained_model.safetensors" |
| if os.path.exists(lora_path): |
| try: |
| pipeline.load_lora_weights(lora_path) |
| print("✅ LoRA weights loaded successfully!") |
| except Exception as e: |
| print(f"❌ Error loading LoRA: {e}") |
| else: |
| print("⚠️ LoRA file not found! Running base model.") |
|
|
| |
| for name, param in pipeline.text_encoder.named_parameters(): |
| if "lora" in name.lower(): |
| print(f"LoRA applied to: {name}, requires_grad={param.requires_grad}") |
|
|
| |
| @spaces.GPU(duration=65) |
| def generate_image(prompt: str, seed: int = None): |
| """Generates an image using Stable Diffusion 3.5 with LoRA fine-tuning.""" |
| if seed is None: |
| seed = random.randint(0, 100000) |
| |
| |
| generator = torch.manual_seed(seed) |
|
|
| |
| image = pipeline(prompt, generator=generator).images[0] |
| return image |
|
|
| |
| with gr.Blocks() as demo: |
| gr.Markdown("# 🖼️ LoRA Fine-Tuned SD 3.5 Image Generator") |
|
|
| with gr.Row(): |
| prompt_input = gr.Textbox(label="Enter Prompt", value="A woman in her 20s with expressive black eyes, graceful face, elegant body, standing on the beach at sunset. Photorealistic, highly detailed.") |
| seed_input = gr.Number(label="Seed (optional)", value=None) |
| |
| generate_btn = gr.Button("Generate Image") |
| output_image = gr.Image(label="Generated Image") |
|
|
| generate_btn.click(generate_image, inputs=[prompt_input, seed_input], outputs=output_image) |
|
|
| |
| demo.launch() |