Simplify Suno download controls to WAV workflow

This commit is contained in:
DESKTOP-KSVGT20\shkim
2026-05-01 22:55:36 +09:00
parent 2e3698b3c6
commit 3a195c8894
3 changed files with 15 additions and 69 deletions
+8 -54
View File
@@ -1,7 +1,7 @@
// ==UserScript==
// @name ChatGPT to Suno Prompt Copier
// @namespace local.suno-helper
// @version 0.5.0
// @version 0.5.1
// @description Copy structured ChatGPT song prompt versions into Suno fields.
// @author local
// @match https://chatgpt.com/*
@@ -895,16 +895,8 @@
if (preparedWavUrl) {
downloadUrl(preparedWavUrl, `${baseName}.wav`, (reason) => {
fail("wav")(reason);
if (track.audioUrl && track.audioUrl !== preparedWavUrl) {
downloadUrl(track.audioUrl, `${baseName}.${extensionFromUrl(track.audioUrl, "audio")}`, fail("audio-fallback"));
messages.push("audio fallback 요청");
setStatus(statusTarget, messages.join(" / "));
}
});
messages.push("wav 요청");
} else if (track.audioUrl) {
downloadUrl(track.audioUrl, `${baseName}.${extensionFromUrl(track.audioUrl, "audio")}`, fail("audio"));
messages.push("audio 요청");
}
setStatus(statusTarget, messages.join(" / "));
}
@@ -935,7 +927,7 @@
async function exportSunoManifest(tracks, statusTarget) {
if (!tracks.length) {
setStatus(statusTarget, "내보낼 곡을 못 찾았어. 라이브러리 곡 감지를 먼저 해줘.");
setStatus(statusTarget, "내보낼 곡을 못 찾았어. 곡 감지를 먼저 해줘.");
return;
}
const preparedTracks = [];
@@ -957,7 +949,7 @@
async function postToCompanion(tracks, statusTarget) {
if (!tracks.length) {
setStatus(statusTarget, "보낼 곡을 못 찾았어. 라이브러리 곡 감지를 먼저 해줘.");
setStatus(statusTarget, "보낼 곡을 못 찾았어. 곡 감지를 먼저 해줘.");
return;
}
const preparedTracks = [];
@@ -1001,22 +993,10 @@
${FIELD_DEFS.map((def) => `<button class="cgs-btn" type="button" data-cgs-copy="${def.key}">${escapeHtml(def.label)}</button>`).join("")}
</div>
<div class="cgs-row">
<button class="cgs-btn cgs-wide" type="button" data-cgs-refresh-track>곡 감지</button>
<button class="cgs-btn cgs-wide" type="button" data-cgs-scan-library>곡 감지</button>
</div>
<div class="cgs-row">
<button class="cgs-btn cgs-primary cgs-wide" type="button" data-cgs-download-track>WAV + 커버 + 메타 다운로드</button>
</div>
<div class="cgs-row">
<button class="cgs-btn cgs-wide" type="button" data-cgs-scan-library>라이브러리 곡 감지</button>
</div>
<div class="cgs-row">
<button class="cgs-btn cgs-primary cgs-wide" type="button" data-cgs-export-library>처리용 manifest 저장</button>
</div>
<div class="cgs-row">
<button class="cgs-btn cgs-primary cgs-wide" type="button" data-cgs-send-companion>로컬 프로그램으로 처리</button>
</div>
<div class="cgs-row">
<button class="cgs-btn cgs-wide" type="button" data-cgs-download-library>브라우저 일괄 다운로드</button>
<button class="cgs-btn cgs-primary cgs-wide" type="button" data-cgs-process-library>WAV + 메타데이터 다운</button>
</div>
<div class="cgs-status"></div>
`;
@@ -1059,21 +1039,6 @@
});
}
body.querySelector("[data-cgs-refresh-track]").addEventListener("click", () => {
updateSummary();
const track = findCurrentSunoTrack();
setStatus(body, track.id || track.audioUrl ? `감지됨: ${track.title || track.id}` : "현재 화면에서 곡 URL을 못 찾았어.");
});
body.querySelector("[data-cgs-download-track]").addEventListener("click", async () => {
const track = findCurrentSunoTrack();
if (!track.id && !track.audioUrl && !track.imageUrl) {
setStatus(body, "다운로드할 곡 정보를 못 찾았어. 곡 상세/플레이어 화면에서 다시 눌러봐.");
return;
}
await downloadSunoPackage(track, body);
});
body.querySelector("[data-cgs-scan-library]").addEventListener("click", () => {
libraryTracks = scanSunoLibraryTracks();
updateSummary();
@@ -1088,25 +1053,14 @@
setStatus(body, `${networkHint} 목록 새로고침이나 스크롤 후 다시 눌러봐. 화면 텍스트: ${visibleHints.join(", ")}`);
});
body.querySelector("[data-cgs-download-library]").addEventListener("click", async () => {
if (!libraryTracks.length) libraryTracks = scanSunoLibraryTracks();
updateSummary();
await downloadSunoBatch(libraryTracks, body);
});
body.querySelector("[data-cgs-export-library]").addEventListener("click", async () => {
if (!libraryTracks.length) libraryTracks = scanSunoLibraryTracks();
updateSummary();
await exportSunoManifest(libraryTracks, body);
});
body.querySelector("[data-cgs-send-companion]").addEventListener("click", async () => {
body.querySelector("[data-cgs-process-library]").addEventListener("click", async () => {
if (!libraryTracks.length) libraryTracks = scanSunoLibraryTracks();
updateSummary();
try {
await postToCompanion(libraryTracks, body);
} catch (error) {
setStatus(body, `로컬 프로그램 연결 실패: ${error.message || error}`);
setStatus(body, `로컬 프로그램 연결 실패. manifest로 저장할게: ${error.message || error}`);
await exportSunoManifest(libraryTracks, body);
}
});
}