hcl14/omnipart 🔢🖼️✓📝 → ❓

▶️ 68 runs 📅 Aug 2025 ⚙️ Cog 0.16.2 📄 Paper ⚖️ License
3d-reconstruction image-segmentation image-to-3d

About

OmniPart: Part-Aware 3D Generation with Semantic Decoupling and Structural Cohesion

Example Output

Output

Performance Metrics

22.03s Prediction Time
22.04s Total Time
All Input Parameters
{
  "seed": 42,
  "image": "https://replicate.delivery/pbxt/NUazCYmyuBsDfbfZiu5W2cBbCfB05tBAIjTTN7WRVr1uscfr/ComfyUI_01005_80.jpg",
  "contrast": 5,
  "brightness": 0.18,
  "generate_3d": true,
  "merge_input": "3,10;3,2;9,4;0,6;9,0;8,5;1,7;1,11;8,1",
  "cfg_strength": 7.5,
  "size_threshold": 2000
}
Input Parameters
seed Type: integerDefault: 42Range: 0 - 10000
Generation seed
image (required) Type: string
Input image
contrast Type: numberDefault: 4
Final contrast stretch around mid-grey (texture post-processing)
brightness Type: numberDefault: 0.18
Final global brightness gain (texture post-processing)
generate_3d Type: booleanDefault: true
Run full 3-D pipeline
merge_input Type: stringDefault:
Merge groups, e.g. '0,1;3,4' (leave blank for none)
cfg_strength Type: numberDefault: 7.5Range: 0 - 15
CFG strength for Part-Synthesis
size_threshold Type: integerDefault: 2000Range: 600 - 4000
Minimum segment size (pixels)
Output Schema
bbox_mesh Type: stringFormat: uri
Bbox Mesh
merged_seg Type: stringFormat: uri
Merged Seg
whole_mesh Type: stringFormat: uri
Whole Mesh
combined_gs Type: stringFormat: uri
Combined Gs
exploded_gs Type: stringFormat: uri
Exploded Gs
initial_seg Type: stringFormat: uri
Initial Seg
exploded_mesh Type: stringFormat: uri
Exploded Mesh
pre_merge_vis Type: stringFormat: uri
Pre Merge Vis
Example Execution Logs
Generating raw SAM masks without post-processing...
Skipping mask 0, background ratio: 1.00
Assigned mask 1 with area 26633 to group 0
Assigned mask 2 with area 26003 to group 1
Assigned mask 3 with area 20851 to group 2
Assigned mask 4 with area 9424 to group 3
Assigned mask 5 with area 8933 to group 4
Assigned mask 6 with area 3190 to group 5
Assigned mask 7 with area 3138 to group 6
Assigned mask 8 with area 3123 to group 7
Assigned mask 9 with area 2559 to group 8
Assigned mask 10 with area 2534 to group 9
Assigned mask 11 with area 2528 to group 10
Assigned mask 12 with area 2514 to group 11
Assigned mask 13 with area 2502 to group 12
Assigned mask 14 with area 2226 to group 13
Assigned mask 15 with area 2161 to group 14
Skipping mask 16, area too small: 1612 < 2000
Skipping mask 17, area too small: 1531 < 2000
Skipping mask 18, area too small: 1489 < 2000
Skipping mask 19, area too small: 1463 < 2000
Skipping mask 20, area too small: 1348 < 2000
Skipping mask 21, area too small: 1196 < 2000
Skipping mask 22, area too small: 1193 < 2000
Skipping mask 23, area too small: 1164 < 2000
Skipping mask 24, area too small: 1163 < 2000
Skipping mask 25, area too small: 1132 < 2000
Skipping mask 26, area too small: 938 < 2000
Skipping mask 27, area too small: 908 < 2000
Skipping mask 28, area too small: 872 < 2000
Skipping mask 29, area too small: 870 < 2000
Skipping mask 30, area too small: 658 < 2000
Skipping mask 31, area too small: 623 < 2000
Skipping mask 32, area too small: 600 < 2000
Skipping mask 33, area too small: 578 < 2000
Skipping mask 34, area too small: 556 < 2000
Skipping mask 35, area too small: 552 < 2000
Skipping mask 36, area too small: 464 < 2000
Skipping mask 37, area too small: 394 < 2000
Skipping mask 38, area too small: 315 < 2000
Skipping mask 39, area too small: 285 < 2000
Skipping mask 40, area too small: 272 < 2000
Skipping mask 41, area too small: 257 < 2000
Skipping mask 42, area too small: 256 < 2000
Skipping mask 43, area too small: 252 < 2000
Skipping mask 44, area too small: 175 < 2000
Skipping mask 45, area too small: 174 < 2000
Skipping mask 46, area too small: 166 < 2000
Skipping mask 47, area too small: 165 < 2000
Skipping mask 48, area too small: 155 < 2000
Skipping mask 49, area too small: 118 < 2000
Skipping mask 50, area too small: 116 < 2000
Skipping mask 51, area too small: 110 < 2000
Skipping mask 52, area too small: 60 < 2000
Skipping mask 53, area too small: 26 < 2000
Skipping mask 54, area too small: 25 < 2000
Skipping mask 55, area too small: 18 < 2000
Splitting disconnected parts in initial segmentation...
Part 0 has 4 disconnected regions, splitting...
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (8 pixels)
Skipping small disconnected region (2 pixels)
Part 1 has 4 disconnected regions, splitting...
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 2 has 5 disconnected regions, splitting...
Skipping small disconnected region (5 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 5 has 46 disconnected regions, splitting...
Skipping small disconnected region (5 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (4 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (5 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (3 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (4 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 7 has 13 disconnected regions, splitting...
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (4 pixels)
Skipping small disconnected region (8 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 8 has 13 disconnected regions, splitting...
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (11 pixels)
Skipping small disconnected region (7 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 9 has 13 disconnected regions, splitting...
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (17 pixels)
Skipping small disconnected region (6 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 10 has 12 disconnected regions, splitting...
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (3 pixels)
Skipping small disconnected region (3 pixels)
Skipping small disconnected region (2 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Skipping small disconnected region (1 pixels)
Part 12 has 3 disconnected regions, splitting...
Skipping small disconnected region (3 pixels)
Skipping small disconnected region (4 pixels)
Split disconnected parts: original 15 parts -> 12 connected parts
After early splitting, now have 12 regions (excluding background)
Checking for undetected parts using RGBA image...
Image has alpha channel, checking for undetected parts...
Saved mask segments visualization to /src/tmp/20250807070827232083/tmprv1wxz_jComfyUI_01005_80_mask_segments_2.png
No parts needed splitting - all parts are already connected
After splitting disconnected parts, now have 12 regions (excluding background)
Labeling region 0, area: 12044 pixels
Labeling region 1, area: 11955 pixels
Labeling region 2, area: 15634 pixels
Labeling region 3, area: 3004 pixels
Labeling region 4, area: 9424 pixels
Labeling region 5, area: 8933 pixels
Labeling region 6, area: 3138 pixels
Labeling region 7, area: 950 pixels
Labeling region 8, area: 2514 pixels
Labeling region 9, area: 2495 pixels
Labeling region 10, area: 2226 pixels
Labeling region 11, area: 2161 pixels
Pre-split segmentation (before disconnected parts handling) saved to /src/tmp/20250807070827232083/tmprv1wxz_jComfyUI_01005_80_pre_split.png
Saved mask segments visualization to /src/tmp/20250807070827232083/tmprv1wxz_jComfyUI_01005_80_mask_segments_2.png
Original segment IDs (used for merging): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Valid merge group: [3, 10] (missing: none)
Valid merge group: [3, 2] (missing: none)
Valid merge group: [9, 4] (missing: none)
Valid merge group: [0, 6] (missing: none)
Valid merge group: [9, 0] (missing: none)
Valid merge group: [8, 5] (missing: none)
Valid merge group: [1, 7] (missing: none)
Valid merge group: [1, 11] (missing: none)
Valid merge group: [8, 1] (missing: none)
Using merge groups: [[3, 10], [3, 2], [9, 4], [0, 6], [9, 0], [8, 5], [1, 7], [1, 11], [8, 1]]
Checking for undetected parts using RGBA image...
Image has alpha channel, checking for undetected parts...
Including original ID 3 (3004 pixels)
Including original ID 10 (2226 pixels)
Merging 5230 pixels to ID 3
Including original ID 3 (5230 pixels)
Including original ID 2 (15634 pixels)
Merging 20864 pixels to ID 3
Including original ID 9 (2495 pixels)
Including original ID 4 (9424 pixels)
Merging 11919 pixels to ID 9
Including original ID 0 (12044 pixels)
Including original ID 6 (3138 pixels)
Merging 15182 pixels to ID 0
Including original ID 9 (11919 pixels)
Including original ID 0 (15182 pixels)
Merging 27101 pixels to ID 9
Including original ID 8 (2514 pixels)
Including original ID 5 (8933 pixels)
Merging 11447 pixels to ID 8
Including original ID 1 (11955 pixels)
Including original ID 7 (950 pixels)
Merging 12905 pixels to ID 1
Including original ID 1 (12905 pixels)
Including original ID 11 (2161 pixels)
Merging 15066 pixels to ID 1
Including original ID 8 (11447 pixels)
Including original ID 1 (15066 pixels)
Merging 26513 pixels to ID 8
ID reassignment complete: 3 groups now have sequential IDs from 0 to 2
Merging complete, now have 3 regions (excluding background)
Labeling region 0, area: 20864 pixels
Labeling region 1, area: 26513 pixels
Labeling region 2, area: 27101 pixels
New segment IDs (after merging): [0, 1, 2]
Cleaned edges for 3 segments
Saved mask segments visualization to /src/tmp/20250807070827232083/tmprv1wxz_jComfyUI_01005_80_mask_segments_3.png
mask done
Sampling:   0%|          | 0/25 [00:00<?, ?it/s]
Sampling:   8%|▊         | 2/25 [00:00<00:01, 13.65it/s]
Sampling:  16%|█▌        | 4/25 [00:00<00:01, 12.29it/s]
Sampling:  24%|██▍       | 6/25 [00:00<00:01, 11.91it/s]
Sampling:  32%|███▏      | 8/25 [00:00<00:01, 11.72it/s]
Sampling:  40%|████      | 10/25 [00:00<00:01, 11.63it/s]
Sampling:  48%|████▊     | 12/25 [00:01<00:01, 11.56it/s]
Sampling:  56%|█████▌    | 14/25 [00:01<00:00, 11.53it/s]
Sampling:  64%|██████▍   | 16/25 [00:01<00:00, 11.50it/s]
Sampling:  72%|███████▏  | 18/25 [00:01<00:00, 11.48it/s]
Sampling:  80%|████████  | 20/25 [00:01<00:00, 12.41it/s]
Sampling:  92%|█████████▏| 23/25 [00:01<00:00, 15.17it/s]
Sampling: 100%|██████████| 25/25 [00:01<00:00, 13.20it/s]
voxel done
[INFO] Voxel coordinates saved
[INFO] BboxGen output saved
part synthesis done
entering get_slat
entered get_slat
sampling3
Sampling:   0%|          | 0/25 [00:00<?, ?it/s]
Sampling:   4%|▍         | 1/25 [00:00<00:04,  4.94it/s]
Sampling:   8%|▊         | 2/25 [00:00<00:04,  4.99it/s]
Sampling:  12%|█▏        | 3/25 [00:00<00:04,  5.01it/s]
Sampling:  16%|█▌        | 4/25 [00:00<00:04,  5.03it/s]
Sampling:  20%|██        | 5/25 [00:00<00:03,  5.03it/s]
Sampling:  24%|██▍       | 6/25 [00:01<00:03,  5.03it/s]
Sampling:  28%|██▊       | 7/25 [00:01<00:03,  5.05it/s]
Sampling:  32%|███▏      | 8/25 [00:01<00:03,  5.06it/s]
Sampling:  36%|███▌      | 9/25 [00:01<00:03,  5.05it/s]
Sampling:  40%|████      | 10/25 [00:01<00:02,  5.06it/s]
Sampling:  44%|████▍     | 11/25 [00:02<00:02,  5.06it/s]
Sampling:  48%|████▊     | 12/25 [00:02<00:02,  5.07it/s]
Sampling:  52%|█████▏    | 13/25 [00:02<00:02,  5.08it/s]
Sampling:  56%|█████▌    | 14/25 [00:02<00:02,  5.08it/s]
Sampling:  60%|██████    | 15/25 [00:02<00:01,  5.07it/s]
Sampling:  64%|██████▍   | 16/25 [00:03<00:01,  5.07it/s]
Sampling:  68%|██████▊   | 17/25 [00:03<00:01,  5.05it/s]
Sampling:  72%|███████▏  | 18/25 [00:03<00:01,  5.04it/s]
Sampling:  76%|███████▌  | 19/25 [00:03<00:01,  5.04it/s]
Sampling:  84%|████████▍ | 21/25 [00:03<00:00,  6.54it/s]
Sampling:  92%|█████████▏| 23/25 [00:04<00:00,  7.60it/s]
Sampling: 100%|██████████| 25/25 [00:04<00:00,  8.34it/s]
Sampling: 100%|██████████| 25/25 [00:04<00:00,  5.73it/s]
Warning: Feature dimensions mismatch. Using 8 dimensions for normalization
decoding3
Discarded 0/12288 points (0.00%)
Discarded 2067/5857 points (35.29%)
Discarded 1886/6142 points (30.71%)
Discarded 1883/6146 points (30.64%)
slat done
Before save_parts_outputs
Before postprocess: 68390 vertices, 136752 faces
Rasterizing:   0%|          | 0/1000 [00:00<?, ?it/s]
Rasterizing:  12%|█▏        | 116/1000 [00:00<00:00, 1158.22it/s]
Rasterizing:  24%|██▍       | 245/1000 [00:00<00:00, 1232.88it/s]
Rasterizing:  38%|███▊      | 380/1000 [00:00<00:00, 1285.64it/s]
Rasterizing:  52%|█████▏    | 517/1000 [00:00<00:00, 1316.11it/s]
Rasterizing:  65%|██████▌   | 654/1000 [00:00<00:00, 1333.85it/s]
Rasterizing:  79%|███████▉  | 790/1000 [00:00<00:00, 1340.91it/s]
Rasterizing:  92%|█████████▎| 925/1000 [00:00<00:00, 1328.55it/s]
Rasterizing: 100%|██████████| 1000/1000 [00:00<00:00, 1303.23it/s]
Found 10440 invisible faces
Dual graph: 205125 edges
Mincut solved, start checking the cut
Removed 10461 faces by mincut
INFO- Loaded 63154 vertices and 126291 faces.
0% done
5% done
11% done
16% done
22% done
27% done
33% done
38% done
44% done
50% done
55% done
61% done
66% done
72% done
77% done
83% done
88% done
94% done
100% done
After remove invisible faces: 63154 vertices, 126320 faces
Before postprocess: 74236 vertices, 148444 faces
Rasterizing:   0%|          | 0/1000 [00:00<?, ?it/s]
Rasterizing:  11%|█▏        | 114/1000 [00:00<00:00, 1132.51it/s]
Rasterizing:  24%|██▎       | 236/1000 [00:00<00:00, 1180.66it/s]
Rasterizing:  36%|███▌      | 359/1000 [00:00<00:00, 1200.16it/s]
Rasterizing:  48%|████▊     | 484/1000 [00:00<00:00, 1217.87it/s]
Rasterizing:  61%|██████    | 610/1000 [00:00<00:00, 1231.24it/s]
Rasterizing:  74%|███████▎  | 736/1000 [00:00<00:00, 1239.44it/s]
Rasterizing:  86%|████████▌ | 861/1000 [00:00<00:00, 1242.80it/s]
Rasterizing:  99%|█████████▊| 986/1000 [00:00<00:00, 1226.48it/s]
Rasterizing: 100%|██████████| 1000/1000 [00:00<00:00, 1218.15it/s]
Found 2514 invisible faces
Dual graph: 222666 edges
Mincut solved, start checking the cut
Removed 4156 faces by mincut
INFO- Loaded 72213 vertices and 144288 faces.
0% done
5% done
10% done
15% done
20% done
25% done
30% done
35% done
40% done
45% done
50% done
55% done
60% done
65% done
70% done
75% done
80% done
85% done
90% done
95% done
100% done
After remove invisible faces: 72432 vertices, 144860 faces
Before postprocess: 75032 vertices, 150048 faces
Rasterizing:   0%|          | 0/1000 [00:00<?, ?it/s]
Rasterizing:  11%|█▏        | 114/1000 [00:00<00:00, 1135.57it/s]
Rasterizing:  24%|██▎       | 235/1000 [00:00<00:00, 1175.14it/s]
Rasterizing:  36%|███▌      | 358/1000 [00:00<00:00, 1199.14it/s]
Rasterizing:  48%|████▊     | 482/1000 [00:00<00:00, 1213.04it/s]
Rasterizing:  61%|██████    | 607/1000 [00:00<00:00, 1223.57it/s]
Rasterizing:  73%|███████▎  | 732/1000 [00:00<00:00, 1229.66it/s]
Rasterizing:  86%|████████▌ | 856/1000 [00:00<00:00, 1230.41it/s]
Rasterizing:  98%|█████████▊| 980/1000 [00:00<00:00, 1216.08it/s]
Rasterizing: 100%|██████████| 1000/1000 [00:00<00:00, 1209.34it/s]
Found 2919 invisible faces
Dual graph: 225072 edges
Mincut solved, start checking the cut
Removed 5804 faces by mincut
INFO- Loaded 72205 vertices and 144244 faces.
0% done
6% done
13% done
20% done
26% done
33% done
40% done
46% done
53% done
60% done
66% done
73% done
80% done
86% done
93% done
100% done
After remove invisible faces: 72669 vertices, 145338 faces
done parts
done 1st ply
done 2nd ply
After save_parts_outputs
Merging parts:   0%|          | 0/3 [00:00<?, ?it/s]
Merging parts: 100%|██████████| 3/3 [00:00<00:00, 40.26it/s]
[INFO] PartSynthesis output saved
[EXPLODE_MESH] Starting mesh explosion with scale 0.3
[EXPLODE_MESH] Processing 3 parts
[EXPLODE_MESH] Part geometry_0: center = [ 0.00034105  0.00651239 -0.00163417]
[EXPLODE_MESH] Part geometry_1: center = [-0.24468086  0.12840271 -0.0004098 ]
[EXPLODE_MESH] Part geometry_2: center = [ 2.44510905e-01  1.27667406e-01 -2.76175755e-05]
[EXPLODE_MESH] Global center: [ 5.70299438e-05  8.75275011e-02 -6.90530452e-04]
[EXPLODE_MESH] Part geometry_0: moved by 0.3000
[EXPLODE_MESH] Part geometry_1: moved by 0.3000
[EXPLODE_MESH] Part geometry_2: moved by 0.3000
[EXPLODE_MESH] Mesh explosion complete
Version Details
Version ID
036de120ef9211a6de00b742be8ebf2f467aa6d79f0f7119e37f609db9effe96
Version Created
October 20, 2025
Run on Replicate →