🤖 Этот бот, готовый к использованию:
https://t.me/iishenka_image_gen_bot
🚀 Pro-сообщество тут (там даже есть эта усиленная автоматизация, которая умеет монетизироваться):
https://t.me/iishenka_pro_bot
⭐️ Бесплатные материалы из этого видео тут:
https://t.me/+W1SnvvkcV6A3NWMy
В этом видео я расскажу, как сделать генерацию образов со своим лицом так, чтобы это смотрелось круче, чем Nano Banana. Что особенного в этом видео? Мы не только изучим принципы, но и научимся делать автоматизации на основе этих знаний.
🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач.
💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌
Тайм-коды:
00:01 - Введение. Зачем это?
00:42 - Демо
03:04 - Создаём таблицу в Supabase
03:36 - Строим автоматизацию n8n
16:51 - Подключаем Ideogram
Я — Илья Бовкунов, основатель и СЕО Sendforsign — это компания, занимающаяся AI-автоматизацией договоров и документооборота. В прошлом был Директором по продукту и продуктовому дизайну в международных AI-стартапах.
Позвать в подкаст или предложить другое сотрудничество aiiszdes@gmail.com
Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео об AI-агентах и автоматизациях!
построим автоматизацию, которая генерирует изображение с нашим лицом намного круче, чем нанобана. Причём я говорю не про забавные картинки, а про реальные коммерческие картинки, которые лично мне и моей команде помогают на ежедневной основе создавать нормальный реалистичный контент. Автоматизация будет большой, но она того стоит. Мы разберёмся, как проверить статусы пользователей, будем классифицировать их сообщения, отвечать на стартовые сообщения, подгружать их картинки с их лицами для того, чтобы генерировать свои собственные. Будем организовывать проверки, делать генерацию с разными параметрами и даже отрабатывать колбки. Короче, автоматизация и полинская, но от этого она только интересней. Каким образом это будет работать? Мы даём
референс этой автоматизации. Допустим, фотографируем своё лицо. Ну вот такая счастливая фотография. автоматизации говорит, что она загружает и говорит, что я запомнила это фото и теперь буду использовать его как референс. И теперь, если я попрошу сгенерировать а изображение в определённой обстановке с моим лицом, например, на этом канале скоро выйдет видео про оркестраторы, соответственно, я хочу свою фотографию, например, в роли дирижёра, который управляет оркестром. Даём такое задание нейронке. Она пошла генерировать и скоро вернётся. И вот она сгенерировала и дала нам ответ. Если хочешь что-то поправить фото, возьми изначальный промт. Но вот само изображение с довольно реалистичными контурами. И действительно, я похож на дирижёра. Возможно, именно её я использую в следующий раз. Но главный вопрос: каким образом мы можем сделать себе ровно такое же? Кстати, напомню, что вот эта автоматизация и все автоматизации, которые мы строим на нашем YouTube канале, они после записи видео скачиваются и помещаются в нашу бесплатную Telegram-группу. Ссылка на неё будет в описании. И также посмотрите на нашу Прогруппу. Прогруппа у нас состоит по сути из трёх частей. Первая часть - это проматериалы, это конкретные автоматизации, которые работают в реальных бизнесах, в реальных компаниях. Это автоматизации, которые сделаны основателями сообщества, некоторые лично мной. Также там автоматизации, которые сделаны участниками сообщества, которые прямо в своих бизнесах их используют. Вторая часть - это Прочат. к прогруппе прилагается доступ к прочату, где всевсе-все участники обсуждают их насущные проблемы, насущные вызовы и автоматизации, каким образом они решают те или иные кейсы. Третья часть - это возможность задавать прямые вопросы участникам сообщества и основателям сообщества и бронировать звонки с основателями сообщества и лично со мной также. И четвёртая часть, которая будет добавляться этой осенью - это материалы для новичков, которые будут неотъемлемой частью про сообщества и которые позволят вам сначала сделать шаг от нуля к единице и потом уже углубляться в тему искусственного интеллекта и автоматизации с помощью прочата и проматериалов. Обязательно подписывайтесь сегодня на прогруппу, потому что как только добавятся новые курсы и новые материалы, стоимость участия в группе значительно вырастет для новых участников. Ну а для всех текущих она, естественно, останется на их уровне. Поэтому посмотрите её тоже по ссылке в описании, там очень грудно. Первым делом нам нужно создать себе
табличку в Suabbase. Давайте назовём её productor и посмотрим, какую структуру нам нужно преследовать. Нам понадобится несколько столбцов. ID user ID обязательно как первичный для того, чтобы можно было делать по ним выборку. Дальше created add, chat id username, image, first name, quantity, количество и статус. Все это текстовые поля, кроме quantity - это число. Ну и created AD - это estestamp. Создаём себе ровно такую же табличку, прямо вручную, за 1ну минуту. Сохраняем её. Теперь нам нужно обработать весь flow с самого начала
после того, как к нам обращается наш пользователь. Сначала мы добавляем ноду Postgress, в которой делаем операцию Select и целимся в нашу только что созданную табличку. Мы делаем фильтрацию и выбираем строчку и фильтруем её по user ID. В User ID мы сразу прокидываем довольно сложную структуру. Это мы делаем для того, чтобы отрабатывать сразу все возможные варианты. Если это сообщение от пользователя, если это фотография, если это колбэк. Теперь, чтобы не прилетело от пользователя в качестве сообщения, мы всегда сможем это отловить в качестве user ID. Дальше делаем гигиеническую проверку. Если статус не блок, например, если вы захотите заблочить какого-нибудь пользователя, вы всегда сможете прокинуть ему статус blлоocked. И вся автоматизация, в принципе, будет останавливаться не начавшесь. и делаем мою любимую ноду All the data, где мы обычно собираем все-всевсе данные, которые нам потребуются в автоматизации. Здесь опять же очень сложная структура для того, чтобы мы могли отработать и, например, забрать чат ID или messageтек в любом случае, вне зависимости от того, какой тип сообщения прилетает от пользователя. Потому что, например, user ID может содержаться совершенно в разных местах, в разных полях, в Telegram-триггере в зависимости от типа сообщения, текстовое сообщение, колбк либо какое-то другое сообщение. Мы запоминаем очень много разной информации, в том числе сам колбк, картинку, количество и даже прайс - это если мы захотим в последствии брать деньги за нашу автоматизацию. Давайте сделаем тестовый прогон. Нажмём отслушивать и здесь прогоним старт. Поймаем этот старт. Так как я удалил и очистил полностью базу, мы сейчас ничего не получим, потому что записи в базе нету. Нам это и нужно. Дальше выполняем ноду if not blocked, незаблокированный. И дальше как раз выполняем эту сложную ноду all the data. Где, обратите внимание, статус прокинут. Если он пустой, тогда мы прокинем nonн. Вот у нас отлично у нас прокинулся этот статус и прокинулись все данные, которые мы получили от Telegram. Дальше мы как раз проверяем, это сообщение либо это колбк. Мы определили, что это приватное сообщение, и у нас отработала вот эта нода. Отлично. Если это приватное сообщение, у нас довольно много вариаций. Давайте на данный момент отработаем сообщение старт. Давайте загоним сюда все данные. У нас прилетели все данные. И мы определили, что это сообщение старт. Мы идём по веточке старт. И здесь довольно простая структура. Если это старт, мы хотим выдать какое-то стартовое сообщение. Это будет картиночка, которую я загрузил себе в базу. И будет довольно приятный текст. Привет, давай знакомиться. Я генератор образов. И добавим сюда специальную кнопочку с колбком continue. Давайте прямо попробуем исполнить этот шаг. И смотрите, отлично, мы себя мы себе получаем стартовое сообщение. Привет. Давай знакомиться с хорошими картиночками и нашей кнопкой дальше. Соответственно, после того, как мы выдали это сообщение, мы теперь хотим сохранить этого пользователя, потому что у нас его ещё не было, да? Мы его сохраняем в базу данных, соответственно, прокидываем все-всевсе поля, которые нам требуются, и статус contacted. Прокидываем quantity количество один, потому что мы хотим дать некоторые тестовый usage. Пускай будет одно одна генерация бесплатна для наших пользователей. Отлично. Теперь мы предлагаем нажать на кнопочку дальше, и будет инициирован callbaб backack, который мы сейчас с вами и создадим. Начало будет ровно точно такое же, но на ветке колback мы пойдём вниз и сделаем некоторый свитчер, как мы ловим колбэки. Так как мы сохранили само значение колбка в ноду all the data, мы можем их всегда получить, да? И если это колбк и он соответствует какому-то значению, мы можем пойти по этой веточке. Допустим, сейчас мы ожидаем веточку continue. Давайте попробуем выполнить шаг. И если эта веточка continue, мы делаем очень похожее действие. Мы отсылаем фоточку, тоже красивую фоточку. Позаботьтесь о том, чтобы у вас был где-то публичный л на эту фоточку. И дальше рассказываем про то, каким образом пользоваться этой автоматизацией. Давайте попробуем выполнить эту ветку. Нажимаем дальше. Смотрите, выполнилась именно эта ветка, да? То есть вот она прошла по верхней истории. И мы видим ещё одно красивое сообщение с описанием концепта. Ты даёшь мне фото, только одно, всего лишь одно, и потом объясняешь мне, что я должен изобразить. И всё, через пару минут ты получишь свои фотографии, что готов. И дай мне фото. И дальше мы ожидаем, что фото будет загружено каким-то образом. Теперь будет довольно сложная ветка, да, потому что Telegram может принимать фотки в самых разных форматах. Например, это может быть просто фотография через камеру телефона либо через камеру ноутбука. Это может быть подгруженный файл. У файла могут быть разные форматы: PEG, PNG, другие форматы. И нам нужно позаботиться о том, чтобы мы могли отработать любое фото, которое загрузит нам пользователь. Давайте посмотрим, каким образом это делается. Начало будет ровно то же самое. Мы идём по приватному сообщению. И здесь в свитчере нам нужно будет подстраховаться и описать сразу все возможные ситуации. Если это обычное фото, сделано через Telegram, тогда мы должны в Telegram-тригре поискать поле Jason Message photo почему мы ориентируемся на фото ноль? Потому что в зависимости от разрешения вашей фотки вам Telegram сожмёт её и представит на выбор сразу несколько файло ID, которые будут соответствовать разной компрессии вашей фотки. Но фото ноль всегда присутствует. Дальше мы отрабатываем кейсы, когда это файл, да, то есть мы целимся в m type. M Type может быть PNG, как я сказал, он может быть JPG. Ну или, может быть, самый обычный чпек. Любой из этих вариантов должен вести к одному и тому же флоу, то есть фото, фото, фото. Сделано это для того, чтобы вне зависимости от того, каким образом с нами зашарил фото наш пользователь, мы могли бы его скачать. Что мы делаем дальше? Как только мы получим себе фото на вход, так как операция будет долгой, мы хотим предупредить нашего пользователя, что я пошёл загружать. Соответственно, мы просто отправим текстовое сообщение. Секундочку, я загружаю. После того, как мы отправили это сообщение, мы должны прописать довольно сложную логику, потому что путей, как мы получили фотку, довольно много. И вне зависимости от этого пути мы заботимся о том, что в любом случае мы скачаем эту фотку. Здесь очень много операторов или как раз работает именно тот, который будет активен. А все поля undefined будут игнорироваться этой этим экспресшеном. Поэтому прописываем вот такую историю. Нажимаем скачивать. Давайте сейчас попробуем добраться вот до этой ноды. То есть запускаем и делаем какую-то фотку. Давайте попробуем ещё раз. Камера. Ну отлично. Тут опять же моё счастливое изображение. Пускай оно и останется. Отсылаем ещё раз. Смотрим, что видите, мы получили фото, где сразу несколько файл ID. Да, это ровно то, к чему мы готовились. Поэтому идём дальше. Получаем всевсевсе наши данные. All the data. И как раз переходим к нашему свитчеру, посмотрим, какая именно ветка сработает. Сработала самая первая ветка, как раз подгрузка через камеру девайса. Соответственно, мы можем пойти по этой ветке, сразу сказать: "Подожди, мы загружаем. Давайте проверяем". Да, я получал, я получил сообщение. Секундочку. Загружаю. И дальше происходит следующее. Видите, мы подготовились таким образом, что всегда в файл ID будет прокинуто какое-то значение. Давайте выполним это. И вот у нас скачалась наша фоточка. Отлично, мы получили фоточку. И дальше мы будем работать с Google Драйвом. То есть, что я хочу сделать? После того, как пользователь дал нам свою фотку, я хочу поискать в определённой папке на Google Драйве, вот у меня есть папка Imageгенератор, файл, который содержит ID пользователя. То есть я придумал, что я буду сохранять фото с именем, которое есть ID пользователя для того, чтобы впоследствии им пользоваться. Но так как пользователь может, например, хотеть изменять со временем свои фото, например, подгружать новые, удалять старые, а нам для генерации требуется только одно фото. Тогда мы сначала делаем search files, соответственно, проверяем, есть ли такое фото. Да, мы видим, что такое фото существует, потому что мы уже проходили через этот путь, да, и подгружали своё фото. Если оно существует, мы должны пройти по пути deleteфайл, а потом загрузить новый файл. Если же такого фото не существует, мы игнорируем удаление файла. Просто идём, загружаем новый файл и пишем пользователю, что всё, твоё, твоё фото загружено, я готов с тобой работать. Давайте пройдём по этому пути. Сейчас Google у нас удаляет это фото. Всё, он удалил наше фото. Дальше мы мрджим и подгружаем это новое фото именно с именем, которое есть user ID. Отлично. Идём в наш Google Drive, проверяем, обновляемся. И вот наше счастливое фото счастливой моськой. Соответственно, мы можем теперь перейти на следующую ноду и говорим, что я запомнил это фото, теперь буду использовать как буду его использовать как референс. Отлично. И я сразу хочу добавить э некоторые примеры, потому что не факт, что наш пользователь знает, каким образом пользоваться, да, и как лучше писать промты этой автоматизации. Поэтому я добавлю кнопочку, которая будет вызывать callback examples для того, чтобы мы могли показать пользователю, например, несколько промтов, которые хорошо работают. И дальше мы должны добавить в Pstgress, в поле image как раз ID нашего пользователя для того, чтобы мы были уверены, что всё, теперь фоточка у нас это есть. Выполняем, проверяем в базе. И вот у нас теперь имидж. И здесь прокинут ID пользователя как раз потому, что пользователь уже нам дал свою фоточку. Так как мы сюда добавили кнопочку с колбком, мы должны сразу отработать этот callback. Вот он отрабатывается ровно таким же образом, как и callback. Callback continue. Только он будет называться examples. Давайте попробуем его отработать. Нажимаем выполнение, нажимаем "Показать примеры". И смотрите, у нас вылетает целоецелое огромное сообщение, где просто приведены несколько а промтов, которые хорошо будут работать с разными стилями, например, драматический стиль и даже мультяшный стиль, потому что мы сможем генерировать изображение с нашим образом в любом из этих стилей. И дальше, например, если мы захотим отработать конкретный промт, нам нужно идти по следующей ветке. Мы также проверяем приватное это сообщение, либо колбк. Если это callback и это текст, то мы добавляем такую историю. Мы здесь добавляем опцию Fallback output и добавляем extra output. Это приведёт нас к тому, что у нас добавится fallback output. Это значит, что если пользователь отправляет свою фотку, мы знаем, как отрабатывать. Если пользователь пишет старт, мы знаем, как отрабатывать. А если это любое другое сообщение, мы предполагаем, что это есть тот самый промт, который мы должны отработать. Дальше отработка должна всегда содержать в себе какие-то проверки. То есть защита от дурака. Допустим, если пользователь сразу что-то ввёл, да, какое-то предложение, не подгрузив своё фото, мы захотим проверить сначала в базе, есть ли это фото. Например, давайте я сейчас удалю из нашего Google Драйва это фото и попробую что-нибудь написать. Я запускаю выполнение. Например, мне хочется мультяшный стиль какой-то сделать. И вот я пишу. Система отвечает, что ты пока не прикрепил фото. Это отличная защита для того, чтобы мы не тратили ресурсы наши нейронки, а для того, чтобы мы могли проверить и дать пользователю знать. То есть проверка состоит в следующем. Как вы уже поняли, у нас всё собрано в нашей ноде All the data, и мы проверяем, существует лидж в этом all the data. А вы помните, что мы его записывали только после того, как пользователь подгрузил своё сообщение. Сейчас здесь n, поэтому fфse. Дальше мы проверяем план. Опять же, в этой автоматизации, так как это довольно сложно, мы не будем прикручивать коммерческую оплату, но в нашей прогруппе будет прикручена прямо коммерческая плата для того, чтобы вы могли сразу взять эту автоматизацию и использовать, например, давать её кому-то для генерации изображений и брать деньги за эти изображения. Так что в прогруппе её поищите уже с прикрученной оплатой через Money. А сейчас мы заново переприкрепим свою фоточку. Отлично, отправили. Секундочку, загружаю. Ждём, пока наша автоматизация загрузит. Всё, загрузилось. Теперь проверяем, каким образом будет отрабатывать история с нашим промтом. Допустим, я беру мультяшный промт, вставляю его сюда и будем с вами вместе смотреть, каким образом это всё исполняется. Посылаем промт, система его получила. Проходим через все наши стандартные проверки. Наконец доходим до свитчера и определяем, что это фулбк. Отлично. Это нам и нужно было. Проверяем, есть ли фото. Фото теперь есть. То есть true brch. Проверяем, активный ли план. Да, у нас один по умолчанию был дан, одна генерация. Отлично. Дальше, так как мы знаем, что генерация занимает время, мы должны предупредить пользователя, что мы скоро вернёмся. Всё, мы даём знать, что скоро вернёмся. Всё, мы отдали это сообщение. Дальше мы должны найти как раз то самое сообщение, которое в себе содержит имя user ID. Давайте выполним это. И мы его себе нашли, потому что теперь оно у нас обратно есть на Google Драйве. Теперь мы скачиваем эту картинку, смотрим, да, это та самая картинка. И дальше мы должны перейти к генерации самого нашего нового изображения. Для того, чтобы перейти к генерации, мы будем использовать http ноду. И, естественно, мы будем пользоваться кое-каким сервисом. Этот кое-какой сервис называется ide.
Давайте его откроем. Как только мы логинимся в этот сервис, вы должны, собственно, залогиниться в этот сервис. Вы должны будете нажать вот сюда, перейти в API, и здесь у вас будет возможность создать ваш API ключ. Для того, чтобы API ключ создался, они требуют пополнить баланс минимум на 20 долларов. Соответственно, если у вас есть такая возможность, вы пополняете баланс, и они для вас генерируют API ключ. После этого мы идём в API документацию и смотрим, что вообще возможно делать с этим сервисом. Здесь, на самом деле, очень много чего можно делать. Но самый мощный их API callл - это генерация с идеограмм. И здесь довольно сложная структура API кола. Давайте мы вернёмся в N8N и прямо тут посмотрим, каким образом она работает. Здесь в API ключ, в header мы прокидываем наш API ключ. Body content type будет form data. И здесь мы должны прокинуть сразу несколько полей, которые критически важны. Во-первых, сам промт, да? То есть мы забираем prompt - это то, что нам сказал наш пользователь. Дальше Rendering Speed Turbo. Дальше Aspect Ratio. То есть мы должны сказать, какого формата мы используем фотографии. Я, например, использую их для YouTube обложек, поэтому я почти всегда генерирую 16x9, поэтому оставим 16x9. В будущем можно это поле будет сделать динамическим и, например, спрашивать у пользователя, какой формат ему нужен. Если мы хотим генерировать изображение с нашим референсом, с нашим лицом, мы должны добавить поле character reference image. И сюда мы должны передать дата, потому что мы только что из Google файла скачали наш бинарник с форматом PEK. И мы его передаём обратно в эту ноду HTTP. Дальше style автоматически можно почитать, какие здесь стили используются. Здесь могут быть реалистичные стили, абстрактные стили. Соответственно, вы можете это определять тоже. Сколько мы генерируем изображений, одно изображение. И дальше используем Magic Prompt. Это, на самом деле, очень мощная штука, потому что сервис берёт наш промт, то есть наши слова, и пытается их обернуть в такую оболочку, то есть так перефразировать с такими нюансами, эпитетами и прочими украшательствами, чтобы нейронка сгенерировала наше изображение лучше. Я обычно оставляю это всегда включённым. И в принципе, если это всё передать, то нейронка нам вернёт URL изображение, которое мы попросили. Давайте пробовать. Кстати, пока он генерируется, я подумал о том, что если вам не захочется платить 20 долларов за этот сервис, мы сделаем прямо вот эту автоматизацию, доведём её до коммерческого использования, и я прикреплю этого бота прямо в описании к этому видео. Там будут все картинки по себестоимости. Соответственно, если вы захотите также, например, генерировать какие-то каверы для Ютуба, вы сможете по себестоимости через этого бота, через этот API генерировать эти картинки. Мы с командой посмотрим, мы, возможно, ещё как-то поулучшаем, может быть, какие-то другие нейронки прикрутим, чтобы всегда у вас результат был хороший. Но в общем и целом идея в том, что всегда можно будет воспользоваться нашим ботом для генерации таких изображений. Тем временем у нас появилась наша ссылка. вы можете увидеть, каким образом а улучшился наш промт. То есть мы можем посмотреть на то, каким был а мой промт и то, каким образом система улучшила этот промт. Но самое главное, что нам сгенерировался URL этой картинки. Давайте откроем вместе этот URL. Я даже боюсь, что там он нагенерировал мультяшного меня. Ну вот он, мультяшный я. Ну, в принципе, кстати, акварельно. Не думаю, что тут сильно сохранены мои черты лица. Хотя, в принципе, наверное, что-то где-то отдалённо есть, но мне намного больше нравится реалистичные изображения. Ну, это зависит от вас. Можете экспериментировать с этим. Дальше всё просто. Так как у нас есть ссылка, да, мы можем добавить само фото на эту ссылку. Дальше выводим само фото. Да, URL есть публичный, а Telegram прекрасно работает с такими URL. Открываем. И вот наше сообщение, которое сгенерировалось. Дальше мы что должны сделать? Мы должны quantтити взять, да, и сделать -1. То есть мы должны понизить на одну фотографию. Делаем это. Смотрим. То есть он вот у нас quantтити понизилось до нуля. И дальше хотим вывести сообщение, что можно сделать дальше. Например, я придумал, что если хочешь что-то поправить в фото, то возьми изначальный промт, потому что может возникнуть желание что-то, например, дописать к этому изображению. Этот API работает не так. Надо взять изначальный промт, сюда внести какие-то правки и заново запостить. и у тебя осталось ноль генерации. Соответственно, мы считаем, сколько у человека осталось генераций. Это значит, что должна сработать на следующее исполнение наша проверка на количество генераций доступных. Давайте пробуем ещё раз. Запускаем. Делаем тестовый прогон. И отлично, у тебя закончились все генерации. И вот они варианты оплаты. Как я уже сказал, что варианты оплаты - это довольно ещё сложная, муторная вещь. Там и вебхуки надо будет подключать. Поэтому вот если прямо такая нужна автоматизация, то смотрите её в прогруппе. А автоматизация без оплаты, например, для собственного использования, если вы хотите построить ровно вот такую же, да, то есть всю верхнюю часть с генерацией, с промтами, с примерами, с колбками, вот эта автоматизация будет в бесплатной Telegram-группе. Она тоже ссылочка на неё в описании. Прямо идите туда, забирайте её и экспериментируйте, сколько вам нужно. Хорошего дня. y