Что ж, продолжим погружаться в теорию нейросетевой обработки фотографий. В первой части мы разобрали общий принцип работы диффузионных нейросетей и начали объяснять, почему для обработки фото этот принцип часто больше вредит, чем помогает. В этой статье мы продолжим разбор.
Вы правили небо. Пересобрался весь кадр
Возвращаюсь к бордюру из первого абзаца.
Когда вы делаете инпейнтинг в диффузионной модели, происходит следующее. Весь кадр целиком уезжает в кодировщик и превращается в конспект. В конспекте зашумляется область под маской. Модель пересобирает эту область. Потом весь конспект целиком уходит в декодер и разворачивается в картинку.
Весь. Целиком. Включая небо, которое вы не трогали.
То есть каждый пиксель вашей фотографии после инпейнтинга — это не ваш пиксель, а пиксель, который декодер нарисовал по конспекту. Похожий, очень похожий, но заново нарисованный.
Тут мы сделаем шаг в сторону и объясним, почему это очень важно. Есть такая наука: криминалистика изображений. Для неё заново нарисованные кадры — настоящая головная боль.
Дело в том, что у любой матрицы фотоаппарата есть индивидуальный дефект: каждый фотодиод чуть-чуть отличается по чувствительности от соседей. Отклонения микроскопические, возникают на этапе производства, и они постоянны. Это называется PRNU, неоднородность фотоотклика: своеобразный отпечаток пальца конкретного экземпляра матрицы, который остаётся на каждом снятом кадре.
Криминалистика этим пользуется давно и двумя способами. Во-первых, доказать, что снимок сделан именно этим аппаратом. Во-вторых, и это интереснее, найти монтаж. Если в кадр вклеили кусок из другого снимка, в этом куске нет вашего PRNU — это первый повод задуматься о монтаже. Конечно, множественные пережатия JPEG PRNU тоже пригашивают, и способ не абсолютный. Но часто рабочий.
До недавнего времени это работало прекрасно: вы меняете пиксели только внутри выделения, всё остальное остаётся нетронутым, контраст между «родными» и «чужими» областями виден статистически.
С диффузионным инпейнтингом в котором кадр пересобирается целиком это не работает от слова вообще. PRNU затирается везде: и там, где вы редактировали, и там, где не редактировали. Разницы между областями нет, потому что оригинальных областей не осталось ни одной. В работах последних лет это называют «полностью регенеративным» редактированием, и авторы прямо пишут, что старые криминалистические методы против него бессильны, потому что диффузия уничтожает сам сигнал, на который эти методы опирались.
Сформулирую иначе, потому что мысль важная. Шум вашего сенсора — это, пожалуй, единственная часть фотографии, которая неоспоримо ваша. Композицию можно повторить, свет можно повторить, обработку можно скопировать. А микроскопический разброс чувствительности вашей конкретной матрицы повторить нельзя. И любой прогон через диффузионку его стирает, даже если вы правили угол кадра.
Отсюда важная рекомендация. После генеративной правки не сохраняйте результат целиком. Кладите его слоем поверх оригинала и открывайте маской только ту область, которую реально хотели поменять, всё остальное пусть останется вашими пикселями.
Хорошие инструменты, кстати, так и делают под капотом. Не каждый инпэйнтинг убьёт PRNU целиком. Беда в том, что плохие так делать даже не думают.
Проверяется за минуту: сделайте инпейнтинг маленького пятнышка в углу, потом вычтите результат из оригинала в режиме «разница» и выкрутите уровни. Если кадр не идеально чёрный за пределами маски, вы знаете, что происходит.
Итак, редактор мы получили. Работает, местами прекрасно.
Дальше начинается то, чего мы, вообще говоря, не заказывали. Но, увы и ах, эти свойства модель всё равно принесла с собой из обучения. И на фотографии они вылезают самым неожиданным образом.
Тут будет три сюжета, и объединяет их вот что: каждая странность модели — это след конкретного технического решения. Не «нейросеть так видит», не «у неё такой характер». Кто-то когда-то написал строчку кода, и вы теперь смотрите на её последствия у себя в кадре.
Сюжеты у нас такие: расписание шума, аугментация данных, фильтрация датасета.
Почему не получается чёрный
В 2023 году вышла работа команды из ByteDance с прекрасно прямолинейным названием «Стандартные расписания шума и шаги семплирования в диффузии сделаны неправильно». Авторы — Линь, Лю, Ли и Ян (нет, это не звенит колокольчик, это серьёзные именитые исследователи).
Суть претензии такая. Прямой процесс должен заканчиваться чистым шумом. Совсем чистым, без остатков исходной картинки. Потому что при генерации мы стартуем именно с чистого шума, и если при обучении на последнем шаге оставался кусочек сигнала, то модель обучалась не тому, что ей потом дают на входе.
Авторы посчитали, что происходит у Stable Diffusion на самом последнем, тысячном шаге зашумления. По идее там должен остаться чистый снег. А получается вот что: 0,068265 от исходного изображения плюс 0,997667 шума.
Вчитайтесь. Картинка на этом шаге уничтожена не до конца — небольшой её след живёт.
Увидеть его нельзя, снег остаётся снегом: по мощности сигнала это меньше половины процента. Но важно не сколько его, а что именно выживает. Выживает самая низкочастотная составляющая — средняя яркость каждого канала. Общий тон кадра.
И модель, обучаясь, привыкла: на последнем шаге мне всегда подсказывают средний тон. А при генерации мы даём ей гауссов шум, у которого среднее ровно ноль. Модель добросовестно интерпретирует ноль как подсказку и рисует кадр со средней яркостью.

