Releases: Patrickjaillet/Z-GL
Z-GL 1.1.1 — The Premier Shader Desktop Environment
What's new in v1.1.1
Z-GL is now a native Windows desktop application with a full shader development workflow:
- Frameless window with custom title bar (Windows 11 design)
- Native Mica/Acrylic blur effects via
window-vibrancy - System tray with Open / Pause Render / Quit
- Native file dialogs and drag-and-drop for
.glsl,.frag,.fs,.json - File associations — open shaders directly from Windows Explorer
- CLI launch:
z-gl.exe shader.glsl - Most-recently-used (MRU) file list (last 10 paths)
.zglproject format — bundles shader, metadata, channels and presets in a ZIP- Auto-save every 30 seconds with crash recovery
- Hot-reload on external file changes
- Fixed-ratio rendering presets (720p, 1080p, 1440p, 4K)
- Headless screenshot export via
OffscreenCanvas - WebCodecs video export (MP4, WebM, PNG sequence)
- Timeline keyframe editor with Bézier curve view and dope sheet
- Multi-pass WebGPU pipelines (Buffers A/B/C/D) with
rgba16floatHDR targets - WASM-based
glslangpre-validation before GPU execution - WGSL real-time preview panel alongside GLSL source
- Monaco GLSL ES 3.0 language service — syntax highlighting, hover docs, autocomplete, live error markers
- WebGPU
timestamp-queryGPU timing in the perf panel - Single full-screen triangle draw call (replaces Three.js
PlaneGeometry) SharedArrayBuffer+Atomicsuniform writes — zero GC pressure
Z-GL 1.1.0 — The Premier Shader Desktop Environment
Changelog
All notable changes to the Z-GL shader desktop editor project for version 1.1.0 are documented below. This release primarily establishes the native desktop infrastructure for Windows 10/11 and advances the shader development workflow.
[1.1.0] - 2026-05-16
Added
- Native OS Window Integration: Switched to a frameless architecture leveraging native window decorations. Added a custom title bar with explicit drag regions, minimize, maximize, and close controls tailored for Windows 11 design guidelines.
- Mica & Acrylic Visuals: Integrated the
window-vibrancyTauri plugin to inject native Windows 11 Mica and Acrylic blur effects into the application layout shell. - System Tray Management: Added a dedicated system tray icon featuring a native context menu allowing users to quickly
Openthe application instance,Pause Renderexecution to save processing cycles, or trigger a cleanQuit. - Dynamic Title Tracking: Added a title management routine updating the native OS window bar dynamically via
window.setTitle(shaderName)during file imports or internal asset operations. - Native File System Dialogs: Replaced standard web file picking hooks with secure, native OS file picking procedures powered by the Tauri
dialogplugin API (openFileDialog,saveFileDialog). - Drag-and-Drop Infrastructure: Implemented native file-drop interceptors enabling direct instantiation and parsing of
.glsl,.frag,.fs, and.jsonfile types dropped over the active viewport area. - Windows Explorer Association: Added full file association capabilities via the NSIS compilation layout, allowing
.glsl,.frag, and.fsfiles to launch natively within the Z-GL environment directly from disk. - CLI Boot Operations: Added deep CLI argument routing support, allowing execution sequences like
z-gl.exe shader.glslto directly parse and ingest localized source fragments at startup. - Local Application Hub Tracking: Introduced an automated Most-Recently-Used (MRU) tracking database in the
Fileutility tree, maintaining the 10 most recent filesystem paths across individual application sessions. - Project Structure Packaging (
.zgl): Developed a localized project archiving protocol utilizing the current ZIP bundle mechanism. A.zglarchive bundles the coreshader.glsl, a standard metadata file (meta.json), references to explicit input streaming channels (channels/), and localized multi-variable presets (presets/). - Background Auto-Save Engine: Added a resilient auto-save pipeline writing persistent cache structures to a temporary data node every 30 seconds, coupled with automated recovery procedures triggered on unhandled app crashes.
- Hot-Reload Disk Watcher: Exposed an automated file monitoring option leveraging Tauri's system event detection loop to dynamically hot-reload asset sources on disk when edited inside an external IDE.
- Shader Channel Embedding: Configured an asset copying pipeline within the bundle logic to import and inline local channel streams (textures, audio targets) directly into the portable
.zglwrapper format. - High-Resolution Frame Pacing: Enhanced the master RAF sequencer (
raf-loop.js) with native support forrequestVideoFrameCallbacktimestamps to maintain exact synchronization with high-refresh display hardware. - WebGPU Metric Analysis: Added dedicated GPU timing reporting routines within the performance UI layer, driven by native WebGPU
timestamp-querypipelines to calculate execution durations independently of JS main-thread runtime overhead. - Fixed-Ratio Screen Profiling: Added predefined rendering resolution options (720p, 1080p, 1440p, 4K) running independently of the active viewport scaling metrics.
- Headless Screenshot Rendering: Added an alternative rendering pipeline utilizing
OffscreenCanvashooks for generating unthrottled screenshots and batch image exports without visual viewport stutter. - Advanced Environment Diagnostics: Extended the performance dashboard to handle WebGL hardware extension evaluations, tracking specific runtime boundaries like maximum texture dimensions, floating-point texture alignment parameters, and MSAA sample counts.
- Monaco GLSL Language Service: Added a dedicated language registration package (
monaco.languages.register) supporting GLSL ES 3.0 within the editor core. - TextMate Highlighting Specification: Implemented a comprehensive TextMate grammar definition specifying unique highlighting behaviors for key operations, preprocessor controls, specific type variables, and internal constants.
- Semantic Token Profiling: Isolated core ShaderToy Uniform tokens (
iTime,iResolution,iMouse,iChannel0-3) into distinct coloring criteria to differentiate system properties from arbitrary user definitions. - Interactive API Documentation Tooltips: Integrated an inline hover service (
monaco.languages.registerHoverProvider) mapping full signature details and parameter instructions to standard GLSL primitives and built-in uniforms. - Intelligent Auto-Completion Registry: Bound automated snippet injection utilities providing template structures for common rendering techniques, Signed Distance Field (SDF) functions, and structural main blocks.
- Live Gutter Error Parsing: Connected an active syntax compiler that intercepts WebGL translation faults and binds red line/column error decorations to the text editor channel via
monaco.editor.setModelMarkers. - WGSL Compatibility Warners: Implemented diagnostic analyzer tracking for cross-compilation hazards (implicit data casting discrepancies, unstable ternary usage inside multi-layered operations, or array indexing anomalies) using yellow warning indicators.
- Structural Code Utilities: Activated multi-cursor edit paths, internal definition tracing routines, folding layouts for active preprocessor structures, custom color-coded bracket rules, and an AST-based command palette hookup.
- WGSL Transpiler Optimization: Upgraded the internal GLSL-to-WGSL transpilation module to safely map and unroll complex macro commands, structure loops,
samplerCubebinds, precision scopes, and explicit channel sampling formats (textureLodmappings). - WGSL Real-Time Preview Panel: Introduced a split-pane structural view layout to actively inspect transpiled WGSL code side-by-side with the current GLSL source.
- WASM-Driven Input Verification: Embedded a local server-less version of the
glslangcompiler engine running in WebAssembly to analyze structural health prior to hardware execution passes. - Dedicated WebGPU Pipeline Upgrade: Configured the WebGPU rendering framework to support structural multi-pass execution pipelines (Buffers A/B/C/D) via atomic
GPUTextureping-pong feedback loops, explicit pass-by-pass timestamp tracing, and HDR canvas target alignments (rgba16float). - Timeline Keyframe Layout System: Designed a professional layout editor featuring an analytical curve view and an active dope-sheet timeline to bind, manipulate, and drag parameter values across linear, constant, or customized Bézier interpolation models.
- WebCodecs Rendering Exporters: Integrated hardware-accelerated video rendering routines into the application shell using WebCodecs options to process frame-accurate MP4, WebM, or PNG sequence exports.
Changed
- Macro Memory Execution Barriers: Unified all active frame routines into a singular system loop managed by
gl/renderer.jsto strictly maintain structural downward asset layers. - Zero GC Uniform Write Pipeline: Refactored the core configuration structure to funnel input parameters using modern
SharedArrayBufferstructures andAtomicsmemory operations, completely removing garbage collection performance hitches. - Optimized Vertex Buffering Layout: Replaced standard Three.js
PlaneGeometryarrays with a single full-screen triangle optimization routine to decrease processing requirements down to a single draw call without indexing overhead.
Z-GL 1.2.0 — The Premier Shader Desktop Environment
Changelog
All notable changes to Z-GL are documented here.
Format follows Keep a Changelog.
[1.2.0] — 20 mai 2026
Added — Mode headless CLI (Tauri)
src/native/headless-cli.js— moteur headless complet (~430 lignes).z-gl render --shader main.glsl --duration 10 --fps 60 --out output.mp4— rendu offscreen Three.js sans fenêtre UI, encodage MP4/H.264 via WebCodecs (VideoEncoder).z-gl render --timeline project.json --out frames/— export séquence PNG depuis un projet Z-GL JSON avec timeline embarquée.z-gl render --shader plasma.frag --out seq/— export PNG séquence (détection automatique par/terminal ou absence d'extension).- Parser d'arguments minimaliste (
--key value, flags booléens, positionnels). - Tous les defaults :
--duration 10,--fps 60,--width 1920,--height 1080,--bitrate 8(Mbit/s),--start-time 0. - Encodage H.264 (avc1.42E01E) ou séquence PNG, en fonction du suffixe
--out. - Import de timeline via
importTimelineJSONsiproject.timelineouproject.keyframesprésent. - Flip vertical automatique des pixels WebGL (
readPixelsorigin bas-gauche → PNG origin haut-gauche). - Logger de progression en barres
█░— notifie Tauri viaheadless_logIPC. headless_exitIPC appelé en fin de run (code 0) ou sur erreur (code 1).printHeadlessHelp()affichée pour--help,-hou commande inconnue.
src/native/headless-cli.test.js— 33 tests Vitest.src/app/init.js(modifié) — importrunHeadlessCLI+ early-exit si--headless renderdétecté dans les argv Tauri, sans monter l'UI.
Exemples d'utilisation
# MP4 10 s à 60 fps, 1920×1080
z-gl render --shader main.glsl --duration 10 --fps 60 --out output.mp4
# Séquence PNG 4K 30 fps
z-gl render --shader plasma.frag --width 3840 --height 2160 --fps 30 --out frames/
# Export depuis une timeline de projet
z-gl render --timeline project.json --out export.mp4
# Utilisable dans un Makefile
render: shaders/main.glsl
z-gl render --shader $< --duration 5 --fps 60 --out dist/preview.mp4Files
src/native/headless-cli.js (~430 lignes), src/native/headless-cli.test.js (~280 lignes).
[Unreleased] — 20 mai 2026
Added — Textures compressées natives (BC7 / ASTC / ETC2)
src/render/texture-compressor.js— moteur de compression/cache (~630 lignes).initTextureCompressor(gl)— détectebestCompressedFormatviagl-caps.js, ouvre IndexedDBz-gl-tex-cache.compressAndCacheTexture(blob, name)— charge l'image dans unOffscreenCanvas, calcule le SHA-256 du bitmap, consulte le cache IDB, compresse si absent (blocs 4×4 CPU), stocke le résultat.loadCachedTexture(key)— lecture IDB directe depuis une clé connue.getActiveFormat()— retourne'bc7'|'astc'|'etc2'|'none'selon le GPU détecté.purgeTextureCache()— vide le store IDB entier.getTextureCacheStats()—{ entries, totalBytes, format }.- Invalidation automatique si
vendor::renderer::formatchange (fingerprint GPU). - Dégradation silencieuse si aucun format compressé :
{ compressed: false, url }→ Three.js charge l'image normalement.
src/render/texture-compressor.test.js— tests Vitest (~377 lignes) : init, compression BC7/ASTC/ETC2, hit/miss cache, stats, purge, passthrough sans GPU.src/channels/channels-media.js(modifié) — importcompressAndCacheTexture+getActiveFormat;_chLoadCompressedTexture(): uploadgl.compressedTexImage2Davec le bon enum WebGL par format, wrappé enTHREE.Texture; fallback Three.js siresult.compressed === false.
Formats GPU supportés
| Format | Extension WebGL | Plateformes |
|---|---|---|
| BC7 | EXT_texture_compression_bptc |
Windows / Linux — AMD, NVIDIA, Intel |
| ASTC | WEBGL_compressed_texture_astc |
Apple Silicon, Mali, Adreno (mobile) |
| ETC2 | WEBGL_compressed_texture_etc |
Android, Chrome OS |
Files
src/render/texture-compressor.js (~630 lignes), src/render/texture-compressor.test.js (~377 lignes).
[Unreleased] — 20 mai 2026
Added
- Phase 13.5 — Image locale → Shader procédural
- Drag & drop d'une image PNG/JPEG/WEBP/GIF → analyse locale complète (palette, luminance, fréquences spatiales) → shader GLSL procédural paramétrique généré par le LLM local.
- Zéro donnée envoyée : tout tourne en canvas 2D + LLM Worker existant, aucune image ne quitte la machine.
- Palette extraite par Median-Cut (6 couleurs dominantes) — algorithme utilisé par les éditeurs photo professionnels.
- Analyse de luminance : mean, RMS contrast, gradient moyen, répartition dark/mid/bright, flags high-contrast/dark/bright.
- Analyse de fréquences spatiales via DCT 8×8 blocs → 4 bandes → détection grain, smoothness, motifs répétitifs.
- Panneau UI avec prévisualisation, palette inline, métriques, génération streamée, Apply/Copy/Cancel.
- Raccourci
Ctrl+Shift+I· bouton « Img→Shader » dans la barre d'outils · entrée Command Palette. - 38 tests Vitest (38/38 ✓).
Added
- Phase 13.3 — Commandes en langage naturel (panneau local)
- Panneau AI Copilot refactorisé avec 4 onglets : Generate, Explain, Optimize, Refactor.
- Mode Generate : prompt libre → patch GLSL/WGSL généré, prévisualisé en diff Monaco inline (éditeur diff côte-à-côte dans le panneau) avant application. Boutons
✓ Apply/✕ Discard/Copy. - Mode Explain : utilise la sélection Monaco courante (ou tout le fichier si rien de sélectionné) → prose technique avec référence explicite aux uniforms Z-GL actifs (
iTime,iResolution,iMouse, etc.). Aucun code en sortie. - Mode Optimize : analyse
glsl-complexity.jsexistant (score ALU, branches, texture fetches, loops) → badge de complexité en temps réel dans le panneau → prompt structuré avec score intégré → suggestion de réécriture complète du shader prévisualisée en diff Monaco. - Mode Refactor : instruction en langage naturel (ex : "extrais cette boucle en fonction nommée fbmNoise") → shader refactorisé complet prévisualisé en diff Monaco. Interdit de renommer les uniforms Z-GL injectés.
- Diff Monaco :
monaco.editor.createDiffEditorinline-mode avec thèmevs-dark, lecture seule, sans minimap. Fallback en diff texte coloré (+/-) si Monaco non disponible. src/ai/ai-copilot-phase13-3.test.js— 40 tests Vitest couvrant les 4 modes : construction de prompts Explain/Optimize/Refactor, intégrationscoreGLSL, extraction de blocs de code fencés, dialectes WGSL/HLSL.
Changed
src/ai/ai-copilot-ui.js— refactorisé de ~555 à ~851 lignes. Largeur panneau élargie à 380px pour le diff. Import ajouté :scoreGLSLdepuis../shader/glsl-complexity.js. Fonctions ajoutées :_switchMode,_buildModePrompt,_showDiff,_showTextDiff,_hideDiff,_collectSelection,_handleApplyDiff,_handleDiscardDiff,_applyToEditor. Logique_handleGenerateunifiée pour tous les modes.
[Unreleased] — Tests · 20 mai 2026
Added
src/shader/parser-extended.test.js— 90 nouveaux tests unitaires pour le parser GLSL :parseShader(defines, const globals, littéraux inline, directives preprocesseur),parseSymbols(fonctions, variables, structs, surcharges, tableaux, fallback regex),typeCheck(arité builtins, fonctions utilisateur, entiers passés à float fns),inferRange,categorize,buildLabel.
Fixed
src/render/multipass.js—mpSetPassResScale: clampage descale=0retournait1au lieu de0.125(Number(0) || 1→isNaNguard).src/shader/hlsl-transpiler.js—hlslToGlslStructural: le semantic: SV_Targetn'était pas supprimé des signatures de retour avant{.src/shader/glsl-to-wgsl.test.js— TestsiDate/iSampleRate/iChannelTime/iChannelResolutionmis à jour : ces uniforms sont désormais dans le struct_SLUniforms(plus deconst). TestiFrame: regex flexible pour l'alignement.src/plugins/phase11.test.js—await import()à l'intérieur de blocsdescribe()remplacé par desimportstatiques (incompatible Rollup/Vitest).src/ai/local-model.test.js—require()CommonJS remplacé parawait import()ESM pour accéder au mocksafeLocalSet.
Stats
- 779 tests passent (18 fichiers) — 0 échec.
Added
src/render/hdr.js— module HDR complet : détection canvas HDR Tauri (Display-P3), activation/désactivation, 7 tone mappers GLSL (None,Reinhard,ACES Filmic,Filmic Hable,AGX,Reinhard étendu,Lottes), export 16-bit PNG viaFloat32Array→ImageData(fallback natif navigateur), export OpenEXR pur JS avec fallback tinyexr-wasm.src/render/hdr-ui.js— panneau UI draggable HDR : toggle canvas HDR (Tauri), sélecteur de tone mapper, boutons export 16-bit PNG / OpenEXR avec sélection des passes RGBA.src/render/perf.js(modifié) — 5 tone mappers supplémentaires dansPOST_FRAG:hable(),agx(),reinhardExt(),lottes(). Dispatch étendu de 2 à 7 modes dansapplyToneMapper.src/ui.html(modifié) — 5 nouvelles<option>dans#toneMapSel(Filmic Hable, AGX, Reinhard étendu, Lottes) + bouton#hdrToggleBtndans la barre d'outils.src/ui/editor.js(modifié) — lazy-loadhdr-ui.js, exportsopenHDRPanel,closeHDRPanel,toggleHDRPanel, raccourciCtrl+Shift+E, entrée Command Palette.src/ui/events.js(modifié) — importtoggleHDRPanel+ binding#hdrToggleBtn.
[1.1.19] — 2026-05-20
Added — Volume Rendering (iVolume, VDB, DICOM, Transfer Function)
src/render/volume-renderer.js— Moteur volume :uploadVolume(data, w, h, d)charge les données voxel enTEXTURE_3DWebGL2 (unit 6) ou en atlas 2D automatique si WebGL2 indisponible (tuil...
Z-GL 1.0.0 — The Premier Shader Desktop Environment
Z-GL — The Premier Shader Desktop Environment
Z-GL is a high-performance, professional-grade shader development environment designed for Windows. It provides a native workspace to write, test, and perform real-time graphics with industry-leading efficiency.
✨ Features for Artists & Creators
🖥️ High-End Rendering
- Hybrid Engine: Seamlessly switch between WebGL and WebGPU to leverage the full power of your hardware.
- Cinematic Post-Processing: Includes high-quality bloom, ACES tone mapping, vignette, and sRGB correction.
- Multi-Pass Support: Create complex effects using Buffer A/B/C/D architecture, fully compatible with the ShaderToy ecosystem.
- Ultra-Resolution Support: Render at fixed resolutions from 720p to 4K, or set custom sizes independent of your window scale.
✍️ Elite Editor Experience
- Smart Code IDE: Features full GLSL syntax highlighting, auto-completion, and hover documentation for all built-in functions.
- Live Diagnostics: Real-time error markers and warnings catch bugs instantly as you type.
- Automatic Parameters: Variables defined via
#defineorconstare automatically extracted into interactive UI sliders. - External IDE Support: Use "Watch Mode" to edit code in VS Code or Neovim while Z-GL updates instantly in the background.
🎹 Live Performance & Hardware
- MIDI Learn: Bind any shader parameter to your MIDI controller knobs or sliders with a single click.
- Audio Reactivity: Integrated FFT analysis for microphone or system audio to drive dynamic visuals.
- Native Windows Design: Features Windows 11 Mica and Acrylic effects with a dedicated system tray icon.
🛠 Shortcuts & Controls
| Shortcut | Action |
|---|---|
| Ctrl + S | Save current project |
| Ctrl + E | Export current frame as PNG |
| Ctrl + F | Auto-format GLSL code |
| F11 | Toggle Fullscreen Viewport |
| F1 | Open built-in GLSL documentation |
📦 Getting Started
- Installation: Run
Z-GL_Setup.exeto install as a native Windows application. - Projects: Save your work as
.zglfiles—a portable ZIP format that bundles your shader code and assets. - Import: Drag and drop any
.glsl,.frag, or.jsonfile directly into the window to begin.
📋 System Requirements
- OS: Windows 10 or Windows 11 (x64).
- GPU: NVIDIA GT 1030 / GTX 1080 or equivalent (DirectX 12 / WebGPU support recommended).
- Memory: Optimized for systems with 16 GB DDR3 or higher.
Author: Patrick JAILLET
Version: 2026.05 — 1.0.0 Release