Downloads

Releases

Every Lux build, newest first. Lux is pre-1.0: each release is a prerelease, and every substantive merge ships the day it lands. Grab the latest and follow along in the devlog.

v0.45.0

Every binary now says which commit it came from. `lux --version` and the first line of your log file report `0.45.0+1073.gabc1234` instead of a bare version number that was equally true of a dozen different builds. When something breaks, the log now identifies the program that broke.

v0.44.0

Render failures now land on the node instead of in a terminal. A shader that will not compile, or a glTF file that is not there, turns the node red and shows the reason in the inspector. A shader the driver rejects outright now costs you the node rather than the whole session.

v0.43.4

The welcome samples now do what their cards say. The SDF Stars card actually animates (its Time node was wired to nothing), the PBR Chrome card is framed at the 42 degrees it authored instead of a silent 60, and every shipped sample is checked on the way in like the rest of the corpus.

v0.43.3

When a patch does not open the way you wrote it (a plugin this machine lacks, a pin that no longer exists, a wire that went with it), Lux now says so on screen instead of in a log file. A strip across the top names the file, counts what changed, and hands you the full list on hover.

v0.43.2

A node whose plugin is missing on this machine is no longer dropped on load and destroyed by the next save. It is held whole, written back byte for byte, and drawn on the canvas in amber where you left it, naming the plugin it is waiting for. Nodes tucked inside a subpatch are held the same way, wires and all. Deleting the node next door takes its wire with it instead of leaving the file naming something it no longer contains, and Ctrl+Z puts both back.

v0.43.1

Saves are byte-stable, so version control shows the one value you moved instead of a few hundred lines of reshuffled pins, and merge conflicts on pins nobody touched are gone with it. An open-and-save also stops deleting your project's title, author and description, which it had been doing quietly on every Ctrl+S. Existing patches settle their pin order on their first save and never move again.

v0.43.0

Output goes fullscreen on the display you pick, not the one it happens to be on. Choose the projector once in Project Settings and Lux saves it with the project, so the same rig comes up pointing at the same screen next time. Unplug it and output falls back to your primary display instead of refusing.

v0.42.1

The editor stops redrawing a patch that is not moving. Leave Lux open on a still patch and it now paints about one frame a second instead of twelve hundred, while anything that is actually animating (a Time node, a cue fade, an export, a scrolling spread wire) still runs at full rate and the first frame of a drag is never late. The canvas grid got the same treatment: zoom all the way out and it spreads its dots rather than packing 203,000 of them into a frame that could not show them anyway.

v0.42.0

Crash recovery finally says something. The launch after a crash shows a banner offering your patch back, and one click puts it on the canvas. It covers the crashes that never get to say goodbye too: pull the power mid-set and the autosave is what the banner hands you. Restore leaves your saved file untouched, and Dismiss archives the snapshot instead of deleting it.

v0.41.1

Subpatches keep what they hold. Ctrl+G no longer resets the nodes you group, Ctrl+Z takes the grouping back, and Ctrl+Shift+G opens the box again. Save and reload return the inner graph, its wires, its exposed pins, its layout and every inner node's running state, nested groups included. Previously the whole group was dropped on load.

v0.41.0

Cues do something now. Capture the look you have as a cue, press GO, and the output crossfades to the next one over the fade time you set, on the curve you chose. The cue panel is also reachable from a fresh project for the first time, which matters rather a lot given it was the only place to author cues.

v0.40.0

Every node now wears its live output on its body. Numbers read out as they change, colours show the colour, shape nodes draw the shape they are emitting, and texture nodes preview their own pixels straight off the GPU. The patch stops being a diagram of what should be happening and becomes a readout of what is.

v0.39.0

The 2D filter chain carries floating-point precision node-to-node instead of rounding to 8 bits at every hop, so deep filter stacks stop banding and highlights above white survive the trip. Photos and 3D renders get the same treatment. Blend and Composite now follow the W3C compositing spec: a transparent layer stays out of the way, Multiply and Screen match the formula, and half-opacity means half. Group and Merge gain a blend mode pin, and a blended group mixes against its own layers instead of the whole canvas behind it. Export Image saves the frame you are actually looking at, filters and all. Layer stacking that is finally boring in the best way.

v0.38.0

Eighteen nodes that produced no pixels however you wired them are gone from the browser, along with the polished documentation describing what they never did. The three that cannot draw yet now show up red and stay red, so a patch that is waiting on us no longer looks like a patch you misconfigured. Pasting a shader from shadertoy.com works again, as does the hello_shadertoy sample, which had been rendering a black square.

v0.37.9

Bloom now lands on the frame it belongs to. On real graphics cards the glow was arriving a frame late, and the standalone Bloom node never bloomed at all; both are fixed, with no cost to the performance the parallel-lane trick was meant to buy.

v0.37.8