Результат, который авторы демонстрируют картинками: Stable Diffusion не умела делать по-настоящему тёмные и по-настоящему светлые кадры, всё сползало к серединке.
Если вы когда-нибудь пытались доработать инпейнтингом ночной кадр и получали в области маски необъяснимо подсвеченное серое пятно, которое приходилось потом душить кривыми, — это не вы криво промптили. Это математика расписания шума.
Лечится это описанным в той же статье способом: пересчитать расписание так, чтобы на последнем шаге сигнала не оставалось совсем, переобучить с другой параметризацией, стартовать семплер именно с последнего шага и заодно осадить guidance — ту самую четвёртую рекомендацию, про которую я рассказывал выше. Современные модели этот урок в основном выучили. Но огромное количество живых пайплайнов до сих пор работает на старых чекпойнтах, и там всё по-прежнему.
Кот без головы
Раз уж пошли неочевидные вещи, вот ещё одна: композиция.
При обучении картинки надо приводить к одному размеру, иначе их не сложить в батч. Стандартная процедура: масштабируем изображение так, чтобы короткая сторона совпала с целевой, а длинную обрезаем случайным образом. Обычная аугментация (создание новых искусственных примеров для обучения нейросетей на основе имеющихся), всё так делают, ничего криминального.
Только у Stable Diffusion 1.5 и 2.1 вылезал характерный дефект: модель регулярно генерировала обрезанные объекты. Кот без макушки. Человек без части головы. Причём не по краю кадра случайно, а систематически.

Разработчики SDXL в своей статье эту проблему разбирают и объясняют: случайная обрезка при обучении протекла в генерацию. Модель насмотрелась на миллионы кадрированных фотографий и усвоила, что обрезать голову нормально, так тоже бывает.
Решение нашли. Во время обучения координаты обрезки — сколько пикселей отрезано сверху и слева — стали подавать модели как отдельный параметр, через частотные эмбеддинги, там же, где размерное кондиционирование. Теперь модель знает: этот кадр был обрезан на столько-то, и то, что у объекта нет макушки, — следствие обрезки, а не свойство мира. А при генерации координаты обрезки ставят в ноль, и модель выдаёт необрезанные объекты.
Появился побочный эффект: параметр можно крутить. Поставьте ненулевые координаты, и модель начнёт имитировать кадрирование, как будто снимок обрезали.
К чему я это рассказываю. Композиционные привычки модели — это не эстетика и не «вкус нейросети», это следы конкретных инженерных решений в конвейере подготовки данных. Модель тянет объект в центр не потому, что её этому учили, а потому, что крупные веб-датасеты в среднем объектоцентричны, и разработчики SDXL это прямо оговаривают.
Когда вы дорисовываете расширение кадра (тот самый outpainting) и модель упорно ставит новый объект по центру добавленной области, вместо того чтобы продолжить асимметричную композицию, вы поймали именно этот баг. Большая часть стоковых фотографий выпячивает главный объект по центру.
Чей вкус зашит в вашу нейросеть
Раз уж заговорили про вкус — а чей он вообще?
Оригинальную Stable Diffusion учили на LAION, огромном открытом датасете из миллиардов пар «картинка плюс подпись», собранных краулером по интернету. Только обучать модель на всём, что удалось наскрести из Сети, — идея так себе. В интернете огромное количество мусора: скриншоты, объявления, кривые картинки, фотографии товара на белом фоне. Поэтому данные начали фильтровать в том числе по «эстетичности».
И вот тут история становится интереснее.
Первая версия LAION Aesthetics Predictor была максимально простой. Взяли пять тысяч картинок из набора Simulacra Aesthetic Captions с оценками людей от одного до десяти, получили для них CLIP-эмбеддинги и поверх этих эмбеддингов обучили обычную линейную модель. Картинку на вход ей даже показывать было не надо: достаточно было числового «впечатления» CLIP от картинки.

