🎥 СОЗДАНИЕ ВИДЕО • Шаблон 1 из 25
🔍 Что делает:
Этот шаблон создает вирусные исторические POV видео (от первого лица), которые собирают миллионы просмотров в TikTok, Inst и YouTube Shorts. Он берет каждую идею из Google Таблицы –> генерирует последовательный сюжет "дня из жизни" -> а затем для каждой сцены выполняет конвейер задач: создание изображений, анимация, наложение звуков, монтаж.
💻 Сервисы и интеграции:
N8N — конструктор
Google Sheets — для хранения идей и сохранения финальных ссылок
Google Drive — для временного хранения аудиофайлов (OAuth2)
OpenAI — для сценариев и промптов
PiAPI.ai — для изображений Flux, а для видео Kling
ElevenLabs — для генерации звуковых эффектов
Creatomate — для финального видео-монтажа
YouTube — Для публикации видео
⚙️ Установка и настройка
Подключаем сервисы Google
Создаём таблицу
Регаемся на PiAPI.AI
Соединяемся с ElevenLabsё
Настраиваем Creatomate
Финалим таблицу
Дополнительные детали
1️⃣ Подключаем сервисы Google
Таблицы (Sheets):
Тут всё слишком просто. Можно даже не комментировать.
Диск (Drive):
Данный урок подразумевает, что тобой уже изучены все предыдущие лекции. Поэтому супер-базовые нюансы я разбирать не буду. Этого должно быть достаточно:
Скопируй OAuth Redirect URL –> и зайди на сайт Google Cloude Console.
Там найди Google Drive API –> жми Enable / Manage.
И перейди в Credentials –> чтобы создать новое подключение.
Нам нужно OAuth 2.0. Тыкни на + Create credentials.
Здёсь всё стандартно.
А в поле ниже воткни URL, скопированный в N8N.
После нажатия Create –> увидишь это:
Копируем Client ID и Сlient Secret.
И вставляем их в Credential N8N.
После чего тыкаем Sign in with Google и ставим галочки.
Готово :)
Теперь можно перейти в свой Google Drive и создать отдельную папку для аудиозаписей. После того как сделаешь это, вернись в N8N и выбери её название в узле Upload Mp3.
Она нужна для прописывания идей (первый раз для теста мы заполним их вручную, а потом можно подключить на эту задачу отдельного агента) + сохранения итоговых результатов. Перейди в мою таблицу и жми –> Создать копию.
Внутри уже есть первый пример для теста.Но ты можешь скопировать название нужных столбцов, и попросить ChatGPT сгенерировать тебе свою таблицу по нужным идеям / нишам.
Описание таблицы:
idea - содержит описание POV-сцены.
caption - описание деталей (если нужно).
enviroment_prompt - задаёт год, место, визуальные детали.
production - статус готовности, чтобы агент помечал видео.
publishing - статус публикации, чтобы проверять залит ли видос.
final_output - здесь будет ссылка на итоговый результат.
Что тут есть – можно увидеть на скрине. Сервис даёт бесплатные токены для теста. Когда потребуется оплатить, это можно будет сделать с помощью карты или крипты.
Я за секунду вошел через GitHub.
А далее –> перешел в Settings –> API Keys.
Придумай название и сделай новый ключ.
Скопируй его и пошли настраивать узлы в N8N.
Создание изображений:Text to image + Get Image
Начнём отсюда. На данном шаге мы отправляем сгенерированные промты в Kling чтобы он сгенерировал для нас пикчи, которые позже будут анимированы.
Листаем немного вниз и ищем поле для ключа.
Втыкай его в –> Value.
Здесь повторяем те же действия. Данный шаг получает готовые изображения после паузы (у меня стоит 2 минуты, при желании можно увеличить).
Ну и готово, получается.
С изображениями разобрались.
Генерация видео: Image to video + Get Video
На этом шаге мы отправляем запрос в Kling.
Затем пауза. Немного больше, чем на предыдущем шаге, потому что видео генерятся дольше изображений (я оставил 10 мин).
Ну и здесь API ключ не забываем.
Этот прекрасный сервис умеет не только озвучивать агентов, но и создавать звуки для наших POV видео. Поэтому мы быстро регаемся, если еще не сделали этого –> получаем бесплатные токены –> и идём в API Keys.
Тут придумываем название нового ключа и копируем его.
Возвращаемся в N8N и втыкаем ключ в узел –> Text to sound.
В поле Value.
Это сервис для автоматизированных склеек. Он не единственный и даже не самый удобный. Кроме того, он требует оплаты тарифа для генерации в хорошем качестве (для теста хватит бесплатной версии).
В следующем уроке я покажу альтернативу, но с Creatomate все равно нужно познакомиться, потому что опытному специалисту важно иметь широкий арсенал. А также понимать плюсы и минусы каждого отдельного инструмента.
После создания проекта, жмем на три точки ... в левом верхнем углу.
И заходим в Project Settings.
Здесь нас интересует API Key.
Копируем его.
Возвращаемся в N8N –> открываем узел Render Video. И вставляем ключ вот так: Bearer ключ (между ними пробел).
Узел подключили (ノ◕ヮ◕)ノ*:
Теперь возвращаемся в Creatomate.
Нам нужно создать шаблон для будущих видео.
Tempates –> + New
Далее жми –> Start from scratch
И выбери формат 9:16 Vertical (потому что щас всё делаем под него).
Затем –> Create Template.
Теперь нам нужна кнопка {..} в верхнем меню.
Этот раздел также открывается через F12 на клавиатуре.
Вставь туда этот код:
Он расчитан на 5 отрезков в видео. Тебе этого может быть мало, поэтому в конце я оставлю код для 12 фрагментов. Изучив оба, ты поймешь как настраивать этот дело под свои задачи. Ну или ChatGPT тебе обьснит :)
{
"output_format": "mp4",
"width": 1080,
"height": 1920,
"elements": [
{
"id": "476fbf11-185a-4842-bb54-8fbe5ede8f45",
"name": "Audio-1",
"type": "audio",
"track": 1,
"time": 0,
"source": "b61010d4-adcf-4d93-8546-934e5a4b448a",
"trim_duration": 5,
"dynamic": true
},
{
"id": "50d079ac-a1cb-4169-a720-9148d05845f1",
"name": "Audio-2",
"type": "audio",
"track": 1,
"time": 5,
"source": "0109fa02-239b-4baa-ab5c-1e0445276cb7",
"trim_duration": 5,
"dynamic": true
},
{
"id": "78edca64-24af-47f3-9496-a3d03afa4038",
"name": "Audio-3",
"type": "audio",
"track": 1,
"time": 10,
"source": "8e323742-21f3-437d-a163-01a05154b216",
"trim_duration": 5,
"dynamic": true
},
{
"id": "97b1258a-a398-4824-afaf-c87ae87048f4",
"name": "Audio-4",
"type": "audio",
"track": 1,
"time": 15,
"source": "458c2f63-6abf-4058-8f99-3d11efdf3ce5",
"trim_duration": 5,
"dynamic": true
},
{
"id": "2a6b8dcf-2b2d-4739-9389-2fd4edee02d1",
"name": "Audio-5",
"type": "audio",
"track": 1,
"time": 20,
"source": "38eeb087-d6a5-41ae-b3d8-67ae8345ab85",
"trim_duration": 5,
"dynamic": true
},
{
"id": "db018ee8-4530-4cc4-9fb4-4cc034a7985f",
"name": "Video-1",
"type": "video",
"track": 2,
"time": 0,
"duration": 5,
"source": "4d90054a-61a7-4d8e-8fcf-a0418e473cca",
"clip": true,
"dynamic": true
},
{
"id": "07c6aa87-c882-4307-a49d-0fad9507fc80",
"name": "Video-2",
"type": "video",
"track": 2,
"time": 5,
"duration": 5,
"source": "4d90054a-61a7-4d8e-8fcf-a0418e473cca",
"clip": true,
"dynamic": true
},
{
"id": "f4526c6e-fe95-4bb9-99d3-284faaea3832",
"name": "Video-3",
"type": "video",
"track": 2,
"time": 10,
"duration": 5,
"source": "4d90054a-61a7-4d8e-8fcf-a0418e473cca",
"clip": true,
"dynamic": true
},
{
"id": "5153165c-8630-4488-a1e0-5afdfbec6225",
"name": "Video-4",
"type": "video",
"track": 2,
"time": 15,
"duration": 5,
"source": "4d90054a-61a7-4d8e-8fcf-a0418e473cca",
"clip": true,
"dynamic": true
},
{
"id": "28c2600a-f255-4d1c-aab7-c02801ae5d4f",
"name": "Video-5",
"type": "video",
"track": 2,
"time": 20,
"duration": 5,
"source": "4d90054a-61a7-4d8e-8fcf-a0418e473cca",
"clip": true,
"dynamic": true
},
{
"id": "04bb636f-0b96-4a0f-9125-d662eb7204bd",
"name": "Text-1",
"type": "text",
"track": 3,
"time": 0,
"duration": 5,
"x": "2.7527%",
"y": "17.1734%",
"width": "94.4945%",
"height": "7.8841%",
"x_anchor": "0%",
"y_anchor": "0%",
"x_alignment": "50%",
"y_alignment": "50%",
"text": "Lifting a heavy tapestry to reveal sunlight streaming in",
"font_family": "Oswald",
"font_weight": "700",
"font_size": "7 vmin",
"background_color": "#1d1d1d",
"fill_color": "#ffffff",
"animations": [
{
"time": 0,
"duration": 1,
"easing": "quadratic-out",
"type": "text-appear",
"split": "letter"
},
{
"time": "end",
"duration": 1,
"easing": "quadratic-out",
"reversed": true,
"type": "text-appear",
"split": "letter"
}
]
},
{
"id": "04bb636f-0b96-4a0f-9125-d662eb7204bd",
"name": "Text-2",
"type": "text",
"track": 3,
"time": 5,
"duration": 5,
"x": "2.7527%",
"y": "17.1734%",
"width": "94.4945%",
"height": "7.8841%",
"x_anchor": "0%",
"y_anchor": "0%",
"x_alignment": "50%",
"y_alignment": "50%",
"text": "Lifting a heavy tapestry to reveal sunlight streaming in",
"font_family": "Oswald",
"font_weight": "700",
"font_size": "7 vmin",
"background_color": "#1d1d1d",
"fill_color": "#ffffff",
"animations": [
{
"time": 0,
"duration": 1,
"easing": "quadratic-out",
"type": "text-appear",
"split": "letter"
},
{
"time": "end",
"duration": 1,
"easing": "quadratic-out",
"reversed": true,
"type": "text-appear",
"split": "letter"
}
]
},
{
"id": "04bb636f-0b96-4a0f-9125-d662eb7204bd",
"name": "Text-3",
"type": "text",
"track": 3,
"time": 10,
"duration": 5,
"x": "2.7527%",
"y": "17.1734%",
"width": "94.4945%",
"height": "7.8841%",
"x_anchor": "0%",
"y_anchor": "0%",
"x_alignment": "50%",
"y_alignment": "50%",
"text": "Lifting a heavy tapestry to reveal sunlight streaming in",
"font_family": "Oswald",
"font_weight": "700",
"font_size": "7 vmin",
"background_color": "#1d1d1d",
"fill_color": "#ffffff",
"animations": [
{
"time": 0,
"duration": 1,
"easing": "quadratic-out",
"type": "text-appear",
"split": "letter"
},
{
"time": "end",
"duration": 1,
"easing": "quadratic-out",
"reversed": true,
"type": "text-appear",
"split": "letter"
}
]
},
{
"id": "04bb636f-0b96-4a0f-9125-d662eb7204bd",
"name": "Text-4",
"type": "text",
"track": 3,
"time": 15,
"duration": 5,
"x": "2.7527%",
"y": "17.1734%",
"width": "94.4945%",
"height": "7.8841%",
"x_anchor": "0%",
"y_anchor": "0%",
"x_alignment": "50%",
"y_alignment": "50%",
"text": "Lifting a heavy tapestry to reveal sunlight streaming in",
"font_family": "Oswald",
"font_weight": "700",
"font_size": "7 vmin",
"background_color": "#1d1d1d",
"fill_color": "#ffffff",
"animations": [
{
"time": 0,
"duration": 1,
"easing": "quadratic-out",
"type": "text-appear",
"split": "letter"
},
{
"time": "end",
"duration": 1,
"easing": "quadratic-out",
"reversed": true,
"type": "text-appear",
"split": "letter"
}
]
},
{
"id": "04bb636f-0b96-4a0f-9125-d662eb7204bd",
"name": "Text-5",
"type": "text",
"track": 3,
"time": 20,
"duration": 5,
"x": "2.7527%",
"y": "17.1734%",
"width": "94.4945%",
"height": "7.8841%",
"x_anchor": "0%",
"y_anchor": "0%",
"x_alignment": "50%",
"y_alignment": "50%",
"text": "Lifting a heavy tapestry to reveal sunlight streaming in",
"font_family": "Oswald",
"font_weight": "700",
"font_size": "7 vmin",
"background_color": "#1d1d1d",
"fill_color": "#ffffff",
"animations": [
{
"time": 0,
"duration": 1,
"easing": "quadratic-out",
"type": "text-appear",
"split": "letter"
},
{
"time": "end",
"duration": 1,
"easing": "quadratic-out",
"reversed": true,
"type": "text-appear",
"split": "letter"
}
]
}
]
}
Получится так:
Теперь жми Use Template в правом верхнем углу.
И выбери в меню API Integration.
Тут нам нужно скопировать "template_id".
Возвращаемся в N8N –> в узел Render Video.
И вставляем скопированный ID в Body (я выделил на скрине).
⚠️ ВАЖНО: если будешь увеличивать количество отрезков, то нужно обновлять не только код в Cratomate, но и в узле Render Video. Ниже я дам код для 12 отрезков.
После того, как все сгенерируется, агент должен обновить таблицу. Для этого открываем узел Update google sheet. И проверяем чтобы тут у нас.
id (using to match) –> втыкается АйДи из таблицы (по сути это просто цифра, которой помечен номер идеи). Это нужно чтобы обновить поля.
production –> проставляется Done
publishing –> проставляется Ready
Таблица обновилась и я уже поставил оценку полученному видео.
7️⃣ Дополнительные детали
Быстро о том, что не затронул выше:
А. Генерация идей
Данный узел переделывает идеи из нашей таблицы в сцены.
Промт этого агента объясняет ему как разбивать идею на отрезки. Не бойся экспериментировать. Под каждый проект лучше настраивать отдельный процесс, учитывающий особенности ниши (например, исторический формат).
Item List Otput Parser отвечает за количество отрезков в будущих видео. Если поставить 5 –> значит идея превратится в последовательный сценарий из 5 частей.
⚠️ ВАЖНО: чтобы у тебя при тестировании не сожрались все токены за несколько минут, в шаблоне по умолчанию стоит 2 Number Of Items.
Б. Генерация звуков
Здесь название отрезков передается в 11Labs для озвучки.
Описание для инструмента выглядит так:
Это HTTP запрос к сервису (грубо говоря, мы отправляем в 11Labs письмо со словами: "вот такой вот звук сделай мне и потом получаем ответ".) В N8N не всегда есть нужные нам ноды/узлы, а таким образом можно позволить себе намнооого больше.
MCP, конечно, дико упрощает внешние подключения, и подобные интеграции. Но это тема отдельного урока. Начинаем с базы.
В. Публикация результата
Я пока отключил этот узел в шаблоне, потому что дальше у нас будет целый блок о подключении всех возможных социальных сетей. Ты сможешь легко его врубить обратно. Разобраться не сложно.
▶️ Можно тестировать Инструкция для тестового запуска:
Подготовь данные в таблице Убедись, что в Google Таблице есть строка с полями idea, enviroment_prompt, production = for production.
Запусти workflow вручную Нажми "Test workflow" в N8N.
Проверь узел Titles и идеи (сценарист) Убедись, что он возвращает короткие сцены в text.
Проверь узел OpenAI (промтовик) На выходе должен быть один англоязычный prompt в message.content, соответствующий сцене.
Проверь Text to image Убедись, что используется правильный prompt и что image_url получен после Get Image. Работоспособность модельки можно также проверить на сайте PiAPI в разделе Task History.
Проверь Image to video Проверь, что prompt и image_url передаются правильно. Убедись, что видео сгенерировано. При наличии ошибок дополнительно проверь Task History.
Проверь Text to sound Убедись, что звук сгенерирован по соответствующему promptу и что получен mp3-файл.
Проверь Merge1 и Code1 Убедись, что все массивы (text, video, sound) одной длины и в правильном порядке. Если они группируются вместе без ошибок – значит все четко.
Проверь Render Video Убедись, что scene_titles, video_urls, sound_urls подставляются правильно.
Проверь результат Открой ссылку final_output из таблицы и убедись, что в видео: - сцена соответствует описанию - есть звук - есть надпись
Ты только что запустил автоматизацию для создания (исторических POV) видео от канала ИИздец. Она берёт идеи из таблицы, превращает их в сценарии, создает по ним изображения, анимирует их, добавляет звуки и склеивает вместе.
🚨 Частые вопросы
❓ Что делать при ошибках?
➡️ Использовать ChatGPT:
В подписке на ChatGPT за $20 и $200 есть модельки, которые хорошо справляются с подобными задачами (на апрель 2025 это 4о).
Отправь ей JSON файл. Затем четко сформулируй свой вопрос и прикрепи скриншот / скопируй описание ошибки (N8N всегда справа присылает output с результатом и если че-т не работает, там почти всегда написано почему).
Чем больше вводных, тем лучше. Но не забывай про ограничения контекста моделки, с которой ты общаешься. Спустя какое-то время после начала диалога, общение будет становиться менее эффективным. Тогда можно будет начать новый диалог, заново объяснить происходящее, сформулировать новые вопросы и продолжить.
❓ Как изменить стиль видео?
➡️ Главный инструмент – это промты, а именно:
Идеи в Google Таблице и описание деталей.
Системный промт агента сценариста.
Инструкция для агента промтовика.
➡️ На стиль также влияют модельки, выбранные для генерации. Одни умеют лучше в анимационный стиль, другие в реализм. В интернете масса обзоров все существующих нейросетей, поэтому можешь выбирать что по кайфу. Как подключать к чему угодно через HTTP запросы я показал.
❓ Можно ли изменить количество сцен?
➡️ Да, для этого нужно:
В узле Item List Output Parser измени цифру Number Of Items.
В узле Code (List Elements) измени код JavaScript, чтобы он обрабатывал нужное количество элементов (щас прописано под 5).
Адаптируй свой шаблон в Creatomate под новое количество сцен.
Код для узла Render Video (12 узлов): { "template_id": "5aafffa3-6adc-4a2f-90dc-c91a80d2136a", "modifications": { "Audio-1.source": "{{ $json.sound_urls[0] }}", "Audio-2.source": "{{ $json.sound_urls[1] }}", "Audio-3.source": "{{ $json.sound_urls[2] }}", "Audio-4.source": "{{ $json.sound_urls[3] }}", "Audio-5.source": "{{ $json.sound_urls[4] }}", "Audio-6.source": "{{ $json.sound_urls[5] }}", "Audio-7.source": "{{ $json.sound_urls[6] }}", "Audio-8.source": "{{ $json.sound_urls[7] }}", "Audio-9.source": "{{ $json.sound_urls[8] }}", "Audio-10.source": "{{ $json.sound_urls[9] }}", "Audio-11.source": "{{ $json.sound_urls[10] }}", "Audio-12.source": "{{ $json.sound_urls[11] }}",
"Video-1.source": "{{ $json.video_urls[0] }}",
"Video-2.source": "{{ $json.video_urls[1] }}",
"Video-3.source": "{{ $json.video_urls[2] }}",
"Video-4.source": "{{ $json.video_urls[3] }}",
"Video-5.source": "{{ $json.video_urls[4] }}",
"Video-6.source": "{{ $json.video_urls[5] }}",
"Video-7.source": "{{ $json.video_urls[6] }}",
"Video-8.source": "{{ $json.video_urls[7] }}",
"Video-9.source": "{{ $json.video_urls[8] }}",
"Video-10.source": "{{ $json.video_urls[9] }}",
"Video-11.source": "{{ $json.video_urls[10] }}",
"Video-12.source": "{{ $json.video_urls[11] }}",
"Text-1.text": "{{ $json.scene_titles[0] }}",
"Text-2.text": "{{ $json.scene_titles[1] }}",
"Text-3.text": "{{ $json.scene_titles[2] }}",
"Text-4.text": "{{ $json.scene_titles[3] }}",
"Text-5.text": "{{ $json.scene_titles[4] }}",
"Text-6.text": "{{ $json.scene_titles[5] }}",
"Text-7.text": "{{ $json.scene_titles[6] }}",
"Text-8.text": "{{ $json.scene_titles[7] }}",
"Text-9.text": "{{ $json.scene_titles[8] }}",
"Text-10.text": "{{ $json.scene_titles[9] }}",
"Text-11.text": "{{ $json.scene_titles[10] }}",
"Text-12.text": "{{ $json.scene_titles[11] }}"
}
}
Философия работы с агентом