Get the file
Join Discord and open #freebies. The flow file and setup help are there.
Paste a YouTube URL. This workflow pulls the transcript, writes a short script, asks Gemini Veo for b-roll, and sends the pieces to Creatomate for a vertical render. The Gemini key stays inside n8n. It is not placed in the clip URL Creatomate receives. It is free. There is no form on this page. You import it into your own n8n and run it there.
The flow file and setup help are in #freebies on our Discord.

The trigger is When clicked, so each video starts when you run it. There is no schedule in the file.
Input holds the YouTube URL (https://www.youtube.com/watch?v=VIDEO_ID until you replace it) and an aspect ratio of 9:16. Get Transcript calls Supadata with $env.SUPADATA_API_KEY. Claude: Write Script posts to Anthropic with $env.ANTHROPIC_API_KEY. Parse Script reads the JSON: hook, voiceover, and the first visual prompt.
Gemini Veo: Generate starts veo-3.0-fast-generate-001. The key goes on that request as a query param to Google, from $env.GEMINI_API_KEY. Wait for Veo pauses, then Gemini Veo: Poll checks the operation. Veo is often still working after one wait. If the next node says it is not ready, raise the wait or loop back until done is true.
Extract Video URL reads the file URI from the Veo response. It then asks Gemini for that file with the key in the x-goog-api-key header, and keeps the redirect URL. That redirect is what Creatomate gets as Video-1. The API key is not concatenated onto the URL.
Creatomate: Render posts to the renders API with $env.CREATOMATE_API_KEY in the Authorization header. The template id is YOUR_CREATOMATE_TEMPLATE_ID. Modifications fill elements named Hook, Voiceover, and Video-1. Get Render ID and Wait for Render lead to Creatomate: Get Video, which fetches the finished render.
SUPADATA_API_KEY for the transcript call. The note in the file says you can swap this HTTP node for another transcript API.ANTHROPIC_API_KEY.GEMINI_API_KEY. The generate and poll calls send it to Google. The clip step sends it as a header, not inside the URL passed to Creatomate.CREATOMATE_API_KEY and a 9:16 template whose elements are named Hook, Voiceover, and Video-1. Paste the template id over YOUR_CREATOMATE_TEMPLATE_ID.This file reads secrets with $env. n8n 2.x blocks that by default. If a node stops with an env access error, use the n8n env access fix.
Four steps. The file in #freebies is rup-link-to-video.json.
Join Discord and open #freebies. The flow file and setup help are there.
In n8n, use Import from File and pick the JSON from #freebies.
Set the four env keys, paste a real YouTube URL, and paste your Creatomate template id.
Run When clicked. If Veo is not done after the wait, lengthen Wait for Veo and run from the poll again. Creatomate: Get Video should return the render when it finishes.
No. The key is sent on the download request inside n8n, in the x-goog-api-key header. Creatomate receives the redirect URL for the clip, without that key.
Input sets 9:16. The Creatomate template should be a vertical layout with elements named Hook, Voiceover, and Video-1.
Often one to three minutes. Wait for Veo is a pause, not a loop. If the extract node says Veo is not ready, increase the wait.
Yes. Get Transcript is an HTTP node aimed at Supadata. Point it at another API that returns the transcript text, and keep the fields Parse Script expects.
Goat O Mate is a community of builders shipping marketing and AI automations together.
Join Discord