• v0.17.0 7295a15f67

    v0.17.0 Stable

    jkaindl released this 2026-06-02 18:18:23 +00:00 | 75 commits to main since this release

    Changed

    • Refreshed the built-in presets for more impact and to better show off
      the tool's range: flow is now a visible, saturated vector field (was
      nearly black); nebula a vivid magenta per-channel field; composite a
      dramatic layered magma; circuit brighter with more structure; default a
      higher-contrast viridis; clouds more dramatic storm-grey; terrain more
      banded/topographic. Affects the studio preset chips and the embeddable
      <perlin-noise preset="…"> element.
    Downloads
  • v0.12.0 edb8c327ce

    v0.12.0 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 100 commits to main since this release

    Added

    • <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 the params JS 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 (except src, which needs HTTP).
    • examples/embed.html — embedding demo: a full-bleed hero, preset
      tiles, and a JSON-src tile.
    • 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
      headless PerlinEngine class 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 a resolveParams helper, so
      the studio and the element resolve presets identically.
    Downloads
  • v0.13.0 c86cf94623

    v0.13.0 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 92 commits to main since this release

    Added

    • 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: #status is now a polite live region (assertive on
      error), the progress bar exposes role=progressbar with aria-valuenow
      (per-frame announcements throttled so assistive tech isn't flooded), the
      Color-mode select and gradient-stop inputs are labelled, number fields
      carry their min/max bounds, 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 uses dvh with
      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/perlin4 value-range smoke check deterministic
      (seeded sampling) so it can no longer intermittently block the deploy.
    Downloads
  • v0.14.0 55cbd47e2a

    v0.14.0 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 88 commits to main since this release

    Added

    • Custom colours by hex value. In the custom gradient editor each colour
      stop now has a #rrggbb text 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
  • v0.14.1 6c1a6739bd

    v0.14.1 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 85 commits to main since this release

    Added

    • 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
  • v0.14.2 86b87688e0

    v0.14.2 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 83 commits to main since this release

    Changed

    • 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
  • v0.15.0 81b3ae2dad

    v0.15.0 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 80 commits to main since this release

    Added

    • 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
  • v0.16.0 9d593396d5

    v0.16.0 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 78 commits to main since this release

    Changed

    • 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
  • v0.16.1 35f1a25e4f

    v0.16.1 Stable

    jkaindl released this 2026-06-02 14:36:09 +00:00 | 77 commits to main since this release

    Changed

    • 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
  • v0.6.1 94ec60af23

    jkaindl released this 2026-05-27 15:35:19 +00:00 | 122 commits to main since this release

    Patch release.

    Fixed

    • aurora built-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. Total assets/*.png size drops from ~1.4 MB to ~370 KB with no visible quality loss — Perlin noise palette-quantises well.

    Full changelog: CHANGELOG.md.

    Downloads