API et SDK d’édition vidéo par IA : automatisez les montages dans votre application
Ajoutez l’édition vidéo à votre propre produit grâce au code. Découvrez comment fonctionne une API d’édition vidéo par IA, quels montages relèvent de l’API et lesquels de FFmpeg, comment encapsuler les appels dans un petit SDK et comment rester sous la limite de simultanéité. Inclut des exemples cURL et Node.
La plupart des montages vidéo n’ont pas besoin d’une personne devant une timeline. Remplacer l’arrière-plan de 200 clips produit, transformer un brief écrit en cinq vidéos verticales, couper chaque import à 15 secondes : ce sont des tâches pour du code. Une API d’édition vidéo par IA permet à votre application d’envoyer ce travail sous forme de requêtes HTTP et de récupérer les clips finis, et un SDK, même petit et écrit par vous, garde ces appels bien organisés. Cet article montre ce que ce type d’API permet de faire aujourd’hui, comment fonctionne l’API développeur de PicassoIA, et comment enchaîner des montages génératifs avec des étapes FFmpeg classiques dans un seul pipeline vidéo automatisé. Lorsqu’une fonctionnalité n’existe que dans l’application web, le texte le précise.
Ce que fait réellement une API d’édition
Avant d’écrire le moindre code, séparez le mot « montage » en deux tâches, car elles demandent des outils différents.
Montages génératifs ou montages sur timeline
Les montages sur timeline sont déterministes. Couper à 1,0 seconde, assembler deux clips, incruster des sous-titres, passer au format 9:16 : la même entrée donne toujours la même sortie, et FFmpeg s’en charge sur votre propre serveur. Les montages génératifs sont probabilistes. Un modèle recalcule les pixels à partir d’un prompt, si bien que « rendre le canapé en cuir violet » ou « animer cette photo » peut donner un résultat légèrement différent à chaque exécution, sauf si vous fixez le seed.
Un pipeline de production a presque toujours besoin des deux. Voici comment se répartissent les tâches courantes :
Un SDK est la couche qui tient le HTTP brut à l’écart de votre logique métier. Il ajoute le token, crée les tâches, interroge les résultats, relance les échecs qui le méritent, annule les tâches bloquées et limite le nombre de tâches exécutées en même temps. Comme les tâches vidéo sont asynchrones (vous créez, vous attendez, vous récupérez), presque tout le code délicat se trouve dans cette attente. La page de l’API fournit des exemples en Python, Node et cURL. C’est suffisant pour construire votre propre client léger, ce que font justement les sections suivantes.
Ce que PicassoIA expose aujourd’hui
L’API développeur est disponible à l’adresse https://api.picassoia.com/v1. Vous vous authentifiez avec un token Bearer qui commence par pia_sk_, que vous créez sur la page API de picassoia.com (un compte peut en détenir jusqu’à deux). Le fonctionnement suit le modèle Replicate : vous créez une prédiction, vous l’interrogez, puis vous lisez le résultat.
5 ou 10 secondes, première et dernière image, audio
💡 Organisez votre travail autour de cette répartition. En octobre 2026, les modèles de montage vidéo du catalogue, comme P Video Edit, Aleph 2 et Lucy Edit 2, fonctionnent dans l’application web, et non via l’API. Utilisez l’API pour générer et regénérer, et l’application web pour les modifications par prompt sur des séquences existantes.
Limites à prendre en compte
5 prédictions simultanées par compte, partagées entre tous les tokens et toutes les connexions MCP.
10 Mo pour le corps de la requête. Envoyez des URL d’images et de vidéos, jamais des fichiers en base64.
4 000 caractères par prompt.
3 heures avant qu’une prédiction n’expire.
💡 Les règles d’accès et les conditions des formules évoluent. Vérifiez-les sur la page API avant de promettre une feuille de route à votre équipe.
Envoyer votre première requête
Chaque appel ci-dessous lit une seule variable d’environnement, PICASSOIA_TOKEN, afin que le token n’apparaisse jamais dans votre code source.
Créer une tâche avec cURL
curl -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-video/predictions \
-H "Authorization: Bearer $PICASSOIA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"input": {
"prompt": "Slow push-in on a ceramic mug of coffee on a sunlit desk, steam rising, soft room tone",
"image": "https://example.com/first-frame.jpg",
"resolution": "720p"
}
}'
La réponse renvoie une prédiction id et un status. L’objet input suit le schéma du modèle. Pour PicassoIA Video, cela signifie un prompt obligatoire, plus image, resolution (480p ou 720p, par défaut 720p), aspect_ratio, seed et save_audio facultatifs. Lorsque vous transmettez une image, elle devient la première image de la séquence et le clip reprend son format. Chaque clip dure 5 secondes à 24 i/s avec un audio synchronisé, sauf si vous désactivez save_audio.
Interroger jusqu’à ce que le clip soit prêt
Les tâches sont asynchrones : la première réponse est un accusé de réception, pas une vidéo. Demandez la prédiction toutes les quelques secondes avec GET /v1/predictions/{id} jusqu’à ce que le statut indique une réussite ou un échec, puis lisez l’URL de sortie. Les exemples exécutés sur les pages des modèles se terminent en 30 secondes à 2 minutes environ, donc un intervalle d’interrogation de 3 à 5 secondes suffit. Si une tâche ne vous intéresse plus, appelez le point de terminaison d’annulation pour qu’elle n’occupe pas l’un de vos cinq emplacements.
Construire un petit SDK
Un wrapper en moins de 40 lignes
Encapsulez les appels dont vous avez besoin dans un seul module. Cette version Node (18 ou plus récent, donc fetch est intégré) fait le travail :
const BASE = "https://api.picassoia.com/v1";
const headers = {
Authorization: `Bearer ${process.env.PICASSOIA_TOKEN}`,
"Content-Type": "application/json",
};
export async function createPrediction(model, input) {
const res = await fetch(`${BASE}/models/${model}/predictions`, {
method: "POST",
headers,
body: JSON.stringify({ input }),
});
if (!res.ok) throw new Error(`Create failed: ${res.status} ${await res.text()}`);
return res.json();
}
export async function waitFor(id, { everyMs = 4000, timeoutMs = 10 * 60_000 } = {}) {
const started = Date.now();
while (Date.now() - started < timeoutMs) {
const res = await fetch(`${BASE}/predictions/${id}`, { headers });
const prediction = await res.json();
if (prediction.status === "succeeded") return prediction;
if (prediction.status === "failed" || prediction.status === "canceled") {
throw new Error(`Prediction ${id} ${prediction.status}`);
}
await new Promise((r) => setTimeout(r, everyMs));
}
await fetch(`${BASE}/predictions/${id}/cancel`, { method: "POST", headers });
throw new Error(`Prediction ${id} timed out`);
}
Trois bonnes pratiques le rendent sûr en production. Ne relancez que ce qui peut réussir à la deuxième tentative : les coupures réseau et les réponses 5xx ont droit à deux ou trois essais avec des délais croissants, tandis que les erreurs 4xx, comme une entrée incorrecte ou un mauvais token, n’en ont pas, car les répéter ne change rien. Définissez toujours un délai d’expiration et annulez la tâche à l’échéance, comme le fait le code ci-dessus, afin qu’une tâche bloquée n’occupe jamais un emplacement. Journalisez l’identifiant de la prédiction à côté de votre propre identifiant de tâche, car c’est la première information dont vous aurez besoin en cas de problème. Vérifiez les champs exacts de la réponse dans la documentation de l’API avant la mise en production.
Rester sous cinq tâches à la fois
La limite du compte est de cinq prédictions simultanées, partagées entre les tokens et les connexions MCP. Un lot de 40 clips lancé avec Promise.all atteindrait cette limite immédiatement. Placez un petit pool devant le wrapper et limitez-le à 4, afin qu’un emplacement reste libre pour des tests manuels ou un autre outil sur le même compte :
Une fois le wrapper en place, un montage automatisé se résume à une courte chaîne d’étapes :
Un plan : un LLM transforme un brief en liste de montage au format JSON.
Images fixes : générez ou modifiez des images via l’API.
Plans : générez de nouveaux clips à partir de ces images fixes.
Travail sur la timeline : couper, fusionner et sous-titrer avec FFmpeg.
Relecture et livraison : vérifiez chaque fichier, puis publiez-le.
Les trois approches suivantes détaillent le cœur de cette chaîne.
Modifier la première image, puis animer
L’API ne peut pas prendre vos rushes et leur appliquer une modification par texte, mais elle peut s’en approcher. Extrayez une image du clip source, modifiez cette image fixe avec PicassoIA Image Editor Pro, puis générez un nouveau plan qui part de l’image retouchée avec PicassoIA Video ou Seedance 2.5 Lite.
Importez-la dans un espace de stockage afin qu’elle ait une URL publique.
Envoyez-la dans le tableau images et désignez-la comme « image 1 » dans le prompt. L’éditeur accepte jusqu’à trois images de référence, et les exemples de modification de sa page s’affichent en une à deux secondes environ : vous pouvez donc rejeter une mauvaise modification avant de dépenser une génération vidéo.
Transmettez l’image modifiée comme image à un modèle vidéo, accompagnée d’un prompt de mouvement.
const edit = await waitFor((await createPrediction("picassoia/picassoia-image-editor-pro", {
prompt: "Change the sofa in image 1 to light purple leather. Keep everything else unchanged.",
images: [frameUrl],
})).id);
const firstFrame = Array.isArray(edit.output) ? edit.output[0] : edit.output;
const clip = await waitFor((await createPrediction("picassoia/picassoia-video", {
prompt: "Slow push-in toward the sofa, soft window light, a hand places a cushion.",
image: firstFrame,
resolution: "720p",
})).id);
Cette méthode regénère le plan au lieu de modifier les pixels d’origine, si bien que le mouvement sera différent de celui de vos rushes. Considérez-la comme un moyen de produire une variante, et non une retouche à l’image près. Seedance 2.5 Lite accepte aussi un last_frame_image et une durée de 10 secondes, ce qui est utile lorsqu’un plan doit tomber sur une image précise.
Laisser un LLM rédiger le plan de montage
Coder en dur chaque montage ne passe pas à l’échelle. Confiez à un modèle de langage la transformation d’un brief en langage courant en liste de montage au format JSON, puis faites exécuter cette liste par votre code. GPT 5 Structured est conçu pour renvoyer un JSON propre, et Claude Sonnet 5 ainsi que Gemini 3.5 Flash sont de bons partenaires de rédaction lorsque vous testez des plans à la main dans l’application web. En production, appelez le fournisseur de LLM que votre application utilise déjà.
N’exécutez jamais un plan à l’aveugle. Validez-le avec un schéma, rejetez les champs inconnus, bornez les durées et plafonnez le nombre de plans. Le modèle propose, votre code décide.
Couper, fusionner et sous-titrer avec FFmpeg
Les étapes sur timeline restent déterministes et peu coûteuses. Lancez-les depuis Node avec child_process ou depuis n’importe quel exécuteur de tâches :
# trim 3.5 seconds starting at 1.0
ffmpeg -ss 1.0 -t 3.5 -i clip_01.mp4 -c:v libx264 -c:a aac trimmed.mp4
# merge the clips listed in list.txt (same codec, size and frame rate)
ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4
# burn captions from an SRT file
ffmpeg -i merged.mp4 -vf subtitles=captions.srt -c:a copy final.mp4
La fusion avec -c copy ne fonctionne que si tous les clips partagent le même codec, la même taille et la même fréquence d’images. Les clips de PicassoIA Video sortent tous à 5 secondes et 24 i/s, mais si vous les mélangez avec des vidéos de téléphone, réencodez tout selon une même spécification au préalable. L’application web propose les mêmes tâches manuellement avec Trim Video, Video Merge et Autocaption.
Utiliser P Video Edit sur PicassoIA
Lorsque vous avez besoin d’une modification par prompt sur des images que vous avez déjà tournées, l’outil à utiliser est P Video Edit. Il fonctionne dans l’application web de PicassoIA et accepte un clip d’une durée maximale de 15 secondes. Il modifie la vidéo en suivant une instruction écrite en langage courant : une demande comme « remplacez le ciel par un coucher de soleil » ou « rendez la veste rouge » ne nécessite donc aucune timeline.
Pas à pas dans l’application web
Ouvrez la page P Video Edit et importez votre clip (15 secondes maximum).
Rédigez une seule instruction, par exemple : Change the material of the sofa to light purple leather. Do not change anything else.
Facultatif : joignez jusqu’à quatre images de référence (jpg, jpeg, png ou webp) lorsqu’une couleur, une texture ou un objet doit correspondre exactement.
Activez Draft pour obtenir un aperçu plus rapide et de moindre qualité avant le rendu final.
Laissez Prompt Upsampling activé pour les instructions courtes. Désactivez-le lorsque votre prompt est déjà précis.
Gardez Save Audio activé pour que la bande son d’origine reste synchronisée.
Lancez la modification, vérifiez le résultat, ajustez le prompt et relancez. Définissez un seed si vous voulez reproduire un résultat à l’identique.
Les exemples exécutés sur la page du modèle ont pris environ une à deux minutes chacun.
Des prompts qui préservent la scène
Indiquez ce qui doit changer, puis ce qui ne doit pas changer. Un exemple de prompt sur la page du modèle suit ce schéma : Change only the SUV body paint to yellow. Il se termine par Keep the environment, lighting and camera movement unchanged. Limitez-vous à une modification par exécution, puis enchaînez les exécutions si vous en avez besoin de plusieurs.
Le catalogue compte d’autres outils de montage. Ces modèles valent un essai sur le même clip :
Considérez chaque prédiction comme pouvant échouer. Un échec est définitif : relancez donc la tâche sous forme de nouvelle tâche, limitez les nouvelles tentatives à deux et conservez l’entrée d’origine pour pouvoir la rejouer. Mesurez chaque tâche par modèle et par résolution dans vos propres journaux : les prix et les règles des formules évoluent, lisez donc les conditions en vigueur sur les pages API et tarifs avant d’annoncer un coût par clip à un client. Copiez les fichiers finis dans votre propre stockage dès la réussite, et considérez l’URL de résultat comme un lien de livraison, non comme une archive.
Filtrer les entrées avant le rendu
Si vos utilisateurs peuvent saisir des prompts ou importer des images, vérifiez-les d’abord. Llama Guard 4 12B est un modèle de modération de contenu que vous pouvez essayer dans l’application web, et la même idée s’applique avec le service de modération que vos outils utilisent déjà. Ajoutez aussi une limite de requêtes par utilisateur, pour qu’un seul client ne puisse pas occuper les cinq emplacements.
Lancez votre propre montage dès aujourd’hui
Le moyen le plus rapide de voir le pipeline à l’œuvre est d’en exécuter les éléments à la main. Ouvrez PicassoIA, créez une image fixe avec PicassoIA Image, modifiez un détail avec PicassoIA Image Editor Pro, puis animez le résultat avec PicassoIA Video. Quelques minutes d’expérimentation vous montreront quels prompts tiennent la route avant que vous n’écriviez la moindre ligne de code d’intégration. Refaites un second passage sur la même image fixe avec Seedance 2.5 Lite et comparez le mouvement.
Lorsque les résultats vous conviennent, intégrez les mêmes étapes à votre application grâce au wrapper présenté dans cet article. Parcourez tous les modèles, y compris les outils de montage vidéo, sur picassoia.com/en/all-models, et créez vos propres images dès aujourd’hui.