🛠 Free Tools & AI Utilities ↗

Get in touch

Tell us a little about your project and we'll follow up by email with licensing and download details.

Sabine

Sabine is built for architecture and acoustics practices around one idea: a room is an instrument before it is a space. A real WebGL2 FDTD wave solver propagates sound through an RGBA16F pressure field against genuine Schroeder diffuser geometry, and reverberation time is computed live with the actual Sabine and Eyring equations — the same math run server-side and in the browser. CSS scroll timelines pace the reveal, and the build ships with no third-party JS.

sabine.kilnwp.com LIVE
Sabine Open live preview ↗

Highlights

  • The background is a sound field, not a picture of one. A single fixed WebGL2 canvas sits behind the WHOLE document — not a hero widget that exists on the front page and nowhere else — integrating the 2D acoustic wave equation <code>d²p/dt² = c²∇²p</code> by finite-difference time-domain leapfrog, with the Courant number held at 0.5 against the 1/√2 limit the scheme has in two dimensions. It is never torn down between sections
  • The boundaries carry real absorption coefficients, so the physics is what you see: a rigid wall returns the wave inverted and standing waves build between parallel surfaces — the flutter echo that makes a bad room bad — while an anechoic boundary returns nothing and the field simply goes quiet. Five rooms: shoebox, fan plan with a curved rear wall, a quadratic-residue diffuser whose well depths are <code>n² mod 7</code> (the real Schroeder sequence, and genuinely why such a wall is built in that pattern), anechoic chamber, barrel vault
  • What is drawn is the pressure GRADIENT rather than the pressure — a schlieren reading. That is both what a real photograph of sound in air images, which is why pictures of sound are thin bright wavefronts on a dark ground, and the reason the field stays dark enough almost everywhere to carry body text. An earlier pass drew the pressure directly at high gain: correct physics, unusable as a background
  • Scrolling deforms the room instead of switching it. Sections declare <code>data-room</code> and <code>data-level</code>, and the two rooms currently on screen are blended by the fraction of the viewport each covers, so the boundary is always partway between them and the same wave carries across the join into the new shape — which is not something a per-section widget can do
  • It refuses rather than degrades where degrading would lie. Pressure is signed, small and fed back into itself every step, so in eight bits it quantises and the Laplacian amplifies that into a fixed reticulated pattern within seconds; the solver therefore demands RGBA16F and falls back to a composed static ground without <code>EXT_color_buffer_float</code>. Capability tiers pick the grid, a live frame-time watchdog overrules them, and the loop stops when the tab is hidden
  • The reverberation figures are computed, not quoted: published octave-band absorption coefficients run through Sabine’s own <code>RT60 = 0.161V/A</code> and through Eyring’s correction, by the same two equations in PHP on the server and live in the browser. BOTH are always shown, because Sabine over-predicts in an absorptive room — a known limitation of the equation the practice is named after — and the gap between the two is itself a reading of how dead the room has become
  • On a project page the interactive bench is seeded from THAT building’s own recorded dimensions, brief and surface schedule, so a visitor is handed the actual room and invited to change it, rather than a generic hall that would be quietly describing a different building. Room modes and the Schroeder frequency come off the same numbers
  • A layout archetype found nowhere else in the catalogue: the octave-band grid — eight columns with a persistent frequency tick rail, the measure the whole trade reads by. No section is allowed to paint over the field; every one is transparent and text sits on glass scrims. Newsreader over Space Grotesk, self-hosted, Latin subset
  • Not one third-party JavaScript library — no Three.js, no GSAP, no jQuery dependency. Four scripts, all written for this theme. Entrances are native CSS scroll-driven animations declared only inside <code>@supports</code>, so the resting state of every element is visible with scripts blocked, without scroll timelines and under reduced motion

Overview

Sabine is built for the practice that decides how a building will sound before it exists: an architectural acoustics consultancy taking on concert halls, opera houses, studios, teaching rooms, places of worship, workplaces and transport buildings. It assumes what is being sold is a judgement about air in a room, not a photograph of the room.

The signature is not a shader that looks like sound. One fixed WebGL2 canvas sits behind the entire document — every page, not a hero — and integrates the 2D acoustic wave equation d²p/dt² = c²∇²p by finite-difference time-domain leapfrog. The Courant number is held at 0.5, comfortably inside the 1/√2 limit the scheme has in two dimensions, past which the field does not merely look wrong but diverges to infinity within a few dozen frames. The canvas is never torn down between sections.

Because the boundaries carry real absorption coefficients, the physics is what you see. A rigid wall returns the wave inverted and standing waves build between parallel surfaces — the flutter echo that makes a bad room bad. An anechoic boundary returns nothing and the field goes quiet. Five rooms are built into the solver: a shoebox hall, a fan plan with a curved rear wall, a quadratic-residue diffuser whose well depths follow n² mod 7 — the real Schroeder sequence, and genuinely why such a wall is built in that pattern rather than as decorative relief — an anechoic chamber, and a barrel vault.

