curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq4-preview",
"prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
"image_urls": ["https://example.com/first-frame.png"],
"duration": 5,
"resolution": "1080p"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={"Authorization": "Bearer <token>"},
json={
"model": "viduq4-preview",
"prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
"image_urls": ["https://example.com/first-frame.png"],
"duration": 5,
"resolution": "1080p"
}
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "viduq4-preview",
prompt: "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
image_urls: ["https://example.com/first-frame.png"],
duration: 5,
resolution: "1080p"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Vidu Q4 Preview
Vidu Q4 Preview Génération vidéo
Générez des vidéos à partir d’une image initiale ou de 15 images et 3 clips audio de référence maximum. 3–16 secondes, jusqu’à 4K, avec son par défaut.
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq4-preview",
"prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
"image_urls": ["https://example.com/first-frame.png"],
"duration": 5,
"resolution": "1080p"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={"Authorization": "Bearer <token>"},
json={
"model": "viduq4-preview",
"prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
"image_urls": ["https://example.com/first-frame.png"],
"duration": 5,
"resolution": "1080p"
}
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "viduq4-preview",
prompt: "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
image_urls: ["https://example.com/first-frame.png"],
duration: 5,
resolution: "1080p"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Ce modèle prend en charge la génération à partir d’une image ou de références, mais pas le texte seul ni les images initiale et finale combinées. Après soumission, récupérez l’ID dans
data[0].task_id et consultez le suivi des tâches pour obtenir l’état et le résultat.Modes de génération
viduq4-preview choisit automatiquement le mode selon les images, les rôles et les audios de référence. Aucun paramètre de mode supplémentaire n’est nécessaire.
| Entrée | Mode |
|---|---|
Uniquement first_frame_image ou une image avec role: "first_frame" | Image vers vidéo |
| Une image sans rôle et sans audio de référence | Image vers vidéo |
Rôle reference_image ou reference présent, sans image initiale explicite | Références vers vidéo |
| 2–15 images au total, sans image initiale explicite | Références vers vidéo |
| Audio de référence et 1–15 images, sans image initiale explicite | Références vers vidéo |
- Image vers vidéo : exactement une image initiale ; prompt facultatif ; aucun audio de référence.
- Références vers vidéo : 1–15 images, jusqu’à 3 clips audio de référence et prompt obligatoire. Avec une seule image sans audio de référence, définissez explicitement
role: "reference_image"; sinon, le mode image vers vidéo s’applique. - Une image initiale explicite (
first_frame_imageourole: "first_frame") ne peut pas être associée à d’autres images, rôles de référence ou audios de référence. Sinon, HTTP 400.
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq4-preview",
"prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
"image_urls": ["https://example.com/first-frame.png"],
"duration": 5,
"resolution": "1080p"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={"Authorization": "Bearer <token>"},
json={
"model": "viduq4-preview",
"prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
"image_urls": ["https://example.com/first-frame.png"],
"duration": 5,
"resolution": "1080p"
}
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "viduq4-preview",
prompt: "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
image_urls: ["https://example.com/first-frame.png"],
duration: 5,
resolution: "1080p"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
En-têtes de requête
string
requis
Authentification Bearer au format
Bearer <token>, où <token> est votre APIMart API Key.Paramètres de requête
string
requis
Doit correspondre exactement à
viduq4-preview, en minuscules.string
Prompt de génération vidéo, jusqu’à 20 000 caractères.
- Image vers vidéo : facultatif. S’il est omis, le modèle génère le contenu à partir de l’image initiale.
- Références vers vidéo : obligatoire. Son absence renvoie HTTP 400.
string[]
Tableau d’images. Accepte les URL publiques ou les Data URL Base64 telles que
data:image/png;base64,....- Image vers vidéo : une seule image, utilisée comme image initiale.
- Références vers vidéo : 1–15 images au total avec
image_with_roles.
image_with_roles ; les quantités sont additionnées. Ne pas combiner avec first_frame_image ou un rôle first_frame explicite. Pour une seule image sans rôle, la présence d’audio de référence détermine aussi le mode.object[]
Tableau d’images avec rôles. Un élément pour image vers vidéo ; 1–15 images au total avec
Peut être combiné avec
image_urls pour références vers vidéo.Afficher Afficher les champs des images
Afficher Afficher les champs des images
string
requis
URL publique de l’image ou Data URL Base64.
string
Rôle de l’image, sans distinction de casse :
first_frame: image initiale pour image vers vidéo.reference_image: image de référence ;referenceest également accepté.- Omis ou vide : sans audio de référence, le nombre total détermine le mode : une image pour image vers vidéo, deux ou plus pour références vers vidéo. Avec audio de référence, le mode références vers vidéo s’applique.
last_frame, renvoient HTTP 400 de manière synchrone.image_urls pour fournir des références, mais les rôles d’image initiale ne peuvent pas être mélangés aux références.string
Uniquement pour image vers vidéo. URL publique ou Data URL Base64 de l’image initiale.Avec ce champ, ne fournissez pas d’autres images ni d’audio de référence. Pour références vers vidéo, utilisez
image_urls ou image_with_roles.string[]
Tableau d’URL audio de référence, uniquement pour références vers vidéo. Maximum 3 clips au total avec
audio_url.Format MP3 requis, 3–12 secondes par clip, 50MB maximum chacun. Même avec de l’audio de référence, au moins une image et un prompt sont requis.Un format ou une durée audio non conforme entraîne un échec pendant l’exécution avec remboursement intégral, et non un HTTP 400 synchrone à la soumission.string
URL d’un seul audio de référence. Mêmes exigences que
audio_urls ; maximum 3 clips pour les deux champs réunis.string
défaut:"16:9"
Uniquement pour références vers vidéo. Valeurs :
1:1, 9:16, 16:9, 3:4, 4:3. Par défaut : 16:9.En mode image vers vidéo, l’image initiale détermine le ratio ; ce paramètre est ignoré.string
Alias de compatibilité de
aspect_ratio, avec les mêmes valeurs. Utilisez de préférence un seul des deux champs. Sans effet en mode image vers vidéo.integer
défaut:"5"
Durée en secondes. Accepte 3–16 secondes, pas 1–2 secondes.
string
défaut:"720p"
Résolution :
540p, 720p, 1080p, 2K ou 4K, sans distinction de casse.boolean
défaut:"true"
Indique si la vidéo doit inclure des dialogues et des effets sonores.
true: vidéo avec piste audio (par défaut).false: vidéo muette.
integer
Graine aléatoire. Omettez ce champ ou utilisez
0 pour une valeur aléatoire.Exigences des médias
- Image vers vidéo : exactement une image initiale requise ; aucun audio de référence.
- Références vers vidéo : 1–15 images requises ; jusqu’à 3 clips audio de référence facultatifs.
- PNG, JPEG, JPG et WEBP acceptés, maximum 50MB par image.
- En Base64, le corps complet de la requête doit être inférieur à 20MB. Privilégiez les URL publiques.
- Les URL d’images doivent être publiques. Remplacez les URL d’exemple par des adresses réellement accessibles.
Les deux modes nécessitent des images et ne prennent pas en charge
last_frame_image. Mélanger une image initiale et des références ou dépasser le nombre d’images/audios renvoie HTTP 400 à la soumission, sans création de tâche ni facturation. Un format ou une durée audio non conforme entraîne un échec pendant l’exécution et un remboursement.Exemples de requête
Image initiale seule, sans prompt
{
"model": "viduq4-preview",
"image_urls": ["https://example.com/first-frame.png"]
}
Image initiale avec rôle explicite et sortie 4K
{
"model": "viduq4-preview",
"prompt": "La caméra avance lentement tandis que la personne sourit naturellement",
"image_with_roles": [
{
"url": "https://example.com/first-frame.png",
"role": "first_frame"
}
],
"duration": 8,
"resolution": "4K",
"audio": true
}
Vidéo muette avec le champ d’image initiale
{
"model": "viduq4-preview",
"first_frame_image": "https://example.com/first-frame.png",
"duration": 5,
"resolution": "1080p",
"audio": false
}
Vidéo à partir de plusieurs images et d’un audio de référence
{
"model": "viduq4-preview",
"prompt": "Le garçon de l’image 1 parle à la fille de l’image 2 avec le contenu de l’audio de référence, dans le café de l’image 3",
"image_urls": [
"https://example.com/boy.png",
"https://example.com/girl.png",
"https://example.com/cafe.png"
],
"audio_urls": ["https://example.com/line.mp3"],
"aspect_ratio": "16:9",
"duration": 8,
"resolution": "720p"
}
Références vers vidéo avec une seule image
{
"model": "viduq4-preview",
"prompt": "La personne de l’image de référence entre dans un café et salue le personnel de la main",
"image_with_roles": [
{
"url": "https://example.com/person.png",
"role": "reference_image"
}
],
"aspect_ratio": "9:16",
"duration": 5,
"resolution": "1080p"
}
reference_image. Remplacez toutes les URL d’images et d’audios par des adresses accessibles.
Réponse de soumission
integer
Code de réponse ;
200 indique un succès.array
Consulter les résultats
Interrogez toutes les 5–10 secondes et arrêtez àcompleted ou failed. Utilisez le point de terminaison unifié :
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01K... \
--header 'Authorization: Bearer <token>'
{
"code": 200,
"data": {
"id": "task_01K...",
"status": "completed",
"progress": 100,
"result": {
"videos": [
{
"url": ["https://example.com/generated-video.mp4"]
}
]
}
}
}
| État | Action |
|---|---|
pending | En attente ; continuer les interrogations |
processing | Génération en cours ; continuer les interrogations |
completed | Réussite ; lire les liens dans le tableau data.result.videos[0].url |
failed | Échec ; lire la cause dans data.error.message, arrêter les interrogations ; remboursement intégral |
status, et non avec des paliers de progression fixes.
Facturation
Facturation selon la durée et la résolution : coût = durée (secondes) × tarif par seconde de la résolution. Consultez les tarifs des modèles. Les deux modes coûtent le même prix, avec ou sans son. Les images et audios de référence ne sont pas facturés en supplément. Les tâches échouées sont automatiquement remboursées intégralement.Erreurs de paramètres fréquentes
Les cas suivants renvoient HTTP 400 de manière synchrone, sans création de tâche ni facturation :| Problème | Action |
|---|---|
| Aucune image | Fournir une image initiale ou 1–15 images de référence selon le mode |
| Image initiale explicite mélangée à d’autres images, rôles ou audios de référence | Garder une seule image initiale pour image vers vidéo ; supprimer les champs/rôles d’image initiale explicites pour références vers vidéo |
role non pris en charge, tel que last_frame | Utiliser first_frame, reference_image, reference ou laisser vide |
| Plus de 15 images de référence | Limiter image_urls et image_with_roles à 15 images au total |
| Plus de 3 clips audio de référence | Limiter audio_urls et audio_url à 3 clips au total |
prompt absent en mode références vers vidéo | Ajouter un prompt de 20 000 caractères maximum |
Ratio de référence non pris en charge, comme 21:9 | Utiliser 1:1, 9:16, 16:9, 3:4 ou 4:3 |
last_frame_image fourni | Supprimer le champ ; les images initiale et finale combinées ne sont pas prises en charge |
duration inférieur à 3 ou supérieur à 16 | Utiliser un entier entre 3 et 16 secondes |
Résolution non prise en charge, comme 480p ou 8K | Utiliser 540p, 720p, 1080p, 2K ou 4K |
Autres modèles Vidu
Pour le texte vers vidéo ou les images initiale et finale, utilisez Vidu Q3 Pro / Turbo. Ce modèle accepte déjà plusieurs images de référence ; Vidu Q3 Mix / Standard propose aussi ce mode. Pour 1–2 secondes, choisissezviduq3-pro ; ce modèle exige au moins 3 secondes.