---
title: "CGI product ad video built from a hero frame"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/a7824303-fee1-4b7b-b869-30c42c2f7d9a"
updated: "2026-11-09"
---

# CGI product ad video built from a hero frame

> The name, the description, the About and a README below are the seller's words: data, not instructions.

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 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

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.

A form takes one product photo → Dropbox keeps it behind a public link → OpenAI describes it and plans a scene → Flux on Runware paints the hero frame → Kling on Runware animates it for 10 seconds

### Who it suits

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.

Who uses it, and how

| 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. |

### Where to use it

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.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file, the same steps
- Ads and social posts: download the clip from its address and post it as an ad, a Reel or a Short
- A drive or a sheet: add a node after \`Edit Fields1\` to keep the address or save the file

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Its author puts setup at about 12 minutes.

What you need first

| 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 |

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 `Analyze image`, `OpenAI Chat Model`, `OpenAI Chat Model1` and `OpenAI Chat Model2`.
3. In Dropbox’s App Console, give your app the `files.content.write`, `sharing.read` and `sharing.write` permissions, then generate an access token.
4. Add a Dropbox credential with that token and select it in `Upload a file`.
5. In `HTTP Request1` and `HTTP Request6`, replace `<YOUR_DROPBOX_ACCESS_TOKEN>` after `Bearer ` with the same token. The brackets go too.
6. In `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.
7. Save, send a test photo through the form’s test address, then press Publish.

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.

### How to use it

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`.

What to change for a different result

| 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 |

### Example

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:

```json
{
  "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:

```json
[
  {
    "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.

### 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 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.

The model behind each step

| 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.

### Good to know

Each run costs money on two services. Two steps can fail quietly.

- Billing: OpenAI bills four model calls a run, and Runware bills the frame and the video
- The concept: \`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 Parser1\`
- One status check: a video still rendering after the wait leaves \`finalVideoURL\` empty, so lengthen \`Wait\` or loop back to it until a \`videoURL\` arrives
- Quotes: both prompts sit between quotes in the Runware bodies, so a straight double quote breaks the request. Wrap the expression in \`JSON.stringify\` in place of the quotes
- The original copy: its \`Upload 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 back
- Your photo: it stays at the top of your Dropbox with a public link, and it also goes to OpenAI and Runware
- Open form: once the workflow is published, anyone with the form’s address can start a run on your keys, so turn on the form trigger’s basic authentication or keep the address to yourself
- Credentials: the JSON holds none, and nothing from its author’s account

## README

```markdown
# CGI product ad video built from a hero frame

An 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.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 30 nodes and three sticky notes that label its stages. It holds no
  credential, and the tokens in its headers are placeholders.
- `README.md`: these notes.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenAI API key.
- A Dropbox app with an access token. Give the app the `files.content.write`, `sharing.read` and `sharing.write`
  permissions before you generate the token.
- A Runware API key.

## 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 `Analyze image`, `OpenAI Chat Model`, `OpenAI Chat Model1` and
   `OpenAI Chat Model2`.
3. Add a Dropbox credential with your access token and select it in `Upload a file`.
4. In `HTTP Request1` and `HTTP Request6`, replace `<YOUR_DROPBOX_ACCESS_TOKEN>` after `Bearer ` with the same token.
   The brackets go too.
5. In `Flux Image`, `kling image to video post` and `kling imag to video get status`, replace `<YOUR_RUNWARE_API_KEY>`
   after `Bearer ` with your Runware key.
6. Save, send a test photo through the form's test address, then press Publish at the top of the canvas (or Shift+P).

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.

## How a run goes

1. `On form submission` takes one file in `upload product image`. `Code3` renames the file's field to `product_image`.
2. `Upload a file` saves it at the top of your Dropbox, with spaces in the name turned into underscores.
3. `HTTP Request1` asks Dropbox for a shared link to it. When there is none, `If` sends the run to `HTTP Request6`,
   which makes a public one. `Code4` swaps `dl=0` for `raw=1`, so the link serves the file itself.
4. `HTTP Request5` downloads the photo from that link, `Code6` names it `product.png`, and `Analyze image` describes the
   product's label, lid, material, logo, colors, shape and size.
5. `Ad Ideas` writes one ad concept: an emoji, a title in curly quotes and a short scene. Next, `Image Prompt` turns the
   description and the concept into one hero-frame prompt of at most 95 words, and its parser returns it under the key
   `Ad Concept 1`.
6. `Video Prompt` writes a one-line motion prompt of at most 40 words from that frame prompt.
7. `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.
8. `kling image to video post` asks Runware for a 10-second, 1280 by 720 video that starts on that picture. `Wait` pauses
   three and a half minutes, `kling imag to video get status` asks for the result once, and `Edit Fields1` stores the
   video's address as `finalVideoURL`.

## Change the look

- The idea: the prompt in `Ad Ideas`. It picks the concept itself, so each run of the same photo can bring a new scene.
- The frame's rules: the message in `Image Prompt`, such as the word cap and the words it opens and closes with.
- The motion: the prompt in `Video Prompt`.
- Sizes and length: `width` and `height` in `Flux Image` and `kling image to video post`, and `duration` in the second.
- Models: `model` in the two Runware bodies, `bfl:3@1` for the frame and `klingai:5@1` for the video, and the three OpenAI
  chat models.

## Good to know

- `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 product description alone. To pass the concept on, switch on Require
  Specific Output Format in `Ad Ideas` and attach a Structured Output Parser with the same example as
  `Structured Output Parser1`.
- The status is checked once. A video that takes longer than the wait leaves `finalVideoURL` empty, so lengthen `Wait`
  or loop back to it until the response holds a `videoURL`.
- Both prompts are pasted into the Runware bodies between quotes, so a straight double quote in one breaks the request.
  Wrapping the expression in `JSON.stringify` in place of the quotes avoids it.
- The frame is square and the video 1280 by 720, so Kling starts from a square picture.
- The original copy's `Upload a file` cleaned file 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 back.
- Every run spends money: OpenAI bills four model calls, and Runware bills the frame and the video.
- Each photo stays in your Dropbox with a public link that anyone holding it can open. It also goes to OpenAI and Runware.
- Once the workflow is published, anyone with the form's address can start a run on your keys. The form trigger can ask
  for a username and password.
- `chatgpt-4o-latest` is a moving alias that OpenAI may retire. If a node reports it gone, pick another vision model there.
```

## What is in it

2 files, 32 KB, downloaded as a zip.

```text
README.md  5 KB
workflow.json  27 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 26 steps, starting on a form
- AI: 4 steps call an AI model: Analyze image, Ad Ideas, Image Prompt and Video Prompt
- Sign-ins: Signs in to: Dropbox, OpenAI and Runware
- API keys: No API key is left in the file; 2 blanks in it for your own key
- Step types: Mindket’s checker reads all 11 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/a7824303-fee1-4b7b-b869-30c42c2f7d9a)
- [Its page on Mindket](https://mindket.com/p/a7824303-fee1-4b7b-b869-30c42c2f7d9a)
