Skip to content

Releases: repsac/luxel

v0.1.0·#32

Choose a tag to compare

@repsac repsac released this 23 Jun 05:24
091955e

Luxel v0.1.0 · #32

A teaching-focused release. The headline is the Scratchpad, a GLSL expression REPL for "print-debugging" shader math, plus pixel-pinning tools that tie the Inspector, an on-canvas crosshair, and the Scratchpad to one chosen pixel. Adds a four-pane grid layout and SHA256 checksums after packaging. Existing .luxel.json files load as-is; scenes that use the Scratchpad pane or the 2x2 grid require this build or newer.

Scratchpad

  • New Scratchpad view (add it from any slot's view dropdown): type a GLSL expression and see its value at the pinned pixel, evaluated through the real naga/wgpu path so results match the live shader.
  • All scene uniforms (iResolution, iTime, the camera uniforms, iObjectPosition) and gl_FragCoord are in scope, prefilled from the current scene; the pixel and iTime are overridable in the header.
  • Store and reuse values with name = <expr>; they snapshot and replay on later lines.
  • Tab autocompletes built-ins, uniforms, variables, and swizzles (type . after a vector); / move the suggestion list or walk expression history.
  • Commands: :builtins lists what's available, :help <name> shows a signature, :vars/:reset manage variables, :clear clears the scrollback.
  • Color-like results show a swatch, and calling a built-in with the wrong arguments reports its real signature instead of a generic "unknown function" error.

Pixel Inspector

  • Pin a specific pixel from the Inspector's Pin (x, y) field, or hover the render and press Cmd+Shift+I (macOS) / Alt+Shift+I (Windows/Linux) to pin the pixel under the cursor. The readout stays on that pixel even with interactive Inspect off and when the cursor leaves the canvas.
  • The Inspector shows both the integer Pixel index and the FragCoord (the fragment center, so pixel (0,0) is gl_FragCoord (0.5, 0.5)), alongside UV and color. The Scratchpad's gl_FragCoord uses the same pixel-center value, so gl_FragCoord.xy / iResolution.xy matches the inspector UV.
  • The Crosshair toggle in the Render header marks the pinned pixel on the canvas with clearly visible guide lines (a dark halo under a bright line, readable over light or dark content) and a center box. The pinned pixel is shared with the Scratchpad. It is resize-aware: if the pixel falls outside the current render, the Inspector says so and the crosshair hides until it is back in range.
  • Inspect and the crosshair default to off and are per-session, so the viewport starts clean every launch.

Layout

  • New 2 x 2 Grid layout preset: Render and Editor on top, Scratchpad and Inspector below. The two columns share one vertical splitter so they stay aligned, with a single horizontal splitter between the rows. Each pane keeps its own view dropdown.

UI and Accessibility

  • One font-zoom hotkey, Cmd/Ctrl + +/-/0, scales whichever panel the cursor is over (Editor, Inspector, Console, Scratchpad), replacing the separate per-view bindings.
  • Cmd+I (macOS) / Alt+I (Windows/Linux) toggles the pixel inspector.
  • Button tooltips reworded to explain each control's use-case; tooltips that were missing one now have it.

Packaging

  • build.py --release and package.py now print the SHA256 of each installer deliverable (.dmg / .msi / .exe / ...) after a successful build, so release checksums are available without a separate step.

Platform

  • macOS (Apple Silicon, Metal) and Windows (DX12/Vulkan).
  • Bundle ID com.edcaspersen.Luxel. MIT licensed.

Builds

  • macOS (Apple Silicon)
    • Luxel_0.1.0_aarch64.dmg
    • Checksum: de2e45248b0fabece9baa6712d36c207049bfc82d63c6174e52211ed726b0c2c
  • Windows (x64)
    • Luxel_0.1.0_x64-setup.exe
    • Checksum: dbbe5df4c7b0a7304a30cdbee2b3e8e3d08d5e22d259a8c130c3b28bc00e49d2

v0.1.0·#29

Choose a tag to compare

@repsac repsac released this 15 Jun 01:07
f794f1f

Luxel v0.1.0 · #29

A stability-and-workflow pass over the shader workbench: more faithful Shadertoy color, a real save/open story for scene files, persistent layouts, and a long list of UI and accessibility fixes. No scene-file schema changes, so existing .luxel.json files load as-is.

Rendering

  • Fixed an sRGB double-gamma bug. The offscreen target is now Rgba8Unorm, so Shadertoy shaders that gamma-correct themselves no longer render washed out. Renders are intentionally a touch darker than before; that's the corrected, Shadertoy-matching output.
  • iMouse is now live. Left-drag in the render view drives it using Shadertoy conventions (xy is the drag position, zw is the click position, sign flips on release). The Inspector shows the current value.
  • Oversized renders are rejected with a clear error instead of crashing the app, and the renderer's internal caches survive a failed frame instead of wedging.

Camera

  • Interrupted drags (OS gestures, window drags) no longer leave the camera or splitters stuck following the cursor.

Editor

  • Compatibility switching with unsaved edits now uses a native confirm dialog instead of the unreliable in-webview window.confirm.

Pixel Inspector

  • The Pixel section keeps the last sampled values when the cursor leaves the canvas instead of going blank. The hover and off states show as a small note next to the section title.
  • New shortcut: Cmd+I (macOS) or Alt+I (Windows/Linux) toggles the inspector.

Layout

  • Set any layout as the default (presets or your own arrangement). It's restored on startup and for new scenes.
  • A scene's panel layout is saved inside the scene file and restored on open, so a specific scene can carry its own arrangement without it becoming a global preset.
  • Saving a custom layout uses an inline name field instead of a browser prompt.

Scene files

  • Opening a scene now actually tracks the file. The toolbar shows its name and Save writes back to it instead of prompting for a name every time.
  • Save As: hold Shift while clicking Save, or press Cmd/Ctrl+Shift+S, to choose a new destination.
  • Closing the window with unsaved changes now prompts to Save / Don't save / Cancel instead of discarding your work.

UI and Accessibility

  • Keyboard focus rings (:focus-visible) on all controls. Modals are proper dialogs with focus management and labeled close buttons. Toggle buttons expose aria-pressed.
  • Raised several low-contrast text colors to meet WCAG AA.
  • Fixed the render-panel header controls scattering across the bar.
  • Errors in the console now show real messages instead of [object Object], and a status-line polling leak was fixed.

Platform and Security

  • Enabled a strict Content-Security-Policy and removed unused filesystem and shell capabilities and plugins, trimming the app's attack surface.

Platform

  • macOS (Apple Silicon, Metal) and Windows (DX12/Vulkan)
  • Bundle ID: com.edcaspersen.Luxel
  • MIT licensed

Builds

  • Windows
    • Luxel_0.1.0_x64_en-US.msi
    • Checksum: 0DE9CD2328F9DE9A197B392FBAA41B2B4CAE3FA37C13C974D3047AF1D810F695
  • macOS
    • Luxel_0.1.0_aarch64.dmg
    • Checksum: 32309da8e184e9455126ce279b1e2ddfad17a690bfcff80396ceea49e4af4fe3

v0.1.0·#26

Choose a tag to compare

@repsac repsac released this 10 Jun 14:41
ab49beb

Luxel v0.1.0

First public release. Luxel is a local GLSL shader workbench built on Tauri 2, wgpu, and naga. Write Shadertoy-style or raw GLSL fragment shaders, see them render in real time, and inspect the output with camera tools and a debug console.

What's in this release

Rendering

  • wgpu-based offscreen renderer with naga GLSL-to-WGSL cross-compilation
  • Shadertoy (mainImage) and raw GLSL (main) compatibility modes
  • Auto and manual render modes - auto re-renders on every change, manual lets you control when the GPU fires
  • Render quality multiplier (1/4x to 2x) for tuning speed vs. fidelity during navigation
  • PNG export of the current render

Camera

  • Orbit, pan, dolly controls in the render canvas
  • Camera bookmarks (save/restore/delete positions)
  • Frustum overlay toggle
  • Full camera state exposed to shaders via uniforms (iCameraPosition, iCameraFov, iCameraForward, iCameraRight, iCameraUp)

Timeline

  • Frame scrubbing with iTime and iFrame uniforms
  • Playback controls with forward/reverse and configurable FPS
  • Loop toggle for continuous playback

Editor

  • GLSL syntax highlighting via CodeMirror
  • Scalable font size (Cmd/Ctrl + +/-)
  • Built-in example shaders for both Shadertoy and raw GLSL modes
  • Shader compilation errors mapped back to user source line numbers

Pixel Inspector

  • Toggle a footer bar in the render view showing pixel coordinates, resolution, UV, and RGB under the cursor
  • Dedicated Inspector panel view with uniforms, camera state, pixel data, and render stats
  • Scalable inspector font (Shift+Cmd/Ctrl + +/-) for screencasting

Layout

  • Flexible slot-based panel system with 7 layout presets
  • Drag-to-resize splitters between panels
  • Per-slot view picker (render, editor, console, inspector, empty)
  • Window state persistence across sessions

Platform

  • macOS (Apple Silicon, Metal) and Windows (DX12/Vulkan)
  • Bundle ID: com.edcaspersen.Luxel
  • MIT licensed

Builds

  • Windows
    • Luxel_0.1.0_x64_en-US.msi
    • Checksum: c7d095751e51ae4762665c888fb441bce5f31d2bf9b4605c0dfc3094e6815fa1
  • macOS
    • Luxel_0.1.0_aarch64.dmg
    • Checksum: f542959121d86d2b312025f42a7953af605ab3d782b66a520ccf89f608b7d657