Sent from Hauptstadt!

ein Blog für den geneigten Leser

Portrait einer alten Frau, die skeptisch in die Kamera schaut (mit KI generiert)

Bildgenerierung mit ComfyUI (StableDiffusion & FLUX.1)

Am in Web | 3 Kommentare »

Tags: ,

Nachdem, wie erwartet, meine KI-generierten Bilder hier im Blog ein riesiges Aufsehen erregt haben, möchte ich heute das technische Setup beleuchten. Dies ist Teil 2 meiner 37 teiligen Serie zu KI Bildgenerierung…

Meine Hardware

Nicht nur für das Training von KI Modellen, sondern auch für die Ausführung (Interferenz), benötigt man potente Hardware. Wirklich wichtig ist nur die Grafikkarte (GPU) und insbesondere der verfügbare Speicher.

Ich nutze eine NVIDIA Geforce RTX 4070 mit 12GB Speicher. Diese hat mich vor einiger Zeit ungefähr 550€ gekostet.

Das Blogbild mit der skeptischen älteren Frau generiert sie in ca. 40 Sekunden und nutzt dabei 95% des verfügbaren Grafikspeichers.

Aktuell kann ich ausschließlich NVIDIA Grafikkarten dem geneigten Leser empfehlen, wenn er selbst KI Modelle trainieren oder lokal ausführen will. Die notwendigen CUDA Treiber lassen sich inzwischen recht problemlos auf Linux (und wohl auch Windows) installieren.

Die Unterstützung von AMD Radeon GPUs in den populären KI Frameworks wie Torch wird besser, aber die Kompatibilität ist nicht annähernd so groß wie bei NVIDIA.

Beispielbild

Der Prompt für das Beispielbild in diesem Blog lautet:

Ultra-realistic close-up portrait of a very old peasant woman sitting alone at a worn wooden kitchen table. She gazes sceptically at the viewer with deep-set, expressive eyes. Her weathered face shows intricate skin texture, wrinkles, and age spots, captured with cinematic depth of field and soft bokeh. The lighting is natural and moody, coming from a small window behind her, casting subtle shadows across her face. The kitchen is humble and rustic-faded wallpaper, chipped enamelware, and a simple wooden chair. Shot with an 85mm lens for shallow focus and intimate framing. The atmosphere evokes solitude, resilience, and realism.

Das war natürlich nicht mein erster Prompt. Gestartet bin ich mit:

Portrait of an old woman looking sceptically at the observer, old woman is sitting alone on a chair, dark background, close-up, cinematic depth of field, ultra-detailed skin texture, realistic lighting, 85mm lens, bokeh, super realism.

erster Versuch ein Bild von einer skeptischen älteren Frau zu generieren

Diesen Prompt habe ich mit Copilot (ich glaube, die nutzen intern ein ChatGPT Modell) überarbeitet. Spannend ist, dass Copilot sofort wusste, was ich will und wie der richtige Prompt für das Bild auszusehen hat:

I need to improve the following image generation prompt for flux 1 dev:

Portrait of an old woman looking sceptically at the observer, old woman is sitting alone on a chair, dark background, close-up, cinematic depth of field, ultra-detailed skin texture, realistic lighting, 85mm lens, bokeh, super realism.

The woman should look like peasant, really old, not posh. She should sit in the kitchen or at the kitchen table. Improve the prompt.

Die technischen Parameter für das finale Bild lauten:

Alle restlichen Parameter und der genaue ComfyUI Workflow sind in den Exif Parametern des Bildes gespeichert. Diese kann man zum Beispiel mit ImageMagick ausgeben:

identify -verbose bild.png

Diffusion Modelle

KI Modelle zur Bildgenerierung, so genannte Diffusion Modelle, arbeiten nach einem cleveren Prinzip: Sie starten mit einem Bild, das nichts als zufälliges Rauschen enthält, also reines Pixelchaos. Mit jedem Schritt wird dieses Rauschen in ein sinnvolleres Bild verwandelt, das dem gewünschten Prompt entspricht.

In jeder Iteration sagt das Modell gewissermaßen: „Wie müsste dieses Bild verändert werden, damit es dem Prompt ein Stück näher kommt?“ Das Ergebnis wird erneut als Eingabe verwendet. Der Prozess wird so oft wiederholt, bis das Ausgabebild der eigenen Vorstellung entspricht.

