From ddf6b96775f4a6d6b133c6299d5d0e34eb4bacc8 Mon Sep 17 00:00:00 2001 From: "DESKTOP-KSVGT20\\shkim" Date: Sat, 2 May 2026 00:14:29 +0900 Subject: [PATCH] Add single detected Suno track action --- chatgpt-suno-tampermonkey.user.js | 52 +++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/chatgpt-suno-tampermonkey.user.js b/chatgpt-suno-tampermonkey.user.js index fb18106..00eebc6 100644 --- a/chatgpt-suno-tampermonkey.user.js +++ b/chatgpt-suno-tampermonkey.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name ChatGPT to Suno Prompt Copier // @namespace local.suno-helper -// @version 0.7.2 +// @version 0.7.3 // @description Copy structured ChatGPT song prompt versions into Suno fields. // @author local // @match https://chatgpt.com/* @@ -1053,6 +1053,12 @@ setStatus(statusTarget, `큐 전송 완료: 새 곡 ${enqueued}개, WAV 보류 ${wavPending}개. 로컬 프로그램이 순서대로 처리 중.`); } + function trackOptionLabel(track, index) { + const title = track?.title || track?.id || "제목 없음"; + const shortId = track?.id ? String(track.id).slice(0, 8) : ""; + return `${index + 1}. ${title}${shortId ? ` [${shortId}]` : ""}`; + } + async function testCompanion(statusTarget) { try { const response = await fetch("http://127.0.0.1:17873/health", { @@ -1088,6 +1094,12 @@
+ +
+ +
@@ -1099,7 +1111,17 @@ const summary = body.querySelector("[data-cgs-summary]"); const slotSelect = body.querySelector("[data-cgs-slot]"); + const libraryTrackSelect = body.querySelector("[data-cgs-library-track]"); let libraryTracks = []; + const renderLibraryTrackSelect = () => { + if (!libraryTracks.length) { + libraryTrackSelect.innerHTML = ``; + return; + } + libraryTrackSelect.innerHTML = libraryTracks + .map((track, index) => ``) + .join(""); + }; const updateSummary = () => { const payload = slots[Number(slotSelect.value)]; const track = findCurrentSunoTrack(); @@ -1108,6 +1130,7 @@ const trackText = track.id || track.audioUrl || track.imageUrl ? ` / 곡 감지: ${track.title || track.id}` : " / 곡 미감지"; summary.textContent = promptText + trackText + libraryText; }; + renderLibraryTrackSelect(); updateSummary(); slotSelect.addEventListener("change", updateSummary); @@ -1137,6 +1160,7 @@ body.querySelector("[data-cgs-scan-library]").addEventListener("click", () => { libraryTracks = scanSunoLibraryTracks(); + renderLibraryTrackSelect(); updateSummary(); const sample = libraryTracks.slice(0, 3).map((track) => track.title || track.id).join(", "); if (libraryTracks.length) { @@ -1149,8 +1173,32 @@ setStatus(body, `${networkHint} 목록 새로고침이나 스크롤 후 다시 눌러봐. 화면 텍스트: ${visibleHints.join(", ")}`); }); + body.querySelector("[data-cgs-process-one]").addEventListener("click", async () => { + if (!libraryTracks.length) { + libraryTracks = scanSunoLibraryTracks(); + renderLibraryTrackSelect(); + } + updateSummary(); + const index = Number(libraryTrackSelect.value || 0); + const track = libraryTracks[index]; + if (!track) { + setStatus(body, "선택할 감지 곡이 없어. 곡 감지를 먼저 눌러줘."); + return; + } + try { + setStatus(body, `선택 1곡 처리 준비: ${track.title || track.id}`); + await postToCompanion([track], body); + } catch (error) { + setStatus(body, `로컬 프로그램 연결 실패. 선택 1곡 manifest로 저장할게: ${error.message || error}`); + await exportSunoManifest([track], body); + } + }); + body.querySelector("[data-cgs-process-library]").addEventListener("click", async () => { - if (!libraryTracks.length) libraryTracks = scanSunoLibraryTracks(); + if (!libraryTracks.length) { + libraryTracks = scanSunoLibraryTracks(); + renderLibraryTrackSelect(); + } updateSummary(); try { await postToCompanion(libraryTracks, body);