KI · Setup & Infrastruktur

Einen Workflow aufbauen

Den SDXL-Minimal-Workflow von Grund auf — Node für Node, in der Reihenfolge des Datenflusses.

Öffne ComfyUI und lösche alles was auf der Arbeitsfläche ist — falls Default-Nodes vorhanden sind, alle auswählen und entfernen. Was übrig bleibt: ein leerer Canvas.

Genau hier fangen wir an.

Du baust jetzt den SDXL-Minimal-Workflow aus 2.2.2 — ComfyUI: Philosophie und Oberfläche von Grund auf — Node für Node, in der Reihenfolge des Datenflusses. Am Ende steht ein funktionierender Workflow, der dasselbe tut wie die JSON die du dort geladen hast. Nur dass du diesmal weißt, warum jeder Node dort steht wo er steht.

Nodes hinzufügen: rechte Maustaste auf die leere Arbeitsfläche → Suchfeld erscheint → Node-Namen eingeben → Enter. Der Node erscheint auf der Arbeitsfläche. Verbindungen ziehen: mit der Maus vom Ausgangs-Punkt eines Nodes zum Eingangs-Punkt des nächsten. ComfyUI lässt nur kompatible Verbindungen zu — wenn eine Verbindung nicht möglich ist, liegt es am Typ, nicht an der Position.

Schritt 1

Der Loader

Rechte Maustaste → CheckpointLoaderSimple suchen → hinzufügen.

Dieser Node steht ganz links — er ist der Ursprung aller Daten im Workflow. Im Dropdown wählst du deinen SDXL-Checkpoint: Juggernaut XL oder was du in Stability Matrix installiert hast.

Der Node hat drei Ausgänge: MODEL, CLIP, VAE. Alle drei werden gebraucht — keiner bleibt unverbunden.

Noch keine Verbindungen ziehen. Erst alle Nodes platzieren, dann verbinden.

Schritt 2

Die Textfelder

Rechte Maustaste → CLIPTextEncode → hinzufügen. Dann ein zweites Mal dasselbe.

Zwei identische Nodes, zwei verschiedene Aufgaben. Den ersten beschriftest du gedanklich als "positiv" — hier steht was im Bild sein soll. Den zweiten als "negativ" — hier steht was nicht sein soll.

Beide haben einen CLIP-Eingang und einen CONDITIONING-Ausgang. Den CLIP-Eingang beider Nodes verbindest du mit dem CLIP-Ausgang des CheckpointLoaderSimple. Eine Verbindung, zwei Abnehmer — ComfyUI erlaubt das.

Texte kannst du jetzt eingeben oder später. Für einen ersten Test reicht im positiven Feld ein einfacher Prompt, im negativen Feld blurry, low quality.

Schritt 3

Das leere Latent

Rechte Maustaste → EmptyLatentImage → hinzufügen.

Dieser Node erzeugt den Arbeitsbereich für die Diffusion — eine leere Fläche in der eingestellten Auflösung. Standard für SDXL: 1024×1024. Wer schnell testen will: 512×512 ist deutlich schneller, die Qualität leidet etwas.

Noch nicht verbinden — der Ausgang dieses Nodes geht in den KSampler, den wir noch nicht haben.

Schritt 4

Der Sampler

Rechte Maustaste → KSampler → hinzufügen.

Das ist der zentrale Node. Er hat vier Eingänge: MODEL, positive CONDITIONING, negative CONDITIONING, LATENT. Und einen Ausgang: das verarbeitete LATENT.

Jetzt verbinden:

  • MODEL-Ausgang des CheckpointLoaderSimple → MODEL-Eingang des KSampler
  • CONDITIONING-Ausgang des positiven CLIPTextEncode → positive-Eingang des KSampler
  • CONDITIONING-Ausgang des negativen CLIPTextEncode → negative-Eingang des KSampler
  • LATENT-Ausgang des EmptyLatentImage → latent_image-Eingang des KSampler

Die Parameter im KSampler:

  • seed — Zufallszahl, bestimmt den Ausgangspunkt der Diffusion. Gleicher Seed + gleicher Prompt + gleiche Parameter = reproduzierbares Ergebnis. Auf "randomize" gestellt erzeugt jeder Run einen neuen Seed — sinnvoll zum Erkunden. Auf "fixed" gestellt bleibt der Seed konstant — sinnvoll wenn man einen guten Ausgangspunkt gefunden hat und nur den Prompt oder einzelne Parameter variieren will.
  • steps — 30 bis 35 für SDXL
  • cfg — 4 bis 5 für fotorealistische Ergebnisse mit Juggernaut XL
  • sampler_namedpmpp_2m
  • schedulerkarras
  • denoise — Steuert wie viel des eingehenden Latents durch Rauschen ersetzt wird bevor die Diffusion beginnt. Bei 1.0 startet das Modell aus reinem Rauschen, der Prompt hat maximalen Einfluss. Für Generierung aus einem leeren Latent wie hier: immer 1.0. Niedrigere Werte werden relevant bei Image-to-Image — wenn ein bestehendes Bild als Ausgangspunkt dient und nur teilweise verändert werden soll.

