Zum Inhalt springen

ComfyUI Tutorial

    Die künstliche Intelligenz hat die Fähigkeit erlangt, aus reinen Textbeschreibungen detailreiche und komplexe Bilder zu erschaffen. Die technologische Grundlage hierfür bilden tiefgreifende KI Modelle, die als digitale Motoren für die Bilderzeugung fungieren. Sie übersetzen geschriebene Konzepte in visuelle Daten und generieren auf dieser Basis völlig neue Grafiken. Um die Bilderzeugung präzise zu steuern, benötigen Anwender eine passende Benutzeroberfläche. An dieser Stelle kommt ComfyUI ins Spiel. ComfyUI ist eine flexible und leistungsstarke grafische Oberfläche, die für die Arbeit mit einer Vielzahl von KI Modellen konzipiert wurde. Im Gegensatz zu anderen Programmen, die ihre Prozesse hinter einfachen Menüs verbergen, setzt ComfyUI auf einen modularen Ansatz mit Knoten. Jeder Schritt der Bilderzeugung, von der Modellwahl bis zum fertigen Bild, wird als einzelner Baustein dargestellt. Der Anwender verbindet diese Bausteine visuell miteinander und konstruiert so den gesamten Arbeitsablauf selbst. Diese Methode bietet Transparenz und Kontrolle über den gesamten Generierungsprozess und ermöglicht es Nutzern, die Funktionsweise der zugrundeliegenden KI bis ins kleinste Detail zu steuern.

    Installation

    ComfyUI kann man hier downloaden: Link

    Die nachfolgenden Screenshots zeigen den Installationsvorgang.

    Auf diesem ComfyUI-Bildschirm kann man nach der Installation auf vordefinierte Vorlagen (Templates) zugreifen, um gängige Arbeitsabläufe schnell zu starten. Das Fenster „Get Started with a Template“ bietet hierfür fertige Konfigurationen an. Ein Beispiel dafür ist die Option „Image Generation„, was einem Text-to-Image-Workflow entspricht. Mit dieser Vorlage kann der Benutzer Bilder direkt aus einer Textbeschreibung generieren, ohne die einzelnen Prozessschritte (Knoten) manuell im Editor anordnen zu müssen.

    Für die Erstellung der Bilder werden entsprechende Modelle benötigt. Diese kann man im nächsten Schritt downloaden.

    Erstes Bild (Grundeinstellung)

    Für den ersten Versuch habe ich lediglich meinen Bildwunsch beziehungsweise den Prompt angepasst. Ziel war es, eine Darstellung eines Nazgûl aus Der Herr der Ringe zu erzeugen. In der Grundeinstellung kann man einen positiven und einen negativen Prompt eingeben. Positive Prompts beschreiben Merkmale, die im Bild enthalten sein sollen, etwa Stil, Motiv oder Komposition. Negative Prompts definieren hingegen, was im Bild vermieden werden soll, etwa bestimmte Farben, Texte, Wasserzeichen oder unerwünschte Details.

    Weitere Modelle hinzufügen

    Den zuvor installierten Modell findet man innerhalb des Modell-Ordners:

    Die Stärke von ComfyUI liegt in der flexiblen Handhabung unterschiedlicher Modelle, was eine hohe Anpassungsfähigkeit bei der Bildgenerierung ermöglicht. Auf Plattformen wie Civitai und Hugging Face stehen zahlreiche leistungsfähige Modelle zur Verfügung, die sich leicht in bestehende Workflows integrieren lassen.

    Civitai und Hugging Face bieten eine große Auswahl an spezialisierten LoRA‑ und Checkpoint‑Modellen, die von der Community gepflegt und bewertet werden. Dies erleichtert die gezielte Auswahl passender Modelle für bestimmte Stile oder Motive

    Die Anzeige von Inhalten für Erwachsene müssen unter CIVITAI erst freigeschaltet werden:

    Download von Flux Modell unter Hugging Face:

    In diesem Beispiel habe ich die beiden Modelle „CyberRealistic Pony“ und „Pony Realism“ in dem dafür vorgesehenem Ordner kopiert. Das Flux Modell von Hugging Face wird in einem späteren Schritt verwendet und muss in einem anderen Ordner verschoben werden.

    Innerhalb von „Load Checkpoint“ kann man das Modell wechseln:

    Ordnerstruktur

    Innerhalb des „Outputs“ Ordners sind die gerenderten Bilder zu finden:

    Monolithische vs. Modulare Modelle

    Ein modernes text-gesteuertes Bildgenerierungs-System, oft als einzelnes „Modell“ bezeichnet, ist in der Praxis ein Verbundsystem aus mehreren, spezialisierten neuronalen Netzen, die sequenziell zusammenarbeiten. Die Standard-Architektur, die von den meisten Systemen wie Stable Diffusion genutzt wird, besteht aus drei Kernkomponenten.

    Text-Encoder (Text Encoder / CLIP)

    Der Text-Encoder ist ein Transformer-basiertes neuronales Netz, dessen einzige Funktion die Übersetzung eines textuellen Inputs (Prompt) in einen numerischen Darstellungsraum (einen Satz von Vektoren) ist, den das U-Net verarbeiten kann.

    U-Net (Das eigentliche Diffusionsmodell)

    Das U-Net ist das Kernstück, das die eigentliche „kreative“ Arbeit leistet. Das U-Net beginnt nicht mit einer leeren, weißen Leinwand, sondern mit einem Bild, das nur aus rein zufälligen, bunten Bildpunkten besteht, wie das „Schneegestöber“ auf einem alten Fernseher. In diesem Bild gibt es absolut keine Struktur.
    Das U-Net schaut sich nun zwei Dinge gleichzeitig an: das aktuelle Bild mit den zufälligen Punkten und die Anweisung vom Text-Encoder.
    Basierend auf einem Prompt wie z.B. „Katze auf einem Stuhl“, verändert das U-Net die zufälligen Punkte immer wieder. Dieser Vorgang wird viele Male wiederholt (z.B. 40 Mal). In jedem Schritt schaut sich das U-Net das neue, leicht verbesserte Bild an und ordnet die Punkte wieder ein kleines Stück mehr an. Man kann es sich so vorstellen, als würde man ein extrem unscharfes Foto langsam, Klick für Klick, scharf stellen. Mit jedem Schritt wird das Chaos geordneter, bis am Ende eine klare, wiedererkennbare Struktur entstanden ist. Dieses Ergebnis ist aber noch kein fertiges Bild, sondern eher eine Art detaillierter Bauplan oder eine Blaupause für das finale Bild.

    Das folgende Bild entsteht nach einer Berechnung:

    Nach 4 Berechnungen:

    Nach 40 Berechnung:

    Variational Autoencoder (VAE)

    Der VAE hat eine sehr spezifische und einfache Aufgabe: Er wandelt den vom U-Net erstellten „Bauplan“ in ein normales, sichtbares Bild um.
    Man kann sich den VAE wie einen Drucker oder einen Fotoentwickler vorstellen. Er liest die detaillierten Informationen aus dem Bauplan, wo welche Farben, Kanten und Flächen sein sollen, und malt auf dieser Basis die endgültigen Pixel. Er fügt die letzten, feinen Details und Texturen hinzu, die ein Bild scharf und realistisch aussehen lassen.

    Checkpoint

    Ein Checkpoint ist eine Datei, die den vollständig erlernten Zustand eines oder mehrerer neuronaler Netze zu einem bestimmten Zeitpunkt speichert.

    cyberrealisticPony_v120.safetensors ist ein monolithischer Checkpoint. Das bedeutet, dass die trainierten Gewichte aller drei für die Bildgenerierung notwendigen neuronalen Netze (Text-Encoder, U-Net, VAE) in einer einzigen *.safetensors-Datei zusammengefasst und gespeichert sind. Der CheckpointLoader-Node in ComfyUI ist darauf ausgelegt, eine solche Datei zu laden, die drei Komponenten intern zu trennen und an drei separate Ausgänge weiterzuleiten: MODEL (für das U-Net), CLIP (für den Text-Encoder) und VAE. Der Hauptzweck dieses Formats ist die einfache Handhabung für den Endanwender.

    flux1-dev.safetensors verwendet eine modulare Architektur. Die Komponenten des Systems werden als separate, eigenständige Dateien distribuiert. Die Datei flux1-dev.safetensors enthält ausschließlich die Gewichte für das U-Net. Die Text-Encoder und der VAE müssen als separate Dateien vorliegen.

    Gründe für diesen modularen Aufbau sind:

    • Flexibilität
      Komponenten können ausgetauscht werden. Ein U-Net kann mit unterschiedlichen VAEs oder Text-Encodern kombiniert werden, um das Ergebnis zu modifizieren, ohne das Hauptmodell neu trainieren zu müssen.
    • Effiziente Entwicklung
      Entwickler können eine einzelne Komponente, wie das U-Net bei FLUX, aktualisieren und veröffentlichen, ohne die anderen, unveränderten Teile des Systems neu verpacken und distribuieren zu müssen.
    • Spezialisierung
      Es ermöglicht die Entwicklung hoch optimierter Einzelkomponenten. Das FLUX-U-Net hat eine neue Architektur, die aber mit bereits existierenden Standard-Text-Encodern und VAEs kompatibel ist.

    Die Wahl des „richtigen“ Checkpoints

    Ein entscheidender Aspekt bei der Arbeit mit KI-Bildgeneratoren ist das Verständnis, dass nicht jeder Checkpoint für jede Art von Grafik geeignet ist. Diese Modelle, oft als Dateien im .safetensors-Format gespeichert, sind auf hochspezialisierte Datensätze trainiert worden. Ihre Fähigkeiten sind direkt durch die Art der Bilder definiert, die für ihr Training verwendet wurden.

    Ein Modell wie cyberrealisticPony_v120.safetensors, das beispielsweise primär mit fotorealistischen Bildern von Frauen trainiert wurde, wird herausragende Ergebnisse bei der Darstellung menschlicher Anatomie und spezifischer Porträtstile liefern. Versucht man jedoch mit demselben Modell einen Nazgûl aus „Herr der Ringe“ zu erschaffen, wird das Ergebnis unbefriedigend ausfallen. Dem Modell fehlt die erlernte visuelle Information über die düstere Fantasy-Ästhetik, die zerrissenen Roben und die gesichtslose Erscheinung dieser Kreaturen. Die Auswahl des richtigen, thematisch passenden Checkpoints ist daher der grundlegende erste Schritt, um ein gewünschtes Bildergebnis zu erzielen.

    Flux

    In der sich schnell entwickelnden Landschaft der KI-Bildgeneratoren sorgt Flux für erhebliches Aufsehen. Im Kern unterscheidet sich Flux von etablierten Modellen wie Stable Diffusion durch seine zugrundeliegende Architektur. Anstelle eines schrittweisen Diffusionsprozesses verwendet es eine Technologie namens Flow Matching, die eine deutlich schnellere Bilderzeugung in weniger Rechenschritten ermöglicht. Die Relevanz des Modells wird zusätzlich durch das Entwicklerteam unterstrichen, das aus Schlüsselpersonen besteht, die bereits für die Entwicklung von Stable Diffusion verantwortlich waren.

    Da Flux modular aufgebaut ist, lässt sich der bisher genutzte Workflow nicht direkt übernehmen. ComfyUI stellt jedoch von Haus aus vordefinierte Templates bereit, die den Einstieg erleichtern. Um Flux nutzen zu können, müssen lediglich die fehlenden Modellkomponenten d.h. Text-Encoder, U-Net und VAE heruntergeladen und in die dafür vorgesehenen Ordner innerhalb von ComfyUI kopiert werden.

    Ich habe mich für das „Flux Dev full text to image“ Template entschieden und anschließend die fehlenden Modelle an die dafür vorgesehenen Stellen kopiert.

    Text-Encoder

    U-Net

    VAE

    Das erste Ergebnis von Flux mit der Grundeinstellung und dem vorgegebenem Prompt aus dem Flux importiertem Template:

    LoRA

    LoRA steht für „Low-Rank Adaptation“ und ist eine Methode zur speichereffizienten Feinabstimmung großer, vortrainierter KI-Modelle wie Stable Diffusion oder Flux. Ein solches Basismodell, auch Checkpoint genannt, besteht aus mehreren Gigabyte an Daten und enthält Gewichtsmatrizen, Vektoren und Bias-Werte. Diese definieren die interne Struktur und das Verhalten des Modells. Die Architektur eines Modells ist festgelegt und einzigartig. Ein LoRA muss exakt zu dieser Architektur passen, da es wie ein maßgeschneiderter Zusatz funktioniert. Es ist nicht universell verwendbar. Ein LoRA, das für Stable Diffusion v1.5 erstellt wurde, ist deshalb nicht kompatibel mit SDXL, da dieses eine andere Architektur besitzt. Die Bezeichnungen, Größen und Funktionen der Gewichtsmatrizen unterscheiden sich.

    Wenn ein Modell um einen neuen Stil oder ein neues Konzept erweitert werden soll, müsste man es normalerweise vollständig weitertrainieren. Dieser Vorgang ist aufwendig, benötigt viel Rechenleistung und erzeugt erneut eine große Datei. LoRA vermeidet diesen Aufwand mit einem anderen Ansatz. Statt die vorhandenen Gewichtsmatrizen direkt zu verändern, werden zusätzlich kleine Matrizenpaare trainiert. Diese sind deutlich kleiner und enthalten nur die Abweichung vom Ursprungsmodell. Beim Einsatz wird das LoRA zusammen mit dem ursprünglichen Modell geladen. Es greift in den Rechenprozess ein, indem es seine Werte an einer bestimmten Stelle der Berechnung hinzufügt. Das geschieht innerhalb einer Modellschicht, bevor das Ergebnis an die nächste Schicht übergeben wird. So kann das Verhalten des Modells gezielt angepasst werden, ohne dessen ursprüngliche Parameter dauerhaft zu verändern.

    Beispiel:
    Um ein Bild von Rapunzel zu erzeugen, kann das Illustrij-Modell verwendet werden, das für stilisierte Charaktere optimiert ist (Link).

    Durch Hinzufügen eines passenden LoRA-Modells, das gezielt auf Rapunzel-Bildmaterial trainiert wurde (Link), kann das Basismodell temporär erweitert werden, sodass es Rapunzel-Bilder erzeugen kann, ohne das Ursprungsmodell dauerhaft zu verändern.

    Das Bild zeigt die serielle Ausführung eines ComfyUI-Workflows mit einem Basis-Modell und einem LoRA-Modul. Zuerst wird das Hauptmodell illustrij_v13.safetensors geladen. Dieses liefert die grundlegenden Modellkomponenten (MODEL, CLIP, VAE). Danach wird das LoRA-Modell RapunzelXL_character-12.safetensors geladen, dem die MODEL- und CLIP-Ausgänge des Basis-Modells übergeben werden. Das LoRA-Modell verändert diese Komponenten zur Laufzeit entsprechend seiner eigenen Gewichtungen. So wird das Basis-Modell dynamisch um das Rapunzel-Konzept erweitert, ohne den ursprünglichen Checkpoint selbst zu verändern.Es besteht auch die Möglichkeit, mehrere LoRA-Modellte hintereinander (in Serie) zu schalten, um dem Charachter mit jedem Schritt neue „Fähigkeiten“ beizubringen.

    Das Ergebnis nach dem Einsatz von RapunzelXL Lora Modell:

    Das Ergebnis mit der gleichen Einstellung jedoch OHNE RapunzelXL Lora Modell: