您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Generate and download cuesheets from Discogs release pages
// ==UserScript== // @name Discogs Cuesheet Generator // @namespace http://tampermonkey.net/ // @version 0.4 // @description Generate and download cuesheets from Discogs release pages // @match https://www.discogs.com/release/* // @license You can modify as long as you credit wurzel80 // @grant none // ==/UserScript== (function() { 'use strict'; console.log("Discogs Cuesheet Generator script is running"); let button = document.createElement('button'); button.textContent = 'Generate Cuesheet'; button.style.position = 'fixed'; button.style.top = '260px'; button.style.left = '30px'; button.style.zIndex = '9999'; document.body.appendChild(button); function generateCuesheet() { console.log("generateCuesheet function called"); try { let artistElement = document.querySelector('h1 a[href^="/artist/"]'); let artist = artistElement ? artistElement.textContent.trim() : "ARTIST"; let albumElement = document.querySelector('h1'); let album = albumElement ? albumElement.textContent.split('–').pop().trim() : "ALBUM"; let tracks = document.querySelectorAll('tr[data-track-position]'); let cuesheet = `PERFORMER "${artist}"\nTITLE "${album}"\nFILE "${artist} - ${album}.mp3" MP3\n`; let totalSeconds = 0; tracks.forEach((track, index) => { let trackNumber = track.getAttribute('data-track-position') || String(index + 1).padStart(2, '0'); let trackTitleElement = track.querySelector('td.trackTitle span, span[class*="trackTitle"]'); let trackTitle = trackTitleElement ? trackTitleElement.textContent.trim() : "TRACKTITLE"; let durationElement = track.querySelector('td.duration_2t4qr span, span[class*="duration"]'); let duration = durationElement ? durationElement.textContent.trim() : "00:00"; let startTimeFormatted = formatTime(totalSeconds); cuesheet += `\nTRACK ${trackNumber} AUDIO\n TITLE "${trackTitle}"\n PERFORMER "${artist}"\n INDEX 01 ${startTimeFormatted}\n`; let [minutes, seconds] = duration.split(':').map(Number); totalSeconds += (minutes * 60 + seconds) || 0; }); // Create a Blob with the cuesheet content const blob = new Blob([cuesheet], { type: 'text/plain' }); // Create a download link const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `${artist} - ${album}.cue`; // Trigger the download link.click(); // Clean up URL.revokeObjectURL(link.href); } catch (error) { console.error("Error generating cuesheet:", error.message); alert("Error generating cuesheet: " + error.message); } } function formatTime(totalSeconds) { let minutes = Math.floor(totalSeconds / 60); let seconds = totalSeconds % 60; let frames = 0; // We don't have frame information, so we'll use 0 return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}:${String(frames).padStart(2, '0')}`; } button.addEventListener('click', generateCuesheet); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址