Add clip-id based Suno library sync
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// ==UserScript==
|
||||
// @name ChatGPT to Suno Prompt Copier
|
||||
// @namespace local.suno-helper
|
||||
// @version 0.5.2
|
||||
// @version 0.6.0
|
||||
// @description Copy structured ChatGPT song prompt versions into Suno fields.
|
||||
// @author local
|
||||
// @match https://chatgpt.com/*
|
||||
@@ -952,10 +952,33 @@
|
||||
setStatus(statusTarget, "보낼 곡을 못 찾았어. 곡 감지를 먼저 해줘.");
|
||||
return;
|
||||
}
|
||||
const syncManifest = {
|
||||
pageUrl: location.href,
|
||||
capturedAt: new Date().toISOString(),
|
||||
count: tracks.length,
|
||||
tracks,
|
||||
};
|
||||
setStatus(statusTarget, `${tracks.length}곡 로컬 폴더와 비교 중...`);
|
||||
const syncResponse = await fetch("http://127.0.0.1:17873/sync-index", {
|
||||
method: "POST",
|
||||
headers: { "content-type": "application/json" },
|
||||
body: JSON.stringify(syncManifest),
|
||||
});
|
||||
const syncText = await syncResponse.text();
|
||||
if (!syncResponse.ok) {
|
||||
throw new Error(syncText || `${syncResponse.status} ${syncResponse.statusText}`);
|
||||
}
|
||||
const syncData = tryParseJson(syncText) || {};
|
||||
const missingTracks = Array.isArray(syncData.tracks) ? syncData.tracks : [];
|
||||
if (!missingTracks.length) {
|
||||
setStatus(statusTarget, `동기화 완료 상태: ${tracks.length}곡 모두 로컬에 있음`);
|
||||
return;
|
||||
}
|
||||
|
||||
const preparedTracks = [];
|
||||
for (let index = 0; index < tracks.length; index += 1) {
|
||||
const track = { ...tracks[index] };
|
||||
setStatus(statusTarget, `${index + 1}/${tracks.length} WAV 준비 중: ${track.title || track.id}`);
|
||||
for (let index = 0; index < missingTracks.length; index += 1) {
|
||||
const track = { ...missingTracks[index] };
|
||||
setStatus(statusTarget, `${index + 1}/${missingTracks.length} 없는 곡 WAV 준비 중: ${track.title || track.id}`);
|
||||
track.wavUrl = await requestSunoWavUrl(track);
|
||||
preparedTracks.push(track);
|
||||
}
|
||||
@@ -975,7 +998,11 @@
|
||||
throw new Error(text || `${response.status} ${response.statusText}`);
|
||||
}
|
||||
const data = tryParseJson(text) || {};
|
||||
setStatus(statusTarget, `로컬 처리 시작: ${data.jobId || "job"} / ${data.log || "companion console 확인"}`);
|
||||
if (data.skipped) {
|
||||
setStatus(statusTarget, "동기화 완료 상태: 처리할 새 곡 없음");
|
||||
return;
|
||||
}
|
||||
setStatus(statusTarget, `로컬 처리 시작: ${data.jobId || "job"} / 새 곡 ${preparedTracks.length}개`);
|
||||
}
|
||||
|
||||
async function testCompanion(statusTarget) {
|
||||
|
||||
Reference in New Issue
Block a user