feat: Enable MCP

#1
by multimodalart HF Staff - opened
Files changed (1) hide show
  1. app.py +50 -3
app.py CHANGED
@@ -214,7 +214,30 @@ def run_triposg(image_path: str,
214
  progress=gr.Progress(track_tqdm=True),):
215
 
216
  """
217
- Generate 3D part meshes from an input image.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  """
219
 
220
  max_num_expanded_coords = 1e9
@@ -282,6 +305,18 @@ def run_triposg(image_path: str,
282
  return merged_path, split_preview_path, export_dir, zip_path
283
 
284
  def cleanup(request: gr.Request):
 
 
 
 
 
 
 
 
 
 
 
 
285
 
286
  sid = request.session_hash
287
  if sid:
@@ -289,6 +324,18 @@ def cleanup(request: gr.Request):
289
  shutil.rmtree(d1, ignore_errors=True)
290
 
291
  def start_session(request: gr.Request):
 
 
 
 
 
 
 
 
 
 
 
 
292
 
293
  return request.session_hash
294
 
@@ -322,7 +369,7 @@ def build_demo():
322
  with gr.Column(scale=1):
323
  gr.Markdown(
324
  """
325
- • HF Space by :[@alexandernasa](https://twitter.com/alexandernasa/) """
326
  )
327
  input_image = gr.Image(type="filepath", label="Input Image", height=256)
328
  num_parts = gr.Slider(1, MAX_NUM_PARTS, value=4, step=1, label="Number of Parts")
@@ -384,4 +431,4 @@ if __name__ == "__main__":
384
  demo = build_demo()
385
  demo.unload(cleanup)
386
  demo.queue()
387
- demo.launch()
 
214
  progress=gr.Progress(track_tqdm=True),):
215
 
216
  """
217
+ Generate 3D part meshes from an input image using the PartCrafter pipeline.
218
+
219
+ This function takes an input image and generates multiple 3D mesh parts that compose
220
+ the object in the image. It uses a diffusion-based model to create structured 3D
221
+ representations with separate parts that can be individually manipulated.
222
+
223
+ Args:
224
+ image_path: Path to the input image file
225
+ num_parts: Number of parts to generate for the 3D object (1-16)
226
+ seed: Random seed for reproducible generation
227
+ num_tokens: Number of tokens to use in the generation process (256-2048)
228
+ num_inference_steps: Number of denoising steps for the diffusion process
229
+ guidance_scale: Guidance scale for classifier-free guidance
230
+ use_flash_decoder: Whether to use flash attention decoder for faster inference
231
+ rmbg: Whether to remove background from input image using RMBG model
232
+ session_id: Unique session identifier for tracking generation process
233
+ progress: Gradio progress tracker for UI updates
234
+
235
+ Returns:
236
+ tuple: Contains:
237
+ - merged_path: Path to the merged 3D object GLB file
238
+ - split_preview_path: Path to the exploded view GLB file
239
+ - export_dir: Directory containing all exported files
240
+ - zip_path: Path to ZIP file containing all individual parts
241
  """
242
 
243
  max_num_expanded_coords = 1e9
 
305
  return merged_path, split_preview_path, export_dir, zip_path
306
 
307
  def cleanup(request: gr.Request):
308
+ """
309
+ Clean up temporary files and directories for a user session.
310
+
311
+ This function is called when the Gradio interface is unloaded to remove
312
+ any temporary files created during the session to prevent disk space issues.
313
+
314
+ Args:
315
+ request: Gradio request object containing session information
316
+
317
+ Returns:
318
+ None
319
+ """
320
 
321
  sid = request.session_hash
322
  if sid:
 
324
  shutil.rmtree(d1, ignore_errors=True)
325
 
326
  def start_session(request: gr.Request):
327
+ """
328
+ Initialize a new user session and return the session hash.
329
+
330
+ This function is called when the Gradio interface loads to create a unique
331
+ session identifier for tracking the user's generation process and temporary files.
332
+
333
+ Args:
334
+ request: Gradio request object containing session information
335
+
336
+ Returns:
337
+ str: Session hash identifier for the current user session
338
+ """
339
 
340
  return request.session_hash
341
 
 
369
  with gr.Column(scale=1):
370
  gr.Markdown(
371
  """
372
+ • HF Space by : [@alexandernasa](https://twitter.com/alexandernasa/) """
373
  )
374
  input_image = gr.Image(type="filepath", label="Input Image", height=256)
375
  num_parts = gr.Slider(1, MAX_NUM_PARTS, value=4, step=1, label="Number of Parts")
 
431
  demo = build_demo()
432
  demo.unload(cleanup)
433
  demo.queue()
434
+ demo.launch(mcp_server=True)