Seedance 2.5 đã chính thức ra mắt — Có mặt đầu tiên trên Atlas Cloud

Vòng lặp Poll MiniMax H3 của bạn không bao giờ thoát. Đây là hướng dẫn thực sự hoàn thành.

Một hướng dẫn MiniMax H3 với toàn bộ vòng lặp bất đồng bộ: lời gọi tạo, vòng lặp thăm dò xử lý tất cả năm trạng thái thực tế, thử thách callback 3 giây, và hai thứ âm thầm hết hạn.

POST đầu tiên của bạn trả về trong vòng mười giây với một task_id. Có vẻ như là thắng lợi.

Rồi không có gì xảy ra trong sáu phút. Bạn đã copy while status != "Success" từ một tutorial nào đó, và vòng lặp cứ chạy, bởi vì endpoint này không còn trả về từ Success nữa. Vì vậy bạn chuyển sang webhook. Không một push nào đến, và không có gì ở đâu đó cho bạn biết lý do. Sáng hôm sau bạn quay lại để lấy render của ngày hôm qua và link báo 404.

Bốn điều đó trông không liên quan. Không điều nào là lỗi của model. Cả bốn đều là hợp đồng async, mà hầu như không ai viết ra. Đây là toàn bộ hợp đồng, cộng với một đoạn phim ngắn hai cảnh thực tế đã ra ở đầu kia.

Những điểm chính

  • Ba endpoint, một vòng lặp: create trả về task_id và ngắt kết nối, bạn poll, bạn tải xuống. Mọi thứ khó khăn đều nằm sau lời gọi create.
  • Năm trạng thái thực tế là queued, running, succeeded, failed, cancelled. Không có trạng thái expired, bất kể một bài blog nào đó nói với bạn.
  • Hai thứ hết hạn, và không phải là trạng thái: URL tải xuống có giới hạn thời gian, và bản ghi task chỉ có thể truy vấn trong 7 ngày.
  • Nếu bạn sử dụng callback, MiniMax trước tiên gửi một yêu cầu xác minh với trường challenge và bạn phải echo lại y nguyên trong vòng 3 giây. Thất bại điều đó bạn sẽ không nhận được lỗi, chỉ im lặng mãi mãi.
  • Đối với tạo văn bản thuần túy, ratio là bắt buộc và không thể là adaptive. Đối với image-to-video, khung hình đầu tiên quyết định khung hình, và mọi ratio bạn truyền vào đều bị bỏ qua.

Thứ đã hoàn thành trước

Toàn bộ kết quả của tutorial này: hai cảnh MiniMax H3 ở 2K, ghép nối, 14,6 giây. Cảnh A là image-to-video từ một khung hình đầu tiên được tạo ra, cảnh B là text-to-video. Bật âm thanh lên. Âm thanh không phải là một bản nhạc nền chồng lên, H3 đã render bánh răng, tiếng mưa và câu nói thì thầm như một phần của cùng một lần tạo.

Ba lệnh gọi API đã tạo ra điều đó. Một model ảnh cho khung hình đầu tiên, hai endpoint H3 cho các cảnh, một dòng ffmpeg để ghép chúng lại. Đoạn mã dưới đây là mã đã tạo ra nó.

Tại sao Hầu hết các Tutorial MiniMax H3 đều Hỏng ở Yêu cầu Thứ hai

Hầu như mọi hướng dẫn cho model này đều dừng lại ở lệnh gọi create. Đó là nửa dễ dàng. Lệnh gọi create xác thực payload của bạn, trao cho bạn một task_id và ngắt kết nối, và sau đó bạn một mình với một công việc mất vài phút và một bộ quy tắc không ai in ra.

Các lỗi thất bại lặp đi lặp lại một cách nhàm chán. Tôi đã gặp năm trong sáu lỗi này trong một buổi chiều.

Triệu chứngNhững gì bạn thấyNguyên nhân thực tếCách khắc phục
Vòng lặp poll không bao giờ thoátTerminal in mãi, công việc đã kết thúc từ lâuĐiều kiện thoát của bạn so sánh với các từ v1 như Success / Fail. Endpoint query v2 trả về succeeded / failed viết thườngSo khớp với enum v2, và raise với bất kỳ trạng thái nào bạn không nhận ra
400 ngay lập tức trên text-to-videoYêu cầu bị từ chối trước khi bất kỳ render nào bắt đầuratio thiếu, hoặc đặt thành adaptive, mà chế độ chỉ văn bản từ chốiTruyền một ratio rõ ràng như 16:9
Ratio của bạn bị bỏ qua trong im lặngKhung hình đầu ra không phải là những gì bạn yêu cầuImage-to-video lấy khung hình từ ảnh khung hình đầu tiên, vì vậy ratio là vô dụng ở đóCắt hoặc tạo khung hình đầu tiên ở khung hình bạn muốn
Webhook không bao giờ kích hoạt, không lỗiKhông có push, log sạch, không có phàn nàn từ APIBắt tay xác minh thất bại. MiniMax đã gửi một challenge và endpoint của bạn không echo lại y nguyên trong vòng 3 giâyTrả lời challenge đồng bộ, trước bất kỳ middleware auth hoặc queue nào
URL hôm qua 404Link tải xuống chết, render dường như biến mấtURL tải xuống có giới hạn thời gian. Render vẫn ổnTruy vấn cùng task_id đó một lần nữa để lấy URL mới, trong vòng 7 ngày
429 ngẫu nhiên khi tải caoMột số submit bị từ chối, không có hàng đợiĐồng thời bị giới hạn, và đó là một giới hạn cứng, không phải là hàng đợiGiới hạn số lượng in-flight của riêng bạn và thử lại submit, không phải render