Was ist CFG?

CFG steht für Classifier-Free Guidance — ein Wert der bestimmt, wie streng das Modell dem Prompt folgt. Niedrig: das Modell interpretiert frei, der Prompt ist eher eine Richtung. Hoch: das Modell folgt dem Prompt sehr eng, auf Kosten von Natürlichkeit und Bildqualität.

Für SDXL mit Juggernaut XL liegt der sinnvolle Bereich bei 4–7. Darunter werden Ergebnisse zu generisch, darüber fangen Farben und Kontraste an zu kippen — Übersättigung, harte Kanten, unnatürliche Texturen.

Bei Flux.1 dev gilt eine andere Regel: CFG muss auf 1 stehen — ohne Ausnahme. Flux ist ein guidance-distilled Modell: die Steuerung durch den Prompt ist bereits in die Architektur eintrainiert, ein externer CFG-Wert arbeitet dagegen an. Wer CFG bei Flux auf 7 stellt wie bei SDXL, bekommt schlechte Ergebnisse — nicht weil der Prompt falsch ist, sondern weil der Wert falsch ist. Das ist einer der häufigsten Fehler beim Wechsel von SDXL zu Flux.

Sampler und Scheduler — was steckt dahinter?

Sampler sind die mathematischen Algorithmen die bestimmen, wie das Modell vom Rauschen zum Bild iteriert. euler ist der einfachste und stabilste — er iteriert pro Step konservativ und funktioniert zuverlässig auch bei weniger Steps. dpmpp_2m nutzt Information aus dem vorherigen Step um größere Sprünge zu machen: effizienter, aber er braucht genug Steps um sich zu entfalten. euler_ancestral fügt pro Step zusätzliches Rauschen ein — mehr Variation zwischen Runs, auch bei gleichem Seed.

Scheduler bestimmen wie schnell das Rauschen über die Steps abnimmt. exponential fällt früh steil ab — das Modell macht die grobe Arbeit schnell und hat noch genug Steps übrig um Details auszuarbeiten. Das funktioniert gut bei weniger Steps. karras hält das Rauschen länger auf mittlerem Niveau und gibt erst spät nach — mehr Iterationen für feine Details, aber nur dann nützlich wenn diese Iterationen auch vorhanden sind. Bei 30 Steps aufwärts macht sich das sichtbar. simple ist die lineare Variante und der Standard für Flux.

Eine praktische Orientierung: Bei 20–25 Steps lieber euler + exponential — stabil, keine Artefakte. Bei 30–35 Steps lohnt sich dpmpp_2m + karras — effizienter im Prozess, mehr Raum für Details. Der Einfluss von Prompt und CFG ist in den meisten Fällen trotzdem größer als die Wahl des Samplers.

Schritt 5

VAE und Ausgabe

Rechte Maustaste → VAEDecode → hinzufügen.
Rechte Maustaste → SaveImage → hinzufügen.

VAEDecode braucht zwei Eingänge: das LATENT aus dem KSampler, und einen VAE. Verbinden:

  • VAE-Ausgang des CheckpointLoaderSimple → VAE-Eingang des VAEDecode
  • LATENT-Ausgang des KSampler → samples-Eingang des VAEDecode
  • IMAGE-Ausgang des VAEDecode → images-Eingang des SaveImage

Der Workflow ist jetzt vollständig verbunden.

Schritt 6

Queue

Oben rechts: Queue. ComfyUI arbeitet die Nodes in der richtigen Reihenfolge ab — nicht von links nach rechts wie du sie platziert hast, sondern dem Datenfluss folgend. Der Fortschritt ist in der Statusleiste sichtbar.

Wenn alles verbunden ist und die Modellpfade stimmen, erscheint nach den eingestellten Steps ein Bild in der Arbeitsfläche.

Was du jetzt vor dir hast

Sieben Nodes, alle verbunden, ein funktionierender SDXL-Workflow.

Das ist exakt dieselbe Struktur wie die JSON aus 2.2.2 — nur dass du sie diesmal selbst aufgebaut hast. Wenn du jetzt über Save den Workflow als JSON speicherst, entsteht eine Datei die du mit jedem teilen kannst, der ComfyUI verwendet. Sie lädt denselben Workflow, mit denselben Verbindungen, denselben Parametern.

Ein Workflow ist kein Geheimnis und kein Programm — er ist ein beschriebener Prozess. Lesbar, teilbar, veränderbar.

Was als nächstes

Dieser Workflow ist der Ausgangspunkt — nicht das Ziel. Von hier aus lässt sich alles erweitern: ein externer VAE statt des eingebetteten, eine LoRA die den Stil beeinflusst, ein ControlNet-Node der die Komposition aus einem Eingabebild übernimmt.

Aber das kommt später. Erst kommen die modellspezifischen Setups — SDXL und Flux.1 dev mit ihren jeweiligen Parametern, Eigenheiten und empfohlenen Ausgangskonfigurationen.