🎯 Hiểu khái niệm cốt lõi
MidJourney API mô phỏng các tương tác nút trên Discord. Không giống các REST API điển hình, nó hoạt động như một state machine, trong đó mỗi thao tác sẽ trả về các nút mới cho bước tiếp theo.4 API cốt lõi
| API | Mục đích | Khi nào dùng |
|---|---|---|
POST /mj/submit/imagine | Tạo ảnh từ văn bản | Điểm khởi đầu cho mọi workflow |
GET /mj/task/\{id\}/fetch | Truy vấn trạng thái task và lấy các nút | Sau mỗi lần submit (poll cho đến khi xong) |
POST /mj/submit/action | Nhấn một nút (upscale, vary, zoom, v.v.) | Khi bạn muốn thao tác trên một hình ảnh |
POST /mj/submit/modal | Gửi thêm dữ liệu đầu vào | Chỉ khi trạng thái là MODAL |
📊 Sơ đồ workflow hoàn chỉnh
🔑 Khái niệm chính: Buttons và customId
Mỗi task thành công sẽ trả về một mảngbuttons. Mỗi nút có một customId mà bạn sẽ dùng để kích hoạt hành động tiếp theo.
Ví dụ response từ /mj/task/\{id\}/fetch:
customId KHÔNG phải là giá trị cố định. Nó thay đổi theo từng task. Luôn lấy nó từ mảng buttons.
📋 Tham chiếu Button theo từng giai đoạn
Sau IMAGINE (ảnh lưới 4 ô)
Các button này được trả về khi quá trình tạo ảnh ban đầu hoàn tất:| Button | customId Pattern | Hành động | Kết quả |
|---|---|---|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Nâng cấp một ảnh đơn | Ảnh đơn độ phân giải cao |
| V1-V4 | MJ::JOB::variation::1::xxx | Tạo biến thể | Lưới 4 ô mới |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Tạo lại toàn bộ | Lưới 4 ô mới |
Sau UPSCALE (ảnh đơn)
Sau khi upscale, bạn sẽ có quyền truy cập vào các công cụ chỉnh sửa:| Nhãn | Cần Modal? |
|---|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Không |
| Upscale (Creative) / Upscale (4x) | ❌ Không |
| Vary (Subtle) 🪄 | ❌ Không |
| Vary (Strong) 🪄 | ❌ Không |
| Vary (Region) 🖌️ | ✅ Có (mask) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Không |
| Custom Zoom 🔍 | ✅ Có (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Không |
| Animate 🎞️ | ❌ Không |
| 🔄 Reroll | ❌ Không |
Lưu ý: Nhãn button và định dạng⚠️ Button Inpaint (Vary Region) chỉ xuất hiện sau khi Upscale!customIdcó thể khác nhau tùy theo phiên bản MJ được chỉ định trong prompt của bạn (ví dụ:--v 6.1so với--v 5.2). Luôn đọc các button từ phản hồi API.
⚡ Ví dụ hoàn chỉnh: Generate & Upscale
Bước 1: Gửi yêu cầu Imagine
Bước 2: Poll trạng thái tác vụ
Bước 3: Nhấn U1 để Upscale
Bước 4: Poll tác vụ mới & lấy kết quả
⚠️ Khi nào cần Modal?
Khi bạn gọi/mj/submit/action và trạng thái tác vụ trở thành MODAL thay vì SUCCESS, bạn phải gọi /mj/submit/modal để cung cấp thêm đầu vào.
Các thao tác Modal đã được xác nhận
| Thao tác | Button | Cần gửi gì |
|---|---|---|
| Inpaint | Vary (Region) | maskBase64 (mask PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (ví dụ: “your prompt —zoom 2”) |
🚀 Chọn Chế Độ Tốc Độ
Thêm tiền tố tốc độ vào đường dẫn:| Chế độ | Tiền tố đường dẫn | Ví dụ |
|---|---|---|
| Nhanh | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (mặc định) | /mj/submit/imagine |
🔗 Các Điểm Vào Khác
Các API này là điểm vào độc lập và không tuân theo luồng imagine → action:| API | Mục đích |
|---|---|
POST /mj/submit/blend | Trộn 2-5 hình ảnh thành một |
POST /mj/submit/describe | Tạo prompt từ hình ảnh |
POST /mj/submit/video | Chuyển đổi hình ảnh thành video |
POST /mj/submit/edits | Chỉnh sửa hình ảnh bằng mask |
❓ Mẹo Khắc Phục Sự Cố
Dựa trên thiết kế API và quy trình hoạt động, đây là các vấn đề phổ biến bạn có thể gặp phải:| Vấn đề | Nguyên nhân có thể | Cách khắc phục |
|---|---|---|
| Không tìm thấy nút Vary (Region) | Đang xem ảnh lưới 4 ô | Hãy Upscale trước (nhấn U1-U4), sau đó kiểm tra các nút |
Trạng thái task bị kẹt ở MODAL | Thao tác yêu cầu thêm đầu vào | Gọi /mj/submit/modal với dữ liệu cần thiết |
customId không hoạt động | Đang dùng giá trị đã cũ hoặc hardcoded | Luôn lấy customId mới từ phản hồi của /mj/task/\{id\}/fetch |
Mảng buttons trống | Task vẫn đang được xử lý | Chờ status: "SUCCESS" trước khi truy cập buttons |