Loading...
Loading...
Niveau Veo 3.1 plus rapide et plus économique, couvrant texte-vidéo, image-vidéo, référence-vidéo et transitions entre image de début et de fin.
Connectez-vous pour exécuter des modèles
No output yet
Run the model to see generated results.
import requests
result = requests.post(
'https://api.e2x.ai/v1/jobs/submit',
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json'
},
json={
'model': 'google/veo-3.1-fast/reference-to-video',
'input': {}
}
)import time
job_id = result.json()['jobId']
while True:
response = requests.get(
f'https://api.e2x.ai/v1/jobs/{'{job_id}'}',
headers={'Authorization': f'Bearer {'{API_KEY}'}'}
)
data = response.json()['data']
if data['status'] == 'completed':
print('Done!', data['outputs'][0]['url'])
break
elif data['status'] == 'failed':
raise Exception(f"Job failed: {'{'}data['error']['message']{'}'}")
time.sleep(2)Coût estimé par génération selon la durée et la résolution. Vous ne payez que ce que vous utilisez.
C'est l'endpoint que vous utilisez quand le même visage, la même veste ou la même devanture doit survivre à toute une série de clips. Nous opérons le Veo 3.1 Fast de Google sous google/veo-3.1-fast/reference-to-video, il prend un tableau image_urls de trois images de référence au maximum, et nous facturons à la seconde : $0.01 la seconde, ×1.5 avec l'audio actif. Chaque clip ici fait 8 secondes, donc le prix est de $0.12 par clip en 720p avec du son.
Une seule image suffit, et un clip plus court vous arrangerait ? Utilisez Veo 3.1 Fast image-to-video — il anime une unique image de départ et vous donnera 4 ou 6 secondes. Rien du tout à uploader ? Veo 3.1 Fast text-to-video tourne sur un prompt seul.
La mesure à la seconde est universelle sur ce modèle — Google, fal.ai et Replicate le font tous, et nous aussi. Comme reference-to-video est figé à 8 secondes, le tableau ci-dessous est la seule configuration qui compte. Chiffres vérifiés le 26 août 2026, en 720p avec audio :
| Provider API | Facturation | Tarif (720p, audio actif) | Clip de 8 secondes | vs. nous |
|---|---|---|---|---|
| E2X (actuel) | à la seconde | $0.01/s ×1.5 audio | $0.12 | — |
| Google Gemini API | à la seconde | $0.10/s | $0.80 | 6,7× notre prix |
| fal.ai | à la seconde | $0.15/s | $1.20 | 10× notre prix |
| Replicate | à la seconde | $0.15/s | $1.20 | 10× notre prix |
| Tarif public E2X (avant remise) | à la seconde | $0.10/s ×1.5 | $1.20 | notre tarif sans remise |
Lisez la dernière ligne face aux deux marketplaces. Notre tarif public est de $1.20 pour un clip de 8 secondes — précisément ce que facturent fal.ai et Replicate. Vous en payez le dixième aujourd'hui, et cela reste 6,7× sous l'API de Google elle-même. Cet écart est une remise en cours sur un modèle identique, pas un palier bridé.
Chiffrez la 1080p délibérément : fal.ai et Replicate incluent le passage 720p → 1080p sans surcoût, alors que Google facture un tarif à la seconde plus élevé. La résolution est aussi un multiplicateur de notre côté — le chiffre en vigueur vit dans le llms.txt de ce modèle.
Les prix et les conditions produit peuvent changer. Vérifiez les tarifs en vigueur de chaque provider avant toute décision d'achat. La tarification Google Batch ou Flex n'est pas directement équivalente à une requête API on-demand standard, car les conditions de planification, de disponibilité et de traitement diffèrent ; elle est donc exclue de cette comparaison. Il s'agit d'une comparaison délimitée, et non d'une affirmation selon laquelle E2X serait l'option la moins chère au monde dans toutes les configurations.
La limite de Google est explicite : « Utilisez jusqu'à trois images de référence pour guider le contenu », décrites dans leur schema comme « Jusqu'à trois images à utiliser comme références de style et de contenu ». Trois. Une quatrième sort de ce que le modèle accepte.
Ce budget force une décision, et c'est la partie intéressante de cet endpoint. Vous dépensez trois emplacements sur ce qui ne doit pas dériver. Un tournage de campagne se répartit d'habitude ainsi : un portrait net du présentateur, un plan en pied qui montre la tenue, une photo du lieu. Chaque clip de la série revient alors avec la même personne, les mêmes vêtements, le même endroit — vous ne changez que le prompt.
Le travail produit se répartit autrement : deux angles de l'objet, une image du traitement colorimétrique de la marque. Même principe. Les références portent l'identité, le prompt porte l'action.
Ce n'est pas le travail de l'image-to-video. Là-bas, votre image est la frame numéro un. Ici, les références sont un guide et la frame d'ouverture est générée à partir d'elles. Il vous faut un clip qui démarre sur une image fixe validée précise ? C'est l'autre endpoint.
La règle de Google se lit ainsi : la durée « Doit valoir '8' en cas d'extension, d'images de référence ou avec les résolutions 1080p et 4k ». Les images de référence sont dans cette liste : les options 4 et 6 secondes qu'offrent les deux autres endpoints n'existent donc pas ici. Notre schema affiche toujours l'enum duration ; pour cette capability, la seule valeur valide est "8".
Budgétez en conséquence. Une séquence de six clips, c'est 48 secondes de sortie — $0.72 chez nous, $7.20 sur fal.ai ou Replicate.
Champs obligatoires : prompt et image_urls.
curl -X POST https://api.e2x.ai/v1/jobs/submit \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/veo-3.1-fast/reference-to-video",
"input": {
"prompt": "La femme visible en image 1, vêtue du manteau visible en image 2, entre dans le hall visible en image 3 et secoue la pluie de ses épaules. Elle lève les yeux et dit : \"Tu as attendu.\" Lumière tungstène chaude, écho de marbre.",
"image_urls": [
"https://example.com/talent-portrait.jpg",
"https://example.com/wardrobe-coat.jpg",
"https://example.com/lobby-set.jpg"
],
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": "8",
"has_sound": "true"
}
}'
La soumission renvoie un job ID ; faites du polling ou enregistrez un webhook :
const headers = {
Authorization: `Bearer ${process.env.E2X_API_KEY}`,
"Content-Type": "application/json",
};
const submitted = await fetch("https://api.e2x.ai/v1/jobs/submit", {
method: "POST",
headers,
body: JSON.stringify({
model: "google/veo-3.1-fast/reference-to-video",
input: {
prompt:
"La mascotte de l'image 1 saute sur le comptoir de l'image 2, renverse une tasse et se fige. Des pas qui couinent, un tintement de céramique, puis le silence.",
image_urls: [
"https://example.com/mascot-turnaround.png",
"https://example.com/kitchen-set.jpg",
],
aspect_ratio: "9:16",
resolution: "720p",
duration: "8",
has_sound: "true",
seed: 60411,
},
}),
}).then((r) => r.json());
const jobId = submitted.data.jobId;
while (true) {
const job = await fetch(`https://api.e2x.ai/v1/jobs/${jobId}`, { headers })
.then((r) => r.json());
if (job.data.status === "completed") {
console.log(job.data.outputs[0].url);
break;
}
if (job.data.status === "failed") {
throw new Error(job.data.error?.message || "Generation failed");
}
await new Promise((r) => setTimeout(r, 5000));
}
Le statut va pending → processing → completed, ou se termine sur failed / cancelled. Prévoyez environ quatre minutes par job — la fenêtre officielle de Google va d'un plancher de 11 secondes à 6 minutes en pointe. Réutilisez un même seed sur toute une série si vous voulez que les générations riment.
Poids identiques, prix à la seconde identique. C'est la forme de votre entrée qui choisit l'endpoint :
| Endpoint | Options de durée | Clip 8 s, 720p + audio | À choisir quand |
|---|---|---|---|
| Veo 3.1 Fast reference-to-video | 8 s uniquement | $0.12 | Jusqu'à 3 images doivent fixer un visage, une tenue ou un lieu d'un clip à l'autre |
| Veo 3.1 Fast image-to-video | 4 / 6 / 8 s | $0.12 | Une image fixe doit être littéralement la première frame |
| Veo 3.1 Fast text-to-video | 4 / 6 / 8 s | $0.12 | Prompt seul, rien à uploader |
| Omni Flash reference-to-video | — | $0.80 (config par défaut) | Une autre famille, quand le rendu de Veo n'est pas celui que vous voulez |
Nous préférerions que vous dépensiez moins. Si une seule image fait l'affaire, image-to-video est au même prix et débloque les clips de 4 et 6 secondes — une version de 4 secondes coûte $0.06, la moitié des 8 secondes fixes que vous payez ici. Venez sur cet endpoint quand la cohérence entre plusieurs clips est le vrai besoin, parce que c'est la seule chose que les autres ne savent pas faire. Le reste de la catégorie se trouve sous reference-to-video ; tout le reste est dans le catalogue de modèles.
Le modèle reçoit un tableau non étiqueté. Rien dans le payload ne dit que l'emplacement deux était le costume plutôt qu'un second personnage — dites-le donc dans le prompt.
L'indexation fonctionne : « la femme de l'image 1 », « le manteau de l'image 2 », « le hall de l'image 3 ». Quelques mots, et l'essentiel de l'ambiguïté qui produit des sorties mélangées disparaît.
Trois habitudes de plus :
Donnez un seul rôle à chaque référence. Une photo chargée contenant une personne, un produit et une pièce demande au modèle de deviner ce qui vous importait. Recadrez serré.
Répétez l'identité en mots. « Mêmes cheveux argentés courts, mêmes lunettes rondes » renforce ce que montre la référence. Une assurance pas chère.
Écrivez le dialogue en toutes lettres. Google génère l'audio nativement, sans interrupteur dans son API : le son sera là de toute façon — parole, effets, ambiance. Citez la réplique et elle tombe sur les bonnes frames.
Google supporte pleinement l'anglais et n'a rien évalué d'autre pour ce modèle : gardez donc le texte d'instruction en anglais — le dialogue cité, lui, peut être dans la langue qu'exige la scène.
Deux jours pour télécharger. La rétention de Google sur la vidéo générée est de deux jours — « vous devez télécharger votre vidéo dans les 2 jours suivant la génération ». Pour une campagne de vingt clips construite sur une semaine, c'est une décision d'architecture, pas une note de bas de page. Copiez outputs[0].url dans votre propre stockage dès qu'un job se termine.
SynthID sur chaque sortie. Le watermark imperceptible de Google est appliqué à toute vidéo Veo et vérifiable via leur plateforme. Aucun provider ne peut le désactiver.
La génération de personnes est limitée par région. Dans l'UE, au Royaume-Uni, en Suisse et dans la région MENA, personGeneration est restreint à allow_adult.
Versionnez votre jeu de références. La cohérence dépend de l'envoi de références rigoureusement identiques à chaque fois. Un portrait ré-exporté glissé au milieu d'un batch se verra.
Nous facturons $0.01 par seconde de sortie, ×1.5 avec l'audio actif. Cet endpoint est figé à 8 secondes : un clip 720p avec du son revient donc à $0.12. Les résolutions supérieures portent leur propre multiplicateur — vérifiez la page modèle en direct avant de planifier un batch en 1080p.
Trois au maximum. La documentation de Google indique que vous pouvez utiliser jusqu'à trois images de référence pour guider le contenu, et leur schema les décrit comme des références de style et de contenu. Moins, c'est très bien ; deux, c'est courant.
Google impose 8 secondes dès que des images de référence entrent en jeu — la même règle que pour la 1080p et la 4k. Il vous faut 4 ou 6 secondes ? Utilisez plutôt l'endpoint image-to-video ou text-to-video : même modèle, même prix à la seconde.
L'image-to-video fait d'une image la frame d'ouverture littérale. Le reference-to-video prend jusqu'à trois images comme guide d'identité, de costume, de style ou de lieu, puis génère une frame d'ouverture cohérente avec elles. Utilisez les références quand la cohérence entre plusieurs clips compte plus qu'une première frame précise.
Oui. Google génère nativement dialogue, effets sonores et ambiance, sans aucun moyen de le désactiver dans sa propre API. Nous exposons has_sound avec true par défaut, et ce réglage applique le multiplicateur de prix ×1.5.
Toute sortie Veo porte SynthID, le marqueur imperceptible de Google pour les contenus générés par IA, vérifiable sur leur plateforme. Aucun provider — nous compris — ne peut le désactiver.
Nous budgétons environ quatre minutes. Google publie un minimum de 11 secondes et un maximum de 6 minutes en pointe : pour une série complète de clips, utilisez donc un webhookUrl plutôt que de tenir des boucles de polling ouvertes.