There's no camera-angle parameter — here's the prompt pattern that turns one photo into a multi-shot clip.
Choose a model, enter your prompt, and see the result.
HiAPI Blog
HiAPI
Generate it with HiAPI
minimax-h3-max turns one photo into a 5–15 second video, and its endpoint has no "camera angle," "multi-view," or "number of shots" parameter at all — the schema only accepts prompt, first_frame_image, last_frame_image, duration, resolution, and aspect_ratio. That's confirmed directly against the live API: sending anything else (camera_angle, multi_angle, angles, num_angles, views) returns 400 additional properties ... not allowed.
So a "multi-angle" clip — one shot cutting from a wide establishing view to a close-up to a tracking shot — isn't a parameter you set. It's a prompt you write. This recipe covers the request shape, a prompt pattern that reliably produces multiple camera angles inside one generated clip, and the production-shaped flow around it.
Grab an API key from your hiapi dashboard. Every call below authenticates with Authorization: Bearer YOUR_API_KEY against the shared async task endpoint, POST https://api.hiapi.ai/v1/tasks.
first_frame_image anchors the subject and scene so the model has something concrete to cut away from and back to. The prompt does the rest — it describes each shot as an explicit, numbered cut.
import requests
import time
API_KEY = "YOUR_API_KEY"
BASE = "https://api.hiapi.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
payload = {
"model": "minimax-h3-max",
"input": {
"prompt": (
"A red vintage motorcycle parked on a wet city street at dusk, neon signs reflecting on the pavement. "
"Shot 1 - low wide angle: the camera holds a static wide shot of the full motorcycle, rain lightly falling. "
"Cut to Shot 2 - close-up: the camera pushes in tight on the chrome headlight and front wheel, tracking slowly right. "
"Cut to Shot 3 - overhead top-down: the camera looks straight down at the motorcycle from above, slowly rotating. "
"No text or subtitles."
),
"first_frame_image": "https://your-cdn.example.com/motorcycle-source.jpg",
"duration": 10,
"resolution": "768P",
},
}
# duration/resolution/first_frame_image are optional — omit aspect_ratio here,
# since a supplied frame image determines the output ratio instead.
resp = requests.post(f"{BASE}/tasks", headers=HEADERS, json=payload)
task_id = resp.json()["data"]["taskId"]
while True:
status = requests.get(f"{BASE}/tasks/{task_id}", headers=HEADERS).json()["data"]
if status["status"] in ("success", "failed"):
break
time.sleep(3)
if status["status"] == "success":
print(status["output"][0]["url"]) # download immediately — temp storage expires in ~7 days
else:
print("generation failed:", status)
Swap first_frame_image for a real, publicly reachable HTTPS image URL, or drop it entirely to generate the same multi-angle sequence purely from text — minimax-h3-max handles both text-to-video and image-to-video through the same prompt field.
Three things make multi-angle prompts hold together instead of producing a single confused shot:
Shot 1 - [framing]: [action]. Cut to Shot 2 - [framing]: [action]. The model treats "Cut to Shot N" as an instruction to change the camera, not just narrate more of the same shot.low-angle wide shot, overhead top-down shot, close-up, slow dolly-in, side tracking shot, handheld — these are terms the model was trained on and responds to consistently. Vague phrasing like "another cool angle" produces inconsistent results.duration is an integer from 5 to 15 seconds. Two to three shots is realistic; cramming five distinct angles into a 5-second clip gives each one under a second, which tends to look like a glitch rather than a cut.first_frame_image and last_frame_image are both optional and independent — set one, both, or neither. When you supply either, skip aspect_ratio: per the model's own docs, the frame image determines the output's aspect ratio, so the two parameters serve the same purpose and setting both is redundant. Also note there's no guarantee of strict 3D or geometric consistency across angles — this is a generative video model, not a photogrammetry pipeline, so expect the subject's fine details to drift slightly between cuts even with a first-frame anchor.
"callback": {"url": "https://your-domain.com/hiapi/callback", "when": "final"} to the request body and hiapi POSTs a notification when the task reaches a terminal state, instead of you polling GET /v1/tasks/{taskId} in a loop.taskId. Both polling responses and callbacks are keyed by the same taskId — treat repeated terminal notifications for one ID as idempotent, not as separate jobs.output[0].url pointing at temporary storage that expires roughly a week after creation. Re-upload it to your own storage inside the same handler that processes the terminal state.duration, malformed image URLs) fail fast with 400 INVALID_REQUEST at submission time. Auth problems return 401 with error.code: "permission_denied". A task that fails during generation instead reports "status": "failed" on the polled/callback response — check status before trusting output.Does minimax-h3-max have a dedicated multi-angle or multi-camera parameter?
No. Its input schema is strict — prompt, first_frame_image, last_frame_image, duration, resolution, aspect_ratio are the only accepted fields. Any camera- or angle-named field is rejected with 400 additional properties ... not allowed. Multiple angles come from describing multiple shots inside prompt.
Can I set aspect_ratio together with first_frame_image or last_frame_image?
You can, but it's redundant: per the model's docs, when a frame image is supplied, the image determines the output ratio. Omit aspect_ratio whenever you pass either frame image.
How long can a multi-angle clip be?
duration accepts whole seconds from 5 to 15. Two to three distinct camera angles fit comfortably in that window; more than that tends to compress each shot to a fraction of a second.
Does the subject stay perfectly consistent across angles?
Not guaranteed. minimax-h3-max is a generative video model, so fine details (exact texture, minor proportions) can drift between cuts even when first_frame_image anchors the opening frame. Treat it as strong creative consistency, not pixel-exact multi-view reconstruction.
Can I generate a multi-angle clip from text only, with no source image?
Yes — omit first_frame_image and last_frame_image entirely and describe the scene and shots purely in prompt. The same numbered-shot pattern applies.
What does an auth failure look like?
HTTP 401 with a body like {"error":{"code":"permission_denied","type":"hiapi_error","request_id":"..."}}. Double-check the Authorization: Bearer header and that the key hasn't been revoked from the dashboard.