WhiteBalance at its neutral default is now a true no-op instead of a faint green cast, and FXAA's description stops overselling itself as the full reference algorithm.

v0.37.7

Every 2D filter dropped onto a 3D render used to darken the frame four to five times over, before you touched a single control, and chaining filters made it worse. A neutral filter now leaves the picture exactly as it found it.

v0.37.6

Push a 2D particle fountain past ~132,000 particles and the whole frame used to blink out to a flat blank, silently. The renderer now caps at 100,000 draws, keeps the oldest particles for a steady spray, and logs when it does, so a heavy hand on the spawn dial thins the spray instead of taking down the frame.

v0.37.5

Loading a .cube LUT into the ColorGrade3DLUT node used to crash the whole app to the desktop, even with the film LUTs shipped in the box. Now the look loads and grades, and a headless test guards every multi-texture node against the same crossed-binding mistake.

v0.37.4

Instanced grids no longer vanish when you frame them from a corner. The culler used to judge every instance by the one anchored at the origin; now an instanced draw is kept whenever any of it could be on screen.

v0.37.3

Depth of field, ambient occlusion, and any other post-FX sitting downstream of a scene that stopped changing would quietly go black a few seconds after you let go of the patch. Fixed at both the per-frame and the idle-cleanup level, so a still scene stays on screen for as long as you leave it there.

v0.37.2

Curved and rotated meshes no longer develop see-through patches: the cluster culling maths is fixed three ways, and hidden-surface skipping is switched on for the first time. The clusters themselves are then rebuilt with the same library the rest of the industry uses, so that fixed maths finally has properly-shaped batches to work on. Your geometry renders whole, and faster.

v0.37.1

Brushed-metal and hair anisotropy now shade in the surface's own UV tangent frame instead of a fixed world-space heuristic, so the grain rotates with the mesh and texture-driven direction maps (like Khronos's AnisotropyBarnLamp) finally streak where they're authored to.

v0.37.0

Imported glTF materials now honour KHR_texture_transform (per-texture offset, rotation, and scale) and a second UV set on every channel, so tiled fabrics, rotated wood grain, and UV1 occlusion maps all render at their authored scale instead of smearing across the surface.

v0.36.0

Imported glTF materials arrive whole: clearcoat, sheen, transmission, anisotropy, volume, emissive strength, and ior all render as authored, texture maps included. Tight lacquer highlights now survive rasterisation, verified against the Khronos conformance assets.

v0.35.0

Characters play their authored animations: SkeletonPose is now a real clip player with time, speed, and loop controls, driving the GPU-skinned character exactly as keyframed. The placeholder wiggle is gone.

v0.34.0

Imported glTF assets now arrive in the pose and place their file declares: scene-node transforms apply on import, multi-part scenes assemble correctly, and the famous battle-damaged helmet finally faces the camera with its HUD glowing.

v0.33.0

glTF textures now sample the way the file declares: per-texture wrap and filter modes reach the GPU. Assets with repeating UVs render their actual textures instead of edge-pixel smears, tiling textures tile, and pixel-art stays crisp.

v0.32.1

Fixed the leak that made every headless render permanently keep about 100MB of memory. Exports, render-farm jobs, and CI runs now release what they use instead of building a staircase to the swap file.

v0.32.0

Chrome mirrors now. The reflection blur schedule is logarithmic and keyed to resolution, brushed metal actually streaks, clearcoat reflects at its own polish, and a dark glass ball's rim out-reflects its centre the way Fresnel intended.

v0.31.0

First real transparency: transmissive materials render as sorted see-through glass with Fresnel rims and correct glass-behind-glass compositing, gated by four behavioral tests including an anti-popping orbit sweep.

v0.30.0

All sixteen material nodes now document exactly the physics they run, enforced by a permanent over-claim gate. Anisotropic materials bend their environment reflections along the grain instead of flatly dimming them.

v0.29.0

The BSDF node stack reaches the GPU: clearcoat, sheen, iridescence, anisotropy, subsurface, transmission and volume parameters now shade for real, each pinned by a characteristic-behaviour gate, and every material node's docs now describe exactly what executes.

v0.28.0

Specular anti-aliasing lands in both mesh shaders: glossy normal-mapped surfaces keep a stable highlight under motion instead of firefly-sparkling, and surfaces the pixel can resolve are left untouched. Closes the AA and temporal epic.

v0.27.0

RenderScene gains a render-resolution dial: Temporal50/67/75 render the 3D pass smaller and a motion-vector temporal upscaler reconstructs full size. The Upscale node sheds its five decorative pins and now documents the bicubic filter it actually runs.

v0.26.0

Temporal anti-aliasing is on by default and wired to real per-object motion vectors. Moving and spinning geometry gets smooth edges with zero ghost trailing, static scenes lose 94 percent of their stair-step edges, and your patches need no changes at all.

