Spaces:
Running
Running
import streamlit | |
import os | |
import ipython | |
from freeGPT import Client | |
api_token = os.environ.get("API_TOKEN") | |
API_URL = "https://api-inference.huggingface.co/models/facebook/musicgen-medium" | |
API_URL_IMG = "https://api-inference.huggingface.co/models/goofyai/3d_render_style_xl" | |
headers = {"Authorization": f"Bearer {api_token}"} | |
st.title("✨ AI Tracks Generator") | |
st.write("Generate audio, cover and title for your track using ai tools!") | |
st.divider | |
prompt = st.text_input("Enter prompt and generate track", placeholder="Eg. Nice holiday love melody") | |
generate_btn = st.button("✨ Generate") | |
def query(payload): | |
response = requests.post(API_URL, headers=headers, json=payload) | |
return response.content | |
def imgquery(payload): | |
response = requests.post(API_URL_IMG, headers=headers, json=payload) | |
return response.content | |
def generate_audio(prompt): | |
audio_bytes = query({"inputs": prompt}) | |
with open("output_audio.mp3", "wb") as f: | |
f.write(audio_bytes) | |
display(Audio(data=audio_bytes, autoplay=False)) | |
return audio_bytes | |
def generate_image(prompt): | |
image_bytes = imgquery({ | |
"inputs": prompt, | |
}) | |
image = Image.open(io.BytesIO(image_bytes)) | |
return image | |
if generate_btn: | |
audio1 = generate_audio(prompt) | |
audio2 = generate_audio(prompt) | |
audio3 = generate_audio(prompt) | |
title1 = Client.create_completion("gpt3", "generate name of song that have this description. In answer give onli short title" + prompt) | |
title2 = Client.create_completion("gpt3", "generate name of song that have this description. In answer give only short title" + prompt) | |
title3 = Client.create_completion("gpt3", "generate name of song that have this description. In answer give just short title" + prompt) | |
cover1 = generate_image("Generate a cover image for this song:" + prompt) | |
cover2 = generate_image("Generate a cover for this song:" + prompt) | |
cover3 = generate_image("Generate a thumbnail for this song:" + prompt) | |
audio1, audio1, audio3 = gr.columns(3) | |
with audio1: | |
st.image(cover1) | |
st.header(title1) | |
st.audio(audio1) | |
with audio2: | |
st.image(cover2) | |
st.header(title2) | |
st.audio(audio2) | |
with audio3: | |
st.image(cover3) | |
st.header(title3) | |
st.audio(audio3) |