| 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() | |