Открытый в конце ноября 2022 года ChatGPT вскоре перестал быть сервисом только для создания текстов. Ещё 19 октября 2023 в платные тарифы добавили DALL·E 3. 8 августа 2024 года OpenAI расщедрилась: отныне можно было создавать до двух картинок в сутки на бесплатном тарифе ChatGPT. Важно, что это был просто союз с большой языковой моделью: БЯМ переводит нестройную человеческую просьбу в детальный бриф промпта для графического бэкэнда — генеративной нейросети на диффузионных декодерах.

25 марта компания OpenAI объявила, что отныне модель GPT-4o может генерировать картинки. БЯМ способна не только создать новое изображение с нуля по текстовому описанию, но и принять на входе другую картинку с текстовым промптом и сгенерировать что-то на этой основе. Теперь картинки рисовала не чистая диффузия, а авторегрессионный трансформер в связке с мощным декодером, качество поднялось, практическая польза резко выросла.

Одна из картинок, которой OpenAI решила проиллюстрировать работу новой модели. Промпт: «Непостановочный снимок в стиле папарацци: Карл Маркс спешно идёт по парковке торгового центра Mall of America, оглядываясь через плечо с ошеломлённым выражением, пытаясь избежать съёмки. Он прижимает к себе несколько блестящих сумок бутиков, наполненных предметами роскоши. Его пальто развевается на ветру, а один из пакетов раскачивается, будто он в середине шага. Размытый фон с машинами и сияющим входом в торговый центр подчёркивают движение. Блик от вспышки частично пересвечивает кадр, придавая ему хаотичное, таблоидное настроение».
Одна из картинок, которой OpenAI решила проиллюстрировать работу новой модели. Промпт: «Непостановочный снимок в стиле папарацци: Карл Маркс спешно идёт по парковке торгового центра Mall of America, оглядываясь через плечо с ошеломлённым выражением, пытаясь избежать съёмки. Он прижимает к себе несколько блестящих сумок бутиков, наполненных предметами роскоши. Его пальто развевается на ветру, а один из пакетов раскачивается, будто он в середине шага. Размытый фон с машинами и сияющим входом в торговый центр подчёркивают движение. Блик от вспышки частично пересвечивает кадр, придавая ему хаотичное, таблоидное настроение».

Почти сразу обнаружился огромный недостаток картинок от GPT-4o — лёгкий коричневый оттенок любых результатов, которому в разной степени были подвержены все результаты. Хотя проблема решается тривиально, сегодня существует целая экосистема платного софта для устранения этого эффекта.


Если подытожить всю статью сразу: не платите никому денег, просто запустите magick "image.png" -separate -contrast-stretch 0.5%x0.5% -combine "output.png", воспользуйтесь одним из бесплатных онлайн-инструментов по типу Yellow Tint Cleaner или сделайте автобаланс белого в GIMP. Но давайте хотя бы разок проговорим, что тут происходит.

Эффекты и причины

Пользователи заметили неладное сразу же. Типичная жалоба на одном из подреддитов через три дня после релиза: «Почему так много сгененированных ChatGPT картинок имеют вид такой, будто к ним применён жёлтый фильтр?» Реддитор пишет, что видит такое у всех картинок от нового инструмента.

Спорно, проявляется ли излишняя желтизна всегда или в редких случаях её нет. Одно ясно точно: промптами проблему не решить. Как сообщают реддиторы, не помогает добавление никаких фраз: ни «без фильтра сепии», ни «естественные цвета», ни даже указание кода цвета для конкретных объектов на изображении. Бесполезно также расспрашивать ChatGPT, почему у изображения такой оттенок или просить БЯМ написать промпт, который не будет давать этого эффекта.

Вот та же фотография Маркса от папарацци c автобалансом белого.

Для сравнения: ниже представлена анимация с комбинацией исходного и нового изображений. Картинка пожата в GIF, поэтому градиенты цветов здесь выглядят чуть похуже из-за артефактов сжатия, но разница в общем оттенке очевидна.

