AutomationFlowsAI & RAG › Create & Auto-publish Youtube Content with Gemini Ai, Face Thumbnails &…

Create & Auto-publish Youtube Content with Gemini Ai, Face Thumbnails &…

Original n8n title: Create & Auto-publish Youtube Content with Gemini Ai, Face Thumbnails & Human Review

ByJuan Carlos Cavero Gracia @carlosgracia on n8n.io

This workflow transforms any video you drop into a Google Drive folder into a ready-to-publish YouTube upload. It analyzes the video with AI to craft 3 high-CTR title ideas, 3 long SEO-friendly descriptions (with timestamps), and 10–15 optimized tags. It then generates 4…

Event trigger★★★★☆ complexityAI-powered28 nodesAgentGoogle Gemini ChatOutput Parser StructuredHTTP RequestGoogle GeminiGoogle Drive TriggerN8N Nodes Upload PostGoogle Drive
AI & RAG Trigger: Event Nodes: 28 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #10644 — we link there as the canonical source.

This workflow follows the Agent → Google Drive recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "3c9fb1a3-e04f-4ea6-8658-f980d1ed8250",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -400,
        528
      ],
      "parameters": {
        "text": "=[USER PROMPT]\nDescripci\u00f3n del v\u00eddeo:\n{{ $json.content.parts[0].text }}\n\nObjetivo:\nGenera EXACTAMENTE 3 ideas de (title, prompt_thumnail, description, tags) en espa\u00f1ol (es-ES), con alto impacto SEO y CTR y Maximizando la retencion de las viewrs, cumpliendo estrictamente estas normas:\n- Devuelve SOLO un array JSON v\u00e1lido con 3 objetos.\n- Cada objeto debe tener EXACTAMENTE estas claves: \"prompt_thumnail\", \"title\", \"description\", \"tags\".\n- Las 3 ideas deben ser claramente diferentes (beneficio / urgencia / prueba-sorpresa).\n\nREGLAS DE T\u00cdTULO (campo \"title\"):\n- 55\u201365 caracteres cuando sea posible, palabra clave principal cerca del inicio si fluye natural.\n- Clickbait responsable (sin enga\u00f1os ni may\u00fasculas sostenidas), claro y orientado a beneficio/resultado.\n- Debe casar con el texto sobreimpreso de la miniatura (que lo complemente, no lo repita tal cual).\n\nREGLAS DE MINIATURA (campo \"prompt_thumnail\"):\n- La idea es conseguir el m\u00e1ximo CTR y retenci\u00f3n de audiencia y que haga una sinergia genial con el titulo. \n- TODO EN UNA SOLA LINEA SIN SALTOS DE LINEA, Para pasarlo como cadena de texto. Red\u00e1ctalo como instrucciones directas para un modelo texto-a-imagen que recibir\u00e1 TAMBI\u00c9N una foto adjunta de mi cara.\n- Miniaturas sencillas: fondo relevante + texto click bait acorde con el titulo + mi cara con expresi\u00f3n de sorpresa.\n- Usa este esquema fijo (cada secci\u00f3n en su propia l\u00ednea):\n  FONDO: describe un fondo simple y limpio, relacionado con el tema del v\u00eddeo; sugiere 1\u20132 elementos visuales reconocibles; profundidad ligera (blur suave si procede).\n  ROSTRO: \"usa la foto adjunta de mi cara; recorte limpio; col\u00f3cala [izquierda/derecha]; expresi\u00f3n de sorpresa (cejas elevadas, boca entreabierta); tama\u00f1o \u224835\u201345% del ancho; iluminaci\u00f3n pareja; borde/contorno suave si mejora la lectura\".\n  TEXTO: clickbait y coherente con el t\u00edtulo; tipograf\u00eda sans-serif gruesa, alto contraste, sombra o contorno para legibilidad; ub\u00edcalo en zona sin ruido visual; evita tapar la cara.\n  COMPOSICI\u00d3N: 16:9 (1280x720), regla de tercios, espacio negativo suficiente alrededor del texto; foco n\u00edtido en rostro + mensaje; sin collages ni marcos.\n  ESTILO/COLORES: paleta de 2\u20133 colores consistentes con el tema; alto contraste; iluminaci\u00f3n profesional.\n  CALIDAD/RESTRICCIONES: n\u00edtido, sin logos ni marcas registradas, sin marcas de agua, sin texto adicional, sin elementos distractores.\n- Importante: deja claro que el generador debe integrar la FOTO ADJUNTA DE MI CARA en la composici\u00f3n final.\n- No uses comillas ni caracteres especiales solo texto plano.\n\nREGLAS DE DESCRIPCI\u00d3N (campo \"description\"):\n- 2\u20134 frases con gancho, beneficios y keywords naturales (sin abuso); termina con CTA breve.\n- Menciona de forma sutil el concepto visual (fondo + texto + mi cara con sorpresa) para coherencia con la miniatura.\n- Genera tambi\u00e9n un timestamp con las partes principales para separar por capitulos el video de youtube\n\nREGLAS DE TAGS (campo \"tags\"):\n- 10 - 15 tags string separados por comas con los terminos optimizados para que me encuentre, long tails y palabras seo que tengan que ver con mi video. \n\nIMPORTANTE:\n- Devuelve SOLO el array JSON con 3 objetos.\n- No a\u00f1adas texto fuera del JSON.\n- No incluyas comentarios, markdown ni campos adicionales.\n- Escapa correctamente las comillas dentro de strings.",
        "options": {
          "systemMessage": "[SYSTEM PROMPT \u2014 ACTUALIZADO]\nEres un generador experto de ideas para t\u00edtulos, miniaturas y descripciones de v\u00eddeos en espa\u00f1ol (es-ES) orientadas a SEO y alto CTR. Tu salida DEBE ser SOLO un JSON v\u00e1lido (array) con 3 objetos, sin texto adicional, sin markdown, sin comentarios.\n\nREQUISITOS GENERALES\n- Idioma: espa\u00f1ol de Espa\u00f1a.\n- Devuelve EXACTAMENTE 3 ideas distintas.\n- Salida: un array JSON con objetos que contengan SOLO estas claves:\n  - \"prompt_thumnail\": string sin saltos de linea solo texto plano sin emoticonos.\n  - \"title\": string (t\u00edtulo SEO y clickbait responsable).\n  - \"description\": string (descripci\u00f3n alineada con la miniatura y el t\u00edtulo).\n  - \"tags\": string de tags separados por comas\n- El JSON debe usar comillas dobles, sin comas finales, escapando correctamente caracteres especiales.\n- Nada de texto fuera del JSON.\n\nREGLAS DE T\u00cdTULO (campo \"title\")\n- Longitud objetivo: 55\u201365 caracteres cuando sea posible (sin sacrificar claridad).\n- Coloca la palabra clave principal al inicio si es natural.\n- Un \u00fanico recurso de potenciaci\u00f3n (n\u00famero, par\u00e9ntesis, corchetes, pregunta o \u201cc\u00f3mo/por qu\u00e9\u201d).\n- Prohibido may\u00fasculas sostenidas o reclamos enga\u00f1osos.\n- Las 3 ideas deben cubrir \u00e1ngulos distintos: (1) beneficio/resultado, (2) urgencia/escasez/tiempo, (3) prueba/demostraci\u00f3n/sorpresa.\n- El texto sobreimpreso de la miniatura debe complementar el t\u00edtulo (no repetirlo tal cual).\n\nREGLAS DE MINIATURA (campo \"prompt_thumnail\")\n- La idea es conseguir el m\u00e1ximo CTR y retenci\u00f3n de audiencia y acorde con el titulo\n- Debe ser una sola linea de texto sin saltos de linea ni caracteres especiales, ir\u00e1 dentro de un string:\n  FONDO: describe un fondo simple, limpio y RELEVANTE con la descripci\u00f3n del v\u00eddeo; 1\u20132 elementos visuales reconocibles; opcional blur suave.\n  ROSTRO: \"usa la FOTO ADJUNTA DE MI CARA; recorte limpio; posici\u00f3n [izquierda/derecha]; expresi\u00f3n de sorpresa (cejas elevadas, boca entreabierta); tama\u00f1o \u224835\u201345% del ancho; iluminaci\u00f3n pareja; contorno suave si mejora la lectura\".\n  TEXTO: clickbait y coherente con el t\u00edtulo; tipograf\u00eda sans-serif gruesa, alto contraste, sombra o contorno; ub\u00edcalo en zona sin ruido; no tapar la cara.\n  COMPOSICI\u00d3N: 16:9 (1280x720), regla de tercios, espacio negativo suficiente, foco en rostro + mensaje; miniatura SENCILLA (sin collages ni marcos).\n  ESTILO/COLORES: paleta de 2\u20133 colores acorde al tema; alto contraste; iluminaci\u00f3n profesional.\n  CALIDAD/RESTRICCIONES: n\u00edtido, sin logos ni marcas registradas, sin marcas de agua, sin texto extra, sin elementos distractores.\n- Mant\u00e9n total coherencia con el t\u00edtulo y la descripci\u00f3n.\n- Deja claro que el generador debe integrar la FOTO ADJUNTA DE MI CARA en la composici\u00f3n final.\n- No uses comillas ni caracteres especiales solo texto plano.\n\n\nREGLAS DE DESCRIPCI\u00d3N (campo \"description\")\n- 2\u20134 frases con gancho y beneficios clave, naturales y legibles (SEO-friendly).\n- Integra de forma org\u00e1nica 2\u20134 palabras clave relevantes (sin keyword stuffing).\n- Menciona sutilmente el concepto visual (fondo relacionado + texto breve + mi cara con sorpresa) para coherencia.\n- Genera tambi\u00e9n un timestamp con las partes principales para separar por cap\u00edtulos el video de youtube\n- Cierra con una llamada a la acci\u00f3n breve (suscribirse, comentar, ver recursos).\n\nREGLAS DE TAGS (campo \"tags\"):\n- 10 - 15 tags string separados por comas con los t\u00e9rminos optimizados para que me encuentre, long tails y palabras seo que tengan que ver con mi video. \n\nPROCESO\n1) Lee la descripci\u00f3n del v\u00eddeo que recibir\u00e1s en el prompt del usuario.\n2) Extrae intenci\u00f3n, p\u00fablico y palabras clave primarias/secundarias.\n3) Genera 3 propuestas distintas siguiendo las reglas anteriores.\n\nFORMATO DE SALIDA (SOLO JSON)\n[\n  {\n    \"prompt_thumnail\": \"prompt para modelo text to image\",\n    \"title\": \"\u2026\",\n    \"description\": \"\u2026\",\n    \"tags\": \"...\"\n  },\n  {\n    \"prompt_thumnail\": \"prompt para modelo text to image\",\n    \"title\": \"\u2026\",\n    \"description\": \"\u2026\",\n    \"tags\": \"...\"\n  },\n  {\n    \"prompt_thumnail\": \"prompt para modelo text to image\",\n    \"title\": \"\u2026\",\n    \"description\": \"\u2026\",\n    \"tags\": \"...\"\n  }\n]"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "retryOnFail": true,
      "typeVersion": 3
    },
    {
      "id": "c227d3e0-79c0-4b66-a5c9-558773d47a9b",
      "name": "Google Gemini Chat Model4",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -400,
        816
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ac4c5049-466a-4432-a5a8-72293ac5f7c6",
      "name": "Structured Output Parser4",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -336,
        736
      ],
      "parameters": {
        "autoFix": true,
        "jsonSchemaExample": "[\n  {\n    \"prompt_thumnail\": \"\u2026\",\n    \"title\": \"\u2026\",\n    \"description\": \"\u2026\",\n    \"tags\": \"...\"    \n  },\n  {\n    \"prompt_thumnail\": \"\u2026\",\n    \"title\": \"\u2026\",\n    \"description\": \"\u2026\",\n    \"tags\": \"...\"    \n  },\n  {\n    \"prompt_thumnail\": \"\u2026\",\n    \"title\": \"\u2026\",\n    \"description\": \"\u2026\",\n    \"tags\": \"...\"    \n  }\n]"
      },
      "typeVersion": 1.3
    },
    {
      "id": "a0a3052c-d4c5-4996-b20a-60255f5e5af6",
      "name": "Sticky Note27",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        336
      ],
      "parameters": {
        "color": 3,
        "width": 432,
        "height": 688,
        "content": "## Drive Trigger"
      },
      "typeVersion": 1
    },
    {
      "id": "b7b6ed63-9f12-4071-9838-fee16849077f",
      "name": "Get Final photo",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        528
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/nano-banana/requests/{{ $json.request_id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b767e7d2-79d9-4d28-9f47-3a22955a3306",
      "name": "Download Photo 0",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        384
      ],
      "parameters": {
        "url": "={{ $json.images[0].url }}",
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0171ca9a-0e4d-493a-a5ca-bf1f3506f921",
      "name": "Download Photo 1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        528
      ],
      "parameters": {
        "url": "={{ $json.images[1].url }}",
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "41d37ef5-436f-4399-88ae-640a2d3f0567",
      "name": "Download Photo 2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        672
      ],
      "parameters": {
        "url": "={{ $json.images[2].url }}",
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7129326e-3c88-4155-b785-721a05d5e99e",
      "name": "Download Photo 3",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        832
      ],
      "parameters": {
        "url": "={{ $json.images[3].url }}",
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "774f695c-54d0-429e-90bd-437878ced9a3",
      "name": "Analyze video2",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        -576,
        528
      ],
      "parameters": {
        "text": "=Analiza a fondo el v\u00eddeo adjunto y escribe UNA DESCRIPCI\u00d3N LARGA y DETALLADA en espa\u00f1ol de Espa\u00f1a, lo m\u00e1s extensa posible, 100% fiel a lo que se ve y se oye (sin inventar ni exagerar). Esta descripci\u00f3n servir\u00e1 despu\u00e9s para que otro modelo genere t\u00edtulos, miniaturas y una descripci\u00f3n final, as\u00ed que prioriza claridad, contexto y riqueza sem\u00e1ntica. Saca tambi\u00e9n la transcripcion del video\n\nInstrucciones de redacci\u00f3n:\n- Escribe varios p\u00e1rrafos narrativos cohesionados (sin listas ni encabezados). Abre con un gancho claro que resuma el valor del v\u00eddeo y a qui\u00e9n ayuda.\n- Desarrolla paso a paso lo que ocurre en el v\u00eddeo: problema que aborda, p\u00fablico objetivo, herramientas/m\u00e9todos utilizados (solo si aparecen), decisiones tomadas, par\u00e1metros relevantes, demostraciones, resultados concretos y conclusiones pr\u00e1cticas.\n- Integra de forma natural 5\u201312 palabras clave y variaciones que realmente se desprendan del contenido (sin \u201ckeyword stuffing\u201d), \u00fatiles para SEO y coherentes con el tema del v\u00eddeo.\n- Menciona de forma sutil elementos visuales importantes que se vean en pantalla (p. ej., texto en pantalla, interfaces, gr\u00e1ficos, comparativas, m\u00e9tricas), y, si puedes inferirlo, referencia momentos destacados con marcas de tiempo aproximadas integradas en el texto (ej.: \u201csobre el minuto 02:15\u2026\u201d).\n- Incluye consejos, advertencias o errores comunes si el v\u00eddeo los muestra o verbaliza; nunca inventes informaci\u00f3n que no est\u00e9 en el v\u00eddeo.\n- Cierra con una llamada a la acci\u00f3n coherente con el contenido (p. ej., suscribirse, comentar dudas, probar el recurso mostrado).\n\nEstilo y restricciones:\n- Tono: directo, did\u00e1ctico y honesto.\n- Solo texto plano en p\u00e1rrafos. No a\u00f1adas t\u00edtulos, listas, emojis, hashtags, enlaces, ni formato de c\u00f3digo.\n- No menciones que eres un modelo ni describas el proceso de an\u00e1lisis; entrega \u00fanicamente la descripci\u00f3n final, lo m\u00e1s extensa que permita el contenido del v\u00eddeo.\n\n(Entradas opcionales: palabra clave principal o contexto del canal. Si las hay, int\u00e9gralas de forma natural sin forzar.)",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "video",
        "inputType": "binary",
        "operation": "analyze"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "34343038-7b42-4c43-a412-add6d5e221a0",
      "name": "Wait to select by user",
      "type": "n8n-nodes-base.wait",
      "position": [
        -96,
        528
      ],
      "parameters": {
        "resume": "form",
        "options": {},
        "formTitle": "Review the posts ",
        "formFields": {
          "values": [
            {
              "fieldType": "dropdown",
              "fieldLabel": "Choose option",
              "fieldOptions": {
                "values": [
                  {
                    "option": "0"
                  },
                  {
                    "option": "1"
                  },
                  {
                    "option": "2"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "=\u27a1\ufe0f Concepto 0:\n\n  {{ $json.output[0].title }}\n\n\u27a1\ufe0f Concepto 1: \n\n  {{ $json.output[1].title }}\n\n\u27a1\ufe0f Concepto 2\n\n  {{ $json.output[2].title }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "10ffd40b-79ff-4275-aab8-f8601943123c",
      "name": "Wait to select by user1",
      "type": "n8n-nodes-base.wait",
      "position": [
        1024,
        560
      ],
      "parameters": {
        "resume": "form",
        "options": {},
        "formTitle": "Review the posts ",
        "formFields": {
          "values": [
            {
              "fieldType": "dropdown",
              "fieldLabel": "Choose option",
              "fieldOptions": {
                "values": [
                  {
                    "option": "0"
                  },
                  {
                    "option": "1"
                  },
                  {
                    "option": "2"
                  },
                  {
                    "option": "3"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "=\u27a1\ufe0f thumbnail 0:\n\n  {{ $('Get Final photo').item.json.images[0].url }}\n\n\u27a1\ufe0f thumbnail 1: \n\n  {{ $('Get Final photo').item.json.images[1].url }}\n\n\u27a1\ufe0f thumbnail 2:\n\n  {{ $('Get Final photo').item.json.images[2].url }}\n\n\u27a1\ufe0f thumbnail 3:\n\n  {{ $('Get Final photo').item.json.images[3].url }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "9d52d10e-2316-4307-87a2-547eb55a6c21",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -976,
        528
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1jojIQ8TUjC_O-HfuhcjZfJSGSOl-h0Om",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1jojIQ8TUjC_O-HfuhcjZfJSGSOl-h0Om",
          "cachedResultName": "upload-video-youtube"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f0c4edf7-9d8a-405c-bfba-527f99568212",
      "name": "Upload a video",
      "type": "n8n-nodes-upload-post.uploadPost",
      "position": [
        1312,
        560
      ],
      "parameters": {
        "user": "automated-tests",
        "title": "={{ $('AI Agent1').item.json.output[$json['Choose option']].title }}",
        "video": "data",
        "platform": [
          "youtube"
        ],
        "operation": "uploadVideo",
        "description": "={{ String($('AI Agent1').item.json.output[$json['Choose option']].description)\n    .replace(/\\\\r\\\\n/g, '\\n')   // convierte \"\\r\\n\"\n    .replace(/\\\\n/g, '\\n')      // convierte \"\\n\"\n}}",
        "youtubeTags": "={{ $('AI Agent1').item.json.output[$json['Choose option']].tags }}",
        "youtubeThumbnail": "={{ $('Get Final photo').item.json.images[$('Wait to select by user1').item.json['Choose option']].url }}"
      },
      "credentials": {
        "uploadPostApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "94d794e4-5c95-4a96-ad3f-86ef91beb754",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -768,
        528
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "f45f923b-efa3-481b-bd27-242729e463f7",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        880,
        560
      ],
      "parameters": {
        "options": {
          "includeBinaries": true
        },
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {}
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5888b39a-6079-44f7-ae0b-5478d94dd338",
      "name": "Download file1",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1168,
        560
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive Trigger').item.json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "85640a2a-9ccd-4d68-9e2b-cc77492f0a88",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        400
      ],
      "parameters": {
        "color": 5,
        "width": 208,
        "height": 352,
        "content": "## Config Fal.ai \n- Here need to add a image_urls with your image or of your avatar\n- And fal.ai api keys\n"
      },
      "typeVersion": 1
    },
    {
      "id": "049e4d11-1359-4f0b-88a7-5b4e1bbe41a3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        400
      ],
      "parameters": {
        "color": 5,
        "height": 416,
        "content": "## Config upload-post\n- generate api key and connet your youtube account in app.upload-post.com "
      },
      "typeVersion": 1
    },
    {
      "id": "39d83fd7-3d4b-408d-941b-ce414c263c8c",
      "name": "Generate thumbnails",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        128,
        528
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/nano-banana/edit",
        "body": "={\n  \"prompt\": \"{{ $('AI Agent1').item.json.output[$json['Choose option']].prompt_thumnail }}\",\n  \"image_urls\": [\n    \"https://test-videos-upload-post.s3.eu-west-3.amazonaws.com/Captura+de+pantalla+2025-11-07+a+las+18.59.50.png\"\n  ],\n  \"aspect_ratio\": \"16:9\",\n  \"num_images\": 4\n}",
        "method": "POST",
        "options": {
          "batching": {
            "batch": {
              "batchSize": 1,
              "batchInterval": 2000
            }
          }
        },
        "sendBody": true,
        "contentType": "raw",
        "authentication": "genericCredentialType",
        "rawContentType": "application/json",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e6780083-8163-408a-85d6-52b3506774ad",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -288
      ],
      "parameters": {
        "width": 544,
        "height": 624,
        "content": " ## Description\nThis workflow lets you upload any video you want to publish on YouTube. It analyzes the video and automatically generates a title, description, tags, and several thumbnails for you to choose from and then uploads everything to YouTube automatically\n\n## How it works \nHere\u2019s how it works: when you upload the video to Google Drive, the process starts automatically. The workflow downloads the file and sends the video to Gemini so it can analyze it. Gemini extracts what the video is about, the key points, and the full transcription, and then passes all that to the agent. The agent generates multiple title, description, and tag options for you to choose from. It also creates several thumbnail variations and sends them to you so you can pick your favorite. Once you select everything and confirm, the workflow uploads the video to YouTube with all the details perfectly set up.\n## Setup steps\n- Configure google drive credentials and select a folder to track uploads\n-  Setup Gemini API keys in Analyze video and AI Agent\n-  Configure fal.ai API keys and your avatar Image \n- Configure upload-post API keys, connect your youtube account and select the profile in the node\n"
      },
      "typeVersion": 1
    },
    {
      "id": "38f95e04-69f2-445f-aab4-277119c74c23",
      "name": "Sticky Note28",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        336
      ],
      "parameters": {
        "color": 6,
        "width": 464,
        "height": 688,
        "content": "## AI section, analize video and generate title, description..."
      },
      "typeVersion": 1
    },
    {
      "id": "27a3339e-fb5e-47b1-ad05-4da199f07e0c",
      "name": "Sticky Note29",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        336
      ],
      "parameters": {
        "color": 4,
        "width": 208,
        "height": 688,
        "content": "## Human in the loop \n"
      },
      "typeVersion": 1
    },
    {
      "id": "407db8d6-4ec7-407d-9ee9-773cea0610aa",
      "name": "Sticky Note30",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        336
      ],
      "parameters": {
        "color": 3,
        "width": 928,
        "height": 688,
        "content": "## Generate image\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f423cee1-c365-4afc-8db7-6e705e2eabc8",
      "name": "Wait for images generated",
      "type": "n8n-nodes-base.wait",
      "position": [
        336,
        528
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "1cda8685-e8f4-42ba-ba84-4c8feecde218",
      "name": "Sticky Note31",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        336
      ],
      "parameters": {
        "color": 4,
        "width": 160,
        "height": 688,
        "content": "## Human in the loop \n"
      },
      "typeVersion": 1
    },
    {
      "id": "422fafd9-60d2-4254-8d61-b25bcfd862b1",
      "name": "Sticky Note32",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        336
      ],
      "parameters": {
        "color": 6,
        "width": 432,
        "height": 688,
        "content": "## Upload to Youtube"
      },
      "typeVersion": 1
    },
    {
      "id": "9ac402b4-256d-456f-a7b4-c5acc149b186",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        -128
      ],
      "parameters": {
        "width": 592,
        "height": 384,
        "content": "@[youtube](EOOgFveae-U)"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Wait to select by user",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Wait to select by user1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Analyze video2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze video2": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file1": {
      "main": [
        [
          {
            "node": "Upload a video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Final photo": {
      "main": [
        [
          {
            "node": "Download Photo 0",
            "type": "main",
            "index": 0
          },
          {
            "node": "Download Photo 1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Download Photo 2",
            "type": "main",
            "index": 0
          },
          {
            "node": "Download Photo 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Photo 0": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Photo 1": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Photo 2": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Photo 3": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate thumbnails": {
      "main": [
        [
          {
            "node": "Wait for images generated",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait to select by user": {
      "main": [
        [
          {
            "node": "Generate thumbnails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait to select by user1": {
      "main": [
        [
          {
            "node": "Download file1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model4": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Structured Output Parser4",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser4": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Wait for images generated": {
      "main": [
        [
          {
            "node": "Get Final photo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow transforms any video you drop into a Google Drive folder into a ready-to-publish YouTube upload. It analyzes the video with AI to craft 3 high-CTR title ideas, 3 long SEO-friendly descriptions (with timestamps), and 10–15 optimized tags. It then generates 4…

Source: https://n8n.io/workflows/10644/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Awesome N8N Templates. Uses notion, lmChatOpenAi, outputParserStructured, chainLlm. Event-driven trigger; 36 nodes.

Notion, OpenAI Chat, Output Parser Structured +8
AI & RAG

This workflow automates batch video publishing prep from a Google Drive folder with AI-generated, platform-specific copy and a simple approval queue in Google Sheets. Perfect for Agencies, content cre

Form Trigger, Google Drive, Google Gemini +5
AI & RAG

This workflow automates the extraction and processing of invoice data from PDFs stored in a Google Drive folder. It leverages Google Drive, Google Sheets, and Gemini AI to streamline invoice managemen

Google Gemini Chat, Google Sheets, HTTP Request +5
AI & RAG

Video uploaded to gdrive. And sponsor file with the similar formart "videotitle_sponsors.txt"

HTTP Request, Google Drive Trigger, Agent +4
AI & RAG

Who is this workflow template for?

Agent, Google Gemini Chat, Compression +5