[ CC0 shader vibe commons · everything here is public domain ]
experimental backendWebGL2 · not opted in
Enable WebGPU controls in settings. WebGL2 remains unchanged.
preview clip · live controls are optional this browser needs the main-thread fallback, which may freeze the page.
params (6)
0.60
1.30
5.00
0.55
rgb
rgb
.fs source · isfnot running
/*{"DESCRIPTION":"Aurora Fold — a folded, flowing field of light. Domain-warped sinusoids run through a kaleidoscopic fold and a soft aurora palette. CC0.","CREDIT":"made with the glslop skill","CATEGORIES":["generator","abstract"],"INPUTS":[{"NAME":"speed","TYPE":"float","DEFAULT":0.6,"MIN":0.0,"MAX":2.0},{"NAME":"warp","TYPE":"float","DEFAULT":1.3,"MIN":0.0,"MAX":3.0},{"NAME":"folds","TYPE":"float","DEFAULT":5.0,"MIN":1.0,"MAX":10.0},{"NAME":"glow","TYPE":"float","DEFAULT":0.55,"MIN":0.0,"MAX":1.0},{"NAME":"tintA","TYPE":"color","DEFAULT":[0.10,0.85,0.70,1.0]},{"NAME":"tintB","TYPE":"color","DEFAULT":[0.55,0.15,0.95,1.0]}]}*/// Aurora Fold — single-pass ISF / GLSL ES 1.00.// No #version, writes gl_FragColor, constant loop bounds, no round/tanh/dFdx.constfloatPI = 3.14159265359;
// 2x2 rotationmat2rot(float a){
float c = cos(a), s = sin(a);
returnmat2(c, -s, s, c);
}
voidmain(){
// aspect-correct, centered coords (-1..1 on the short axis)vec2 res = RENDERSIZE;
vec2 uv = (gl_FragCoord.xy - 0.5 * res) / min(res.x, res.y);
float t = TIME * speed;
// kaleidoscopic fold: wrap the angle into 'folds' wedges and mirror itfloat r = length(uv);
float a = atan(uv.y, uv.x);
float seg = (2.0 * PI) / max(folds, 1.0);
a = mod(a, seg);
a = abs(a - 0.5 * seg); // mirror within the wedgevec2 p = vec2(cos(a), sin(a)) * r;
// domain warp: a few octaves of swirling sinusoids feeding back on themselvesvec2 q = p * 3.0;
float acc = 0.0;
for (int i = 0; i < 5; i++){
q = rot(0.5 + 0.21 * float(i) + 0.15 * t) * q;
q += warp * vec2(
sin(q.y * 1.7 + t * 1.3),
cos(q.x * 1.7 - t * 1.1)
);
acc += sin(q.x + q.y + t) / float(i + 2);
}
// shape the field into glowing filamentsfloat field = 0.5 + 0.5 * sin(acc * PI + t);
float core = smoothstep(0.05, 0.95, field);
float fil = pow(core, mix(0.7, 3.0, glow)); // ribbons, but keep them litfloat halo = 0.9 * pow(core, 1.2) / (0.25 + r); // radial bloom toward center// aurora palette: blend the two tints by the field, lift with the bloomvec3 base = mix(tintA.rgb, tintB.rgb, field);
vec3 col = base * (0.25 + 1.3 * fil); // ambient floor + lit ribbons
col += halo * mix(tintA.rgb, tintB.rgb, 0.5);
col += 0.15 * base; // keep some color in the shadows// subtle vignette so the edges fall to black
col *= smoothstep(1.2, 0.15, r);
// filmic-ish tone map, then a touch of gamma + saturation
col = col / (col + vec3(0.7));
col = pow(col, vec3(0.78));
float lum = dot(col, vec3(0.299, 0.587, 0.114));
col = mix(vec3(lum), col, 1.25); // boost saturationgl_FragColor = vec4(col, 1.0);
}
by ufffduser_uploadmade with glslopCC0-1.0credit: made with the glslop skillactive·created 2026-06-16 07:22Z145 views0 forks6 params
export clip · render a video in your browser
Renders to video in your browser (no upload), stepping the real renderer frame by frame so
multipass + feedback come out right. motion auto-animates the shader's own knobs — each export
rolls a fresh take (🎲 re-roll, 🔒 to pin one you like). GIF is slower with a tighter length cap;
MP4/WebM are faster. Some devices record in real time (noted below if so) — keep the tab visible.
caps: ≤1920 per side, ≤60fps, ≤18000 frames (GIF ≤300)