Mindket

UGC-style video ad from a product and a creator photo

Newversion 1 · updated

Overview

An n8n workflow that turns a product photo, a photo of a person and one line of direction into a casual, phone-shot video ad. WaveSpeedAI blends the photos, Kie.ai renders a still and Veo clips, and fal.ai joins them.

UGC-style video ad from a product and a creator photo is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

At a glance

Runs in
  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file. The waits hold each run open for several minutes
  • Social ads and posts: the 9:16 default suits Reels, TikTok and Shorts
  • A drive or a sheet: add a node after HTTP Request2 to keep the video

Platform

Connects 5 apps

How it works

Trigger

UGC ad form

It starts when someone sends the UGC ad form with:

  • A line of direction, in UGC Instruction
  • Two photos in Images, usually a product and a person

Actions

  1. Uploads each photo to Dropbox and makes a public link
  2. WaveSpeedAI blends the two photos into one picture
  3. An OpenAI model describes it, and an agent writes the prompt for a phone-style still
  4. Kie.ai renders the still, and a second agent writes 8-second scenes with their lines
  5. Kie.ai’s Veo renders each scene, and fal.ai joins the clips into one video

Result

A casual, phone-shot video ad of a person showing your product, as a file in the run

Integrations

What you need before you start.

Dropbox

Photo hosting

Stores each photo and gives it a public link that the blending model can fetch.

NeedsA Dropbox credential, and an access token typed into two headers

WaveSpeedAI

Image blending

Runs FLUX Kontext dev on the two photos and returns one combined picture.

NeedsWaveSpeedAI API key, typed into two headers

OpenAI

Vision and language models

Describes the combined picture, then runs gpt-4.1 for the two agents that write the image prompt and the scenes.

NeedsOpenAI API key

Kie.ai

Image and video generation

Renders the phone-style still with its 4o Image model, then each scene with Veo.

NeedsKie.ai API key, typed into four headers, and credit

fal.ai

Video merge

Joins the clips into one video with its FFmpeg merge, through fal’s queue.

Needsfal.ai API key, typed into two headers

Workflow check

Checked by Mindket on 13 Nov 2026

Steps
29 steps, starting on a form
AI
3 steps call an AI model: Describe Img1, Generate Image and Generate Video
Sign-ins
Signs in to: Dropbox, OpenAI, Kie.ai and WaveSpeedAI
API keys
No API key is left in the file; 4 blanks in it for your own key
Step types
Mindket’s checker reads all 10 of its step types

Read from the workflow’s file, not from a run.

About

What it is

This n8n workflow turns two photos and a line of direction into a short, casual video ad of the kind creators post. A form takes your instruction and the photos, usually a product and a person. Dropbox hosts them, WaveSpeedAI blends them into one picture and an OpenAI model describes it. Two agents on gpt-4.1 write an image prompt and the video scenes. Kie.ai renders a new still and then 8-second clips with Veo, and fal.ai joins the clips. Thirty-three working nodes and five sticky notes make it up.

Who it suits

Small brands, and the marketers who make their social ads, who want a phone-shot look without hiring a creator for every product. Skip it if you are new to n8n. It needs five accounts, waits for each render and can loop for a long time when an image fails.

Who uses it, and how
IndustryWho uses itHow they use itExample
Beauty and skincareBrand ownersSend a product shot and a model photo with one line of directionA serum brand gets a clip of a woman at a bathroom mirror talking about the texture.
DrinksMarketersAsk for a longer ad, so the agent writes several 8-second scenesA cold brew maker asks for 24 seconds and gets three scenes joined into one video.
AgenciesCreative teamsSketch a UGC idea before booking a real creatorAn agency shows a client a rough clip of the idea before the shoot.
ApparelSocial media managersTry one product with different people and settingsA sneaker brand runs one shoe with three different people and keeps the best clip.

You need solid n8n and five accounts: OpenAI, Dropbox, WaveSpeedAI, Kie.ai and fal.ai. Its author puts setup at about 19 minutes with the accounts ready, and one node also needs a new model, because the file names one that OpenAI has retired.

Where to use it

Any n8n that can reach the five services runs it. The finished video comes back as a file in the run’s data, with its address in Code1.

  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file. The waits hold each run open for several minutes
  • Social ads and posts: the 9:16 default suits Reels, TikTok and Shorts
  • A drive or a sheet: add a node after HTTP Request2 to keep the video

Setup

Get it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Collect the five keys before you import it.