v0.25.0

PCSS soft shadows land on the sun path: contact-sharp at the base, softening with occluder distance, on by default. The shadow_filter pin wakes up with four working options (hard, pcf, pcss, stochastic), each pixel-verified distinct.

v0.24.2

Spring-clean release: the parked virtual shadow map subsystem (never wired, never rendered a pixel) leaves the tree, along with the stale docs claiming otherwise. Shadows render exactly as before, minus several thousand lines of luggage.

v0.24.1

The 1000-light stress scene drops from 25 ms to 4 ms per frame on an RTX 5070: the bounce-light cache now samples sixteen lights per ray instead of interviewing all thousand. Hardware baselines re-baked at the new numbers; the 200-light club renders offline at roughly 300 fps.

v0.24.0

Area lights get real geometry: rect, disk, sphere, and tube now shade via the canonical LTC tables instead of all rendering as the same one-metre point light. IES photometric profiles shape beams end to end. A batten throws a bar of light, a sphere throws a circle, and the difference is no longer zero pixels.

v0.23.0

Point and spot lights cast real shadows: cube shadows for points, cone views for spots, refreshed on a round-robin budget so a 200-light rig keeps its framerate. A perspective-depth bias bug that silently erased shadows past mid-range was caught by the feature's own test and fixed in metres.

v0.22.0

Shadows now survive every sun direction: a cascade-fitting bug clipped occluders whenever the sun ran along the camera axis, fixed and guarded by a 48-direction sweep. The patch loader rejects typo'd pin names, and eleven bounce-light nodes that were never registered finally appear in the browser.

v0.21.0

Water turns transparent: refracted look-through with per-metre absorption, real wave-driven caustics dappling the sea floor, and a RiverFlow node that actually transports and churns the wave field. The whole environment family now ends in pixels.

v0.20.0

The WaterSurface node drives a real Tessendorf FFT ocean: JONSWAP spectrum, four wave cascades, choppy crests, whitecap foam, and a displaced surface that depth-sorts against your scene. Wind 1 is a pond, wind 18 is a storm, and the sunset patch finally has a sun-glitter path.

v0.19.0

The physically based sky is finally drawn: Hillaire horizon gradients, a sun disc that reddens at the horizon, and a sun elevation pin that behaves like the sun. Clouds and fog now compose over a real sky in the right order.

v0.18.0

Volumetric clouds render for real: traced, temporally accumulated and composited cumulus with shadowed bases and sky gaps, masked behind your geometry. Clouds and fog no longer require wiring a SkyDome first.

v0.17.0

Volumetric fog composites into the frame for real: geometry dissolves with distance, near subjects punch through, and density behaves like physics. The placeholder background tint for sky, clouds, fog and water is deleted.

v0.16.3

The volumetric fog system now computes real froxel fog every frame, verified against Beer-Lambert physics rather than its own counters. Groundwork for the depth-aware fog composite landing next.

v0.16.2

Lux is now safe to script: unknown flags print usage and exit instead of opening a window, --help actually helps, headless dumps honour your patch's declared resolution, and --dump-editor works standalone.

v0.16.1

Heavy scenes export reliably on NVIDIA hardware, and a failed frame capture is an error you can read instead of an empty image you discover later. The readback path stops returning nothing and calling it success.

v0.16.0

Adding a node can no longer blank your output. The patch output is chosen deterministically, a menu-bar selector lets you pin any sink as the show, and the driving node wears an on-air lamp so you always know what you are looking at.

v0.15.3

Space opens the node browser and Tab opens fuzzy search, exactly as the empty canvas promises. The cue transport keeps its keys, but only while its panel is open, so the fastest route from idea to node is no longer on loan to a feature you could not reach.

v0.15.4

Generative patches now render in the live editor window and preview panel, not just in exports. Under the hood the texture pool stops allocating a fresh texture every frame and recycles one instead, so memory stays flat through a long set instead of sawtoothing toward a garbage-collection cliff.

v0.15.0

Lux's first global illumination: surfaces now catch the colour of whatever sits next to them. A white object beside a red wall picks up a red blush on its facing side, indirect and directional, the way real light spills off one surface onto the next. Opening a 3D scene in the windowed editor now renders live (it had been drawing black), and you can launch Lux with a .lux patch straight from the command line.

v0.13.0

Imported glTF models now render with their own textures: base colour, normal, metallic-roughness, emissive, and occlusion maps all route through to the GPU in the correct colour space, on static props and animated characters alike. Until now every import showed up as a flat grey version of itself. Bring your own model library and it looks like itself.

v0.12.0

The default 3D look now runs the real ACES 2.0 transform, the same one film and VFX pipelines use, matched to the reference within a single step of 8-bit colour. Mid-grey sits where it should and bright colours roll off correctly, so every PBR scene reads right out of the box.