Stable Diffusion



Stable Diffusion

Stable Diffusion ist ein Bildgenerator, welcher auf künstlicher Intelligenz basiert. Die Software ist Open-Source und somit für jeden zugänglich. In diesem Beitrag werden wir uns die Funktionen anschauen und verstehen, wie man Stable Diffusion auf seinem eigenen Rechner offline ausführen kann.

Stable Diffusion API

Die Stable Diffusion API bietet eine Schnittstelle, um Bilder auf programmatischer Ebene zu generieren. Wenn man keinen eigenen Server für den Bildgenerator aufsetzen möchte, ist dies eine gute Lösung.

Text to Image

Die wahrscheinlich wichtigste und bekannteste Funktion der Stable Diffusion API ist der Text2Image-Endpoint. Er ermöglicht das Generieren von Bildern mit einem Prompt. Die URL des Endpoints lautet https://stablediffusionapi.com/api/v3/text2img

Body

Im Body des Post-Endpoints werden die Argumente für die Bildgenerierung mitgegeben. Somit kann beispielsweise der Prompt "Cat on the moon" an den Endpoint geschickt werden.
{
  "key": "myApiKey",
  "prompt": "Cat on the moon",
  "negative_prompt": null,
  "width": "512",
  "height": "512",
  "samples": "1",
  "num_inference_steps": "20",
  "safety_checker": "no",
  "enhance_prompt": "yes",
  "seed": null,
  "guidance_scale": 7.5,
  "multi_lingual": "no",
  "panorama": "no",
  "self_attention": "no",
  "upscale": "no",
  "embeddings_model": null,
  "webhook": null,
  "track_id": null
}
  • key: Ihr API-Schlüssel zur Autorisierung von Anfragen.
  • prompt: Textvorgabe mit einer Beschreibung der Dinge, die im generierten Bild enthalten sein sollen.
  • negative_prompt: Elemente, die Sie nicht im Bild haben möchten.
  • width: Maximale Höhe: Breite: 1024x1024.
  • height: Maximale Höhe: Breite: 1024x1024.
  • samples: Anzahl der Bilder, die in der Antwort zurückgegeben werden sollen. Der maximale Wert beträgt 4.
  • num_inference_steps: Anzahl der Denoising-Schritte. Verfügbare Werte: 21, 31, 41, 51.
  • safety_checker: Ein Prüfer für anstößige Bilder. Wenn ein solches Bild erkannt wird, wird es durch ein leeres Bild ersetzt.
  • enhance_prompt: Verbessern Sie Vorgaben für bessere Ergebnisse; Standard: ja, Optionen: ja/nein.
  • seed: Der Seed wird verwendet, um Ergebnisse zu reproduzieren. Derselbe Seed liefert dasselbe Bild als Ergebnis. Geben Sie null für eine Zufallszahl ein.
  • guidance_scale: Skala für leitungsunabhängige Führung (Minimum: 1; Maximum: 20).
  • multi_lingual: Erlaubt mehrsprachige Vorgaben zur Bildgenerierung. Verwenden Sie "nein" für das Standard-Englisch.
  • panorama: Setzen Sie diesen Parameter auf "ja", um ein Panoramabild zu generieren.
  • self_attention: Wenn Sie ein qualitativ hochwertiges Bild wünschen, setzen Sie diesen Parameter auf "ja". In diesem Fall dauert die Bildgenerierung länger.
  • upscale: Setzen Sie diesen Parameter auf "ja", wenn Sie die Auflösung des gegebenen Bildes um den Faktor zwei erhöhen möchten (2x). Wenn die angeforderte Auflösung 512 x 512 px beträgt, wird das generierte Bild 1024 x 1024 px sein.
  • embeddings_model: Dies wird verwendet, um ein Embeddings-Modell zu übergeben (Embeddings-Modell-ID).
  • webhook: Geben Sie eine URL an, um einen POST-API-Aufruf zu erhalten, sobald die Bildgenerierung abgeschlossen ist.
  • track_id: Diese ID wird in der Antwort auf den Webhook-API-Aufruf zurückgegeben. Sie wird verwendet, um die Webhook-Anfrage zu identifizieren.

Response

Als Antwort vom Server enthält man ein JSON mit den generierten Bildern und ein paar Metadaten.
{
  "status": "success",
  "generationTime": 1.3200268745422363,
  "id": 12202888,
  "output": [
    "https://pub-8b49af329fae499aa563997f5d4068a4.r2.dev/generations/e5cd86d3-7305-47fc-82c1-7d1a3b130fa4-0.png"
  ],
  "meta": {
    "H": 512,
    "W": 512,
    "enable_attention_slicing": "true",
    "file_prefix": "e5cd86d3-7305-47fc-82c1-7d1a3b130fa4",
    "guidance_scale": 7.5,
    "model": "runwayml/stable-diffusion-v1-5",
    "n_samples": 1,
    "negative_prompt": null,
    "outdir": "out",
    "prompt": "Cat on the moon",
    "revision": "fp16",
    "safetychecker": "no",
    "seed": 3499575229,
    "steps": 20,
    "vae": "stabilityai/sd-vae-ft-mse"
  }
}
Als Ergebnis entstehen erstaunliche KI-Generierte Bilder, wie dieses Bild einer Katze auf dem Mond:


Ich finde allerdings, dass die Bildergenerierung noch nicht komplett ausgereift und auf dem Level von Midjourney ist.

Image to Image

Neben dem Text2Image-Endpoint gibt es auch noch einen Endpoint, um bereits vorhandene Bilder anzupassen. Über den Pfad https://stablediffusionapi.com/api/v3/img2img gelangt man zum sogenannten Image2Image-Endpoint. Dort kann man ebenfalls einen Prompt, den Negative Prompt, eine Breite, eine Höhe, die Anzahl Bilder und den Safety-Checker mitgeben.

Body

Der Body sieht ähnlich wie beim Text2Image-Endpoint aus, jedoch muss noch das "init-image" mitgegeben werden.

{
    "key": "",
    "prompt": "a cat sitting on a bench",
    "negative_prompt": null,
    "init_image": "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png",
    "width": "512",
    "height": "512",
    "samples": "1",
    "num_inference_steps": "30",
    "safety_checker": "no",
    "enhance_prompt": "yes",
    "guidance_scale": 7.5,
    "strength": 0.7,
    "seed": null,
    "base64": "no",
    "webhook": null,
    "track_id": null
}

Die Antwort ist dieselbe wie beim Text2Image-Endpoint.

Stable Diffusion hosten

Um Stable Diffusion auf seinem eigenen Rechner oder einem Server zu hosten, muss zunächst das Repository. Ausserdem sollte man sicherstellen, dass man Python auf dem Gerät installiert hat.

Repository Clonen

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Anschliessend muss das neuste Stable Diffusion Model von huggingface.co heruntergeladen werden. Dabei handelt es sich um eine CKPT-Datei, welche im Stable Diffusion Ordner unter "models/Stable-diffusion" abgelegt werden muss. 

Stable Diffusion ausführen

Nun muss man über die Kommandozeile in den Root-Ordner von Stable Diffusion navigieren und diesen Befehl ausführen:
webui-user.bat
Dies dauert ein paar Minuten. Danach sollte das UI von Stable Diffusion über den Localhost "http://127.0.0.1:7860" erreichbar sein.


Kommentare

Beliebte Posts aus diesem Blog

QuestPDF

ASP.NET Core Identity

Custom JsonConverter mit System.Text.Json