---
title: "Fast-cut 15-shot product commercial from one photo"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/b39b588a-479f-4665-bf52-f933a9476bd1"
updated: "2026-11-09"
---

# Fast-cut 15-shot product commercial from one photo

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

An n8n workflow that turns a product photo and its name into a 15-second commercial of fifteen one-second shots. Gemini writes the storyboard and a voiceover that ends on the name, and Seedance 2.0 on Kie.ai renders it.

Fast-cut 15-shot product commercial from one photo 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 one product photo and the product’s name into a 15-second commercial with a fast cut, one shot each second. A form takes the name, the photo and a tall or wide frame. Gemini 2.5 Flash describes the product in a line, then writes a storyboard of fifteen shots with a short voiceover that ends on the name and a tagline. Cloudinary hosts the photo. Seedance 2.0 on Kie.ai renders the clip from the storyboard, with the photo as its reference. Ten nodes run it.

### Who it suits

Shop owners, small brands and the agencies behind their ads who want a quick teaser with a beat to it, not one slow camera move. Every storyboard follows the same arc: a dark tease, close-ups of the material, a person using it, then the name. Skip it if you want a calm product shot or a longer film.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Beauty and skincare | Brand marketers | Send each new bottle shot with its full product name | A serum brand gets a teaser that closes on the serum’s name over a clean shot. |
| Footwear and fashion | Online shop owners | Pick \`Portrait\` for Reels and Shorts and the wide frame for the product page | A sneaker shop posts a vertical cut of a new running shoe the day it arrives. |
| Consumer electronics | Small hardware makers | Read the storyboard as a shot list before the render runs | A headphone maker checks the fifteen shots in the run and changes the prompt for the next one. |
| Marketing agencies | Social media managers | Run one photo for each product in a client’s range | An agency turns a client’s new candle range into one teaser for each scent. |

You need some n8n and three accounts: Google AI Studio for Gemini, Cloudinary and Kie.ai, with credit on Kie.ai. Its author puts setup at about 11 minutes. One node differs from the original copy, because the video model it named has been retired.

### Where to use it

Any n8n that can reach Google’s Gemini API, Cloudinary and Kie.ai will run it. Nothing is posted for you. The clip ends up inside the run, so plan where it goes next.

- n8n Cloud: import the file, add one credential and two keys, then publish
- Your own n8n server: the same file and steps
- Reels, Shorts and TikTok: choose \`Portrait\` in the form for a vertical clip
- A drive or a social app: add a node after \`downloadAdVideo\` to save or post the clip

### How to set it up

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

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Google AI Studio | A Gemini API key, for a \`Google Gemini (PaLM) API\` credential |
| Cloudinary | Your cloud name and an upload preset whose signing mode is Unsigned |
| Kie.ai | An API key, and credit for one Seedance clip on each run |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add a `Google Gemini (PaLM) API` credential and select it in `analyzeProductImage` and `Message a model`.
3. If your Gemini key is new, pick `models/gemini-3.8-flash` as the model in both of those nodes.
4. In `uploadImageCloudinary`, put your cloud name in the address where it says `<YOUR_CLOUD_NAME>`. Swap `YOUR_PRESET_NAME` and `YOUR_FOLDER_NAME` for your preset and a folder.
5. In `submitTask` and `checkStatus`, replace `<YOUR_KIE_API_KEY>` in the Authorization header with your key. The brackets go too, so the header reads Bearer, a space and the key.
6. Save, open the test address of `On form submission` and send one photo. Press Publish when the clip looks right.

OpenAI’s deprecations page lists Sora 2 as removed from its API on 24 September 2026. On 2 November 2026, Kie.ai’s page for `sora-2-image-to-video` answered 404 Not Found. So `submitTask` here asks for `bytedance/seedance-2` on the same Kie.ai endpoint, with the original’s choices carried over: 15 seconds, 9:16 or 16:9, and the photo as a reference image.

Google’s deprecations page, read the same day, sets no shutdown date for `gemini-2.5-flash`. It does limit the 2.5 models to accounts that have used them before, and names Gemini 3.8 Flash for new projects. That is why step 3 is there.

### How to use it

Open the form, type the full product name, attach a JPG, PNG or WebP photo and pick a frame in `Screen resolution`. The form confirms at once. Behind it, the two Gemini calls write the storyboard, the photo goes to Cloudinary and Kie.ai starts the render. The workflow checks on the render every five minutes. Expect a wait. The clip lands in the run’s execution data as a file, so open the run under Executions to watch it.

What to change for a different result

| To change | Where |
| --- | --- |
| The arc, pace and voiceover rules | The system message of \`Message a model\`, which gives each shot one second |
| The look of every shot | The tech specs line in the same system message, added to each shot’s prompt |
| Frame and length | \`aspect\_ratio\` and \`duration\` in the body of \`submitTask\`. Seedance takes 4 to 15 seconds |
| Sound | \`generate\_audio\` in the same body, switched on here |
| Resolution | \`resolution\` in the same body, \`720p\` here, from \`480p\` up to \`4k\` |

### Example

You send the form with these answers.

```text
Product name: Lumen Glow Vitamin C Serum 30ml
Upload product image: a photo of an amber glass dropper bottle
Screen resolution: Portrait
```

`analyzeProductImage` answers with one line about the bottle. `Message a model` then writes the storyboard in this shape, with most of it cut:

```text
**Global Visual Anchor:** <one line on the bottle, used in every shot>

