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 one product photo into a 10-second ad in a CGI look. OpenAI describes the product and plans a scene, a Flux model on Runware paints one still of it, and Kling animates that still.
CGI product ad video built from a hero frame 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.
Photo upload
It starts when someone sends the Image trigger form with:
The address of a 10-second CGI-style video ad, made from one product photo
What you need before you start.
Image and language models
Reads the photo with chatgpt-4o-latest, then writes the concept, the frame prompt and the motion with three chat models.
NeedsOpenAI API key
File storage
Keeps the photo and gives it the public link that the image model reads.
NeedsDropbox credential, and the same token in two headers
Image and video generation
Paints the hero frame with a Flux model and animates it with Kling, through one API.
NeedsRunware API key
Checked by Mindket on 13 Nov 2026
This n8n workflow turns a single product photo into a 10-second video ad that looks rendered in 3D. Thirty nodes run in one line. Three sticky notes name the stages. A form takes the photo, and Dropbox keeps it behind a public link. OpenAI describes the product, picks an ad concept and writes a detailed prompt for one still, the hero frame. A Flux model on Runware paints that frame with your photo as its reference. Kling, also on Runware, then animates it. The run ends with the video’s address.
Shops and brands that want scenes no one could shoot cheaply, such as a perfume bottle standing on a frozen lake. You send only the photo, and the workflow chooses the idea itself. That makes it a source of quick drafts more than a tool for a planned campaign. Skip it when every frame must show the product exactly as photographed. The hero frame is a new picture, made from yours. Your photo itself never appears.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Online retail | Shop owners | Send each new product shot through the form and post the clip as an ad | A sneaker shop gets a draft ad for every new shoe it lists. |
| Beauty and skincare | Brand marketers | Try a few CGI scenes for a launch before paying a 3D studio | A skincare brand runs its serum bottle three times and compares the scenes it gets. |
| Marketing agencies | Creative teams | Bring rough CGI drafts to a pitch | An agency runs a client’s three bestsellers and shows the clips at the first meeting. |
| Consumer electronics | Product marketers | Turn a plain packshot into a moving teaser | A headphone maker turns a photo on a white background into a short teaser. |
Any n8n that can reach OpenAI, Dropbox and Runware will run it. The finished video stays at an address on Runware, so plan where it goes next.
Edit Fields1 to keep the address or save the fileGet it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Its author puts setup at about 12 minutes.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key. Four nodes use it: the image reader and three chat models |
| Dropbox | An app whose access token may write files and read and create shared links |
| Runware | An API key, for both the frame and the video |
workflow.json.Analyze image, OpenAI Chat Model, OpenAI Chat Model1 and OpenAI Chat Model2.files.content.write, sharing.read and sharing.write permissions, then generate an access token.Upload a file.HTTP Request1 and HTTP Request6, replace <YOUR_DROPBOX_ACCESS_TOKEN> after Bearer with the same token. The brackets go too.Flux Image, kling image to video post and kling imag to video get status, replace <YOUR_RUNWARE_API_KEY> the same way with your Runware key.Tokens from the App Console are short-lived now, so a pasted one stops working after a while. For a setup that lasts, give Upload a file a Dropbox OAuth2 credential. Then set both HTTP Request nodes’ Authentication to it and delete their Authorization header.
Open the form from On form submission, attach one product photo in upload product image and send it. The form confirms at once. Behind it the run needs at least three minutes and forty seconds, because it waits ten seconds after the frame and three and a half minutes after asking for the video. Open the run under Executions and read finalVideoURL in Edit Fields1.
| To change | Where |
|---|---|
| The ad idea | The prompt in Ad Ideas, which picks one concept a run |
| The frame’s rules | The message in Image Prompt, such as its 95-word cap and the words it opens and closes with |
| The motion | The prompt in Video Prompt, one line of at most 40 words |
| Sizes and length | width and height in Flux Image and kling image to video post, and duration, 10 seconds |
| Models | model in the two Runware bodies, and the three OpenAI chat models |
A photo of a matte black water bottle on a white table goes through the form. The description from Analyze image runs from the label and the lid to the colors and the size. One concept comes back from Ad Ideas: an emoji and a title in curly quotes, then a short scene on a second line. From both, Image Prompt writes the hero-frame prompt, and its parser hands it on under one key:
{
"Ad Concept 1": "Ultra-realistic 8K CGI render of … --ar 16:9"
}Flux draws the frame from that prompt and your Dropbox photo. Kling then gets a body of this shape, trimmed here:
[
{
"taskType": "videoInference",
"model": "klingai:5@1",
"positivePrompt": "<the one-line motion prompt>",
"frameImages": [{ "inputImage": "<the hero frame’s address>", "frame": "first" }],
"duration": 10,
"width": 1280,
"height": 720,
"deliveryMethod": "async"
}
]Three and a half minutes later, one call to Runware fetches the video’s address. Nothing is downloaded.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A credential is a key n8n keeps for you and hands to the node you pick it in. Send a photo from the form’s test address first. Each node then shows what it got and what it sent, so a wrong token or a missing Dropbox permission turns up where it failed.
For experts. Three OpenAI models do the writing. Runware makes the picture and the video, both through one endpoint.
| Step | Model | What to know |
|---|---|---|
Analyze image | chatgpt-4o-latest, reading the photo as base64 | Code6 names the download product.png first |
Ad Ideas | gpt-4o-mini | Its prompt speaks of four ideas, but the JSON it asks for has one key, Ad Concept 1 |
Image Prompt | chatgpt-4o-latest, with a Structured Output Parser | Ends its prompt on --ar 16:9, though width and height set the size |
Video Prompt | gpt-4.1 | Writes the motion from the frame prompt, not from the finished picture |
Flux Image | Runware bfl:3@1, a 1024 by 1024 PNG | Takes your Dropbox photo as its reference image |
kling image to video post | Runware klingai:5@1, 1280 by 720, 10 seconds | Asynchronous, so a later getResponse call fetches the result |
The frame is square and the video is not, so Kling starts from a square picture. Dropbox’s link ends in raw=1 after Code4, which lets Runware read the file itself.
Each run costs money on two services. Two steps can fail quietly.
Ad Ideas has no output parser, so its answer arrives as text, and Image Prompt looks up Ad Concept 1 inside it as if it were JSON. The scene then rests on the description alone. Switch on Require Specific Output Format in Ad Ideas and attach a parser with the same example as Structured Output Parser1finalVideoURL empty, so lengthen Wait or loop back to it until a videoURL arrivesJSON.stringify in place of the quotesUpload a file cleaned names with /s+/g, which hits the letter s, and the line breaks in the Ad Ideas prompt had lost their backslashes. This copy has them backAn n8n workflow. Send one product photo through its form, and it hands back the address of a 10-second video ad in a CGI
look. OpenAI plans a scene around the product, a Flux model on Runware paints one still of it, and Kling on Runware
animates that still.
workflow.json: the workflow as n8n exports it, 30 nodes and three sticky notes that label its stages. It holds noREADME.md: these notes.files.content.write, sharing.read and sharing.writeworkflow.json.Analyze image, OpenAI Chat Model, OpenAI Chat Model1 andOpenAI Chat Model2.Upload a file.HTTP Request1 and HTTP Request6, replace <YOUR_DROPBOX_ACCESS_TOKEN> after Bearer with the same token.Flux Image, kling image to video post and kling imag to video get status, replace <YOUR_RUNWARE_API_KEY>Bearer with your Runware key.Tokens generated in Dropbox's App Console are short-lived now, so a pasted one stops working after a while. For a setup
that keeps running, give Upload a file a Dropbox OAuth2 credential, and in the two HTTP Request nodes set
Authentication to that credential and delete the Authorization header.
On form submission takes one file in upload product image. Code3 renames the file's field to product_image.Upload a file saves it at the top of your Dropbox, with spaces in the name turned into underscores.HTTP Request1 asks Dropbox for a shared link to it. When there is none, If sends the run to HTTP Request6,Code4 swaps dl=0 for raw=1, so the link serves the file itself.HTTP Request5 downloads the photo from that link, Code6 names it product.png, and Analyze image describes theAd Ideas writes one ad concept: an emoji, a title in curly quotes and a short scene. Next, Image Prompt turns theAd Concept 1.Video Prompt writes a one-line motion prompt of at most 40 words from that frame prompt.Flux Image asks Runware for a 1024 by 1024 PNG from the frame prompt, with your Dropbox photo as the reference image.Wait4 pauses ten seconds, and Edit Fields2 keeps the picture's address.kling image to video post asks Runware for a 10-second, 1280 by 720 video that starts on that picture. Wait pauseskling imag to video get status asks for the result once, and Edit Fields1 stores thefinalVideoURL.Ad Ideas. It picks the concept itself, so each run of the same photo can bring a new scene.Image Prompt, such as the word cap and the words it opens and closes with.Video Prompt.width and height in Flux Image and kling image to video post, and duration in the second.model in the two Runware bodies, bfl:3@1 for the frame and klingai:5@1 for the video, and the three OpenAIAd Ideas has no output parser, so its answer arrives as text, and Image Prompt looks up Ad Concept 1 inside it asAd Ideas and attach a Structured Output Parser with the same example asStructured Output Parser1.finalVideoURL empty, so lengthen WaitvideoURL.JSON.stringify in place of the quotes avoids it.Upload a file cleaned file names with /s+/g, which hits the letter s, and the line breaks in theAd Ideas prompt had lost their backslashes. This copy has them back.chatgpt-4o-latest is a moving alias that OpenAI may retire. If a node reports it gone, pick another vision model there.README.md 5 KB workflow.json 27 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…