AdviblyDocs

Launch campaign image set

Produce one coherent set of on-brand statics - resolve the product, prove one prompt, fan it out across every placement.

A campaign set is not five unrelated images. It is one prompt system rendered at several aspect ratios, so the placements look like they came from the same shoot.

The cost of getting this wrong is paid at the end, in a set you have to redo. So render one proof first, and only fan out once the proof is right.

Resolve the subject

advibly_list_brands {
  context: "Finding the brand and its identifier before producing the requested launch campaign image set for the user."
}
  → brand_id, brand_type

brand_type decides where the subject comes from:

brand_typeThe subject of the ad
ecom_storeA catalog product. Call advibly_get_products and hold a product_id.
websiteThe offer itself. Describe the scene; there is no product photo.
app_ios / app_androidApp-store screenshots, already in advibly_get_assets.

Passing product_id attaches that product's hero photo as a reference, so the generated image features the real product rather than a plausible-looking invention. On a store brand, use it.

Open a project

A set is a pipeline, and a pipeline that skips this scatters a dozen loose files across the user's library.

advibly_create_project {
  brand_id,
  name: "Spring launch statics",
  context: "Grouping every image of the requested launch campaign set under one project in the user's library."
}
  → project_id

Pass that project_id on every generation call below. Free.

Write the prompt system once

Every image in the set shares a scene, a lighting setup, a palette behaviour and a type treatment. Write that paragraph once and change only the framing per placement.

advibly_generate_image {
  brand_id,
  project_id,
  product_id?,
  prompt: "Photorealistic overhead flat-lay on warm sand-coloured linen, soft
    late-afternoon window light from the left, real fabric texture and visible
    grain. The product sits centre-right, label facing camera. Headline
    \"Made for mornings\" in the brand display face, upper-left, generous
    margin. No watermark, no stray text, no unrelated logos.",
  quality: "medium",
  context: "Rendering one proof image for the requested launch set before committing the full set of placements."
}

Three rules that decide whether the set is usable:

  • Put on-image text in quotes, exactly as it should read, spell the brand name out, and say where it sits. Anything described loosely comes back loosely.
  • Leave hex codes and font names out when on_brand is on. The brand kit is attached as a reference automatically, and restating it in the prompt fights the reference. Describe the scene instead.
  • Ask for real texture and candid framing rather than quality words like 8K or cinematic, which push the model toward stock-photo gloss.

brand_id decides where the generation is filed. on_brand (default true) decides whether brand styling is applied. They are separate arguments, and a set that came back off-brand is usually on_brand: false.

Check the proof

The proof is good when the product is the real product, the headline reads character-for-character as written, and the composition has room for the text at every ratio you are about to request.

If the text came back wrong, fix the prompt rather than the model. If the product came back wrong, you are missing product_id.

Vary the argument, not the aesthetics

A set is five angles, not twelve variations of one. The look stays fixed; the line it makes changes:

AngleThe line it makes
ProblemThe thing that is annoying today
ProductWhat it is, plainly
OfferThe launch price or the deadline
ProofA number, a review, a result
ComparisonAgainst the obvious alternative

Change the headline and the staging per angle. Keep the scene, the light and the type treatment from the proof.

Fan out the placements

Generate each placement rather than cropping one image. A 9:16 built as 9:16 puts the headline where it belongs; a 1:1 cropped to 9:16 puts it off-screen.

One call per placement, changing aspect_ratio and nothing else:

aspect_ratioPlacement
1:1Feed square, marketplace
4:5Instagram and Facebook feed
9:16Stories, Reels, TikTok, Shorts
16:9YouTube, display, website hero
3:2 / 21:9Email header, wide banner

num_images renders up to four variants of the same call and bills for each, which is the right tool for picking between takes at one ratio, and the wrong one for covering several ratios.

Raise quality for the finals

Explore at medium. Raise only the placements that ship.

qualityWhen
lowThumbnails and layout tests.
mediumThe default. Every proof, and most finals.
highA hero placement. Roughly four times medium.
xhigh / maxA print or billboard crop. Each step is another ~4x.

resolution moves independently: 1K for a proof, 2K (the default) for social, 4K when the asset gets cropped or printed.

Story and Reels placements put platform UI over the top and bottom of the frame. Ask for generous margins there, and check nothing that matters sits under the chrome.

high and above, with several brand references attached, occasionally runs past five minutes. Re-submitting does not cancel the first render and you pay for both - see Generation statuses.

Collect the set

Fast renders return status: completed with their URLs inline. Slower ones return status: pending and a generation_id; call advibly_get_generation for those, and only when you need the URL for a next step.

advibly_list_generations {
  brand_id,
  project_id,
  type: ["image"],
  limit: 24,
  context: "Collecting every completed image from the requested launch set so the user receives the finished placements together."
}

type is a list, and limit defaults to 4 - a six-placement set comes back truncated without it.

Set the strongest placement as the project cover, so the library shows the campaign rather than a cropped variant:

advibly_update_project {
  project_id,
  cover_generation_id,
  context: "Setting the hero placement as the project cover so the finished campaign set is identifiable in the library."
}

Next

On this page