Большой разбор
VAE в ComfyUI: почему картинка стала серой и как вернуть цвет
VAE в ComfyUI — это модель-переводчик между пикселями и latent space. VAE Encode превращает изображение в latent для img2img и inpainting, а VAE Decode возвращает результат KSampler в видимую картинку. Если VAE выбран неправильно или подключён не туда, результат может стать серым, блеклым, мыльным или странным по цвету.
Ошибка, которая выглядит как плохой prompt
Серая картинка в ComfyUI действует обидно. Всё вроде на месте: модель выбрана, prompt аккуратный, KSampler отработал, файл сохранился. Но результат выглядит так, будто из него вытащили жизнь. Цвета бледные, контраст странный, лица мыльные, тени грязные. Рука уже тянется переписать prompt: «more vibrant colors, cinematic light, rich contrast».
Иногда prompt действительно слабый. Но если картинка внезапно стала серой после смены workflow, checkpoint или чужого файла из интернета, первым подозреваемым часто оказывается VAE.
VAE не отвечает за сюжет. Он не придумывает лицо и не решает, где будет лампа. Его работа проще и тоньше: переводить изображение между обычными пикселями и внутренним latent space модели. Когда переводчик подходит, результат выглядит естественно. Когда нет — смысл вроде сохранился, но язык цвета ломается.
Что делает VAE в ComfyUI
В text-to-image обычный маршрут такой: Empty Latent Image создаёт latent, KSampler снимает шум, VAE Decode превращает latent в картинку. До VAE Decode результата как привычного изображения ещё нет. Есть внутреннее представление, удобное для модели.
В img2img и inpainting появляется обратная операция. Load Image даёт обычную картинку, VAE Encode переводит её в latent, KSampler переписывает этот latent с нужным denoise, а VAE Decode возвращает результат обратно в пиксели.
В коде ComfyUI это видно очень буквально: VAEDecode принимает samples и vae, а возвращает IMAGE; VAEEncode принимает pixels и vae, а возвращает LATENT. То есть VAE — не декоративная нода и не фильтр. Это мост.
Если мост не тот, маршрут всё равно может формально пройти. Но на выходе появляются странности: цветовой сдвиг, мыло, серость, неестественная контрастность, иногда почти испорченная картинка.
Встроенный 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, не добавляйте отдельный Load VAE «на всякий случай». Отдельный VAE нужен только тогда, когда вы понимаете, какую проблему он решает.
Диагностика серой картинки
Сначала не переписывайте prompt. Проверьте цепочку.
- VAE Decode вообще подключён к правильному vae-входу?
- VAE приходит из Load Checkpoint или из отдельного Load VAE?
- Если есть Load VAE, точно ли он подходит к этой модели?
- Не остался ли внешний VAE из чужого workflow?
- В img2img есть ли VAE Encode перед KSampler?
- Один и тот же seed с разными VAE даёт драматически разный цвет?
Самый быстрый тест — два прогона на одном seed и одном prompt. Первый: VAE из Load Checkpoint идёт напрямую в VAE Decode. Второй: внешний VAE, если вы считаете его нужным. Смотрите на цвет, контраст, фактуру кожи, тени, мелкие детали. Если внешний VAE делает хуже, он не нужен. Если делает лучше, оставляйте, но подпишите workflow так, чтобы через месяц было понятно почему.
Где VAE стоит в workflow
В text-to-image VAE чаще всего находится ближе к концу. KSampler выдаёт samples, VAE Decode превращает их в IMAGE, Save Image сохраняет результат. Это короткая и понятная цепочка.
В img2img VAE нужен ещё и в начале: Load Image → VAE Encode → KSampler → VAE Decode → Save Image. Если VAE Encode пропущен или подключён странно, KSampler может получить не тот тип данных или не тот latent. Если VAE Decode получает чужой 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», это полезная подсказка. Если такой рекомендации нет, начинайте со встроенного. Лишний внешний VAE в ComfyUI часто создаёт не улучшение, а тихий источник странностей.
Когда внешний VAE всё-таки нужен
Внешний VAE нужен, если он решает конкретную видимую задачу: исправляет блеклость у модели, улучшает тон кожи, убирает характерное мыло, соответствует инструкции автора checkpoint или нужен для старого workflow, который без него явно хуже.
Хорошая проверка выглядит так:
| Проверка | Как делать | Что считать сигналом |
|---|---|---|
| Один seed | не менять seed и prompt | разница идёт от VAE, а не случайности |
| Два варианта | встроенный VAE и внешний VAE | внешний явно лучше по цвету и фактуре |
| Крупный просмотр | открыть результат не только в превью | нет мыла, грязи, цветового сдвига |
| Подпись workflow | сохранить причину выбора | через месяц понятно, зачем Load VAE |
Если внешний VAE «может быть когда-нибудь пригодится», он не нужен в базовой схеме. Чем меньше лишних узлов, тем проще чинить workflow.
С чем VAE часто путают
- VAE и CLIP — CLIP читает текст и создаёт conditioning. VAE переводит изображение между пикселями и latent.
- VAE и KSampler — KSampler меняет latent, VAE показывает latent как картинку или кодирует картинку обратно в latent.
- VAE и upscale — VAE не увеличивает разрешение. Он не заменяет апскейлер.
- VAE и color correction — иногда 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 подходит? Сравните два прогона на одном seed: встроенный 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 в проекте.
- Официальная документация ComfyUI: First Generation — базовая схема генерации и работа с моделями.
Главное
VAE в ComfyUI — это мост между latent и пикселями. В text-to-image он нужен на выходе как VAE Decode. В img2img и inpainting он нужен ещё и на входе как VAE Encode. Если картинка стала серой, блеклой или мыльной, не спешите переписывать prompt: сначала проверьте, какой VAE подключён, не остался ли лишний Load VAE из чужого workflow и подходит ли он к вашей модели.
Карта дальше — термины из словаря
Если хотите идти глубже — вот все термины, упомянутые в этом гиде. Можно открыть в новой вкладке и читать параллельно.
Подписка Neurosaver
Получать новые разборы Neurosaver
Большие материалы выходят не каждый день, зато их стоит читать спокойно. Подпишитесь, и мы пришлём новые разборы и важные обновления словаря.