Un logiciel de video-mapping en Python/OpenGL : il déforme en perspective des vidéos, images ou animations génératives audio-réactives pour les projeter, calibrées au pixel près, sur des surfaces réelles — murs, objets, écrans irréguliers.
Vue d’ensemble
Mapping Animation est un outil de video-mapping GPU : il prend des vidéos, des images fixes ou des scripts d’animation générative, et les projette perspective-déformées sur des quadrilatères ou polygones quelconques (« surfaces ») — un mur, une façade, un objet, plusieurs écrans. Chaque surface est calibrée indépendamment en tirant ses coins ou ses points de contrôle, directement en direct devant le résultat projeté.
Au-delà du simple quadrilatère, une surface peut être subdivisée en grille pour être courbée sur un objet non plan, ou reconfigurée en polygone à 3-12 points pour épouser une forme irrégulière. Un panneau de contrôle web séparé permet de piloter tout ça — scènes, cues, calibration colorimétrique — sans quitter des yeux la projection.
Fonctionnalités
- Warp perspective en direct — chaque surface se calibre en tirant ses points de contrôle à la souris, avec zoom de précision pendant le drag.
- Surfaces courbes et polygones — une surface passe d’un quadrilatère rigide à une grille subdivisée bendable, ou à un polygone à 3-12 points pour épouser un objet non plan.
- Animations génératives audio-réactives — une vingtaine de scripts procéduraux (fractales, particules, fluides, mandalas) qui réagissent en direct au niveau et au spectre du micro.
- Panneau de contrôle web — interface séparée dans le navigateur pour piloter scènes, cues et calibration sans quitter la vue projetée des yeux.
- Edge-blending et calibration colorimétrique — fondu doux entre projecteurs qui se chevauchent, plus un réglage gamma/luminosité/gain par sortie pour matcher plusieurs projecteurs entre eux.
- Scènes et cues — bascule instantanée entre affectations vidéo (scènes), ou avance pas à pas dans une liste de cues façon régie lumière.
- Multi-projecteurs — un processus isolé par sortie, avec synchronisation automatique du transport (lecture, scène active) depuis une sortie « primaire ».
- Robuste au live — fichier média manquant ou cassé, micro absent, projecteur débranché : rien ne fait planter le show, tout se dégrade proprement et se relance seul.
Sous le capot
Le warp perspective repose sur une homographie 3×3 classique (DLT) qui mappe le carré unité aux quatre coins de sortie. Plutôt que de découper le quadrilatère en deux triangles interpolés (qui provoque le classique artefact de pli diagonal), les coordonnées homogènes issues de l’homographie sont envoyées directement dans le vertex shader : c’est la rasterisation perspective-correcte du GPU lui-même qui fait la déformation, sans aucune couture visible.
Une surface n’est pas figée à quatre coins fixes : sa géométrie est une grille de points de contrôle qui peut être subdivisée pour la faire courber (glisser un point intérieur plie la surface plutôt que de simplement l’incliner), ou reconfigurée en contour polygonal à N points pour les formes non rectangulaires — triangle, pentagone, hexagone. Les deux modes sont volontairement orthogonaux : une forme irrégulière reste toujours à facettes plates, une surface courbée reste toujours à quatre coins.
Les animations génératives tournent chacune dans leur propre instance de module Python, chargées dynamiquement, et reçoivent à chaque frame un instantané audio partagé (niveau RMS lissé + spectre en 8 bandes log-espacées) capturé par un unique écouteur micro commun à toutes les surfaces animées. Rien de tout ça ne peut faire planter le rendu : chaque callback de rendu, d’entrée et de décodage média est protégé individuellement, avec journalisation plutôt que propagation de l’erreur — un fichier vidéo cassé se contamine en simple espace réservé, jamais en crash.
Contrôles
| Touche | Action |
|---|---|
| F | Plein écran |
| C | Mode calibration |
| Tab | Change de surface active |
| N / Suppr | Ajoute / supprime la surface active |
| G / Maj+G | Augmente / diminue la densité de maillage (pour courber) |
| I / X | Insère / retire un point de contour (polygone) |
| T | Mire de calibration (échiquier / barres) |
| 1-9 | Déclenche une scène |
| Entrée / Maj+Entrée | Avance / recule d’un cue |
| Espace | Lecture / pause |
| B | Blackout |
| S / Maj+S | Sauvegarde / snapshot d’un preset |
Stack technique
- Python 3
- moderngl / moderngl-window — contexte OpenGL, shaders, fenêtrage GLFW
- OpenCV — décodage vidéo et image
- NumPy — homographies, warp de maillage, spline Catmull-Rom
- sounddevice — capture micro et analyse spectrale pour l’audio-réactif
- http.server (stdlib) — panneau de contrôle web auto-hébergé
Cas d’usage
Pensé pour habiller un mur, une façade ou un objet en live show ou en installation : calibrer sur place devant la surface réelle, enchaîner les scènes au clavier ou depuis le panneau web, et laisser tourner sans surveillance grâce à la reprise automatique sur erreur.
N’importe quelle surface devient un écran, à condition de savoir la plier au bon endroit.


