PL Log inOpen Studio
Preview version. Model catalog, prices, calculator and docs are live. Generation goes live at launch.

A Product Ad Made With AI, From Still Frame to Vertical Spot

My AI product ad pipeline: packshot in Nano Banana Pro, motion in Kling 3.0, a song from Mureka V9, the 9:16 edit, a cost formula and a Python script.

A short vertical ad for one product needs three generated ingredients and one human edit. The ingredients: a still of the product from Nano Banana Pro (from $0.07 per image), motion from Kling 3.0 (from $0.0963 per second), and a jingle from Mureka V9 ($0.15 per song). The edit happens in any video editor. On Kadraris all three models share one account, one balance and one API key, so the whole chain can run in Studio or in a script.

Below is how I run it, two problems my own tests exposed, a formula to price any ad, and Python code that chains the generation steps.

The pricing formula comes first

When I quote an ad, I use this:

text
ad cost = images × price per image
        + video seconds × takes × price per second
        + songs × price per song

Example: a 9:16 spot of about 14 seconds made of two 7-second shots.

LineHow manyCost
Stills4 versions, 2 used4 × from $0.07 per image
Kling 3.0 motion2 shots × 7 s × 2 takes = 28 s28 × from $0.0963 per second
Jingle2 songs to pick from2 × $0.15 per song
Edit, captions, logoyour editornothing from the balance

Prices come live from the pricing page. Kling's "from" rate is the 720p tier; for 1080p use the higher figure Studio shows. The 2× on takes covers clips that render fine but lose in the edit. Jobs ending as failed are free, because the reserved amount goes back in full. For more on per-second math, see AI video cost per second and Kling 3.0 API pricing, or plug numbers into the AI cost calculator.

Decisions to make before generating anything

  • Ratio: 9:16 for Reels, TikTok and Shorts; 1:1 or 4:5 for feed; 16:9 for YouTube and banners.
  • Length: most product spots are 10-20 seconds, so two or three shots.
  • Shots: for example "bottle on slate, slow push-in" and "close detail, light passes over it".
  • Sound: a generated song, the video model's ambient audio, or music plus captions.

Ratio is the one you cannot change later. Switching mid-project means new stills, and as the test below shows, the product can change along with the frame.

Stage 1: the still frame

This image becomes frame one of the video, so it sets the quality ceiling. My two usual models:

Nano Banana ProGPT Image 2.5
Pricefrom $0.07 per image$0.05 per image
Tall formats9:16, 4:5, 3:4, 2:31024x1536 (2:3)
Referencesup to 14up to 16
Output1k, 2k, 4kmax 1536 px tall

For 9:16 I go with Nano Banana Pro, which renders that ratio directly. On Kadraris GPT Image 2.5 stops at 2:3 portrait, so you would crop and need spare room above and below the product.

Give the model the real product

If the product exists, upload a photo of it (Reference images in Studio, image_urls in the API). The prompt then describes only the setting:

text
Studio product photo of this perfume bottle on wet black stone, water splash
frozen around the base, warm rim light, dark background, no other text, no logos
Nano Banana Pro form in Studio with a product prompt, ratio buttons and 1k/2k/4k
Nano Banana Pro: up to 14 references, price visible before generating

What I learned from changing only the ratio

As a stand-in product I used an amber pendant rendered with Z-Image Turbo (Z-Image Turbo on my local RTX 4090, 9 steps, 4-5 seconds per picture). One prompt, one seed, three formats:

text
macro product photo of a raw Baltic amber pendant with a tiny insect inclusion,
lying on dark wet slate, a single warm backlight making the amber glow,
shallow depth of field, high detail
Square frame: amber with a silver loop on slate
1:1: silver loop, an ant inside
Tall frame: amber with a different ring
9:16: new ring, a beetle low in the stone
Wide frame: amber hanging from a cord
16:9: a cord, a winged insect and a twig

Three formats gave three different pieces of jewelry. For a made-up product, no harm done. For something you sell, it means:

  • render in the final ratio from the start rather than cropping a square,
  • attach the product photo for every format so the model never redesigns it,
  • try layouts and light on a cheap model like Z-Image ($0.02 per image), then make the final reference-based still on Nano Banana Pro.

Extra text and borrowed logos

When I tested ad stills for my Polish blog (promptowy.com), the headline copy came out right, but some images gained small unrequested lettering or a logo that looked like an existing brand.

Amber perfume in a ring of splashing water on black stone, line NOC. Eau de Parfum
My FLUX 3 Image test: clean slogan at the bottom, rim-lit studio look

That is why every ad prompt of mine ends with no other text, no logos, and the real logo is added in the edit. General prompt structure is in the AI image prompt guide.

Stage 2: make it move

The still is the first frame; the prompt talks only about motion.

Kling 3.0Seedance 2.5
Pricefrom $0.0963 per secondfrom $0.261 per second
Length3-15 s4-30 s
Resolution720p, 1080p, 4K480p, 720p, 1080p
Soundoptionalon by default

Kling 3.0 takes its ratio (16:9, 9:16 or 1:1) from the start image; Seedance 2.5 offers 16:9, 9:16, 1:1, 4:3, 3:4 and 21:9. Both accept an end frame. I use Kling for short, clean product shots; 1080p and 4K cost more per second than the listed 720p rate, and Studio shows the exact figure. Seedance is the pick for a single unbroken take up to 30 seconds.

