H3 Max Camera Controls
整合
模型 id
minimax/h3-max/camera-controls
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://vit.doitong.com/api/v1/run/minimax/h3-max/camera-controls?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://vit.doitong.com/api/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://vit.doitong.com/api/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/minimax/h3-max/camera-controls?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://vit.doitong.com/api/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/minimax/h3-max/camera-controls", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
# 1. Connect once (Claude Code; Cursor, VS Code, Claude Desktop: https://doitong.com/zh-TW/developers/docs/mcp)
claude mcp add --transport http doitong-models https://vit.doitong.com/api/v1/mcp \
--header "Authorization: Bearer $DOITONG_API_KEY"
# 2. Your agent calls the "run" tool with:
{
"model_id": "minimax/h3-max/camera-controls",
"input": {
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
}
透過 Doitong API 呼叫 H3 Max Camera Controls 模型(minimax/h3-max/camera-controls)。代理程式文件:https://doitong.com/zh-TW/developers/models/minimax/h3-max/camera-controls.md
POST https://vit.doitong.com/api/v1/run/minimax/h3-max/camera-controls?wait=20
Authorization: Bearer $DOITONG_API_KEY
Content-Type: application/json
{
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
如果回應狀態為 "queued" 或 "running",請輪詢 GET https://vit.doitong.com/api/v1/requests/REQUEST_ID?wait=20,直到狀態變為 "succeeded";檔案位於 outputs[].url。使用相同主體傳送 POST https://vit.doitong.com/api/v1/quote/minimax/h3-max/camera-controls,可在執行前取得確切價格。
此請求: $0.175 175 API 點數 在此頁面執行
您的新 API 金鑰。 僅會在此時顯示,且已填入下方的程式碼與 API 金鑰欄位。請妥善保密:切勿將其放入在瀏覽器中執行的程式碼。
建立請求
控制項是根據模型結構描述生成的。變更設定時,程式碼和價格會同步更新。
POST
/run/minimax/h3-max/camera-controls?wait=20
報價 → $0.175
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://vit.doitong.com/api/v1/run/minimax/h3-max/camera-controls?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://vit.doitong.com/api/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://vit.doitong.com/api/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/minimax/h3-max/camera-controls?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://vit.doitong.com/api/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/minimax/h3-max/camera-controls", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"model_id": "minimax/h3-max/camera-controls",
"input": {
"prompt_expansion_mode": "balanced",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
},
"wait_seconds": 20
}
}
}
關於 H3 Max Camera Controls
使用 `image_url` 作為首幀,讓攝影機沿 `camera_trajectory` 移動;該欄位是包含 2 至 12 個有順序關鍵影格的清單。預設情況下場景保持固定,只有攝影機變動。持續時間為 0.92 至 15 秒,解析度可為 480P、768P 或 1080P。可調整提示擴展。
參數
請傳送標準名稱或原生名稱其中之一,不要同時傳送兩者。 標準名稱
名稱類型
預設值允許值
說明
prompt選填
類型string
預設值The same elements in the reference are rigid. Preserve every element exactly. The entire scene is frozen. Only the camera moves. no scene motion only camera motion
≤ 50,000 個字元
會覆寫預設靜止場景行為的影片生成提示詞。留白或省略會固定參考場景,僅允許相機移動。
duration選填
類型number
預設值5
0.92 – 15
要求的持續時間(以秒為單位),實際影片長度最多可超出該要求約 0.7 s。
resolution選填
類型enum
預設值480P
480P768P1080P
生成解析度選擇:1080P 需要對原生以 768P 生成的素材進行潛在空間細化,而不是以所選解析度原生生成。
seed選填
類型integer | null
隨機生成的種子;省略時會隨機選擇。
enable_safety_checker選填
類型boolean
預設值true
安全檢查器啟用狀態;true 會啟用檢查。
prompt_expansion_mode必填
類型string
預設值balanced
生成前提示詞改寫程度:'quality' 最長約 30s,可產生更豐富的提示詞;'balanced' 約一秒返回。選擇 'disabled' 可略過提示詞擴充。
image_url必填
image
類型url · image
定義影片開頭影格的圖像 URL。
camera_trajectory選填
類型object[]
≤ 12 個項目≥ 2 個項目
依序排列的相機關鍵影格,保留帶符號的完整旋轉,且方位角總移動量上限為 32 圈。在關鍵影格時間範圍之外,相機會在第一個時間戳前保持第一個姿勢,並在影片結束前保持最後一個姿勢。
camera_trajectory[].time必填
類型number
0 – 1
影片內的正規化時間,使用區間 [0, 1] 分別表示開頭和結尾。
camera_trajectory[].azimuth必填
類型number
相機繞主體的水平角度,以度為單位測量。
camera_trajectory[].elevation必填
類型number
-90 – 90
相機繞主體的垂直角度,以度為單位測量。
camera_trajectory[].distance必填
類型number
> 0
相機與主體之間的距離,以正規化場景單位測量。
必填
標準名稱,也可使用
檔案參數接受公開的 https:// URL、最大 10 MB 的 data: URI,或上傳檔案的 file_url。 檔案
輸出
GET /requests/req_8k2m4q7x1z9c3v5b6n0p2r4t
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "minimax/h3-max/camera-controls",
"status": "succeeded",
"created_at": "2026-10-20T12:00:00Z",
"started_at": "2026-10-20T12:00:02Z",
"completed_at": "2026-10-20T12:00:09Z",
"queue_position": null,
"cost": {
"credits": 175,
"usd": "0.175",
"charged": 175,
"refunded": 0
},
"input": {
"image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
"prompt_expansion_mode": "balanced"
},
"output": {
"video": {
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_name": "0-output.mp4",
"file_size": 1843200
},
"expanded_prompt": "string",
"timings": {}
},
"outputs": [
{
"type": "video",
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_size": 1843200,
"width": 1280,
"height": 720,
"duration": 5,
"stored": true
}
],
"error": null,
"metrics": {
"inference_seconds": 6.8
},
"urls": {
"self": "https://vit.doitong.com/api/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
"cancel": "https://vit.doitong.com/api/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
}
}
您的檔案,由您選擇每個 outputs[].url 都是儲存空間中的副本:可永久保留(按 GB-月計費),或免費保留 7 天;可透過帳戶設定或 ?storage= 設定。
所有模型使用相同結構圖片、影片和音訊皆包含 type、url、content_type、width、height 和 duration。output 是模型自己的結果物件。
輸出欄位
- video
- object {url, content_type, file_name, file_size}模型產生的影片。
- expanded_prompt
- string | null供模型使用的擴充提示詞;若沒有可用的擴充文字則為 null。null 的情況包括停用擴充、擴充後沒有變更,以及由模型託管的 API 內部處理擴充。
- timings
- object | null以秒表示的時間測量值,僅在回報後端時間的路由上可用;否則為 null。'inference' 項目會測量 DiT 在 GPU 後端上進行去噪所需的時間。
其他 Hailuo 03 New Turbo 變體
更多模型:圖像轉影片
給 AI 代理程式:此頁面的 Markdown 位於 https://doitong.com/zh-TW/developers/models/minimax/h3-max/camera-controls.md. 所有模型與指南: https://doitong.com/developers/llms.txt