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.

5 min readSume
All posts

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.

H3 Max Recast input rules (Sume source, read 2026-10-08)
FieldRule
video_urlRequired, public HTTPS, no username or password in the URL
reference_image_urls1 to 4 public HTTPS URLs
promptOptional, trimmed, max 2,000 characters
resolution768p (default) or 1080p
durationInspected source length, 5 to 30 seconds
aspect_ratio, generate_audio, bitrate_modeRefused
image_url, first/last frame, reference video/audioRefused

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

All Developers posts

Written by Sume