Conference teaser, 13 s on Wan 3.0: six sessions, $9.75 at 720p

A 13-second Wan 3.0 teaser costs $0.8125 at 480p, $1.625 at 720p and $3.25 at 1080p on Sume. Odd seconds are billed linearly; here is the table and request.

4 min readSume
All posts

A 13-second Wan 3.0 session teaser costs $0.8125 at 480p, $1.625 at 720p and $3.25 at 1080p on Sume. Wan 3.0 is billed per second by resolution, so 13 seconds is exactly 13 times the rate with no bucket rounding (read 2026-10-09).

Why 13 seconds is a real length

Conference teasers are cut to fit a slot: a title card, a speaker, a hook line. Many video APIs only offer 5 and 10 second buckets, which forces you to trim or pay for seconds you discard. Wan 3.0 takes any whole number from 2 to 30, so you can ask for the length the slide template has.

Wan 3.0 customer price around 13 seconds (read 2026-10-09). Rates $0.0625/s, $0.125/s, $0.25/s; total = rate x seconds.
Length480p720p1080p
12 s$0.75$1.50$3.00
13 s$0.8125$1.625$3.25
14 s$0.875$1.75$3.50

Use the speaker photo as a reference

Wan 3.0 accepts image, video and audio references, so a headshot and a venue photo can steer the clip. Reference images go in input_references; if you also send frame_images, the request is treated as image-to-video instead.

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": "Keynote stage with a spotlight and a title card fading in, slow push-in", "duration": 13, "resolution": "1080p", "aspect_ratio": "16:9", "input_references": [{"type": "image_url", "image_url": {"url": "https://example.com/venue.jpg"}}]}
job = requests.post(API, headers={**H, "Idempotency-Key": "teaser-keynote-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"))
        break

A six-teaser run for a conference track

A track with six sessions needs six teasers. At 13 seconds each and 720p that is 6 x $1.625 = $9.75. At 1080p it is $19.50, and at 480p $4.875.

Give each session its own idempotency key built from the session id, for example teaser-session-14. If your script crashes halfway and restarts, the replay returns the original job for each key instead of creating a second one.

Submit all six, then poll the returned polling_url values at a moderate interval of about 30 seconds. The docs recommend a moderate polling interval to avoid excess calls, and a callback_url (HTTPS only) can replace polling entirely.

Gotchas

  • For exact wording, such as the session title and speaker name, add the text as a caption or overlay after generation instead of asking the model to draw it.
  • Reference URLs must be public HTTPS and in a supported format, or the job fails; check the error field on the poll response.
  • Draft at 480p ($0.8125), then run the keeper at 1080p ($3.25). Without a seed on any v1 model, the second run is a new generation, not an upscale of the first.
  • A 13-second 1080p job reserves its full $3.25 at submit. The reservation is captured on success and, where applicable, released or refunded on failure.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume