PL Log inCreate account
Launching in October 2026. Accounts, model catalog, calculator and docs are live. Studio is available in preview; generation is awaiting activation.

AI UGC Ads - Avatar, Product and a Spoken Line

AI UGC ads step by step: an avatar holding your product in Nano Banana Pro, an 8-10 s clip with a spoken line, 5 hooks in 9:16, cost and AI labeling rules.

An AI UGC ad is a vertical clip where a person holds a product and talks to the camera like a regular user. I build one in three steps: a frame of the avatar holding the product in Nano Banana Pro (from $0.0747 per image) with product photos as references, an 8-10 second clip with a spoken line in Kling 3.0 for English (from $0.169 per second, audio is an add-on) or MiniMax H3 for other languages (from $0.161 per second, audio included), and several variants of the opening line, the hook, with captions added in the edit. Below: prompts, which model to use for which language, the cost of five variants and the AI labeling rules under the EU AI Act, Meta and TikTok.

What an AI UGC ad needs

Before I generate anything, I write a short plan for each ad:

  • format: 9:16, because UGC lives in Reels, TikTok and Shorts,
  • character: an invented person (age, style, setting), never a real person's likeness without their consent,
  • product: 1-3 photos of the real packaging from different sides,
  • line: one or two short sentences for 8-10 seconds, roughly 20 words at most,
  • hook: the first 2 seconds, which I test in several variants,
  • label: a note that the character and footage are AI-generated (details below).

Captions, logo and the end card go in during editing. The general product ad workflow (packshot, animation, music) is in AI product video workflow. This post covers the version with a talking character.

Step 1: the avatar with your product in Nano Banana Pro

I make the starting frame in Nano Banana Pro because it takes up to 14 reference images and supports 9:16 directly. In the "Reference images" field in Studio (image_urls in the API) I add product photos, and if I want the same character across several ads, an earlier frame of that character too. The prompt describes the person, the gesture and the setting, and points to the product as "the one from the reference":

text
Vertical smartphone selfie photo, 9:16. A woman in her early thirties with shoulder-length
dark hair, natural makeup, oversized beige sweater, sitting on a sofa in a bright living room.
She holds the skincare jar from the reference images at chest height, label facing the camera,
fingers not covering the label. Natural window light, slightly casual framing, looking into
the lens with a friendly half-smile. Keep the product shape, colors and label exactly as in the
reference. No other text, no logos, no watermarks.

What I watch for at this step:

  • Label facing out, fingers off it. Hands and text are what video models distort most, so I get them right in the still.
  • A "shot on a phone" look. A slightly uneven frame and window light look more natural than a studio packshot, which is the point of UGC.
  • 2k resolution. The frame becomes the first frame of the video, so this is not the place to save.
  • 3-4 attempts. I keep the frame with a readable label and five fingers per hand.

Keeping one face across many ads is covered in consistent character AI video.

Step 2: an 8-10 second clip with a spoken line

The frame becomes the first frame of the clip, and the prompt describes the motion, the voice and the line itself. The model depends on the language. In my speech test on 28 September 2026 every model said the same hard 12-word Polish sentence:

ModelClip lengthWrong words in my test (Polish)Audio on JantarisPrice
Kling 3.03-15 s10 of 12generate_audio, add-onfrom $0.169 per second
MiniMax H34-15 s1 / 3 of 12stereo, always includedfrom $0.161 per second
Veo 3.1 (Quality)always 8 s0 / 2no audio toggle in the formfrom $2.53 per video per 8 s clip
Gemini Omni 1.14, 6, 8 or 10 s0 / 0catalog description does not mention audiofrom $1.02 per video (6 s clip)

The numbers are wrongly transcribed words in faster-whisper (large-v3 / medium models), one attempt per model, tested through other providers' APIs. What I take from it for UGC ads:

  • English lines: Kling 3.0 with generate_audio on. English is on Kling's official list of speech languages and it handles it well. Polish is not on that list, and it showed.
  • Other languages: MiniMax H3. One mistake in a tongue twister, and every clip has audio at no extra cost. An 8-10 s clip fits its 4-15 s range.
  • Veo 3.1 and Gemini Omni 1.1 spoke Polish most cleanly, but I tested them outside Jantaris, and our forms show no audio toggle. Before planning a series, make one test clip and check that it has a speech track.
  • Gemini Omni 1.1 at 8 and 10 s costs more than at 6 s. Studio and the cost calculator show the exact amount per length.

The clip prompt: scene and voice description, the line in quotes, numbers written out as words, and no captions:

text
The woman from the first frame looks into the phone camera and talks naturally, slight handheld
movement, she lifts the jar a little when she mentions it. She says clearly in English, warm
friendly female voice, normal pace: "My skin is dry and every cream felt sticky on me.
This one sinks in within a minute." Quiet room ambience, no music, no subtitles,
no on-screen text.