Hàng đầu tiên là hàng ăn cả buổi tối, và đáng để chính xác. API video cũ hơn của MiniMax báo cáo tiến trình với các từ viết hoa trong họ Preparing / Queueing / Processing / Success / Fail. Endpoint query v2 được H3 sử dụng trả về queued, running, succeeded, failed, cancelled (MiniMax API Reference, tháng 8 năm 2026). Nhiều tài liệu của bên thứ ba vẫn in bộ cũ, hoặc trộn cả hai trong một trang. Nếu bạn kế thừa một vòng lặp từ một trong số đó, nó không thể kết thúc, bởi vì chuỗi nó đang chờ không bao giờ được gửi.

Luồng công việc Tutorial MiniMax H3: Ba Endpoint, Năm Trạng thái, Một Vòng lặp

H3 được phát hành vào ngày 2026-07-31 như một model video đa phương thức: văn bản, hình ảnh, video và âm thanh đều nằm trong cùng một cửa sổ ngữ cảnh, đầu ra lên đến 15 giây ở 2K với âm thanh nổi gốc (MarkTechPost, tháng 8 năm 2026). Đối với API, điều đó có nghĩa là một endpoint create với một mảng content, và những gì bạn đặt trong mảng quyết định bạn đang ở chế độ nào.

Chế độNhững gì đi vào contentrole trên item hình ảnhRatio làm gìSử dụng cho
Text-to-videomột item văn bảnkhông cóBắt buộc, và adaptive bị từ chốiCảnh không có ảnh nguồn, kiểm soát hoàn toàn khung hình
Image-to-videoitem văn bản cộng với item ảnhfirst_frame (tùy chọn cũng có last_frame)Bị bỏ qua, khung hình đầu tiên quyết địnhLàm động một bức ảnh tĩnh bạn đã định hướng nghệ thuật
Reference-to-videoitem văn bản cộng với item tham khảoreference_image (cũng có reference_video, reference_audio)Bắt buộc, giống như chỉ văn bảnGiữ một nhân vật hoặc một giọng nói nhất quán qua các cảnh

Và phần mà mã của bạn thực sự phải xử lý. Năm trạng thái, năm nhánh khác nhau.

Trạng tháiÝ nghĩaMã của bạn làm gì
queuedĐã chấp nhận, chờ slotTiếp tục poll, back off
runningĐang renderTiếp tục poll, back off
succeededXong, content.url đã được điềnTải xuống ngay lập tức, trong lần lặp này
failedRender thất bạiĐọc nội dung lỗi, log nó, không blind-retry cùng payload
cancelledCông việc đã bị hủyThoát vòng lặp, coi như đầu cuối
bất kỳ điều gì khácKhông trong enumRaise. Một trạng thái mới bạn âm thầm coi là "tiếp tục chờ" là lỗi từ bảng trên

Không có trạng thái expired. Từ đó thường được gắn với API này và nó thuộc về hai thứ khác: URL tải xuống, có giới hạn thời gian và có thể làm mới, và bản ghi task, chỉ có thể truy vấn trong 7 ngày qua. Cả hai đều được đề cập trong Bước 4.

Một con số nữa trước khi vào mã. Đồng thời cho tạo video trên H3 bị giới hạn bởi số lượng kết nối, không phải yêu cầu mỗi phút: 2 tác vụ đồng thời trên gói miễn phí, 15 khi bạn đã trả phí (MiniMax Rate Limits, tháng 8 năm 2026). Vượt quá giới hạn bạn nhận được 429 ngay lập tức. Không có gì xếp hàng thay bạn. Tôi cũng đã đẩy 20 tác vụ H3 đồng thời qua một cổng định tuyến và có tất cả 20 thành công, và tôi cũng đã bị 429 trên cùng một thiết lập vào một ngày khác, vì vậy hãy coi bất kỳ con số nào trên giới hạn được tài liệu hóa là thời tiết, không phải hằng số.

Trực tiếp hoặc qua một cổng

Ba bước giống nhau dù cách nào, nhưng các chuỗi khác nhau, và điều đó quan trọng khi bạn đang gỡ lỗi lúc 1 giờ sáng.

