Mattress Black Friday video ad: a dimmed bedroom clip and a price card
Make a mattress Black Friday ad with AI: one 8-second bedroom clip, a dim pass, and a price-card overlay on top, about $1.12 in Sume jobs.

To make a mattress Black Friday video ad with AI, generate one short bedroom clip, dim it so type can sit on top, then lay a price-card still over it with Timeline compose. On Sume that is four jobs for one 8-second 720p ad: a Gemini Omni Flash 1.1 clip, one Ideogram 4.5 price card, one video filter encode and one compose, about $1.115 at the rates below. The whole ad is made of the clip's own audio and one still, so there is no editor in the loop.
The order matters. A dim pass is a pixel pass on one clip, and compose output length always comes from the video layer, so you dim first and compose last. Doing it the other way round would dim your price card too.
The four jobs and what each costs
Every number comes from Sume's own docs and price table, and you should confirm it in GET /v1/catalog before a campaign, because rates can change. Sume bills the provider list times 1.25 on the generation steps.
| Step | Endpoint | Sume price |
|---|---|---|
| Bedroom clip, 8 s at 720p | POST /v1/video-router/generate, model gemini-omni-flash-1.1 | 8 x $0.125 = $1.00 |
| Price card still | POST /v1/images, model ideogram/ideogram-v4.5, medium | $0.075 |
| Dim 0.45 | POST /v1/video-filter | $0.02 |
| Overlay the card | POST /v1/timeline-1.0/compose, operation overlay | $0.02 |
| Total | $1.115 |
Dim first, overlay second
Gemini Omni Flash 1.1 takes 3 to 10 seconds at 360p, 720p, 1080p or 4K, in 16:9 or 9:16, and its native audio is always on. For a vertical ad, send aspect_ratio: "9:16". Prompt the room, not the claim: a made bed by a window at dusk, a slow push-in, no people lying down. Whether a mattress is firm or cools you down is something footage cannot prove, so keep outcome claims out of the prompt and out of the card text.
The video filter's dim op multiplies the luma of the whole clip: amount must be above 0 and at most 1, and 0.45 is the docs example. Black stays black and chroma does not change. Every write also needs an Idempotency-Key, and each job is async by default: poll GET /v1/jobs/:id/status, then read /result for the new artf_ URL that feeds the next step. Run the same body against /v1/video-filter/check first. The check is free, creates no job and reserves no credits, and it answers with valid, diagnostics and an estimate.
Overlay settings for a price card
The overlay layout keys are position (top, center or bottom), width_ratio (0.05 to 1, default 0.9) and margin_ratio (0 to 0.45 of height, default 0.05). The plate keeps its own aspect, and the still is held for the whole clip, so it cannot make the clip longer. If you send stack keys such as split or ratio with operation: "overlay", the API answers 400 compose_overlay_takes_no_stack_layout.
- Put the price card at
bottomwithmargin_rationear 0.08 so a phone's gesture bar does not sit on it. - Keep
width_ratiounder 1 so the card has a visible edge against the dimmed room. - Both URLs must be this workspace's
media.sume.comartifacts: import files first withPOST /v1/media-imports, or use the returned artifact URLs.
Check the dim before you pay for it
import os
import requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
body = {
"video_url": "https://media.sume.com/artifacts/artf_demo/bedroom.mp4",
"ops": [{"op": "dim", "amount": 0.45}],
}
r = requests.post("https://api.sume.com/v1/video-filter/check", headers=H, json=body, timeout=60)
data = r.json()
print(r.status_code, data.get("valid"), data.get("next_action"))
Where it breaks
compose_video_has_no_audio is a warning, not a failure: a muted source still renders. A source over 300 seconds fails the filter with output_duration_exceeded, which a 10-second ad never hits. Compose caps its video layer at 300 seconds too.
Read the final compose result for video_url and duration_seconds, and check the duration is the 8 seconds you asked Omni for before you upload anywhere.
Add a music bed afterwards in Timeline 1.0 if you want one; the ad above keeps the clip's own sound. The same four-job shape works for any big-ticket item that photographs as a room, and the half-banner pattern covers the stack layout when you want the card above the clip instead of over it. For a brighter clip, see dimming a bright clip so captions read.
Sources
Related posts
More in Use cases
- Meta ads on phones taller than 9:16: zoom or black bars, plan for both
Meta may zoom a 9:16 ad on taller phones or pad it with black. Keep text in the safe zone for both and test it with a free Sume crop check on a 1080x1920 clip.
- Meta's aspect ratios view fills missing variations: supply all four
If you upload fewer than four ratios, Meta pads, crops or AI-expands the rest. See which ratios Sume renders natively and how to crop the one it cannot.
- Meta catalog video: the ad spend per SKU that pays for the clip
Meta says catalog ad sets with product video saw 20% more conversions per dollar. Break-even spend per SKU is 5 x clip cost x CPA/margin; $0.93 and $2.19 clips.
- Meta lists 1440x2560 for Reels ads; Sume timeline stops at 2160
Meta's Reels ad page says 1440 x 2560, and Sume timeline edges top out at 2160. What that means for a 9:16 Reels ad, with the numbers from both pages.
Written by Sume