Add single detected Suno track action
This commit is contained in:
@@ -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 @@
|
||||
<div class="cgs-row">
|
||||
<button class="cgs-btn cgs-wide" type="button" data-cgs-scan-library>곡 감지</button>
|
||||
</div>
|
||||
<select class="cgs-select" data-cgs-library-track>
|
||||
<option value="">감지된 곡 없음</option>
|
||||
</select>
|
||||
<div class="cgs-row">
|
||||
<button class="cgs-btn cgs-wide" type="button" data-cgs-process-one>선택 1곡만 다운</button>
|
||||
</div>
|
||||
<div class="cgs-row">
|
||||
<button class="cgs-btn cgs-wide" type="button" data-cgs-test-companion>연결 테스트</button>
|
||||
</div>
|
||||
@@ -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 = `<option value="">감지된 곡 없음</option>`;
|
||||
return;
|
||||
}
|
||||
libraryTrackSelect.innerHTML = libraryTracks
|
||||
.map((track, index) => `<option value="${index}">${escapeHtml(trackOptionLabel(track, index))}</option>`)
|
||||
.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);
|
||||
|
||||
Reference in New Issue
Block a user