Through the API it is one request with the frame URL in image_url. Kling takes the aspect ratio from the image, so a vertical frame gives a vertical clip:

bash
curl https://jantaris.com/v1/generate \
  -H "Authorization: Bearer $JANTARIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-3.0",
    "input": {
      "prompt": "The woman from the first frame looks into the phone camera and talks naturally, slight handheld movement. She says clearly in English, warm friendly female voice: \"My skin is dry and every cream felt sticky on me. This one sinks in within a minute.\" Quiet room ambience, no music, no subtitles, no on-screen text.",
      "image_url": "https://your-shop.com/ugc/frame-cream.png",
      "resolution": "1080p",
      "duration": 8,
      "generate_audio": true
    }
  }'

You get the finished file from GET /v1/tasks/{id}. I check the speech with a transcript (faster-whisper or auto-captions in CapCut) against the script, because ears let swallowed word endings slip through.

Step 3: hook variants

In a UGC ad the first sentence carries most of the weight. I run the same frame and product with five different openings and keep the rest of the line unchanged:

  • problem: "My skin is dry and every cream felt sticky on me.",
  • question: "Does your moisturizer leave a greasy film too?",
  • number: "One layer in the morning and I forget about it until evening.",
  • surprise: "I did not think a cream could sink in within a minute.",
  • instruction: "Before you buy another cream, give me ten seconds."

All hooks talk about product features, not invented buyer experiences. More on that in the ethics section. Through the API, five variants are a loop over the list of lines:

python
import os, time, requests

API = "https://jantaris.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
FRAME = "https://your-shop.com/ugc/frame-cream.png"
REST = "It sinks in within a minute and does not pill under makeup."

HOOKS = [
    "My skin is dry and every cream felt sticky on me.",
    "Does your moisturizer leave a greasy film too?",
    "One layer in the morning and I forget about it until evening.",
    "I did not think a cream could sink in within a minute.",
    "Before you buy another cream, give me ten seconds.",
]

tasks = []
for hook in HOOKS:
    prompt = (
        "The woman from the first frame looks into the phone camera and talks naturally, "
        "slight handheld movement. She says clearly in English, warm friendly female voice: "
        f'"{hook} {REST}" Quiet room ambience, no music, no subtitles, no on-screen text.'
    )
    task = requests.post(f"{API}/generate", headers=HEADERS, timeout=30, json={
        "model": "kling-3.0",
        "input": {"prompt": prompt, "image_url": FRAME, "resolution": "1080p",
                  "duration": 9, "generate_audio": True},
    }).json()
    print(task["id"], task["estimated_cost"])
    tasks.append(task)

for task in tasks:
    while task["status"] not in ("succeeded", "failed"):
        time.sleep(10)
        task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
    print(task["status"], task["output"][0]["url"] if task["output"] else task["error"])

For lines in another language, change model to minimax-h3, resolution to 768P and remove generate_audio. Links in output expire after a limited time, so download the files right away. For larger batches use webhooks instead of polling.

9:16 and captions

I lock the vertical format in step 1, because the starting frame decides the clip's aspect ratio. In the edit I:

  • trim the first and last half second if the character freezes or cuts off a word,
  • add captions as a layer in the editor, never in the prompt (hence no subtitles),
  • keep captions in the middle of the frame, because the bottom and right side of a reel are covered by buttons and the caption,
  • add the AI label and an ad disclosure in the caption and on screen,
  • watch the final file on a phone with the sound off, the way most people see it.

What 5 UGC ad variants cost

Example: one frame of the character with the product and five hooks of 8-9 seconds, each in two attempts. The Veo 3.1 column counts 8-second clips, because that model makes no other length.

ItemQuantityKling 3.0 with audioMiniMax H3 at 768PVeo 3.1
Avatar frame with product4 attempts4 × from $0.0747 per image4 × from $0.0747 per image4 × from $0.0747 per image
Clips with the line5 hooks × 2 attempts × 9 s = 90 s (Veo: 10 clips)90 × from $0.169 per second90 × from $0.161 per second10 × from $2.53 per video
Captions, logo, edityour editor$0 from balance$0 from balance$0 from balance

Prices come from the pricing page, so the table is current on the day you read it. The Kling price shown above is the "from" rate at 720p without audio. With generate_audio on and at 1080p the per-second rate is higher, and Studio shows it before you click. The MiniMax H3 "from" rate is for 768P, and in Veo 3.1 720p and 1080p share one price. Failed generations (status failed) cost $0. Run your own numbers, including Kling with audio and Gemini Omni at 8 or 10 s, in the AI cost calculator. The balance has no expiry and there is no subscription.

UGC prompt template