Но здесь есть важная деталь. Этой первой версией миллиарды картинок для Stable Diffusion не фильтровали. На ней сделали экспериментальные выборки в восемь и сто двадцать миллионов изображений, после чего авторы решили, что идея работает, и собрали вторую версию.
А вот у LAION Aesthetics Predictor V2 данных стало заметно больше. Около 176 тысяч оценённых изображений из Simulacra Aesthetic Captions, 15 тысяч логотипов и ещё примерно 250 тысяч фотографий из Aesthetic Visual Analysis — старого датасета, основанного на оценках пользователей фотосайта DPChallenge. Авторы попробовали несколько многослойных сеток, но в итоге, что особенно прекрасно, опять выбрали простую линейную модель поверх CLIP. По их собственным словам, она давала наиболее приятный на глаз результат, хотя некоторые более сложные модели показывали меньшую математическую ошибку.
И вот уже этой второй версией прогнали 2,37 миллиарда изображений LAION с английскими подписями.
Получилось несколько вложенных выборок. Оценка 4,5 и выше — примерно 1,2 миллиарда пар. Пять и выше — 600 миллионов. Шесть с половиной и выше — всего 625 тысяч. Именно выборка LAION-Aesthetics V2 5+ использовалась при обучении поздних версий Stable Diffusion 1.x. То есть между «всем интернетом» и моделью действительно сидел автоматический художественный критик. Причём критик довольно простой.
А теперь самое интересное: чей вкус этот критик оцифровал?
В 2026 году вышел отдельный аудит LAION Aesthetics Predictor. Исследователи прогнали его примерно по 330 тысячам изображений из двух художественных датасетов и посмотрели, чему модель ставит самые высокие оценки. В верхней части рейтинга особенно хорошо себя чувствовали реалистичные пейзажи, городские виды и портреты, прежде всего западных и японских авторов. А когда исследователи стали раскручивать происхождение обучающих оценок назад, выяснилось, что значительная их часть пришла от англоязычных фотографов и западных энтузиастов генеративного ИИ.
Вот вам довольно буквальный ответ на вопрос «чей вкус».
Но. Нельзя сказать: вот эта линейная модель виновата в том, что Stable Diffusion любит сочные цвета, задранный микроконтраст и картинку, похожую на хорошо обработанный сток. Между фильтром датасета и готовым изображением стоят ещё архитектура модели, остальные данные, подписи, loss, CFG и куча последующего дообучения.
Однако фильтр определённо участвовал в формировании того, какие изображения модель видела чаще и какие считались достаточно хорошими, чтобы на них учиться дальше. А это для нас важнее, чем кажется.
Когда вы просите генеративную модель дорисовать кусок спокойного пейзажа, она не начинает с чистого листа. Вместе с умением рисовать деревья, кожу и облака она приносит статистическое представление о том, как вообще должна выглядеть «хорошая картинка». И это представление необязательно совпадает с вашим.
Промптом такую разницу лечить неудобно. Кривыми и локальной коррекцией — гораздо проще.
Старый добрый Photoshop не умер и помирать пока не собирается. Более того, его ИИ-инструменты пока очень и очень ограничены, потому всем приходится ставить плагины. И это не случайно.
Тут надо сказать, что у фотографов есть свой рабочий процесс, выстроенный за двадцать лет: сырые данные с матрицы, широкое цветовое пространство, шестнадцать бит, сорок мегапикселей, честное зерно. У диффузионки — свой, выстроенный под картинки из интернета. В месте стыковки этих двух миров и возникает большой разрыв, который пока очень и очень тяжело преодолеть.
Где ломается цветовой конвейер
Важнейшее ограничение, о котором в разговорах про нейроретушь вспоминают редко. Хотя фотографы об него спотыкаются постоянно.
У нас и у нейросети совершенно разное представление о том, что такое изображение.
Начнём со стороны фотографа. Матрица камеры отдаёт RAW: набор замеров с фоточувствительных элементов, обычно с глубиной 12 или 14 бит, у некоторых камер и режимов больше. Это ещё не привычная RGB-картинка. Цвет появляется после демозаики, применения баланса белого, профиля камеры и прочей математики RAW-конвертера.
После этого нормальный фотографический конвейер старается информацию не выбрасывать как можно дольше. Из Lightroom, например, наружу в Photoshop имеет смысл передавать 16-битный TIFF или PSD в ProPhoto RGB — Adobe сама рекомендует именно такой вариант для максимального сохранения цветовых данных.
И тут в середине этого хозяйства появляется диффузионка.
В типичном пайплайне Stable Diffusion входная картинка превращается в массив чисел с плавающей точкой. Например, стандартный VAE Image Processor в библиотеке Diffusers нормализует значения изображения в диапазон от −1 до 1 и передаёт дальше уже tensor. Никаких обязательных 256 ступеней яркости внутри модели нет.
И вот тут у нас появляется проблема.
Для нейросети ваш профиль, шестнадцатибитный почти исходник, запас по цветам за пределами sRGB и идея scene-referred изображения вообще не являются теми сущностями, которыми они являются для Photoshop или Lightroom. На вход модели в конце концов приходит набор RGB-чисел. А сама модель училась в основном не на RAW и не на линейных данных с матрицы, а на уже проявленных картинках из интернета.
То есть привычный фотографический конвейер знает, что означают числа. Нейросеть в первую очередь знает, как картинки с такими числами обычно выглядят.
Разница колоссальная.
Допустим, вы открыли 16-битный ProPhoto RGB снимок и передали кусок фотографии какому-нибудь внешнему нейроредактору. Что произойдёт дальше, зависит уже не столько от самой диффузионной модели, сколько от конкретной программы вокруг неё.
Хороший инструмент может аккуратно преобразовать цвет, сохранить достаточную числовую точность, отдать модели только нужный участок и потом корректно вернуть его назад.
Плохой — сделать промежуточный восьмибитный RGB-файл, потерять профиль или молча сконвертировать всё в sRGB.
Восемь бит на канал — 256 уровней. Для готовой фотографии, которую вы положили на сайт и больше никогда не тронете, этого обычно достаточно. Для промежуточного файла, после которого вы собираетесь вытаскивать небо кривыми на две ступени, — уже совсем другая история. Ошибки округления растягиваются вместе с градиентом и превращаются в полосы.
С цветовым охватом то же самое. Если промежуточный этап действительно перевёл ваши насыщенные цвета из ProPhoto RGB или Display P3 в sRGB с отсечением того, что туда не помещается, возвращение результата обратно в широкую цветовую палитру ничего не восстановит. Увеличить коробку после того, как содержимое выбросили, можно. Содержимое от этого не появится.
Поэтому я бы сформулировал проблему так: граница между нормальным фотографическим редактором и нейросетевым инструментом очень легко становится самым узким местом всего конвейера обработки.
И это, кстати, довольно легко проверить.
Сделайте шестнадцатибитный файл с плавным градиентом и насыщенными цветами за пределами sRGB. Прогоните через ваш любимый нейроинструмент минимальную правку. Потом посмотрите профиль выходного файла, битность и разницу с исходником.
Иногда узнаете о программе много нового.
Отсюда вывод. Исходный RAW и основной шестнадцатибитный снимок я нейросети не доверяю вообще. Для генерации отдаю рабочую копию или локальный фрагмент, результат возвращаю отдельным слоем, а уже после этого провожу финальную цветокоррекцию всего кадра целиком.
Просто потому, что я не хочу, чтобы неизвестный мне кусок программного конвейера принимал за меня решение, какие цвета в моей фотографии считать лишними.
Сорок пять мегапикселей против одного
Ещё одна вещь, которую фотографы регулярно недооценивают, — разрыв в масштабах.
Stable Diffusion 1.5 обучалась на квадратах 512 на 512. SDXL — на тысяче двадцати четырёх. Современные модели умеют больше, но всё равно речь идёт о единицах мегапикселей. А у вас в руках файл с 45-мегапиксельной камеры, восемь тысяч двести на пять с половиной тысяч. Разница в площади примерно в сорок раз.
Дальше происходит одно из двух, в зависимости от того, как написан инструмент.
Самый тупой вариант — уменьшить весь кадр до рабочего размера модели, сделать генерацию и потом растянуть обратно. Представьте 45-мегапиксельную фотографию, ужатую примерно до мегапикселя. Небольшая веточка, фактура ткани, ресницы, дальние лица — всё это сначала превращается в несколько десятков пикселей, а потом нейросеть должна каким-то образом вернуть подробности обратно.
Вернёт. Только уже свои.
Для локальной ретуши гораздо разумнее вырезать вокруг маски фрагмент исходника, увеличить его до удобного модели размера, выполнить инпейнтинг и затем вклеить результат обратно в полноразмерный кадр. В старых интерфейсах Stable Diffusion этот режим обычно назывался что-нибудь вроде inpaint at full resolution.
Но и тут нет хорошего решения.
Чем меньше вы сделали окно вокруг маски, тем больше пикселей досталось собственно объекту — и тем меньше модель видит вокруг. Хотели качественно дорисовать ручку двери, дали ей крупный вырез — получили прекрасную ручку, которая почему-то не прикручена к двери.
Расширяете область — возвращаете контекст, но снова уменьшаете объект относительно рабочего разрешения модели.
Приходится искать компромисс: либо детали, либо композиция.
Есть ещё тайлинг: большую картинку режут на перекрывающиеся плитки, обрабатывают отдельно, а потом сшивают. Для апскейла это часто работает прекрасно. Для генеративной правки сложной сцены — уже хуже: каждая плитка видит только кусок мира, поэтому цвет, фактура и даже содержимое соседних областей могут понемногу расходиться.
И отдельная боль — лица на общем плане.
Возьмём 45-мегапиксельный кадр шириной примерно 8200 пикселей. Голова человека занимает в нём 300 пикселей. Если весь снимок уменьшить до 1024 пикселей по длинной стороне, от головы останется около 37 пикселей.
А теперь вспомните наш латент, который в классической Stable Diffusion уменьшен ещё в восемь раз по каждой стороне.
Получаем меньше пяти латентных клеточек поперёк головы.
Глаза, рот, нос, выражение лица — всё хозяйство надо каким-то образом разместить в этих клеточках. После этого вопрос «почему люди на заднем плане похожи на родственников Ктулху» становится несколько менее загадочным.
Поэтому мелкие лица часто обрабатывают вторым проходом. Сначала генерируется весь кадр, потом детектор отдельно находит лица, руки или людей, строит для них маски и запускает локальный инпейнтинг ещё раз. Именно так устроен, например, популярный ADetailer: обнаружил объект, сделал маску, отдельно прогнал по ней инпэйнтинг.
И по-другому никак. Если объект занимает слишком мало пикселей для модели, надо не надеяться, что та внезапно станет зорче, а просто показать ей объект крупнее.
И здесь, кстати, хорошо видно фундаментальную разницу между фотографом и генеративной моделью. 45 мегапикселей сделали в камере именно затем, чтобы маленькое лицо в дальнем углу всё ещё оставалось лицом.
Для модели эти лишние мегапиксели нередко сначала приходится выбросить, а потом отдельно придумывать способ вернуть их пользу обратно.
Про зерно
Самый частый и самый простой в диагностике признак генеративной вставки в настоящей фотографии — фактура.
Особенно хорошо это видно на шумном кадре.
Вы снимаете вечером на ISO 3200. По всему изображению идёт мелкая плотная крупа: чуть разная в светах и тенях, неодинаковая по цветовым каналам, связанная с конкретной экспозицией, балансом белого, обработкой RAW и самой матрицей.
Потом вы удаляете из кадра человека генеративной заливкой.
И на его месте возникает гладкое пятно.
Интуитивно хочется объяснить это просто: диффузионка — шумодав, а значит, шум она умеет только убирать.
Но это не совсем так.
Диффузионная модель прекрасно умеет рисовать шум. Напишите в промпте film grain, и она нарисует вам плёнку, которой в камере никогда не было.
Проблема в другом.
Нам нужен не «какой-нибудь похожий шум». Нам нужна конкретная реализация фактуры именно этого снимка.
А её модель не обязана сохранять.
Участок фотографии сначала проходит через кодирование в латентное пространство, затем содержимое под маской генерируется заново, потом результат проходит через декодер. В итоге на месте удалённого объекта появляется новая картинка, статистически подходящая к окружению, но не продолжение того же самого случайного рисунка сенсорного шума. VAE здесь тоже не помогает: его задача — достаточно хорошо закодировать и восстановить изображение, а не побитно пронести через узкое место каждую случайную высокочастотную флуктуацию.
Поэтому вставка необязательно будет идеально гладкой.
Она может оказаться просто другой.
Чуть меньше цветного шума. Чуть другая крупность. Иная амплитуда в тенях. Фактура, которая сама по себе выглядит совершенно натурально, но рядом с настоящей фотографией режет глаз своей чужеродностью.
При просмотре уменьшенной картинки в телефоне этого не видно.
На мониторе один к одному — видно очень хорошо.
Растушёвка маски проблему почти не решает. Она убирает шов по границе, но внутри вставки фактура всё равно остаётся другой.
Поэтому шум лучше возвращать после генерации.
Причём универсальный гауссов шум в 3% поверх слоя — довольно грубое лечение. Характер шума зависит от яркости участка, канала, исходного ISO, баланса белого и RAW-конвертера. Синий канал нередко оказывается шумнее после усиления при балансе белого, особенно при тёплом освещении, но универсального закона «синий всегда шумит сильнее» тут нет.
Самый простой способ — взять фактуру из соседнего участка того же кадра или, ещё лучше, накладывать подобранное зерно уже после сборки изображения целиком. Тогда и оригинал, и генеративная вставка получают один верхний слой фактуры.
С кожей проблема ещё заметнее.
Причём дело не только в автоэнкодере. Кожа — довольно жестокий тест для любой генеративной модели: мы чрезвычайно хорошо знаем, как она должна выглядеть. Пора размером на пару пикселей, тончайшая складка, пушковый волос, неоднородность цвета — отдельно всё это мелочи, но вместе они создают ощущение живой кожи.
Модель вполне способна нарисовать поры.
Только это будут новые поры, расположенные так, как модель считает правдоподобным.
Для генерации человека с нуля прекрасно. Для ретуши портрета, где задача состоит как раз в том, чтобы оставить этого человека и эту кожу, — уже не всегда.
И поэтому старые методы здесь до сих пор удивительно живучи. Dodge & Burn, частотное разложение, лечащая кисть работают не потому, что ретушёры — консерваторы.
Просто иногда лучший способ сохранить настоящую фактуру — вообще не просить нейросеть придумать её заново.
Ксерокс с ксерокса
Помните, что даже холостой прогон через автоэнкодер меняет картинку? Кодировщик, декодер, немного потерь. Теперь сделайте так десять раз подряд. Отредактировали, сохранили, открыли, ещё раз отредактировали.
Ошибки накапливаются. Цвета уползают, микроконтраст размывается, мелкая фактура постепенно превращается в кашу. Это классическая генерационная потеря, то же самое, что копировать ксерокопию с ксерокопии или пересохранять JPEG в JPEG. Старая болезнь в новом исполнении.
Из свежей практики: у популярной редактирующей модели FLUX.1 Kontext заметное накопление артефактов начинается примерно после шестой последовательной правки. Цифра, конечно, зависит от материала, но порядок такой.
Отсюда рабочее правило. Не стройте длинных цепочек. Если нужно внести пять правок, вносите их пятью независимыми проходами от одного и того же оригинала, а результаты собирайте слоями в редакторе, каждый слой маской по своей области. Да, дольше. Зато на выходе у вас пять вставок в оригинальном кадре, а не оригинальный кадр, прошедший пять полных пересборок.
Что до сих пор быстрее делать по-старому
Как вы уже поняли, диффузия — это молоток, а не набор инструментов, и не всякая задача — гвоздь. Какие можно сделать выводы?
Первое. Для простых дырок в высоком разрешении PatchMatch до сих пор не побеждён.
Скрытый текст
PatchMatch — алгоритм 2009 года, который умеет быстро находить для каждого маленького кусочка картинки похожий кусочек в другом месте той же картинки. Именно на нём построена заливка с учётом содержимого в Photoshop.
Это позиция самих авторов. Коннелли Барнс с коллегами в 2022 году выпустил работу с говорящим названием «Инпейнтинг в разрешении современных камер с помощью направляемого PatchMatch и автоматической курации». Алгоритму тринадцать лет, он работает с полноразмерным файлом напрямую, не сжимает его ни во что и заполняет дырку настоящими пикселями из этого же кадра, с настоящим зерном и настоящим микроконтрастом. Если вам надо убрать окурок с песка, соринку с однородного фона, мелкий мусор на воде — не гоняйте нейросеть, штамп или заливка с учётом содержимого сделают это быстрее и качественнее.
Второе. Инструмент LaMa до сих пор актуален. LaMa — это работа 2021 года, вышла из московского центра ИИ Samsung, авторы Суворов, Логачёва, Машихин, Ремизова, Ашуха, Сильвестров, Лемпицкий и коллеги из корейского подразделения.

