Spaces:
Running
on
Zero
Running
on
Zero
mimic the naimate rig output stage
Browse files
app.py
CHANGED
|
@@ -18,6 +18,7 @@ from gradio.processing_utils import move_resource_to_block_cache
|
|
| 18 |
import traceback
|
| 19 |
import sys
|
| 20 |
import logging
|
|
|
|
| 21 |
|
| 22 |
|
| 23 |
MAX_SEED = np.iinfo(np.int32).max
|
|
@@ -189,12 +190,15 @@ def generate_and_extract_glb(
|
|
| 189 |
req: gr.Request,
|
| 190 |
) -> str:
|
| 191 |
"""
|
| 192 |
-
Runs the full text_to_3d and extract_glb pipeline internally
|
|
|
|
| 193 |
"""
|
| 194 |
request_hash = str(req.session_hash)[:8]
|
| 195 |
logging.info(f"[{request_hash}] ENTER generate_and_extract_glb")
|
| 196 |
logging.info(f"[{request_hash}] Received parameters: prompt='{prompt}', seed={seed}, simplify={mesh_simplify}, tex_size={texture_size}, ...")
|
| 197 |
|
|
|
|
|
|
|
| 198 |
try:
|
| 199 |
logging.info(f"[{request_hash}] Calling internal text_to_3d...")
|
| 200 |
state, _ = text_to_3d(
|
|
@@ -213,20 +217,40 @@ def generate_and_extract_glb(
|
|
| 213 |
if glb_path is None:
|
| 214 |
logging.error(f"[{request_hash}] Internal extract_glb returned None path!")
|
| 215 |
raise ValueError("Internal extract_glb failed to return GLB path")
|
| 216 |
-
|
|
|
|
|
|
|
|
|
|
| 217 |
|
|
|
|
|
|
|
| 218 |
try:
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
|
| 228 |
except Exception as e:
|
| 229 |
-
logging.error(f"[{request_hash}] ERROR in generate_and_extract_glb: {e}", exc_info=True)
|
| 230 |
raise gr.Error(f"Pipeline failed: {e}")
|
| 231 |
|
| 232 |
|
|
|
|
| 18 |
import traceback
|
| 19 |
import sys
|
| 20 |
import logging
|
| 21 |
+
import requests
|
| 22 |
|
| 23 |
|
| 24 |
MAX_SEED = np.iinfo(np.int32).max
|
|
|
|
| 190 |
req: gr.Request,
|
| 191 |
) -> str:
|
| 192 |
"""
|
| 193 |
+
Runs the full text_to_3d and extract_glb pipeline internally,
|
| 194 |
+
then uploads the GLB to the Node.js server and returns the persistent URL.
|
| 195 |
"""
|
| 196 |
request_hash = str(req.session_hash)[:8]
|
| 197 |
logging.info(f"[{request_hash}] ENTER generate_and_extract_glb")
|
| 198 |
logging.info(f"[{request_hash}] Received parameters: prompt='{prompt}', seed={seed}, simplify={mesh_simplify}, tex_size={texture_size}, ...")
|
| 199 |
|
| 200 |
+
NODE_SERVER_UPLOAD_URL = "https://viverse-backend.onrender.com/api/upload-rigged-model"
|
| 201 |
+
|
| 202 |
try:
|
| 203 |
logging.info(f"[{request_hash}] Calling internal text_to_3d...")
|
| 204 |
state, _ = text_to_3d(
|
|
|
|
| 217 |
if glb_path is None:
|
| 218 |
logging.error(f"[{request_hash}] Internal extract_glb returned None path!")
|
| 219 |
raise ValueError("Internal extract_glb failed to return GLB path")
|
| 220 |
+
if not os.path.isfile(glb_path):
|
| 221 |
+
logging.error(f"[{request_hash}] GLB file not found at path: {glb_path}")
|
| 222 |
+
raise FileNotFoundError(f"Generated GLB file not found at {glb_path}")
|
| 223 |
+
logging.info(f"[{request_hash}] Internal extract_glb completed. GLB path: {glb_path}")
|
| 224 |
|
| 225 |
+
logging.info(f"[{request_hash}] Uploading GLB from {glb_path} to {NODE_SERVER_UPLOAD_URL}")
|
| 226 |
+
persistent_url = None
|
| 227 |
try:
|
| 228 |
+
with open(glb_path, "rb") as f:
|
| 229 |
+
files = {"modelFile": (os.path.basename(glb_path), f, "model/gltf-binary")}
|
| 230 |
+
payload = {"clientType": "playcanvas"}
|
| 231 |
+
response = requests.post(NODE_SERVER_UPLOAD_URL, files=files, data=payload)
|
| 232 |
+
response.raise_for_status()
|
| 233 |
+
result = response.json()
|
| 234 |
+
persistent_url = result.get("persistentUrl")
|
| 235 |
+
if not persistent_url:
|
| 236 |
+
logging.error(f"[{request_hash}] No persistent URL in Node.js server response: {result}")
|
| 237 |
+
raise ValueError("Upload successful, but no persistent URL returned")
|
| 238 |
+
logging.info(f"[{request_hash}] Successfully uploaded to Node server. Persistent URL: {persistent_url}")
|
| 239 |
+
except requests.exceptions.RequestException as upload_err:
|
| 240 |
+
logging.error(f"[{request_hash}] FAILED to upload GLB to Node server: {upload_err}")
|
| 241 |
+
if hasattr(upload_err, 'response') and upload_err.response is not None:
|
| 242 |
+
logging.error(f"[{request_hash}] Node server response status: {upload_err.response.status_code}")
|
| 243 |
+
logging.error(f"[{request_hash}] Node server response text: {upload_err.response.text}")
|
| 244 |
+
raise gr.Error(f"Failed to upload result to backend server: {upload_err}")
|
| 245 |
+
except Exception as e:
|
| 246 |
+
logging.error(f"[{request_hash}] UNEXPECTED error during upload: {e}", exc_info=True)
|
| 247 |
+
raise gr.Error(f"Unexpected error during upload: {e}")
|
| 248 |
+
|
| 249 |
+
logging.info(f"[{request_hash}] EXIT generate_and_extract_glb - Returning persistent URL: {persistent_url}")
|
| 250 |
+
return persistent_url
|
| 251 |
|
| 252 |
except Exception as e:
|
| 253 |
+
logging.error(f"[{request_hash}] ERROR in generate_and_extract_glb pipeline: {e}", exc_info=True)
|
| 254 |
raise gr.Error(f"Pipeline failed: {e}")
|
| 255 |
|
| 256 |
|