AnimateDiff : Génération de Vidéos

AnimateDiff : Génération de Vidéos

Introduction à AnimateDiff

AnimateDiff est un module d'animation qui s'intègre aux modèles Stable Diffusion pour générer des vidéos courtes (2-5 secondes typiquement). Au lieu de générer une seule image, il produit une séquence de frames cohérentes avec du mouvement fluide.

Ce que AnimateDiff peut faire

  • Animations de personnages (marche, gestes, expressions)
  • Paysages animés (nuages, eau, vent dans les arbres)
  • Effets visuels (particules, lumières, transitions)
  • Boucles infinies (GIFs)
  • Animations de texte et de logos

Limites actuelles

  • Durée limitée (16-32 frames, soit 1-2 secondes à 16 fps)
  • Mouvements complexes difficiles (sauts, rotations)
  • VRAM intensive (16 Go+ recommandés)
  • Principalement compatible SD 1.5 (support SDXL en développement)

Installation

Via ComfyUI Manager

  1. Ouvrez ComfyUI Manager → Install Custom Nodes
  2. Recherchez "AnimateDiff Evolved" (par Kosinkadink)
  3. Installez et redémarrez

Modèles d'animation

Téléchargez et placez dans models/animatediff_models/ :

Modèle Taille Description
mm_sd_v15_v2.safetensors ~1.8 Go Motion module v2 (recommandé)
mm_sd_v15_v3.safetensors ~1.8 Go Motion module v3 (plus récent)
mm_sdxl_v10_beta.safetensors ~1.8 Go Version SDXL (expérimental)

Modèles de mouvement spécialisés (Motion LoRAs)

models/animatediff_motion_lora/
├── v2_lora_ZoomIn.safetensors
├── v2_lora_ZoomOut.safetensors
├── v2_lora_PanLeft.safetensors
├── v2_lora_PanRight.safetensors
├── v2_lora_TiltUp.safetensors
├── v2_lora_TiltDown.safetensors
├── v2_lora_RollingClockwise.safetensors
└── v2_lora_RollingAnticlockwise.safetensors

Workflow AnimateDiff basique

Nœuds principaux

  1. AnimateDiff Loader : charge le motion module et configure l'animation
  2. AnimateDiff Combine : assemble les frames en vidéo/GIF
  3. AnimateDiff Settings : paramètres avancés de l'animation

Graphe simplifié

Load Checkpoint ──► AnimateDiff Loader ──►
                                            CLIP Text Encode (+) ──►
                                            CLIP Text Encode (-) ──► KSampler ──► VAE Decode ──► AnimateDiff Combine
                                            Empty Latent Image ────►

Paramètres de l'AnimateDiff Loader

Paramètre Description Valeur recommandée
model_name Le motion module à utiliser mm_sd_v15_v2
beta_schedule Type de planification du bruit sqrt_linear (SD 1.5)
context_options Contrôle du contexte temporel Voir ci-dessous

Context Options

Le contexte temporel contrôle combien de frames le modèle "voit" simultanément :

  • context_length : nombre de frames traitées ensemble (16 par défaut)
  • context_stride : pas entre les contextes (1 par défaut)
  • context_overlap : chevauchement entre les contextes (4 par défaut)
  • closed_loop : si true, la vidéo boucle (pour les GIFs)

Paramètres de l'Empty Latent Image

Pour AnimateDiff, le batch_size détermine le nombre de frames :

  • batch_size : 16 (= 16 frames, soit 1 seconde à 16 fps)
  • width/height : 512x512 pour SD 1.5

AnimateDiff Combine

Paramètre Description
format gif, mp4, webm, webp
frame_rate Vitesse de lecture (8-24 fps)
loop_count Nombre de boucles (0 = infini)
pingpong Aller-retour pour des boucles fluides

Techniques avancées

Motion LoRAs

Les Motion LoRAs ajoutent des mouvements de caméra prédéfinis :

AnimateDiff Loader ──► Motion LoRA Loader (ZoomIn, strength 0.7) ──► Model