MiniMax trực tiếpCổng hợp nhất (Atlas Cloud)
Gửi submitPOST /v2/video_generationPOST /api/v1/model/generateVideo
PollGET /v2/query/video_generation/{task_id}GET /api/v1/model/prediction/{id}
Từ trạng tháiqueued / running / succeeded / failed / cancelledcompleted khi thành công, failed khi thất bại
Thông báo pushCallback URL với bắt tay challenge 3 giâyPoll prediction id
Đồng thời2 miễn phí, 15 trả phí, 429 cứngKhông được công bố là giới hạn mỗi model, được đo rộng hơn trong thực tế
Model ảnh khung hình đầu tiên trên cùng keyKhông, tài khoản riêngCó, GPT Image 2 và H3 nằm sau một key
Giá H3Được công bố theo bậc độ phân giảiMỗi giây đầu ra, phân bậc theo độ phân giải, được báo giá trên nút Run trước khi bạn submit

Lý do tôi chạy chuỗi tutorial này trên một cổng hoàn toàn là hàng áp chót: khung hình đầu tiên đến từ model hình ảnh OpenAI và hai cảnh đến từ MiniMax, và tôi không muốn hai nhà cung cấp, hai key và hai trang thanh toán cho một bộ phim 14 giây. Nếu bạn đã ở trong nền tảng MiniMax, hãy ở lại đó, vòng lặp dưới đây hoạt động không thay đổi ngoại trừ các đường dẫn và các từ trạng thái.

Hailuo AI Video Generator: Cách Sử dụng Trước Khi Bạn Viết Bất kỳ Mã nào

Nếu bạn đến đây để tìm cách sử dụng Hailuo AI video generator, bạn đã đúng chỗ và bạn chưa cần bất kỳ mã nào. Hailuo là ứng dụng hướng đến người tiêu dùng của MiniMax và H3 là tên model mà API sử dụng. Cùng một engine, khác cửa.

Ba phút, không cần terminal:

  1. Mở một trang model, ví dụ MiniMax H3 image-to-video. Playground là bảng điều khiển bên phải của trang.
  2. Thả vào một hình ảnh khung hình đầu tiên, hoặc chuyển sang trang text-to-video và chỉ cần viết prompt. Đặt độ phân giải và thời lượng. Nói to những gì bạn muốn nghe, không chỉ những gì bạn muốn thấy: H3 tạo ra âm thanh trong cùng một lần, vì vậy "mưa gõ trên kính, tiếng click servo nhỏ" là một hướng dẫn thực tế, không phải trang trí.
  3. Nhấn Run. Nút hiển thị chính xác số tiền cho các cài đặt bạn đã chọn trước khi bạn cam kết. Chờ, tải xuống.

Đó là toàn bộ đường dẫn không cần mã, và đối với các clip một lần, nó thực sự là tùy chọn nhanh hơn. Khoảnh khắc bạn muốn mười biến thể, hoặc một khung hình đầu tiên được tạo bởi một model khác và đưa thẳng vào, hãy quay lại mã. Đó là những gì phần còn lại của bài viết này.

Tutorial MiniMax H3: Tạo, Poll, Tải xuống, Lặp lại

Một ví dụ chạy qua tất cả bảy bước: một người thợ đồng hồ sửa chữa một con chim cơ khí bằng đồng nhỏ, thì thầm một câu với nó, và con chim bay ra khỏi xưởng. Hai cảnh. Cảnh A là image-to-video để nội thất được định hướng nghệ thuật. Cảnh B là text-to-video vì không có khung hình nguồn cho bầu trời.

Bước 1: Tạo khung hình đầu tiên với GPT Image 2

Image-to-video bỏ qua ratio, vì vậy khung hình đầu tiên là nơi bạn quyết định khung hình của cảnh A. Tạo nó ở tỷ lệ 16:9 và ở bậc chất lượng cao nhất, bởi vì H3 sẽ kế thừa mọi khuyết điểm trong đó và sau đó thêm mờ chuyển động lên trên.

Model: openai/gpt-image-2/text-to-image. Cài đặt: quality high, 2048x1152, 16:9, PNG.

text
1Một xưởng làm đồng hồ bừa bộn lúc hoàng hôn, đèn vonfram ấm áp trên bàn gỗ sồi xước xát.
2Một người thợ sửa già trong tạp dề da nghiêng người gần một con chim cơ khí bằng đồng nhỏ
3nằm trong lòng bàn tay khum của ông, các tấm cánh của nó mở một nửa, những bánh răng nhỏ lộ ra.
4Mưa vệt trên cửa sổ nhiều ô phía sau ông; một bếp than hồng phát sáng màu hổ phách ở bên trái khung hình.
5Độ sâu trường ảnh nông, 35mm, bụi thể tích trong chùm đèn, bảng màu hổ phách đậm và xanh mòng két,
6chân thực, không có chữ.
7

