// ==UserScript== // @name Suno Tab Timer // @namespace http://tampermonkey.net/ // @version 1.2 // @description Show only the current song time in tab title, stop others when switching tracks on Suno.com // @author You // @match https://suno.com/* // @grant none // ==/UserScript== (function () { 'use strict'; let originalTitle = document.title; let currentAudio = null; let interval = null; function formatTime(seconds) { if (!seconds || isNaN(seconds)) return '0:00'; const m = Math.floor(seconds / 60); const s = Math.floor(seconds % 60).toString().padStart(2, '0'); return `${m}:${s}`; } function updateTitle(audio) { if (audio && !audio.paused && audio.duration > 0) { document.title = `${formatTime(audio.currentTime)} / ${formatTime(audio.duration)} ⏵ ${originalTitle}`; } else { document.title = originalTitle; } } function stopCurrent() { clearInterval(interval); interval = null; if (currentAudio) { currentAudio.removeEventListener('pause', resetTitle); currentAudio.removeEventListener('ended', resetTitle); currentAudio = null; } document.title = originalTitle; } function resetTitle() { stopCurrent(); document.title = originalTitle; } function startTracking(audio) { stopCurrent(); currentAudio = audio; originalTitle = document.title; interval = setInterval(() => updateTitle(audio), 1000); audio.addEventListener('pause', resetTitle); audio.addEventListener('ended', resetTitle); } function setupWatcher() { document.body.addEventListener('play', (e) => { const audio = e.target; if (audio.tagName.toLowerCase() === 'audio') { startTracking(audio); } }, true); } setupWatcher(); })();