Appel via l'API (images / vidéos)
Format d'interface standard OpenAI, authentification par jeton. Images : réponse synchrone en base64 ; vidéos : tâche asynchrone (créer → interroger → télécharger).
Groupe du jeton
Le jeton doit appartenir au groupe media / media-gen, sinon vous obtiendrez l'erreur « aucun canal disponible ». Voir Choisir un groupe.
Images · Texte vers image
POST https://byesu.com/v1/images/generations
Authorization: Bearer sk-votre-jeton
Content-Type: application/json| Champ | Obligatoire | Description |
|---|---|---|
model | ✅ | Nom du modèle, voir Génération d'images |
prompt | ✅ | Prompt |
size | Largeur x hauteur en pixels, détermine à la fois le ratio et le palier de résolution : grand côté ≈1024 → 1K, ≈2048 → 2K, ≈3840 → 4K. Par exemple "1024x1024" (1:1 · 1K), "2048x1152" (16:9 · 2K), "3840x3840" (1:1 · 4K). Si omis : 1:1 au palier de base |
curl https://byesu.com/v1/images/generations \
-H "Authorization: Bearer sk-votre-jeton" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"prompt": "Un golden retriever courant dans un champ de blé doré au crépuscule, ambiance cinématographique",
"size": "2048x1152"
}'Réponse (l'image est un PNG encodé en base64) :
{ "data": [ { "b64_json": "<chaîne base64>" } ] }Images · Image vers image (images de référence)
Utilisez POST /v1/images/edits au format multipart/form-data : les images de référence sont envoyées comme fichiers (champ image, répétable pour en transmettre plusieurs, ≤ 8 Mo chacune ; la limite dépend du modèle, voir Génération d'images) :
curl https://byesu.com/v1/images/edits \
-H "Authorization: Bearer sk-votre-jeton" \
-F model="nano-banana-2" \
-F prompt="Transforme cette photo en aquarelle" \
-F size="1024x1024" \
-F image=@ref1.png \
-F image=@ref2.pngLe format de la réponse est identique à celui du texte vers image.
Vidéos (asynchrone, style Sora)
Trois étapes : créer la tâche → interroger l'état → télécharger le mp4.
import requests, time
BASE = "https://byesu.com"
H = {"Authorization": "Bearer sk-votre-jeton"}
# 1. Créer la tâche
task = requests.post(f"{BASE}/v1/videos", headers=H, json={
"model": "gemini-veo31",
"prompt": "Les vagues frappent les rochers, ralenti, ambiance cinématographique",
"seconds": "6", # durée (secondes), valeurs possibles selon le modèle
"size": "1280x720", # le ratio s'exprime via la taille ; 1920x1080 = 1080p (selon les modèles)
}).json()
# 2. Interroger jusqu'à la fin (de quelques dizaines de secondes à quelques minutes)
while task["status"] not in ("completed", "failed"):
time.sleep(5)
task = requests.get(f"{BASE}/v1/videos/{task['id']}", headers=H).json()
# 3. Télécharger le mp4
if task["status"] == "completed":
mp4 = requests.get(f"{BASE}/v1/videos/{task['id']}/content", headers=H)
open("out.mp4", "wb").write(mp4.content)Image vers vidéo : à la création de la tâche, passez en multipart/form-data et placez l'image servant de première image de la vidéo dans le champ fichier input_reference (model / prompt / seconds / size sont transmis en même temps comme champs de formulaire). runway-gen4-turbo exige cette image de départ.
Vidéos facturées à la seconde
Prix de la vidéo = tarif par seconde × seconds. En cas d'échec de la tâche, remboursement automatique.
Messages d'erreur
- « Aucun canal disponible » → le groupe du jeton n'est pas le bon, voir Choisir un groupe
too many reference images→ le nombre d'images de référence dépasse la limite du modèle- 401 / Solde insuffisant / Autres → voir Erreurs courantes et solutions
