ГЛАВА 02

Скелет любого workflow: 6 нод

Это тот самый базовый граф «текст → картинка» (txt2img). Любой чужой монстр на 60 нод - это вот этот скелет плюс примочки вокруг. Запомни его - и перестанешь бояться больших графов.

Промпт на входе, картинка на выходе - где они?

Если ты пришёл из ChatGPT или Midjourney, в голове простая схема: пишешь промпт → получаешь картинку. В ComfyUI ровно то же самое - просто «коробку» вскрыли и показали начинку. Смотри, куда что заходит:

✍ Твой промпт
«рыцарь на коне,
золотой час»
текст
ComfyUI · конвейер из 6 нод
загрузить модель →
закодировать текст →
почистить шум →
разжать в пиксели
пиксели
🖼 Картинка
готово

Внутри этой пунктирной «коробки» - те самые 6 нод, которые сейчас разберём. Две вещи сбивают новичка, и их важно проговорить:

◆ Аналогия для тех, кто в IT

Это как decode / encode в коде. На границе входа текст декодируется во внутреннее представление (это делает CLIP: слова → числа). Внутри всё считается уже в этом внутреннем виде (latent). На границе выхода - обратное преобразование во внешний формат, пиксели (это делает VAE). «Промпт → картинка» - это границы конвейера, а ноды загрузки модели - как import библиотек: они не часть потока «текст→картинка», а просто дают инструменты. Поэтому граф и «стартует» не с промпта.

✔ А почему иногда картинка стоит НА ВХОДЕ графа?

Если в чужом графе видишь картинку, воткнутую во вход, - это img2img (перекрасить готовую картинку), отдельный режим. Базовый скелет, который разбираем здесь, - чисто текст → картинка. Про «картинку на входе» - в главе про VAE.

Сначала - язык проводов

В ComfyUI провод нельзя воткнуть куда попало: у каждого выхода свой тип данных, и он подсвечен цветом. Вход примет только провод своего цвета. Базовых типов всего шесть - вот они:

ЦветТипЧто «едет» по проводуОткуда → куда (в скелете)
MODELсама диффузионная модель - «мозг», что чистит шумLoad Checkpoint → KSampler
CLIPtext encoder - переводчик текста в числаLoad Checkpoint → CLIP Text Encode
CONDITIONINGзакодированный промпт (что рисуем / чего избегаем)CLIP Text Encode → KSampler
LATENTкартинка в сжатом виде, где идёт вся чистка шумаEmpty Latent / KSampler → VAE Decode
VAEкодек: latent ⇄ пикселиLoad Checkpoint → VAE Decode
IMAGEготовые пикселиVAE Decode → Save Image

Это 6 базовых типов - их хватает почти для любого графа. Есть и более узкие (MASK для inpaint, CONTROL_NET, CLIP_VISION для IP-Adapter) - встретишь в главе 11. Смысл цветов простой: каждый тип покрашен по-своему, и вход примет только провод своего цвета - поэтому промахнуться почти нельзя, несовместимые разъёмы просто не соединятся.

Сам граф

А вот и весь скелет целиком. Теперь видно, почему на первый взгляд кажется вывернуто: граф начинается не с промпта, а с загрузки модели (Load Checkpoint). Но промпт всё равно заходит - он отдельным блоком слева, а жёлтая стрелка сверху ведёт его в CLIP Text Encode. Снизу в KSampler входит Empty Latent Image (размер холста), а готовая картинка выходит из Save Image справа.

промпт заходит в CLIP
✍ Твой промпт«рыцарь на коне»это не нода - твой ввод
ComfyUI · конвейер из 6 нод
Load Checkpoint
MODEL
CLIP
VAE
CLIP
CLIP Text Encode ×2
CLIP
«рыцарь на коне» (+)
«blurry, ugly» (-)
COND
COND +/-
KSampler ★
model
positive
negative
latent
LATENT
LATENT
VAE Decode
latent
vae
IMAGE
IMAGE
Save Image
images
💾 → output/
Empty Latent Image
width 1024
height 1024
batch 1
LATENT
IMAGE
🖼 Картинкатвой результат

Про счёт нод: в рамке 6 коробок - но CLIP Text Encode нарисован одной, а это две ноды (positive и negative). Плюс Empty Latent Image (снизу, стрелкой в KSampler) задаёт размер холста (например 1024×1024). Итого на реальном холсте увидишь 7 прямоугольников, но по смыслу это те же 6 блоков. «Промпт» слева и «картинка» справа - не ноды, а твой ввод и результат.

Что во что втыкается (карта соединений)

ОткудаТипКудаЗачем
Load Checkpoint · MODELMODELKSampler · modelкто чистит шум
Load Checkpoint · CLIPCLIPоба CLIP Text Encodeчем кодировать текст
Load Checkpoint · VAEVAEVAE Decode · vaeчем разжать в пиксели
CLIP Text Encode (+)CONDKSampler · positiveчто нарисовать
CLIP Text Encode (-)CONDKSampler · negativeчего избегать
Empty Latent ImageLATENTKSampler · latentпустой холст + размер
KSamplerLATENTVAE Decode · latentвычищенный результат
VAE DecodeIMAGESave Imageсохранить пиксели

Что значат эти названия

На схеме сразу куча англицизмов - Checkpoint, CLIP, KSampler, VAE. Вот расшифровка, коротко, чтобы они не пугали. Подробно каждый кубик разбираем дальше по главам - здесь только «что за слово».

НазваниеОткуда словоЧто это
Checkpoint«контрольная точка»Сохранённый снимок обученной модели (в ML модель по ходу тренировки сохраняют «чекпоинтами»). Внутри сразу MODEL + CLIP + VAE. → гл. 6
CLIPContrastive Language-Image Pre-trainingМодель OpenAI, которая научилась связывать текст и картинки. В ComfyUI так зовут text encoder - переводчик промпта в числа. → гл. 7
VAEVariational AutoencoderНейросеть-«архиватор»: жмёт пиксели в latent и разжимает обратно. → гл. 8
KSamplersampler + «K»Sampler - алгоритм, который пошагово «сэмплит» (вычищает) шум. «K» - от библиотеки k-diffusion, на которой построены сэмплеры ComfyUI. Это сердце графа. → гл. 9
Latent«латентный» (скрытый)Скрытое, сжатое представление картинки, в котором идёт вся чистка шума. → гл. 8
Conditioning«обуславливание»Закодированный промпт - то, чем мы «обуславливаем» (направляем) чистку шума. → гл. 7
✔ Как это читать глазами

Слева направо: грузим модель (она отдаёт сразу три вещи - мозг, переводчик и кодек) → кодируем два текста (что хочу / чего не хочу) → KSampler чистит шум по этим текстам → VAE разжимает latent в картинку → сохраняем. Всё. Пять глаголов.

◆ Почему граф, а не «одна кнопка»

В Midjourney/DALL·E всё это спрятано в один запрос. ComfyUI намеренно раскрывает конвейер на отдельные станции. Минус - порог входа. Плюс - ты можешь врезаться в любую точку конвейера и подменить кубик: другой sampler, ещё одна LoRA, ControlNet перед KSampler, upscale после VAE Decode. Отсюда и монструозные графы - это тот же скелет с врезками. Дальше вся книга - про эти врезки.