Skip to content

v0.9.121

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Oct 07:59

Version 0.9.121

Eleven More Light Generators (library/sources/{cyclic_ca,metaballs,wave_ripples,harmonograph,aurora_ribbons,isometric_voxels,halftone_matrix,kali_set,girih_stars,glitch_blocks,voronoi_cells}/)

  • Eleven more generators for integrated graphics, on desktop and web. Cyclic CA (self-organising spirals), Metaballs, Wave Ripples (interference of orbiting wave sources), Harmonograph (a glowing oscilloscope curve), Aurora Ribbons, Isometric Voxels (a Q*bert-style cube field), Halftone Matrix (dots, LED pixels and CMYK screens), Kali Set (an inversion-fold fractal), Girih Stars (Islamic strapwork), Glitch Blocks and Voronoi Cells. None carries the GPU-intensive triangle.
  • Costs on an Intel UHD at 1080p range from about 4 to 20 ms. Aurora Ribbons and Halftone Matrix are the heaviest; lower their Quality first. Harmonograph evaluates its curve once into a small lookup strip and skips segments far from each pixel, and Metaballs has smooth glossy shading with a cheaper default Quality. Cyclic CA needs a few seconds to form its spirals, and Glitch Blocks reshuffles its sequence when you change Glitch Rate.
  • Four macro knobs each and a tooltip on every parameter.
  • Internal: stock ids in VisualSourceRegistry.DEFAULT_SOURCE_IDS, curated knobs and GeneratorDefaultsTest; Neighborhood, RatioPreset and Ribbons added to the BundledIsfRangesTest selector allowlist; web manifest entries and web/shaders/*.frag; user guide, rendering.md, licence and clean-room ledger rows. Only some per-source notes exist in .planning/light-sources-notes/.

Five Light Generators for Integrated Graphics (library/sources/{quasicrystal,thin_film,tunnel_scenes,video_feedback,hyperbolic_tiling}/, rendering/VisualSourceRegistry.kt, rendering/SourceDocRegistry.kt, presets/GeneratorDefaults.kt)

  • Five new generators that run comfortably on integrated graphics, on desktop and web. Quasicrystal (5 to 8 interfering gratings in four styles and four palettes), Thin Film (oil-slick iridescence), Tunnel Scenes (a synthwave grid, a Truchet tunnel or an N-sided wormhole, with no ray marching), Video Feedback (a classic feedback loop of zoom, rotation, drift and seed shapes) and Hyperbolic Tiling (a Poincare-disk {P,Q} tiling with edge glow). They carry no GPU-intensive triangle; the absence of the badge is the signal.
  • Measured about 2 to 6 ms per frame at 1080p on an Intel UHD (Tiger Lake GT1), one deck, at the defaults. Each has a Quality input for the rest. Video Feedback keeps a small persistent frame, so its cost is the same at any output size, and it is square, so a widescreen output shows about half of its height.
  • Four macro knobs each: Quasicrystal (Freq, Sharp, Spin, Drift), Thin Film (Flow, Scale, Film, Turb), Tunnel Scenes (Speed, Twist, Glow, Sway), Video Feedback (Zoom, Rot, Hue, Decay), Hyperbolic Tiling (Speed, Drift, Edge, Glow). Every parameter has a tooltip.
  • Internal: stock ids added to VisualSourceRegistry.DEFAULT_SOURCE_IDS; curated knobs in GeneratorDefaults.CURATED_KNOBS and GeneratorDefaultsTest; SeedShape, P, Q and Outside added to the BundledIsfRangesTest selector allowlist; web manifest entries and web/shaders/*.frag; user guide, rendering.md, licence and clean-room ledger rows.

Nebula Volume and Three Simulation Generators Join the Stock Generators (rendering/VisualSourceRegistry.kt, rendering/SourceDocRegistry.kt, presets/GeneratorDefaults.kt, library/sources/{nebula_volume,reaction_diffusion,fluid_ink,lenia}/)

  • Four new generators, desktop only. Nebula Volume (a ray-marched gas nebula with self-shadowing, a drifting inner light, a starfield and camera flight), Reaction Diffusion (Gray-Scott maze, worm, coral and spot patterns that grow and split), Fluid Ink (orbiting emitters stirring ink through an incompressible flow) and Lenia (a continuous cellular automaton of soft blobs, rings and stripes). They ship with the app, are restored if deleted, and are not part of the web player.
  • The three simulations run on fixed-size persistent grids (512, 384 and 256 square), so they cost the same at any output size and measured under 2 ms at 1080p on an RTX A2000 Laptop GPU. They re-seed themselves when the grid is empty, for example after a resize, and each has a Reseed latch (Reaction Diffusion, Lenia). They advance a fixed number of steps per frame, so they run faster at higher frame rates. They carry no warning triangle.
  • Nebula Volume carries the GPU-intensive triangle. The defaults take about 17 ms at 1080p on one deck; Quality, Lighting and Detail are the cost knobs, and the maximum of all three is very heavy (about 68 ms measured).
  • Lenia is a texture generator, not a creature simulator. It does not reliably produce the gliding creatures of the published Lenia; treat it as living bubbles, rings and stripes.
  • Four macro knobs each: Nebula Volume (Density, Cover, Turb, Speed), Reaction Diffusion (Regime, Diffuse, Speed, Relief), Fluid Ink (Force, Swirl, Turb, Fade), Lenia (Center, Width, Radius, Speed). Every parameter has a tooltip.
  • Internal: stock ids added to VisualSourceRegistry.DEFAULT_SOURCE_IDS; curated knobs in GeneratorDefaults.CURATED_KNOBS and GeneratorDefaultsTest; nebula_volume added to the StockGpuCostAuditTest heavy allowlist (LSD_COST 3) and to Source3DModeTest; the sims are LSD_COST 2. These are the first stock generators using PASSES (persistent FLOAT targets, one target per sub-step). No web/sync_manifest.json entry. Written from the published equations (rows in docs/developer/clean_room_provenance.md and docs/licenses/SHADERS_LICENSE.md); details in docs/developer/rendering.md; per-source notes in .planning/heavy-sources-notes/.

Escape Time Generator (library/sources/escape_time/)

  • New 2D generator, desktop only. Escape Time draws high-iteration Julia, Burning Ship Julia, relaxed Newton (three cubic roots) and Mandelbrot fractals with smooth colouring, orbit-trap glow, a fractional power and a Julia constant that orbits on its own (Morph Speed).
  • Detail scales the iteration cap and, above 0.75, turns on 2x2 antialiasing. It has its own Zoom (up to 3000x; fp32 goes blocky beyond that), Center X/Y and Rotation, and four colour modes. It carries the GPU-intensive triangle in the browser, though at the defaults it measured under 1.5 ms at 1080p on an RTX A2000 Laptop GPU.
  • Internal: stock id escape_time added to VisualSourceRegistry.DEFAULT_SOURCE_IDS, curated knobs, tooltips (SourceDocRegistry), FractalType added to the BundledIsfRangesTest selector allowlist, heavy-tag audit, user guide, rendering.md, licence and clean-room rows.

Five Heavy Raymarched Fractals Join the Stock Generators (rendering/VisualSourceRegistry.kt, rendering/SourceDocRegistry.kt, presets/GeneratorDefaults.kt, library/sources/{mandelbox,kifs,mandelbulb,pseudo_kleinian,apollonian}/)

  • Five new generators, desktop only. Mandelbox (box fold, sphere fold and a scale that can go negative, with a camera gliding in and out), KIFS (kaleidoscopic folds: Menger, Sierpinski, octahedral and mixed, with twist, morph and an endless self-similar zoom), Mandelbulb (animatable power, a Julia blend and a slow power swing), Pseudo Kleinian (a periodic mirror fold plus sphere inversion, flown through) and Apollonian (a sphere gasket, flown through). They ship with the app, are restored if deleted, and are not part of the web player.
  • Each has a Quality knob that scales ray-march steps, fold iterations and ambient-occlusion taps together, plus a Color Mode selector and a signed Flight Speed (negative reverses). The defaults are tuned for headroom: measured on an RTX A2000 Laptop GPU at 1080p, the defaults take roughly 5 to 11 ms per frame on one deck (Mandelbox 7.7, KIFS 4.8, Mandelbulb 5.2, Pseudo Kleinian about 11, Apollonian about 8.7). Raising Quality, or zooming in close, costs more. Two heavy decks plus a crossfade is the case to watch.
  • They carry the GPU-intensive warning triangle in the browser, like Icosa H3, Gyroid Hyperspace and Hyper-Slice. Expect them to run slowly on integrated graphics; lower Quality first.
  • Four macro knobs each, ready to play: Mandelbox (Scale, Fold, Radius, Speed), KIFS (Type, Scale, Twist, Morph), Mandelbulb (Power, Swing, Julia, Speed), Pseudo Kleinian (Slab, Invert, Core, Speed), Apollonian (Cell, Invert, Twist, Speed). Every parameter has a tooltip.
  • Internal: stock ids added to VisualSourceRegistry.DEFAULT_SOURCE_IDS; curated knobs in GeneratorDefaults.CURATED_KNOBS and GeneratorDefaultsTest; heavy allowlist in StockGpuCostAuditTest; Source3DModeTest expects them 3D. Each shader is LSD_COST 3, GLSL 3.30 only, with no web/sync_manifest.json entry (nothing in WebSyncTest or checkWebSync covers them). Written from the defining mathematics (rows in docs/developer/clean_room_provenance.md and docs/licenses/SHADERS_LICENSE.md); loop caps and timings in docs/developer/rendering.md; per-source notes in .planning/heavy-sources-notes/.

Heavy Shaders Get a GPU-Cost Warning in the Browser (rendering/isf/ISFModels.kt, ui/browser/PresetListPanel.kt, ui/browser/FXBrowserPanel.kt)

  • A warning triangle marks GPU-intensive stock shaders. Generators and effects whose author declared them heavy show a butter-coloured triangle at the right edge of their browser row, and the tooltip says "GPU-intensive: may run slowly on integrated graphics." Nothing is hidden or blocked; the badge only tells you what to expect. The raymarchers Icosa H3, Hyper Slice and Gyroid Hyperspace are tagged heavy.
  • New optional ISF header key LSD_COST (1 light, 2 medium, 3 heavy). Other ISF hosts ignore it, so shaders stay portable. Only 3 shows a badge; values outside 0-3 are clamped. Your own shaders in the stock folders can use it too.
  • Internal: ISFHeader.LSD_COST / gpuCost, AssetItem.gpuCost, PresetListPanel.drawCostBadge. Tagged in library/sources/ and its default_sources copy. Transition rows and saved presets do not badge yet. Test: StockGpuCostAuditTest.

FX Metaknob Links and Focus Knobs Get a Real Editor (ui/FxMetaBindingEditor.kt, ui/FxMetaEdit.kt, ui/BindingEditorParts.kt, rendering/isf/FxMetaBinding.kt, rendering/isf/ISFFilter.kt)

  • Edit what an effect's Metaknob drives, the same way you edit a source row's macro targets. In the Edit view, select a slot's Metaknob: the row strip shows one chip per linked parameter, Add Target (a menu of the parameters not linked yet, plus Dry/Wet) and the selected link's editor line: enable, link mode, response curve, step count, range bar, Min/Max and delete. The Edit bay shows the same editor for every link in a collapsible Metaknob links block under each slot header. Before, the only control was a right-click menu with link mode and invert.
  • All five response curves. Metaknob links now offer Linear, Exponential, Logarithmic, S-Curve and Step (with a step count), the same as macro targets, and use the same math. Existing links behave exactly as before.
  • Choose which parameters sit on the focus knobs. A collapsible Knobs block under each slot header lists the parameters in focus-mode knob order (knobs 2-4, three per page). Move them up or down, take them off the knobs, bring them back, or reset to the effect's own order. The order is saved with the slot and chain, and with Save as Default. A parameter the Metaknob drives shows a lock: its knob does nothing while the link is enabled. Without a custom order nothing changes (the effect's own order, minus what the Metaknob drives).
  • Fixed: focus knobs could go stale after changing a link. The Metaknob Link menu, the link buttons, Replace all links with... (formerly Retarget Metaknob) and Reset to Factory Default changed the links without updating knobs 2-4 or the page count, and their undo did not restore the links. They now update the knobs at once and Ctrl+Z puts the links (and the knob order) back. Dragging a range handle is one undo step.
  • Internal: FxMetaEdit is the single entry point for editing a slot's links and knob order (mutate, push a restore, re-sync FxMacroSync only when focusParameters changed). FxMetaBinding gained stepCount and delegates its transfer math to MacroCurve; FXSlotDto.knobLayout and FxDefaultDto.knobLayout are optional, so older presets load unchanged.

📦 Commits in v0.9.121

Changes since v0.9.120:

  • 0c674075 docs(planning): add in-app checklist and refresh compiled documentation site (greenjon)
  • c00eb132 docs(planning): mark MIDI phase 5 slice 1, binding editor and learn-into-profile done (greenjon)
  • 4bd65f2c docs(sources): notes with iGPU timings for the seven remaining light generators, drop the finished heavy/light source plans (greenjon)
  • 31f717fe perf(sources): harmonograph curve lookup pass with chunk culling, metaballs gel shading and cheaper default (greenjon)
  • 0e6cf947 feat(sources): eleven more light generators (cyclic_ca, metaballs, wave_ripples, harmonograph, aurora_ribbons, isometric_voxels, halftone_matrix, kali_set, girih_stars, glitch_blocks, voronoi_cells) (greenjon)
  • fad00a02 feat(sources): light generator batch for integrated GPUs (quasicrystal, thin_film, tunnel_scenes, video_feedback, hyperbolic_tiling) (greenjon)
  • 1245bcc9 feat(sources): heavy generator batch (mandelbox, kifs, mandelbulb, pseudo_kleinian, apollonian, escape_time, nebula_volume, reaction_diffusion, fluid_ink, lenia) (greenjon)
  • f6e54f3f fix(web): resync icosa_h3, hyper_slice and gyroid_hyperspace shaders after the LSD_COST tag (greenjon)
  • 5c476121 docs(planning): backlog triage and the FX Metaknob editor plan (greenjon)
  • da820701 feat(browser): warning badge for GPU-intensive stock shaders (optional ISF LSD_COST key) (greenjon)
  • 8f859ce1 docs: FX Metaknob link editor and knob layout (release notes, user guide, decisions, architecture, roadmap) (greenjon)
  • 9f66efb9 fix(fx): the Edit bay's single-slot focus view follows the slot's knob order (greenjon)
  • f234ffdb feat(fx): Knobs list in the Edit bay (reorder, hide, show, reset) (greenjon)
  • e0d42e09 feat(fx): per-slot knob layout (data, persistence, focus knobs) (greenjon)
  • 4e84d9e7 feat(fx): Edit bay lists each slot's Metaknob links with the full editor (greenjon)
  • 6592074e feat(fx): Edit-row strip edits a slot's Metaknob links (greenjon)
  • 3e2750e6 feat(fx): FxMetaBindingEditor and shared BindingEditorParts (greenjon)
  • cbe07a1e feat(fx): Metaknob bindings get the full macro curve set and step count (greenjon)
  • d2634f5a build: render on the NVIDIA GPU (PRIME offload) for gradle run on Linux (greenjon)
  • d6df3054 fix(fx): Metaknob binding edits go through FxMetaEdit (real undo, focus knobs re-sync) (greenjon)

🛡️ Automated Multi-Platform Verification

The following platform binaries passed automated smoke testing on GitHub-hosted runners:

  • ✅ liquid-lsd-linux-arm64.zip
  • ✅ liquid-lsd-linux-x64.zip
  • ✅ liquid-lsd-macos-arm64.zip
  • ✅ liquid-lsd-macos-x64.zip
  • ✅ liquid-lsd-windows-x64.zip