Je nach Architektur des verwendeten Modells variiert die Anzahl der benötigten Schritte. Das FLUX.1 Modell benötigt Dank einer modernen Transformer Architektur nur verhältnismäßig wenige Schritte, um ein erstes brauchbares Bild zu generieren. Hier die einzelnen Ergebnisse nach unterschiedlich vielen Schritten:

nach nur einem Schritt:

von FLUX.1 generiertes Bild nach 1 Schritt

nach 2 Schritten:

von FLUX.1 generiertes Bild nach 2 Schritten

nach 3 Schritten:

von FLUX.1 generiertes Bild nach 3 Schritten

nach 5 Schritten:

von FLUX.1 generiertes Bild nach 5 Schritten

nach 10 Schritten:

von FLUX.1 generiertes Bild nach 10 Schritten

nach 20 Schritten:

von FLUX.1 generiertes Bild nach 20 Schritten

und finales Bild nach 28 Schritten:

Portrait einer alten Frau, die skeptisch in die Kamera schaut (mit KI generiert)

Abgesehen vom Gesicht der Frau finde ich die Gegenstände auf dem Fensterbrett und die zwischenzeitlich sichtbare Schüssel vorne rechts auf dem Tisch extrem spannend.

Das Modell StableDiffusion 3.5 Large FP8 (15GB) benötigt wesentlich mehr Schritte, da es noch eine ältere Architektur verwendet. Bei gleichem Prompt benötige ich 50 Schritte, um ein gutes Resultat zu erhalten. Die Laufzeit ist mit 32 Sekunden aber kürzer, da das Modell weniger rechenintensiv ist.

Wie immer sind Hände ein großes Problem bei StableDiffusion, schön zu sehen im Bild mit 10 Schritten und auch der finale Unterarm nach 50 Schritten sieht etwas zu lang aus. Es gibt eine Anpassung der Modellgewichte (LoRA), die aber bei mir keine große Veränderung gebracht hat.

nach 1 Schritt:

von StableDiffusion 3.5 Large generiertes Bild nach 1 Schritt

nach 2 Schritten:

von StableDiffusion 3.5 Large generiertes Bild nach 2 Schritten

nach 5 Schritten:

von StableDiffusion 3.5 Large generiertes Bild nach 5 Schritten

nach 10 Schritten:

von StableDiffusion 3.5 Large generiertes Bild nach 10 Schritten

nach 32 Schritten:

von StableDiffusion 3.5 Large generiertes Bild nach 32 Schritten

und das finale Bild nach 50 Schritten:

von StableDiffusion 3.5 Large generiertes Bild nach 50 Schritten

Bildgenerierung mit Comfy

Es gibt diverse Benutzeroberflächen, um Modelle wie FLUX.1 oder StableDiffusion auszuführen. Statt einem langen Formular mit vielen Checkboxen und Parametern hat das OpenSource Projekt Comfy einen innovativen Ansatz gewählt: Es stellt die Generierung eines Bilds (oder Videos) als Prozess dar.

Screenshot des ComfyUI Workflows, um das Bild der alten Frau zu generieren

Die Knoten in dem Graph stellen Aktionen dar, deren Eingaben und Ausgaben man mit Pfeilen verknüpft. Der Prozess beginnt mit dem Laden des gewünschten Modells. Im grünen Knoten mit dem vielen Text steht mein Prompt.

Am Anfang erfordert Comfy etwas Einarbeitung, aber man kann immer ein bereits existierendes Bild im Editor öffnen und den genutzten Workflow laden. Der Workflow ist im erzeugten PNG in den Exif Informationen als JSON eingebettet.

Hat man bereits seine NVIDIA CUDA Treiber installiert, dann ist die Installation von Comfy relativ einfach. Man benötigt lediglich:

  • Conda (gibt es meist als Teil der Anaconda Distribution für jede gängige Linux Distribution als Paket)
  • Python >= 3.10
  • Clone des ComfyUI Repos

Nach dem Checkout des GitHub Repos habe ich zunächst eine minimale Conda Umgebung erzeugt und aktiviert:

conda create -n comfyui python=3.10 -y
conda activate comfyui

Anschließend habe ich alle von ComfyUI benötigten Pakete installiert, insbesondere PyTorch:

pip install -r requirements.txt

Am längsten dauert natürlich der manuelle Download der verschiedenen Modelle, Textencoder und LoRAs. Es gibt aber eine gute Beschreibung in der Comfy Dokumentation zu Flux, was man alles benötigt und welche Datei in welchen Ordner gehört.