Giao diện trình tạo hình ảnh AI hiển thị prompt văn bản và đầu ra được tạo

Playground GPT Image 2 trên Atlas Cloud với prompt khung hình đầu tiên của tutorial này và xưởng của người thợ đồng hồ được render trong bảng đầu ra

GPT Image 2 trên Atlas Cloud, chất lượng cao ở 2048x1152. Nút Run báo giá chính xác số tiền cho các cài đặt bạn đã chọn, $0,1745 cho cái này, trước khi bạn cam kết.

Giữ URL trả về. Bước 2 đưa nó trực tiếp vào H3, không cần vòng lặp tải xuống.

Bước 2: Tạo task MiniMax H3 và giữ lấy task_id

Lệnh gọi create làm hai việc và sau đó ngừng quan tâm đến bạn: nó xác thực payload và nó trả về một task_id. Một 400 ở đây là payload của bạn, không phải lỗi tạm thời, vì vậy đừng đặt nó sau một vòng lặp thử lại. Mọi lớp vấn đề khác xuất hiện sau đó, trong quá trình poll.

Thói quen duy nhất tiết kiệm tiền thực sự: lưu task_id trước khi bạn làm bất cứ điều gì khác. Các task chỉ có thể truy vấn trong 7 ngày, và nếu quy trình của bạn chết với id trong bộ nhớ, bạn đã trả tiền cho một render mà bạn không thể truy cập được nữa.

python
1import os, json, time, requests
2
3BASE = "https://api.minimax.io"
4HEADERS = {
5    "Authorization": f"Bearer {os.environ['MINIMAX_API_KEY']}",
6    "Content-Type": "application/json",
7}
8
9def create_task(payload: dict) -> str:
10    r = requests.post(f"{BASE}/v2/video_generation",
11                      headers=HEADERS, json=payload, timeout=60)
12    if r.status_code == 400:
13        # payload của bạn sai. thử lại nó sẽ chỉ sai thêm lần nữa.
14        raise ValueError(f"bị từ chối: {r.text}")
15    r.raise_for_status()
16    task_id = r.json()["task_id"]
17    with open("tasks.jsonl", "a") as f:                 # lưu TRƯỚC bất kỳ điều gì khác
18        f.write(json.dumps({"task_id": task_id, "at": int(time.time()),
19                            "payload": payload}) + "\n")
20    return task_id
21
22SHOT_A_PROMPT = (
23    "Bàn tay người thợ sửa già giữ chặt con chim đồng. Đôi mắt thủy tinh của nó lấp lánh sáng lên, "
24    "các tấm cánh mở ra từng cái một. Ông nghiêng người và thì thầm, gần mic, "
25    ""Để xem mày có còn nhớ bầu trời không." Chậm 50mm push-in, đèn lamp chiếu rọi "
26    "ngang qua đồng thau, mưa gõ trên cửa sổ, bếp than hồng lách tách, tiếng click servo "
27    "nhỏ dưới giọng nói của ông. Amber key ấm, teal window fill. Không có chữ trên màn hình."
28)
29
30shot_a = create_task({
31    "model": "MiniMax-H3",
32    "resolution": "2K",
33    "duration": 8,
34    # không có "ratio" ở đây có chủ đích: image-to-video lấy khung hình từ khung hình đầu tiên
35    "content": [
36        {"type": "text", "text": SHOT_A_PROMPT},
37        {"type": "image_url", "role": "first_frame",
38         "image_url": {"url": FIRST_FRAME_URL}},
39    ],
40})
41print("shot A task:", shot_a)
42

Đây là chính xác prompt và khung hình đầu tiên đó đang chạy như một công việc, để bạn có thể thấy một submit lành mạnh trông như thế nào từ phía bên kia:

Ảnh chụp màn hình giao diện trình tạo video AI với đầu vào và đầu ra

Playground MiniMax H3 image-to-video trên Atlas Cloud với khung hình đầu tiên của xưởng đã được tải và clip render trong bảng đầu ra

MiniMax H3 image-to-video: khung hình đầu tiên được tải ở bên trái, clip 2K hoàn chỉnh trong OUTPUT ở bên phải. Lưu ý trường Aspect Ratio được ghim thành adaptive, và báo giá $1,12 cho 2K ở 8 giây.

Bước 3: Poll nó, và xử lý tất cả năm trạng thái MiniMax H3

Đây là vòng lặp mà mọi người đều sai, vì vậy nó đáng được viết đầy đủ. Bốn quy tắc: back off thay vì đập mạnh, giới hạn tổng thời gian chờ, coi succeeded là "tải ngay bây giờ", và raise với bất kỳ trạng thái nào không nằm trong enum.

