⚡ Performance & GPU

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.

Switcher v0 / v1 / v2⚡

Le bouton flottant en bas à droite du canva expose trois modes :

ModeRenduUsage
v0DOM + SVG basique, zéro GPUFilet 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.
v1DOM + SVG + shaders GPU pour previews images/vidéos + EXR client + exposure pill + curseurs ref-boardsMode 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.
Persistance : SFUMIA mémorise le mode choisi sur ce poste. Tu peux revenir à un autre mode à tout moment avec le bouton du canva.

Pill exposure / gamma (HDR-aware)

Chip flottant à côté du switcher canva. Affiche EV 0.0 / γ 1.00, clic pour déplier les sliders.

ContrôlePlageEffet
EV (Exposure)−5 à +5 stopsMultiplie 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.4Courbe 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).

Shaders WebGL2 sur les nodes img_*

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).

Tone & Color (10)
levels • curves • brightness_contrast • hue_saturation • vibrance • color_balance • gradient_map • black_white • threshold • posterize • color_lut
Effets (9)
invert • channel_shuffle • vignette • edge_detect • emboss • sharpen • dilate_erode • noise • grain
Blur family (4)
blur • motion_blur • radial_blur • glow
Géométrique (4)
mirror • tile • lens_distortion • transform

EXR client-side (HDR float32)

Décodeur OpenEXR natif dans le navigateur — aucun aller-retour serveur pour les fichiers les plus courants :

CompressionCouverture 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.

Video preview frame-par-frame

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.

Resize avec aspect ratio préservé

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.

Hold Shift pendant le resize pour libérer la contrainte et étirer librement.

Montage timeline GPU

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.

Diagnostics (badge FPS)

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.