AdviblyDocs

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, segments

ad_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.

SourceHow to pass it
YouTubeThe watch URL, directly.
An Advibly generationgeneration_id instead of video_url.
A direct filePublic https URL, up to 18 MB.
Cloud StorageA 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.

KeepDrop
The argument it makesTheir colours
The beat order and pacingTheir type
The product's role in frameTheir 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_id

Rebuild 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

On this page