Размножили объявление по городам, тексты переписали, а карточки всё равно склеило? Почти всегда причина — фотографии. Разберём, что именно робот Авито сверяет в картинках, как уникализировать фото руками в XnView MP и Photoshop — честно, по шагам — и где ручной способ перестаёт окупаться.
Что робот сверяет в фотографиях
Авито не сравнивает файлы побайтово — он считает перцептивный хэш: цифровой отпечаток того, как картинка выглядит. Упрощённо алгоритм работает так: изображение сжимается до крошечной сетки (порядка 8×8), переводится в оттенки серого, и по яркости ячеек строится битовая строка. У «того же фото, но пережатого» строка получается та же — поэтому смена качества, формата и имени файла отпечаток не трогают. Сдвигают его только правки, меняющие композицию и распределение яркости: кроп, шум, локальный тон.
Дополнительно робот распознаёт текст на снимках: номер телефона или логотип на борту машины читаются и участвуют в сравнении — поэтому один полупрозрачный водяной знак, работавший в 2022-м, сегодня не решает задачу. Полная механика фильтра — с текстом, ценами и связками — разобрана в отдельной статье; здесь сосредоточимся на картинках.
Что не работает (и почему)
| Приём | Почему не помогает |
|---|---|
| Переименовать файл | имя файла в хэше не участвует вообще |
| Пересохранить с другим качеством | перцептивный хэш к пережатию устойчив |
| Только отзеркалить | хэш это переживает, а надписи становятся зеркальными |
| Инстаграм-фильтр на всю папку | одинаковая правка на всех фото — тот же сдвиг отпечатка у всех, копии остаются похожими друг на друга |
| Удалить EXIF «под ноль» | метаданные — вторичный сигнал; их отсутствие подозрительно, а хэш не меняет |
Что реально сдвигает отпечаток
Главная правка — изменение кадрирования: несимметричная обрезка 5–12% меняет композицию кадра, и хэш пересчитывается. Остальное — усилители: слабый шум по всему кадру (ломает попиксельное сравнение), микросдвиги яркости, контраста и гаммы, лёгкая резкость со случайной силой. Работает только каскад: одна правка в одиночку либо заметна глазу, либо не двигает отпечаток.
Вручную: XnView MP, пакетная обработка
Бесплатный XnView MP умеет прогонять папку целиком (Инструменты → Пакетная обработка). Рабочий рецепт на один набор:
- Обрезка. «Кадрирование» в процентах: например, 4% слева, 7% сверху, 6% справа, 3% снизу. На следующем наборе — другие цифры.
- Возврат размера. «Изменение размера» к исходным пропорциям, метод Ланцоша — разрешение не потеряется.
- Шум. Фильтр «Добавить шум», значение минимальное — 1–2%, глазом не видно.
- Тон. Яркость +1…−2, контраст ±2, гамма 0,98–1,02 — на каждом наборе свои значения.
- Метаданные. «Очистить метаданные» и досоздать EXIF заново (вкладка «Метаданные» или exiftool): одна модель камеры и одна дата на весь набор.
- Экспорт. Своё качество JPEG для набора (например, 87 вместо 92) — другая структура файла.
В Photoshop та же логика через Actions + «Обработчик изображений»: записываете экшен с кропом, Camera Raw-микроправками и шумом, прогоняете папку батчем. Быстрее XnView не будет, но у кого Photoshop под рукой — способ рабочий.
EXIF: заменить, а не удалить
Метаданные — вторичный, но реальный сигнал. Частая ошибка — стереть EXIF «под ноль»: у живых фотографий с телефона метаданные есть всегда, и их полное отсутствие на 200 снимках само по себе выглядит синтетикой. Правильная схема — согласованная замена: внутри одного набора у всех фото одна модель камеры и одна дата съёмки, между наборами они различаются. Руками это делается бесплатным exiftool: одна команда прописывает модель и дату на всю папку (exiftool -Model="Xiaomi 13" -DateTimeOriginal="2026:08:20 14:11:00" ./set1). Главное — не забыть сменить значения для следующего набора.
Как проверить, что получилось
Два уровня проверки перед заливкой в фид:
- Глазами. Откройте оригинал и вариант рядом на весь экран: различий не должно быть видно. Если кроп заметен или тон «уехал» — параметры слишком агрессивные, покупатель это тоже увидит.
- Технически. Сравните размер файлов в байтах и EXIF — они должны отличаться. Кто дружит с Python, может сверить перцептивные хэши напрямую: библиотека
imagehash, функцияphash()— расстояние Хэмминга между оригиналом и вариантом от 10 и выше означает, что отпечаток реально сдвинут.
И боевой тест: опубликуйте два клона с разными наборами в соседних городах. Если оба прошли модерацию и живут с нормальными показами больше недели — каскад работает.
Где предел ручного способа
На одном наборе — нигде: полчаса, и готово. Проблемы начинаются на объёме, когда городов десять и наборов нужно десять:
- Время умножается. 10 наборов × 20 фото = 200 прогонов с разными параметрами. Это уже вечер, и так при каждом обновлении комплекта.
- EXIF расползается. Держать согласованные «камеры» и даты на десяти наборах в голове — нереально; а вразнобой метаданные сами превращаются в сигнал.
- Хостинг и ссылки. Для автозагрузки по фиду нужны прямые ссылки на каждое фото — их надо где-то хостить и собирать полотно руками, не перепутав порядок слайдов.
- Учёт наборов. Какой вариант стоит в каком городе — через месяц не вспомнит никто. А ставить один набор в соседние города нельзя.
Ручной способ против автоматики: счёт времени
Посчитаем на реальном объёме — услуга с комплектом из 20 фото, геосетка на 10 городов:
| Этап | Руками (XnView + exiftool) | Сервисом |
|---|---|---|
| Подбор параметров на набор | 5–10 мин × 10 наборов | — |
| Прогон обработки | 10 батчей с разными настройками | один запуск |
| EXIF на каждый набор | 10 команд exiftool, свои значения | автоматически |
| Хостинг и сборка ссылок | найти хостинг, залить 200 файлов, собрать полотна | ссылки готовы сразу |
| Итого | вечер, и снова при каждом обновлении фото | 2–3 минуты |
На одном наборе ручной способ честно работает. На геосетке — время уходит не в уникализацию, а в логистику: параметры, метаданные, хостинг, порядок, учёт. Именно эту логистику и автоматизирует уникализатор фото AV Ranker: тот же каскад (несимметричный кроп, шум, микротон, согласованные EXIF, свой JPEG на набор), но на всю папку и нужное число наборов за один запуск. Порядок слайдов сохраняется по именам файлов, полотно ссылок для фида готово сразу, хостинг встроен, а какой набор где стоит — видно по коду. И это входит в единый тариф, а не оплачивается пофотно.
Чек-лист перед масштабированием
- На каждый город — свой набор фото, без «одни на троих».
- Первый слайд везде продающий: оффер, а не деталь интерьера.
- Кадры с надписями не зеркалить; телефоны на фото — убрать совсем (за них ловится и модерация).
- EXIF согласован внутри набора и различается между наборами.
- Тексты и адреса уникализированы тоже: фото — самый жёсткий слой фильтра, но не единственный.
Частые вопросы
Можно ли просто отзеркалить фото?
Как единственную правку — нет: перцептивный хэш устойчив к отражению, а надписи на фото станут зеркальными, и робот, читающий текст на снимках, это увидит. Зеркалирование работает только в каскаде с кропом и шумом, и только на кадрах без надписей.
Нужно ли удалять EXIF?
Удалять — плохая идея: полное отсутствие метаданных у «живых» фото само по себе выглядит подозрительно. Правильнее заменить EXIF на согласованный: одна модель камеры и одна дата съёмки на весь набор, у каждого набора — свои.
Как понять, что объявления склеило по фото?
Типичная картина: клоны с разными текстами получают статус «похожее объявление» или резко теряют показы после модерации, при этом тексты и адреса разные. Если наборы фото совпадают хотя бы частично — причина почти всегда в них.
Сколько наборов фото нужно на 10 городов?
Десять: у каждого клона — свой набор. Экономия «одни фото на три города» возвращает задачу в исходную точку: внутри этих трёх городов карточки снова дубли.