What you need first
NeedDetail
n8nOn n8n Cloud or on a server of your own
OpenAIAn API key for gpt-4.1 and a current model that reads images
DropboxA Dropbox credential in n8n, and an access token for the two sharing calls
WaveSpeedAIAn API key, for the FLUX Kontext dev multi-image model
Kie.aiAn API key with credit, for its 4o Image model and Veo
fal.aiAn API key, for the FFmpeg merge
  1. In n8n, create a workflow, open its menu, choose Import from File and pick workflow.json.
  2. Add an OpenAI credential and select it in Describe Img1 and GPT1.
  3. In Describe Img1, swap chatgpt-4o-latest for a current model that reads images, such as gpt-4.1.
  4. Add a Dropbox credential and select it in Upload a file. In HTTP Request4 and HTTP Request6, replace <YOUR_DROPBOX_TOKEN> in the Authorization header with a Dropbox access token, brackets included.
  5. In HTTP Request and HTTP Request1, replace <YOUR_WAVESPEED_KEY> the same way.
  6. In Create Image1, Get Image1, Create Video1 and Get Video1, replace <YOUR_KIE_KEY> with your Kie.ai key.
  7. In Combine Clips1 and Get Final Video1, replace <YOUR_FAL_KEY> with your fal.ai key. That header reads Key, a space and the key.
  8. Save, open the form’s test address, attach two photos and write one line. Press Publish when a test clip comes back.

OpenAI’s deprecations page, read on 2 November 2026, lists chatgpt-4o-latest as shut down on 17 February 2026. That is why step 3 is there.

How to use it

Open the form and attach exactly two photos: the product, and the person who will hold it. Write the ad in one line under UGC Instruction, with the setting, the mood, the length and the frame. The form confirms at once. The run then takes several minutes, since it waits for each render. The video arrives as a file in the run’s data under Executions.

What to change for a different result
To changeWhere
The look of the stillThe system message of Generate Image, which asks for amateur phone-photo realism
What the person saysYour own words in the instruction, or the system message of Generate Video, which keeps a line under 150 characters
LengthYour instruction. Each scene lasts 8 seconds, and the agent divides the length you ask for by 8
Frame and modelYour instruction. The agent picks 9:16 and veo3_fast unless you ask for 16:9 or veo3
WaitsWait at 20 seconds, Wait 4 and Wait1 at 60, Wait at 200

Example

You attach a photo of a can of sparkling water and a photo of a woman in her twenties, and write this.

She sits in her car after the gym, opens the can and says how refreshing it is. 16 seconds, vertical.

WaveSpeedAI puts the two into one picture, and the vision model describes the can’s brand and colours and the woman’s look in YAML. Next, Generate Image writes a prompt for a new phone-style still of her holding the can. Generate Video divides 16 by 8 and writes two scenes in its parser’s shape, cut here:

{
  "scenes": [
    { "video_prompt": "dialogue: …\naction: …\ncamera: …", "aspect_ratio_video": "9:16", "model": "veo3_fast" },
    { "video_prompt": "…", "aspect_ratio_video": "9:16", "model": "veo3_fast" }
  ]
}

Kie.ai renders each scene from the still. fal.ai joins the two clips, and the last node downloads one 16-second video.

For newcomers and experts

If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A Wait node pauses the run. The If nodes after the image and the merge send it back to wait again until the result is ready. Run one test with a short instruction, then open each node under Executions to see where a key or a render failed.

For experts. The run has three stages, the ones its sticky notes name: one still, the clips, then the merge.

The model or service behind each step
StepModel or serviceWhat to know
HTTP RequestFLUX Kontext dev, multi-image, on WaveSpeedAITakes the first two photo links only. HTTP Request1 reads the result after one fixed 20-second wait
Describe Img1chatgpt-4o-latest in the file, now retiredAnswers in YAML for a product, a character or both
Generate Image and Generate Videogpt-4.1 through GPT1, with Think1Each has a parser with auto-fix on, so a reply in the wrong shape costs one more call
Create Image1Kie.ai’s 4o Image modelIf 1 checks it every 60 seconds until its success flag is 1
Create Video1Veo on Kie.ai, veo3_fast or veo3One request every 3 seconds, then a single 200-second wait with no status check
Combine Clips1fal.ai’s FFmpeg mergeIf 3 checks it every 60 seconds until a video address appears

The two Dropbox calls make each photo public and turn its link into a raw file address, which is what WaveSpeedAI fetches.

