Nyx Live: Your AI Guide to Sandblast.

Ask, tap, and explore Sandblast with Nyx.

Ready
Voice available
Nyx statusReady to guide you
Nyx voiceStandby
Nyx ConversationReady to explore
Suggested prompts
Lane-aware shortcuts
Choose a music year
/* ===== NYX ROOT FIX v4 (BLOB + PLAYBACK) ===== */ window.__nyxAudioUnlocked = false; window.__nyxSpeaking = false; window.__nyxLastBlobUrl = null; async function __nyxUnlock(){ if(window.__nyxAudioUnlocked) return true; const ctx = new (window.AudioContext || window.webkitAudioContext)(); await ctx.resume(); window.__nyxAudioUnlocked = true; console.log("[NYX] unlocked"); return true; } async function __nyxFetchAudio(url, opts){ const res = await fetch(url, opts); console.log("[NYX] status", res.status); const blob = await res.blob(); console.log("[NYX] blob size", blob.size, blob.type); if(!blob || blob.size < 500){ throw new Error("INVALID_AUDIO_BLOB"); } const blobUrl = URL.createObjectURL(blob); // DO NOT REVOKE EARLY window.__nyxLastBlobUrl = blobUrl; return blobUrl; } async function __nyxPlayBlob(blobUrl){ await __nyxUnlock(); const audio = new Audio(); audio.src = blobUrl; window.__nyxSpeaking = true; audio.onended = ()=>{ window.__nyxSpeaking = false; console.log("[NYX] ended"); }; audio.onerror = (e)=>{ window.__nyxSpeaking = false; console.error("[NYX] audio error", e); }; try{ await audio.play(); console.log("[NYX] playing"); }catch(e){ console.error("[NYX] play fail", e); window.__nyxSpeaking = false; } } // BLOCK BAD RESETS const __origReset = window.resetAudioState || function(){}; window.resetAudioState = function(){ if(window.__nyxSpeaking){ console.warn("[NYX] reset blocked"); return; } return __origReset.apply(this, arguments); }; console.log("[NYX] v4 ROOT FIX LOADED");