Как видно, в данном случае различие не такое большое. Можно даже списать его на мягкий свет уличного освещения. Но из слабо выраженного эффекта не получилось бы мема.

Вскоре после того, как GPT-4o научилась рисовать, желтоватый оттенок начали использовать в качестве простого маркера картинок от ИИ. Весь Интернет заметил наплыв рисунков с характерной тёплой цветовой гаммой, часто выраженной в избытке. Как и любой арт от ИИ, который повторяется и похож, оранжево-желтые картинки начали слегка выбешивать.

Называют эффект по-разному. В энциклопедии интернет-культуры Know Your Meme собрано много примеров: «piss tint» («оттенок ссанины»), «сепия», «yellow bias» («склонность к желтизне») и так далее.

Несколько вирусных твитов про эффект. Know Your Meme
Несколько вирусных твитов про эффект. Know Your Meme

Желтизна характерна только для GPT-4o. Не удаётся найти схожего потока жалоб на подобный эффект у других систем генерации изображений. При этом объяснения со стороны OpenAI отсутствуют — будто и нет ничего, будто так и должно быть. А может, разработчики компании и сами не могут понять, что у них получились?

Сторонние исследователи тоже разводят руками. Типичный пример — это препринт статьи про бенчмарк GPT-ImgEval, где оценивается производительность GPT-4o в вопросе генерации изображений (arXiv:2504.02782). Среди прочего вскользь упоминается эта самая желтизна. Её авторы предлагают считать за цветовую предвзятость БЯМ.

Исследователи выдвигают осторожное предположение об источниках: дисбаланс цветораспределений в датасетах обучения или выученные стилистические приоритеты, характерные для крупных датасетов. Однако авторы статьи считают, что нежелательная желтизна появляется только в тех случаях, когда промпт не указывает освещение и палитру. Это довольно спорно: этот янтарный оттенок хочется убрать почти всегда.

Если давать более общий обзор, это уже не первый маркер картинок ИИ. До этого предлагалось искать оранжево-бирюзовый контраст. Дело в том, что в цветокоррекции сочетание оранжевого и бирюзового одновременно и хорошо подчёркивает кожу, и не забывает про тени с фонами. Эти цвета комплементарны, поэтому картинка выглядит контрастнее и киношнее, персонажи от окружения отделяются лучше, достигается высокая визуальная выразительность.

Промпт в неизвестную версию Ideogram (по дате публикации возможно, что либо 0.1, либо 1.0). Fitto DataLab
Промпт в неизвестную версию Ideogram (по дате публикации возможно, что либо 0.1, либо 1.0). Fitto DataLab

Но не каждый на свете рисунок должен выглядеть как постер для блокбастера! Обычно за зеленцу в тенях и морковную кожу ругают Midjourney и Ideogram. При этом в случае Midjourney, чем промпт абстрактней и немногословней, тем эффект будет выражен сильнее.

«Пианист играет на пианино» и «девочка играет в баскетбол» в исполнении Midjourney (скорее всего V6, менее вероятно, что V5.2). Fitto DataLab
«Пианист играет на пианино» и «девочка играет в баскетбол» в исполнении Midjourney (скорее всего V6, менее вероятно, что V5.2). Fitto DataLab

Сайты, которые убирают желтизну

Как бы то ни было, но вокруг проблемы сформировалась целая экосистема небольших сервисов-помогаторов. Некоторые из них даже просят за работу деньги.

Картинка от GPT-4o выглядит так, будто на неё смотришь через янтарь. Нейтрали желтеют, средние тона становятся теплее, чем должны. В свете недостаёт синего, поэтому белое — не белое, а кремово-бежевая бумага. Чистое небо превращается в циан, в тенях появляется болотность, холодные оттенки глохнут. Всё изображение имеет винтажный вид, будто это старая выцветшая фотография. Совсем плохо становится при последующем редактировании в ChatGPT: тёплый сдвиг усиливается и становится заметнее с каждым проходом.

