Большой разбор
VAE в ComfyUI: откуда берутся серый кадр и странные цвета
После смены модели картинка стала серой или размытой? Проверим цепочку VAE Encode и Decode, сравним совместимые декодеры и отделим ошибки VAE от настроек генерации и постобработки.
С чего начнём
В этом разборе
Можно читать по порядку или выбрать нужную тему в оглавлении.
- Роль 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. Она не всегда ошибка. Но она и не всегда нужна.
Проблема может возникнуть после замены модели в чужой схеме. Например, автор использовал SD 1.5 с внешним VAE, а вы загрузили SDXL, оставив прежний декодер. Интерфейс позволит соединить узлы с подходящими типами входов, но это ещё не проверка совместимости весов. При запуске возможны ошибка размеров, шум или искажённые цвета — не только бледная картинка.
Если 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 — возвращает изображение из латента. При генерации без исходной картинки Encode обычно не нужен. В img2img или inpainting кодирование входа, как правило, есть, хотя конкретные ноды зависят от модели. Декодирование нужно, когда латент должен стать видимым изображением.
SD 1.5, SDXL и FLUX
С VAE нельзя обращаться как с универсальным косметическим фильтром. Модели разных семейств могут требовать разные связки.
У SD 1.5 много старых checkpoint, где внешний VAE действительно может заметно улучшить цвет. У SDXL чаще безопаснее начинать со встроенного VAE из checkpoint или с VAE, явно рекомендованного автором модели. У FLUX workflow и устройство могут отличаться, поэтому переносить старые привычки из SD 1.5 особенно опасно.
Подходящий файл и способ загрузки лучше брать из документации точной модели. Если VAE встроен, это удобная исходная точка, но сам факт упаковки в checkpoint не делает его автоматически лучше любого внешнего варианта. У видеомоделей бывают собственные форматы, учитывающие и пространство, и время; примеры разобраны в статьях о LTX и MiniMax H3.
Когда внешний VAE всё-таки нужен
Внешний VAE нужен, если его нет в поставке основной модели, если так устроен официальный workflow или если проверенный совместимый вариант даёт нужное качество. Причина может быть и технической: например, особенности поддерживаемой точности вычислений.
Хорошая проверка выглядит так:
| Проверка | Как делать | Что считать сигналом |
|---|---|---|
| Один латент | подать один выход KSampler в два декодера | сэмплирование не влияет на разницу |
| Совместимые варианты | рекомендованный VAE и проверяемая альтернатива | нет ошибки формата; детали и цвет подходят задаче |
| Крупный просмотр | открыть результат не только в превью | нет мыла, грязи, цветового сдвига |
| Подпись workflow | сохранить причину выбора | через месяц понятно, зачем Load VAE |
Если оба варианта дают одинаково плохой результат, причина может находиться до декодирования. Полезен отдельный тест:
- Загрузить обычное изображение через Load Image.
- Передать его через совместимые VAE Encode и VAE Decode без KSampler.
- Сравнить результат с оригиналом на полном размере.
Небольшие потери деталей нормальны: после сжатия VAE не восстанавливает оригинал пиксель в пиксель. Сильные искажения в этом коротком маршруте помогают сузить поиск до 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 без проверки совместимости.
Не сохранять причину выбора 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
Большие материалы выходят не каждый день, зато их стоит читать спокойно. Подпишитесь, и мы пришлём новые разборы и важные обновления словаря.