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