Avoid Suno WAV fallback failures

This commit is contained in:
DESKTOP-KSVGT20\shkim
2026-05-02 00:06:22 +09:00
parent b763412d9b
commit d24f7da838
2 changed files with 20 additions and 7 deletions
+13 -5
View File
@@ -1,7 +1,7 @@
// ==UserScript==
// @name ChatGPT to Suno Prompt Copier
// @namespace local.suno-helper
// @version 0.7.0
// @version 0.7.1
// @description Copy structured ChatGPT song prompt versions into Suno fields.
// @author local
// @match https://chatgpt.com/*
@@ -604,7 +604,7 @@
const audioPath = firstValue(object, ["audio_url", "audioUrl", "stream_audio_url", "streamAudioUrl", "play_url", "playUrl", "play_path", "playPath", "mp3_url", "mp3Url", "video_url", "videoUrl"]);
const audioUrl = normalizeSunoMediaUrl(audioPath);
const wavPath = firstValue(object, ["wav_url", "wavUrl", "download_url", "downloadUrl"]);
const wavUrl = normalizeSunoMediaUrl(wavPath) || (id ? `https://cdn1.suno.ai/${id}.wav` : "");
const wavUrl = normalizeSunoMediaUrl(wavPath);
const lyrics = firstValue(object, ["prompt", "lyrics", "lyric", "text"]);
const style = firstValue(object, ["gpt_description_prompt", "style", "tags", "description"]);
const model = firstValue(object, ["model_name", "model", "major_model_version"]);
@@ -727,7 +727,7 @@
id,
title: id,
audioUrl: "",
wavUrl: `https://cdn1.suno.ai/${id}.wav`,
wavUrl: "",
imageUrl: "",
pageUrl: location.href,
metadata: {},
@@ -783,7 +783,7 @@
const id = metadata.id || metadata.clip_id || metadata.clipId || ids[0] || "";
const imageUrl = metadata.image_url || metadata.imageUrl || metadata.image_large_url || imageUrls[0] || "";
const audioUrl = metadata.audio_url || metadata.audioUrl || audioUrls.find((url) => /\.wav(?:\?|$)/i.test(url)) || audioUrls[0] || "";
const wavUrl = metadata.wav_url || metadata.wavUrl || audioUrls.find((url) => /\.wav(?:\?|$)/i.test(url)) || (id ? `https://cdn1.suno.ai/${id}.wav` : "");
const wavUrl = metadata.wav_url || metadata.wavUrl || audioUrls.find((url) => /\.wav(?:\?|$)/i.test(url)) || "";
return {
id,
@@ -861,7 +861,7 @@
await new Promise((resolve) => setTimeout(resolve, 1300));
}
return track.wavUrl || `https://cdn1.suno.ai/${track.id}.wav`;
return track.wavUrl || "";
}
function downloadTextFile(text, name) {
@@ -935,6 +935,10 @@
const track = { ...tracks[index] };
setStatus(statusTarget, `${index + 1}/${tracks.length} WAV 준비 중: ${track.title || track.id}`);
track.wavUrl = await requestSunoWavUrl(track);
if (!track.wavUrl) {
setStatus(statusTarget, `${track.title || track.id} WAV URL을 아직 못 받아서 건너뜀`);
continue;
}
preparedTracks.push(track);
}
const manifest = {
@@ -980,6 +984,10 @@
const track = { ...missingTracks[index] };
setStatus(statusTarget, `${index + 1}/${missingTracks.length} 없는 곡 WAV 준비 중: ${track.title || track.id}`);
track.wavUrl = await requestSunoWavUrl(track);
if (!track.wavUrl) {
setStatus(statusTarget, `${track.title || track.id} WAV 변환 URL이 아직 안 나와서 큐에 넣지 않음`);
continue;
}
const enqueueManifest = {
pageUrl: location.href,
capturedAt: new Date().toISOString(),
+7 -2
View File
@@ -360,7 +360,6 @@ foreach ($track in $tracks) {
$albumTitle = Get-AlbumTitle $title $id
$trackFolder = Get-TrackFolder $libraryRoot $title $id
New-Item -ItemType Directory -Force -Path $trackFolder | Out-Null
$safeTitle = ConvertTo-SafeName $title $id
$shortId = Get-ShortId $id
$trackNo = Get-NextTrackNumber $trackFolder
@@ -374,7 +373,6 @@ foreach ($track in $tracks) {
$wavUrl = Resolve-SunoMediaUrl $(if ($track.wavUrl) { "$($track.wavUrl)" } else { Get-DeepValue $track @("wav_url", "wavUrl", "download_url", "downloadUrl") })
$wavCandidates = @()
if ($wavUrl) { $wavCandidates += $wavUrl }
if ($id) { $wavCandidates += "https://cdn1.suno.ai/$id.wav" }
$wavCandidates = $wavCandidates | Where-Object { $_ } | Select-Object -Unique
$imageUrl = if ($track.imageUrl) { "$($track.imageUrl)" } else { Get-DeepValue $track @("image_url", "imageUrl", "image_large_url", "cover_url") }
@@ -389,6 +387,11 @@ foreach ($track in $tracks) {
Write-Host ""
Write-Host "[$index/$($tracks.Count)] $title"
if (-not $wavCandidates.Count) {
Write-Warning "WAV URL이 없어서 건너뜀: $title"
continue
}
$audioOk = $false
foreach ($candidate in $wavCandidates) {
Write-Host "WAV 후보 시도: $candidate"
@@ -400,6 +403,8 @@ foreach ($track in $tracks) {
continue
}
New-Item -ItemType Directory -Force -Path $trackFolder | Out-Null
$coverOk = $false
if ($imageUrl) {
$coverDownloaded = Invoke-Download $imageUrl $rawCoverFile