Aller au contenu principal

Combiner edition et extension

Pipelines de production avances

Les endpoints d’edition et d’extension sont complementaires. En les combinant avec la generation text-to-video et image-to-video, vous pouvez construire des pipelines de production video complets. Cette lecon presente des workflows concrets pour des cas d’usage reels.

Pipeline 1 : Video promotionnelle de produit

Scenario

Vous devez creer une video promotionnelle de 15 secondes pour un nouveau smartphone a partir d’une photo du produit.

Etapes

  1. Image-to-video : animez la photo du produit (rotation, reflets)
{
  "model": "grok-imagine-video",
  "prompt": "Rotation elegante du smartphone sur fond sombre, reflets lumineux sur l'ecran",
  "image": "https://exemple.com/smartphone.jpg",
  "duration": 5,
  "aspect_ratio": "16:9",
  "resolution": "720p"
}
  1. Extension : ajoutez une transition vers l’ecran du telephone
{
  "model": "grok-imagine-video",
  "prompt": "Zoom progressif vers l'ecran du smartphone qui s'allume, affichant une interface coloree",
  "video_url": "{url_video_etape_1}",
  "duration": 5
}
  1. Extension finale : concluez avec un plan large
{
  "model": "grok-imagine-video",
  "prompt": "Zoom arriere revelant le smartphone pose sur un bureau design, lumiere douce, leger flou d'arriere-plan",
  "video_url": "{url_video_etape_2}",
  "duration": 5
}

Cout total : 15 secondes x $0.05 = $0.75

Pipeline 2 : Serie de contenus a style coherent

Scenario

Vous produisez 5 videos de 5 secondes pour une campagne sociale avec un style visuel uniforme.

Approche

Utilisez les memes images de reference pour toutes les videos :

references = [
    {"url": "https://exemple.com/style-campagne-1.jpg"},
    {"url": "https://exemple.com/style-campagne-2.jpg"}
]

prompts = [
    "Un cafe qui se verse dans une tasse en ceramique blanche, vapeur montante",
    "Des mains tapant sur un clavier, ecran flou en arriere-plan",
    "Un carnet ouvert avec un stylo qui ecrit, lumiere naturelle",
    "Une plante verte qui pousse en accelere dans un pot en terre",
    "Un livre dont les pages tournent au vent sur une terrasse"
]

for prompt in prompts:
    resp = httpx.post(
        "https://api.x.ai/v1/videos/generations",
        headers=headers,
        json={
            "model": "grok-imagine-video",
            "prompt": prompt,
            "reference_images": references,
            "duration": 5,
            "aspect_ratio": "9:16",
            "resolution": "720p"
        }
    )

Cout total : 5 x 5s x $0.05 = $1.25

Pipeline 3 : Edition iterative

Scenario

Vous avez une video existante et souhaitez la decliner en plusieurs versions.

Approche

Editez la meme video source avec des prompts differents :

video_source = "https://exemple.com/video-base.mp4"

variations = [
    "Style noir et blanc cinematographique, grain de film",
    "Couleurs saturees pop art, contrastes forts",
    "Ambiance nuit, lumieres neon violettes et bleues",
    "Style aquarelle, contours doux et couleurs delayees"
]

for variation in variations:
    resp = httpx.post(
        "https://api.x.ai/v1/videos/edits",
        headers=headers,
        json={
            "model": "grok-imagine-video",
            "prompt": variation,
            "video": {"url": video_source}
        }
    )

Tableau recapitulatif des endpoints

EndpointMethodeEntreeSortieDuree max
/v1/videos/generationsPOSTPrompt + optionsNouvelle video1-15s
/v1/videos/editsPOSTVideo + promptVideo modifiee8.7s
/v1/videos/extensionsPOSTVideo + promptVideo prolongee2-10s
/v1/videos/{id}GETrequest_idStatut + URL-

Gestion des erreurs dans les pipelines

Quand vous chainez plusieurs operations, chaque etape peut echouer. Implementez une gestion robuste :

async def pipeline_avec_retry(etapes, max_retries=2):
    video_url = None
    for i, etape in enumerate(etapes):
        for tentative in range(max_retries + 1):
            try:
                if etape["type"] == "generation":
                    result = await generer_video(etape["params"])
                elif etape["type"] == "extension":
                    etape["params"]["video_url"] = video_url
                    result = await etendre_video(etape["params"])
                elif etape["type"] == "edition":
                    etape["params"]["video"]["url"] = video_url
                    result = await editer_video(etape["params"])

                video_url = await attendre_resultat(result["request_id"])
                break
            except Exception as e:
                if tentative == max_retries:
                    raise Exception(f"Etape {i+1} echouee : {e}")
                await asyncio.sleep(10)
    return video_url

Bonnes pratiques pour les pipelines

  • Telechargez a chaque etape : les URLs sont temporaires, sauvegardez chaque version intermediaire
  • Validez visuellement : verifiez le resultat de chaque etape avant de continuer
  • Gerez les erreurs : implementez des retries avec backoff exponentiel
  • Budgetisez : calculez le cout total avant de lancer un pipeline complet
  • Parallelisez quand possible : les generations independantes peuvent etre lancees simultanement

Points cles a retenir

  • Les trois endpoints (generation, edition, extension) se combinent en pipelines
  • Les images de reference assurent la coherence stylistique entre plusieurs videos
  • L’edition iterative permet de decliner une video en plusieurs versions
  • Telechargez les resultats intermediaires et gerez les erreurs a chaque etape
  • Calculez le budget total avant de lancer des pipelines complexes