Back to n8n Workflows

Realistic Video Interview Responses

Rhys Fisher Rhys Fisher

Translate appetite for answers into targeted question that is simulated in Rally, and used to generate a life like video clip using Veo3.

Realistic Video Interview Responses n8n workflow diagram

Click to expand

Summarize in
OR

Overview

Turn your AI persona into a hyper realistic video avatar in minutes. The workflow turns your appetite for a deep insight into an intentional question that triggers a simulation against a single reaction before producing a video response.

(this is v1 - I have a work in progress template that has a loop where if the answer does not satisfy an audience of experts, the questions is refined and a new clip generated)

📝 Step-by-Step Instructions

  1. Import the Workflow

    • Copy & paste the JSON template into your n8n instance via “Import from Clipboard”.

  2. Configure Rally API Calls, Audience ID, and Add your Product Category

    • In both “call AskRally” HTTP Request nodes, set your Rally API endpoint URL.

    • Attach your Rally bearer-token credential to each.

    • Open the “Ask Rally1” HTTP node and tweak the audience_id to the one that contains your target persona (make sure it is an audience in AskRally that contains just one persona)
  3. Configure Rally API Calls, Audience ID, and Add your Product Category

    • In both “call AskRally” HTTP Request nodes, set your Rally API endpoint URL.

    • Attach your Rally bearer-token credential to each.

    • Open the “Ask Rally1” HTTP node and tweak the audience_id to the one that contains your target persona (make sure it is an audience in AskRally that contains just one persona)
  4. Enable Google Drive & Gmail OAuth

    • In the “Google Drive” node, select/authorize your Drive OAuth credential.

  5. Adjust The "Write Description" Block

    • Tweak the message prompt and paste in your persona name and persona backstory in the correct places.

  6. Activate & Test

    • Turn on the workflow, trigger it manually (or wait for the schedule), and confirm everything works.

📋 Requirements

Integrations

  • Rally API – AI-persona testing service for simulating audience reactions

  • OpenAI – for both persona simulation and image generation

  • Google Drive – to stash generated images 

Credentials

  • Rally API Bearer Token (with voting-mode access)

  • OpenAI API Key

  • Google Drive OAuth2

🚀 n8n Workflow Template

