From 0e8a2f55a24fdbdc15536fbdb914b666648b7877 Mon Sep 17 00:00:00 2001 From: Abwasserrohr <44294954+Abwasserrohr@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:45:32 +0200 Subject: [PATCH 1/3] Added negative tags --- src/lib/SunoApi.ts | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/lib/SunoApi.ts b/src/lib/SunoApi.ts index a1c6ea1..63c5800 100644 --- a/src/lib/SunoApi.ts +++ b/src/lib/SunoApi.ts @@ -23,6 +23,7 @@ export interface AudioInfo { status: string; // Status type?: string; tags?: string; // Genre of music. + negative_tags?: string; // Negative tags of music. duration?: string; // Duration of the audio error_message?: string; // Error message if any } @@ -150,23 +151,25 @@ class SunoApi { * @param title The title for the generated audio. * @param make_instrumental Indicates if the generated audio should be instrumental. * @param wait_audio Indicates if the method should wait for the audio file to be fully generated before returning. + * @param negative_tags Negative tags that should not be included in the generated audio. * @returns A promise that resolves to an array of AudioInfo objects representing the generated audios. */ - public async custom_generate( - prompt: string, - tags: string, - title: string, - make_instrumental: boolean = false, - model?: string, - wait_audio: boolean = false, - ): Promise { - const startTime = Date.now(); - const audios = await this.generateSongs(prompt, true, tags, title, make_instrumental, model, wait_audio); - const costTime = Date.now() - startTime; - logger.info("Custom Generate Response:\n" + JSON.stringify(audios, null, 2)); - logger.info("Cost time: " + costTime); - return audios; - } +public async custom_generate( + prompt: string, + tags: string, + title: string, + make_instrumental: boolean = false, + model?: string, + wait_audio: boolean = false, + negative_tags?: string, +): Promise { + const startTime = Date.now(); + const audios = await this.generateSongs(prompt, true, tags, title, make_instrumental, model, wait_audio, negative_tags); + const costTime = Date.now() - startTime; + logger.info("Custom Generate Response:\n" + JSON.stringify(audios, null, 2)); + logger.info("Cost time: " + costTime); + return audios; +} /** * Generates songs based on the provided parameters. @@ -177,6 +180,7 @@ class SunoApi { * @param title Optional title for the song, used only if isCustom is true. * @param make_instrumental Indicates if the generated song should be instrumental. * @param wait_audio Indicates if the method should wait for the audio file to be fully generated before returning. + * @param negative_tags Negative tags that should not be included in the generated audio. * @returns A promise that resolves to an array of AudioInfo objects representing the generated songs. */ private async generateSongs( @@ -186,7 +190,8 @@ class SunoApi { title?: string, make_instrumental?: boolean, model?: string, - wait_audio: boolean = false + wait_audio: boolean = false, + negative_tags?: string, ): Promise { await this.keepAlive(false); const payload: any = { @@ -197,6 +202,7 @@ class SunoApi { if (isCustom) { payload.tags = tags; payload.title = title; + payload.negative_tags = negative_tags; payload.prompt = prompt; } else { payload.gpt_description_prompt = prompt; @@ -208,6 +214,7 @@ class SunoApi { title: title, make_instrumental: make_instrumental, wait_audio: wait_audio, + negative_tags: negative_tags, payload: payload, }, null, 2)); const response = await this.client.post( @@ -259,6 +266,7 @@ class SunoApi { prompt: audio.metadata.prompt, type: audio.metadata.type, tags: audio.metadata.tags, + negative_tags: audio.metadata.negative_tags, duration: audio.metadata.duration, })); } From 7045b59123a5c9108403d2d4ee04de095936b5c7 Mon Sep 17 00:00:00 2001 From: Abwasserrohr <44294954+Abwasserrohr@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:46:11 +0200 Subject: [PATCH 2/3] Added negative tags --- src/app/api/custom_generate/route.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/api/custom_generate/route.ts b/src/app/api/custom_generate/route.ts index cbac880..02d964a 100644 --- a/src/app/api/custom_generate/route.ts +++ b/src/app/api/custom_generate/route.ts @@ -9,12 +9,13 @@ export async function POST(req: NextRequest) { if (req.method === 'POST') { try { const body = await req.json(); - const { prompt, tags, title, make_instrumental, model, wait_audio } = body; + const { prompt, tags, title, make_instrumental, model, wait_audio, negative_tags } = body; const audioInfo = await (await sunoApi).custom_generate( prompt, tags, title, Boolean(make_instrumental), model || DEFAULT_MODEL, - Boolean(wait_audio) + Boolean(wait_audio), + negative_tags ); return new NextResponse(JSON.stringify(audioInfo), { status: 200, From 762497a3c6d681cc936bec2d459cfd6aab50dfce Mon Sep 17 00:00:00 2001 From: Abwasserrohr <44294954+Abwasserrohr@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:46:45 +0200 Subject: [PATCH 3/3] Added negative tags --- src/app/docs/swagger-suno-api.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/docs/swagger-suno-api.json b/src/app/docs/swagger-suno-api.json index 8741914..d18dd54 100644 --- a/src/app/docs/swagger-suno-api.json +++ b/src/app/docs/swagger-suno-api.json @@ -138,6 +138,11 @@ "description": "Music genre", "example": "pop metal male melancholic" }, + "negative_tags": { + "type": "string", + "description": "Negative Music genre", + "example": "female edm techno" + }, "title": { "type": "string", "description": "Music title",