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…
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.
UGC ad form
It starts when someone sends the UGC ad form with:
A casual, phone-shot video ad of a person showing your product, as a file in the run
What you need before you start.
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
Image blending
Runs FLUX Kontext dev on the two photos and returns one combined picture.
NeedsWaveSpeedAI API key, typed into two headers
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
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
Video merge
Joins the clips into one video with its FFmpeg merge, through fal’s queue.
Needsfal.ai API key, typed into two headers
Checked by Mindket on 13 Nov 2026
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.
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.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Beauty and skincare | Brand owners | Send a product shot and a model photo with one line of direction | A serum brand gets a clip of a woman at a bathroom mirror talking about the texture. |
| Drinks | Marketers | Ask for a longer ad, so the agent writes several 8-second scenes | A cold brew maker asks for 24 seconds and gets three scenes joined into one video. |
| Agencies | Creative teams | Sketch a UGC idea before booking a real creator | An agency shows a client a rough clip of the idea before the shoot. |
| Apparel | Social media managers | Try one product with different people and settings | A 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.
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.
HTTP Request2 to keep the videoGet it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Collect the five keys before you import it.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key for gpt-4.1 and a current model that reads images |
| Dropbox | A Dropbox credential in n8n, and an access token for the two sharing calls |
| WaveSpeedAI | An API key, for the FLUX Kontext dev multi-image model |
| Kie.ai | An API key with credit, for its 4o Image model and Veo |
| fal.ai | An API key, for the FFmpeg merge |
workflow.json.Describe Img1 and GPT1.Describe Img1, swap chatgpt-4o-latest for a current model that reads images, such as gpt-4.1.Upload a file. In HTTP Request4 and HTTP Request6, replace <YOUR_DROPBOX_TOKEN> in the Authorization header with a Dropbox access token, brackets included.HTTP Request and HTTP Request1, replace <YOUR_WAVESPEED_KEY> the same way.Create Image1, Get Image1, Create Video1 and Get Video1, replace <YOUR_KIE_KEY> with your Kie.ai key.Combine Clips1 and Get Final Video1, replace <YOUR_FAL_KEY> with your fal.ai key. That header reads Key, a space and the key.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.
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.
| To change | Where |
|---|---|
| The look of the still | The system message of Generate Image, which asks for amateur phone-photo realism |
| What the person says | Your own words in the instruction, or the system message of Generate Video, which keeps a line under 150 characters |
| Length | Your instruction. Each scene lasts 8 seconds, and the agent divides the length you ask for by 8 |
| Frame and model | Your instruction. The agent picks 9:16 and veo3_fast unless you ask for 16:9 or veo3 |
| Waits | Wait at 20 seconds, Wait 4 and Wait1 at 60, Wait at 200 |
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.
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.
| Step | Model or service | What to know |
|---|---|---|
HTTP Request | FLUX Kontext dev, multi-image, on WaveSpeedAI | Takes the first two photo links only. HTTP Request1 reads the result after one fixed 20-second wait |
Describe Img1 | chatgpt-4o-latest in the file, now retired | Answers in YAML for a product, a character or both |
Generate Image and Generate Video | gpt-4.1 through GPT1, with Think1 | Each has a parser with auto-fix on, so a reply in the wrong shape costs one more call |
Create Image1 | Kie.ai’s 4o Image model | If 1 checks it every 60 seconds until its success flag is 1 |
Create Video1 | Veo on Kie.ai, veo3_fast or veo3 | One request every 3 seconds, then a single 200-second wait with no status check |
Combine Clips1 | fal.ai’s FFmpeg merge | If 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.
Five vendors bill a run, and four gaps can stop it or keep it waiting.
If, which leads nowhere, so the run goes on without it. Rename the photo, or add {{ $now.toMillis() }} to the path in Upload a fileIf 1, so the run checks again every minute until you stop it. Set a timeout under the workflow’s SettingsGet Video1 reads each clip once, after 200 seconds. A clip still rendering has no address and drops out of the mergegpt-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 rungpt-4.1-2025-04-14) for removal on 14 January 2027, with gpt-6-luna as its replacementAn 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.
workflow.json: the workflow as n8n exports it, 38 nodes, five of them sticky notes. It holds no credential.README.md: these notes.<YOUR_DROPBOX_TOKEN>, <YOUR_WAVESPEED_KEY>,<YOUR_KIE_KEY> and <YOUR_FAL_KEY>, each in the nodes that call that service.Create Image1 and Create Video1 escape the prompt before it goes into the JSON body. Their replace calls had/n/g and '"', so every letter n turned into a line break and the quotes went out bare, which breaks the.replace(/\n/g, '\\n') and .replace(/"/g, '\\"') again.Upload a file swaps spaces in a file name for underscores. Its /s+/ is /\s+/ again.naturallyncharacter. They read \n again.gpt-4.1 and for a vision model.workflow.json.Describe Img1 and GPT1.Describe Img1, pick a current model that reads images, such as gpt-4.1, in place of chatgpt-4o-latest.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 headerHTTP Request and HTTP Request1, replace <YOUR_WAVESPEED_KEY> the same way.Create Image1, Get Image1, Create Video1 and Get Video1, replace <YOUR_KIE_KEY>.Combine Clips1 and Get Final Video1, replace <YOUR_FAL_KEY>. That header reads Key, a space and the key.On form submission takes UGC Instruction and Images. Split Out and Code2 turn each photo into its ownproduct_image.Upload a file puts each photo in your Dropbox. HTTP Request4 looks for a shared link, HTTP Request6 makes aCode7 turns the links into raw file addresses, gathered in one list.HTTP Request asks WaveSpeedAI to blend the first two photos into one picture. Wait holds 20 seconds, thenHTTP Request1 fetches it.Describe Img1 describes the picture in YAML: a product, a character or both.Generate Image writes one image prompt and picks 2:3 or 3:2. Create Image1 asks Kie.ai's 4o Image model for aWait 4 and If 1 check once a minute until it is ready.Generate Video writes the scenes, one for each 8 seconds of the length you asked for, one when you name none.veo3_fastveo3).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.Aggregate1 gathers the clip addresses, and Combine Clips1 sends them to fal.ai's merge. Wait1 and If 3 checkCode1 lays out the video's address, name and size with ready HTML and Markdown snippets, and HTTP Request2Generate Image, which asks for amateur phone-photo realism and exact product text.Generate Video. It writes a casual line under 150 characters when you give none,HTTP Request.Wait 20 seconds, Wait 4 and Wait1 60 seconds, Wait 200 seconds. Raise Wait for veo3,If, which leads nowhere, and the run{{ $now.toMillis() }} to the path in Upload a file.If 1, so the run checks it again every minute for as long as n8n lets it.Get Video1 reads each clip once, after 200 seconds, with no status check. A clip still rendering has no addressgpt-image-1, the GPT-4o image model in its own API, as shut down onCreate Image1 still answers before a clientgpt-4.1-2025-04-14) for removal from the API on 14 January 2027, with gpt-6-lunaGPT1 drives both agents.README.md 7 KB workflow.json 41 KB
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…
Qwen · Kit
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…
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…
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…
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…
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…