python
1TERMINAL_OK   = {"succeeded"}
2TERMINAL_BAD  = {"failed", "cancelled"}
3IN_FLIGHT     = {"queued", "running"}
4
5def poll(task_id: str, timeout_s: int = 900) -> dict:
6    delay, deadline = 3.0, time.time() + timeout_s
7    while time.time() < deadline:
8        r = requests.get(f"{BASE}/v2/query/video_generation/{task_id}",
9                         headers=HEADERS, timeout=30)
10        r.raise_for_status()
11        task = r.json()["task"]
12        status = task["status"]
13
14        if status in TERMINAL_OK:
15            return task                                  # content.url đang hoạt động NGAY BÂY GIỜ
16        if status in TERMINAL_BAD:
17            raise RuntimeError(f"{status}: {json.dumps(r.json())[:400]}")
18        if status not in IN_FLIGHT:
19            # một trạng thái mà enum không có. ĐỪNG rơi vào "tiếp tục chờ".
20            raise RuntimeError(f"trạng thái không xác định {status!r} -- đọc changelog")
21
22        print(f"  {status} ... kiểm tra tiếp theo trong {delay:.0f}s")
23        time.sleep(delay)
24        delay = min(delay * 1.5, 15.0)                    # 3s -> trần 15s
25    raise TimeoutError(f"{task_id} vẫn chưa kết thúc sau {timeout_s}s")
26

Ba điều trong đó là có chủ đích:

status not in IN_FLIGHT raise thay vì tiếp tục. Nếu MiniMax thêm trạng thái thứ sáu vào quý tới, bạn muốn một sự cố lớn, không phải một vòng lặp chờ một từ không bao giờ đến. Một dòng này là sự khác biệt giữa tutorial hỏng và cái này.

failed không thử lại. Một render thất bại thường có nghĩa là prompt đã kích hoạt bộ lọc hoặc payload có một kết hợp xấu, và gửi lại payload giống hệt nhau sẽ mua cho bạn thất bại giống hệt nhau với giá đầy đủ. Log phần thân, nhìn vào nó, sau đó quyết định.

Back off bắt đầu ở 3 giây và kết thúc ở 15. H3 ở 2K mất vài phút, không phải giây. Polling mỗi giây một lần chỉ đốt giới hạn tốc độ của bạn trên endpoint query.

Bước 4: Tải xuống trước khi URL hết hạn

Khoảnh khắc succeeded đến, stream file xuống đĩa. URL trong content.url rõ ràng là một link có giới hạn thời gian: "Tải xuống hoặc lưu trữ nó kịp thời; truy vấn lại để có được một URL mới sau khi nó hết hạn" (MiniMax API Reference, tháng 8 năm 2026). Nó không phải là một đường dẫn CDN bạn có thể đặt trong cơ sở dữ liệu của mình và quên nó đi.

Nửa thứ hai là tin tốt, và nó là câu trả lời cho lỗi 404 bạn gặp vào sáng hôm sau. Render không biến mất. Truy vấn cùng task_id đó một lần nữa và bạn nhận được một URL mới, trong tối đa 7 ngày sau khi tạo.

python
1def download(url: str, path: str) -> str:
2    with requests.get(url, stream=True, timeout=300) as r:
3        r.raise_for_status()
4        with open(path, "wb") as f:
5            for chunk in r.iter_content(1 << 20):
6                f.write(chunk)
7    return path
8
9def refresh_url(task_id: str) -> str:
10    """Link chết? Render vẫn ổn. Hỏi lại, trong vòng 7 ngày."""
11    r = requests.get(f"{BASE}/v2/query/video_generation/{task_id}",
12                     headers=HEADERS, timeout=30)
13    r.raise_for_status()
14    return r.json()["task"]["content"]["url"]
15
16task = poll(shot_a)
17download(task["content"]["url"], "shot-a.mp4")
18

Những gì trả về cho cảnh A, bên cạnh bức ảnh tĩnh mà nó bắt đầu:

So sánh cạnh nhau giữa một người thợ thủ công đang kiểm tra một con chim cơ khí

Cạnh nhau: khung hình đầu tiên được tạo ở bên trái, một khung hình từ clip MiniMax H3 hoàn chỉnh ở bên phải, cho thấy các tấm cánh của con chim đã mở và đôi mắt sáng

Trái: ảnh tĩnh GPT Image 2 từ Bước 1, chính xác như đã gửi. Phải: một khung hình lấy từ clip 2K mà H3 trả về. Cùng bối cảnh, cùng ánh sáng, các tấm cánh và đôi mắt là những thứ đã chuyển động.

Bước 5: Cảnh B với MiniMax H3 text-to-video, nơi ratio là bắt buộc

Không có khung hình nguồn cho bầu trời, vì vậy cảnh B chỉ là văn bản. Điều đó lật ngược quy tắc ratio từ "bị bỏ qua" thành "bắt buộc": đối với một prompt chỉ văn bản, ratio là bắt buộc và không thể là adaptive (MiniMax API Reference, tháng 8 năm 2026). Bỏ nó ra hoặc gửi adaptive và bạn sẽ nhận được 400 ngay lập tức, trước khi bất kỳ render nào bắt đầu.