Но какая разница? Почему бы не оставить, как есть? На самом деле желтизна опасна в первую очередь из-за раздражения обычных людей — никому не хочется разглядывать однообразный ИИ-арт.

Основная задача сервисов по фиксу картинки — вернуть нейтральную опорную точку и восстановить нормальный тональный диапазон без паразитной теплоты. Важно также не тупо задирать синий, а соблюсти разумный баланс. Иначе белый начнёт голубить, кожа — сереть, а тени будут отдавать маджентой.

Типичный пример таких сайтов — UnYellowGPT. Вообще-то сервис платный: на странице тарифов указано, что за $4  можно купить обработку 100 картинок, за $12 — сразу 800. Новопредставившемуся (регистрация только через аккаунт Google) дают обработать пять картинок бесплатно. Также с платными тарифами результаты обработки и оригиналы хранятся 30 суток, у пользователей, которые не платят, этот срок составляет всего 2 недели.

Образец работы UnYellowGPT

UnYellowGPT — интересный инструмент. На странице описания он рекомендует себя как «standalone web tool». Это взаимоисключающие понятия: «standalone» подразумевает, что софт запускается локально, без доступа в Интернет, а «web tool» намекает на обратное.

Другие подобные сайты не просят денег. Сервисы по типу GPT-Tone, UnYellow.app и Fix Yellow Tint в худшем случае содержат ссылку на пожертвования их авторам.

Часто их даже не выносят в отдельный сайт, такой инструмент может быть захощен полностью внутри Hugging Face. Кстати, как признал сам автор UnYellowGPT, он попросту портировал (не без помощи ИИ) упомянутый проект под свои нужды и попробовал подключить биллинг.

Иногда это утилита на Python. Фичу могут встроить в платные генераторы картинок или палитр нейросетями , но функция правки желтизны GPT-4o будет бесплатная. В случае инструмента ИИ-редактора Freepik это лишь одна из многих опций.

Правим самостоятельно

На самом деле быстро пофиксить можно хоть в одну команду в ImageMagick. Для этого он должен быть установлен в системе.

Пользователи Linux и каких-нибудь вариантов BSD могут установить его из пакетного менеджера своего дистрибутива. Будем считать, что мы на Windows, и вместо скачивания с официального сайта мы поставим его через Chocolatey.

Проследуйте инструкциям с chocolatey.org/install#install-step1 и запустите в PowerShell с правами администратора следующее:

Set-ExecutionPolicy AllSigned
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

После установки Chocolatey будем ставить собственно ImageMagick:

choco install -y imagemagick

Опционально: переменные окружения изменились, не помешало бы их обновить.

refreshenv

Теперь в системе должен работать ImageMagick. Можно проверить его версию:

magick -version

Позднее желательно время от времени запускать choco upgrade -y all.

Наивный подход — просто убрать немного из красного и зелёного каналов, а синий усилить. Руки так и чешутся написать что-то такое:

magick "image.png" -colorspace sRGB -channel R,G -evaluate Multiply 0.97 -channel B -evaluate Multiply 1.05 "output.png"

Лучше не подкручивать каналы на глаз, а нормализовать каждый канал автоматически, чтобы вернуть нейтральную опорную точку без перекоса в синеву.

magick "image.png" -separate -contrast-stretch 0.5%x0.5% -combine "output.png"

Здесь исходная картинка разложена на три однослойные маски красного, зелёного и синего. В каждом из каналов отрезаются 0,5 % самых тёмных и самых светлых пикселей, а оставшийся диапазон растягивается на все возможные значения между 0 и 255. Затем три канала собираются обратно. По сути, так реализуется простенький автобаланс белого.

Вот пример того, что может получиться. Это всё та же картинка с Марксом, которую для усиления желтизны ChatGPT перерисовал в стиле студии «Гибли» — очень пошлый и надоедливый промпт.

Так выглядит результат обработки командой выше.

