import gradio as gr import torch from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler import os # Modell-ID (Unzensiertes Modell basierend auf SD 1.5) model_id = "Kernel/sd-nsfw" # Lade die Pipeline # Wir nutzen float32 für CPU, da dies am stabilsten ist. # safety_checker=None deaktiviert den eingebauten Filter. print("Lade Modell...") pipe = StableDiffusionPipeline.from_pretrained( model_id, torch_dtype=torch.float32, safety_checker=None, requires_safety_checker=False ) # Nutze einen schnelleren Scheduler für CPU pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config) pipe = pipe.to("cpu") def generate_image(prompt, negative_prompt, steps, guidance_scale): print(f"Generiere Bild für: {prompt}") image = pipe( prompt=prompt, negative_prompt=negative_prompt, num_inference_steps=int(steps), guidance_scale=guidance_scale ).images[0] return image # Gradio Interface with gr.Blocks() as demo: gr.Markdown("# 🎨 Unzensierter KI-Bildgenerator (CPU-optimiert)") gr.Markdown("Diese App nutzt das Modell `Kernel/sd-nsfw` auf Hugging Face Spaces (CPU).") with gr.Row(): with gr.Column(): prompt = gr.Textbox(label="Prompt", placeholder="Was möchtest du sehen?", lines=3) negative_prompt = gr.Textbox(label="Negativer Prompt", placeholder="Was soll nicht im Bild sein?", value="low quality, blurry, distorted") with gr.Row(): steps = gr.Slider(minimum=1, maximum=50, value=20, step=1, label="Inferenz-Schritte (CPU: 20 empfohlen)") guidance_scale = gr.Slider(minimum=1, maximum=20, value=7.5, step=0.5, label="Guidance Scale") generate_btn = gr.Button("Bild generieren", variant="primary") with gr.Column(): output_image = gr.Image(label="Generiertes Bild") generate_btn.click( fn=generate_image, inputs=[prompt, negative_prompt, steps, guidance_scale], outputs=output_image ) gr.Markdown("---") gr.Markdown("⚠️ **Hinweis:** Da dies auf einer CPU läuft, kann die Generierung 1-2 Minuten dauern.") if __name__ == "__main__": demo.launch()