TikTok 6-slide 9:16 carousel: Qwen Image n=4 plus n=2 is 15 cents
A six-slide 9:16 slideshow takes two Sume image calls because n caps at 4. Qwen Image bills $0.025 per slide, so the set is $0.15. Code and cost table.

A six-slide 9:16 TikTok photo carousel takes two calls to Sume's POST /v1/images, one with n: 4 and one with n: 2, because most catalog models cap n at 4. On Qwen Image each slide bills $0.025, so six slides are $0.15. The Image API docs list 9:16 among the aspect ratios a model accepts, and Qwen Image lists it.
The cap matters because the request schema allows n up to 10 while each model's own range is lower. Ask for more than the model's range and you get a 400 that names the allowed range, not a smaller batch.
How should I split six slides into calls?
Fill calls to the cap, then send the remainder. Six is 4 + 2. Charges are cost_usd x n, so splitting changes nothing about price; it only changes how many requests you manage. Keep one style sentence identical across both prompts so the slides read as a set.
import os, requests
URL = "https://api.sume.com/v1/images"
HEAD = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
STYLE = "flat pastel illustration, soft grain, no text"
def slides(topic: str, n: int):
r = requests.post(URL, headers=HEAD, timeout=60, json={
"model": "qwen/qwen-image",
"prompt": f"{topic}, {STYLE}",
"aspect_ratio": "9:16",
"n": n,
})
r.raise_for_status()
if r.status_code == 202:
raise RuntimeError("slow job: poll the job envelope")
return [d["url"] for d in r.json()["data"]]
urls = slides("slide: packing a carry-on", 4)
urls += slides("slide: packing a carry-on, closing slide", 2)
print(len(urls), "slides")What does the six-slide set cost by model?
Every model below accepts 9:16. The per-slide price is the catalog row, and the set is six of them.
| Model | Per slide | Six slides | Calls needed |
|---|---|---|---|
| Qwen Image | $0.025 | $0.150 | 2 (n=4, n=2) |
| Imagen 4 Fast | $0.025 | $0.150 | 2 (n=4, n=2) |
| Seedream 5 Lite | $0.04375 | $0.2625 | 2 (n=4, n=2) |
| Nano Banana 2 (1K tier) | $0.100 | $0.600 | 2 (n=4, n=2) |
What can go wrong?
Slow settings fall back to a 202 job envelope instead of an inline 200, so branch on the status code, as the code above does, and finish with the jobs and results polling pattern when it happens. Check the pixels your platform wants before you upload; the model returns its own native size for the ratio, not a fixed 1080x1920. Prices here are list x 1.25 in dollars per image before whole-cent rounding; the catalog's billable formula reads "list x 1.25, ceil usd cents", so confirm the first charge in usage.cost and budget from the invoice, not from the sum.
Sources
Related posts
More in Use cases
- TikTok Spark Ads vs standard ad video specs: what to render
TikTok lists .mp4 or .mov and no duration limit for Spark Ads, but 9:16 minimums, 500 MB and up to 10 minutes for non-Spark ads. Sume returns MP4.
- Make a Top 5 vertical video from five stills with Sume Timeline
Five images, a 30-second silent Timeline at 1080x1920, then burned captions: the slot math, the still-motion limit and the cost in Sume.
- Tote bag mockup with an AI image API: your logo on a canvas bag
Send your logo as a reference to GPT Image 2.5 on Sume and ask for a canvas tote on a plain studio set. Check the logo against the original before you list it.
- Trim an ad cutdown from an MCP client: dry run, wait, result
Cut a 15-second holiday ad version from an MCP client with Sume video_trim: dry_run shows the $0.02 estimate, then jobs_wait and jobs_result return the MP4.
Written by Sume