Da der geneigte Leser sicher keine Grafikkarte mit aktuell mehr als 12GB oder 16GB hat, sollte er immer die FP8 Varianten nutzen, die bei minimalen Qualitätseinbußen deutlich weniger Speicher benötigt.

Sind alle Dateien in den richtigen Verzeichnissen unterhalb von „models/“ abgelegt, startet man ComfyUI einfach per:

python main.py

Wenn alles gut läuft und PyTorch die eigene Grafikkarte findet und unterstützt, wartet das ComfyUI im Browser unter http://127.0.0.1:8188. Eine Nutzung ohne Grafikkartenunterstützung ist nicht möglich.

In der Dokumentation gibt es eine Reihe Beispielbilder. Zieht man solch ein Bild oder die Bilder aus diesem Post in den Workflow Manager per Drag’n’Drop (oder per File | Open), dann wird der Workflow mit den Einstellungen geladen, mit denen das Bild erzeugt wurde. Durch einen Klick auf die hellblaue „Run“ Schaltfläche am unteren Bildschirmrand wird die Generierung gestartet.

Falls die im Workflow verwendeten Modelle oder andere Dateien wie Textencoder oder LoRAs fehlen, kommt eine aussagekräftige Fehlermeldung und man kann sich auf die Suche nach den entsprechenden Dateien im Netz begeben.

Fazit

Comfy und die entsprechenden Modelle können noch viel mehr, als nur Bilder aus Prompts erzeugen. Man kann zum Beispiel bestehende Bilder auf höhere Auflösungen hochrechnen, Details in Bildern ändern und sogar Videos erzeugen.

Das habe ich aber alles noch nicht genauer probiert und ist dann wohl Stoff für die restlichen Artikel dieser Serie – oder auch nicht :-)

Update

Als kleiner Nachtrag entsprechend der Kommentare habe ich noch ein Bild mit FLUX.1 für folgenden Prompt generiert :-)

A comic drawing of a young blonde pirate male and his beautiful red haired girlfriend sitting on the shore watching the sunset. romantic, 2D drawing, retro, monkey island

mit KI generiertes Bild auf Basis von folgendem Prompt: A comic drawing of a young blonde pirate male and his beautiful red haired girlfriend sitting on the shore watching the sunset. romantic, 2D drawing, retro, monkey island

Und noch jener Versuch eines Sprites:

Sprite with white background of a young blonde male pirate walking, character shown from side, no walking surface, 2D drawing, retro, monkey island, no shadows

mit KI generiertes Bild mit folgendem Prompt: Sprite with white background of a young blonde male pirate walking, character shown from side, no walking surface, 2D drawing, retro, monkey island, no shadows
Zählpixel

3 Kommentare to “Bildgenerierung mit ComfyUI (StableDiffusion & FLUX.1)”

  1. Matin sagt:

    Na dann werde ich Dir in demnächst mal Aufträge für die Generierung von Szenenhintergründe für Point & Click Adventure schicken :-)
    Denkst Du, so können auch Sprites generiert werden, die sich gut in die generierten Hintergründe einfügen?
    Oder gar Charakter-Sprites, in verschiedenen korrekten Bewegungspositionen?

  2. Matthias sagt:

    Ah, Martin wählt den online KI Service und den billigeren Laptop.

    Die KI Dinge sind schon interessant. Mangels passender Hardware kann ich leider nicht mitspielen.

  3. Sebastian sagt:

    Prinzipiell ja, man kann damit Szenehintergründe und Sprites erzeugen, aber ganz so einfach ist es nicht.

    Für ein Spiel bräuchte man zunächst ein Basisprompt, damit man immer stilistisch einheitliche Bilder erzeugt. Das müsste noch machbar sein. Hat man den gefunden, kann man sicher relativ einfach Hintergründe für verschiedene Szenen erzeugen.

    Schwieriger wird es bei den Sprites. Vermutlich wird man sich ein Basissprite erzeugen und die verschiedenen Positionen dann klassisch per Photoshop daraus ableiten. Alternativ könnte man noch Inpainting verwenden, also das Basissprite mittels Prompt überarbeiten lassen. Dabei kann man auch Masken verwenden, um zum Beispiel den Bereich anzugegeben (wie die Beine), der verändert werden soll. Vermutlich ist der Aufwand dafür aber zu groß, für wenige Beispiele.

    Als kleinen Service habe ich mal noch ein weiteres Bild erzeugt, siehe Ende des Blogposts :-)

Schreiben sie ein Kommentar