(function () { const cursor = document.createElement("div"); cursor.id = "custom-cursor"; document.body.appendChild(cursor); document.addEventListener("mousemove", function (e) { cursor.style.left = e.clientX + "px"; cursor.style.top = e.clientY + "px"; cursor.style.opacity = "1"; }, { passive: true }); document.addEventListener("mouseleave", function () { cursor.style.opacity = "0"; }); document.addEventListener("mouseenter", function () { cursor.style.opacity = "1"; }); })();
Sensitive Content · 18+
This site contains material intended for adults only.
Viewer discretion is advised.
Click to continue
Audio Toggle
const audio = document.getElementById('radio-stream'); const button = document.getElementById('toggle-audio-button'); const ambient = document.getElementById('ambient-visual'); const volumeWrap = document.getElementById('volume-wrap'); const volumeSlider = document.getElementById('volume-slider'); let started = false; let raf = null; let isPlaying = false; let targetVolume = parseFloat(volumeSlider.value); function fadeAudioTo(target, duration) { cancelAnimationFrame(raf); const startVolume = audio.volume; const startTime = performance.now(); if (target > 0) { audio.muted = false; isPlaying = true; button.classList.add('playing'); ambient.classList.add('active'); volumeWrap.classList.add('active'); } function step(now) { const t = Math.min((now - startTime) / duration, 1); audio.volume = startVolume + (target - startVolume) * t; if (t < 1) { raf = requestAnimationFrame(step); } else if (target === 0) { audio.muted = true; isPlaying = false; button.classList.remove('playing'); ambient.classList.remove('active'); volumeWrap.classList.remove('active'); } } raf = requestAnimationFrame(step); } function startAudio() { if (started) return; started = true; audio.src = "https://msdysphoria.github.io/Personal-Storage/UI%20Sound/Gunship.mp3"; audio.load(); audio.volume = 0; audio.muted = false; audio.play().then(() => { fadeAudioTo(targetVolume, 3000); button.classList.add('visible'); volumeWrap.classList.add('visible'); }); } window.addEventListener( 'click', startAudio, { once: true, capture: true } ); window.addEventListener( 'keydown', (e) => { if (e.key === 'Enter') { startAudio(); } }, { capture: true } ); button.addEventListener('click', (e) => { e.stopPropagation(); fadeAudioTo(isPlaying ? 0 : targetVolume, 1000); }); volumeSlider.addEventListener('input', () => { targetVolume = parseFloat(volumeSlider.value); if (!started) return; if (targetVolume <= 0) { audio.volume = 0; audio.muted = true; isPlaying = false; button.classList.remove('playing'); ambient.classList.remove('active'); volumeWrap.classList.remove('active'); return; } audio.muted = false; audio.volume = targetVolume; if (!isPlaying && !audio.paused) { isPlaying = true; button.classList.add('playing'); ambient.classList.add('active'); volumeWrap.classList.add('active'); } });
Dustflake
Links
X
Instagram
Reddit
Throne
Discord
Patreon
OnlyFans
ManyVids
Pornhub
Redgifs
(function(){ const sound = document.getElementById('icon-click-sound'); const heading = document.getElementById('text01'); const defaultText = heading ? heading.textContent : "Links"; function setHeading(name){ if (!heading) return; heading.textContent = "" + name + ""; } function resetHeading(){ if (!heading) return; heading.textContent = defaultText; } document.querySelectorAll('#icons02 a').forEach(btn => { btn.addEventListener('click', () => { try{ sound.currentTime = 0; sound.play(); }catch(e){} }); const labelEl = btn.querySelector('.label'); const name = (labelEl && labelEl.textContent) ? labelEl.textContent.trim() : "Links"; btn.addEventListener('mouseenter', () => setHeading(name)); btn.addEventListener('mouseleave', resetHeading); btn.addEventListener('focus', () => setHeading(name)); btn.addEventListener('blur', resetHeading); }); })();
(() => { // ========================================== // WEB AUDIO API HOOK (Cross-Embed) // ========================================== let audioCtx, analyser, dataArray; let isInitialized = false; function initVisualizerAudio() { if (isInitialized) return; const audioEl = document.getElementById('radio-stream'); if (!audioEl) { console.warn("Visualizer cannot find the #radio-stream element."); return; } try { audioCtx = new (window.AudioContext || window.webkitAudioContext)(); analyser = audioCtx.createAnalyser(); analyser.fftSize = 256; analyser.smoothingTimeConstant = 0.8; const source = audioCtx.createMediaElementSource(audioEl); source.connect(analyser); analyser.connect(audioCtx.destination); dataArray = new Uint8Array(analyser.frequencyBinCount); isInitialized = true; } catch (e) { console.log("Audio routing already connected or failed.", e); } } // Listen for ANY click on the webpage to initialize the AudioContext window.addEventListener('click', () => { initVisualizerAudio(); if (audioCtx && audioCtx.state === 'suspended') { audioCtx.resume(); } }, { capture: true }); // ========================================== // VISUALIZER DRAWING SYSTEM // ========================================== const host = document.getElementById("pinkviz"); const c = document.createElement("canvas"); const ctx = c.getContext("2d", { alpha: true, desynchronized: true }); host.appendChild(c); const P1 = [255, 111, 174]; const P2 = [255, 46, 147]; const lerp = (a, b, t) => a + (b - a) * t; const clamp = (v, a, b) => Math.max(a, Math.min(b, v)); const rnd = (a, b) => a + Math.random() * (b - a); const irnd = (a, b) => Math.floor(rnd(a, b)); const dpr = () => Math.max(1, Math.min(2, window.devicePixelRatio || 1)); function resize() { const r = host.getBoundingClientRect(); const s = dpr(); c.width = Math.max(2, Math.floor(r.width * s)); c.height = Math.max(2, Math.floor(r.height * s)); } resize(); new ResizeObserver(resize).observe(host); const bins = 64; const phase = new Float32Array(bins); const speed = new Float32Array(bins); const base = new Float32Array(bins); for (let i = 0; i < bins; i++) { phase[i] = Math.random() * Math.PI * 2; speed[i] = (0.8 + Math.random() * 1.6) * (0.6 + i / bins); base[i] = 0; } let energy = 0, target = 0, t0 = performance.now(); const FPS = 40; const FRAME_TIME = 1000 / FPS; let lastFrame = 0; let glitchHold = 0; let timeWarp = 1; let warpTarget = 1; function rgba(rgb, a) { return `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${a})`; } function tick(now) { if (now - lastFrame < FRAME_TIME) { requestAnimationFrame(tick); return; } lastFrame = now; const rawDt = Math.min(0.04, (now - t0) / 1000); t0 = now; let currentAudioEnergy = 0; let bassEnergy = 0; // Check if the audio element exists and is actively producing sound const audioEl = document.getElementById('radio-stream'); const isActivelyPlaying = audioEl && !audioEl.paused && audioEl.volume > 0; if (analyser && isActivelyPlaying) { analyser.getByteFrequencyData(dataArray); let sum = 0; for (let i = 0; i < bins; i++) { sum += dataArray[i]; } currentAudioEnergy = (sum / bins) / 255; let bassSum = 0; for (let i = 0; i < 6; i++) bassSum += dataArray[i]; bassEnergy = bassSum / (6 * 255); } else { if (dataArray) dataArray.fill(0); } if (glitchHold <= 0 && bassEnergy > 0.88) { glitchHold = rnd(0.10, 0.30); warpTarget = rnd(0.55, 1.6); } else { glitchHold = Math.max(0, glitchHold - rawDt); if (glitchHold === 0) warpTarget = 1; } timeWarp = lerp(timeWarp, warpTarget, 0.06); target = clamp(currentAudioEnergy * 1.5, 0.0, 1.0); energy = lerp(energy, target, 0.15); const W = c.width, H = c.height; ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.globalCompositeOperation = "source-over"; ctx.clearRect(0, 0, W, H); ctx.save(); ctx.globalCompositeOperation = "lighter"; const mid = H * 0.55; const amp = H * (0.10 + 0.30 * energy); for (let k = 0; k < 3; k++) { const kk = k / 2; const col = kk < 0.5 ? P1 : P2; ctx.beginPath(); const ph = now / 900 + kk * 1.6 + (glitchHold > 0 ? Math.sin(now / 35) * 0.3 : 0); const freq = 2.2 + kk * 1.8 + (glitchHold > 0 ? 0.6 : 0); for (let x = 0; x <= W; x += 6 * dpr()) { const u = x / W; const tear = (glitchHold > 0) ? (Math.sin(u * 40 + now / 33) * (H * 0.003 + H * 0.010 * energy) + (Math.random() - 0.5) * H * 0.0015) : 0; const y = mid + Math.sin(u * Math.PI * freq + ph) * amp + Math.sin(u * Math.PI * (freq * 0.6) - ph * 1.3) * amp * 0.45 * (0.35 + 0.65 * energy) + tear; if (x === 0) ctx.moveTo(x, y); else ctx.lineTo(x, y); } ctx.lineWidth = (10 + 8 * energy) * dpr(); ctx.strokeStyle = rgba(col, 0.12); ctx.shadowColor = rgba(col, 0.65); ctx.shadowBlur = (20 + 28 * energy) * dpr(); ctx.stroke(); } const padX = 18 * dpr(), padY = 22 * dpr(); const usableW = W - padX * 2; const baseY = H - padY; const barW = usableW / bins; for (let i = 0; i < bins; i++) { const u = i / (bins - 1); const audioVal = dataArray ? (dataArray[i] / 255.0) : 0; base[i] = lerp(base[i], audioVal, 0.25); const ph = phase[i] + (now / 600) * speed[i] * timeWarp; const fall = Math.sin(u * Math.PI); const stomp = (glitchHold > 0 ? 1.25 : 1); const h = H * (0.01 + 0.55 * base[i] * stomp) * (0.4 + 0.6 * fall); const x = padX + i * barW + barW * 0.15; const w = barW * 0.70; let y = baseY - h; if (glitchHold > 0 && Math.random() < 0.14) { y += (Math.random() < 0.5 ? -1 : 1) * rnd(0, H * 0.05) * (0.35 + 0.65 * energy); } const mix = u; const col = [ Math.round(lerp(P1[0], P2[0], mix)), Math.round(lerp(P1[1], P2[1], mix)), Math.round(lerp(P1[2], P2[2], mix)), ]; const r = Math.min(10 * dpr(), w / 2); ctx.shadowColor = rgba(col, 0.6); ctx.shadowBlur = (14 + 22 * energy) * dpr(); ctx.fillStyle = rgba(col, 0.22 + 0.3 * energy); ctx.beginPath(); ctx.moveTo(x + r, y); ctx.arcTo(x + w, y, x + w, y + r, r); ctx.arcTo(x + w, baseY, x + w - r, baseY, r); ctx.arcTo(x, baseY, x, baseY - r, r); ctx.arcTo(x, y, x + r, y, r); ctx.closePath(); ctx.fill(); } if (glitchHold > 0) { const slices = irnd(5, 12); for (let s = 0; s < slices; s++) { const sh = irnd(6, Math.max(10, H * 0.08)); const sy = irnd(0, H - sh); const dx = irnd(-W * 0.03, W * 0.03); const sx = irnd(0, W * 0.02); ctx.drawImage(c, sx, sy, W - sx, sh, dx, sy, W - sx, sh); } ctx.save(); ctx.globalCompositeOperation = "source-atop"; const step = Math.max(2, Math.floor(3 * dpr())); for (let y = 0; y < H; y += step) { const col = (Math.random() < 0.5) ? P1 : P2; ctx.globalAlpha = (0.03 + 0.07 * Math.random()) * (0.25 + 0.75 * energy); ctx.fillStyle = rgba(col, 1); ctx.fillRect(0, y, W, 1 * dpr()); } ctx.restore(); } ctx.restore(); requestAnimationFrame(tick); } requestAnimationFrame(tick); })();
Information
Background
Paw
Animal Care
Cancel
Cancel
⸻ Links ⸻
Ms. Dustflake
Ms. Dustflake
Instagram
Instagram
X
X
Reddit
Reddit
OnlyFans
OnlyFans
Patreon
Patreon
Throne
Throne
Discord
Discord
Publons
Publons
Instagram
Instagram
X
X
Reddit
Reddit
Patreon
Patreon
Throne
Throne
Discord
Discord
OnlyFans
OnlyFans
ManyVids
ManyVids
Product Hunt
Product Hunt
Revolut
Revolut
Music
Music