Good to know

Five vendors bill a run, and four gaps can stop it or keep it waiting.

  • Billing: WaveSpeedAI bills the blend, Kie.ai the still and each clip, fal.ai the merge, and OpenAI the description and the two agents
  • Two photos: the blend sends the first two links and nothing else, so one photo leaves an empty address and a third is ignored
  • A reused file name: a photo whose name already has a Dropbox link takes the first output of If, which leads nowhere, so the run goes on without it. Rename the photo, or add {{ $now.toMillis() }} to the path in Upload a file
  • A failed image: it never meets the test in If 1, so the run checks again every minute until you stop it. Set a timeout under the workflow’s Settings
  • Unchecked clips: Get Video1 reads each clip once, after 200 seconds. A clip still rendering has no address and drops out of the merge
  • Dropbox token: one made in Dropbox’s App Console expires after a few hours. For a lasting setup, switch both sharing calls to a Dropbox OAuth2 credential under Authentication
  • The image model: OpenAI’s deprecations page lists gpt-image-1, its API’s GPT-4o image model, as shut down on 23 October 2026. Kie.ai runs its own 4o Image service, so check that Create Image1 still answers before a client run
  • Model date: the same page lists GPT-4.1 (gpt-4.1-2025-04-14) for removal on 14 January 2027, with gpt-6-luna as its replacement
  • Your photos: they become public on Dropbox and go to WaveSpeedAI, OpenAI and Kie.ai
  • Credentials: the JSON holds none. Ten Authorization headers hold placeholders, so take your keys out before you share it

README and files

README

UGC-style video ad from a product and a creator photo

An n8n workflow that makes a casual, phone-shot video ad. Send a form with two photos, usually your product and a
person, and one line of direction. WaveSpeedAI blends the photos, two agents on gpt-4.1 write an image prompt and the
scenes, Kie.ai renders a still and then Veo clips, and fal.ai joins the clips into one video.

What is inside

  • workflow.json: the workflow as n8n exports it, 38 nodes, five of them sticky notes. It holds no credential.
  • README.md: these notes.

