-
v0.17.0 Stable
released this
2026-06-02 18:18:23 +00:00 | 75 commits to main since this releaseChanged
- Refreshed the built-in presets for more impact and to better show off
the tool's range:flowis now a visible, saturated vector field (was
nearly black);nebulaa vivid magenta per-channel field;compositea
dramatic layered magma;circuitbrighter with more structure;defaulta
higher-contrast viridis;cloudsmore dramatic storm-grey;terrainmore
banded/topographic. Affects the studio preset chips and the embeddable
<perlin-noise preset="…">element.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Refreshed the built-in presets for more impact and to better show off
-
v0.12.0 Stable
released this
2026-06-02 14:36:09 +00:00 | 100 commits to main since this releaseAdded
<perlin-noise>web component — a renderer-only custom element for
embedding a looping Perlin animation on any page. Configure with a
built-in preset name (preset="lava"), a JSON preset exported from the
studio (src="…"), or theparamsJS property. Responsive: the render
resolution tracks the displayed size × devicePixelRatio, capped at
max-resolution(default 1280); the preset's declared size acts as a
reference composition so the look is resolution-independent. Respects
prefers-reduced-motion(renders one still frame) and pauses while
off-screen. Plain script, file://-safe (exceptsrc, which needs HTTP).examples/embed.html— embedding demo: a full-bleed hero, preset
tiles, and a JSON-srctile.- Seven smoke assertions for
resolveParams(named gradient → stops,
custom-stop passthrough, no input mutation, viridis fallback). Total
smoke battery: 39 → 46.
Changed
perlin-engine.js— the worker lifecycle, RAF loop, and FPS
smoothing were extracted from the studio controller into a reusable
headlessPerlinEngineclass consumed by both the studio and the new
element. No behavioural change to the studio; the worker source and
skip/stale logic are reused verbatim.perlin-presets.js— gradients and built-in presets moved out of
the controller into a shared module with aresolveParamshelper, so
the studio and the element resolve presets identically.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.13.0 Stable
released this
2026-06-02 14:36:09 +00:00 | 92 commits to main since this releaseAdded
- Low-resolution pixel-block look. The output canvas now fills its frame
with nearest-neighbour upscaling, so a small Width/Height (e.g. 64×64)
renders as crisp, deliberate pixel blocks instead of a tiny image at native
size. Aspect ratio is preserved (matte bars where it doesn't match the
frame), and WebM playback scales the same way. Display-only — exported
PNG/WebM still use the native render resolution. - Live value readout beside every parameter slider (the transport time
slider already had one); custom-gradient stops show their position too. - Stop control for WebM recording — the Export button becomes "Stop
recording" during a capture and yields the partial clip, instead of locking
the UI until every frame is done. - A hint at the Export controls noting that WebM is RGB-only and ignores an
active mask.
Changed
- Accessibility:
#statusis now a polite live region (assertive on
error), the progress bar exposesrole=progressbarwitharia-valuenow
(per-frame announcements throttled so assistive tech isn't flooded), the
Color-mode select and gradient-stop inputs are labelled, number fields
carry theirmin/maxbounds, and Layer-2 sub-fields are disabled while
Layer 2 is off. - Mobile / touch: 24 px touch targets and 16 px form inputs on coarse
pointers (no more iOS zoom-and-stick), and the canvas area usesdvhwith
a floor so the transport stays on-screen on short viewports. - PNG export now confirms in the status line, matching every other action.
Fixed
- The live canvas could remain hidden behind the WebM
<video>preview after
an export — any later edit repainted a hidden canvas and only a reload
recovered. Any render now restores the live canvas. - The "Clear mask" button was permanently disabled (it toggled a mis-named
element reference). - Number fields could show an un-clamped value (e.g.
9999) while the engine
rendered the clamped one (1024), and a saved preset recorded the
visible-but-wrong number. Fields now snap into range on commit. - A worker crash during recording could hang the app indefinitely; pending
frame requests are now rejected so it falls back to the main thread.
Tests
- Made the
perlin3/perlin4value-range smoke check deterministic
(seeded sampling) so it can no longer intermittently block the deploy.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Low-resolution pixel-block look. The output canvas now fills its frame
-
v0.14.0 Stable
released this
2026-06-02 14:36:09 +00:00 | 88 commits to main since this releaseAdded
- Custom colours by hex value. In the custom gradient editor each colour
stop now has a#rrggbbtext field, synced both ways with the swatch
(type/paste a hex or pick visually). Liberal parsing (#rrggbb,rrggbb,
3-digit#rgb); invalid input reverts on blur. - Paste a whole palette. A "Paste palette" box turns a pasted list of hex
codes (any separator, with or without#) into an evenly-spread gradient
in one go — for matching a brand/design spec exactly (≥2 colours, capped
at 16). - Custom palettes in Posterize mode too, via a new "Custom …" option —
previously custom stops were only reachable in Gradient mode.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Custom colours by hex value. In the custom gradient editor each colour
-
v0.14.1 Stable
released this
2026-06-02 14:36:09 +00:00 | 85 commits to main since this releaseAdded
- A visible "Custom hex palette →" button under the Color-mode selector
that jumps straight to the custom gradient editor (switches to
Gradient + "Custom" and reveals it). The palette was previously reachable
only via Color mode → Gradient → "Custom …", two dropdowns deep.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- A visible "Custom hex palette →" button under the Color-mode selector
-
v0.14.2 Stable
released this
2026-06-02 14:36:09 +00:00 | 83 commits to main since this releaseChanged
- Accessibility contrast pass (round 2, slice 1). Faint informational text
(--text-faint) now meets WCAG AA (≥4.5:1) in both themes. Small accent text
(section numbers, the time readout, the status prefix, the custom-palette
button) uses a deeper green in the light theme via a new--accent-text
token, and the light primary-button label now sits on a deeper green so the
white text passes AA. Resting field/section borders are lifted for low-vision
visibility — a middle ground that keeps the hairline look, with the focus
ring remaining the fully WCAG-compliant indicator. Dark-theme accents are
unchanged.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Accessibility contrast pass (round 2, slice 1). Faint informational text
-
v0.15.0 Stable
released this
2026-06-02 14:36:09 +00:00 | 80 commits to main since this releaseAdded
- Visible transport state. The canvas corner tag now reflects the real
state — LIVE (green, pulsing), PAUSED (dim), or REC (red) —
instead of always reading "LIVE" with a forever-pulsing dot. - A first-paint loading indicator shows until the first frame actually
renders (the status no longer claims "Ready" before the canvas has pixels). - A persistent "main thread" badge appears when the compute worker can't
start, instead of a transient suffix shown only during playback.
Changed
- One clear primary action. The Play button no longer wears the glowing
primary treatment; it fills with accent only while running and is neutral
when idle, leaving WebM export as the single primary call-to-action. - Unified the sidebar dividers — the lone dashed rule is now solid, and nested
switch rows inside colour sections drop their redundant inner box.
Fixed
- A compute worker that starts but then dies (e.g. CSP under
file://) now
repaints on the main thread instead of leaving the canvas blank, and the
first-paint indicator clears reliably.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Visible transport state. The canvas corner tag now reflects the real
-
v0.16.0 Stable
released this
2026-06-02 14:36:09 +00:00 | 78 commits to main since this releaseChanged
- Sidebar reorganised for first-run flow. Presets now sit at the top (pick
a look first), then the core parameters (Resolution, Noise, Color, Loop),
then the advanced sections (Layer 2, Warp), then Mask and Export. - Recording length & rate live with the recorder. The frames/fps fields
moved out of the transport bar into the Export section, next to the WebM
button they drive — they never affected live playback. - Progressive disclosure. The Layer-2 controls appear only when Layer 2 is
enabled, and the Warp scale appears only when Warp strength is above 0, so
the panel stays uncluttered until a feature is in use.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Sidebar reorganised for first-run flow. Presets now sit at the top (pick
-
v0.16.1 Stable
released this
2026-06-02 14:36:09 +00:00 | 77 commits to main since this releaseChanged
- Internal: consolidated the ad-hoc font sizes into a small type-scale of
--fs-*tokens. A few near-duplicate sizes snapped to the nearest step
(≤0.5px shifts, on minor chrome only); no functional change. (The full
spacing-token ramp was intentionally deferred — see notes.)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Internal: consolidated the ad-hoc font sizes into a small type-scale of
-
released this
2026-05-27 15:35:19 +00:00 | 122 commits to main since this releasePatch release.
Fixed
aurorabuilt-in preset now matches the README gallery image. The previous values produced a monotone cyan; the new params (hsvHueShift=0.30, hsvHueRange=0.48, plus richer scale/octaves) yield the green → cyan → blue → violet aurora shown in the README.
Changed
- All README / OG images recompressed with
pngquant --quality=65-90. Totalassets/*.pngsize drops from ~1.4 MB to ~370 KB with no visible quality loss — Perlin noise palette-quantises well.
Full changelog: CHANGELOG.md.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads