File size: 2,275 Bytes
5224c49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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()