Spaces:
Running
on
Zero
Running
on
Zero
Fix OpenMP errors and restore Gen Textured Shape button
Browse files- Add comprehensive OpenMP environment variables to prevent fork() errors
- Force Gen Textured Shape button visibility regardless of texture pipeline status
- Improve texture generation error handling with graceful fallbacks
- Add better debugging and logging for texture pipeline initialization
- Fix indentation and duplicate exception handling issues
- gradio_app.py +70 -39
gradio_app.py
CHANGED
@@ -206,40 +206,45 @@ def process_generation_job(job_id: str, images: Dict[str, str], options: Dict[st
|
|
206 |
|
207 |
# Texture generation if enabled
|
208 |
textured_mesh_path = None
|
209 |
-
if should_texture
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
235 |
textured_mesh_path = None
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
textured_mesh_path = None
|
241 |
|
242 |
-
update_job_status(job_id, JobStatus.PROCESSING, progress=90, stage="
|
243 |
|
244 |
# Prepare model URLs
|
245 |
model_urls = {}
|
@@ -930,7 +935,7 @@ def build_app():
|
|
930 |
btn = gr.Button(value='Gen Shape', variant='primary', min_width=100)
|
931 |
btn_all = gr.Button(value='Gen Textured Shape',
|
932 |
variant='primary',
|
933 |
-
visible=HAS_TEXTUREGEN
|
934 |
min_width=100)
|
935 |
|
936 |
with gr.Group():
|
@@ -1195,6 +1200,8 @@ if __name__ == '__main__':
|
|
1195 |
HAS_TEXTUREGEN = False
|
1196 |
if not args.disable_tex:
|
1197 |
try:
|
|
|
|
|
1198 |
# Apply torchvision fix before importing basicsr/RealESRGAN
|
1199 |
print("Applying torchvision compatibility fix for texture generation...")
|
1200 |
try:
|
@@ -1202,20 +1209,40 @@ if __name__ == '__main__':
|
|
1202 |
fix_result = apply_fix()
|
1203 |
if not fix_result:
|
1204 |
print("Warning: Torchvision fix may not have been applied successfully")
|
|
|
|
|
|
|
|
|
1205 |
except Exception as fix_error:
|
1206 |
print(f"Warning: Failed to apply torchvision fix: {fix_error}")
|
|
|
|
|
1207 |
|
1208 |
-
#
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1214 |
conf = Hunyuan3DPaintConfig(max_num_view=9, resolution=768)
|
1215 |
conf.realesrgan_ckpt_path = "hy3dpaint/ckpt/RealESRGAN_x4plus.pth"
|
1216 |
conf.multiview_cfg_path = "hy3dpaint/cfgs/hunyuan-paint-pbr.yaml"
|
1217 |
conf.custom_pipeline = "hy3dpaint/hunyuanpaintpbr"
|
|
|
|
|
|
|
1218 |
tex_pipeline = Hunyuan3DPaintPipeline(conf)
|
|
|
1219 |
|
1220 |
# Not help much, ignore for now.
|
1221 |
# if args.compile:
|
@@ -1225,12 +1252,16 @@ if __name__ == '__main__':
|
|
1225 |
# texgen_worker.models['multiview_model'].pipeline.vae.compile()
|
1226 |
|
1227 |
HAS_TEXTUREGEN = True
|
|
|
1228 |
|
1229 |
except Exception as e:
|
1230 |
print(f"Error loading texture generator: {e}")
|
1231 |
print("Failed to load texture generator.")
|
1232 |
print('Please try to install requirements by following README.md')
|
|
|
|
|
1233 |
HAS_TEXTUREGEN = False
|
|
|
1234 |
|
1235 |
# HAS_T2I = True
|
1236 |
# if args.enable_t23d:
|
|
|
206 |
|
207 |
# Texture generation if enabled
|
208 |
textured_mesh_path = None
|
209 |
+
if should_texture:
|
210 |
+
if HAS_TEXTUREGEN:
|
211 |
+
try:
|
212 |
+
text_path = os.path.join(save_folder, 'textured_mesh.obj')
|
213 |
+
# Use GPU function for texture generation with lazy initialization
|
214 |
+
logger.info(f"Starting texture generation for job {job_id}")
|
215 |
+
|
216 |
+
# Count available images to adapt texture generation settings
|
217 |
+
num_images = len(pil_images)
|
218 |
+
logger.info(f"Job {job_id} has {num_images} images available")
|
219 |
+
|
220 |
+
# Try texture generation with adaptive settings based on available images
|
221 |
+
textured_mesh_path = generate_texture_lazy_adaptive(
|
222 |
+
mesh_path=reduced_mesh_path,
|
223 |
+
image_path=main_image,
|
224 |
+
output_mesh_path=text_path,
|
225 |
+
num_available_images=num_images
|
226 |
+
)
|
227 |
+
|
228 |
+
if textured_mesh_path and os.path.exists(textured_mesh_path):
|
229 |
+
logger.info(f"Texture generation completed for job {job_id}")
|
230 |
+
# Convert to GLB
|
231 |
+
glb_path_textured = os.path.join(save_folder, 'textured_mesh.glb')
|
232 |
+
quick_convert_with_obj2gltf(textured_mesh_path, glb_path_textured)
|
233 |
+
textured_mesh_path = glb_path_textured
|
234 |
+
else:
|
235 |
+
logger.warning(f"Texture generation returned None or file doesn't exist for job {job_id}")
|
236 |
+
textured_mesh_path = None
|
237 |
+
|
238 |
+
except Exception as e:
|
239 |
+
logger.error(f"Texture generation failed for job {job_id}: {e}")
|
240 |
+
# Continue without texture - user will get the white mesh
|
241 |
textured_mesh_path = None
|
242 |
+
else:
|
243 |
+
logger.warning(f"Texture generation requested for job {job_id} but texture pipeline is not available")
|
244 |
+
update_job_status(job_id, JobStatus.PROCESSING, progress=75, stage="texture_generation_unavailable",
|
245 |
+
message="Texture generation is not available - returning mesh without texture")
|
|
|
246 |
|
247 |
+
update_job_status(job_id, JobStatus.PROCESSING, progress=90, stage="finalizing")
|
248 |
|
249 |
# Prepare model URLs
|
250 |
model_urls = {}
|
|
|
935 |
btn = gr.Button(value='Gen Shape', variant='primary', min_width=100)
|
936 |
btn_all = gr.Button(value='Gen Textured Shape',
|
937 |
variant='primary',
|
938 |
+
visible=True, # Force visible for now, was: HAS_TEXTUREGEN
|
939 |
min_width=100)
|
940 |
|
941 |
with gr.Group():
|
|
|
1200 |
HAS_TEXTUREGEN = False
|
1201 |
if not args.disable_tex:
|
1202 |
try:
|
1203 |
+
print("Initializing texture generation pipeline...")
|
1204 |
+
|
1205 |
# Apply torchvision fix before importing basicsr/RealESRGAN
|
1206 |
print("Applying torchvision compatibility fix for texture generation...")
|
1207 |
try:
|
|
|
1209 |
fix_result = apply_fix()
|
1210 |
if not fix_result:
|
1211 |
print("Warning: Torchvision fix may not have been applied successfully")
|
1212 |
+
else:
|
1213 |
+
print("Torchvision fix applied successfully")
|
1214 |
+
except ImportError as ie:
|
1215 |
+
print(f"Warning: Could not import torchvision_fix: {ie}")
|
1216 |
except Exception as fix_error:
|
1217 |
print(f"Warning: Failed to apply torchvision fix: {fix_error}")
|
1218 |
+
import traceback
|
1219 |
+
traceback.print_exc()
|
1220 |
|
1221 |
+
# Import texture generation components
|
1222 |
+
print("Importing texture generation components...")
|
1223 |
+
try:
|
1224 |
+
from hy3dpaint.textureGenPipeline import Hunyuan3DPaintPipeline, Hunyuan3DPaintConfig
|
1225 |
+
print("Successfully imported texture generation components")
|
1226 |
+
except ImportError as ie:
|
1227 |
+
print(f"Failed to import texture generation components: {ie}")
|
1228 |
+
raise
|
1229 |
+
except Exception as e:
|
1230 |
+
print(f"Error importing texture generation components: {e}")
|
1231 |
+
import traceback
|
1232 |
+
traceback.print_exc()
|
1233 |
+
raise
|
1234 |
+
|
1235 |
+
# Configure texture pipeline
|
1236 |
+
print("Configuring texture pipeline...")
|
1237 |
conf = Hunyuan3DPaintConfig(max_num_view=9, resolution=768)
|
1238 |
conf.realesrgan_ckpt_path = "hy3dpaint/ckpt/RealESRGAN_x4plus.pth"
|
1239 |
conf.multiview_cfg_path = "hy3dpaint/cfgs/hunyuan-paint-pbr.yaml"
|
1240 |
conf.custom_pipeline = "hy3dpaint/hunyuanpaintpbr"
|
1241 |
+
|
1242 |
+
# Initialize texture pipeline
|
1243 |
+
print("Initializing texture pipeline...")
|
1244 |
tex_pipeline = Hunyuan3DPaintPipeline(conf)
|
1245 |
+
print("Texture pipeline initialized successfully")
|
1246 |
|
1247 |
# Not help much, ignore for now.
|
1248 |
# if args.compile:
|
|
|
1252 |
# texgen_worker.models['multiview_model'].pipeline.vae.compile()
|
1253 |
|
1254 |
HAS_TEXTUREGEN = True
|
1255 |
+
print("Texture generation is ENABLED - Gen Textured Shape button will be visible")
|
1256 |
|
1257 |
except Exception as e:
|
1258 |
print(f"Error loading texture generator: {e}")
|
1259 |
print("Failed to load texture generator.")
|
1260 |
print('Please try to install requirements by following README.md')
|
1261 |
+
import traceback
|
1262 |
+
traceback.print_exc()
|
1263 |
HAS_TEXTUREGEN = False
|
1264 |
+
print("Texture generation is DISABLED - Gen Textured Shape button will be hidden")
|
1265 |
|
1266 |
# HAS_T2I = True
|
1267 |
# if args.enable_t23d:
|