**Shot 1**
*   **Visual Prompt:** <the anchor> + <movement> + <light> + <tech specs>
*   **Audio:** VO: "<one mood word>"

…

**Shot 15**
*   **Visual Prompt:** <the name over the anchor, then the tagline>
*   **Audio:** VO: "<a tagline>"
```

The form asks for no tagline, so the model writes one. Kie.ai renders a tall clip from it, and `downloadAdVideo` fetches the clip from the address in `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. The bottom row loops: `Wait` hands on to `checkStatus`, and `Switch` sends the run back to `Wait` while Kie.ai is still busy. Send one photo from the test address first. Every node then shows what it received and what it sent, which is where a wrong preset, a refused key or an empty storyboard turns up.

**For experts.** Two Gemini calls plan. Kie.ai renders, and the workflow polls it instead of holding one call open.

The nodes that need care

| Node | What it does | What to know |
| --- | --- | --- |
| \`getBinaryFile\` | Code that takes the photo back from the form | The Gemini steps hand on text only, so the upload needs the file again |
| \`uploadImageCloudinary\` | An unsigned multipart upload | Sends the form field \`Upload\_product\_image\` as \`file\` and returns \`secure\_url\` |
| \`submitTask\` | POST to Kie.ai’s \`jobs/createTask\` | The storyboard goes in through \`JSON.stringify\`, so its quotes and line breaks survive |
| \`Wait\` | Version 1.1, unit minutes, no amount | Takes that version’s default amount of 5, so each check comes five minutes after the last |
| \`Switch\` | Reads \`data.state\` | The \`fail\` output has no node after it, so a failed render ends the run without a word |

### Good to know

Each run costs money at Kie.ai. The form and the photo are both open to anyone who has their address.

- Billing: Kie.ai bills each clip by its length, at the prices on its pricing page. The two Gemini calls cost little next to it. Test with one photo
- Open form: once published, anyone with the form’s address can start a render on your Kie.ai credit
- Public photo: an unsigned preset leaves the photo readable by anyone with its Cloudinary address
- Silent failure: add a node on the \`fail\` output of \`Switch\` if you want to hear about a failed render
- Sound: Seedance makes sound with the picture by default. How closely it voices the storyboard’s lines is up to the model
- Your data: the photo and the product name go to Google, Cloudinary and Kie.ai
- Your key: the Kie.ai key sits in two headers, so take it out before you share the workflow
- Credentials: the JSON holds none

## README

```markdown
# Fast-cut 15-shot product commercial from one photo

An n8n workflow that turns a product photo and the product's name into a 15-second commercial, cut to one shot a second.
Gemini describes the product, then writes a storyboard of fifteen shots and a short voiceover that ends on the name and
a tagline. Cloudinary hosts the photo, and Seedance 2.0 on Kie.ai renders the clip from the storyboard with the photo as
its reference.

## What is inside

- `workflow.json`: the workflow as n8n exports it, ten nodes and no sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The video model. The original copy asked Kie.ai for `sora-2-image-to-video`. OpenAI's deprecations page lists Sora 2
  as removed from its API on 24 September 2026. On 2 November 2026, Kie.ai's documentation page for that model
  answered 404 Not Found, and its index listed no Sora model. The call could no longer run, so `submitTask` now asks
  for `bytedance/seedance-2` on the same `jobs/createTask` endpoint. The original's choices are carried over:
  - `n_frames: "15"` became `duration: 15`. Seedance takes 4 to 15 seconds.
  - The two frames became `9:16` and `16:9`. The original also mapped two HD choices the form never offers, so they
    are gone.
  - `image_urls` became `reference_image_urls`, so the photo guides every shot instead of being the first frame.
  - `remove_watermark` is gone, since Seedance has no such field. `resolution` is set to `720p` and `generate_audio`
    to `true`, the model's own defaults written out.
- The Kie.ai key in the headers of `submitTask` and `checkStatus` was `Bearer <token>`. It now reads
  `Bearer <YOUR_KIE_API_KEY>`.
