Simplify Suno download controls to WAV workflow
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user