Vous pouvez combiner plusieurs Motion LoRAs :

AnimateDiff Loader ──► Motion LoRA (ZoomIn, 0.5) ──► Motion LoRA (PanRight, 0.5) ──► Model

Contrôle frame par frame avec ControlNet

Combinez AnimateDiff avec ControlNet pour contrôler le mouvement :

  1. Préparez une séquence de cartes de contrôle (ex: squelettes OpenPose pour chaque frame)
  2. Chargez-les comme un batch d'images
  3. Appliquez ControlNet normalement
Load Image Sequence ──► OpenPose (batch) ──► Apply ControlNet ──► KSampler (avec AnimateDiff)

AnimateDiff + IP-Adapter

Pour animer un personnage cohérent :

AnimateDiff Loader ──► Model
Load IPAdapter ──►
Load Image (ref) ──► IPAdapter Apply ──► KSampler ──► VAE Decode ──► Combine

Prompt Scheduling (prompts temporels)

Changez le prompt au fil des frames pour contrôler l'évolution :

Prompt Schedule:
"0": "a sunny field with flowers",
"8": "a sunny field with flowers, clouds gathering",
"16": "a rainy field, dark clouds, storm approaching"

Utilisez le nœud Prompt Schedule ou Batch Prompt Schedule pour configurer cela.

Vidéo longue avec Context Sliding

Par défaut, AnimateDiff traite 16 frames. Pour des vidéos plus longues, utilisez le Context Sliding :

Principe

Le modèle traite les frames par fenêtres glissantes de 16 frames, avec chevauchement entre les fenêtres pour la cohérence.

Configuration

Context Options:
  context_length: 16
  context_stride: 1
  context_overlap: 4

Empty Latent Image:
  batch_size: 48  # 48 frames = 3 secondes à 16 fps

Résultats

  • Plus le batch_size est élevé, plus la vidéo est longue
  • Plus le context_overlap est élevé, plus la transition est fluide
  • Attention à la VRAM : 48 frames nécessitent beaucoup plus que 16

img2vid (Image to Video)

Animez une image existante :

  1. Chargez votre image avec Load Image
  2. Encodez-la avec VAE Encode
  3. Dupliquez le latent avec Repeat Latent Batch (pour N frames)
  4. Utilisez comme entrée du KSampler avec denoise < 1.0
Load Image ──► VAE Encode ──► Repeat Latent Batch (16) ──► KSampler (denoise 0.5) ──► VAE Decode ──► Combine

vid2vid (Video to Video)

Transformez le style d'une vidéo existante :

  1. Chargez la vidéo avec Load Video (extension VHS)
  2. Extrayez les frames
  3. Encodez chaque frame en latent
  4. Appliquez AnimateDiff + ControlNet (pour la cohérence temporelle)
  5. Décodez et recombinez
Load Video ──► Extract Frames ──► VAE Encode ──► KSampler (AnimateDiff, denoise 0.6) ──► VAE Decode ──► Combine
           ──► Depth Preprocessor ──► Apply ControlNet ──►

Optimisation des performances

Réduire l'utilisation VRAM

  • Utilisez --lowvram au lancement
  • Réduisez la résolution (384x384 pour tester, 512x512 pour le rendu final)
  • Réduisez le nombre de frames (16 minimum)
  • Désactivez les ControlNet pendant le prototypage

Améliorer la qualité

  • Augmentez les steps (30-40 pour AnimateDiff)
  • Utilisez un cfg entre 7 et 9
  • Ajoutez un prompt négatif solide :
    blurry, flickering, jittery, low quality, deformed,
    bad anatomy, static, frozen, no movement
    
  • Activez le mode pingpong pour des boucles plus fluides

Post-traitement

  • Frame interpolation : utilisez RIFE (nœud disponible) pour doubler le framerate
  • Upscale : appliquez un upscaler sur chaque frame pour la résolution finale
  • Stabilisation : des outils externes comme FFmpeg peuvent stabiliser la vidéo