Package npm Open source
@tryonit/web — Moteur d'essayage virtuel côté client pour le navigateur
Un moteur d'essayage virtuel en temps réel pour le navigateur (MediaPipe, WebGL2) avec une interface mount() pour Vue, Svelte, Angular, Shopify et HTML.
Présentation
@tryonit/web est le moteur de TryOnIt. Il ouvre la caméra, suit le visage, les mains, le corps ou les cheveux avec MediaPipe exécuté sur l'appareil via WebAssembly, et affiche le produit par-dessus en temps réel : rouges à lèvres et maquillages complets, coloration des cheveux, stickers, lunettes, chapeaux, boucles d'oreilles, montres et bagues en 3D, et vêtements en mode expérimental. Les images de la caméra ne quittent jamais l'appareil : aucun serveur à faire tourner, aucun coût par essai.
J'ai écrit les moteurs de rendu moi-même. Le maquillage est rastérisé à partir de polygones de points du visage dans un masque adouci, puis fusionné de façon à préserver la texture de la peau et des lèvres sans jamais colorer les dents. Les produits 3D sont modélisés en millimètres et placés avec une caméra qui reproduit la géométrie du visage de MediaPipe, avec des occulteurs invisibles pour que les branches de lunettes et la boucle d'oreille éloignée disparaissent derrière la tête. Les vêtements sont déformés sur le torse par homographie.
La performance a été une contrainte dès le départ. Le point d'entrée initial pèse environ 23 Ko min+gzip ; MediaPipe, chaque modèle de suivi et three.js ne se chargent que lorsqu'un produit en a besoin. La détection tourne une fois par nouvelle image de la caméra, à un rythme adaptatif de 30 à 15 ips, tandis que le rendu tourne à chaque frame d'animation, et destroy() libère chaque piste caméra, tâche MediaPipe et ressource WebGL. Pour les sites sans React, mount() ajoute l'interface complète en quelques lignes.
Fonctionnalités clés
- Maquillage, coloration, stickers, accessoires 3D, montres, bagues et vêtements
- Suivi MediaPipe sur l'appareil, sur GPU avec repli automatique sur CPU
- Chargement différé des seuls trackers et moteurs de rendu nécessaires
- Fréquence de détection adaptative avec modes qualité, équilibré et batterie
- Repli par envoi de photo, capture et comparaison avant/après
- Interface mount() sans framework pour Vue, Svelte, Angular et Shopify
Articles sur ce projet
-
7 min de lecture
How to Create Virtual Try-On Products with JSON Manifests
A practical guide to TryOnIt asset manifests: lipstick shades, makeup looks, face stickers, variants, CORS hosting, CMS or Shopify loading and CI validation.
-
8 min de lecture
Inside TryOnIt: The Architecture of a Client-Side Virtual Try-On SDK
How I structured an open-source virtual try-on SDK as layered TypeScript packages: a DOM-free core, a per-frame fast path, a state machine and renderers.
-
6 min de lecture
Keeping Web AR Fast: Bundle Budgets, Lazy Loading and Adaptive Tracking
The performance techniques behind TryOnIt: size budgets that fail the build, loading only the trackers a product needs, intent preloading, adaptive detection.
-
7 min de lecture
Preparing 3D Models for AR Try-On: Millimetres, Origins and glTF Export
How to model, orient and compress glasses, hats, earrings, watches and rings for web AR try-on: real-world units, anchor origins, Blender export, compression.
-
4 min de lecture
Privacy by Design for Camera Features: On-Device Virtual Try-On
How TryOnIt keeps camera frames on the device, which network requests it makes, how to self-host for zero third-party requests, and the CSP it needs.