Gọi bằng API (ảnh / video)
Định dạng chuẩn theo API của OpenAI, xác thực bằng token. Ảnh trả về base64 đồng bộ; video là tác vụ bất đồng bộ (tạo → thăm dò → tải xuống).
Nhóm token
Token bắt buộc phải thuộc nhóm media / media-gen, nếu không sẽ báo lỗi «Không có kênh khả dụng». Xem Chọn nhóm.
Ảnh · Tạo ảnh từ văn bản
POST https://byesu.com/v1/images/generations
Authorization: Bearer sk-token-của-bạn
Content-Type: application/json| Trường | Bắt buộc | Mô tả |
|---|---|---|
model | ✅ | Tên mô hình, xem Tạo ảnh |
prompt | ✅ | Prompt (câu lệnh mô tả) |
size | Rộng x cao tính bằng pixel, đồng thời quyết định tỷ lệ và bậc độ phân giải: cạnh dài ≈1024 → 1K, ≈2048 → 2K, ≈3840 → 4K. Ví dụ "1024x1024" (1:1 · 1K), "2048x1152" (16:9 · 2K), "3840x3840" (1:1 · 4K). Không truyền thì mặc định 1:1 bậc cơ bản |
curl https://byesu.com/v1/images/generations \
-H "Authorization: Bearer sk-token-của-bạn" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"prompt": "Một chú chó golden retriever chạy giữa cánh đồng lúa mì vàng óng lúc hoàng hôn, cảm giác điện ảnh",
"size": "2048x1152"
}'Kết quả trả về (ảnh là base64 của PNG):
{ "data": [ { "b64_json": "<chuỗi base64>" } ] }Ảnh · Tạo ảnh từ ảnh (ảnh tham chiếu)
Dùng POST /v1/images/edits, định dạng multipart/form-data, ảnh tham chiếu được tải lên dưới dạng tệp (tên trường image, có thể lặp lại để truyền nhiều ảnh, mỗi ảnh ≤8MB, giới hạn số lượng tùy từng mô hình, xem Tạo ảnh):
curl https://byesu.com/v1/images/edits \
-H "Authorization: Bearer sk-token-của-bạn" \
-F model="nano-banana-2" \
-F prompt="Biến bức ảnh này thành phong cách tranh màu nước" \
-F size="1024x1024" \
-F image=@ref1.png \
-F image=@ref2.pngĐịnh dạng kết quả trả về giống như tạo ảnh từ văn bản.
Video (bất đồng bộ, kiểu Sora)
Ba bước: tạo tác vụ → thăm dò trạng thái → tải mp4.
import requests, time
BASE = "https://byesu.com"
H = {"Authorization": "Bearer sk-token-của-bạn"}
# 1. Tạo tác vụ
task = requests.post(f"{BASE}/v1/videos", headers=H, json={
"model": "gemini-veo31",
"prompt": "Sóng biển vỗ vào đá ngầm, quay chậm, cảm giác điện ảnh",
"seconds": "6", # thời lượng (giây), các giá trị khả dụng tùy mô hình
"size": "1280x720", # tỷ lệ biểu đạt bằng kích thước; 1920x1080 = 1080p (một số mô hình hỗ trợ)
}).json()
# 2. Thăm dò cho đến khi hoàn thành (vài chục giây đến vài phút)
while task["status"] not in ("completed", "failed"):
time.sleep(5)
task = requests.get(f"{BASE}/v1/videos/{task['id']}", headers=H).json()
# 3. Tải mp4
if task["status"] == "completed":
mp4 = requests.get(f"{BASE}/v1/videos/{task['id']}/content", headers=H)
open("out.mp4", "wb").write(mp4.content)Tạo video từ ảnh: khi tạo tác vụ, chuyển sang dùng multipart/form-data, ảnh khung hình đầu đặt vào trường tệp input_reference (model / prompt / seconds / size truyền cùng dưới dạng trường form). runway-gen4-turbo bắt buộc phải kèm ảnh khung hình đầu.
Video tính phí theo giây
Giá video = đơn giá mỗi giây × seconds. Tác vụ thất bại sẽ được tự động hoàn tiền.
Báo lỗi
- «Không có kênh khả dụng» → nhóm token không đúng, xem Chọn nhóm
too many reference images→ số ảnh tham chiếu vượt quá giới hạn của mô hình đó- 401 / Số dư không đủ / Lỗi khác → xem Lỗi thường gặp & cách xử lý
