FreeVJ FULL AUTO VJ LOOP

FreeVJ / Loop library / Pattern

Tunnel Rings

Rings rushing toward a vanishing point, thickening on every kick.

Tunnel Rings
Play this loop live

Exports are made in this browser and saved directly.

GLSL source

// Rings pulled into the vanishing point. Two rings every 4 beats — seamless. Kick and lows thicken them.
vec2 prim(vec2 uv) {
    vec2 p = asp(uv);
    float r = length(p);
    float a = atan(p.y, p.x);
    float depth = 0.35 / (r + 0.05) * (uParams.x / 16.0);
    float z = depth + uBeat * 0.5 + uParams.y * 0.35 * sin(a * 3.0 + uBeat * TAU / 4.0);
    float ring = abs(fract(z) - 0.5);
    float w = 0.05 + uBass * 0.12 + uKick * 0.06;
    float l = smoothstep(w, 0.0, ring) * smoothstep(0.02, 0.35, r);
    return vec2(l, l);
}

One vec2 prim(vec2 uv) function using the shared uniform contract (uBeat · uBass · uKick …). It outputs luma and alpha only.

Similar loops

☕ Buy me a coffee

FreeVJ is free. If you enjoy it, support the maker with a coffee's worth of USDT.

USDT · TRON (TRC20) TRC20 network only

TVg11kWumyqNpRU9HXKo8a8u2fa8sdJtKh

☕ 3 USDT☕☕ 5 USDT☕☕☕ 10 USDT

How to send with Binance
  1. Binance app: Wallet › Withdraw › USDT › paste the address (or scan the QR) › network TRC20 › amount › confirm. The address belongs to Binance, so it may go through as a free internal transfer.
  2. Other wallets and exchanges (Trust Wallet, OKX, Bybit …): send USDT on the TRC20 network to the same address. A self-custody wallet needs a little TRX for the fee.

Always send on the TRC20 network. USDT sent on another network is hard to recover.