What we changed from the original copy

  • The ten Authorization headers held bare placeholders. They now read <YOUR_DROPBOX_TOKEN>, <YOUR_WAVESPEED_KEY>,
    <YOUR_KIE_KEY> and <YOUR_FAL_KEY>, each in the nodes that call that service.
  • Four repairs: the original copy had lost its backslashes.
  • Create Image1 and Create Video1 escape the prompt before it goes into the JSON body. Their replace calls had
    become /n/g and '"', so every letter n turned into a line break and the quotes went out bare, which breaks the
    body. They read .replace(/\n/g, '\\n') and .replace(/"/g, '\\"') again.
  • The path in Upload a file swaps spaces in a file name for underscores. Its /s+/ is /\s+/ again.
  • The examples in the two parsers and in the two agents' system messages show a YAML prompt as a JSON string. Their
    line breaks had become a bare n between words, as in naturallyncharacter. They read \n again.

Before you start

  • An n8n instance, on n8n Cloud or your own server.
  • An OpenAI API key for gpt-4.1 and for a vision model.
  • A Dropbox account: a Dropbox credential in n8n for the upload, and an access token for the two sharing calls.
  • A WaveSpeedAI API key, for FLUX Kontext dev's multi-image model.
  • A Kie.ai API key with credit, for its 4o Image model and for Veo.
  • A fal.ai API key, for its FFmpeg merge.

Set it up

  1. In n8n, create a workflow, open its menu and choose Import from File. Pick workflow.json.
  2. Add an OpenAI credential and select it in Describe Img1 and GPT1.
  3. In Describe Img1, pick a current model that reads images, such as gpt-4.1, in place of chatgpt-4o-latest.
    OpenAI's deprecations page, read on 2 November 2026, lists that one as shut down on 17 February 2026.
  4. Add a Dropbox credential and select it in Upload a file. In HTTP Request4 and HTTP Request6, replace
    <YOUR_DROPBOX_TOKEN> in the Authorization header with a Dropbox access token. The brackets go too, so the header
    reads Bearer, a space and the token.
  5. In HTTP Request and HTTP Request1, replace <YOUR_WAVESPEED_KEY> the same way.
  6. In Create Image1, Get Image1, Create Video1 and Get Video1, replace <YOUR_KIE_KEY>.
  7. In Combine Clips1 and Get Final Video1, replace <YOUR_FAL_KEY>. That header reads Key, a space and the key.
  8. Under the workflow's Settings, set a timeout, for the reason under Good to know.
  9. Save, open the form's test address, attach two photos and write one line. Press Publish when a clip comes back.

How a run goes

  1. On form submission takes UGC Instruction and Images. Split Out and Code2 turn each photo into its own
    item, named product_image.
  2. Upload a file puts each photo in your Dropbox. HTTP Request4 looks for a shared link, HTTP Request6 makes a
    public one, and Code7 turns the links into raw file addresses, gathered in one list.
  3. HTTP Request asks WaveSpeedAI to blend the first two photos into one picture. Wait holds 20 seconds, then
    HTTP Request1 fetches it.
  4. Describe Img1 describes the picture in YAML: a product, a character or both.
  5. Generate Image writes one image prompt and picks 2:3 or 3:2. Create Image1 asks Kie.ai's 4o Image model for a
    new still from the blended picture. Wait 4 and If 1 check once a minute until it is ready.
  6. Generate Video writes the scenes, one for each 8 seconds of the length you asked for, one when you name none.
    Each scene has its prompt with the spoken line, a frame (9:16 unless you ask for 16:9) and a model (veo3_fast
    unless you ask for veo3).
  7. Split Out1 sends the scenes to Create Video1, one every 3 seconds, which asks Kie.ai's Veo to animate the still.
    Wait holds a little over three minutes, and Get Video1 reads each clip once.
  8. Aggregate1 gathers the clip addresses, and Combine Clips1 sends them to fal.ai's merge. Wait1 and If 3 check
    once a minute until the merged video has an address.
  9. Code1 lays out the video's address, name and size with ready HTML and Markdown snippets, and HTTP Request2
    downloads the file into the run.

Change the look

  • The still: the system message of Generate Image, which asks for amateur phone-photo realism and exact product text.
  • The script: the system message of Generate Video. It writes a casual line under 150 characters when you give none,
    and mentions the brand only in the first scene.
  • Length, frame and model: say them in your instruction. The agent reads them from there.
  • The blend: the prompt in the body of HTTP Request.
  • The waits: Wait 20 seconds, Wait 4 and Wait1 60 seconds, Wait 200 seconds. Raise Wait for veo3,
    which takes longer.

Good to know

  • WaveSpeedAI bills the blend, Kie.ai the still and every clip, fal.ai the merge, and OpenAI the description and the
    two agents. A long ad means more clips.
  • Send exactly two photos. The blend takes the first two links and nothing else, so one photo leaves an empty address
    and a third is ignored.
  • A photo whose file name already has a Dropbox link takes the first output of If, which leads nowhere, and the run
    goes on without it. Rename the photo, or add {{ $now.toMillis() }} to the path in Upload a file.
  • A failed image never meets the test in If 1, so the run checks it again every minute for as long as n8n lets it.
    That is why step 8 is there.
  • Get Video1 reads each clip once, after 200 seconds, with no status check. A clip still rendering has no address
    and drops out of the merge.
  • An access token made in Dropbox's App Console expires after a few hours. For a lasting setup, set both sharing calls'
    Authentication to a Dropbox OAuth2 credential and delete the header.
  • OpenAI's deprecations page lists gpt-image-1, the GPT-4o image model in its own API, as shut down on
    23 October 2026. Kie.ai runs its own 4o Image service, so check that Create Image1 still answers before a client
    run, and switch to another of Kie.ai's image models if it does not.
  • The same page lists GPT-4.1 (gpt-4.1-2025-04-14) for removal from the API on 14 January 2027, with gpt-6-luna
    as its replacement. GPT1 drives both agents.
  • Once published, anyone with the form's address can start a run on your five accounts.
  • Your photos become public on Dropbox, and they go to WaveSpeedAI, OpenAI and Kie.ai.
  • Your keys sit in ten headers, so take them out before you share the workflow.
Files
README.md  7 KB
workflow.json  41 KB

2 files, 48 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-03

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

anaksor-ocr

Sokheng · Kit

Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…

New

Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…

New

ACE-Step 1.5 XL SFT

ACE-Step · Kit

Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…

New

Similar in Marketing & SEO

See all in Marketing & SEO

Huashu Design

alchaincyf · Skill

Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…

New29.4k

Pixel Art XL

nerijs · Kit

A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…

New

Licon MSR for LTX-2.5

LiconStudio · Kit

Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…

New