Но запоминать никакие команды не хочется. Почему бы не написать один раз небольшой батничек, чтобы потом вызывать его? Следующий скрипт нужно сохранить в текстовый файл с расширением .bat с кодировкой UTF-8 без BOM, а затем перетаскивать файлы или целые папки в него. Предполагается, что в системе установлен ImageMagick. Команда для ImageMagick здесь чуть посложнее, с преобразованием в sRGB и удалением ненужных метаданных.

@echo off

REM Надо для циклов и условий.
setlocal EnableExtensions

REM Должно исправить кодировки.
chcp 65001 >nul

REM Сколько в процентах усекаем от цветового канала. Чем больше, тем агрессивнее коррекция.
set "PCT=0.5"

REM Расширения изображений, которые будем обрабатывать. Обычно ChatGPT отдаёт PNG, но мало ли.
set "EXTS=.png .jpg .jpeg"

REM Ошибка: нет файла.
if "%~1"=="" (
  echo Ошибка: нет файлов.
  echo Перетащите на этот файл .bat одно или несколько изображений, либо папку.
  echo Исправленные файлы будут сохранены рядом с исходниками с суффиксом _unyellow.
  pause
  exit /b
)

REM Где ImageMagick?
where magick >nul 2>nul || (
  echo Ошибка: ImageMagick не найден
  echo https://imagemagick.org/script/download.php#windows
  pause
  exit /b
)

REM Обработка элементов
for %%A in (%*) do (
  if exist "%%~fA\" (
    call :processDir "%%~fA"
  ) else (
    call :processFile "%%~fA"
  )
)
goto :eof

REM Обработка папки
:processDir
set "root=%~1"
echo [Папка] %root%
for /R "%root%" %%F in (*.*) do call :processFile "%%~fF"


REM Обработка файла
:processFile
set "in=%~1"
if not exist "%in%" goto :eof

REM Проверим расширение на вхождение в список допустимых
set "ext=%~x1"
set "isimg="
for %%E in (%EXTS%) do (
  if /I "%%E"=="%ext%" set "isimg=1"
)
if not defined isimg (
  echo [Пропуск] Не изображение: %in%
  goto :eof
)

REM Построим путь вывода: тот же каталог, суффикс _unyellow перед расширением.
set "dir=%~dp1"
set "name=%~n1"
set "out=%dir%%name%_unyellow%ext%"

REM Если имя уже содержит _unyellow, пропустим.
if /I not "%name:_unyellow=%"=="%name%" (
  echo [Пропуск] Уже обработано: %in%
  goto :eof
)

REM Если файл результата уже существует, пропустим.
if exist "%out%" (
  echo [Пропуск] Есть файл: %out%
  goto :eof
)

REM Вызов ImageMagick
echo [Обработка] Корректирую: %in%
magick "%in%" -auto-orient -colorspace sRGB -channel R,G,B -contrast-stretch %PCT%%%x%PCT%%% +channel -strip "%out%"
REM Более простой вариант. Раскомментировать, если нужно.
REM magick "%in%" -separate -contrast-stretch %PCT%%%x%PCT%%% -combine "%out%"
goto :eof

Понятно, что файлы с символом процента («%») в имени этим пакетным файлом будут обрабатываться некорректно.

Наконец, баланс белого есть в любом графическом редакторе сложнее Microsoft Paint. Речь идёт не про дорогие продукты, а свободные и бесплатные. В Paint.net это Adjustment → Auto-Level (Ctrl + Shift + L), в GIMP — Colors → Auto → White Balance, в Krita — Filters → Adjust → Levels и так далее.

Результат преобразования в Paint.net
Результат преобразования в Paint.net

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

Слева направо: оригинал, корректировка через команду для ImageMagick, GPT-4o Yellow Tint Cleaner на HuggingFace, платный UnYellowGPT, автобаланс белого в Paint.net. Комикс по промптам post-death_wave_core
Слева направо: оригинал, корректировка через команду для ImageMagick, GPT-4o Yellow Tint Cleaner на HuggingFace, платный UnYellowGPT, автобаланс белого в Paint.net. Комикс по промптам post-death_wave_core

Комментарии (0)