Labo vidéo
AnimateDiff en local : diagnostic mémoire et banc de 8 plans
- par plan de 16 images 512² (333 s le 19/10)
- ≈ 40 s
- images identiques bit à bit entre deux exécutions
- 16/16
- plus rapide avec l’attention découpée par budget mémoire
- ×4,6
- plans du banc générés sans échec
- 8/8
- Le problème
- Produire de courts plans animés en local sur un Mac de 16 Go, en réutilisant SD 1.5, sans que la mémoire ou le hasard ne décident du résultat.
- Pour qui
- Projet de recherche personnel : la brique vidéo du portfolio, sans aucune dépense.
- Le résultat
- Un plan de 16 images en 40 s environ (333 s la veille), reproductible bit à bit, et un banc de 8 plans mesuré : vitesse, cohérence temporelle, CLIP.
Contexte
Réutiliser SD 1.5 pour produire de courts plans animés en local, sans service payant, avec un journal pour chaque exécution.
La refonte du 20/10 ajoute des garde-fous testés, puis mesure : vitesse, mémoire, cohérence temporelle, adhérence au texte, sur huit plans de cinéma.
Ce que j’ai construit
- Attention découpée selon un budget mémoire (calcul exact, testé contre l’attention pleine) : 38 s contre 175 s avec l’ancien découpage, à réglages égaux.
- Bruit initial tiré sur CPU et empreinte des latents après chaque pas : deux exécutions de même graine donnent 16 images identiques bit à bit.
- Garde-fou mémoire (empreinte, swap, mémoire libre) avec arrêt propre, et un journal JSON écrit pour chaque exécution.
- Post-production : Real-ESRGAN ×2 en tuiles avec marge, interpolation à 24 img/s, MP4 H.264 ; métriques de cohérence temporelle et score CLIP calculés sur CPU.
Architecture 6 briques
- 01 · EntréePlanPrompt, préréglage, graine ; configuration typée
- 02 · ModèleSD 1.5 + AnimateDiffLightning 4 pas par défaut, guoyww 16 pas en option
- 03 · OutilAttention par budgetCalcul exact, découpé selon la mémoire
- 04 · OutilGarde-fou mémoireEmpreinte, swap, mémoire libre ; arrêt propre
- 05 · OutilPostReal-ESRGAN ×2, 24 img/s, MP4 et GIF
- 06 · SortieMesuresSSIM, recalage, scintillement, netteté, CLIP
Fabrication 5 étapes
- DiagnosticMémoire et attention analysées sur le premier script (333 s par plan).
- RefonteChaque cas mémoire devient un garde-fou testé (114 tests).
- RéférenceReproductible bit à bit, 38 s.
- Banc8 plans Lightning, puis 2 plans guoyww.
- Post×2, 24 img/s, métriques.
Décisions le choix, la raison, l’alternative écartée
- D1Découper l’attention selon un budget mémoire plutôt qu’en tranches fixes.
Même résultat exact, 38 s contre 175 s à réglages égaux : l’ancien découpage était la vraie cause de la lenteur.
ÉcartéSlicedAttnProcessor, utilisé le 19/10.
- D2Tirer le bruit sur CPU et suivre l’empreinte des latents à chaque pas.
Deux exécutions de même graine sont désormais identiques bit à bit ; une divergence se localise au pas près.
- D3Garder Lightning 4 pas par défaut après comparaison avec guoyww 16 pas.
Lightning : 40 s au lieu de 313 s et une meilleure cohérence d’une image à l’autre ; guoyww suit un peu mieux le texte.
- D4Écrire un journal JSON pour chaque exécution, y compris quand un garde-fou arrête le calcul.
Chaque exécution laisse une trace exploitable pour le diagnostic.
Résultats
Banc Lightning, 8 plans (4 pas, CFG 1, graine 2026, 16 images 512²)
| Plan | Génération | SSIM entre images ↑ | Mouvement (px/img) | CLIP ↑ |
|---|---|---|---|---|
| Voiture sur asphalte | 39,7 s | 0,77 | 8,6 | 29,7 |
| Rue de nuit | 39,6 s | 0,73 | 3,9 | 29,9 |
| Portrait | 41,9 s | 0,63 | 3,7 | 28,6 |
| Forêt dans la brume | 41,2 s | 0,63 | 1,4 | 31,3 |
| Montre (produit) | 40,7 s | 0,54 | 10,7 | 29,7 |
| Vapeur de café | 42,1 s | 0,49 | 18,5 | 28,2 |
| Basalte | 39,6 s | 0,43 | 16,7 | 28,4 |
| Vagues | 39,1 s | 0,33 | 39,9 | 31,2 |
La SSIM entre images voisines se lit avec le mouvement : un plan figé est parfaitement « cohérent ». Le premier clip, avant refonte, était à 0,15.
Lightning 4 pas contre guoyww 16 pas (CFG 7,5), mêmes plans
| Plan | Module | Génération | SSIM ↑ | CLIP ↑ |
|---|---|---|---|---|
| Basalte | Lightning | 39,6 s | 0,43 | 28,4 |
| Basalte | guoyww | 313,2 s | 0,21 | 31,0 |
| Voiture sur asphalte | Lightning | 39,7 s | 0,77 | 29,7 |
| Voiture sur asphalte | guoyww | 313,1 s | 0,32 | 30,1 |
Lightning est le réglage par défaut : huit fois plus rapide et plus cohérent d’une image à l’autre ; guoyww suit un peu mieux le texte.
Livrables 3
- Paquet labo : configuration, génération, lots reprenables, post-production, métriques, rapports.
- Banc de 8 plans Lightning et comparaison guoyww, avec tableaux de résultats générés depuis les fichiers.
- Clips 24 img/s, planches et journaux de chaque essai ; 114 tests sur CPU.
Environnement
Matériel et conditions de mesure
- Généré sur Mac 16 Go (PyTorch MPS, Diffusers 0.39) : plans de 16 images en 512², agrandis ×2 et interpolés à 24 img/s.
- SD 1.5 et AnimateDiff-Lightning sous licence CreativeML OpenRAIL-M.
Reproduire commandes du README
Code privé : accès en lecture sous accord de confidentialité, ou démo en direct de 30 minutes. Demander l’accès →
python -m labo doctor
python -m labo batch plans/bench_lightning.json
python -m labo post --root sorties/bench_lightning --upscale 2 --interp 24
python -m labo metrics --root sorties/bench_lightning
python -m labo report sorties/bench_lightning
python -m labo compare sorties/reference/ref-a sorties/reference/ref-b- Python du venv ComfyUI (diffusers 0.39) ; ffmpeg requis pour les clips.
- SD 1.5 et AnimateDiff-Lightning sous licence CreativeML OpenRAIL-M.
Galerie 6
Ce que ce projet change pour vous
Le même savoir-faire, sur votre sujet.
La faisabilité avant le budget
Je teste une technique sur votre matériel et consigne le résultat, y compris « infaisable en l’état », avant tout engagement.
Trouver la vraie cause
Ici, un découpage d’attention mal choisi coûtait un facteur 4,6 : je mesure avant d’acheter du matériel.
Des résultats reproductibles
Même graine, même image : une revue créative peut demander une variante précise et l’obtenir.