Recreate an ad you like
Tear a reference ad down with the analyser, then rebuild it shot by shot on your own product using two reference images.
Someone sends a link to an ad that works and asks for the same thing with their product in it. The temptation is to watch it, describe it in prose, and generate from the description.
That loses exactly the details you were trying to keep. The reliable technique is a teardown followed by two references per shot.
Tear the reference down
advibly_analyze_video is free and reads the real file, not a summary of it.
advibly_analyze_video {
video_url: "https://www.youtube.com/watch?v=...",
format: "ad_breakdown",
context: "Reading the structure of the reference ad the user wants recreated before rebuilding it with their own product."
}
→ analysis_id, hook, cta, claims, on_screen_text, transcript, shots, segmentsad_breakdown returns the creative teardown: the hook, the CTA, the claims,
every piece of on-screen text, a verbatim timestamped transcript, a shot list,
and segments - a 3-10 second cut plan that is your shot-by-shot build order.
| Source | How to pass it |
|---|---|
| YouTube | The watch URL, directly. |
| An Advibly generation | generation_id instead of video_url. |
| A direct file | Public https URL, up to 18 MB. |
| Cloud Storage | A gs:// URI. |
A share page (Google Drive, Dropbox) is not a file. Download it and upload it
via advibly_create_upload_url first.
To ask more about the same ad, pass follow_up_of: analysis_id with just a
question. The video is already in context, which makes it the cheapest way
to keep digging.
Verify the cut points
Timestamps in the teardown are the model's estimate. Check them against the real duration before you build anything around them. For a frame-precise look at one window:
advibly_analyze_video {
video_url,
clip_start_seconds: 2.4,
clip_end_seconds: 5.0,
fps: 6,
detail: "high",
question: "Exactly when does the product first enter frame, and what text is on screen?",
context: "Confirming the precise cut point and on-screen text of the reference ad's opening shot before rebuilding it."
}clip_* and fps switch the analyser into static mode, which samples the
window at a fixed rate instead of navigating agentically.
Decide what transfers
Structure transfers between brands. Aesthetics usually do not: the reference's palette belongs to a different company, and carrying it over makes the ad look like theirs rather than the user's.
| Keep | Drop |
|---|---|
| The argument it makes | Their colours |
| The beat order and pacing | Their type |
| The product's role in frame | Their voice and claims |
The exception is the shot-level composition, which you keep deliberately in the next step because that is what the reference was for.
Open a project
advibly_create_project {
brand_id,
name: "Competitor spot, our version",
context: "Grouping every rebuilt shot and the final assembly of the requested ad recreation into one project."
}
→ project_idRebuild each shot: two references, never prose
This is the step everything else depends on. For each segment in the cut plan, generate the opening still with both the source frame and your product as reference images:
advibly_generate_image {
brand_id,
project_id,
reference_image_urls: [sourceFrameUrl, productPhotoUrl],
prompt: "Recreate the composition, framing, lighting and colour grade of
image 1, with the product from image 2 in place of its product. Keep the
camera angle and the position in frame identical.",
context: "Rebuilding the reference ad's opening composition with the brand's own product as the subject."
}The source frame carries the composition, the grade and the crop. The product photo carries the thing you are actually selling. Describing either one in words is where the resemblance goes.
Get the source frames by extracting stills from the reference, or by asking the analyser for the exact moments and pulling those frames.
A recreation is a new creative execution on your own product, not a copy of someone's footage. Rebuild the structure - hook, pacing, shot grammar, CTA - and put your own product, brand and claims in it.
Animate each still
advibly_generate_video {
brand_id,
project_id,
start_image_url: rebuiltStillUrl,
prompt: "Slow handheld drift right, the subject stays centred.",
duration: 4,
aspect_ratio: "9:16",
context: "Animating the rebuilt opening still to match the reference ad's camera move for that segment."
}Match each clip's duration to its segment length in the cut plan. Describe
the camera move only; the still already decided the look.
Re-voice it
Rewrite the transcript for your product, keeping the beat structure and the line lengths, then:
advibly_generate_voiceover {
brand_id,
project_id,
text: "...",
voice: "eve",
context: "Generating the rewritten narration for the recreated ad so the timing matches the reference ad's beat structure."
}0.03 credits per 1000 characters. Write to time at roughly 2.5 words a second.
With the default xai provider the text takes inline [pause], [sigh],
[laugh] and wrapping <whisper> / <slow> tags; with cartesia those tags
are read aloud, so leave them out there.
Assemble to the cut plan
advibly_render_composition {
brand_id,
project_id,
scenes: [ { source: clip1 }, { source: clip2 }, { source: clip3 } ],
voiceovers: [
{ source: voGenerationId, start_seconds: 0 }
],
music: musicGenerationId?,
texts: [
{ content: "60% off, today only", start_seconds: 8.5, position: "bottom", size: "lg" }
],
context: "Assembling the rebuilt shots, rewritten narration and on-screen text into the finished recreated ad."
}One voiceover segment per scene, each started at that scene's timeline offset, keeps narration locked to the visuals. A single full-length track also works when the pacing already matches.
The other route: restyle the clip itself
When the ask is "the same ad, different look" rather than "the same ad, our product", skip the rebuild entirely:
advibly_generate_video {
brand_id,
model: "gemini-omni-flash-1.1",
source_video_url: sourceClipUrl,
prompt: "Restyle as hand-painted gouache animation, warm palette.",
context: "Restyling the user's existing clip into the requested visual world while keeping its timing intact."
}Video-to-video output inherits the source's length and aspect ratio, so
duration and aspect_ratio are ignored. It needs an actual video file; hand
it a still and the call is refused rather than silently wasting four minutes.
Next
- Give the recreation captions and a schedule: UGC video ad, Schedule a week of posts.
UGC video ad, end to end
Cast an actor, write a spoken script, shoot the take and the b-roll, caption it, and cut one finished vertical ad.
Schedule a week of posts
Turn finished generations into a scheduled week across connected accounts, with per-platform overrides and comment-to-DM armed before publish.