Khởi động nhanh
Hướng dẫn này sẽ đưa bạn từ một phím API đến một MP4 hoàn chỉnh trên đĩa. Bạn cần có tài khoản trong gói Agency và vài phút để video được kết xuất.
-
Lấy chìa khóa API
Trong ứng dụng, mở khóa Tài khoản > API, tạo một khóa và sao chép nó. Sau đó lưu nó trong một biến môi trường để nó không xuất hiện trong mã của bạn:
Terminal window export REIGNITER_API_KEY="emp_..."Xem phần Xác thực để biết chi tiết.
-
Kiểm tra chìa khóa
Gọi
GET /v1/me. Một200nghĩa là chìa khóa hoạt động. Phản hồi cũng hiển thị số dư tín dụng của bạn.Terminal window curl https://reigniter.ai/v1/me \-H "Authorization: Bearer $REIGNITER_API_KEY"const BASE = 'https://reigniter.ai';const headers = { Authorization: `Bearer ${process.env.REIGNITER_API_KEY}` };const res = await fetch(`${BASE}/v1/me`, { headers });console.log(res.status, await res.json());import os, requestsBASE = "https://reigniter.ai"headers = {"Authorization": f"Bearer {os.environ['REIGNITER_API_KEY']}"}res = requests.get(f"{BASE}/v1/me", headers=headers)print(res.status_code, res.json()){"user_id": "3f1c2a9e-8b7d-4c1e-9f0a-2d6b5e4c3a21","email": "dev@example.com","name": "Sam","credits_remaining": 42} -
Bắt đầu video
Gọi cho
POST /v1/renderbrief. Reigniter lên kế hoạch cho các cảnh và bắt đầu kết xuất. Gửi mộtIdempotency-Keyvới giá trị mới, để lần thử lại mạng không thể khởi động cùng một video hai lần.Terminal window curl https://reigniter.ai/v1/render \-H "Authorization: Bearer $REIGNITER_API_KEY" \-H "Content-Type: application/json" \-H "Idempotency-Key: $(uuidgen)" \-d '{"brief": "A 20 second advert for Northwind Coffee, a small-batch roaster. Warm, early-morning mood. End on the line: Roasted this week, at your door by Friday.","kind": "ad","duration_sec": 20,"aspect": "9:16","quality": "draft"}'import { randomUUID } from 'node:crypto';const res = await fetch(`${BASE}/v1/render`, {method: 'POST',headers: {...headers,'Content-Type': 'application/json','Idempotency-Key': randomUUID(),},body: JSON.stringify({brief: 'A 20 second advert for Northwind Coffee, a small-batch roaster. Warm, early-morning mood. End on the line: Roasted this week, at your door by Friday.',kind: 'ad',duration_sec: 20,aspect: '9:16',quality: 'draft',}),});const job = await res.json();if (res.status !== 202) throw new Error(`${res.status} ${job.code}: ${job.error}`);console.log(job.job_id);import uuidres = requests.post(f"{BASE}/v1/render",headers={**headers, "Idempotency-Key": str(uuid.uuid4())},json={"brief": "A 20 second advert for Northwind Coffee, a small-batch roaster. ""Warm, early-morning mood. End on the line: ""Roasted this week, at your door by Friday.","kind": "ad","duration_sec": 20,"aspect": "9:16","quality": "draft",},)job = res.json()if res.status_code != 202:raise RuntimeError(f"{res.status_code} {job.get('code')}: {job['error']}")print(job["job_id"])Bạn nhận được
202 Acceptedvà mộtjob_id:{"job_id": "7d2e4b10-5c3a-4f8e-a1b2-9c0d8e7f6a54","status": "starting","title": "Northwind Coffee, at your door by Friday","scenes": 4,"credits_used": 12,"watermarked": false,"poll_url": "/v1/job/7d2e4b10-5c3a-4f8e-a1b2-9c0d8e7f6a54","note": "Render started. Poll poll_url, or subscribe to video.completed via POST /api/webhooks/hooks."} -
Chờ công việc hoàn thành
Poll
GET /v1/job/{id}mỗi vài giây cho đến khistatussucceeded,failedhoặccancelled. Một bản render thường mất vài phút.Terminal window JOB_ID="7d2e4b10-5c3a-4f8e-a1b2-9c0d8e7f6a54"while true; doJOB=$(curl -s "https://reigniter.ai/v1/job/$JOB_ID" \-H "Authorization: Bearer $REIGNITER_API_KEY")STATUS=$(echo "$JOB" | jq -r .status)echo "$STATUS $(echo "$JOB" | jq -r .progress)%"case "$STATUS" in succeeded|failed|cancelled) break ;; esacsleep 10doneecho "$JOB"const FINAL = new Set(['succeeded', 'failed', 'cancelled']);let result;while (true) {const res = await fetch(`${BASE}/v1/job/${job.job_id}`, { headers });result = await res.json();console.log(result.status, `${result.progress}%`);if (FINAL.has(result.status)) break;await new Promise((r) => setTimeout(r, 10_000));}if (result.status !== 'succeeded') throw new Error(result.error ?? result.status);import timeFINAL = {"succeeded", "failed", "cancelled"}while True:result = requests.get(f"{BASE}/v1/job/{job['job_id']}", headers=headers).json()print(result["status"], f"{result['progress']}%")if result["status"] in FINAL:breaktime.sleep(10)if result["status"] != "succeeded":raise RuntimeError(result["error"] or result["status"])Một tác phẩm hoàn chỉnh trông như thế này:
{"job_id": "7d2e4b10-5c3a-4f8e-a1b2-9c0d8e7f6a54","status": "succeeded","progress": 100,"video_url": "https://cdn.example.com/exports/7d2e4b10.mp4","error": null}Thay vì thăm dò, bạn có thể đăng ký một webhook cho
video.completed. -
Tải video về
video_urllà liên kết trực tiếp đến MP4. Tải về và lưu trữ ở phía bạn.Terminal window curl -L -o northwind.mp4 "$(echo "$JOB" | jq -r .video_url)"import { writeFile } from 'node:fs/promises';const video = await fetch(result.video_url);await writeFile('northwind.mp4', Buffer.from(await video.arrayBuffer()));video = requests.get(result["video_url"])video.raise_for_status()with open("northwind.mp4", "wb") as f:f.write(video.content)
Nếu có sự cố xảy ra
Phần tiêu đề “Nếu có sự cố xảy ra”401: kiểm tra khóa và tiền tốBearer. Xem phần Xác thực.402: Tài khoản không nằm trong gói Agency, hoặc đã hết tín dụng. Đọccode.422 BRAND_REQUIREDhoặcNO_ANCHOR, hoặc400 PRESENTER_REQUIRED: bản dựng cần có thương hiệu, ảnh sản phẩm hoặc người thuyết trình. Xem phần Tạo video.429: chậm lại. Xem Giới hạn.
Mọi trạng thái và code đều được liệt kê trong phần Lỗi.
Các bước tiếp theo
Phần tiêu đề “Các bước tiếp theo”- Làm video: bộ kit thương hiệu, ảnh sản phẩm, sơ đồ cảnh và video đào tạo.
- Webhooks: nhận callback có chữ ký khi video đã sẵn sàng.
- Tạo tham chiếu render: mọi trường.