Animer une image fixe : trois méthodes
la mesure. rue de Carthage · 2026-09-25 · Kaggle 2 × T4 + Blender 5.1 · 3 méthodes · 0 €
Une rue de marché de Carthage vers 200 av. J.-C., peinte par Qwen-Image 2.1. Il faut la faire bouger pour une vidéo : la découper en plans, la reconstruire en 3D, ou repeindre chaque image d'un rendu. Les trois ont tourné du premier coup ; aucune n'est diffusable telle quelle.
- run
- calques, rendu, restylisation
- date
- 2026-09-25
- machine
- Kaggle 2 × T4 · Blender 5.1.1
- durée
- 103 min de GPU
- coût
- 0 €
- journal
- releve.json
| méthode | s par image et par T4 | GPU | note | défaut principal |
|---|---|---|---|---|
| parallaxe 2,5D | 1,97 | 12 min à elles deux | 6/10 | bords de calques, foule figée |
| rue 3D par script | 2,98 | 4/10 | maquette de jeu | |
| repeint image par image | 41,6 (2 T4) | 43 min | 3/10 | scintillement |
Temps : Cycles OptiX en 1920×1080, 16 échantillons + débruitage, pour les deux premières ; édition Qwen en 1024×576 pour la troisième, qui occupe les deux T4 à la fois (DiT réparti 16 + 16 blocs) : par carte, compter le double. Les deux rendus ont partagé un noyau de 11,5 min (0,20 h de quota). Les notes sont celles du relecteur : des jugements, pas des mesures. Sources : rendu/kaggle_sortie/mesures.json, style/kaggle_sortie/mesures.json.
1. De la peinture aux calques
La parallaxe demande des plans séparés : ciel, lointain, maisons, marché, premier plan. Qwen-Image 2.1 sait sortir une image transparente ; on lui a donc d'abord demandé les calques directement.
Demandé seul en RGBA, le calque « marché » garde 87,8 % de pixels opaques : seul le ciel devient transparent, le modèle rend une scène complète. L'extraction par édition (« garde seulement X, le reste transparent ») ne vaut pas mieux (2/10) : le fond, censé être opaque, sort transparent à 62,7 %.
animation/assets/journal-kaggle/journal.txt
Le calque « marché » demandé seul : une scène entière. Image générée par Qwen-Image 2.1.
Les 5 calques extraits par édition, recomposés : le violet montre les trous. Ce qui est enlevé devient transparent, rien n'est reconstruit.
Ce qui marche : générer une seule scène, puis la découper sur le CPU de Kaggle, sans quota GPU. Profondeur par Depth Anything V2 Small (10,3 s), segmentation par Mask2Former ADE20K (5,4 s), trous bouchés par LaMa : 96,6 s par scène. Les 5 calques (17, 10, 34, 24 et 14 % des pixels) empilés redonnent la scène à 0,03/255 près.
animation/assets/journal-kaggle/decoupe.json
Profondeur (clair = proche) et partition en 5 calques : fond, lointain, maisons, marché, premier plan. Scène générée par Qwen-Image 2.1, découpe Depth Anything V2 et Mask2Former.
Le calque des maisons vu seul : ce que cachait la foule est bouché par LaMa en silhouettes floues, invisibles aux décalages testés.
Calques décalés de 4, 14, 26 et 48 px sur 1 664 : aucun trou dans la scène. La bande grise du bord droit dit d'agrandir chaque plan d'au moins 6 %.
2. La parallaxe 2,5D 6/10
Les 5 calques posés à 150, 55, 22, 11 et 5,5 m d'une caméra de 40 mm qui avance de 1,2 m en 10 s. Rendu Blender de ce projet, peinture Qwen-Image 2.1. Muet.
La marge commune, calculée en lançant les rayons des 4 coins du cadre sur les 240 images, vaut 1,094 : la caméra voit 91 % de la peinture. Rendu à 1,96 et 1,99 s par image selon la carte ; la luminance moyenne reste entre 120,6 et 125,1, sans saut de plus de 0,24 d'une image à l'autre.
rendu/kaggle_sortie, journal du rendu · relecture (balayage de luminance)
Le calque des maisons a dû être bouché sur 5,6 % de l'image, sinon l'arche découvrait des stries grises à la fin du plan. Ces bouchages se voient en aplats gris sous les auvents dès l'image 1, et la foule reste figée : c'est une photo qui glisse.
rendu/kaggle_sortie, journal du rendu · relecture visuelle
3. La rue 3D construite par script 4/10
36 objets et 77 000 faces écrits en Python, textures Qwen, travelling de 10 m. Rendu Blender de ce projet. Muet.
2,98 s par image et par carte sur Kaggle, soit ≈ 1,5 s avec les deux ; 92,2 s pour une image 1080p sur le processeur du portable (24 échantillons).
rendu/kaggle_sortie/mesures.json · rendu/mesure_1080.log
L'avantage de la 3D : la profondeur est exacte, et la scène se refilme sous tous les angles.
Recadrages 1:1 en 1080p. À gauche, la rue 3D : mannequins sans visage, fanions saturés. À droite, la parallaxe : l'aplat gris sous l'auvent.
4. Repeindre chaque image 3/10 en clip
24 images du travelling (une sur deux), repeintes une à une par l'édition de Qwen en aquarelle puis en cartoon, même graine et même consigne. Prise seule, une image est belle (aquarelle 8/10) ; en clip, elle clignote.
Image 49 repeinte en aquarelle, 16 pas, 41,6 s. Rendu Blender repeint par Qwen-Image 2.1.
| clip | aquarelle | cartoon |
|---|---|---|
| repeint image par image | × 7,9 | × 12,5 |
| 1 image sur 6 + flux optique | × 2,6 | × 3,9 |
| 1 image sur 6 + fondu | × 7,3 | × 12,1 |
Mouvement compensé par le flux optique, l'écart entre deux images successives vaut 1,86 sur l'original et 14,66 en aquarelle repeinte : 7,9 fois plus. Repeindre une image sur six et fabriquer les autres en déformant ces clés selon le flux du rendu divise le scintillement par 3 ; le fondu simple ne sert à rien.
style/kaggle_sortie/mesures.json (post.scintillement)
Témoin trompeur : sans compenser le mouvement, l'aquarelle paraît plus stable que l'original (11,74 contre 12,55), parce qu'elle baisse le contraste. Le cartoon, lui, monte à 22,99.
style/kaggle_sortie/mesures.json
Le même clip de 2 s en quatre versions : rendu 3D, repeint, clés + flux (traits dédoublés à mi-chemin), clés + fondu (images fantômes). Rendu Blender, repeints Qwen-Image 2.1. Muet.
La même comparaison en cartoon : les contours noirs rendent les traits dédoublés très visibles. Muet.
Les 24 images repeintes une à une en cartoon : chacune est propre, mais le ciel passe du crème au bleu sur la dernière rangée.
Notes des clips : aquarelle 3/10 repeinte, 5/10 avec clés et flux ; cartoon 2/10, puis 3,5/10. Chaque image est propre, mais le ciel change de teinte et les traits fins se dédoublent.
relecture visuelle
Les multiplicateurs sont rapportés à un résidu de 1,86, petit par construction : ils grossissent. Et l'astuce est mesurée avec la famille de flux qui la fabrique : sa division par 3 est un peu flatteuse. Un gain sûr, en revanche : encoder la consigne une fois et la resservir change l'image de 1,27 seulement, et économise 27 à 29 s par image.
style/kaggle_sortie/mesures.json (controle_consigne_propre)
La leçon : repeindre une image puis l'animer, plutôt que repeindre 240 images. Et pour que la rue vive, il lui fallait de vrais figurants.