Model: minimax/h3/text-to-video. Cài đặt: 2K, duration 6, ratio 16:9.

text
1Con chim đồng lao qua một ô kính trời nửa mở của xưởng vào bầu trời buổi tối mưa rửa trôi,
2đôi cánh đập trong một tiếng vo ve của bánh răng, những giọt nước bắn ra khỏi lông kim loại
3khi nó bay lên qua những mái ngói ướt về phía một khoảng mây vàng rực.
4Camera cần cẩu lên phía sau nó, 24mm, rim sáng từ mặt trời thấp. Âm thanh: tiếng servo cánh vo ve,
5gió nổi lên, tiếng chuông nhà thờ xa, mưa nhạt dần. Không có chữ.
6
python
1shot_b = create_task({
2    "model": "MiniMax-H3",
3    "resolution": "2K",
4    "duration": 6,
5    "ratio": "16:9",          # bắt buộc ở đây. bỏ nó ra hoặc truyền "adaptive" -> 400
6    "content": [{"type": "text", "text": SHOT_B_PROMPT}],
7})
8download(poll(shot_b)["content"]["url"], "shot-b.mp4")
9

Ảnh chụp màn hình giao diện trình tạo video AI hiển thị đầu vào và đầu ra

Playground MiniMax H3 text-to-video trên Atlas Cloud với prompt con chim bay lên và clip hoàn chỉnh trong bảng đầu ra

MiniMax H3 text-to-video với prompt của cảnh B và Aspect Ratio được đặt rõ ràng thành 16:9. Lần chạy này sử dụng 8 giây mặc định của trang thay vì 6 trong payload ở trên.

Bước 6: Bỏ qua polling với một callback, và echo challenge trong 3 giây

Nếu bạn muốn được thông báo hơn là hỏi, hãy truyền callback_url trong lệnh gọi create. Có chính xác một cái bẫy, nó được tài liệu hóa trong một dấu ngoặc đơn trong tài liệu tham khảo API, và nó là cách phổ biến nhất mà các callback tự lưu trữ thất bại.

Trước khi MiniMax đẩy bất cứ điều gì cho bạn, nó gửi một yêu cầu xác minh chứa trường challenge, và "bạn phải trả lại challenge không thay đổi trong vòng 3 giây để hoàn tất xác minh" (MiniMax API Reference, tháng 8 năm 2026). Bỏ lỡ nó và không có lỗi ở đâu cả. Các lệnh gọi create của bạn tiếp tục thành công, các render của bạn tiếp tục hoàn thành, và bạn đơn giản là không bao giờ nhận được một push. Không có gì trong bất kỳ log nào nói lý do.

Mười hai dòng FastAPI, và thứ tự bên trong chúng là toàn bộ vấn đề:

python
1from fastapi import FastAPI, Request
2
3app = FastAPI()
4
5@app.post("/minimax/callback")
6async def callback(req: Request):
7    body = await req.json()
8    if "challenge" in body:                 # bắt tay xác minh, trả lời nó TRƯỚC
9        return {"challenge": body["challenge"]}   # không thay đổi, đồng bộ, không có cổng auth
10    task_id = body.get("task_id")
11    status  = body.get("status")
12    enqueue(task_id, status)                # thông báo thực tế: bàn giao, trả về nhanh
13    return {"ok": True}
14

Những sai lầm giết chết nó, theo thứ tự tần suất tôi đã thấy:

  • Yêu cầu challenge đi qua middleware auth của bạn và nhận được 401 hoặc chuyển hướng. Xác minh không được xác thực theo định nghĩa. Whitelist đường dẫn.
  • Handler đẩy challenge vào một hàng đợi và trả lời không đồng bộ. Quá muộn. Câu trả lời đó phải nằm trong phần thân phản hồi của yêu cầu đó.
  • Giá trị được tuần tự hóa lại, cắt bớt hoặc bọc lại. Echo nó từng byte.
  • Bạn đang kiểm tra qua một tunnel chống lại một máy chủ dev serverless, và thời gian khởi động nguội một mình đã hơn 3 giây. Làm nóng nó trước, hoặc xác minh với một quy trình đã chạy.

Polling hoàn toàn ổn, nhân tiện. Nếu bạn có một số ít công việc mỗi giờ, vòng lặp trong Bước 3 là ít mã hơn và ít thứ để hỏng hơn. Callback trả ơn khi bạn có nhiều công việc và không muốn một poller cho mỗi công việc.

Bước 7: Ghép nối hai cảnh thành một bộ phim

Cả hai cảnh đều trả về dưới dạng 2560x1440 h264 ở 24fps với âm thanh nổi AAC ở 32kHz. Cùng container, cùng mọi thứ, vì vậy đây là một bản sao luồng thay vì mã hóa lại. Không mất chất lượng, không chờ đợi.