Идея у них была необычная. Обычная свёрточная сеть видит картинку постепенно: сначала маленькие окрестности, потом побольше, и до «всего кадра целиком» доходит только в глубоких слоях. Для большой дырки это плохо, потому что, чтобы правдоподобно её заполнить, надо понимать глобальный контекст сразу. Авторы засунули в сеть быстрые фурье-свёртки: преобразование Фурье по определению работает со всем изображением сразу, а не с локальной окрестностью, так что сеть с первых же слоёв видит кадр целиком.
Обучали её на картинках 256 на 256. Работает она — прилично работает — на разрешении около двух тысяч пикселей. Обучили на почтовой марке, применяют на плакате.
Практически LaMa убирает провода, столбы, разметку, повторяющиеся структуры вроде решёток и кирпичной кладки. Делает это быстро, без промпта, без семплеров и без пересборки всего кадра. Для типовой работы пейзажника это, честно говоря, инструмент номер один.
Третье. Для задач, где надо отдельно управлять цветом/тоном и высокочастотной фактурой кожи, частотное разложение остаётся куда более предсказуемым. Конечно, сейчас есть масса инструментов, которые оставляют коже текстуру и аккуратно её чистят. И всё-таки с опытным ретушером они пока не сравнятся. Ключевое слово — пока.
И четвёртое. Диффузия нужна там, где вам требуется новый образ, а не новая текстура. Дорисовать здание, которого нет. Заменить небо на другое. Продлить кадр за границу. Убрать человека, за которым была сложная сцена, а не однородный фон.
Простое правило, которым я пользуюсь: если я могу объяснить словами, что должно появиться на месте дырки, — это задача для диффузии. Если я могу показать пальцем, откуда взять материал, — это задача для старых методов.
И чему теперь верить
Осталась последняя тема, тоже хочу её коснуться. Про неё сейчас очень много говорят и думают. С развитием нейронных сетей уже не поймёшь, чему верить. Что важно, я сейчас говорю не про сознательные подделки, о нет! Это оставим на совести фальсификаторов. Я говорю о том, что ваш телефон сегодня может сфотографировать то, чего никогда не было. Тут проявляется общая проблема всех генеративных методов, не только диффузионок: если информации нет, модель не восстанавливает её — она выбирает правдоподобную гипотезу. Иногда это выходит прямо боком.
Самая яркая история тут случилась в марте 2023 года.
Пользователь Reddit под ником ibreakphotos ставит эксперимент над функцией Space Zoom в Samsung Galaxy S23 Ultra. Берёт нормальную фотографию луны из интернета, специально её размывает — так, чтобы никаких деталей не осталось вообще, просто светлый кружок с невнятными пятнами. Выводит размытое изображение на монитор. Снимает монитор телефоном.
На выходе — чёткая луна с кратерами. Кратеров в исходнике не было, их неоткуда было взять, информация была уничтожена размытием до съёмки.
Скандал вышел громкий. Samsung ответил, что никакого наложения готовой картинки не происходит: система распознаёт луну как объект съёмки, делает серию кадров, складывает их для снижения шума, а потом движок улучшения детализации, обученный глубоким обучением, дорабатывает результат. Формально это чистая правда, никто ничего не подклеивал. Только в кадре появились несуществующие детали.

