В феврале мы сдались. Через полгода нейросети доросли.

В феврале мы сдались. Через полгода нейросети доросли.

Идея простая: человек загружает фото своего тела, выбирает эскиз и видит, как татуировка будет выглядеть на нём, до того как идти к мастеру. Кажется, что для нейросетей 2026 года это задача на вечер☕ Хех.. У нас она заняла два захода, и первый закончился ничем 🧎‍♂

Февраль: перебрали всё и сдались 🏳

В феврале мы пробовали gpt-image-1, gpt-image-1.5, DALL·E, Stable Diffusion и почти всё (всё 🙁), что было на Replicate. На каждый сценарий подбирали свою модель: отдельно для примерки, отдельно для эскиза, для доработки старой татуировки, для рисовки маски и т.д. и т.п. Результат: потратили уйму денег и сделали AI корпорации чуть богаче 💸

Результат всегда был один и тот же:
- татуировка вставала не туда, куда показали;
- модель перерисовывала всё фото целиком;
- менялись лицо и тело, рука на результате была уже не твоя;
- рисунок на коже был похож на эскиз только отдалённо;
- всё выглядело «пластиково», либо как наклейка поверх кожи.

Долго казалось, что проблема в нас. Писали промпты на русском и на английском (и на птичьем 🦆), резали (тянули, сужали) и осветляли (затемняли) фото, рисовали маски, где отмечали место для рисунка. Модели читают маску по-разному: одним нужно белое там, где рисовать, другим наоборот. Поэтому мы переводили в негатив то изображение, то маску, подбирали уровень белого и чёрного. Модель всё равно ставила работу куда и как хотела. Когда одни и те же ошибки повторились на всех моделях и во всех сценариях, стало ясно, что дело не в подходе: модели этого пока не умеют. Мы сдались. Проект отложили 😔

Возвращение: gpt-image-2 🚀

Вернулись, когда вышла gpt-image-2: хотелось просто посмотреть, справится ли она. Справилась, и проект начали строить всерьёз. По ходу работы вышла gpt-image-2.5, и мы перешли на неё: работа по сценариям ускорилась почти в 2 раза (примерка на фото упла с 42 до 23 секунд), а качество заметно выросло 🕺
Но главный урок не в том, что модели стали лучше. Новая модель убрала потолок, а доводить до рабочего вида всё равно пришлось руками.

Модели нужно показывать, а не объяснять 👈

Место задаётся картинкой, а не словами. Фраза «поставь татуировку на предплечье, на 80% ширины» даёт примерное место. Поэтому человек рисует рамку прямо на своём фото, а модель получает схему: фото с отметкой, куда ставить работу. Так устроены примерка, доработка и перекрытие старой татуировки.

Модель ставила работу мимо рамки, и виноваты были мы (странно 🙄) На крупных работах, во всю ногу, татуировка упорно уезжала ниже отмеченного места. Оказалось, эскиз приходит на белом фоне, и мы накладывали его на фото непрозрачным листом. Лист закрывал ту самую кожу, куда надо набить работу, и модель, не найдя там кожи, ставила рисунок ниже листа. Когда стали накладывать эскиз так, чтобы сквозь него было видно тело, проблема ушла. С тех пор правило такое: прежде чем чинить «модель не слушается», посмотри, что ты ей на самом деле отдаешь 🤡

Этап примерки после удаления "белого листа" 
Этап примерки после удаления "белого листа" 

Рукав на согнутой руке. Модель копирует форму рисунка, а не геометрию рамки. Прямой рукав на согнутой руке ложился прямой полосой мимо предплечья, и никакие слова в промпте не помогали. Помогло одно: согнуть сам рисунок. В интерфейсе появился ползунок «Изгиб», который гнёт эскиз дугой, и модель получает уже изогнутую картинку.

Примерка "рукава" после добавления "Изигба"
Примерка "рукава" после добавления "Изигба"

Размер пока не решается ничем 🤔 Честно о том, что не получилось. Мы замеряли одну и ту же татуировку с рамками на 15, 30 и 45% ширины кадра, и все три раза она выходила примерно в две трети ширины руки. Размер двигает только фраза в промпте, и промах бывает примерно двукратным. Эту задачу мы пока не решили.

