Большой разбор
VAE в ComfyUI: откуда берутся серый кадр и странные цвета
VAE в ComfyUI — это модель-переводчик между пикселями и латентным представлением. VAE Encode превращает изображение в latent для img2img и inpainting, а VAE Decode возвращает результат KSampler в видимую картинку. Если VAE выбран неправильно или подключён не туда, результат может стать серым, блеклым, мыльным или странным по цвету.
Быстрый вход
В двух минутах
VAE в ComfyUI — это модель-переводчик между пикселями и латентным представлением. VAE Encode превращает изображение в latent для img2img и inpainting, а VAE Decode возвращает результат KSampler в видимую картинку. Если VAE выбран неправильно или подключён не туда, результат может стать серым, блеклым, мыльным или странным по цвету.
- Когда промпт ни при чём
- Что делает VAE в ComfyUI
- Встроенный VAE и внешний VAE
Когда промпт ни при чём
После замены модели кадр может стать блеклым или странным по цвету, хотя KSampler завершил работу без ошибки. Прежде чем добавлять в промпт «яркие цвета», полезно проверить, какой VAE декодирует результат.
VAE связывает пиксели с латентным пространством модели. Основную композицию формирует генеративная модель, но VAE влияет на детали, фактуру и цвет при кодировании и декодировании. Если компоненты несовместимы, возможны как ошибка запуска, так и заметно испорченное изображение.
При этом серость сама по себе не доказывает проблему с VAE. Причиной могут быть параметры генерации, содержимое исходного латента, численная ошибка или постобработка. Ниже — способ проверить эти варианты по отдельности.
Что делает VAE в ComfyUI
В text-to-image обычный маршрут такой: Empty Latent Image создаёт нулевой латентный массив, KSampler готовит шум и выполняет сэмплирование, VAE Decode превращает результат в картинку. До VAE Decode результата как привычного изображения ещё нет. Есть внутреннее представление, удобное для модели.
В img2img и inpainting появляется обратная операция. Load Image даёт обычную картинку, VAE Encode переводит её в latent, KSampler переписывает этот latent с нужным denoise, а VAE Decode возвращает результат обратно в пиксели.
В коде ComfyUI это видно очень буквально: VAEDecode принимает samples и vae, а возвращает IMAGE; VAEEncode принимает pixels и vae, а возвращает LATENT. Размеры и значения латентного представления должны соответствовать выбранной модели и её VAE.
Совпадение типов входа и выхода в графе ещё не подтверждает совместимость весов. Две модели могут использовать тип LATENT, но ожидать разные числа каналов или разные числовые представления.
Встроенный VAE и внешний VAE
Многие checkpoint уже содержат VAE внутри. Load Checkpoint в ComfyUI часто отдаёт сразу три выхода: model, clip и vae. Для нормального workflow этого достаточно: vae из checkpoint идёт в VAE Decode, и картинка собирается без лишних узлов.
Но в старых Stable Diffusion 1.5 workflow часто использовали внешний VAE. Он мог улучшать цвета и детали у конкретных моделей. Поэтому в чужих схемах иногда встречается отдельная нода Load VAE. Она не всегда ошибка. Но она и не всегда нужна.
Опасность начинается, когда workflow скачан под одну модель, а вы подставили другую. Например, автор использовал SD 1.5 checkpoint и внешний VAE, а вы загрузили SDXL. Или workflow был собран под конкретную модель с отдельным VAE, а теперь этот VAE остался в схеме как забытая деталь. ComfyUI честно соединяет провода, но результат получается бледным или странным.
Если checkpoint содержит подходящий VAE, с него удобно начать. Если модель распространяется без VAE или компоненты загружаются раздельно, внешний Load VAE — штатная часть схемы, а не попытка улучшить цвет.
Диагностика серой картинки
Для начала можно сохранить проблемную схему и проверить цепочку:
- Подключён ли нужный выход
VAEзагрузчика к входуvaeузла VAE Decode? - VAE приходит из Load Checkpoint или из отдельного Load VAE?
- Если есть Load VAE, точно ли он подходит к этой модели?
- Не остался ли внешний VAE из чужого workflow?
- В img2img есть ли VAE Encode перед KSampler?
- Как выглядит один и тот же выход KSampler после декодирования двумя совместимыми VAE?
Для сравнения декодеров не обязательно генерировать дважды. Выход LATENT одного KSampler можно направить в два узла VAE Decode: один с рекомендованным VAE, другой — с проверяемым совместимым вариантом. Так исходный латент точно один и тот же. В img2img на время этого теста VAE Encode тоже остаётся неизменным.
Сравниваются цвет, фактура, мелкие детали и края. Если один декодер лучше на портрете, это ещё не доказывает его преимущество на всех сценах: полезны также предмет, текст и изображение с насыщенными цветами.
Где VAE стоит в workflow
В text-to-image VAE чаще всего находится ближе к концу. KSampler выдаёт samples, VAE Decode превращает их в IMAGE, Save Image сохраняет результат. Это короткая и понятная цепочка.
В img2img VAE нужен ещё и в начале: Load Image → VAE Encode → KSampler → VAE Decode → Save Image. Изображение типа IMAGE нельзя напрямую подать в обычный вход latent_image KSampler. Если вместо закодированного исходника подключён пустой латент, получится генерация без этой исходной опоры. Несовместимый VAE на входе или выходе может исказить результат.
Удобно держать в голове простую схему: Encode — вход для картинки, Decode — выход для результата. Если в workflow нет исходной картинки, Encode обычно не нужен. Если есть img2img или inpainting, Encode почти наверняка нужен. Decode нужен всегда, когда latent должен стать видимым изображением.
SD 1.5, SDXL и FLUX
С VAE нельзя обращаться как с универсальным косметическим фильтром. Модели разных семейств могут требовать разные связки.
У SD 1.5 много старых checkpoint, где внешний VAE действительно может заметно улучшить цвет. У SDXL чаще безопаснее начинать со встроенного VAE из checkpoint или с VAE, явно рекомендованного автором модели. У FLUX workflow и устройство могут отличаться, поэтому переносить старые привычки из SD 1.5 особенно опасно.
Подходящий файл и способ загрузки лучше брать из документации точной модели. Если VAE встроен, это удобная исходная точка, но сам факт упаковки в checkpoint не делает его автоматически лучше любого внешнего варианта.
Когда внешний VAE всё-таки нужен
Внешний VAE нужен, если его нет в поставке основной модели, если так устроен официальный workflow или если проверенный совместимый вариант даёт нужное качество. Причина может быть и технической: например, особенности поддерживаемой точности вычислений.
Хорошая проверка выглядит так:
| Проверка | Как делать | Что считать сигналом |
|---|---|---|
| Один латент | подать один выход KSampler в два декодера | сэмплирование не влияет на разницу |
| Совместимые варианты | рекомендованный VAE и проверяемая альтернатива | нет ошибки формата; детали и цвет подходят задаче |
| Крупный просмотр | открыть результат не только в превью | нет мыла, грязи, цветового сдвига |
| Подпись workflow | сохранить причину выбора | через месяц понятно, зачем Load VAE |
Если оба варианта дают одинаково плохой результат, причина может находиться до декодирования. Полезен отдельный тест:
- Загрузить обычное изображение через Load Image.
- Передать его через совместимые VAE Encode и VAE Decode без KSampler.
- Сравнить результат с оригиналом на полном размере.
Некоторые потери деталей нормальны: кодирование не обратимо пиксель в пиксель. Сильные искажения в этом коротком маршруте помогают сузить поиск до VAE, его загрузки и вычислений. Если маршрут работает нормально, это не доказывает совместимость с генеративной моделью — её латенты нужно проверить отдельно.
В журнале запуска стоит посмотреть ошибки загрузки весов, несовпадения размеров и сообщения о NaN — недопустимых числовых значениях. Если подозревается точность вычислений, сравнивают поддерживаемый режим большей точности по документации сборки. Увеличение расхода памяти при этом возможно.
С чем VAE часто путают
- VAE и CLIP — CLIP читает текст и создаёт conditioning. VAE переводит изображение между пикселями и latent.
- VAE и KSampler — KSampler меняет latent, VAE показывает latent как картинку или кодирует картинку обратно в latent.
- VAE и апскейлер — декодер разворачивает меньший латентный массив в пиксельную сетку предусмотренного размера. Это не то же самое, что увеличить уже готовую картинку; обычный VAE не заменяет апскейлер.
- VAE и цветокоррекция — иногда VAE меняет восприятие цвета, но это не обычная цветокоррекция.
- VAE и checkpoint — checkpoint может содержать VAE, но внешний VAE может быть отдельным файлом. Это разные источники.
Частые ошибки
Оставлять Load VAE из чужого workflow. Автору он был нужен под его модель. В вашей схеме он может ломать цвет.
Выбирать VAE только по красивому примеру. Он должен подходить к латентному представлению модели. Впечатления от одного кадра для этого недостаточно.
Менять prompt вместо диагностики. Если картинка стала серой после смены VAE или checkpoint, prompt может быть ни при чём.
Смешивать семейства моделей. SD 1.5, SDXL и FLUX не стоит лечить одним и тем же внешним VAE без проверки.
Не подписывать workflow. Через месяц невозможно вспомнить, почему в схеме стоит отдельный VAE. Подпишите в названии файла или заметке.
Частые вопросы
Почему картинка стала серой в ComfyUI? Проверьте VAE Decode. Возможно, в него приходит неподходящий VAE, внешний Load VAE остался из чужого workflow или checkpoint не тот, под который собиралась схема.
Нужен ли отдельный Load VAE? Не всегда. Если Load Checkpoint уже отдаёт нормальный VAE и цвет выглядит правильно, отдельный Load VAE лучше не добавлять.
Как понять, что VAE подходит? Сначала проверить заявленную совместимость и корректную загрузку. Затем сравнить декодирование одних и тех же латентов на нескольких сценах. Красивый цвет в одном кадре сам по себе не доказывает совместимость.
Можно ли использовать VAE от SD 1.5 с SDXL? Без явной рекомендации автора модели лучше не надо. Смешивание VAE между семействами часто даёт странный цвет или мыло.
Почему img2img не работает как ожидалось? Проверьте VAE Encode, denoise и вход KSampler. Исходная картинка должна быть корректно переведена в latent, иначе KSampler работает не с тем материалом.
Источники
- Официальная документация ComfyUI: KSampler — показывает, как KSampler принимает latent и denoise-параметр.
- Официальный код ComfyUI: VAEDecode и VAEEncode — определения нод VAE Encode/Decode в проекте.
- Stability AI: SDXL VAE — роль автоэнкодера в деталях и качестве реконструкции.
- Официальная документация ComfyUI: First Generation — базовая схема генерации и работа с моделями.
Главное
VAE связывает latent и пиксели: VAE Decode возвращает видимое изображение, а VAE Encode нужен для img2img и inpainting. При сером или блеклом результате стоит проверить совместимость и путь данных. Один выход KSampler, декодированный разными совместимыми VAE, помогает отделить влияние декодера от сэмплирования. Если проблема остаётся, проверяют кодирование, численные ошибки и остальные этапы схемы.
Подписка Neurosaver
Получать новые разборы Neurosaver
Большие материалы выходят не каждый день, зато их стоит читать спокойно. Подпишитесь, и мы пришлём новые разборы и важные обновления словаря.