Một bất ngờ nhỏ đáng mong đợi: yêu cầu 6 giây tôi nhận được một tệp 6,58 giây. Thời lượng trả về gần với những gì bạn yêu cầu, không chính xác đến từng khung hình, vì vậy hai cảnh cộng lại là 14,62 giây thay vì 14 chẵn.

bash
1printf "file 'shot-a.mp4'\nfile 'shot-b.mp4'\n" > list.txt
2ffmpeg -f concat -safe 0 -i list.txt -c copy brass-bird-two-shot.mp4
3

Đầu ra đó là video ở đầu bài viết này. Nếu -c copy phàn nàn, hai cảnh của bạn có độ phân giải hoặc tốc độ khung hình khác nhau, điều đó trên H3 có nghĩa là bạn đã thay đổi resolution giữa các lần gọi. Khớp chúng, hoặc bỏ -c copy và chấp nhận một lần mã hóa lại.

Các Biến thể Tutorial MiniMax H3 Đáng Ăn cắp

Năm điều đáng thử một khi vòng lặp trên hoạt động, theo thứ tự thô sơ về số tiền chúng tiết kiệm cho bạn.

Draft ở 768P, hoàn thiện ở 2K. Cả hai bậc đều là cùng một model, và 768P có giá thấp hơn khoảng 29% mỗi giây. Render các ứng viên của bạn ngắn và rẻ, xem chúng, sau đó chạy lại chỉ người thắng cuộc ở 2K với cùng prompt. Đây là nơi hầu hết các khoản tiết kiệm trong một danh sách cảnh sống. Bậc nào bạn thực sự cần cho việc giao hàng là một cuộc tranh luận riêng, và tôi đã đề cập trong 768P vs 2K.

Thời lượng là mọi số nguyên từ 4 đến 15. Không phải một tập hợp các cài đặt trước. Nếu hành động kết thúc ở 7 giây, hãy yêu cầu 7 và ngừng trả tiền cho 8.

Khung hình đầu tiên cộng với khung hình cuối cùng. Gửi một item hình ảnh thứ hai với role: "last_frame" và H3 sẽ xây dựng quá trình chuyển tiếp giữa chúng. Hữu ích cho việc bàn giao giữa các cảnh bạn đã định hướng nghệ thuật.

Reference-to-video cho tính liên tục. role: "reference_image" giữ một nhân vật qua các cảnh thay vì làm lại khuôn mặt của họ mỗi lần tạo. Có một vai trò reference_audio tương ứng với cửa sổ 2 đến 15 giây cho clip tham khảo, đó là cách bạn giữ một giọng nói nhất quán. Xem reference-to-video.

Vertical talking head. ratio: "9:16" với một dòng đối thoại trong prompt là cách sử dụng khối lượng lớn nhất của model này ngay bây giờ, bởi vì âm thanh ra từ cùng một lần và môi khớp mà không cần một bước đồng bộ môi riêng.

Kỹ thuật prompt là một kỹ năng riêng biệt so với hệ thống ống nước async, và nếu các cảnh của bạn sạch về mặt kỹ thuật nhưng phẳng về mặt hình ảnh, vấn đề nằm ở phía trước của bài viết này. Bắt đầu với hướng dẫn prompt H3.

Tutorial MiniMax H3 này Tốn bao nhiêu để Chạy

Các mục thực tế từ lần chạy đã tạo ra bộ phim ở đầu, được báo giá bởi nút Run và xác minh vào ngày 2026-08-12. H3 tính phí mỗi giây đầu ra và tỷ lệ được phân bậc theo độ phân giải: các công việc 2K báo giá $1,12 cho 8 giây, tức là $0,14 mỗi giây, và tỷ lệ bắt đầu $0,10 của danh mục là bậc 768P. Cả ba endpoint H3 đều ở giá đầy đủ ngay bây giờ, không có giảm giá.

BướcModelCài đặtPhí
Khung hình đầu tiênGPT Image 2 text-to-imagechất lượng cao, 2048x1152$0,1745
Cảnh AH3 image-to-video2K, 8s$1,12
Cảnh BH3 text-to-video2K, 16:9, 6s$0,84
Phim đã giao14,6s, hai cảnh, 2560x1440, âm thanh nổi$2,13
Các lần chạy ảnh chụp cho bài viết nàyH3 i2v + t2v2K, 8s mỗi cái$2,24

Đáng chú ý rằng hai cảnh tương tự được draft ở 768P sẽ có giá $0,80 và $0,60 thay vì $1,12 và $0,84, giảm khoảng 29%, cho cảnh quay bạn hoàn toàn có thể đánh giá một lần diễn.

Hai chi tiết thanh toán dễ học theo cách đắt đỏ. Một yêu cầu bị từ chối khi submit không tốn gì, vì vậy 400 trên một ratio bị thiếu là miễn phí. Một yêu cầu render thứ gì đó vô dụng không miễn phí: nếu công việc đạt đến succeeded, bạn bị tính phí, ngay cả khi đầu ra không phải là những gì bạn muốn. Đó là lý do thực sự để draft ở 768P.