I copy this template into every new ad and replace the fields in square brackets. The first part goes to the image model, the second to the video model:

text
[FRAME - image model, references: product photos]
Vertical smartphone selfie photo, 9:16. [AGE AND LOOK OF THE CHARACTER], [CLOTHES],
[PLACE: kitchen / car / bathroom / living room]. [Holds / points at] the [PRODUCT]
from the reference images, label facing the camera, fingers not covering the label.
Natural [window / daylight / evening lamp] light, casual framing, looking into the lens.
Keep the product exactly as in the reference. No other text, no logos, no watermarks.

[CLIP - video model, first frame: the frame above]
The [person] from the first frame looks into the phone camera and talks naturally,
slight handheld movement, [GESTURE WITH THE PRODUCT]. She/He says clearly in [English / Polish],
[VOICE: warm female / low calm male], normal pace: "[HOOK] [PRODUCT FEATURE]."
[AMBIENT SOUND], no music, no subtitles, no on-screen text.

Rules for the line: numbers as words, one or two sentences for 8-10 seconds, no names the model might mispronounce (I put the brand name in a caption or a voice-over in the edit).

Labeling AI content and ethics

An ad with a generated person talking to the camera looks like real footage. So I follow three rules: label the content as AI-generated, never let the avatar pose as a real customer, and never put fake reviews in its mouth, such as "I bought it and I love it" from a person who does not exist. The character talks about product features that can be checked, not about supposed personal experience. I checked the rules and platform policies on 4 October 2026:

  • EU AI Act, Article 50. The transparency obligations apply from 2 August 2026. Anyone who publishes a deepfake, meaning realistic image, audio or video content that could falsely appear authentic, must disclose that it was artificially generated or manipulated. Fines reach EUR 15 million or 3% of worldwide turnover. A realistic "customer" talking to the camera can easily fall under this, so I label every such ad. Sources: European Commission, Quick Facts: Transparency rules for AI systems and the text of Regulation 2024/1689.
  • Meta (Facebook, Instagram). Meta adds an "AI info" label to ads created or significantly edited with AI tools, including third-party tools detected through metadata. The label sits in the "About this ad" menu, and mandatory self-disclosure applies to social issue, election and political ads. Sources: Meta, How AI-generated images in ads are identified and labeled and Meta Transparency Center, social issue and political ads.
  • TikTok. In Ads Manager, during ad creation, you tick "This ad contains AI-generated content" when the image, video or audio is completely AI-generated or significantly modified by AI. After submission it cannot be unticked without changing the creative, and Spark Ads follow the Community Guidelines rules on AI content. Source: TikTok Ads Manager, Add disclaimers to ads.
  • Fake reviews. In the EU, the Omnibus Directive added submitting or commissioning fake consumer reviews to the blacklist of unfair commercial practices. In the US, the FTC's final rule bans fake reviews and testimonials, including ones attributed to people who do not exist or were generated by AI. Sources: Directive 2019/2161 and FTC, final rule banning fake reviews and testimonials.

This is not legal advice. For client campaigns or regulated categories (supplements, finance, health), have a lawyer review the script.

Frequently asked questions

How do I make an AI UGC ad?

Generate a frame of an invented character holding the product (Nano Banana Pro with product photos as references, 9:16), animate it with a video model that speaks, such as Kling 3.0 for English or MiniMax H3 for other languages, then add captions, an AI label and several hook variants in the edit.

Which AI video model is best for spoken lines?

For English I use Kling 3.0 with audio on. For other languages I start with MiniMax H3, which made one mistake in 12 words in my Polish test and always includes audio. Veo 3.1 and Gemini Omni 1.1 spoke even more cleanly in that test, but make a test clip first and check the audio track.

How much does an AI UGC ad cost?

Frames plus video seconds. Five 9-second hooks in two attempts with MiniMax H3 at 768P come to 4 × from $0.0747 per image + 90 × from $0.161 per second. With Veo 3.1 it is 10 clips × from $2.53 per video. Failed generations cost nothing.

Do I have to label an ad with an AI avatar?

In practice, yes. From 2 August 2026 the EU AI Act requires disclosure of realistic AI-generated content, TikTok asks you to tick "This ad contains AI-generated content", and Meta labels such ads with "AI info". I also add a note in the caption and on screen.

Can an AI avatar recommend a product like a customer?

It should not. An invented person saying they bought and love the product is effectively a fake review. The avatar can show the product and talk about its features, but it does not pretend to be a real customer.

How long can a clip with a spoken line be?

Kling 3.0 makes 3-15 seconds, MiniMax H3 4-15 seconds, Gemini Omni 1.1 4, 6, 8 or 10 seconds, and Veo 3.1 always 8 seconds. For UGC I plan 8-10 seconds with at most two short sentences and build longer ads from several clips.