Промпт: коротко и утвердительно. Шесть-восемь фраз. Запреты работают хуже просьб: скажешь «без растушёвки», и модель начинает думать о растушёвке. Лучше писать «рисунок состоит только из линий». И ещё: одна и та же модель никогда не отвечает одинаково, поэтому о любой правке можно судить только по нескольким прогонам.

Одна нейросеть не справляется, нужна команда 👨‍👩‍👧‍👦

Снаружи SkinCanvas выглядит как «оболочка над нейросетью», но внутри четыре модели, и у каждой своя работа:
- gpt-image-2.5 рисует всё: эскизы, примерку, доработку;
- o3 смотрит на фото готовой татуировки и описывает словами, что на ней, где она и в каком стиле;
- gpt-5.6-luna раскладывает это описание по полям для экрана и работает консультантом: отвечает человеку и помогает придумать идею;
- gpt-4.1-mini превращает идею человека в промпт для рисования.

Почему разбор фото идёт в два шага. Сначала одна модель смотрела на фото и сразу заполняла строгую форму. На фото предплечья с пандой она написала «голень» и «тигр», и дальше весь разбор, вместе со значением и рекомендациями, был про тигра на ноге. Технически ответ был безупречным, просто про другую татуировку 👌 Когда модель вынуждена сразу заполнять форму, она фиксирует догадку в первом поле и подгоняет под неё всё остальное. Мы разделили работу: o3 смотрит и рассказывает, 5.6-luna раскладывает рассказ по полям. Ошибки ушли, а разбор стал почти вдвое дешевле.

Почему консультант не на самой дешёвой модели. Для пользователя он бесплатный, поэтому хотелось сэкономить. Но самая дешёвая, gpt-4o-mini, отпала не по цене, а по качеству: она советовала перекрыть плотный чёрный трайбл яркими цветами, выдумала несуществующий стиль и на вопрос про воспалившуюся татуировку не назвала ни одного тревожного признака ❌ Выбрали модель посередине - gpt-5.6-luna. Она отвечает почти так же, как gpt-5.6-terra, но в десять раз дешевле.

Персональные данные: где сервер и куда уходят фото 📸

Мы работаем с фотографиями тела. Это персональные данные, и 152-ФЗ требует хранить их на сервере в России. Сервер стоит в Москве.
Но рисует модель за рубежом, а это уже трансграничная передача. Для неё нужно отдельное уведомление в Роскомнадзор, и начинать передачу до его регистрации нельзя. Наше уведомление зарегистрировали на следующий день после подачи. Самый быстрый этап во всём проекте, чего мы совсем не ожидали 😂
Главное, что мы поняли: разрешение выдаётся на конкретный список получателей, а не «на передачу вообще». Новый сервис, который получает данные, — это правка документов и уведомления. Недавно это пригодилось на ровном месте: искали, куда хранить резервные копии, и нашли бесплатное хранилище в Москве. По договору исполнителем оказалась компания из Лондона, без единого пункта о данных клиентов! Копии в итоге уехали к хостеру, который уже был в уведомлении.

Оплата для самозанятого 💰

Планировали ЮKassa. Но с конца 2025 года они больше не работают с самозанятыми, поэтому подключили Robokassa: она сама выбивает чек в «Моём налоге». Интеграция проходит тестовый стенд, но на реальных платежах ломается в нескольких местах.

Два я бы хотел знать заранее 😏:

- в боевом уведомлении сумма приходит как 100.000000, а в тесте как 100.00, поэтому подпись нужно проверять по строке, которая пришла, а не по своему числу;

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

Внутри сервиса — предоплаченный счёт и цена на каждой кнопке, которая вызывает модель. Если нейросеть не справилась, списание возвращается автоматически.

Что получилось ⭐

SkinCanvas — десяток сценариев вокруг одной задачи: придумать татуировку, примерить её на своё фото, доработать или перекрыть старую работу, собрать эскиз для мастера и найти самого мастера.
Сервису всего неделя. Первые пользователи только появляются, и похвастаться цифрами пока не можем 😀 Сейчас нам важнее всего узнать, где сервис непонятен и где спотыкаются новые люди.
Если собираетесь делать татуировку, попробуйте примерить её до сеанса: skincanvas.ru. Буду рад вопросам в комментариях, особенно от тех, кто тоже воевал с моделями за точное место на картинке.