Tỷ lệ mỗi giây, so sánh 768P và 2K, và cách phí hoạt động theo thời lượng được phân tích chi tiết trong giá API MiniMax H3 đồng hành với bài viết này. Bài này là mã, bài kia là hóa đơn.

Ghi nhận và Lãnh thổ Trước Khi Bạn Phát hành

Hai điều cần kiểm tra trước khi điều này đi đến bất kỳ đâu công khai. Các điều khoản API của MiniMax bao gồm một nghĩa vụ bảo vệ có điều kiện bao gồm các khiếu nại bằng sáng chế và bản quyền đối với đầu ra API, và nghĩa vụ đó không mở rộng đến nhãn hiệu hoặc chân dung, vì vậy một logo có thể nhận dạng hoặc một người thực trong prompt của bạn vẫn là vấn đề của bạn. Riêng biệt, giấy phép trọng lượng mở cho H3 mang một điều khoản Lãnh thổ loại trừ, và điều khoản đó điều chỉnh các trọng lượng đã tải xuống và đầu ra của chúng, không phải API được lưu trữ, mà các điều khoản của nó nêu tên một khu vực dịch vụ Hoa Kỳ bạn có thể chọn. Đọc bất kỳ hợp đồng nào bạn thực sự đã ký. Và gắn nhãn đầu ra H3 là đầu ra H3 trong giao diện người dùng của bạn.

FAQ Tutorial MiniMax H3

Các trạng thái task MiniMax H3 là gì, và có trạng thái expired không?

Năm: queued, running, succeeded, failed, cancelled. Không có trạng thái expired. Hai thứ khác hết hạn và bị nhầm lẫn với nó: URL tải xuống trong content.url có giới hạn thời gian, và bản ghi task chỉ có thể truy vấn trong 7 ngày qua.

Tôi có phải sử dụng callback không, hay polling là ổn cho MiniMax H3?

Polling ổn và ít mã hơn. Sử dụng callback khi bạn có đủ các công việc đồng thời đến nỗi một poller cho mỗi công việc là ngớ ngẩn. Nếu bạn làm, endpoint phải echo trường challenge trở lại không thay đổi trong vòng 3 giây, đồng bộ, trước bất kỳ middleware auth nào. Một bắt tay thất bại không tạo ra thông báo lỗi nào cả, chỉ im lặng vĩnh viễn.

Tại sao yêu cầu text-to-video MiniMax H3 của tôi báo 400 với "ratio is required and cannot be adaptive"?

Bởi vì bạn đang ở chế độ chỉ văn bản, nơi không có khung hình đầu tiên để suy ra khung hình. Truyền một giá trị rõ ràng: 21:9, 16:9, 4:3, 1:1, 3:4 hoặc 9:16. Cùng một quy tắc là lý do tại sao ratio trông như nó không làm gì trong image-to-video, nơi khung hình đầu tiên quyết định và bất kỳ ratio nào bạn gửi đều bị bỏ qua.

Có bao nhiêu công việc MiniMax H3 tôi có thể chạy song song?

Giới hạn được tài liệu hóa dựa trên kết nối: 2 tác vụ đồng thời miễn phí, 15 trả phí. Trên giới hạn bạn nhận được 429 ngay lập tức thay vì một slot hàng đợi, vì vậy hãy giới hạn số lượng in-flight của riêng bạn. Các cổng định tuyến đôi khi hấp thụ nhiều hơn, và tôi đã có 20 công việc đồng thời tất cả đều hoàn thành, nhưng tôi cũng đã bị 429 trên cùng một thiết lập vào một ngày khác. Đừng xây dựng một bộ lập lịch giả định số lượng cao hơn.

URL video MiniMax H3 của tôi báo 404 một ngày sau đó. Render có biến mất không?

Không. URL đã hết hạn, render thì không. Truy vấn cùng task_id đó một lần nữa và phản hồi mang một URL mới, bất kỳ lúc nào trong cửa sổ truy vấn 7 ngày. Sau 7 ngày, bản ghi task không còn có thể truy vấn được nữa, đó là lý do tại sao Bước 2 lưu task_id trước khi làm bất cứ điều gì khác.

Tôi đã tìm kiếm "hailuo ai video generator how to use" và đến một tutorial MiniMax H3. Tôi có đúng chỗ không?

Có. Hailuo là ứng dụng người tiêu dùng và H3 là tên model được API sử dụng. Cùng một engine. Nếu bạn muốn một clip, hãy sử dụng đường dẫn playground trong phần workflow ở trên, không cần mã. Nếu bạn muốn mười biến thể hoặc một khung hình đầu tiên được đưa vào từ một model khác, bảy bước là dành cho bạn.

Mô hình mới nhất

Một API cho mọi AI đa phương tiện.

Khám phá tất cả mô hình