А теперь вернёмся ещё на три года назад и разберём механику произошедшего.
2020 год: исследователи из Дьюкского университета публикуют PULSE, метод повышения разрешения лиц, работающий поверх StyleGAN. Кто-то выложил в Twitter результат прогона пикселизованного портрета Барака Обамы. На выходе получился детализированный портрет белого мужчины. Дальше был большой и шумный разговор про предвзятость в машинном обучении, и авторы в разделе про смещения в самой статье признали, что модель, скорее всего, унаследовала перекос из обучающего набора StyleGAN.
Тут важно понимать, как работает метод. PULSE не увеличивает разрешение картинки. Совсем. Он берёт генеративную модель и ищет в её пространстве такое лицо, которое при уменьшении до низкого разрешения даст ту картинку, что вы подали на вход. Это не восстановление, это подбор.
И вот тут ключевой момент: под одну и ту же картинку 16 на 16 пикселей подходит бесконечно много лиц высокого разрешения. Информации в исходнике физически нет. Алгоритм не может её вернуть, он может только выбрать один вариант из бесконечного множества подходящих. А выбирает он по тому, что чаще встречалось в обучении.
Ровно та же логика в лунном режиме. Ровно та же логика в любом ИИ-апскейлере, включая те, которыми пользуемся мы с вами.
Отсюда вывод. Если алгоритм перераспределяет информацию, которая в кадре есть, — это обработка. Шумодав, резкость, тональные кривые, работа с цветом, склейка нескольких экспозиций. Тут никаких вопросов.
Если алгоритм добавляет информацию, которой в кадре нет, — это уже не совсем фотография, чем бы оно ни называлось в меню. И тогда вопрос только один: знает ли об этом человек, который смотрит на результат.
Съёмка серии кадров с последующим сложением, которой занимаются все телефоны, — это первая категория. Дорисовка кратеров — вторая. Между ними, конечно, огромная серая зона, и в этой серой зоне сейчас находится вся мобильная фотография целиком.
Как фотографию стали подписывать
И вот теперь вернёмся к фотокриминалистике, с которой мы расстались чуть выше.
Если по самим пикселям всё труднее уверенно понять, что с изображением делали, можно зайти с другой стороны.
Не искать следы вмешательства, а записывать историю изображения с самого начала.
Для этого появился C2PA — открытый технический стандарт происхождения цифрового контента. А Content Credentials — более человеческое название той информации о происхождении и изменениях, которую этот стандарт позволяет прикрепить к файлу.
В идеальном мире схема выглядит так. Камера снимает фотографию и создаёт криптографически подписанную запись: вот устройство, вот программа, вот файл, вот что произошло в момент его создания. Открыли его в совместимом редакторе — тот не стирает предыдущую запись, а дописывает следующую: кадрировали, поправили цвет, применили генеративную заливку.
Получается что-то вроде сервисной книжки автомобиля, только для картинки.
И технология довольно быстро добралась до настоящих камер и телефонов. В Pixel 10 Google пошла особенно далеко: Pixel Camera добавляет Content Credentials к каждому JPEG, который снимает штатная камера, а не только к изображениям, где использовался генеративный ИИ. Samsung в Galaxy S25 тоже поддержала C2PA, делая особый акцент на прозрачности контента, созданного или изменённого генеративными инструментами.
Казалось бы, вот оно, решение. Но не тут-то было.
C2PA отлично умеет отвечать на вопрос: «Кто утверждает, что создал этот файл и что с ним происходило после?»
Но это совсем не тот же вопрос, что «Правда ли изображённое на фотографии происходило перед объективом?»
И сами разработчики современных реализаций это прекрасно понимают. Google прямо предупреждает в документации Pixel: Content Credentials не могут сказать вам, настоящее изображение или поддельное. Они дают информацию о происхождении и истории файла, которую человек уже использует для собственного вывода.
Почему?
Потому что криптографическая подпись стоит в конце довольно длинной цепочки.
Свет прошёл через объектив. Матрица получила сигнал. Процессор камеры его обработал. Прошивка что-то с ним сделала. И только потом некий доверенный компонент говорит: «вот этот результат создал я».
Но что именно происходило до подписи — отдельный вопрос.
Очень наглядно эта граница проявилась у Nikon Z6 III. В августе 2025 года камера получила прошивку 2.00 с поддержкой Nikon Authenticity Service и C2PA. Практически сразу обнаружился неприятный трюк со штатным режимом мультиэкспозиции: камера могла сама собрать итоговое изображение из нескольких источников, а затем совершенно честно подписать уже собранный результат. Криптографию никто не взламывал. Подпись была настоящая. Ошибка находилась уровнем выше — в предположении о том, что именно камера имеет право подписывать как результат съёмки.
После этого Nikon временно остановила работу сервиса и отозвала выданные сертификаты.
Но здесь мой старый текст уже успел устареть. Сейчас Nikon снова официально предлагает Authenticity Service, а Z6 III указана на сайте компании как совместимая камера при актуальной прошивке. Так что эта история пока не закончилась.
Есть ещё одно слабое место, которое тоже постепенно научились обходить.
Первые реализации C2PA в основном хранили манифест непосредственно в файле. И тут изображение отправлялось в соцсеть, сервис пережимал JPEG, выбрасывал незнакомые метаданные — и прекрасная криптографическая родословная заканчивалась на первом же репосте.
Такое до сих пор возможно.
Но нынешний стандарт уже предусматривает так называемые Durable Content Credentials. Идея в том, что манифест можно хранить отдельно, а в самом изображении оставить дополнительную «мягкую привязку» к нему — например, невидимый водяной знак или визуальный фингерпринт. Если обычные метаданные потерялись, проверяющая система пытается найти исходный манифест по этой привязке.
То есть механизм доверия пытаются выстроить в несколько слоёв: метаданные, криптография, водяные знаки, фингерпринт, внешний репозиторий.
Получается всё сложнее.
Но фундаментальное ограничение никуда не делось.
C2PA может сохранить историю файла. Она может доказать, что определённая камера подписала изображение. Что потом его открыл определённый редактор. Что редактор заявил о конкретной операции. Что после этого байты не были незаметно заменены.
Но она не докажет, что перед объективом действительно стоял человек, а не монитор с изображением человека. И уж тем более не может заглянуть в голову фотографу.
Это не недостаток C2PA. Просто мы пытаемся технически решить задачу, которая гораздо шире криптографии: доказать не происхождение файла, а происхождение реальности, изображённой в нём. А вот для этого цифровой подписи пока мало.
Мир, которого нет
Ну и давайте я скажу, что думаю обо всём этом сам. Всё-таки полстатьи ругался, надо и позицию обозначить.
Генеративное редактирование — прекрасный инструмент, и я им пользуюсь каждый рабочий день. То, на что раньше уходил вечер, делается за минуту. Отказываться от этого примерно так же бессмысленно, как отказываться от автофокуса.
Но есть штука, которая меня не отпускает с тех пор, как я полез в историю с термином.
Реставраторы решали задачу, аналогичную нашей: как заполнить утрату так, чтобы работа читалась целиком, но чтобы никто потом не выдал твою работу за оригинал. К 1950 году они пришли к двум правилам: отличимость и обратимость. Штриховка, которая издалека сливается, а вблизи видна. Краски, которые снимаются растворителем, не тронув оригинал.
Цифровая обработка взяла у них слово inpainting и не использовала ни одного из двух правил.
Причём это не техническое ограничение, вот что обидно. Отличимость делается элементарно: пишите в метаданные маску правки, храните оригинал в контейнере, показывайте разницу по клику. Обратимость — тоже: неразрушающая обработка существует в фотографии лет двадцать, весь Lightroom на ней построен.
Просто рынок никогда не просил ни того, ни другого. Рынок просил, чтобы просто, красиво и незаметно.
C2PA — первая серьёзная попытка вернуть хотя бы след обратимости: не откатить правку, но узнать, что она была. И то, как эта попытка идёт — с отозванными сертификатами, с обходом через мультиэкспозицию, с соцсетями, которые срезают манифест на загрузке, — показывает, насколько задача оказалась сложной.
За отличимость, насколько я вижу, не борется вообще никто, за исключением авторитетных СМИ и OSINT-экспертов, которым важно отличать правду от нейрослопа.
А генеративные сети становятся всё лучше. Вон уже в московском Мультимедиа Арт Музее (МАММ) проходят выставки «архивных» кадров людей, полностью сгенерированных нейронками. И ведь без подготовки и не отличишь. С подготовкой отличишь далеко не всё.
И чему теперь верить?
Riedl
ну во первых средства отображения. увидеть 16 бит нереально. нет такого средства отображения. даже если видеть честные 10 бит ну наверное от 5 до 10 млн за монитор. физически вы работаете в 8 битовом цветовом пространстве визуально. созданный контент вне всяких сомнений чаще предназначен для всяких рилс, фоток для гаджетов, что маскирует переходы монтажа на мелких экранах.