{
  "active": false,
  "connections": {
    "Ask AI Personas": {
      "main": [
        [
          {
            "index": 0,
            "node": "Write Description",
            "type": "main"
          }
        ]
      ]
    },
    "Ask Rally1": {
      "main": [
        [
          {
            "index": 0,
            "node": "Description",
            "type": "main"
          }
        ]
      ]
    },
    "Completed?": {
      "main": [
        [
          {
            "index": 0,
            "node": "Get Url Video",
            "type": "main"
          }
        ],
        [
          {
            "index": 0,
            "node": "Wait 60 sec.",
            "type": "main"
          }
        ]
      ]
    },
    "Create Video1": {
      "main": [
        [
          {
            "index": 0,
            "node": "Wait 60 sec.",
            "type": "main"
          }
        ]
      ]
    },
    "Description": {
      "main": [
        [
          {
            "index": 0,
            "node": "Create Video1",
            "type": "main"
          }
        ]
      ]
    },
    "Get File Video": {
      "main": [
        [
          {
            "index": 0,
            "node": "Upload Drive",
            "type": "main"
          }
        ]
      ]
    },
    "Get Url Video": {
      "main": [
        [
          {
            "index": 0,
            "node": "Get File Video",
            "type": "main"
          }
        ]
      ]
    },
    "Get status": {
      "main": [
        [
          {
            "index": 0,
            "node": "Completed?",
            "type": "main"
          }
        ]
      ]
    },
    "Upload Drive": {
      "main": [
        [
          {
            "index": 0,
            "node": "Download Video",
            "type": "main"
          }
        ]
      ]
    },
    "Wait 60 sec.": {
      "main": [
        [
          {
            "index": 0,
            "node": "Get status",
            "type": "main"
          }
        ]
      ]
    },
    "Write Description": {
      "main": [
        [
          {
            "index": 0,
            "node": "Ask Rally1",
            "type": "main"
          }
        ]
      ]
    }
  },
  "id": "UhbVKL9Es0L2FUEh",
  "meta": {
    "instanceId": "7921b3cd29c1121b3ec4f2177acf06fe1f1325838297f593db7db4e9563eb98d"
  },
  "name": "Generate Veo3 Interview Responses",
  "nodes": [
    {
      "credentials": {
        "openAiApi": {
          "id": "5LyzIG7SUcgxGxlz",
          "name": "OpenAi account 2"
        }
      },
      "id": "e195a670-3692-451b-a27b-4363b3bb235f",
      "name": "Write Description",
      "parameters": {
        "messages": {
          "values": [
            {
              "content": "You are a director of qualitative research at a professional insights agency. Your task is to take an input request for insight and craft a single, emotionally resonant question designed to reveal deep, personal, and meaningful insights from our AI persona, \"________.\" The question should provoke introspection and vulnerability. Respond only with the final question\u2014no explanations or context.\n\nWho is Defender?\nENTER THE PERSONA BACKSTORY HERE",
              "role": "system"
            },
            {
              "content": "=Request for insight\n# {{ $json[\"What would you like to know?\"] }}\n"
            }
          ]
        },
        "modelId": {
          "__rl": true,
          "cachedResultName": "CHATGPT-4O-LATEST",
          "mode": "list",
          "value": "chatgpt-4o-latest"
        },
        "options": {}
      },
      "position": [
        -620,
        -140
      ],
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8
    },
    {
      "id": "7d05627b-d470-49bd-b896-94d24ad77eb1",
      "name": "Description",
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "76861df4-8aa5-4ddf-99ba-908ab20f9c6e",
              "name": "description",
              "type": "string",
              "value": "=A realistic video interview. The subject is a thoughtful Egyptian-American software engineer in his 30s. He has a warm, expressive face with short, dark hair and wears casual but clean clothing\u2014a simple t-shirt or button-up shirt, possibly with glasses. He\u2019s seated in a modest, sunlit living room, with books, plants, or a bike in the background\u2014suggesting intellectual curiosity and an urban lifestyle. He is speaking directly to a webcam in a reflective, slightly animated tone. His gestures are natural, and his delivery is thoughtful, with occasional pauses as if processing complex ideas. The video has the candid, unscripted feel, where the participant says something to the effect of {{ $json.responses[0].response }}"
            }
          ]
        },
        "options": {}
      },
      "position": [
        -100,
        -140
      ],
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4
    },
    {
      "id": "22ff723d-947a-408d-8d71-662e784aa26a",
      "name": "Sticky Note",
      "parameters": {
        "color": 4,
        "content": "## Generate an Interview Clip",
        "height": 560,
        "width": 1500
      },
      "position": [
        60,
        -280
      ],
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1
    },
    {
      "id": "80e797f1-b5f8-4b17-a254-7c7c0a30a1a6",
      "name": "Sticky Note1",
      "parameters": {
        "content": "## Ask Anything",
        "height": 560,
        "width": 940
      },
      "position": [
        -900,
        -280
      ],
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1
    },
    {
      "credentials": {
        "httpHeaderAuth": {
          "id": "nIInIL9RlBRoMNiE",
          "name": "Header Auth account"
        }
      },
      "id": "44f51825-654c-405d-8176-89c06c8f5b1f",
      "name": "Get status",
      "parameters": {
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {},
        "url": "=https://queue.fal.run/fal-ai/veo3/requests/{{ $(\u0027Create Video1\u0027).item.json.request_id }}/status"
      },
      "position": [
        600,
        -140
      ],
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2
    },
    {
      "id": "828fbc92-2a96-42a0-8353-9c802803d934",
      "name": "Wait 60 sec.",
      "parameters": {
        "amount": 60
      },
      "position": [
        400,
        -140
      ],
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "webhookId": "490facb8-d0ae-402e-ab59-a87720cf0bdd"
    },
    {
      "id": "abc4c36c-b4c3-41af-ab14-d04374fedc81",
      "name": "Completed?",
      "parameters": {
        "conditions": {
          "combinator": "and",
          "conditions": [
            {
              "id": "383d112e-2cc6-4dd4-8985-f09ce0bd1781",
              "leftValue": "={{ $json.status }}",
              "operator": {
                "name": "filter.operator.equals",
                "operation": "equals",
                "type": "string"
              },
              "rightValue": "COMPLETED"
            }
          ],
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          }
        },
        "options": {}
      },
      "position": [
        800,
        -140
      ],
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2
    },
    {
      "credentials": {
        "httpHeaderAuth": {
          "id": "nIInIL9RlBRoMNiE",
          "name": "Header Auth account"
        }
      },
      "id": "8818900b-bd52-4458-9ff6-5fdce7ed2cd0",
      "name": "Get Url Video",
      "parameters": {
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {},
        "url": "=https://queue.fal.run/fal-ai/veo3/requests/{{ $node[\u0027Create Video1\u0027].json.request_id }}\n"
      },
      "position": [
        1020,
        -160
      ],
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2
    },
    {
      "id": "3e2d5004-52da-4e30-8c8d-5e2c4a0d3a15",
      "name": "Get File Video",
      "parameters": {
        "options": {},
        "url": "={{ $node[\"Get Url Video\"].json.video.url }}"
      },
      "position": [
        1220,
        -140
      ],
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2
    },
    {
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "lolQfCBJjJ6XjXJ3",
          "name": "Google Drive account"
        }
      },
      "id": "e5228c4d-ae95-46c3-a6a0-c7efdb558d5b",
      "name": "Upload Drive",
      "parameters": {
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "url",
          "value": "https://drive.google.com/drive/u/0/folders/1rF0NoHeZNau5RMClN9HNiZLW2v0JxwQO"
        },
        "options": {}
      },
      "position": [
        1040,
        120
      ],
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3
    },
    {
      "id": "f17083d2-50a4-417f-8b3e-92ced6370b62",
      "name": "Ask AI Personas",
      "parameters": {
        "formDescription": "We will generate a synthetic interview clip for you as if you had asked them in the flesh.",
        "formFields": {
          "values": [
            {
              "fieldLabel": "What would you like to know?",
              "requiredField": true
            }
          ]
        },
        "formTitle": "Generate Reaction Video",
        "options": {},
        "responseMode": "lastNode"
      },
      "position": [
        -820,
        -140
      ],
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.2,
      "webhookId": "5af8d646-c0c7-45e1-a943-757612b2d452"
    },
    {
      "credentials": {
        "httpBearerAuth": {
          "id": "wSoUK2sXm0c8MCMq",
          "name": "Bearer Auth account 2"
        }
      },
      "id": "d5167b40-19f3-4b55-8a9f-7ffacc8d007c",
      "name": "Ask Rally1",
      "parameters": {
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "smart",
              "value": "true"
            },
            {
              "name": "provider",
              "value": "google"
            },
            {
              "name": "query",
              "value": "={{ $json.message.content }}"
            },
            {
              "name": "audience_id"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        },
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "url": "https://api.askrally.com/api/v1/chat"
      },
      "position": [
        -280,
        -140
      ],
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2
    },
    {
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "lolQfCBJjJ6XjXJ3",
          "name": "Google Drive account"
        }
      },
      "id": "40697514-4740-4291-8d2b-09bbea73df23",
      "name": "Download Video",
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "operation": "download",
        "options": {}
      },
      "position": [
        1260,
        120
      ],
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3
    },
    {
      "credentials": {
        "httpHeaderAuth": {
          "id": "nIInIL9RlBRoMNiE",
          "name": "Header Auth account"
        }
      },
      "id": "f0a2d548-95b8-435d-9816-0c9463d76b5b",
      "name": "Create Video1",
      "parameters": {
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "={{$json.description}}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "url": "https://queue.fal.run/fal-ai/veo3"
      },
      "position": [
        140,
        -140
      ],
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2
    }
  ],
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [],
  "versionId": "f5c06e44-9100-406c-8e2f-9ba81ba0b31d"
}

About the Author

Rhys Fisher

Rhys Fisher

Rhys Fisher is the COO & Co-Founder of Rally. He previously co-founded a boutique analytics agency called Unvanity, crossed the Pyrenees coast-to-coast via paraglider, and now watches virtual crowds respond to memes. Follow him on Twitter @virtual_rf