From 235804eed799e07b9caa6d7bb055635e5ccd2b33 Mon Sep 17 00:00:00 2001 From: Malith-Rukshan Date: Wed, 8 May 2024 19:22:07 +0530 Subject: [PATCH] first commit --- .gitignore | 25 ++++ Dockerfile | 21 +++ LICENSE | 21 +++ Logo.png | Bin 0 -> 57740 bytes README.md | 338 +++++++++++++++++++++++++++++++++++++++++++++++ Screenshot.jpg | Bin 0 -> 127336 bytes api.py | 90 +++++++++++++ requirements.txt | 4 + suno/__init__.py | 11 ++ suno/models.py | 126 ++++++++++++++++++ suno/suno.py | 239 +++++++++++++++++++++++++++++++++ suno/utils.py | 43 ++++++ 12 files changed, 918 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Logo.png create mode 100644 README.md create mode 100644 Screenshot.jpg create mode 100644 api.py create mode 100644 requirements.txt create mode 100644 suno/__init__.py create mode 100644 suno/models.py create mode 100644 suno/suno.py create mode 100644 suno/utils.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dfc7a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Byte-compiled +__pycache__/ + +# Distribution / packaging +build/ +dist/ +*.egg +*.egg-info/ + +# Jupyter Notebook +.ipynb_checkpoints/ +*.ipynb + +# Suno-Downloads +.downloads/ + +# Desktop Services Store +.DS_Store + +# PyPI setup.py +setup.py + +# Python venv +.venv +helper.txt \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f0d4af3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3.11-slim + +# Set the working directory inside the container +WORKDIR /app + +# Copy the requirements file to the working directory +COPY requirements.txt . + +# Install Requirements +RUN pip3 install -U pip +COPY requirements.txt . +RUN pip3 install --no-cache-dir -U -r requirements.txt + +# Copying All Source +COPY . . + +# Set Port +EXPOSE 8080 + +# Run API Server +CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8080"] \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2d4efc1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Malith Rukshan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Logo.png b/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..661729fd0a5687e38bdbf2e35e3156e3e6a2a938 GIT binary patch literal 57740 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

yl}^yj?nidYeCli-;>#3q-mqSQ zxxLIdRbPnLn~BbtYrY0QPDFM2IV-5D^%{0(K(l$RF^ToQz3_@-%i`{`(J^l{;g^&} zne{d#*wC-lWcy^4*!?H~-~^MWXt{pqhpRUET!}A94yr-=nGfQ_?>WX^@0;6UQ-FcU z%Z)*cw}f9MxFm(M6a-8ts`v(Dj_fD~h#(M0>2*d)A<1d%)n);T$__cW_xVS1lbLhDVD@MyiKLxOUr;1?DHL9BF<)cy#fDFGL(=`$CPbuJ=M zv;y>7Zn?4s(gw$-j&^P~K31N7MQBZ$NF+i3QY|F-&h6R-)qg`}L988Xfux}6N3m72 zR?U{IBeaFYuSgUdl+r;;LYG9b=S5o ze?23YycGn`{6m+I;t~^`e)SGT-+D;F);}GF@y6NUG=KQvgMG|o!earurd}fn;CJ-j z*$OUQzBV~GWs~OjA=T1wbIa!2u#BFi6W1Xt)ze`4$YDJV>#<|e@4w$?uGC2({3cZU zykY@%8Qw6JHuL{@Ts@K_pEr5j2GScT1xgaSLI`~A+BchdYr6TaeS#hAm%&zVr8oz! z2I}g`Si3`p8u$ODO!FMWq1N!SdzW8(X**<87S z`PyOajnuJ{UXsdMy^=ga&hUey?#*U`+pyoj_D_mPIo!bPWY>IXKf1Ms;Kxq?R^s8p z1#&jU91bFeNJ*gCA-{c=X^!2?51xmT{I=1AcP78jGy%-xWhD=MR3rsZHT*deT< znJ#isUfFZ<-XHMqhUFdU+#N?t@@>zIdD#Tm66I$wO)Oqt+4?u^Id;}|F!2?yF}$o! z<@(op7x?(>^unj#H0yZrR)p9(hPY9@bW?vq^mcu`j3jLIsK>7bX%G=RNGB1OUJZ8` zd5sQUw`&4P=}%NB{wmO#>N8~lss7#$ROJY%r}3lL$koxT0Y~LY#uVBILi(SRdB-xa zC>R?}**Cqe$~oFoq{ce+FguQ+kIBC$%s6xd;~s+smD2|YgZjcB-9N?0WK`ij^Gi8q5D=uXk8EUx?` zA{aC?lKi5Pf#(E#N!G3A{vkE>??A2CWv9;}$faFcavWqmPKt(I;K0XZR(7VMt_vjA0LaA`7bVg99!q_?L0G9OrO=!MP}4MUz>c|3?_z*;0tTYdS`r-6c&lU zu7MK!YDZKt(Kv6=+w5%Q+OgYA6^w?R40>ZdP}f-u1d3ASFtj{rq})~Hm#2&`Z}}M- zr-v?YT20gLf?TXM{Q^fXD;i!ZRd8G)YP^0oMkj$6 zS}q7fgo`)mH>=1rRg)6-kQXoJkW#_tel9e8T0K@aO)sz6N)dA(hjr}7N&Pp2=}Rz` zWMtVxid^mLmC4q(Yn?kQE4~xm?)tE5;<-mNd0H^hwlVbbnVn6f@vykY2W^h`fy_Ip zJe*H5T3(F5>zX>&P=~^27e||C&(AAu-!`geCwv^V-Mr=g{llshlS0#_FxG;g6->D%K)J`o@isO0C$J!WgFYSbw4%t`ZrThwAa_ae^GkpSG1KPd?13W4fWyQ z)!Zdqh1leQZcEGpJjOZi^T6hVJ=yi3Ehu>aR*7$AVOp^Zz zd#-p(Z?#E_JbB@9-+TR(>xhX{KWjvOzq)cML)-Vt$AIq3&KzSQG-J>+-r{zne%i&T z_yFPjmHno%Q^M}PjSsNeNu5=dBDG>V$FWY61dGK3HoS$b-q3FepHVmfTl{9 i^6Ow!jpqORdJ3?boJWP+R=W4UR0BN|U9^tV+y4i7|8dCx literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..86ba50b --- /dev/null +++ b/README.md @@ -0,0 +1,338 @@ +

