Большой разбор
ComfyUI с нуля: как читать workflow и собрать первый граф
ComfyUI показывает генерацию как граф: каждая нода выполняет одну операцию, а связь передаёт данные дальше. Если научиться читать этот маршрут от модели до сохранённого файла, даже большой workflow перестаёт быть клубком проводов. Соберём базовую схему и разберём, где искать причину, когда она не запускается.
Быстрый вход
В двух минутах
ComfyUI показывает генерацию как граф: каждая нода выполняет одну операцию, а связь передаёт данные дальше. Если научиться читать этот маршрут от модели до сохранённого файла, даже большой workflow перестаёт быть клубком проводов. Соберём базовую схему и разберём, где искать причину, когда она не запускается.
- От модели до файла — один видимый маршрут
- Из чего состоит граф
- Минимальный text-to-image workflow
От модели до файла — один видимый маршрут
При первом открытии ComfyUI взгляд цепляется за прямоугольники и цветные линии. Одни ноды загружают модель, другие превращают текст в условия, третьи работают с латентным представлением, четвёртые декодируют и сохраняют изображение.
В обычном интерфейсе эти операции скрыты за одной кнопкой. Здесь они разложены на столе. Сначала это выглядит сложнее, зато на любой стадии можно увидеть, какие данные пришли, куда они отправились и какой узел должен сработать дальше.
Workflow удобно читать как технологическую карту. Есть исходные материалы, последовательность операций и результат. Если один вход остался пустым или получил данные неподходящего типа, маршрут обрывается в конкретном месте — и это уже не загадка.
Из чего состоит граф
Нода выполняет операцию; у неё могут быть входные и выходные порты, а также настройки. У узла сохранения может не быть выхода, у источника данных — входа. Загрузчик модели, например, может вернуть несколько сущностей: саму модель для сэмплера, текстовый энкодер для промпта и декодер для перевода латента в пиксели. Это не три варианта одного файла, а три разных типа данных.
Связь между портами передаёт значение. Цвет порта помогает отличать типы, но полезнее читать подписи: MODEL, CONDITIONING, LATENT, VAE, IMAGE и другие. ComfyUI не соединяет несовместимые порты просто потому, что они находятся рядом.
Граф исполняется не слева направо по координатам. Система начинает с выходных узлов, нужных для текущего запуска, и вычисляет их зависимости. Поэтому нода может стоять визуально «не на своём месте» и всё равно работать. Положение отвечает за удобство чтения, связи — за логику.
Что происходит после запуска
Когда workflow отправлен в очередь, ComfyUI проверяет обязательные входы и строит план выполнения. Узлы, чей результат не изменился и может быть переиспользован, не обязательно вычисляются заново. Эта особенность делает граф удобным для экспериментов: изменение промпта само по себе не требует заново читать неизменившийся файл модели. Фактическое повторное использование зависит от настроек кеша и доступной памяти.
Сообщение об ошибке обычно относится к первой операции, которую не удалось выполнить. Остальные ноды после неё могут подсветиться или остаться без результата, но начинать поиск причины полезнее с самого раннего сломанного узла.
Минимальный text-to-image workflow
Названия и количество нод зависят от архитектуры модели. У одних checkpoint содержит почти всё необходимое, другим нужны отдельные загрузчики текстовых энкодеров, VAE или диффузионной модели. Поэтому универсальной схемы из строго семи блоков нет.
Зато общий маршрут стабилен:
- Загрузить компоненты модели. На выходе должны появиться сущности, которые ожидают следующие узлы.
- Подготовить текстовые условия. Prompt кодируется подходящим энкодером. Поддержка negative prompt зависит от модели и workflow.
- Создать или получить латент. Для text-to-image это обычно пустой латент нужной формы; шум создаётся отдельно или внутри сэмплера. Например,
Empty Latent Imageзаполняет тензор нулями, а не случайным шумом. Для img2img латент получают из исходного изображения. - Выполнить сэмплирование. Sampler получает модель, условия, латент и параметры процесса.
- Декодировать латент. Совместимый VAE или другой декодер переводит внутреннее представление в изображение.
- Показать или сохранить результат. Выход IMAGE приходит в preview, save или следующую ветку обработки.
Для первого запуска проще открыть официальный шаблон, который соответствует выбранной модели, и проследить маршрут от Save Image назад. Такой разбор сразу показывает, какие компоненты нужны именно этому семейству и почему случайная замена загрузчика часто ломает весь граф.
Пример связей для базового Stable Diffusion
Для совместимого checkpoint обычная схема состоит из семи нод: Load Checkpoint, двух CLIP Text Encode, Empty Latent Image, KSampler, VAE Decode и Save Image.
Load Checkpoint.MODEL → KSampler.model
Load Checkpoint.CLIP → оба CLIP Text Encode.clip
CLIP Text Encode (положительный) → KSampler.positive
CLIP Text Encode (отрицательный) → KSampler.negative
Empty Latent Image → KSampler.latent_image
KSampler → VAE Decode.samples
Load Checkpoint.VAE → VAE Decode.vae
VAE Decode → Save Image.images
В этой схеме загрузчик возвращает три разных компонента. Если забыть соединение VAE с декодером, одного результата KSampler недостаточно: латент ещё не стал изображением. Для первого запуска можно оставить размеры и параметры официального шаблона, а в положительном промпте описать простую сцену, например чашку на деревянном столе.
Это пример для конкретного устройства модели, а не шаблон для любого файла: FLUX, видеомодели и другие архитектуры могут требовать иной набор компонентов.
Установка без привязки к одной сборке
У ComfyUI есть официальный Desktop‑вариант и другие способы запуска. Desktop подготавливает рабочую среду, портативная сборка поставляется со своим Python, а ручной запуск позволяет собрать окружение самостоятельно. Поддерживаемые системы и оборудование описаны в официальном репозитории ComfyUI.
Для первого знакомства удобна изолированная установка: её зависимости и Python не смешиваются с другими проектами. Если позже понадобится стабильная рабочая сборка и отдельная экспериментальная, их проще держать независимо и обновлять в разное время.
В официальном Desktop‑варианте Manager уже входит в комплект. Его не нужно устанавливать как отдельную ноду по старым инструкциям. В портативной и ручной установке встроенному Manager могут понадобиться зависимости из manager_requirements.txt и запуск с --enable-manager. Это отдельный пакет управления, а не нода генеративного графа. Порядок для своей установки можно сверить в документации Manager.
Где ComfyUI ищет модели
Модели лежат в каталогах по назначению, а дополнительные хранилища можно подключить через конфигурацию путей. Точные папки зависят от типа компонента: checkpoint, VAE, LoRA, ControlNet, текстовый энкодер и upscale-модель не взаимозаменяемы.
Если файл не появился в загрузчике, полезно проверить три вещи:
- загрузчик поддерживает формат и семейство модели;
- файл лежит в каталоге, который входит в пути поиска;
- после изменения файлов список моделей обновился или приложение было перезапущено, если это требуется сборке.
Официальная библиотека шаблонов помогает связать модель с подходящим workflow. Это надёжнее, чем брать сложный JSON, менять в нём один checkpoint и надеяться, что остальные компоненты совместимы.
Как читать sampler
Сэмплирование — участок, где латент постепенно меняется под влиянием модели и условий. В разных workflow он может быть собран одной нодой или разложен на несколько операций, но вопросы остаются похожими.
- Seed или noise seed задаёт исходную случайность. Зафиксированный seed удобен для сравнения изменений, но не обещает одинаковую картинку при другой модели, версии нод или вычислительной среде.
- Steps задаёт число шагов выбранного процесса. Больше шагов не означает автоматически больше деталей: после полезного диапазона время растёт, а изображение может почти не меняться.
- CFG или guidance управляет влиянием текстового условия там, где выбранная модель использует такой механизм. Шкалы разных архитектур нельзя переносить напрямую.
- Sampler и scheduler описывают способ пройти по уровням шума. Их сочетание оценивают вместе с конкретной моделью и задачей.
- Denoise влияет на начальный уровень шума и участок расписания, который проходит латент. В img2img это связано с силой переработки исходника. В генерации из пустого латента исходное изображение сохранять нечему.
Одни и те же числа могут быть удачными для одной модели и неподходящими для другой. Для чистого сравнения достаточно зафиксировать workflow и seed, изменить один параметр и посмотреть не только на красоту кадра, но и на то, какую именно часть результата он изменил.
Denoise и исходное изображение
В text-to-image процесс обычно начинается с полного шума. В img2img или inpainting исходная картинка сначала кодируется в латент, после чего часть её структуры может сохраниться.
Чем меньше пройденная часть процесса, тем сильнее результат обычно держится за вход. Чем она больше, тем свободнее модель перестраивает форму и детали. Это не линейная шкала «процентов сходства»: поведение зависит от модели, sampler, prompt и самого изображения.
Зачем нужен VAE
Латент нельзя показать как обычную картинку без декодирования. VAE или другой подходящий декодер выполняет этот перевод. Он должен соответствовать модели и способу, которым был создан латент.
Странные цвета, пустое превью или ошибка формы иногда действительно связаны с VAE, но не только с ним. Сначала стоит проверить типы входов и совместимость компонентов, и подобрать декодер, указанный для этой модели.
Первый практический маршрут
Спокойный первый сеанс можно построить без коллекции расширений.
- Установить ComfyUI по официальной инструкции и открыть один официальный шаблон.
- Добавить только те компоненты модели, которые указаны для этого шаблона.
- Найти выходную ноду и пройти по связям назад до загрузчика.
- Запустить пример без структурных изменений и убедиться, что изображение сохраняется.
- Зафиксировать seed, изменить только промпт и сравнить результат.
- Вернуть промпт, изменить один параметр сэмплера и снова сравнить.
- Сохранить чистый рабочий workflow как точку возврата.
После такого круга граф уже читается как процесс, а не как чужая картинка. Следующую возможность — LoRA, ControlNet, референс или второй проход — можно добавить отдельной веткой и сразу увидеть, куда она входит.
Как искать поломку
Диагностика начинается не с полной перестройки, а с короткого прохода по маршруту.
Нода отсутствует
Если импортированный workflow содержит незнакомый тип, ComfyUI не может исполнить этот участок. Встроенный Manager умеет находить зарегистрированные пакеты для missing nodes, устанавливать, обновлять, отключать и удалять их. Перед установкой полезно посмотреть, какой пакет добавляет нужную ноду и зачем она участвует в графе.
Custom node — исполняемый код со своими зависимостями. Несколько пакетов могут требовать разные версии одной библиотеки, поэтому рабочая сборка ценит умеренность. Снимок состояния помогает восстановить набор расширений, но не заменяет резервную копию весов, исходников и Python-окружения. Для экспериментов подойдёт отдельная установка со своими зависимостями.
Нода есть, но вход красный
Чаще всего это несовместимый тип, отсутствующая модель или неверная форма данных. Названия нод могут быть похожи, но выход одного loader не обязан подходить к узлу другого семейства.
Здесь помогает чтение от ошибки назад: какой вход обязателен, откуда он приходит, что выдаёт предыдущая нода. Журнал запуска добавляет техническую причину — отсутствующий файл, зависимость, нехватку памяти или ошибку внутри custom node.
Граф работает, но результат странный
Технически успешная генерация ещё не означает, что параметры подходят задаче. Удобнее вернуться к чистой версии и по очереди проверить модель, промпт, исходный латент, guidance, denoise, декодер и каждую дополнительную ветку.
Как расширять workflow
Дополнительные ветки проще воспринимать по их роли:
- LoRA меняет поведение модели через дополнительные веса.
- ControlNet и родственные способы управления добавляют условие по позе, глубине, линиям или другой структуре.
- Референс изображения передаёт визуальные признаки через подходящий энкодер или адаптер.
- Второй проход получает уже созданный латент или изображение и дорабатывает его.
- Batch и очередь помогают обрабатывать серии. Batch объединяет несколько элементов в одну группу, а очередь содержит отдельные задания; эти способы по-разному расходуют память.
Сложный workflow необязательно держать одним полотном. Группы, понятные названия и подграфы помогают свернуть проверенный участок в повторно используемый блок. Это меняет оформление, но не скрывает типы входов и выходов.
С чем часто путают
- Workflow и изображение. Граф описывает процесс, но не включает автоматически все внешние модели и custom nodes. Для переноса нужны совместимые компоненты.
- Seed и воспроизводимость. Seed фиксирует исходную случайность, а не всю среду. Другая модель, sampler или версия узла может изменить результат.
- Manager и сама генерация. Встроенный Manager управляет пакетами и моделями; он не заменяет ноды, из которых собран workflow.
- Связь и порядок на экране. Исполнение определяют зависимости, а не положение прямоугольников слева или справа.
Частые вопросы
Нужно ли собирать первый workflow вручную?
Необязательно. Официальный шаблон выбранной модели лучше показывает совместимые загрузчик, энкодер и декодер. После первого успешного запуска его можно разобрать и собрать заново как упражнение.
Почему некоторые workflow не используют negative prompt?
Способ подготовки текстовых условий зависит от архитектуры модели. Если официальный шаблон не передаёт отрицательное условие, добавление знакомой ноды из другого семейства не обязательно даст ожидаемый эффект.
Где теперь устанавливать custom nodes?
В официальном Desktop используется встроенный Manager. Он ищет зарегистрированные пакеты, показывает missing nodes и управляет обновлениями. Отдельная установка Manager как custom node относится к другим или старым вариантам сборки и не нужна для этого маршрута.
Почему после смены checkpoint граф сломался?
Файл мог принадлежать другому семейству и требовать иной загрузчик, текстовый энкодер, формат латента или декодер. Безопаснее открыть подходящий шаблон и сравнить компоненты, а не менять только имя модели.
Как сохранить рабочий вариант?
Workflow можно сохранить отдельно, а изображения часто содержат метаданные графа, если этот механизм не был отключён или удалён при обработке. Для проекта надёжнее хранить JSON, список моделей и заметку о важных версиях рядом.
Источники и связанные материалы
- Официальный репозиторий ComfyUI — варианты установки, поддерживаемые платформы и изменения проекта.
- Встроенные ноды — актуальный справочник по Comfy Core.
- ComfyUI Manager — missing nodes, пакеты, модели и snapshots.
- Custom Nodes — чем расширения отличаются от core nodes.
- KSampler — параметры процесса сэмплирования.
- VAE и Denoising Strength — декодирование и глубина изменения исходника.
- JSON Workflow — перенос и хранение графа.
Главное
ComfyUI становится понятнее, когда граф читается от результата к зависимостям. Загрузчик даёт компоненты модели, текстовый энкодер создаёт условия, сэмплер меняет латент, декодер превращает его в изображение, а выходной узел сохраняет результат. После первого успешного запуска можно менять по одной части схемы: так проще увидеть эффект и вернуться к рабочему варианту.
Подписка Neurosaver
Получать новые разборы Neurosaver
Большие материалы выходят не каждый день, зато их стоит читать спокойно. Подпишитесь, и мы пришлём новые разборы и важные обновления словаря.