What is drawn is the pressure gradient rather than the pressure. That is a schlieren reading: it is what a real photograph of sound in air images, which is why pictures of sound are thin bright wavefronts on a dark ground, and it is what leaves the field dark enough almost everywhere to carry body text.

Sections declare which room they want and how bright the field should be behind their particular copy, and the two rooms currently on screen are blended by the fraction of the viewport each covers. Scrolling therefore deforms the room the wave is already travelling in, rather than cutting from one scene to another — which is not something a per-section widget can do.

The numbers are computed rather than quoted, by the same two equations in PHP on the server and live in the browser, off the same table of published octave-band absorption coefficients. Sabine’s own RT60 = 0.161V/A and Eyring’s correction are both shown, always, because Sabine over-predicts in an absorptive room; that is a known limitation of the equation the practice is named after, and the gap between the two figures is itself a reading of how dead the room has become. Room modes and the Schroeder frequency come off the same measurements. On a project page the interactive bench is seeded from that building’s own recorded dimensions, brief and surface schedule, so the visitor is handed the actual room.

The layout archetype is the octave-band grid: eight columns with a persistent frequency tick rail, the measure the whole trade reads by. No section is allowed to paint over the field — every one is transparent and text sits on glass scrims. Newsreader over Space Grotesk, self-hosted. Not one third-party JavaScript library is bundled, and entrances are native CSS scroll-driven animations declared only inside @supports, so every element’s resting state is visible with scripts blocked and under reduced motion.

Content types cover projects, sectors and services, with the volume, surface area, dimensions, seat count, design target, measured RT60 and surface schedule recorded per commission — every field an input to the acoustics, none of it stored for decoration — plus a journal and a private enquiry inbox.

WebGL2 FDTD wave solver RGBA16F pressure field Schroeder diffuser geometry Sabine + Eyring, server and live CSS scroll timelines No third-party JS

What's included

  • Full theme source — every template, style sheet & script
  • One-click demo importer (idempotent, no page builder)
  • Live Customizer controls for copy, colours & content
  • Translation-ready .pot file + RTL stylesheet
  • HTML documentation + a CHANGELOG file
  • Lifetime updates + 6 months support (renewable)

Specifications

WordPress5.6 – 7.0
PHP8.0 – 8.3
BrowsersChrome, Firefox, Safari, Edge (latest)
LayoutFully responsive, mobile → desktop
LocalizationTranslation-ready · RTL included
AccessibilityKeyboard-navigable · prefers-reduced-motion
Page builderNot required — native Customizer
LicenseGNU GPL v2 · single-site commercial

Release

v1.0.0 Sabine is built for architecture and acoustics practices around one idea: a room is an instrument before it is a space. A real WebGL2 FDTD wave solver propagates sound through an RGBA16F pressure field against genuine Schroeder diffuser geometry, and reverberation time is computed live with the actual Sabine and Eyring equations — the same math run server-side and in the browser. CSS scroll timelines pace the reveal, and the build ships with no third-party JS.

The complete, dated version history ships in the theme’s CHANGELOG file. Every purchase includes lifetime access to future updates.

Chatoyance Featured

A one-of-a-kind jewelry maison storefront: a real Three.js/WebGL2 gem viewer lets shoppers drag-orbit each piece, swap between 18K gold, rose gold, platinum and blackened metal in real time, and read live facet-angle, refractive-index, critical-angle and fire-frequency numbers off an on-canvas HUD as the stone turns. A browsing-history-driven style curator recommends pieces from the visitor's own session, computed entirely client-side with no dependency on any external AI service. Runs as a compiled React/Vite storefront embedded inside a classic WordPress theme, with a custom "Luxury Products" catalogue (no WooCommerce dependency).

Craft Dark
View →
Aureole

Aureole

79

A persistent WebGL2 light field built on Schlick's Fresnel approximation and diamond's real per-wavelength dispersion, a Gem Physics comparator on real mineralogical constants, and Web Audio synthesis driven by each piece's real beat frequency and bell-partial ratios.

Dark Luxury
View →
AETHERIA

The background is the product. A real WebGL2 particle field runs behind the whole site, five simulations deep, with its live state reported in the rail rather than claimed in the copy. It's a genuine WebGL2 transform-feedback particle integration with a ping-ponged trail buffer, sharing one engine across five simulations on a classic no-build-step PHP theme with zero third-party JavaScript. Case studies, capabilities, recognition, and testimonials run as real post types, backed by a working AJAX inquiry endpoint that actually stores and notifies — built for creative and design agencies.

agency creative
View →