这一页直接给代码。假设你已经注册账号并创建了 API Key,Key 以 h3k_ 开头。

Python 示例

需要先安装 httpx

pip install httpx
import time
import httpx

API = "https://api.h3hub.cn"
KEY = "h3k_你的key"

client = httpx.Client(headers={"X-API-Key": KEY})

# 1. 提交任务
r = client.post(f"{API}/api/v1/video/generate", json={
    "prompt": "一只金毛在麦田奔跑",
    "duration": 5,
    "resolution": "480p",
})
r.raise_for_status()
task_id = r.json()["task_id"]
print("task:", task_id)

# 2. 轮询状态
while True:
    task = client.get(f"{API}/api/v1/task/{task_id}").json()
    if task["status"] in ("completed", "failed"):
        break
    time.sleep(5)

if task["status"] == "failed":
    raise SystemExit(f"failed: {task['error']}")

# 3. 下载结果
with client.stream("GET", f"{API}/api/v1/result/{task_id}") as resp:
    resp.raise_for_status()
    with open("output.mp4", "wb") as f:
        for chunk in resp.iter_bytes():
            f.write(chunk)

print("saved output.mp4")

Node.js 示例

需要 Node 18+,内置 fetch

const API = "https://api.h3hub.cn";
const KEY = "h3k_你的key";

async function main() {
  // 1. 提交任务
  const gen = await fetch(`${API}/api/v1/video/generate`, {
    method: "POST",
    headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
    body: JSON.stringify({
      prompt: "a golden retriever running in a wheat field",
      duration: 5,
      resolution: "480p",
    }),
  });
  const { task_id } = await gen.json();

  // 2. 轮询状态
  let task;
  while (true) {
    const resp = await fetch(`${API}/api/v1/task/${task_id}`, {
      headers: { "X-API-Key": KEY },
    });
    task = await resp.json();
    if (task.status === "completed" || task.status === "failed") break;
    await new Promise((r) => setTimeout(r, 5000));
  }
  if (task.status === "failed") throw new Error(task.error);

  // 3. 下载结果
  const video = await fetch(`${API}/api/v1/result/${task_id}`, {
    headers: { "X-API-Key": KEY },
  });
  const buf = Buffer.from(await video.arrayBuffer());
  require("fs").writeFileSync("output.mp4", buf);
  console.log("saved output.mp4");
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});

注意

  • 轮询间隔至少 5 秒。
  • 如果返回 429,看 Retry-After 头再等。
  • 如果返回 401,检查 Key 是否被禁用或吊销。
  • 参考素材任务先走 /api/v1/upload/presign,再把 media_id 放进 ref_media_ids