✅ Fábrica de Reels virales

Avanzado

Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 37 nodos.Utiliza principalmente nodos como If, Jwt, Set, Wait, Switch. Usar Veo, Shotstack y Postiz para automatizar la creación y publicación de videos ASMR de frutas de vidrio

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
  • Clave de API de OpenAI
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "pUSSmWHjoH7Vl0pv",
  "meta": {
    "instanceId": "a8eeb9d69b670b2972288895a06a59218e20265c82cda64bdc11ce0136d2f8fb"
  },
  "name": "✅ Viral Reels Factory",
  "tags": [],
  "nodes": [
    {
      "id": "45400d45-c09e-432e-9ad9-819fa5db5b56",
      "name": "Obtener Objetos Anteriores",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        224,
        416
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hNzWblAWsI_5u4RUK7kC3tSbR9riex94ZUuslhhDb8o/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hNzWblAWsI_5u4RUK7kC3tSbR9riex94ZUuslhhDb8o",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hNzWblAWsI_5u4RUK7kC3tSbR9riex94ZUuslhhDb8o/edit?usp=drivesdk",
          "cachedResultName": "VEO ASMR"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8",
      "name": "Agente de Prompt",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1296,
        416
      ],
      "parameters": {
        "text": "={{ $json.output.object }}",
        "options": {
          "systemMessage": "=# Overview  \nYou are an AI agent that specializes in generating text-to-video prompts optimized for ASMR-style videos using Google Veo 3. \n\nYou will receive the name of a fruit-shaped glass object (e.g. \"glass apple\", \"glass mango\", \"glass croissant\"). Your task is to generate a hyper-realistic, sensory-rich video prompt of that object being gently and artistically divided in a controlled, CGI-rendered simulation.\n\n---\n\n## Policy Compliance Reminder (CRITICAL):\n\nTo ensure your prompt is accepted and not filtered out by Google Veo, you **must follow these safety guidelines**:\n\n- The scene must depict a **fully stylized digital animation**. It must be clearly artificial, artistic, and safe.\n- Do **not** say the object is being “cut,” “sliced,” “shattered,” “cleaved,” or “stabbed.” These words are policy triggers.\n- Instead, describe the object as made from a **resin-like material that mimics glass** and emphasize **pre-designed seams or grooves**.\n- The object should appear to **separate or open smoothly** as part of an animation, not through destructive force.\n- You may include a “blade” or “tool” only if it is described as sleek, polished, choreographed, and interacting with pre-defined lines in the object.\n- Avoid all aggressive words like “snap,” “pierce,” “strike,” or “break.”\n- Reassure at the end that this is **100% CGI, digitally rendered, with no physical tools or real materials involved**.\n\n---\n\n## Core Requirements:\n\n- The video must feel cinematic, photorealistic, and calming.\n- Framing: 9:16 vertical. The object should fill most of the vertical space.\n- Scene: Static vertical close-up of a dark walnut cutting board and a fruit-shaped resin object with subtle translucency and color.\n- The object should be described as **amber, ruby, or emerald-colored resin** — not literal glass.\n- A **polished steel blade** may appear, but it must move gracefully and along a **pre-designed groove**.\n- The action must be safe, simulated, and elegant. No force or destruction implied.\n- Include four ASMR sound layers:\n  1. A soft tonal contact as the blade touches the surface  \n  2. A smooth glide sound as the form divides  \n  3. A muted wooden note as the tool completes its motion  \n  4. A light chime as the separated piece rests on the board  \n- Keep language soft, immersive, and artistic.\n\n---\n\n## Prompt Output Format:\n\n**Subject**: A sculpted fruit form resembling a [object], made from a colored, semi-translucent resin that mimics glass, rests on a dark walnut cutting board, framed in vertical 9:16.  \n**Setting**: Static vertical close-up, lit softly from above. Gentle light glides over the board’s surface and the object’s colored curves.  \n**Action**: A sleek, polished steel blade enters from the top right. In a graceful, choreographed motion, the blade glides along a pre-designed groove in the resin form. The material responds with a controlled, simulated separation, revealing a smooth, inner core. There are no splinters, no breakage — only a seamless division along internal seams designed for the animation.  \n**Style**: Stylized CGI realism. Every surface is rendered with photographic precision, but the entire scene is clearly artificial, safe, and elegant.  \n**Sound**: Four clean ASMR layers:  \n1. A crisp tone as the blade contacts the smooth resin  \n2. A subtle glide as the form separates  \n3. A soft wooden note as the blade rests  \n4. A delicate chime as the separated half settles onto the board  \n**Camera Motion**: Locked-off 9:16 composition. Focus shifts gently from the tool’s edge to the exposed interior.  \n**Composition**: The object is centered vertically. The blade enters cleanly from the top. No hands are visible.  \n**Ambiance**: No music, no speech — just layered, quiet cutting sounds in a controlled environment.  \n\nThis is a digitally rendered simulation — no real glass, tools, or objects are shown. The scene is entirely safe, artistic, and stylized for ASMR effect.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
      "name": "Agente de Ideas",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        896,
        416
      ],
      "parameters": {
        "text": "=Objects: {{ $json.objects.join(\", \") }}",
        "options": {
          "systemMessage": "=# Overview  \nYou are an AI agent that selects unique **fruits** for ASMR-style glass cutting videos.\n\n## Your Task  \nYou will receive a list of 7 fruits that have already been used.  \nYour job is to generate **one new fruit** that is **not on that list**, and would look visually compelling if it were made of **glass** and cut with a knife in a close-up ASMR video.\n\n## Requirements\n- The fruit must **not repeat** any of the 7 provided items.  \n- The fruit must have a **clear, recognizable shape** and be **physically feasible** to cut with a knife (even if it’s made of glass).  \n- Prioritize fruits that would look **aesthetic and interesting** with a translucent, colored glass texture.  \n- Do **not** explain or describe the fruit.\n\n## Output Format  \nOutput a JSON object with the following structure:\n\n{\n  \"object\": \"Glass [Object name]\",\n  \"caption\": \"Glass [Object name] ASMR\"\n}\n\nReplace `[object name]` with the newly generated fruit. Do not include any punctuation or commentary.\n\n## Example Output  \n{\n  \"object\": \"Glass Apple\",\n  \"caption\": \"Glass Apple ASMR\"\n}"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "5778efac-9d2f-4647-baab-c58859139eca",
      "name": "Agregar",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        448,
        416
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "ac1edde2-1fd2-4934-a07d-330446fb95ba",
      "name": "Establecer Lista de Objetos",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "cf818c10-ad6d-4349-830f-393529a79d62",
              "name": "objects",
              "type": "array",
              "value": "=[\"{{ $json.data[0].object }}\",\"{{ $json.data[1].object }}\"]"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "8bc3c143-c420-405b-994a-cdfcb7e23193",
      "name": "Objeto y Subtítulo",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1056,
        640
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"object\": {\n      \"type\": \"string\",\n      \"description\": \"A new object name in the format 'glass [object]', all lowercase with no punctuation.\"\n    },\n    \"caption\": {\n      \"type\": \"string\",\n      \"description\": \"A caption in the format 'glass [object] ASMR', matching the object field exactly.\"\n    }\n  },\n  \"required\": [\"object\", \"caption\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "7f96f17f-c901-42b5-9a70-ad18a6056f1f",
      "name": "Al hacer clic en 'Ejecutar flujo de trabajo'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        416
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "7fbb0979-6e84-433f-9a19-279b9f4e6f3b",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        928,
        640
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "10073bf9-c998-47dd-9c34-91d9cc3c1455",
      "name": "SET",
      "type": "n8n-nodes-base.set",
      "position": [
        1696,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "84fea8d5-e7cc-4519-963f-d2ae988337b5",
              "name": "PROJECT_ID",
              "type": "string",
              "value": ""
            },
            {
              "id": "1c227cbf-eb4a-4cb6-b13a-64900385a0e8",
              "name": "CLIENT_EMAIL",
              "type": "string",
              "value": ""
            },
            {
              "id": "d2e61510-9510-46e7-9025-82b3e5825ed7",
              "name": "LOCATION_ID",
              "type": "string",
              "value": "us-central1"
            },
            {
              "id": "050b1715-4fb9-4c60-9e14-ef07da4cd3e9",
              "name": "API_ENDPOINT",
              "type": "string",
              "value": "us-central1-aiplatform.googleapis.com"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6968fc32-9cde-4810-9e33-bdf0fdb82684",
      "name": "JWT",
      "type": "n8n-nodes-base.jwt",
      "position": [
        1920,
        416
      ],
      "parameters": {
        "options": {},
        "useJson": true,
        "claimsJson": "={\n    \"iss\": \"{{ $json.CLIENT_EMAIL }}\",\n    \"scope\": \"https://www.googleapis.com/auth/cloud-platform\",\n    \"aud\": \"https://www.googleapis.com/oauth2/v4/token\",\n    \"exp\": {{ Math.floor(Date.now() / 1000) + 3500 }},\n    \"iat\": {{ Math.floor(Date.now() / 1000) }}\n}\n"
      },
      "typeVersion": 1
    },
    {
      "id": "20094117-b83a-49c3-b3a9-fdd4a74f5fec",
      "name": "OBTENER TOKEN",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2144,
        416
      ],
      "parameters": {
        "url": "https://www.googleapis.com/oauth2/v4/token",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "grant_type",
              "value": "urn:ietf:params:oauth:grant-type:jwt-bearer"
            },
            {
              "name": "assertion",
              "value": "={{ $json.token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f836567d-e5a9-457c-89fb-2c42d2123867",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        3040,
        416
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "4642d47b-fafc-4487-8799-1f1e0e544ef1",
                    "operator": {
                      "type": "string",
                      "operation": "exists",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.response.videos[0].bytesBase64Encoded }}",
                    "rightValue": ""
                  }
                ]
              }
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "9a64b984-2aa0-48e8-8c1b-dd7fc9ccfb61",
      "name": "Generar Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2368,
        416
      ],
      "parameters": {
        "url": "=https://{{ $('SET').first().json.API_ENDPOINT }}/v1/projects/{{ $('SET').first().json.PROJECT_ID }}/locations/{{ $('SET').first().json.LOCATION_ID }}/publishers/google/models/veo-3.0-generate-preview:predictLongRunning ",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"endpoint\": \"projects/{{ $('SET').first().json.PROJECT_ID }}/locations/{{ $('SET').first().json.LOCATION_ID }}/publishers/google/models/veo-3.0-generate-preview\",\n  \"instances\": [\n    {\n      \"prompt\": {{ JSON.stringify($('Prompt Agent').item.json.output) }}\n    }\n  ],\n  \"parameters\": {\n    \"aspectRatio\": \"16:9\",\n    \"sampleCount\": 1,\n    \"durationSeconds\": \"8\",\n    \"personGeneration\": \"allow_all\",\n    \"addWatermark\": false,\n    \"includeRaiReason\": true,\n    \"generateAudio\": true\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('GET TOKEN').item.json.access_token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "deefd66e-6603-4e02-b867-d3fafc720fd9",
      "name": "Obtener Estado",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2816,
        336
      ],
      "parameters": {
        "url": "=https://{{ $('SET').first().json.API_ENDPOINT }}/v1/projects/{{ $('SET').first().json.PROJECT_ID }}/locations/{{ $('SET').first().json.LOCATION_ID }}/publishers/google/models/veo-3.0-generate-preview:fetchPredictOperation",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "operationName",
              "value": "={{ $json.name }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('GET TOKEN').item.json.access_token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4e474315-2704-4c7b-aeb6-65daf8a01ed9",
      "name": "Esperar",
      "type": "n8n-nodes-base.wait",
      "position": [
        2592,
        416
      ],
      "webhookId": "59528177-3bd5-4113-a61c-55c42a3bb52d",
      "parameters": {
        "amount": 20
      },
      "typeVersion": 1.1
    },
    {
      "id": "10550efe-791e-4da3-9f9f-005ee678fdac",
      "name": "Convertir a Archivo",
      "type": "n8n-nodes-base.convertToFile",
      "notes": "At this step, the video should be generated and ready to convert to 9:16 aspect ratio",
      "position": [
        3264,
        416
      ],
      "parameters": {
        "options": {},
        "operation": "toBinary",
        "sourceProperty": "response.videos[0].bytesBase64Encoded"
      },
      "notesInFlow": true,
      "typeVersion": 1.1
    },
    {
      "id": "5e677094-e6bc-41e4-a6e1-d76fa293d47e",
      "name": "Renderizando...",
      "type": "n8n-nodes-base.wait",
      "position": [
        3936,
        416
      ],
      "webhookId": "25193fe1-b3c9-48f5-ad10-89ad74293042",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "7258109f-ae30-4c4f-866a-b8f09aaab255",
      "name": "Descargar video final",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4832,
        416
      ],
      "parameters": {
        "url": "={{ $('Done?').item.json.response.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "f8714eae-ab8b-46dd-a819-223c03ecc03b",
      "name": "Subir a GCS (Para acceso por URL)",
      "type": "n8n-nodes-base.googleCloudStorage",
      "position": [
        3488,
        416
      ],
      "parameters": {
        "resource": "object",
        "operation": "create",
        "bucketName": "veo_courses",
        "createData": {},
        "objectName": "ViralReelz",
        "createQuery": {},
        "requestOptions": {},
        "encryptionHeaders": {}
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 2000
    },
    {
      "id": "b5b22d9c-93db-4a82-8db2-59eb6c88bb2f",
      "name": "Cambiar video a 9:16",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3712,
        416
      ],
      "parameters": {
        "url": "https://api.shotstack.io/v1/render",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n\t\"timeline\": {\n\t\t\"tracks\": [\n\t\t\t{\n\t\t\t\t\"clips\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"asset\": {\n\t\t\t\t\t\t\t\"type\": \"video\",\n\t\t\t\t\t\t\t\"src\": \"{{ $json.mediaLink }}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"start\": 0,\n\t\t\t\t\t\t\"length\": 8,\n\t\t\t\t\t\t\"fit\": \"crop\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"output\": {\n\t\t\"format\": \"mp4\",\n\t\t\"aspectRatio\": \"9:16\",\n\t\t\"resolution\": \"hd\"\n\t}\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "fd649de0-eaf2-4505-894d-42ae07eb9a52",
      "name": "¿Listo?",
      "type": "n8n-nodes-base.if",
      "position": [
        4384,
        416
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "fc24d410-040a-4ca6-b70f-7473af617bd9",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.response.status }}",
              "rightValue": "done"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "1d4a8e28-74c8-4709-b5d2-b60e6aacbbbb",
      "name": "Configurarme",
      "type": "n8n-nodes-base.set",
      "position": [
        4608,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0f5772c0-1f84-45e9-b131-8be1c8dd6d85",
              "name": "postiz_api",
              "type": "string",
              "value": "https://api.postiz.com/public/v1"
            },
            {
              "id": "f3d9536a-3dc9-4673-b774-0434ca64575f",
              "name": "share_title",
              "type": "string",
              "value": "={{ $('Idea Agent').item.json.output.caption }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "3396327d-8cbf-4301-91a0-e1de365c0139",
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4560,
        192
      ],
      "parameters": {
        "color": 3,
        "width": 220,
        "height": 380,
        "content": "# ❗ Config"
      },
      "typeVersion": 1
    },
    {
      "id": "b41ab464-3fb0-411f-8216-266fdca03b9d",
      "name": "¿Listo?1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4160,
        336
      ],
      "parameters": {
        "url": "=https://api.shotstack.io/v1/render/{{ $('Turn video to 9:16').item.json.response.id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "264a12c7-e626-4247-a8f4-0df60347574e",
      "name": "Subir video a Postiz",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5056,
        416
      ],
      "parameters": {
        "url": "=https://api.postiz.com/public/v1/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "8e937887-b050-462a-8a38-0e7e7cd17e4e",
      "name": "Obtener integraciones de Postiz",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5280,
        416
      ],
      "parameters": {
        "url": "=https://api.postiz.com/public/v1/integrations",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "013ae745-6a51-45bd-967f-5cc98ecd776f",
      "name": "Switch1",
      "type": "n8n-nodes-base.switch",
      "position": [
        5504,
        400
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "tiktok",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "3ff74ffe-3f82-437d-9218-bce4f7551211",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.identifier }}",
                    "rightValue": "tiktok"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "youtube",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "2edc7f5f-18cf-45e2-9a10-03c6ee2a062f",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.identifier }}",
                    "rightValue": "youtube"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "instagram",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "f461c331-7506-486b-ab4a-de03823f82f9",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.identifier }}",
                    "rightValue": "instagram"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "99f9050c-7fbc-4ebb-b1fc-26cf1d5fac43",
      "name": "Programar YouTube",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5728,
        416
      ],
      "parameters": {
        "url": "=https://api.postiz.com/public/v1/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"type\": \"schedule\",\n  \"date\": \"{{ $now.plus(1, 'days').toISO() }}\",\n  \"tags\": [],\n  \"shortLink\": false,\n  \"posts\": [\n    {\n      \"integration\": {\n        \"id\": \"{{ $('Switch1').item.json.id }}\"\n      },\n      \"value\": [\n        {\n          \"content\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n          \"image\": [\n            {\n              \"id\": \"{{ $('Upload video to Postiz').item.json.id }}\",\n              \"path\": \"{{ $('Upload video to Postiz').item.json.path }}\"\n            }\n          ]\n        }\n      ],\n      \"settings\": {\n        \"title\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n        \"type\": \"public\"\n      }\n    }\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "2e16d4b6-1fee-4948-bb5f-c5442559b053",
      "name": "Programar TikTok",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5728,
        224
      ],
      "parameters": {
        "url": "=https://api.postiz.com/public/v1/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"type\": \"schedule\",\n  \"date\": \"{{ $now.plus(1, 'days').toISO() }}\",\n  \"tags\": [],\n  \"shortLink\": false,\n  \"posts\": [\n    {\n      \"integration\": {\n        \"id\": \"{{ $('Switch1').item.json.id }}\"\n      },\n      \"value\": [\n        {\n          \"content\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n          \"image\": [\n            {\n              \"id\": \"{{ $('Upload video to Postiz').item.json.id }}\",\n              \"path\": \"{{ $('Upload video to Postiz').item.json.path }}\"\n            }\n          ]\n        }\n      ],\n      \"settings\": {\n        \"title\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n        \"privacy_level\": \"PUBLIC_TO_EVERYONE\",\n        \"duet\": \"false\",\n        \"stitch\": \"false\",\n        \"comment\": \"true\",\n        \"autoAddMusic\": \"no\",\n        \"brand_content_toggle\": \"false\",\n        \"brand_organic_toggle\": \"false\",\n        \"content_posting_method\": \"DIRECT_POST\"\n      }\n    }\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "9485041f-7139-4a2f-917f-0d05f0fe41ea",
      "name": "Programar Instagram",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5728,
        608
      ],
      "parameters": {
        "url": "=https://api.postiz.com/public/v1/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"type\": \"schedule\",\n  \"date\": \"{{ $now.plus(1, 'days').toISO() }}\",\n  \"tags\": [],\n  \"shortLink\": false,\n  \"posts\": [\n    {\n      \"integration\": {\n        \"id\": \"{{ $('Switch1').item.json.id }}\"\n      },\n      \"value\": [\n        {\n          \"content\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n          \"image\": [\n            {\n              \"id\": \"{{ $('Upload video to Postiz').item.json.id }}\",\n              \"path\": \"{{ $('Upload video to Postiz').item.json.path }}\"\n            }\n          ]\n        }\n      ],\n      \"settings\": {\n        \"title\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n        \"post_type\": \"post\"\n      }\n    }\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "301a2fb3-f381-4dc3-b57c-0a7c398f30b8",
      "name": "Nota Adhesiva7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5152,
        112
      ],
      "parameters": {
        "color": 6,
        "width": 464,
        "height": 496,
        "content": "## Checking the available channels"
      },
      "typeVersion": 1
    },
    {
      "id": "dd760b85-96e1-4b05-abcc-0d86a3d6c2ee",
      "name": "Nota Adhesiva8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5616,
        112
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 656,
        "content": "## Scheduling the posts"
      },
      "typeVersion": 1
    },
    {
      "id": "6d0e6ac4-efb4-455c-bed4-4c746a901179",
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        -176
      ],
      "parameters": {
        "width": 432,
        "height": 1376,
        "content": "🎥 Veo Machine Reels Factory — Full User Guide\n🧭 Introduction\n\nThe Veo Machine Reels Factory is an automated content creation system built in n8n that turns creative ideas into fully rendered ASMR-style glass fruit reels, ready to post on TikTok, YouTube Shorts, and Instagram Reels.\n\nThis template connects multiple AI and automation services into a single, repeatable pipeline. It eliminates manual steps — from concept brainstorming to posting — allowing creators or marketing teams to produce viral short-form videos hands-free.\n\n⚙️ How It Works (In Short)\n\nThe workflow starts automatically every 8 hours (or manually when triggered).\n\nIt checks a Google Sheet to see which fruits have already been used.\n\nAn AI “Idea Agent” selects a new, unique glass fruit concept.\n\nAnother AI “Prompt Agent” writes a cinematic Google Veo 3 prompt describing the video.\n\nThe system sends that prompt to Google Veo, which generates the actual video file.\n\nThe video is automatically:\n\nConverted to 9:16 vertical format via Shotstack\n\nUploaded to Google Cloud Storage\n\nPosted to TikTok, YouTube, and Instagram through Postiz API\n\n🧱 Requirements\n\nBefore running this workflow, make sure you have the following ready:\n\nCategory\tRequirement\nGoogle Cloud\tProject ID, Service Account Email, and Storage Bucket (e.g., veo_courses)\nVeo Access\tAccess to Google Veo 3.0 API (through Vertex AI or similar endpoint)\nGoogle Sheets\tA sheet with previous fruit ideas (used for avoiding duplicates)\nOpenAI Account\tAPI key configured in n8n credentials\nShotstack Account\tAPI key (for cropping to 9:16)\nPostiz Account\tActive integrations for TikTok, YouTube, and Instagram\nn8n Instance\tVersion supporting LangChain, HTTP, JWT, and Google nodes\n🧩 Workflow Structure Overview\n\nThe workflow can be divided into five main parts:\n\n🕒 Automation & Data Input\n\n🧠 AI Generation (Idea + Prompt Creation)\n\n🎬 Video Generation with Google Veo\n\n📱 Video Conversion & Upload\n\n🚀 Auto-Publishing to Social Media\n\nLet’s go through each part in detail."
      },
      "typeVersion": 1
    },
    {
      "id": "2d938bce-ddf1-4dee-bbdf-cb95df7b50d3",
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        80
      ],
      "parameters": {
        "color": 5,
        "width": 464,
        "height": 256,
        "content": "How to Use\n\nMake sure your Google Sheet is linked and accessible with the same Google account connected to n8n.\n\nAdd previously used fruits in column A (one per line).\n\nIf you want to trigger it manually, click “Execute Workflow” in n8n instead of waiting for the schedule.\n\nResult:\nThe system prepares a list of “used” fruits to feed into the AI for idea generation"
      },
      "typeVersion": 1
    },
    {
      "id": "90804430-3fdd-4d42-a70c-edec8b67234f",
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        64
      ],
      "parameters": {
        "width": 816,
        "height": 288,
        "content": "🧠 PART 2 — AI Generation (Idea + Prompt Creation)\nPurpose\n\nThis section generates:\n\nA new “glass fruit” idea that hasn’t been used before.\n\nA cinematic Veo-compatible text prompt to generate the ASMR video.\n\nIncludes\n\nIdea Agent (LangChain Node + OpenAI GPT-4.1-mini)\n\nObject & Caption Output Parser\n\nPrompt Agent (LangChain Node + GPT-4.1-mini)\n\nHow it Works\n\nIdea Agent takes your list of used fruits and outputs a new idea like:\n\n{ \"object\": \"Glass Mango\", \"caption\": \"Glass Mango ASMR\" }\n\n\nOutput Parser ensures this format is clean JSON.\n\nPrompt Agent then writes a detailed text-to-video prompt for Google Veo based on that fruit.\n\nHow to Use\n\nNo manual input needed — this runs automatically.\n\nYou can tweak the creative tone or style rules by editing the system message in the Prompt Agent.\n\nIf you want shorter or different themes, adjust the descriptive text in the “Prompt Agent” node.\n\nResult:\nYou get a hyper-realistic, safe, cinematic prompt that’s fully compliant with Veo content policies."
      },
      "typeVersion": 1
    },
    {
      "id": "c0f58447-7ac7-4d0a-96f6-96a2eed9ea5f",
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        64
      ],
      "parameters": {
        "width": 736,
        "height": 288,
        "content": "🎬 PART 3 — Video Generation (Google Veo 3.0)\nPurpose\n\nThis part authenticates with Google Cloud, sends the prompt to Veo, and retrieves the rendered video.\n\nIncludes\n\nSET (Google Cloud credentials)\n\nJWT + GET TOKEN (Authentication)\n\nGenerate Video (POST request to Veo API)\n\nWait → Fetch Status → Switch (Checks generation progress)\n\nHow it Works\n\nThe workflow builds a secure JWT, exchanges it for an OAuth token, and calls the Veo API.\n\nVeo starts generating the ASMR-style video based on the AI prompt.\n\nThe workflow waits, then checks every few seconds until Veo’s API confirms the video is ready.\n\nOnce done, it retrieves the base64-encoded video data.\n\nHow to Use\n\nYou must fill the PROJECT_ID and CLIENT_EMAIL in the SET node with your actual Google Cloud details.\n\nEnsure the Veo API endpoint (aiplatform.googleapis.com) matches your project’s region.\n\nThe “Wait” time can be increased if your videos take longer to generate.\n\nResult:\nA finished .mp4 video is now ready for post-processing."
      },
      "typeVersion": 1
    },
    {
      "id": "29ab5742-a777-4c85-a035-aa08a3b7abf5",
      "name": "Nota Adhesiva5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3104,
        64
      ],
      "parameters": {
        "width": 928,
        "height": 288,
        "content": "📱 PART 4 — Video Conversion & Upload\nPurpose\n\nPrepares the video for social media: converting to 9:16 format and uploading it to cloud storage.\n\nIncludes\n\nConvert to File\n\nUpload to Google Cloud Storage\n\nShotstack Conversion (Turn video to 9:16)\n\nRendering + Done Checks\n\nHow it Works\n\nConverts Veo’s output to an actual video file.\n\nUploads it to your Google Cloud Storage bucket (veo_courses).\n\nSends the video to Shotstack, which crops and renders it vertically (9:16).\n\nWaits until Shotstack finishes processing.\n\nHow to Use\n\nMake sure your GCS bucket exists and allows file uploads.\n\nAdd your Shotstack API key in n8n credentials.\n\nOptional: You can adjust video length or resolution inside the Shotstack JSON body.\n\nResult:\nYou now have a finished vertical HD ASMR video stored in the cloud."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "2615cbe8-8824-4f29-8654-103fabc62edb",
  "connections": {
    "6968fc32-9cde-4810-9e33-bdf0fdb82684": {
      "main": [
        [
          {
            "node": "20094117-b83a-49c3-b3a9-fdd4a74f5fec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "10073bf9-c998-47dd-9c34-91d9cc3c1455": {
      "main": [
        [
          {
            "node": "6968fc32-9cde-4810-9e33-bdf0fdb82684",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4e474315-2704-4c7b-aeb6-65daf8a01ed9": {
      "main": [
        [
          {
            "node": "deefd66e-6603-4e02-b867-d3fafc720fd9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fd649de0-eaf2-4505-894d-42ae07eb9a52": {
      "main": [
        [
          {
            "node": "1d4a8e28-74c8-4709-b5d2-b60e6aacbbbb",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "5e677094-e6bc-41e4-a6e1-d76fa293d47e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b41ab464-3fb0-411f-8216-266fdca03b9d": {
      "main": [
        [
          {
            "node": "fd649de0-eaf2-4505-894d-42ae07eb9a52",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f836567d-e5a9-457c-89fb-2c42d2123867": {
      "main": [
        [
          {
            "node": "10550efe-791e-4da3-9f9f-005ee678fdac",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "4e474315-2704-4c7b-aeb6-65daf8a01ed9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "013ae745-6a51-45bd-967f-5cc98ecd776f": {
      "main": [
        [
          {
            "node": "2e16d4b6-1fee-4948-bb5f-c5442559b053",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "99f9050c-7fbc-4ebb-b1fc-26cf1d5fac43",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "9485041f-7139-4a2f-917f-0d05f0fe41ea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5778efac-9d2f-4647-baab-c58859139eca": {
      "main": [
        [
          {
            "node": "ac1edde2-1fd2-4934-a07d-330446fb95ba",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "20094117-b83a-49c3-b3a9-fdd4a74f5fec": {
      "main": [
        [
          {
            "node": "9a64b984-2aa0-48e8-8c1b-dd7fc9ccfb61",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f7f6370e-f9bd-48d3-a5db-e695fd9c2048": {
      "main": [
        [
          {
            "node": "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1d4a8e28-74c8-4709-b5d2-b60e6aacbbbb": {
      "main": [
        [
          {
            "node": "7258109f-ae30-4c4f-866a-b8f09aaab255",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "deefd66e-6603-4e02-b867-d3fafc720fd9": {
      "main": [
        [
          {
            "node": "f836567d-e5a9-457c-89fb-2c42d2123867",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8": {
      "main": [
        [
          {
            "node": "10073bf9-c998-47dd-9c34-91d9cc3c1455",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5e677094-e6bc-41e4-a6e1-d76fa293d47e": {
      "main": [
        [
          {
            "node": "b41ab464-3fb0-411f-8216-266fdca03b9d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9a64b984-2aa0-48e8-8c1b-dd7fc9ccfb61": {
      "main": [
        [
          {
            "node": "4e474315-2704-4c7b-aeb6-65daf8a01ed9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "10550efe-791e-4da3-9f9f-005ee678fdac": {
      "main": [
        [
          {
            "node": "f8714eae-ab8b-46dd-a819-223c03ecc03b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ac1edde2-1fd2-4934-a07d-330446fb95ba": {
      "main": [
        [
          {
            "node": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "45400d45-c09e-432e-9ad9-819fa5db5b56": {
      "main": [
        [
          {
            "node": "5778efac-9d2f-4647-baab-c58859139eca",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8bc3c143-c420-405b-994a-cdfcb7e23193": {
      "ai_outputParser": [
        [
          {
            "node": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "7fbb0979-6e84-433f-9a19-279b9f4e6f3b": {
      "ai_languageModel": [
        [
          {
            "node": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "b5b22d9c-93db-4a82-8db2-59eb6c88bb2f": {
      "main": [
        [
          {
            "node": "5e677094-e6bc-41e4-a6e1-d76fa293d47e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7258109f-ae30-4c4f-866a-b8f09aaab255": {
      "main": [
        [
          {
            "node": "264a12c7-e626-4247-a8f4-0df60347574e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "264a12c7-e626-4247-a8f4-0df60347574e": {
      "main": [
        [
          {
            "node": "8e937887-b050-462a-8a38-0e7e7cd17e4e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e937887-b050-462a-8a38-0e7e7cd17e4e": {
      "main": [
        [
          {
            "node": "013ae745-6a51-45bd-967f-5cc98ecd776f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7f96f17f-c901-42b5-9a70-ad18a6056f1f": {
      "main": [
        [
          {
            "node": "45400d45-c09e-432e-9ad9-819fa5db5b56",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f8714eae-ab8b-46dd-a819-223c03ecc03b": {
      "main": [
        [
          {
            "node": "b5b22d9c-93db-4a82-8db2-59eb6c88bb2f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Creación de contenido, IA Multimodal

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos37
Categoría2
Tipos de nodos15
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34