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
- Ouvrez ComfyUI Manager → Install Custom Nodes
- Recherchez "AnimateDiff Evolved" (par Kosinkadink)
- 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
- AnimateDiff Loader : charge le motion module et configure l'animation
- AnimateDiff Combine : assemble les frames en vidéo/GIF
- 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 :
- Préparez une séquence de cartes de contrôle (ex: squelettes OpenPose pour chaque frame)
- Chargez-les comme un batch d'images
- 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_sizeest élevé, plus la vidéo est longue - Plus le
context_overlapest é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 :
- Chargez votre image avec Load Image
- Encodez-la avec VAE Encode
- Dupliquez le latent avec Repeat Latent Batch (pour N frames)
- 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 :
- Chargez la vidéo avec Load Video (extension VHS)
- Extrayez les frames
- Encodez chaque frame en latent
- Appliquez AnimateDiff + ControlNet (pour la cohérence temporelle)
- 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
--lowvramau 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