Skip to content

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ườngBắt buộcMô tả
modelTên mô hình, xem Tạo ảnh
promptPrompt (câu lệnh mô tả)
sizeRộ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
bash
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):

json
{ "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):

bash
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.

python
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ý

Gặp sự cố? Liên hệ hỗ trợ hoặc tham gia nhóm của chúng tôi.