Pulse Temple

Pulse Temple

Audio-reactive sacred geometry field with mouse-driven orbit pressure.

audio mouse geometry neon members
bobber Jun 25, 2026
Public Source Available
◈

Shader Preview Unavailable

This realtime shader may be too intensive for your current device or browser.

Shader Code
/*
@title Pulse Temple
@author bobber
@description Audio-reactive sacred geometry field with mouse-driven orbit pressure.
@category audio-reactive
@tags audio, mouse, geometry, neon, members
@audio true
@mouse true
@featured false
@version 1.0.0
@license BLOKS Members
*/

#define PI 3.14159265359
#define TAU 6.28318530718

mat2 rot(float a) {
    float c = cos(a);
    float s = sin(a);
    return mat2(c, -s, s, c);
}

float ring(vec2 p, float r, float w) {
    return 1.0 - smoothstep(w, w + 0.012, abs(length(p) - r));
}

float spoke(vec2 p, float n, float w) {
    float a = atan(p.y, p.x);
    float d = abs(sin(a * n));
    return smoothstep(w, 0.0, d * length(p));
}

vec3 palette(float t) {
    return 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.22, 0.48)));
}

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = (2.0 * fragCoord - iResolution.xy) / iResolution.y;

    float t = iTime;
    float audio = clamp(uAudioLevel, 0.0, 1.0);
    float bass  = clamp(uAudioBass,  0.0, 1.0);
    float mid   = clamp(uAudioMid,   0.0, 1.0);
    float high  = clamp(uAudioHigh,  0.0, 1.0);

    vec2 pointer = (uPointer * 2.0 - 1.0);
    pointer.x *= iResolution.x / iResolution.y;

    float mousePull = exp(-length(uv - pointer) * 2.5);
    float dragPulse = length(uPointerDelta) * 8.0;

    vec2 p = uv;
    p *= rot(t * 0.08 + bass * 0.5 + mousePull * 0.4);

    float zoom = 1.0 + bass * 0.18 + dragPulse * 0.08;
    p *= zoom;

    float field = 0.0;

    for (int i = 0; i < 7; i++) {
        float fi = float(i);
        vec2 q = p;

        q *= rot(fi * TAU / 7.0 + t * 0.05);
        q.x = abs(q.x);

        float r = 0.18 + fi * 0.105 + bass * 0.035 * sin(t * 2.0 + fi);
        field += ring(q, r, 0.018 + high * 0.018) * (1.0 - fi * 0.08);
        field += spoke(q, 3.0 + mod(fi, 4.0), 0.035 + mid * 0.04) * 0.18;
    }

    float center = exp(-dot(p, p) * (3.5 - bass));
    float aura = exp(-length(uv) * (1.65 - audio * 0.35));

    field += center * (0.7 + bass * 1.4);
    field += mousePull * (0.35 + high * 0.8);

    vec3 color = palette(length(p) * 0.18 - t * 0.045 + audio * 0.2);
    vec3 col = color * field;
    col += vec3(0.05, 0.12, 0.28) * aura;
    col += vec3(0.25, 0.55, 1.0) * mousePull * (0.25 + high);

    col = 1.0 - exp(-col * 1.35);
    col = pow(col, vec3(0.92));

    fragColor = vec4(col, 1.0);
}

← Back to Shader Bulletin Board