nostrdvm/tests/sunoai.py

95 lines
2.5 KiB
Python
Raw Normal View History

2024-06-07 23:45:26 +02:00
import asyncio
2024-11-28 08:39:48 +01:00
2024-06-05 23:52:42 +02:00
import requests
# replace your vercel domain
base_url = 'http://localhost:3000'
def custom_generate_audio(payload):
url = f"{base_url}/api/custom_generate"
response = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})
return response.json()
def extend_audio(payload):
url = f"{base_url}/api/extend_audio"
response = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})
return response.json()
def generate_audio_by_prompt(payload):
url = f"{base_url}/api/generate"
response = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})
return response.json()
def get_audio_information(audio_ids):
url = f"{base_url}/api/get?ids={audio_ids}"
response = requests.get(url)
return response.json()
def get_quota_information():
url = f"{base_url}/api/get_limit"
response = requests.get(url)
return response.json()
def get_clip(clip_id):
url = f"{base_url}/api/clip?id={clip_id}"
response = requests.get(url)
return response.json()
def generate_whole_song(clip_id):
payload = {"clip_id": clip_id}
url = f"{base_url}/api/concat"
response = requests.post(url, json=payload)
return response.json()
if __name__ == '__main__':
prompt = "A popular heavy metal song about a purple Ostrich, Nostr, sung by a deep-voiced male singer, slowly and melodiously. The lyrics depict hope for a better future."
has_quota = False
quota_info = get_quota_information()
if int(quota_info['credits_left']) >= 20:
has_quota = True
else:
print("No quota left, exiting.")
if has_quota:
data = generate_audio_by_prompt({
"prompt": prompt,
"make_instrumental": False,
"wait_audio": False
})
if len(data) == 0:
print("Couldn't create song")
pass
ids = f"{data[0]['id']},{data[1]['id']}"
print(f"ids: {ids}")
for _ in range(60):
data = get_audio_information(ids)
if data[0]["status"] == 'streaming':
print(f"{data[0]['id']} ==> {data[0]['video_url']}")
print(f"{data[1]['id']} ==> {data[1]['video_url']}")
break
# sleep 5s
2024-06-07 23:45:26 +02:00
asyncio.sleep(1.0)
2024-06-05 23:52:42 +02:00
response1 = get_clip(data[0]['id'])
print(response1['video_url'])
print(response1['prompt'])
response2 = get_clip(data[1]['id'])
print(response2['video_url'])
print(response2['prompt'])