KarthickAdopleAI's picture
Create app.py
f315cc2 verified
import requests
import gradio as gr
import time
import os
class Model3d_generater:
def __init__(self):
api_key = os.getenv("MESHY_API_KEY")
self.headers = {
"Authorization": f"Bearer {api_key}"
}
def _get_access_(self,query,style_prompt,resolution):
payload = {
"object_prompt":query,
"style_prompt":style_prompt,
"enable_pbr": True,
"resolution":resolution,
"art_style": "realistic",
# "negative_prompt": "low quality, low resolution, low poly, ugly"
}
generate_3d = requests.post(
"https://api.meshy.ai/v1/text-to-3d",
headers=self.headers,
json=payload,
)
task_id=generate_3d.json()["result"]
return task_id
def check_status(self,task_id):
response =requests.get( f"https://api.meshy.ai/v2/text-to-3d/{task_id}",
headers=self.headers,)
if response.status_code == 200:
content=response.content
status=response.json()
return content,status
else:
return "Failed to get status"
def _generate_3d_(self,query,style_prompt,resolution):
task_id=self._get_access_(query,style_prompt,resolution)
while True:
content, status= self.check_status(task_id)
if status['status'] == 'SUCCEEDED':
print("Process complete. Model URLs:")
download_3d=status["model_urls"]["glb"]
response = requests.get(download_3d, allow_redirects=False)
short_filename = '3d_asset.glb' # Change 'my_file.ext' to whatever you prefer, with the correct extension
with open(short_filename, 'wb') as file:
file.write(response.content)
return short_filename
elif status and status['status'] == 'FAILED':
print("An error occurred during processing.")
break
else:
print("Processing... Please wait.")
time.sleep(30)
def interface(self):
css=""".gradio-container {background: rgb(157,228,255);
background: radial-gradient(circle, rgba(157,228,255,1) 0%, rgba(18,115,106,1) 100%);}
}
"""
with gr.Blocks(css=css) as demo:
gr.HTML("""
<center><h1 style="color:#fff">3d Model Generater</h1></center>""")
with gr.Row():
prompt=gr.Textbox(label="Prompt")
with gr.Column(scale=0.15):
resolution=gr.Dropdown(choices=["1024","2048","4096"],label="Resolution")
with gr.Row():
style=gr.Textbox(placeholder="describe the style like HDR,high quality,extrac",label="Style Prompt")
with gr.Row():
output=gr.Model3D()
with gr.Row():
button=gr.Button()
button.click(self._generate_3d_,[prompt,style,resolution],outputs=output)
demo.launch()
if __name__=="__main__":
result=Model3d_generater()
result.interface()