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.

API et SDK d’édition vidéo par IA : automatisez les montages dans votre application
Cristian Da Conceicao
Fondateur de Picasso IA

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 :

TâcheTypeOù elle s’exécute
Couper, fusionner, redimensionnerTimelineFFmpeg sur votre backend, ou Trim Video et Video Merge dans l’application web
Sous-titresTimelineFFmpeg avec une transcription, ou Autocaption dans l’application web
Changer une couleur, un objet ou un arrière-plan dans des imagesGénératifP Video Edit ou Lucy Edit 2 dans l’application web
Effacer un objetGénératifVideo Erase Object dans l’application web
Animer une image fixe ou générer un nouveau planGénératifPicassoIA Video via l’API
Retoucher une image fixe, puis régénérer le planGénératifPicassoIA Image Editor Pro plus PicassoIA Video via l’API

Où se place un SDK

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.

Monteuse vidéo examinant une timeline multipiste dans un studio aux murs de briques

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.

ActionRequête
Créer une tâchePOST /v1/models/{owner}/{name}/predictions
Vérifier une tâcheGET /v1/predictions/{id}
Annuler une tâchePOST /v1/predictions/{id}/cancel
Lister vos tâchesGET /v1/predictions

Quatre modèles derrière l’API

ModèleTâcheBon à savoir
PicassoIA ImageTexte vers image7 formats, jusqu’à 2 sorties par appel
PicassoIA Image Editor ProModifier une image fixe avec un promptJusqu’à 3 images de référence par modification
PicassoIA VideoTexte ou image vers vidéo5 secondes, 24 i/s, audio synchronisé, 480p ou 720p
Seedance 2.5 LiteTexte ou image vers vidéo5 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.

Vue en plongée d’un bureau avec un ordinateur portable, un carnet et des cartes mémoire

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.

Mains d’un développeur tapant sur un clavier devant un écran flou affichant du code

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 :

export function pool(limit = 4) {
  let active = 0;
  const queue = [];
  const next = () => {
    if (active >= limit || queue.length === 0) return;
    active++;
    const { task, resolve, reject } = queue.shift();
    task().then(resolve, reject).finally(() => { active--; next(); });
  };
  return (task) => new Promise((resolve, reject) => { queue.push({ task, resolve, reject }); next(); });
}

const run = pool(4);
const clips = await Promise.all(
  shots.map((shot) => run(async () => {
    const job = await createPrediction("picassoia/picassoia-video", shot);
    return waitFor(job.id);
  }))
);

Développeur de profil travaillant sur du code à un bureau assis-debout

Automatiser les montages dans votre application

Une fois le wrapper en place, un montage automatisé se résume à une courte chaîne d’étapes :

  1. Un plan : un LLM transforme un brief en liste de montage au format JSON.
  2. Images fixes : générez ou modifiez des images via l’API.
  3. Plans : générez de nouveaux clips à partir de ces images fixes.
  4. Travail sur la timeline : couper, fusionner et sous-titrer avec FFmpeg.
  5. 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.

  1. Extrayez une image : ffmpeg -ss 2 -i source.mp4 -frames:v 1 frame.jpg
  2. Importez-la dans un espace de stockage afin qu’elle ait une URL publique.
  3. 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.
  4. 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.

Studio créatif en espace ouvert vu d’en haut, avec des personnes en train de monter une vidéo

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

{
  "shots": [
    { "source": "clip_01.mp4", "start": 1.0, "end": 4.5, "caption": "New arrivals" },
    { "generate": "Slow dolly toward a sunlit storefront, shallow depth of field", "seconds": 5 }
  ]
}

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.

Chef de produit ajoutant une note adhésive sur un tableau blanc de flux de travail

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.

Monteuse examinant un clip vertical à côté d’un smartphone posé sur un trépied

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

  1. Ouvrez la page P Video Edit et importez votre clip (15 secondes maximum).
  2. Rédigez une seule instruction, par exemple : Change the material of the sofa to light purple leather. Do not change anything else.
  3. 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.
  4. Activez Draft pour obtenir un aperçu plus rapide et de moindre qualité avant le rendu final.
  5. Laissez Prompt Upsampling activé pour les instructions courtes. Désactivez-le lorsque votre prompt est déjà précis.
  6. Gardez Save Audio activé pour que la bande son d’origine reste synchronisée.
  7. 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 :

ModèleCe qu’il fait
Aleph 2Modifier une image et restyler la vidéo entière
Lucy Edit 2Modifier n’importe quelle vidéo avec un prompt texte
Wan 2.7 VideoeditModifier des vidéos par texte
LTX 2 RetakeModifier une section d’une vidéo
Video Erase ObjectSupprimer des objets des images
Video Remove BackgroundSupprimer un arrière-plan sans fond vert
Reframe VideoModifier le format
Video To SFX v1.5Ajouter des effets sonores réalistes

Vidéaste indépendante vérifiant un clip à côté d’un appareil photo hybride

Coûts, échecs et garde-fous

Prévoir les échecs et les coûts

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.

Professionnel assis à une table de café près de la fenêtre, avec un ordinateur portable et un casque

Partager cet article

Choisissez votre langue