---
title: "AI product photo to video generator"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/7544e083-f62a-4cdd-9c5e-5c1461367eb6"
updated: "2026-11-09"
---

# AI product photo to video generator

> 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 and a line about the video you want into a short commercial-style clip. Gemini describes the product, an AI creative director plans the shots, and Veo 3.1 Fast on Kie.ai renders them.

AI product photo to video generator 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 takes one product photo and a sentence about the video you want, and hands back a short commercial-style clip. Eight nodes run one after another. A form takes the photo, Cloudinary stores it at a public address, and Gemini 2.5 Pro writes a YAML description of the product with its brand and its colors as hex codes. An agent named Creative Director turns that description and your sentence into a JSON shot plan. A sub-workflow you supply sends the plan and the photo to Veo 3.1 Fast on Kie.ai, and the last node downloads the clip.

### Who it suits

Shop owners and small brands that want a moving ad for every product without booking a shoot, and the marketers and agencies who make those ads for them.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Online retail | Shop owners and small brands | Send each new studio shot through the form and post the clip as an ad | A candle shop turns every new product photo into a clip for an Instagram ad. |
| Food and drink | Brand marketers | Leave Description empty and let the agent fall back on its food and drink style | A drinks brand gets a fresh, lively scene built around refreshment without writing a word. |
| Marketing agencies | Account managers | Send a client the form instead of a brief | An agency hands a client the form, and each photo the client sends comes back as a draft clip. |
| Performance marketing | Marketers who test ads | Try several product videos a week, each from one form | A marketer tries a few angles on one product and keeps the clip that tests best. |
| Social video | Teams that make Reels and Shorts | Set a vertical frame once, then run the whole catalog | A team sets 9:16 in the sub-workflow call and sends its catalog through it. |

You need some n8n: importing a file, adding credentials, building one small sub-workflow. If that is new to you and you would rather not learn it, skip this one. Its author puts setup at about 11 minutes, which assumes the four accounts already exist.

### Where to use it

Any n8n you run will do, as long as it can reach Cloudinary, Google, OpenRouter and Kie.ai.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file, the same steps
- Ad and social channels: the clip comes back as a file, ready for an Instagram ad, a Reel or a Short
- A drive or another app: add a node after \`Download Video\` to save the clip or send it on

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Have these ready before you import it.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Cloudinary | An account with an upload preset whose signing mode is Unsigned |
| Google AI Studio | A key for the Gemini API |
| OpenRouter | A key for the chat model the agent and the parser share |
| Kie.ai | A key, and a video sub-workflow of your own that calls Veo 3.1 Fast |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Open `Upload *Photo1` and put your cloud name in its address where it says `<YOUR_CLOUD_NAME>`.
3. In the same node, swap `YOUR_PRESET_NAME` for your preset and `YOUR_FOLDER_NAME` for a folder.
4. Add a `Google Gemini (PaLM) API` credential and select it in `Analyze an image`.
5. Add an OpenRouter credential and select it in `OpenRouter Chat Model`.
6. Open the red node after `Creative Director`, the call to the Kie.ai sub-workflow, and pick your own video sub-workflow.
7. Save, send a test photo through the form’s test address, then press Publish.

The sub-workflow is not in the file. Its node pointed at a workflow in its author’s own n8n, so it arrives empty and marked red. Yours receives these four fields and returns the clip’s address as `resultUrls`:

```json
{
  "video_prompt": "<the shot plan, as JSON text>",
  "aspect_ratio": "16:9",
  "imageUrls": ["<the photo’s Cloudinary address>"],
  "generationType": "REFERENCE_2_VIDEO"
}
```

Kie.ai’s Veo pages, read on 2 November 2026, describe the two calls inside it. Post those fields to the generate endpoint with your key as a Bearer token, then ask `record-info` for the task until it reports success. The `resultUrls` field comes back as a JSON string, so parse it before you return it.

```text
POST https://api.kie.ai/api/v1/veo/generate
GET  https://api.kie.ai/api/v1/veo/record-info?taskId=<taskId>
```

A signed preset works too: add an HTTP Basic Auth credential with your Cloudinary API key and secret, and select it under the upload node’s Authentication.

### How to use it

Open the form from `On form submission`, attach a product photo and write the video you want in `Description`, in a sentence. The form confirms at once. The run goes on behind it: upload, analysis, shot plan, render, download. The clip lands in the run’s execution data as a file, so open the run under Executions to see it.

What to change for a different result

| To change | Where |
| --- | --- |
| Tone and style | The Creative Director’s system message. Its fallback styles for tech, food and drink, and fashion apply only when your sentence says little |
| Frame | aspect\_ratio in the sub-workflow call, such as 9:16 for Reels and Shorts |
| Length | technical.duration in the shot plan. The prompt’s own examples ask for 8 seconds |
| Photo folder | YOUR\_FOLDER\_NAME in the upload node, one per brand or campaign |

### Example

A photo of a bottle of cold brew coffee, with this in Description:

```text
Ice cubes drop into a glass beside the bottle on a sunny cafe counter, slow motion, warm morning light
```

Gemini’s YAML names the product type, the brand if the label shows one and the bottle’s colors as hex codes. The Creative Director answers in the parser’s shape, trimmed here. It leaves the bottle’s look out of the plan, because its prompt says Veo takes that from the photo.

```json
{
  "scene": "…",
  "style": "…",
  "camera": { "type": "…", "angle": "…", "lens": "…", "movement": "…" },
  "lighting": { "type": "…", "mood": "…", "time": "…" },
  "audio": { "music": "…", "effects": ["…"] },
  "motion": { "pace": "…", "style": "…", "transitions": "…" },
  "technical": { "resolution": "…", "duration": "…", "color_palette": "…", "effects": "…" },
  "narrative": { "beginning": "…", "middle": "…", "end": "…" }
}
```

Kie.ai renders the clip from the plan and the photo, and Download Video fetches it from resultUrls.

### 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. Run the form from its test address first. Every node then shows what it received and what it sent, which is where a wrong preset or key turns up.

**For experts.** Three models share the work, and each step names the one it uses.

The model behind each step

| Step | Model | What to know |
| --- | --- | --- |
| Analyze an image | Gemini 2.5 Pro, through Google’s Gemini API directly | Switch it to a Flash model when cost matters more than detail |
| Creative Director and its Structured Output Parser | Gemini 2.5 Flash, one OpenRouter model for both | Auto-fix is on, so JSON that misses the schema goes back for a repair, at the cost of one more call |
| Your sub-workflow | Veo 3.1 Fast on Kie.ai | The call to it retries when it fails |

You can point OpenRouter at another model too. The agent carries the YAML’s color\_palette\_hex into the plan’s color\_palette, so a brand’s colors reach the scene.

### Good to know

Each run costs money, and the rest of the risks come from the open form and the public photo.

- Billing: Google, OpenRouter and Kie.ai each bill their own part of a run
- 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
- The photo: an unsigned upload makes it public on Cloudinary, and it also goes to Google, OpenRouter and Kie.ai
- File types: the form’s file field takes any file type, so send photos only
- Credentials: the JSON holds none, and nothing from its author’s account

## README

```markdown
# AI product photo to video generator