Kling 3.0 form in Studio with a motion prompt, length, resolution and Start frame (URL)
Kling 3.0: start frame from a link or upload, 3-15 s, sound optional

Motion lines that work for products:

  • slow push-in towards the product, the backlight slowly intensifies
  • the camera slowly orbits the product, product stays still and centered
  • light sweeps across the surface, droplets glisten, camera static
  • shallow focus pull from the background to the product

I do not let the product spin on its own or get picked up by a hand. Labels and hands are what AI video distorts most, so with a branded item the camera and light move and the object stays put. More moves are in AI video prompts: camera moves; the general still-to-clip process is in the image-to-video guide.

Vendor sample: Kuaishou, image-to-video from a start frame

Seedance 2.5 can also edit an existing clip, for instance swapping in a different product while keeping the camera path and framing. Handy when one spot works and you need it for five more SKUs.

Vendor sample: ByteDance, video edit swapping product, style or background

Stage 3: the jingle

Mureka V9 composes and sings a full song from your lyrics and a style line, so the brand claim can be the hook. It costs $0.15 per song whatever the length.

  • A 15-second spot needs one verse and one chorus; cut the rest.
  • Want the music without singing? Pass the song through Music Extractor.
  • Or use the video model's own sound (default in Seedance 2.5, optional in Kling 3.0). Good for ambience and effects, not for a sung slogan.

Fields and code for this step are in the Mureka V9 API guide.

Stage 4: assemble the vertical cut

  1. Put the shots on a 9:16 timeline and shave a few frames off the start and end of each, since those are usually the weakest.
  2. Drop in the music and fade it out.
  3. Captions and logo go on as editor layers, never in a prompt.
  4. Leave the bottom and right edges empty, the app interface sits there.
  5. Watch the export on a phone before posting.

The chain as a Python script

For a full catalog, automate the three generation stages. Fields follow the generate docs:

python
import os, time, pathlib, requests

API = "https://kadraris.com/v1"
KEY = os.environ["KADRARIS_API_KEY"]
HEADERS = {"Authorization": f"Bearer {KEY}"}

def run(model, inp, wait=0):
    """Start a task and block until it finishes."""
    params = {"wait": wait} if wait else None
    task = requests.post(f"{API}/generate", params=params,
                         headers=HEADERS, timeout=wait + 30,
                         json={"model": model, "input": inp}).json()
    pause = 2
    while task["status"] not in ("succeeded", "failed"):
        time.sleep(pause)
        pause = min(pause * 1.5, 15)
        task = requests.get(f"{API}/tasks/{task['id']}",
                            headers=HEADERS, timeout=30).json()
    if task["status"] == "failed":
        raise RuntimeError(f"{model}: {task['error']}")
    print(model, task["cost"])
    return task

def save(task, name):
    # result links expire, so download immediately
    url = task["output"][0]["url"]
    data = requests.get(url, timeout=300).content
    pathlib.Path(name).write_bytes(data)

# stage 1: vertical still built on the real product photo
img = run("nano-banana-pro", {
    "prompt": "Studio product photo of this amber pendant "
              "on dark wet slate, warm backlight, shallow "
              "depth of field, no other text, no logos",
    "aspect_ratio": "9:16",
    "resolution": "2k",
    "image_urls": ["https://your-store.example.com/images/pendant.jpg"],
}, wait=60)
save(img, "packshot.png")

# stage 2: motion; Kling reads the ratio from the image
clip = run("kling-3.0", {
    "prompt": "slow push-in towards the pendant, the backlight "
              "slowly intensifies, camera only moves forward",
    "image_url": img["output"][0]["url"],
    "duration": 7,
    "resolution": "1080p",
    "generate_audio": False,
})
save(clip, "shot1.mp4")

# stage 3: jingle
song = run("mureka-v9", {
    "lyrics": "[Verse]\nA spark of sun inside the stone\n"
              "[Chorus]\nAmber light to call your own",
    "prompt": "cinematic pop, warm piano, soft female vocal, 90 bpm",
}, wait=120)
save(song, "music.mp3")

When many products run at once, swap polling for webhooks. The edit I still do by hand: judging captions and logo placement by eye is quicker than coding it.

Questions

Do I need to know how to edit video?

Only the basics: placing clips on a timeline, trimming, adding a music track and a text layer. Free tools like CapCut or DaVinci Resolve cover all of it. Everything else runs in Kadraris Studio under the Image, Video and Audio tabs.

Why does my product look different in the video than in the still?

The video model redraws every frame, and labels and fine details drift most when the object moves. Keep the product still, move the camera or the light, and keep clips short.

Kling 3.0 or Seedance 2.5 for an ad?

Kling 3.0 for polished 3-15 second shots up to 4K. Seedance 2.5 when you want one take up to 30 seconds with generated sound, or when you need to swap a product inside an existing clip.

How do I make versions for several products cheaply?

Fix the prompt template and only change the product reference. Test layouts on Z-Image first, and if one spot already works, use Seedance 2.5 to swap the product inside that clip instead of starting over.