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_typebrand_type decides where the subject comes from:
brand_type | The subject of the ad |
|---|---|
ecom_store | A catalog product. Call advibly_get_products and hold a product_id. |
website | The offer itself. Describe the scene; there is no product photo. |
app_ios / app_android | App-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_idPass 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_brandis 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
8Korcinematic, 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:
| Angle | The line it makes |
|---|---|
| Problem | The thing that is annoying today |
| Product | What it is, plainly |
| Offer | The launch price or the deadline |
| Proof | A number, a review, a result |
| Comparison | Against 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_ratio | Placement |
|---|---|
1:1 | Feed square, marketplace |
4:5 | Instagram and Facebook feed |
9:16 | Stories, Reels, TikTok, Shorts |
16:9 | YouTube, display, website hero |
3:2 / 21:9 | Email 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.
quality | When |
|---|---|
low | Thumbnails and layout tests. |
medium | The default. Every proof, and most finals. |
high | A hero placement. Roughly four times medium. |
xhigh / max | A 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
- Schedule the set: Schedule a week of posts.
- Turn a still into motion: UGC video ad, end to end.
- Hand the whole job to an agent: the
static-adsskill runs this across fifteen proven layouts.