Firmware, drivers, and distributed systems that connect physical hardware — motors, cameras,
sensors, microcontrollers — to networks, machine learning models, and the software that has to
control them reliably.
Currently designing within the Innovation Lab at Société des Arts Technologiques.
Des firmwares, des pilotes et des systèmes distribués qui relient du matériel physique —
moteurs, caméras, capteurs, microcontrôleurs — à des réseaux, des modèles d'apprentissage automatique
et les logiciels qui doivent les contrôler de manière fiable. Actuellement en conception avec le
Laboratoire d'innovation de la Société des Arts Technologiques.
Most of what's here starts as an artistic or creative intention — a gesture, an installation, an instrument — that needs a system underneath it to actually exist. The engineering is in service of that: understanding a specific situation closely enough to know what it really requires. These projects are built to work in the conditions they're actually meant for — in a gallery, on a stage, outdoors, unattended overnight. That means understanding the specific conditions a piece has to live in before deciding how to build it.
Co-maintain a 4-repo open-source C++ framework for networked ESP32 controllers: a core library abstracting WiFi, a browser-based settings server, and persistent config; a standalone gesture-recognition library; and two synchronized packagings covering OSC, BLE advertising, and libmapper. Used and forked by outside researchers and students. Co-maintiens un framework C++ open source réparti sur 4 dépôts pour des contrôleurs ESP32 en réseau : une bibliothèque centrale qui abstrait le WiFi, un serveur de réglages basé sur navigateur et une configuration persistante ; une bibliothèque autonome de reconnaissance de gestes ; et deux conditionnements synchronisés couvrant OSC, l'annonce BLE et libmapper. Utilisé et forké par des chercheurs et étudiants externes.
Closed-loop control firmware for a multi-segment kinetic installation: four independent Teensy 4.1 controllers communicating over OSC/SLIP-serial, with encoder feedback, inter-carriage safety interlocks, EEPROM crash recovery, and direction-aware electromagnetic coil commutation. Firmware de contrôle en boucle fermée pour une installation cinétique à segments multiples : quatre contrôleurs Teensy 4.1 indépendants communiquant en OSC via liaison série SLIP, avec rétroaction d'encodeurs, verrouillages de sécurité inter-chariots, récupération après panne via EEPROM et commutation électromagnétique des bobines selon le sens de déplacement.
Self-contained 9DoF motion sensor: an MPU9150 module plugs directly into an ESP32-PoE board, which fuses orientation with a 9-axis Kalman filter and streams it as OSC over a single PoE Ethernet cable — no separate power supply. Magnetometer calibration persists to flash and can be triggered locally or remotely. Capteur de mouvement 9DoF autonome : un module MPU9150 se branche directement dans une carte ESP32-PoE, qui fusionne l'orientation par filtre de Kalman 9 axes et la diffuse en OSC via un seul câble Ethernet PoE — sans alimentation séparée. Le calibrage du magnétomètre est conservé en flash et peut être déclenché localement ou à distance.
ESP32-S3 firmware performing real-time frame-difference motion detection and pixel-texture analysis directly on-device, broadcasting bounding box, centroid, velocity, and zone-based density metrics as OSC at ~30 Hz from concurrent FreeRTOS tasks. Firmware ESP32-S3 effectuant, directement sur l'appareil, une détection de mouvement par différence d'images et une analyse de texture des pixels en temps réel, diffusant en OSC à ~30 Hz la boîte englobante, le centroïde, la vitesse et des métriques de densité par zone, depuis des tâches FreeRTOS concurrentes.
Realtime neural audio synthesis (RAVE, via the nn~ Pure Data external) on a Raspberry Pi 5, with the model's latent space steered live by hand-gesture tracking or a MIDI controller, under Pure Data + JACK for low-latency audio I/O. Synthèse audio neuronale en temps réel (RAVE, via l'externe Pure Data nn~) sur un Raspberry Pi 5, avec l'espace latent du modèle piloté en direct par suivi de gestes de la main ou par contrôleur MIDI, sous Pure Data + JACK pour des entrées-sorties audio à faible latence.
End-to-end automation turning raw images into a trained LoRA model: a vision-language model captions images and extracts key concepts via TF-IDF, feeding a scripted kohya_ss/Stable Diffusion training run — usable from a CLI or a desktop UI. Automatisation de bout en bout transformant des images brutes en modèle LoRA entraîné : un modèle vision-langage légende les images et en extrait les concepts clés via TF-IDF, alimentant un entraînement scripté kohya_ss/Stable Diffusion — utilisable en ligne de commande ou via une interface de bureau.
Teaching pipeline wiring computer vision (MediaPipe), machine learning (Wekinator), and creative-coding software (Ossia Score / Max / TouchDesigner) together over OSC, with cross-platform install scripts and troubleshooting docs for non-technical users. Pipeline pédagogique reliant la vision par ordinateur (MediaPipe), l'apprentissage automatique (Wekinator) et des logiciels de creative coding (Ossia Score / Max / TouchDesigner) entre eux via OSC, avec des scripts d'installation multiplateformes et une documentation de dépannage pour un public non technique.
A real-time installation where a vision-language model watches the piece from outside, describes it in English and French, and feeds that description back in as a prompt steering the generative visuals — while spectators' own volumetric point cloud shapes the same imagery from the inside. Une installation en temps réel où un modèle vision-langage observe la pièce de l'extérieur, la décrit en anglais et en français, puis réinjecte cette description comme invite pour orienter les visuels génératifs — pendant que le nuage de points volumétrique des spectateurs façonne la même image de l'intérieur.
Reproducible Linux setup for an industrial IIDC/DCAM machine-vision camera: custom udev rules for non-root USB access, a libdc1394 test harness, and a GStreamer/v4l2loopback bridge exposing it as a standard V4L2 webcam. Configuration Linux reproductible pour une caméra industrielle de vision par ordinateur IIDC/DCAM : règles udev personnalisées pour un accès USB sans droits root, un banc de test libdc1394, et un pont GStreamer/v4l2loopback l'exposant comme une webcam V4L2 standard.
Distributed image-processing installation across a Raspberry Pi cluster, in two architectures: per-Pi AI agents choosing transformations from live system telemetry, and a concurrent tile-based canvas with file-locking and live TCP display. Installation de traitement d'image distribué sur une grappe de Raspberry Pi, selon deux architectures : des agents IA par Pi choisissant des transformations à partir de la télémétrie système en direct, et une toile partagée par tuiles concurrentes avec verrouillage de fichiers et affichage TCP en direct.
Research into building an improvisation-based drumming instrument for experimental electronic music: a 20-module Eurorack signal chain — clock/CV utility, seven percussion and tone synthesis engines, granular texture and filtering, mix and FX — designed alongside a hard power and space budget across three rows (313 HP, 2.2 A / 0.8 A / 175 mA across three DC rails). Recherche autour d'un instrument de percussion basé sur l'improvisation pour la musique électronique expérimentale : une chaîne de signal Eurorack de 20 modules — utilitaire horloge/CV, sept moteurs de synthèse de percussions et de sons, texture granulaire et filtrage, mixage et effets — conçue en respectant un budget strict de puissance et d'espace sur trois rangées (313 HP, 2,2 A / 0,8 A / 175 mA sur trois rails DC).
Body-worn power and signal harness for a live-performance rig: battery topology and fusing driven by an uninterrupted hot-swap requirement, CAN bus selected over I²C for a 5-meter IMU run, and a verification-first process for connector and crimp-tool sourcing across six distinct pin families — documented as a full design-reasoning write-up, not just a parts list.