An n8n workflow. Send one product photo and a line about the video you want through its form, and it returns a short
commercial-style clip made by Veo 3.1 Fast.

## What is inside

- `workflow.json`: the workflow as n8n exports it, eight nodes. It holds no credential. The sub-workflow node is left
  empty, so n8n marks it red until you pick your own.
- `README.md`: these notes.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A Cloudinary account with an upload preset whose signing mode is Unsigned.
- A Gemini API key from Google AI Studio.
- An OpenRouter API key.
- A Kie.ai account and a sub-workflow of your own that calls its Veo 3.1 Fast model (below).

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Open the node named `Upload *Photo1`. In its address, put your cloud name where it says `<YOUR_CLOUD_NAME>`. Then
   swap `YOUR_PRESET_NAME` for your preset and `YOUR_FOLDER_NAME` for the folder the photos should land in.
3. Add a Google Gemini (PaLM) API credential with your key and select it in `Analyze an image`.
4. Add an OpenRouter credential and select it in `OpenRouter Chat Model`.
5. Open the red node after `Creative Director`, the call to the Kie.ai sub-workflow, and choose your video sub-workflow.
6. Save, run it once from the form's test address, then press Publish at the top of the canvas (or Shift+P).

A signed preset works too: add an HTTP Basic Auth credential with your Cloudinary API key and secret, and select it
under the upload node's Authentication.

## The sub-workflow it calls

The file does not include it. The node points at a workflow in its author's own n8n, so on import it is empty. Yours
receives four fields and must hand back the clip's address as `resultUrls`, which the last node downloads:

| Field | What the main workflow sends |
|---|---|
| `video_prompt` | the Creative Director's JSON shot plan, as text |
| `aspect_ratio` | `16:9` |
| `imageUrls` | a list holding the photo's Cloudinary address |
| `generationType` | `REFERENCE_2_VIDEO` |

Kie.ai's Veo documentation, read on 2 November 2026, gives the shape: an HTTP Request node posts the four fields to
`https://api.kie.ai/api/v1/veo/generate` with your API key as a Bearer token and gets a `taskId` back. A loop of Wait
and HTTP Request nodes then asks `record-info` for that task until it reports success, and `resultUrls` comes back as a
JSON string, so parse it before you return it. The same pages say reference-image video runs on the Fast model, in 16:9
or 9:16. Check https://docs.kie.ai/veo3-api for the current model names and prices before you build it.

## Change the look

- Tone and style: edit the system message in `Creative Director`. It has a fallback style for tech, for food and drink,
  and for fashion, used when the Description field is empty or vague.
- Frame: change `aspect_ratio` in the sub-workflow call, for example to `9:16` for Reels and Shorts.
- Length: the shot plan carries it (`technical.duration`), and the prompt's examples ask for 8 seconds.
- Storage: rename the Cloudinary folder per brand or per campaign.

## Good to know

- The form answers as soon as it is sent. The clip arrives in the run's execution data as a file, so add a node after
  `Download Video` to save it to a drive or send it on.
- Once the workflow is published, anyone with the form's address can start a run that spends your Gemini, OpenRouter
  and Kie.ai credits. The form trigger can ask for a username and password.
- An unsigned upload gives the photo a public address. The photo also goes to Google, OpenRouter and Kie.ai.
```

## What is in it

2 files, 35 KB, downloaded as a zip.

```text
README.md  4 KB
workflow.json  32 KB
```

## Workflow check

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

- Steps: 6 steps, starting on a form
- AI: 2 steps call an AI model: Analyze an image and Creative Director
- Sign-ins: Signs in to: Google Gemini and OpenRouter
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 5 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/7544e083-f62a-4cdd-9c5e-5c1461367eb6)
- [Its page on Mindket](https://mindket.com/p/7544e083-f62a-4cdd-9c5e-5c1461367eb6)
