Reaction clip on Wan 3.0: 3 s is $0.1875 at 480p, 50 for $9.375
A 3-second Wan 3.0 clip costs $0.1875 at 480p, $0.375 at 720p and $0.75 at 1080p on Sume. Priced from the tool, with the 2 s floor and a request body.

A 3-second Wan 3.0 clip costs $0.1875 at 480p, $0.375 at 720p and $0.75 at 1080p on Sume. That is three times the per-second rate, because Wan 3.0 is billed per second by resolution and accepts any whole number of seconds from 2 to 30 (read 2026-10-09).
What a 3-second reaction clip costs
Reaction clips, sticker loops and chat-reply videos are short, so the floor matters more than the ceiling. Wan 3.0 has the lowest floor in the Sume catalog at 2 seconds, and nothing forces you to round up to 4 or 5.
| Length | 480p | 720p | 1080p |
|---|---|---|---|
| 2 s | $0.125 | $0.25 | $0.50 |
| 3 s | $0.1875 | $0.375 | $0.75 |
| 4 s | $0.25 | $0.50 | $1.00 |
Submit it
Send duration as an integer. The request goes to POST /v1/videos, and you poll the returned polling_url. Reuse one Idempotency-Key per clip so a retried submit returns the original job instead of a second charge.
import os, time, requests
API = "https://api.sume.com/v1/videos"
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
body = {"model": "wan-3.0", "prompt": "A cat blinks, then slowly raises one eyebrow at the camera", "duration": 3, "resolution": "480p", "aspect_ratio": "1:1"}
job = requests.post(API, headers={**H, "Idempotency-Key": "reaction-cat-001"}, json=body, timeout=60).json()
deadline = time.time() + 1800
while time.time() < deadline:
time.sleep(30)
job = requests.get(job["polling_url"], headers=H, timeout=60).json()
if job["status"] == "completed":
print(job["unsigned_urls"][0], job["usage"]["cost"])
break
if job["status"] in ("failed", "cancelled"):
print(job["status"], job.get("error"))
breakA worked batch: 50 reaction clips
Say a community bot sends a fresh reaction clip for each of 50 triggers. At 3 seconds and 480p that is 50 x $0.1875 = $9.375. The same 50 at 720p cost $18.75, and at 1080p $37.50. Reaction clips are watched at chat size, so the 480p row is usually the right default.
The 2-second row is worth a look as well. If the joke lands in two seconds, 50 clips cost $6.25 at 480p. The only change in the request is duration: 2, which is the lowest value the Wan 3.0 envelope allows.
Because Wan 3.0 has no aspect-ratio term in its price, you can generate 1:1 for chat apps and 9:16 for stories at the same cost. If you want both from one idea, run the prompt twice with a different aspect_ratio rather than cropping.
Limits to check first
- Durations outside 2 to 30 do not get a price. A 1-second request is outside the envelope, so read
supported_durationsfromGET /v1/videos/modelsinstead of guessing. - Aspect ratios are listed per model in
supported_aspect_ratios; for a sticker-style loop, 1:1 is in the Wan 3.0 list, and the price does not change with the ratio. usage.coston the completed poll response is the billable amount. At submit Sume reserves the list price times 1.25, so a 3-second 480p test needs only about 19 cents of balance.- Three seconds at 1080p ($0.75) costs the same as six seconds at 720p ($0.75). If a viewer on a phone will not see the difference, the longer 720p clip is the better buy.
Sources
Related posts
More in Pricing
- Reconcile a 9-clip batch: poll usage.cost versus /v1/usage debited_usd
If 7 of 9 Seedance 2.5 clips complete at $3.4668 each, the poll sum and the ledger should both read $24.2676. How to compare them and why they differ.
- Video frames and reference ingest: no fixed price, a hold that settles
Sume bills video frames and reference ingest by Modal container seconds x list x 1.25 plus a fee, never above the hold. What to expect on the ledger and STT.
- 1,800 product photos: background removal and 150 upscales, $70.50
Sume RMBG is $0.0225 per image and image upscale $0.20: 1,800 photos cut out plus 150 hero upscales is $70.50, independent of image size.
- Reserved, captured, refunded: the ledger for a 6 s Omni 720p job
A 6-second Gemini Omni Flash 720p job on Sume reserves $0.75, then captures it or refunds it. How to read GET /v1/usage for one job and the three row states.
Written by Sume