Queue a 30 s H3 Max Recast job: the reserve at 768p and 1080p

H3 Max Recast swaps people in a 5 to 30 s video. Price arithmetic for a 30 s source at 768p and 1080p, plus the Python to submit it and poll it.

4 min readSume
All posts

For a 30-second source video, a Recast job at 768p reserves $11.25 on Sume, and at 1080p it reserves $16.88. The model charges per second of the inspected source length, at a list of $0.30 or $0.45, times the 1.25 house margin, rounded up to the cent. Because the price follows the source, trim your input before you queue it.

What Recast does

H3 Max Recast, id h3-max-recast, replaces the primary people in one source video with the people in 1 to 4 reference photos. The source must be 5 to 30 seconds long, with no shot longer than 15 seconds. Output is 768p by default, or 1080p, and it keeps the source's motion, camera, cuts and sound. A prompt is optional.

The duration is not something you set. It is the inspected length of the source, rounded up. Sume's docs also note that the edit reserve is a hint, since the provider does not return an output duration, so treat the reserve as the upper estimate and check your usage record after capture.

A practical consequence: the source clip is the budget. If your edit only needs the first 12 seconds of a 30-second take, cut the file first. At 768p that is $3.60 list, or $4.50 billed, instead of $11.25, and the output will be the length you wanted anyway.

Price arithmetic

The catalog lists list prices per second, taken from fal on 2026-10-01, and Sume bills list times 1.25. Here is the math for sources of 5, 15 and 30 seconds.

H3 Max Recast price for a source clip (Sume docs, read 2026-10-05)
Source length768p list768p billed1080p list1080p billed
5 s$1.50$1.875, up to $1.88$2.25$2.8125, up to $2.82
15 s$4.50$5.625, up to $5.63$6.75$8.4375, up to $8.44
30 s$9.00$11.25$13.50$16.875, up to $16.88

Submit and poll

On /v1/videos, send the source in input_references as a video_url and one image_url for each new person. The code below sends one source and one photo, waits for a terminal state and stops if the job fails. Replace both URLs with public HTTPS files that you control.

import json, os, time, urllib.request, urllib.error
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"], "Content-Type": "application/json"}

def call(method, url, body=None, extra=None):
    req = urllib.request.Request(url, method=method, headers={**H, **(extra or {})},
                                 data=json.dumps(body).encode() if body else None)
    try:
        with urllib.request.urlopen(req, timeout=30) as r:
            return r.status, json.loads(r.read())
    except urllib.error.HTTPError as e:
        return e.code, json.loads(e.read() or b"{}")

body = {"model": "h3-max-recast", "resolution": "768p",
        "prompt": "Keep everything else the same.",
        "input_references": [
            {"type": "video_url", "video_url": {"url": "https://cdn.example.com/source-30s.mp4"}},
            {"type": "image_url", "image_url": {"url": "https://cdn.example.com/new-person.jpg"}}]}
code, job = call("POST", "https://api.sume.com/v1/videos", body, {"Idempotency-Key": "recast-demo-001"})
print(code, job)
while code == 202 or code == 200:
    time.sleep(10)
    code, job = call("GET", job["polling_url"])
    print(job.get("status"))
    if job.get("status") in ("completed", "failed", "cancelled"):
        break

Queue behaviour

Recast jobs are paid generation jobs, so they follow the same admission rules as the others: they can wait as queued while a workspace slot is busy, and queue_full appears only when the queue is also full. On a Pro plan with 24 accepted jobs, a batch of 30 Recast jobs gets 429 queue_full on the 25th at once, so pace it, and resend with the same key.

You can cancel a queued Recast job, but only before generation starts. After that, Sume returns 409 job_generation_already_started and the job runs to the end.

The reserve and the final charge can differ. The reserve is taken at submit from the estimate, and the capture happens on completion. Read the usage object on the poll response, which carries usage.cost, to see what Sume billed, and reconcile it against your own table above.

Checklist

  • Trim to the part you need. A 30-second source costs three times a 10-second one.
  • Keep every shot at or under 15 seconds, or the source is rejected.
  • Use clear, front-facing reference photos, one for each person you want in the output.
  • Check the reserve against your balance first. A 402 insufficient_credits means the balance is below the reserve.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume