Базовые ноды и чтение графов: Stable Diffusion под капотом
Зачем разбираться в нодах и графах
В прошлой статье вы установили ComfyUI и собрали минимальный workflow для первой генерации. Дальше прогресс упирается не в «найти готовый граф», а в понимание, что именно течёт по проводам и почему этот набор нод вообще работает.
ComfyUI показывает пайплайн Stable Diffusion как граф вычислений. Это даёт два ключевых преимущества:
Можно читать чужие workflow и быстро понимать, что в них происходит.
Можно менять отдельные этапы (текст, размер, сэмплер, VAE, инициализацию) без ощущения «магии».Эта статья — про базовые ноды и «перевод» между тем, что происходит внутри Stable Diffusion, и тем, что вы видите в ComfyUI.
Stable Diffusion простыми словами: из чего состоит генерация
Stable Diffusion — это не одна нейросеть, а несколько частей, которые работают вместе. Классическое описание относится к латентной диффузии: модель генерирует не сразу пиксели, а латенты (сжатое представление изображения), а потом декодирует их в картинку. Оригинальная идея описана в статье про латентные диффузионные модели: High-Resolution Image Synthesis with Latent Diffusion Models.
Ниже — основные компоненты, которые вы будете постоянно видеть в графах.
Латенты
Латент — это «скрытое изображение» в сжатом виде.
Модель генерирует латенты, потому что это быстрее и экономит видеопамять.
Уже потом латенты превращаются в обычные пиксели через VAE.В ComfyUI латенты обычно имеют тип данных LATENT.
CLIP: превращает текст в условие для генерации
Текстовый prompt сам по себе не понимает ни UNet, ни VAE. Текст кодируется в числовое представление (эмбеддинги), которое затем подаётся в диффузионную модель как «подсказка».
Позитивный prompt говорит, что хотим.
Негативный prompt говорит, чего избегать.В ComfyUI результат текстового кодирования часто имеет тип CONDITIONING.
Диффузионная модель (UNet внутри checkpoint)
Внутри checkpoint обычно содержатся веса нескольких частей, но для практики важно следующее:
UNet — «сердце» генерации, которое на каждом шаге денойзинга улучшает латенты.
Она получает текущие латенты, уровень шума (шаг), и conditioning от текста.В ComfyUI объект модели обычно имеет тип MODEL.
Сэмплинг: пошаговый денойзинг
Генерация происходит итерациями:
Стартуем с шума (или с «частично шумной» заготовки).
Делаем серию шагов, каждый раз уменьшая шум и увеличивая структуру.
На выходе получаем латенты, похожие на изображение.Этим управляют параметры:
Steps — сколько шагов сделать.
Sampler — конкретный алгоритм, как считать переходы.
Scheduler — как распределять уровни шума по шагам.VAE: декодирование в пиксели
VAE нужна, чтобы:
декодировать латенты в изображение (IMAGE),
иногда кодировать изображение обратно в латенты (это понадобится позже для image-to-image).ComfyUI как «типизированный конструктор»
Важно привыкнуть к двум правилам чтения графов.
Что означает соединение нод
Соединение — это не «просто порядок». Это передача данных конкретного типа.
Если выход ноды имеет тип CLIP, его нельзя подключить туда, где ждут MODEL.
Если нода ждёт LATENT, то ей нужно подать латенты (а не изображение).Из-за этого ComfyUI ощущается как конструктор, где провода «не подходят» друг к другу, если вы собираете пайплайн неправильно.
В каком порядке выполняется граф
ComfyUI выполняет ноды по зависимостям:
Вы выбираете конечную ноду (часто это Save Image).
ComfyUI строит цепочку зависимостей назад: что нужно, чтобы получить входы этой ноды.
Выполняет только то, что реально нужно для результата.Практический вывод:
«Левее/правее» на канвасе — это удобство чтения, но не строгий порядок исполнения.
Если нода ни на что не влияет (не подключена к результату), она не будет выполнена.!Шпаргалка: какие типы данных проходят между ключевыми нодами
Базовые ноды минимального text-to-image и их смысл
Ниже — те же ноды, которые вы использовали для первой генерации, но теперь с «переводом» на то, что происходит внутри Stable Diffusion.
Checkpoint Loader
Что делает:
Загружает checkpoint (веса модели).Что обычно отдаёт на выход:
MODEL — диффузионная модель для сэмплинга.
CLIP — текстовый энкодер для prompt.
VAE — автоэнкодер для перехода латенты ↔ пиксели.Что важно понимать:
Если вы сменили checkpoint, то поменялось почти всё: стиль, «понятность» prompt, иногда даже требования к размеру.
У некоторых workflow VAE берут не из checkpoint, а отдельным файлом. На базовом уровне это необязательно, но полезно помнить, что VAE — заменяемая часть.CLIP Text Encode (Prompt) и CLIP Text Encode (Negative)
Что делает:
Берёт CLIP и строку текста.
Возвращает CONDITIONING.Как это интерпретировать:
CONDITIONING — это «числовая форма» текста, с которой работает модель.
Позитив и негатив — два разных conditioning, которые вместе управляют тем, куда «тянут» результат.Практические следствия:
Ошибка новичка — пытаться подать текст напрямую в KSampler. Нельзя: сначала текст должен быть закодирован.
Негативный prompt — не «анти-текст», а отдельное условие, которое влияет на направление денойзинга.Empty Latent Image
Что делает:
Создаёт пустой латент нужного размера (по сути, задаёт форму тензора).Зачем это нужно:
UNet должен понимать, какого размера будет генерация.
Размер напрямую влияет на VRAM и время.Правило для старта:
Для SD 1.5 типичный старт — 512×512.
Для SDXL типичный старт — 1024×1024.KSampler
Это центральная нода text-to-image.
Что получает на вход:
MODEL — чем «денойзим».
CONDITIONING positive и negative — куда «подталкиваем» результат.
LATENT — начальное состояние (обычно «пустая форма», которую KSampler заполнит шумом и денойзит).Что отдаёт:
LATENT — итоговые латенты после денойзинга.Как читать основные параметры:
Seed
- Фиксированный seed даёт воспроизводимость при прочих равных.
- Новый seed даёт другую композицию.
Steps
- Больше шагов обычно повышает качество до некоторого предела, но замедляет.
CFG
- Насколько сильно модель «слушается» positive prompt.
- Слишком высоко — часто появляются артефакты и «пережатый» вид.
Sampler / Scheduler
- Это разные стратегии прохождения денойзинга.
- На старте достаточно менять их осознанно и сравнивать результат на одном и том же seed.
VAE Decode
Что делает:
Берёт LATENT и VAE.
Возвращает IMAGE (обычное изображение).Как это интерпретировать:
До этой ноды у вас ещё нет «картинки», только латенты.
Если вы перепутали VAE или забыли подключить его, результат может быть странным: неправильные цвета, «мыло», сломанная картинка.Save Image
Что делает:
Сохраняет IMAGE на диск.Почему это отдельная нода:
В ComfyUI результат — это не «экран», а данные.
Вы сами решаете, куда их отправить: сохранить, показать превью, склеить в грид, передать дальше.Шпаргалка по типам данных в проводах
Типы могут немного отличаться по названию в разных наборах нод, но базовая логика сохраняется.
| Тип | Что это | Пример нод-источников | Пример нод-приёмников |
|---|---|---|---|
| MODEL | Диффузионная модель для денойзинга | Checkpoint Loader | KSampler |
| CLIP | Текстовый энкодер | Checkpoint Loader | CLIP Text Encode |
| VAE | Декодер/энкодер латентов | Checkpoint Loader | VAE Decode, VAE Encode |
| CONDITIONING | Закодированный prompt | CLIP Text Encode | KSampler |
| LATENT | Латентное представление | Empty Latent Image, KSampler | KSampler, VAE Decode |
| IMAGE | Обычная картинка | VAE Decode, Load Image | Save Image, Preview Image |
Как быстро читать чужие workflow
Когда открываете готовый граф, используйте один и тот же алгоритм.
Найдите, где получается финальный результат.
- Чаще всего это
Save Image.
Пройдите по проводам назад.
- Если перед
Save Image стоит
VAE Decode, значит генерировали в латентах.
Найдите, где происходит сэмплинг.
- Обычно это
KSampler или его вариант.
Проверьте, откуда берутся три ключевых вещи для сэмплинга.
-
MODEL (checkpoint).
-
CONDITIONING (позитив/негатив через CLIP encode).
-
LATENT (пустой латент или кодирование изображения).
Посмотрите, что необычного добавлено.
- Дополнительные ноды могут менять conditioning (стили, LoRA, контроль позы), латенты (маски, инпейнт), или постобработку (апскейл, шарп, цвет).
Частые «поломки» графа и как думать при отладке
Похоже, что prompt не работает
Проверьте:
Вы действительно подключили CONDITIONING в KSampler (и positive, и negative туда, куда нужно).
В CLIP Text Encode выбран правильный CLIP из нужного checkpoint.
CFG не слишком низкий (модель игнорирует текст) и не слишком высокий (пережим и артефакты).Цвета странные, картинка «не такая»
Проверьте:
VAE Decode получает VAE.
VAE соответствует checkpoint (если вы подменяли VAE вручную).Ноды вроде есть, но ничего не происходит
Проверьте:
Финальная нода (например, Save Image) действительно подключена к остальному графу.
Вы нажимаете именно добавление в очередь (Queue Prompt), а не просто меняете параметры.Итоги
Теперь у вас есть рабочая «карта местности»:
Stable Diffusion генерирует латенты, денойзит их пошагово и декодирует через VAE.
ComfyUI показывает это как типизированный граф, где провода — это данные (MODEL, CLIP, CONDITIONING, LATENT, IMAGE).
Умение читать граф начинается с конца: Save Image → VAE Decode → KSampler → источники MODEL/CONDITIONING/LATENT.В следующем логичном шаге курса обычно идут практики управления качеством и воспроизводимостью: seed, сравнение samplers/schedulers, работа с размером, batch и экономией VRAM — но уже на основе понимания, что именно вы меняете в пайплайне.