H3 Max Recast prompt: 2,000 characters, and the fields Sume rejects
The optional Recast prompt is capped at 2,000 characters, and aspect_ratio, generate_audio and frame fields are refused. A checker to run before a paid submit.

When you call H3 Max Recast through the Sume Video Router, the prompt is optional and can be at most 2,000 characters. The model rejects aspect_ratio, generate_audio, bitrate_mode, a first or last frame, a single image_url and reference audio or reference video. Sume checks all of this before it reserves any money, so a bad request fails cheaply.
Fields that are accepted and refused
Recast is narrow on purpose: one source video, one to four person photos, an optional prompt and a resolution. The table lists what the Sume input builder does with each field, as read from the repository on 2026-10-08.
| Field | Rule |
|---|---|
| video_url | Required, public HTTPS, no username or password in the URL |
| reference_image_urls | 1 to 4 public HTTPS URLs |
| prompt | Optional, trimmed, max 2,000 characters |
| resolution | 768p (default) or 1080p |
| duration | Inspected source length, 5 to 30 seconds |
| aspect_ratio, generate_audio, bitrate_mode | Refused |
| image_url, first/last frame, reference video/audio | Refused |
A pre-flight check in Python
The script below mirrors those rules so you can catch a mistake in your own code. It does not call the API; it only checks the dictionary you plan to send.
import json
BANNED = {"aspect_ratio", "generate_audio", "bitrate_mode", "image_url",
"first_frame_url", "last_frame_url", "end_image_url",
"reference_video_urls", "reference_audio_urls"}
def check(body):
errors = [f"{k} is not supported" for k in body if k in BANNED]
if not str(body.get("video_url", "")).startswith("https://"):
errors.append("video_url must be public HTTPS")
photos = body.get("reference_image_urls", [])
if not 1 <= len(photos) <= 4:
errors.append("send 1 to 4 photos")
if len(body.get("prompt", "")) > 2000:
errors.append("prompt over 2000 characters")
if not 5 <= body.get("duration", 0) <= 30:
errors.append("duration must be 5 to 30 seconds")
return errors
body = {"model": "h3-max-recast", "video_url": "https://media.sume.com/a.mp4",
"reference_image_urls": ["https://media.sume.com/p1.png"],
"duration": 9, "aspect_ratio": "9:16"}
print(json.dumps(check(body), indent=2))What to do with the result
Run the check, fix the list, then submit to POST /v1/video-router/generate with an Idempotency-Key header, and poll the job. The cost of a 9-second source at the default resolution is 9 x $0.375 = $3.375. If you need a portrait output, shoot or crop the source in portrait first, because the model follows the framing of the source and offers no aspect-ratio control.
What the prompt is for
The prompt is optional. The Sume test suite shows a prompt such as a sentence that says Person 1 becomes the woman in the photo, and the builder trims leading and trailing spaces before sending it. Use the prompt to say which photo maps to which person in the source when several people are on screen, for example by position from the left. Nothing in the Sume docs promises that the model follows an order, so verify on a short clip.
A short prompt is enough. The 2,000-character cap exists, but a paragraph of style direction is not needed for a swap, because the output keeps the source's scene, framing and length. If you want a different background or a different outfit, that is a different job; see the Omni edit route for changing a clip with a prompt.
- Count characters, not words: Sume counts the trimmed string.
- An empty or whitespace-only prompt is treated as no prompt.
- A prompt over 2,000 characters is refused with a message naming H3 Max Recast.
Cost of a failed attempt
Since the check runs before the reservation, a refused request costs $0.00. A request that passes the check on a 10-second clip reserves 10 x $0.375 = $3.75 at 768p. Run the checker above in CI so the paid path only sees valid bodies.
Sources
Related posts
More in Developers
- Recast prompt limit is 2,000 characters: what to write, what it costs
The H3 Max Recast prompt is optional and capped at 2,000 characters. See what to put in it for a person swap and why the length never changes the price on Sume.
- Reconcile a mixed project with GET /v1/usage: debited, held, refunded
How to read what one job or run really cost: debited, held and refunded fields, with the arithmetic for a project where one of six shots fails and is refunded.
- Refresh 1,200 SKU video ads before Black Friday: waves by plan
On an empty workspace, 1,200 jobs take 300 submission waves on Free, 67 on Pro and 14 on Scale, using Sume's wave_size_hint of 75% of accepted capacity.
- Replace line 7 of 12 voiceover lines: one TTS job and a concat
Fixing one 180-character line of a 12-line voiceover costs $0.02 (one TTS job at the 1-cent floor plus a $0.01 concat) vs $0.12 to redo all 12. Read 2026-10-08.
Written by Sume