Luma Dream Machine API prompt rules: 3 to 5000 characters
Luma's Dream Machine API rejects prompts under 3 or over 5000 characters, and loop with keyframes. The pre-submit errors, and where Sume's checks live.

Luma's Dream Machine API checks a request before it creates a generation. A prompt shorter than 3 characters or longer than 5000 characters is rejected, a request with image keyframes needs text, and loop is refused for keyframes, extend-reverse and interpolation. Sume returns a 400 invalid_request for a bad body and publishes per-model limits in its catalog.
The pre-submission errors
The Luma errors page splits problems into two groups. The pre-submission group fails the create call. The post-submission group appears later in failure_reason. The first group is the one you can test for in your own code.
| Message | What it means |
|---|---|
| Prompt is required | Image keyframes were sent without text |
| Prompt is too short, minimum length is 3 characters | Text below the minimum |
| Prompt is too long, maximum length is 5000 characters | Text above the maximum |
| Loop is not supported for keyframes | loop set with frame0 and frame1 |
| Loop is not supported for extend reverse | loop set with the frame1 extend feature |
| No keyframes provided | Both frame0 and frame1 are null |
| Unknown request type | The server could not read the request shape |
Where Sume checks the same things
Sume's /v1/videos route has prompt and model as required fields. Duration, resolution and aspect ratio are checked against the model's own lists, so a value outside supported_durations, supported_resolutions or supported_aspect_ratios is a client error. The error table lists 400 invalid_request for a bad body, query or header, and the job error category validation means fix input.
Frames and references
Two Sume rules map onto Luma's keyframe messages. First, frame_images and input_references are different modes, and when both are present frame_images wins and the request is image-to-video. Second, frame_type must be first_frame or last_frame. The Video Router docs also say to read capabilities from GET /v1/video-router/models instead of assuming one envelope for all models.
- Validate prompt length in your own code before you submit.
- Fetch
GET /v1/videos/modelsand check the three lists for the model you pin. - Do not send both frame images and references and expect both to apply.
- Treat a
400as a bug in the request, not as a reason to retry.
What carries over
The Video Router page does not list a Luma model, so this is a port-the-habits comparison and not a drop-in: the habit to keep is checking the request locally, because a rejected request is the cheapest failure you can have.
Sources
Related posts
More in Developers
- Luma generation states and callback_url vs Sume statuses
Luma's Dream Machine API reports dreaming, completed and failed, with a callback_url POST. How that maps to Sume's queued, processing and completed.
- Luma modify video: ray-flash-2 15 seconds, ray-2 10, 100 MB
Luma's Modify Video allows 15 seconds on ray-flash-2 and 10 on ray-2, with a 100 MB source. Sume edits video with video_url on gemini-omni-flash-1.1.
- Luma failure_reason moderation messages vs Sume generation_rejected
Luma reports moderation and dispatch failures as strings in failure_reason. Sume returns a job error category and next action. A map for handling both.
- Luma Modify Video: adhere, flex and reimagine modes vs a Sume prompt
Luma's Modify Video has nine modes: adhere 1-3, flex 1-3 and reimagine 1-3. Sume's video edit has no mode field, so strictness comes from the prompt.
Written by Sume