- The Gemini credential is gone from both Gemini nodes.

`checkStatus`, `Switch` and `downloadAdVideo` are unchanged. Kie.ai's task page lists the same states and the same
`resultJson` with `resultUrls` for every model on that endpoint.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A Gemini API key from Google AI Studio.
- A Cloudinary account, its cloud name and an upload preset whose signing mode is Unsigned.
- A Kie.ai API key, with credit for one Seedance clip on each run.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add a `Google Gemini (PaLM) API` credential and select it in `analyzeProductImage` and `Message a model`.
3. If your Gemini key is new, pick `models/gemini-3.8-flash` as the model in both of those nodes. Google's deprecations
   page, read on 2 November 2026, sets no shutdown date for `gemini-2.5-flash`, but it limits the 2.5 models to
   accounts that have used them before and names Gemini 3.8 Flash for new projects.
4. In `uploadImageCloudinary`, put your cloud name in the address where it says `<YOUR_CLOUD_NAME>`. Swap
   `YOUR_PRESET_NAME` for your preset and `YOUR_FOLDER_NAME` for a folder.
5. In `submitTask` and `checkStatus`, replace `<YOUR_KIE_API_KEY>` in the Authorization header with your key. The
   brackets go too, so the header reads Bearer, a space and the key.
6. Save, open the test address of `On form submission` and send one photo. Press Publish when the clip looks right.

## How a run goes

1. `On form submission` shows the Commercial Ad Agent form: `Product name`, `Upload product image` (JPG, PNG or WebP)
   and `Screen resolution` (`Portrait` or a wide frame), all three required. It confirms at once and the run goes on behind it.
2. `analyzeProductImage` asks `gemini-2.5-flash` for a one-line description of the product in the photo.
3. `Message a model` sends the product name and that line to `gemini-2.5-flash` with a long system message. It plays a
   director of photography and writes fifteen shots of one second each: a dark tease, close-ups of the material, a
   person using the product, then the name and a tagline. Each shot has a visual prompt and an audio line.
4. `getBinaryFile` takes the photo back from the form, since the Gemini nodes passed on text only.
5. `uploadImageCloudinary` uploads it with your unsigned preset and gets its `secure_url`.
6. `submitTask` sends the whole storyboard, the photo's address, the frame and the length to Kie.ai.
7. `Wait` pauses five minutes. It is version 1.1 with the unit set to minutes and no amount, so it takes the version's
   default amount of 5. `checkStatus` then asks for the task.
8. `Switch` reads `data.state`. `success` goes on to `downloadAdVideo`, and `waiting`, `queuing` or `generating` go back
   to `Wait`. `fail` has no node after it.
9. `downloadAdVideo` fetches the clip from the first address in `resultUrls`. It stays in the run as a file.

## Change the look

- The arc, the pace and the voiceover: the system message of `Message a model`. The ending rule asks for the name and a
  tagline. The form has no tagline field, so the model writes one. To use your own, add a field to the form and a
  `Tagline:` line to the text of `Message a model`.
- The look of every shot: the tech specs line in the same message, which is added to every visual prompt.
- Frame, length and quality: `aspect_ratio`, `duration` and `resolution` in the body of `submitTask`. Seedance takes
  `480p`, `720p`, `1080p` or `4k`.
- Sound: `generate_audio` in the same body.
- How often it checks: `Wait`. Set an amount of 1 or 2 for a shorter wait between checks.

## Good to know

- Kie.ai bills each clip by its length, at the prices on its pricing page. The two Gemini calls cost
  little next to it. Try one photo before a batch.
- Once the workflow is published, anyone with the form's address can start a render on your Kie.ai credit.
- An unsigned Cloudinary preset leaves the photo readable by anyone with its address.
- A render that fails ends the run without a message. Add a node on the `fail` output of `Switch` to be told.
- Seedance makes sound with the picture by default. How closely it voices the storyboard's audio lines is up to the
  model, so listen before you post.
- The photo and the product name go to Google, Cloudinary and Kie.ai.
- The Kie.ai key sits in two headers, so take it out before you share the workflow.
```

## What is in it

2 files, 22 KB, downloaded as a zip.

```text
README.md  6 KB
workflow.json  16 KB
```

## Workflow check

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

- Steps: 10 steps, starting on a form
- AI: 2 steps call an AI model: analyzeProductImage and Message a model
- Sign-ins: Signs in to: Google Gemini and Kie.ai
- API keys: No API key is left in the file; 1 blank in it for your own key
- Step types: Mindket’s checker reads all 6 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/b39b588a-479f-4665-bf52-f933a9476bd1)
- [Its page on Mindket](https://mindket.com/p/b39b588a-479f-4665-bf52-f933a9476bd1)
