SFUMIA combine deux moteurs de rendu pour le canva : une pile DOM/SVG classique (v1) et une pile GPU PixiJS WebGPU (v2⚡). Les deux coexistent — l'utilisateur bascule via le pill en bas à droite du canva.
Le bouton flottant en bas à droite du canva expose trois modes :
| Mode | Rendu | Usage |
|---|---|---|
| v0 | DOM + SVG basique, zéro GPU | Filet de sécurité / debug / hardware sans WebGL2. Sliders img_* passent par le serveur (plus lent), pas d'exposure pill, pas de décodage EXR client. |
| v1 ⭐ | DOM + SVG + shaders GPU pour previews images/vidéos + EXR client + exposure pill + curseurs ref-boards | Mode par défaut. Toutes les accélérations GPU activées là où elles comptent. |
| v2⚡ | Full PixiJS (chrome + edges + frames + ports sur GPU) | Expérimental — se comporte comme v1 pour l'instant. La réécriture PIXI totale est en cours, par briques. |
Chip flottant à côté du switcher canva. Affiche EV 0.0 / γ 1.00, clic pour déplier les sliders.
| Contrôle | Plage | Effet |
|---|---|---|
| EV (Exposure) | −5 à +5 stops | Multiplie l'intensité par 2^EV. Permet de scanner les hautes lumières / les ombres d'une image HDR ou EXR sans perdre l'info. |
| γ (Gamma) | 0.4 à 2.4 | Courbe de réponse. 1.0 = neutre. <1 = ombres relevées. >1 = ombres écrasées. |
Le réglage s'applique en temps réel à toutes les previews du logiciel : nodes img_*, display, display_video, image_compare, AI outputs, et aussi à ProProd (la review-station partage la même valeur via localStorage).
26 nodes de colorimétrie / effets ont leur fragment shader GPU dédié. Slider input → preview instantané sur GPU (1 ms) au lieu d'un round-trip serveur Pillow (2-5 s sur 4K).
Décodeur OpenEXR natif dans le navigateur — aucun aller-retour serveur pour les fichiers les plus courants :
| Compression | Couverture marché | Statut |
|---|---|---|
| NO_COMPRESSION | ~5 % | ✅ Client direct |
| ZIP / ZIPS | ~50 % | ✅ Client via DecompressionStream |
| PIZ | ~40 % | ✅ Client (Huffman + wavelet 2D + bitmap LUT) |
| PXR24 / B44 / DWA | ~5 % | ⚙️ Fallback serveur PNG via ?as=png |
Texture flottante 32-bit chargée sur GPU → l'exposure pill walks 15 stops sans perte de précision sub-LSB. Le commit final côté serveur reste en EXR pour zéro perte.
Les aperçus vidéo utilisent l'accélération GPU image par image lorsque la machine la prend en charge. SFUMIA revient automatiquement à un mode compatible si cette accélération n'est pas disponible.
Quand un node a une image preview, la poignée bas-droite verrouille le ratio par défaut (comme dans Photoshop / After Effects sur les couches d'image). L'image ne se déforme jamais accidentellement.
Pour les montages volumineux, le mode GPU réduit le travail d'affichage de la timeline. Le choix se fait dans les options de performance et peut être annulé sans modifier le montage.
Quand v2⚡ est actif, un badge en haut à gauche du canva affiche en temps réel : GPU edges · WebGPU · 60 fps · 320 wires. Surveille la fluidité sans ouvrir les devtools.