Как я собрал генератор праздничных открыток прямо в Google Таблице — и убрал из него самое сложное

Как я собрал генератор праздничных открыток прямо в Google Таблице — и убрал из него самое сложное

Про автопилот для Telegram-канала на Google Таблицах я уже писал — та система сама пишет посты, рисует картинки и публикует их. Но был у меня и второй сюжет, который вырос из простого наблюдения.
Сразу скажу: я никогда не имел дела с программированием. Я просто люблю доводить до ума то, что отнимает время, и не боюсь разбираться по ходу. И этот проект начался не с кода, а с обычного житейского вопроса.
Нейросети сегодня рисуют что угодно. Но если попросить обычного человека сделать себе праздничную открытку с собственным лицом, он упрётся в стену. Потому что хорошая картинка в нейросети начинается с промпта — длинного, подробного описания, где надо знать, что писать, в каком порядке и какими словами. Обычный человек ради одной открытки в это вникать не станет — и правильно сделает, это не его работа.
А запрос-то живой: хочется на Новый год или на 9 Мая получить красивое фото, где ты — это ты, а не выдуманный персонаж, но в праздничном антураже. И я подумал: а что, если убрать из этой задачи ровно то, что в ней сложное — сам промпт? Пусть человек просто загрузит своё фото и выберет праздник из списка, а всё остальное таблица сделает сама.

Почему снова Google Таблицы

Тут я не стал изобретать велосипед — по той же причине, что и в прошлый раз. Таблица — это одновременно и база данных, и бесплатный хостинг для кода (Google Apps Script), и готовый интерфейс, который не нужно верстать. Мне не нужен был отдельный сервер и отдельное приложение, чтобы проверить идею. Одна вкладка — витрина с настройками, другая — движок, который собирает запрос и ходит в нейросеть. Всё в одном файле, который открывается с любого устройства.

Главная идея: промпт прячется внутрь

Вся «магия» — в том, чего пользователь не видит. Для каждого праздника я заранее написал свой промпт — подробный, выверенный, с нужными деталями: какой антураж, какой свет, какая одежда, как держать лицо. Это та самая работа, которую обычный человек делать не станет. Я сделал её один раз и спрятал в таблицу.
Дальше происходит подмена ролей. Раньше пользователь должен был сам описать картинку. Теперь он всего лишь выбирает праздник из выпадающего списка — а таблица подставляет под этот выбор готовый, отлаженный промпт и добавляет к нему загруженное фото как образец лица. Человек нажимает «Новый год» — под капотом уходит сложный запрос на генерацию, которого он даже не видит.

Как это выглядит на практике

Проще показать по шагам. Весь путь — четыре действия и ни одного промпта.
Пользователь загружает своё фото — обычный портрет, где хорошо видно лицо.
Выбирает праздник из списка: Новый год, день рождения, 8 Марта, 9 Мая, 1 сентября, выпускной, Хэллоуин, детский утренник — список большой.
Выбирает модель генерации — от быстрой и экономной до самой качественной. Этот выбор я намеренно оставил пользователю: кому-то нужно быстро и дёшево, кому-то — максимальное качество.
Если хочется — пишет одно-два предложения: например, короткую надпись на открытку. Не хочется — можно пропустить, праздник соберётся и так.
Всё. Дальше таблица сама формирует запрос, отправляет его в Runware, сохраняет лицо с загруженного фото — и примерно через минуту отдаёт готовую праздничную открытку. Ни промпта придумывать, ни писать его, ни даже знать, что такое промпт, не нужно.

Грабли — и, как всегда, не там, где я ждал

Первое — лицо. Нейросеть легко рисует «похожего человека», но мне нужно было именно то самое лицо с фото, а не фантазию на его тему. Пришлось разбираться, как правильно передавать исходный снимок движку как образец (референс), чтобы модель держала сходство, а не сочиняла заново.
Второе — русский текст на картинке. Если просто попросить нейросеть написать «С Новым годом!», она норовит выдать кашу из символов, похожих на буквы. Лечится это только жёстким требованием в промпте: писать текст точно, по буквам, чистой читаемой кириллицей — и держать надпись короткой.
Третье, и для меня самое важное, — безопасность. Открытку может заказывать родитель для ребёнка. Поэтому у меня железное правило, зашитое во все праздники: ребёнок на картинке всегда полностью одет, в добром, возрастно-уместном виде. И никакой романтики я не зашиваю в промпты даже там, где она вроде бы напрашивается, — потому что один и тот же праздник могут выбрать и для взрослого фото, и для детского. Эту линию держу твёрдо.

Что дальше

Сама таблица оказалась рабочей, и пользоваться ей в своём кругу уже можно было. Но раздавать её каждому по ссылке на Google-документ неудобно, да и денег она так не приносит. Поэтому следующим шагом я превратил таблицу в полноценного Telegram-бота и подключил к нему оплату — чтобы любой человек мог просто написать боту, прислать фото и получить открытку, а мне не пришлось раздавать таблицу вручную. Как я это сделал и на какие грабли наступил уже с платежами — в следующей части.
Если интересно следить за проектом дальше — я пишу об AI-инструментах и автоматизации в Telegram-канале «Сундук AI».

11