+ +

+

✨ Suno AI API 🎵

+
+ +[![PyPI Package](https://img.shields.io/badge/PyPi-Library-1cd760?logo=pypi&style=flat)](https://pypi.org/project/SunoAI/) +[![Updates Telegram Channel](https://img.shields.io/badge/Updates-@SunoAPI-blue?logo=telegram&style=flat)](https://t.me/SunoAPI) + +
+

✨ Python API Library for Suno AI — Create Music with Generative AI ! 🚀

+
+
+ +**📚 SunoAI API Library is an unofficial Python client for interacting with [Suno AI](https://suno.ai/)'s music generator**. This library facilitates generating music using Suno's Chirp v3 model and includes main functions of Suno AI with a built-in music downloader. It can be deployed as a **[REST API](#-deployment---rest-api)** using FastAPI, Local, Docker, on a PaaS provider like Heroku. + +## ✨ Features +- **Python Client 🐍**: Easily interact with Suno AI. +- **Song Generation 🎶**: Utilize the Chirp v3 model for generating music. +- **Retrieve Song Info by ID 🎵**: Access detailed information about any song on Suno AI. +- **Music Downloader 📥**: Built-in functionality to download any music on Suno AI directly. +- **REST API Deployment 🌐**: Deployable as a REST API on PasS Platform , VPS or Local. +- **Comprehensive Documentation 📚**: Includes detailed examples and usage guides. +- **Docker Support 🐳**: Enables containerized deployment with Docker for flexibility. +- **PaaS Deployment ☁️:** Facilitates deployment on platforms like Heroku for convenient accessibility. + +# 🏷 Prerequisites + 📋 Before using the library or REST API, you must sign up on the [suno.ai](https://app.suno.ai/) website and obtain your cookie as shown in this screenshot. + +💡 You can find cookie from the Web Browser's **Developer Tools -> Network Tab** + +
+ Click to view - Screenshot +How to get Cookie from Suno.AI + +Just right click & open Inspect. Filter : `_clerk_js_version` +
+
+ +Set this cookie as `SUNO_COOKIE` environment variable or initialize the library as shown below. + +``` +import suno +client = suno.Suno(cookie='YOUR_COOKIE_HERE') +``` + +## 💾 Installation +Install the library using pip: + +``` +pip install SunoAI +``` + + + + + +## 🚀 Deployment - REST API + +### Deploy on PasS + +Set `SUNO_COOKIE` as an Environmental variable before deploy. - [Instructions](#-prerequisites) + +[![Deploy with heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) +[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/Malith-Rukshan/Suno-API) + +[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy) +
+ +### Deploy on Local or VPS + +``` +export SUNO_COOKIE="YOUR_COOKIE_HERE" +git clone git@github.com:Malith-Rukshan/Suno-API.git +pip3 install -r requirements.txt +cd Suno-API +fastapi run api.py --port 8080 +``` +🔗 Available at : http://127.0.0.1:8080 + +## 🛠️ Usage +### 📚 Library Methods + +`generate()` +- Arguments: + - prompt (str): Description or lyrics for the song. + - is_custom (bool): Determines whether to use custom lyrics (True) or a description (False). + - tags (Optional[str]): Describes desired voice type or characteristics. + - title (Optional[str]): Title for the generated music. + - make_instrumental (Optional[bool]): Generates an instrumental version if True. + - wait_audio (bool): Waits until the audio URLs are ready if True. +- Returns: A list of `Clip` objects containing song data with IDs. +- Example: + - **By Description** + ``` + clips = client.generate( + prompt="A peaceful melody reflecting a serene landscape", + is_custom=False, + wait_audio=True + ) + print(clips) + ``` + - **By Lyrics - Custom** + ``` + clips = client.generate( + prompt="I found a love, for me\nDarling, just dive right in and follow my lead\nWell, I found a girl, beautiful and sweet\nOh, I never knew you were the someone waiting for me...", + tags="English men voice", + title="Perfect by Malith-Rukshan/Suno-API", + make_instrumental= False, + is_custom=True, + wait_audio=True + ) + print(clips) + ``` +**✍️ Usage Note :** + - When setting `is_custom` to `True`, ensure that the prompt parameter contains the lyrics of the song you wish to generate. Conversely, if `is_custom` is set to `False`, provide a descriptive prompt detailing the essence of the song you want. + - When `wait_audio` is set to **True**, the request will take longer as it waits for the audio URLs to be ready. If not set, the response will return without `audio_url` but with audio IDs. In such cases, you'll need to call the **get_songs** or **get_song** method after a short interval to retrieve the response with the `audio_url` included, once the generation process is complete. + +`get_songs()` +- Arguments: + - song_ids (Optional[str]): A list of song IDs to fetch specific songs. +- Returns: A list of `Clip` objects representing the retrieved songs. +- Example: + ``` + songs = client.get_songs(song_ids="123,456") + print(songs) + ``` + +`get_credits()` +- Returns: Current billing and credits information as a `CreditsInfo` object. +- Example: + ``` + credits_info = client.get_credits() + print(credits_info) + ``` + +`download()` +- Arguments: + - song (str | Clip): The song to be downloaded. This can be either the ID of the song as a string or a Clip object containing the song's metadata. + - path (str): The directory path where the song will be saved. If not specified, defaults to "./downloads". +- Returns: str - The full filepath to the downloaded song. +- Raises: + - TypeError: If the song argument is neither a string ID nor a Clip object. + - Exception: If the download fails due to issues like an invalid URL or network errors. +- Example: + ``` + # Using a song ID + file_path = client.download(song="uuid-type-songid-1234") + print(f"Song downloaded to: {file_path}") + + # Using a Clip object + clip = client.get_song("uuid-type-songid-1234") + file_path = client.download(song=clip) + print(f"Song downloaded to: {file_path}") + ``` + +### 📚 Library Responses + +- **Clip Model:** + + The **Clip** class encapsulates the details of a music track generated by the Suno AI. Each attribute of this class provides specific information about the track: + - **id** (str): Unique identifier for the clip. + - **video_url** (str): URL of the video version of the song, if available. + - **audio_url** (str): URL where the audio track can be streamed or downloaded. + - **image_url** (str): URL of the song's image cover. + - **image_large_url** (str): URL of a larger version of the song's image cover. + - **is_video_pending** (bool): Indicates whether the video for the song is still processing. + - **major_model_version** (str): The major version of the model used to generate the song. + - **model_name** (str): Name of the model used to generate the track. + - **metadata** (ClipMetadata): Additional metadata related to the clip including tags, prompts, and other information. + - **is_liked** (bool): Indicates whether the song has been liked by the user. + - **user_id** (str): User ID of the person who created or requested the song. + - **display_name** (str): Display name of the user associated with the song. + - **handle** (str): User's handle or username. + - **is_handle_updated** (bool): Specifies whether the user's handle has been updated. + - **is_trashed** (bool): Indicates if the clip has been marked as trashed. + - **reaction** (dict): Reactions to the song from users, if any. + - **created_at** (str): Timestamp indicating when the song was created. + - **status** (str): Current status of the song (e.g., processing, completed). + - **title** (str): Title of the song. + - **play_count** (int): How many times the song has been played. + - **upvote_count** (int): Number of upvotes the song has received. + - **is_public** (bool): Indicates whether the song is publicly accessible. + +- **CreditsInfo Model:** + + The **CreditsInfo** class provides information about the user's credit balance and usage within the Suno AI system. + - **credits_left** (int): The number of credits remaining for the user. + - **period** (int): The current billing period for the credits, represented in some form of date or timeframe. + - **monthly_limit** (int): The total number of credits allocated to the user for the current month. + - **monthly_usage** (int): The amount of credits used by the user during the current month. + +## 🌐 REST API Usage + +**1. Generate Music** + +`POST /generate` + + - **Request Body:** + ``` + { + "prompt": "A serene melody about the ocean", + "is_custom": false, + "tags": "relaxing, instrumental", + "title": "Ocean Waves", + "make_instrumental": true, + "wait_audio": true + } + ``` + + - **Response:** +
+ Click to view + + ``` + [ + { + "id": "124b735f-7fb0-42b9-8b35-761aed65a7f6", + "video_url": "", + "audio_url": "https://audiopipe.suno.ai/item_id=124b735f-7fb0-42b9-8b35-761aed65a7f6", + "image_url": "https://cdn1.suno.aiimage_124b735f-7fb0-42b9-8b35-761aed65a7f6.png", + "image_large_url": "https://cdn1.suno.aiimage_large_124b735f-7fb0-42b9-8b35-761aed65a7f.png", + "is_video_pending": False, + "major_model_version": "v3", + "model_name": "chirp-v3", + "metadata": { + "tags": "English men voice", + "prompt": "I found a love, for me\nDarling,just dive right in and follow mylead\nWell, I found a girl, beautiful andsweet\nOh, I never knew you were thesomeone waiting for me\n\n′Cause we werejust kids when we fell in love\nNot knowingwhat it was\nI will not give you up thistime\nBut darling, just kiss me slow\nYourheart is all I own\nAnd in your eyes,you're holding mine\n\nBaby, I′m dancing inthe dark\nWith you between myarms\nBarefoot on the grass\nListening toour favourite song\nWhen you said youlooked a mess\nI whispered underneath mybreath\nBut you heard it\nDarling, you lookperfect tonight", + "gpt_description_prompt": None, + "audio_prompt_id": None, + "history": None, + "concat_history": None, + "type": "gen", + "duration": None, + "refund_credits": None, + "stream": True, + "error_type": None, + "error_message": None + }, + "is_liked": False, + "user_id":"2340653f-32cb-4343-artb-09203ty749e9", + "display_name": "Snonymous", + "handle": "anonymous", + "is_handle_updated": False, + "is_trashed": False, + "reaction": None, + "created_at": "2024-05-05T11:54:09.356Z", + "status": "streaming", + "title": "Perfect by Malith-Rukshan/Suno-API", + "play_count": 0, + "upvote_count": 0, + "is_public": False + } + ] + ``` +
+ +**2. Retrieve Songs** + +`POST /songs` + + - **Request Body:** + ``` + { + "song_ids": "uuid-format-1234,4567-abcd" + } + ``` + - **Response:** + Array of Clips - Same to `/generate` Response + +**3. Get a Specific Song** + +`POST /get_song` + + - **Request Body:** + ``` + { + "song_id": "uuid-song-id" + } + ``` + - **Response:** + Just Clip Response - Same to `/generate` Response but Only Clip + +**4. Retrieve Credit Information** + +`GET /credits` + + - **Response:** + ``` + { + "credits_left": 50, + "period": "2024-05", + "monthly_limit": 100, + "monthly_usage": 25 + } + ``` +> According to [Suno.ai](https://suno.ai/) Each song generation consumes 5 credits, thus a total of 10 credits is necessary for each successful call. + + +## 🤝 Contributing +Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. + +## 🎯 Credits and Other +All content and music generated through this library are credited to [Suno AI](https://suno.ai/). This unofficial API provides a convenient way to interact with Suno AI's services but does not claim any ownership or rights over the music generated. Please respect the terms of service of Suno AI when using their platform ❤️. + +> This library is intended primarily for educational and development purposes. It aims to enhance and simplify access to Suno AI's music generation capabilities. If you enjoy the music generated, consider supporting Suno AI directly. +> Logo Credit : [@rejaul43](https://dribbble.com/rejaul43) + +## ⚖️ License +This project is distributed under the MIT License. This license allows everyone to use, modify, and redistribute the code. However, it comes with no warranties regarding its functionality. For more details, see the [LICENSE](https://github.com/Malith-Rukshan/Suno-API/blob/main/LICENSE) file in the repository. + +## 🌟 Support and Community +If you found this project helpful, **don't forget to give it a ⭐ on GitHub.** This helps others find and use the project too! 🫶 + +Join our Telegram channels, + +- [@SingleDevelopers](https://t.me/SingleDevelopers), for more amazing projects and updates ✓ +- [@SunoAPI](https://t.me/SunoAPI), for this project updates ✓ + +## 📬 Contact +If you have any questions, feedback, or just want to say hi, you can reach out to me: + +- Developer : [@MalithRukshan](https://t.me/MalithRukshan) +- Support Group : [@Suno_API](https://t.me/Suno_API) + +🧑‍💻 Built with 💖 by [Single Developers ](https://t.me/SingleDevelopers) + + + + + diff --git a/Screenshot.jpg b/Screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a2f1dc3b5b1514fd32618b9e0dc0385f5a457de GIT binary patch literal 127336 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%0Ayj;^v@FlZm-m2r``L%4$b)YQ}@6a|g+3LDL~_ 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

iaq@wD)7HK_z`61E$0^!%EGL#Ua|;zUv4b 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 literal 0 HcmV?d00001 diff --git a/api.py b/api.py new file mode 100644 index 0000000..5954da1 --- /dev/null +++ b/api.py @@ -0,0 +1,90 @@ +# © [2024] Malith-Rukshan. All rights reserved. +# Repository: https://github.com/Malith-Rukshan/Suno-API + +import os +from typing import List +from suno import suno +from suno.models import RequestParams, CreditsInfo, Clip +import fastapi +from fastapi.responses import RedirectResponse, JSONResponse +from suno import __version__ + +COOKIE = os.getenv("SUNO_COOKIE") + +# Initilize Suno API Client +client = suno.Suno(cookie=COOKIE) + +description = """ +### Suno AI Unofficial API + + + + + + + + + + + +This is an **unofficial API for [Suno AI](https://www.suno.ai/)**, a platform that utilizes artificial intelligence to generate music. + +### 🚀 Main Features +- **Generate Music:** Leverage Suno AI's capabilities to create music based on different styles and inputs. +- **Retrieve Music Data:** Access details about generated music tracks, including audio files, metadata, and more. +- **Get Credit Balance Info** +- **Documentation:** [📚 Redoc](/redoc) | [🏷 Usage](https://github.com/Malith-Rukshan/Suno-API?tab=readme-ov-file#-rest-api-usage) + +### Repository +You can find the source code for this API at [GitHub](https://github.com/Malith-Rukshan/Suno-API). + +### Disclaimer +This API is not officially associated with Suno AI. It was developed to facilitate easier access and manipulation of the music generation capabilities provided by Suno AI's official website. + +### Usage +Please note that this API is intended for educational and development purposes. Ensure you respect Suno AI's terms of service when using their services. +""" + +# FastAPI app +app = fastapi.FastAPI( + title="Suno API", + summary="An Unofficial Python Library for Suno AI API", + description=description, + version=__version__, + contact={ + "name": "Malith Rukshan", + "url": "https://MalithRukshan.t.me", + "email": "singledeveloper.lk@gmail.com", + } +) + +# Redirect to Docs :) + + +@app.get("/", include_in_schema=False) +async def redirect_to_docs(): + return RedirectResponse(url='/docs') + + +@app.post(f"/generate", response_model=List[Clip]) +def generate(params: RequestParams) -> JSONResponse: + clips = client.generate(**params.model_dump()) + return JSONResponse(content=[clip.model_dump() for clip in clips]) + + +@app.post(f"/songs", response_model=List[Clip]) +def generate(song_ids: str | None = None) -> JSONResponse: + clips = client.get_songs(song_ids) + return JSONResponse(content=[clip.model_dump() for clip in clips]) + + +@app.post(f"/get_song", response_model=Clip) +def generate(song_id: str) -> JSONResponse: + clip = client.get_song(song_id) + return JSONResponse(content=clip.model_dump()) + + +@app.get(f"/credits", response_model=CreditsInfo) +def credits() -> JSONResponse: + credits = client.get_credits() + return JSONResponse(content=credits.model_dump()) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f2ae559 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +fastapi +uvicorn +requests +pydantic \ No newline at end of file diff --git a/suno/__init__.py b/suno/__init__.py new file mode 100644 index 0000000..379ca79 --- /dev/null +++ b/suno/__init__.py @@ -0,0 +1,11 @@ +from .suno import Suno +from .models import Clip, CreditsInfo, RequestParams + +__all__ = ( + "Suno", + "Clip", + "RequestParams", + "CreditsInfo" +) + +__version__ = "1.0" \ No newline at end of file diff --git a/suno/models.py b/suno/models.py new file mode 100644 index 0000000..cc41d8e --- /dev/null +++ b/suno/models.py @@ -0,0 +1,126 @@ +# © [2024] Malith-Rukshan. All rights reserved. +# Repository: https://github.com/Malith-Rukshan/Suno-API + + +from pydantic import BaseModel, ConfigDict + +class ClipMetadata(BaseModel): + tags: str | None = None + prompt: str | None = None + gpt_description_prompt: str | None = None + audio_prompt_id: str | None = None + history: str | None = None + concat_history: str | None = None + type: str | None = None + duration: float | None = None + refund_credits: float | None = None + stream: bool | None = None + error_type: str | None = None + error_message: str | None = None + + model_config = ConfigDict(protected_namespaces=()) + + +class Clip(BaseModel): + id: str + video_url: str | None = None + audio_url: str | None = None + image_url: str | None = None + image_large_url: str | None = None + is_video_pending: bool + major_model_version: str + model_name: str + metadata: ClipMetadata + is_liked: bool + user_id: str + display_name: str + handle: str + is_handle_updated: bool + is_trashed: bool + reaction: dict | None = None + created_at: str + status: str + title: str + play_count: int | None = None + upvote_count: int | None = None + is_public: bool + + class Config: + protected_namespaces = () + json_schema_extra = { + "example": { + "id": "124b735f-7fb0-42b9-8b35-761aed65a7f6", + "video_url": "", + "audio_url": "https://audiopipe.suno.ai/?item_id=124b735f-7fb0-42b9-8b35-761aed65a7f6", + "image_url": "https://cdn1.suno.ai/image_124b735f-7fb0-42b9-8b35-761aed65a7f6.png", + "image_large_url": "https://cdn1.suno.ai/image_large_124b735f-7fb0-42b9-8b35-761aed65a7f6.png", + "is_video_pending": False, + "major_model_version": "v3", + "model_name": "chirp-v3", + "metadata": { + "tags": "English men voice", + "prompt": "I found a love, for me\nDarling, just dive right in and follow my lead\nWell, I found a girl, beautiful and sweet\nOh, I never knew you were the someone waiting for me\n\n′Cause we were just kids when we fell in love\nNot knowing what it was\nI will not give you up this time\nBut darling, just kiss me slow\nYour heart is all I own\nAnd in your eyes, you're holding mine\n\nBaby, I′m dancing in the dark\nWith you between my arms\nBarefoot on the grass\nListening to our favourite song\nWhen you said you looked a mess\nI whispered underneath my breath\nBut you heard it\nDarling, you look perfect tonight", + "gpt_description_prompt": None, + "audio_prompt_id": None, + "history": None, + "concat_history": None, + "type": "gen", + "duration": None, + "refund_credits": None, + "stream": True, + "error_type": None, + "error_message": None + }, + "is_liked": False, + "user_id": "2340653f-32cb-4343-artb-09203ty749e9", + "display_name": "Snonymous", + "handle": "anonymous", + "is_handle_updated": False, + "is_trashed": False, + "reaction": None, + "created_at": "2024-05-05T11:54:09.356Z", + "status": "streaming", + "title": "Perfect by Malith-Rukshan/Suno-API", + "play_count": 0, + "upvote_count": 0, + "is_public": False + } + } + + +class RequestParams(BaseModel): + prompt: str + is_custom: bool = False + tags: str = "" + title: str = "" + make_instrumental: bool = False + wait_audio: bool = False + + class Config: + protected_namespaces = () + json_schema_extra = {"examples": [{ + "prompt": "I found a love, for me\nDarling, just dive right in and follow my lead\nWell, I found a girl, beautiful and sweet\nOh, I never knew you were the someone waiting for me\n\n′Cause we were just kids when we fell in love\nNot knowing what it was\nI will not give you up this time\nBut darling, just kiss me slow\nYour heart is all I own\nAnd in your eyes, you're holding mine\n\nBaby, I′m dancing in the dark\nWith you between my arms\nBarefoot on the grass\nListening to our favourite song\nWhen you said you looked a mess\nI whispered underneath my breath\nBut you heard it\nDarling, you look perfect tonight", + "is_custom": True, + "tags": "English men voice", + "title": "Perfect by Malith-Rukshan/Suno-API", + "make_instrumental": False, + "wait_audio": True + }]} + + +class CreditsInfo(BaseModel): + credits_left: int + period: int | None = None + monthly_limit: int + monthly_usage: int + + class Config: + protected_namespaces = () + json_schema_extra = { + "example": { + "credits_left": 50, + "period": "Date-Here", + "monthly_limit": 50, + "monthly_usage": 0 + } + } diff --git a/suno/suno.py b/suno/suno.py new file mode 100644 index 0000000..a9c30af --- /dev/null +++ b/suno/suno.py @@ -0,0 +1,239 @@ +# © [2024] Malith-Rukshan. All rights reserved. +# Repository: https://github.com/Malith-Rukshan/Suno-API + +import os +import pathlib +import random +import time +import logging +from typing import List, Optional +import requests + +from .models import Clip, CreditsInfo +from .utils import create_clip_from_data, response_to_clips, generate_fake_useragent + +# Setup basic logging configuration +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) + +# Fetch the cookie from environment variables; used for authentication +COOKIE = os.getenv("SUNO_COOKIE", "") + + +class Suno(): + """Main class for interacting with Suno API.""" + BASE_URL = 'https://studio-api.suno.ai' + CLERK_BASE_URL = 'https://clerk.suno.com' + + def __init__(self, cookie: Optional[str] = None) -> None: + """Initialize the Suno client with optional cookie. If no cookie is provided, it uses the one from the environment.""" + if cookie is None: + cookie = COOKIE + if cookie == "": + raise Exception("Environment variable SUNO_COOKIE is not found !") + + headers = { + # Generate a random User-agent for requests + 'User-Agent': generate_fake_useragent(), + 'Cookie': cookie + } + self.client = requests.Session() + self.client.headers.update(headers) + self.current_token = None + self.sid = None + + self._get_session_id() # Retrieve session ID upon initialization + self._keep_alive() # Keep session alive + + def _get_session_id(self) -> None: + """Retrieve a session ID from the Suno service.""" + url = f"{Suno.CLERK_BASE_URL}/v1/client?_clerk_js_version=4.72.1" + response = self.client.get(url) + if not response.json()['response']: + raise Exception( + "Failed to get session id, you may need to update the SUNO_COOKIE") + if 'last_active_session_id' in response.json()['response']: + self.sid = response.json()['response']['last_active_session_id'] + else: + raise Exception( + f"Failed to get Session ID: {response.status_code}") + + def _keep_alive(self, is_wait=False) -> None: + """Renew the authentication token periodically to keep the session active.""" + if not self.sid: + raise Exception("Session ID is not set. Cannot renew token.") + + renew_url = f"{Suno.CLERK_BASE_URL}/v1/client/sessions/{self.sid}/tokens?_clerk_js_version=4.72.0-snapshot.vc141245" + renew_response = self.client.post(renew_url) + logger.info("Renew Token ♻️") + + if is_wait: + # Sleep randomly to mimic human interaction + time.sleep(random.uniform(1, 2)) + + new_token = renew_response.json()['jwt'] + self.current_token = new_token + # Set New Token to Headers + self.client.headers['Authorization'] = f"Bearer {new_token}" + + # Generate Songs + def generate(self, prompt, is_custom, tags=None, title=None, make_instrumental=False, wait_audio=False) -> List[Clip]: + """ + Generate songs based on the provided parameters and optionally wait for the audio to be ready. + + Parameters: + - prompt (str): If is_custom=True, this should be the lyrics of the song. If False, it should be a brief description of what the song should be about. + - is_custom (bool): Determines whether the song should be generated from custom lyrics (True) or from a description (False). + - tags (Optional[str]): Describes the desired voice type or characteristics (e.g., "English male voice"). Default is None. + - title (Optional[str]): The title for the generated music. Default is None. + - make_instrumental (Optional[bool]): If True, generates an instrumental version of the track. Default is False. + - wait_audio (bool): If True, waits until the audio URLs are ready and returns them. If False, returns the IDs of the songs being processed, which can be used to fetch the songs later using get_song. + + Returns: + List[Clip]: A list of Clip objects containing either song IDs or complete song data, depending on the 'wait_audio' parameter. + """ + self._keep_alive() + logger.info("Generating Audio...") + payload = { + "make_instrumental": make_instrumental, + "mv": "chirp-v3-0", + "prompt": "" + } + if is_custom: + payload["tags"] = tags + payload["title"] = title + payload["prompt"] = prompt + else: + payload["gpt_description_prompt"] = prompt + + response = self.client.post( + f"{Suno.BASE_URL}/api/generate/v2/", json=payload) + + if response.status_code != 200: + logger.info("Audio Generate Failed ⁉️") + raise Exception(f"Error response: {response.text}") + + song_ids = [audio['id'] for audio in response.json()['clips']] + if wait_audio: + return self._wait_for_audio(song_ids) + else: + self._keep_alive(True) + logger.info("Generated Audio Successfully ✅") + return response_to_clips(response.json()['clips']) + + def _wait_for_audio(self, song_ids): + """Helper method to wait for audio processing to complete.""" + start_time = time.time() + last_clips = [] + while time.time() - start_time < 100: # Timeout after 100 seconds + clips = self.get_songs(song_ids) + all_completed = all( + audio.status in ['streaming', 'complete'] for audio in clips) + if all_completed: + logger.info("Generated Audio Successfully ✅") + return clips + last_clips = clips + time.sleep(random.uniform(3, 6)) # Wait with variation + self._keep_alive(True) + logger.info("Generated Audio Successfully ✅") + return last_clips + + def get_songs(self, song_ids: str = None) -> List[Clip]: + """ + Retrieve songs from the library. If song IDs are provided, fetches specific songs; otherwise, retrieves a general list of songs. + + Parameters: + - song_ids (str): A list of song IDs to retrieve specific songs. If None, the function fetches a general list of songs from the library. Split by ",". + + Returns: + List[Clip]: A list of Clip objects representing the songs. Each Clip contains detailed information such as song status, URL, and metadata. + + Example: + - To retrieve specific songs: get_songs(song_ids=["123-abcd-456", "456-cdef-789"]) + - To retrieve a list of all songs in the library: get_songs() + """ + self._keep_alive() # Ensure session is active + url = f"{Suno.BASE_URL}/api/feed/" + if song_ids: + url += f"?ids={song_ids}" + logger.info("Getting Songs Info...") + response = self.client.get(url) # Call API + return response_to_clips(response.json()) + + def get_song(self, id: str) -> Clip: + """ + Retrieve a single song by its ID. + + Parameters: + - id (str): The ID of the song to retrieve. + + Returns: + Clip: A Clip object containing details about the song, such as the audio URL, song status, and other metadata. + """ + self._keep_alive() # Ensure session is active + logger.info("Getting Song Info...") + response = self.client.get( + f"{Suno.BASE_URL}/api/feed/?ids={id}") # Call API + return create_clip_from_data(response.json()[0]) + + def get_credits(self) -> CreditsInfo: + """Retrieve current billing and credits information.""" + self._keep_alive() # Ensure session is active + logger.info("Credits Info...") + response = self.client.get( + f"{Suno.BASE_URL}/api/billing/info/") # Call API + if response.status_code == 200: + data = response.json() + result = { + "credits_left": data["total_credits_left"], + "period": data["period"], + "monthly_limit": data["monthly_limit"], + "monthly_usage": data["monthly_usage"], + } + return CreditsInfo(**result) + else: + raise Exception(f"Error retrieving credits: {response.text}") + + def _get_dl_path(self, id: str, path: str) -> str: + output_dir = pathlib.Path(path) + output_dir.mkdir(parents=True, exist_ok=True) + return output_dir / f"SunoMusic-{id}.mp3" + + def download(self, song: str | Clip, path: str = "./downloads",) -> str: + """ + Downloads a Suno song to a specified location. + + Args: + song (str | Clip): Either the ID of the song or a Clip object representing the song. + path (str): The directory where the song should be saved. Defaults to "./downloads". + + Returns: + str: The full filepath of the downloaded song. + + Raises: + TypeError: If the 'song' argument is not of type str or Clip. + Exception: If the download fails (e.g., bad URL, HTTP errors). + """ + if isinstance(song, Clip): + id = song.id + url = song.audio_url + elif isinstance(song, str): + id = song + url = self.get_song(id).audio_url + else: + raise TypeError + logger.info(f"Audio URL : {url}") + response = requests.get(url) + if not response.ok: + raise Exception( + f"failed to download from audio url: {response.status_code}" + ) + response = requests.get(url, stream=True) + response.raise_for_status() # Check for HTTP errors + filename = self._get_dl_path(id, path) + with open(filename, 'wb') as f: + for chunk in response.iter_content(chunk_size=1024): + if chunk: # Filter out keep-alive chunks + f.write(chunk) + logger.info(f"Download complete: {filename}") + return filename diff --git a/suno/utils.py b/suno/utils.py new file mode 100644 index 0000000..09c0428 --- /dev/null +++ b/suno/utils.py @@ -0,0 +1,43 @@ +# © [2024] Malith-Rukshan. All rights reserved. +# Repository: https://github.com/Malith-Rukshan/Suno-API + +from .models import Clip, ClipMetadata +from typing import List +import random + +os_systems = [ + 'Windows NT 10.0; Win64; x64', + 'Windows NT 6.1; WOW64', + 'Macintosh; Intel Mac OS X 10_15_7', + 'Linux x86_64' +] + +browsers = [ + 'Chrome/103.0.0.0 Safari/537.36', + 'Firefox/102.0', + 'Edge/103.0.1264.37', + 'Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16' +] + + +def generate_fake_useragent(): + os_system = random.choice(os_systems) + browser = random.choice(browsers) + return f'Mozilla/5.0 ({os_system}) AppleWebKit/537.36 (KHTML, like Gecko) {browser}' + + +def create_clip_from_data(clip_data) -> Clip: + metadata = ClipMetadata(**clip_data['metadata']) + clip_data['metadata'] = metadata + clip_instance = Clip(**clip_data) + + return clip_instance + + +def response_to_clips(clips_data) -> List[Clip]: + clips = [] + for clip_data in clips_data: + clip_instance = create_clip_from_data(clip_data) + clips.append(clip_instance) + + return clips