2 / app.py
drdudddd's picture
Rename app_1.py to app.py
4fbe071 verified
import gradio as gr
import torch
from diffusers import AutoPipelineForImage2Image, LCMScheduler
from PIL import Image
# Lade das Basismodell und den LCM-LoRA Adapter
# Verwende ein unzensiertes Basismodell wie Lykon/dreamshaper-8 oder SG_161222/Realistic_Vision_V5.1_noVAE
# Hier wird 'Lykon/dreamshaper-8' als Beispiel verwendet.
# Für CPU-Nutzung ist torch.float32 besser geeignet.
pipeline = AutoPipelineForImage2Image.from_pretrained(
"Lykon/dreamshaper-8",
torch_dtype=torch.float32,
variant="fp16" # variant="fp16" ist hier nur ein Platzhalter, da es für CPU nicht relevant ist, aber für das Laden des Modells benötigt wird.
)
pipeline.to("cpu")
# Setze den Scheduler
pipeline.scheduler = LCMScheduler.from_config(pipeline.scheduler.config)
# Lade den LCM-LoRA Adapter
pipeline.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")
def image_to_image_editing(input_image: Image.Image, prompt: str) -> Image.Image:
# Skaliere das Bild auf eine passende Größe, falls nötig
# Stable Diffusion Modelle arbeiten oft am besten mit 512x512 oder 768x768
input_image = input_image.resize((512, 512))
# Führe die Inferenz durch
edited_image = pipeline(
prompt=prompt,
image=input_image,
num_inference_steps=4, # Wenige Schritte für schnelle CPU-Inferenz
guidance_scale=1.0, # Niedriger guidance_scale für LCM-LoRA
strength=0.6 # Stärke der Bildbearbeitung
).images[0]
return edited_image
# Erstelle die Gradio-Oberfläche
iface = gr.Interface(
fn=image_to_image_editing,
inputs=[
gr.Image(type="pil", label="Eingabebild"),
gr.Textbox(label="Prompt (Beschreibung der gewünschten Änderung)")
],
outputs=gr.Image(type="pil", label="Bearbeitetes Bild"),
title="CPU-optimierter unzensierter Bildeditor mit LCM-LoRA",
description="Lade ein Bild hoch und beschreibe die gewünschte Änderung. Das Modell ist für CPU optimiert und verwendet ein unzensiertes Basismodell mit LCM-LoRA für schnelle Ergebnisse."
)
if __name__ == "__main__":
iface.launch()