innoai commited on
Commit
89bb8dd
·
verified ·
1 Parent(s): 9eaa904

Upload 251 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +125 -35
  2. README.md +16 -14
  3. app.py +245 -0
  4. assets/example_image/0.png +3 -0
  5. assets/example_image/1.png +3 -0
  6. assets/example_image/102.png +3 -0
  7. assets/example_image/104.png +3 -0
  8. assets/example_image/105.png +3 -0
  9. assets/example_image/106.png +0 -0
  10. assets/example_image/111.png +3 -0
  11. assets/example_image/113.png +3 -0
  12. assets/example_image/115.png +3 -0
  13. assets/example_image/116.png +3 -0
  14. assets/example_image/117.png +3 -0
  15. assets/example_image/118.png +0 -0
  16. assets/example_image/119.png +0 -0
  17. assets/example_image/12.png +0 -0
  18. assets/example_image/121.png +3 -0
  19. assets/example_image/122.png +3 -0
  20. assets/example_image/123.png +3 -0
  21. assets/example_image/124.png +3 -0
  22. assets/example_image/125.png +3 -0
  23. assets/example_image/126.png +3 -0
  24. assets/example_image/127.png +3 -0
  25. assets/example_image/128.png +0 -0
  26. assets/example_image/13.png +0 -0
  27. assets/example_image/137.png +3 -0
  28. assets/example_image/138.png +3 -0
  29. assets/example_image/140.png +3 -0
  30. assets/example_image/141.png +3 -0
  31. assets/example_image/142.png +3 -0
  32. assets/example_image/144.png +0 -0
  33. assets/example_image/145.png +3 -0
  34. assets/example_image/146.png +0 -0
  35. assets/example_image/147.png +3 -0
  36. assets/example_image/148.png +0 -0
  37. assets/example_image/15.png +3 -0
  38. assets/example_image/150.png +3 -0
  39. assets/example_image/151.png +3 -0
  40. assets/example_image/152.png +3 -0
  41. assets/example_image/153.png +3 -0
  42. assets/example_image/154.png +3 -0
  43. assets/example_image/156.png +3 -0
  44. assets/example_image/157.png +3 -0
  45. assets/example_image/16.png +3 -0
  46. assets/example_image/161.png +3 -0
  47. assets/example_image/162.png +3 -0
  48. assets/example_image/164.png +3 -0
  49. assets/example_image/166.png +3 -0
  50. assets/example_image/167.png +0 -0
.gitattributes CHANGED
@@ -1,35 +1,125 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ wheels/nvdiffrast-0.3.3-cp310-cp310-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
37
+ assets/example_image/0.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/example_image/1.png filter=lfs diff=lfs merge=lfs -text
39
+ assets/example_image/102.png filter=lfs diff=lfs merge=lfs -text
40
+ assets/example_image/104.png filter=lfs diff=lfs merge=lfs -text
41
+ assets/example_image/105.png filter=lfs diff=lfs merge=lfs -text
42
+ assets/example_image/111.png filter=lfs diff=lfs merge=lfs -text
43
+ assets/example_image/113.png filter=lfs diff=lfs merge=lfs -text
44
+ assets/example_image/115.png filter=lfs diff=lfs merge=lfs -text
45
+ assets/example_image/116.png filter=lfs diff=lfs merge=lfs -text
46
+ assets/example_image/117.png filter=lfs diff=lfs merge=lfs -text
47
+ assets/example_image/121.png filter=lfs diff=lfs merge=lfs -text
48
+ assets/example_image/122.png filter=lfs diff=lfs merge=lfs -text
49
+ assets/example_image/123.png filter=lfs diff=lfs merge=lfs -text
50
+ assets/example_image/124.png filter=lfs diff=lfs merge=lfs -text
51
+ assets/example_image/125.png filter=lfs diff=lfs merge=lfs -text
52
+ assets/example_image/126.png filter=lfs diff=lfs merge=lfs -text
53
+ assets/example_image/127.png filter=lfs diff=lfs merge=lfs -text
54
+ assets/example_image/137.png filter=lfs diff=lfs merge=lfs -text
55
+ assets/example_image/138.png filter=lfs diff=lfs merge=lfs -text
56
+ assets/example_image/140.png filter=lfs diff=lfs merge=lfs -text
57
+ assets/example_image/141.png filter=lfs diff=lfs merge=lfs -text
58
+ assets/example_image/142.png filter=lfs diff=lfs merge=lfs -text
59
+ assets/example_image/145.png filter=lfs diff=lfs merge=lfs -text
60
+ assets/example_image/147.png filter=lfs diff=lfs merge=lfs -text
61
+ assets/example_image/15.png filter=lfs diff=lfs merge=lfs -text
62
+ assets/example_image/150.png filter=lfs diff=lfs merge=lfs -text
63
+ assets/example_image/151.png filter=lfs diff=lfs merge=lfs -text
64
+ assets/example_image/152.png filter=lfs diff=lfs merge=lfs -text
65
+ assets/example_image/153.png filter=lfs diff=lfs merge=lfs -text
66
+ assets/example_image/154.png filter=lfs diff=lfs merge=lfs -text
67
+ assets/example_image/156.png filter=lfs diff=lfs merge=lfs -text
68
+ assets/example_image/157.png filter=lfs diff=lfs merge=lfs -text
69
+ assets/example_image/16.png filter=lfs diff=lfs merge=lfs -text
70
+ assets/example_image/161.png filter=lfs diff=lfs merge=lfs -text
71
+ assets/example_image/162.png filter=lfs diff=lfs merge=lfs -text
72
+ assets/example_image/164.png filter=lfs diff=lfs merge=lfs -text
73
+ assets/example_image/166.png filter=lfs diff=lfs merge=lfs -text
74
+ assets/example_image/171.png filter=lfs diff=lfs merge=lfs -text
75
+ assets/example_image/176.png filter=lfs diff=lfs merge=lfs -text
76
+ assets/example_image/179.png filter=lfs diff=lfs merge=lfs -text
77
+ assets/example_image/182.png filter=lfs diff=lfs merge=lfs -text
78
+ assets/example_image/22.png filter=lfs diff=lfs merge=lfs -text
79
+ assets/example_image/26.png filter=lfs diff=lfs merge=lfs -text
80
+ assets/example_image/3.png filter=lfs diff=lfs merge=lfs -text
81
+ assets/example_image/30.png filter=lfs diff=lfs merge=lfs -text
82
+ assets/example_image/34.png filter=lfs diff=lfs merge=lfs -text
83
+ assets/example_image/38.png filter=lfs diff=lfs merge=lfs -text
84
+ assets/example_image/4.png filter=lfs diff=lfs merge=lfs -text
85
+ assets/example_image/43.png filter=lfs diff=lfs merge=lfs -text
86
+ assets/example_image/44.png filter=lfs diff=lfs merge=lfs -text
87
+ assets/example_image/46.png filter=lfs diff=lfs merge=lfs -text
88
+ assets/example_image/48.png filter=lfs diff=lfs merge=lfs -text
89
+ assets/example_image/54.png filter=lfs diff=lfs merge=lfs -text
90
+ assets/example_image/55.png filter=lfs diff=lfs merge=lfs -text
91
+ assets/example_image/60.png filter=lfs diff=lfs merge=lfs -text
92
+ assets/example_image/68.png filter=lfs diff=lfs merge=lfs -text
93
+ assets/example_image/69.png filter=lfs diff=lfs merge=lfs -text
94
+ assets/example_image/70.png filter=lfs diff=lfs merge=lfs -text
95
+ assets/example_image/71.png filter=lfs diff=lfs merge=lfs -text
96
+ assets/example_image/72.png filter=lfs diff=lfs merge=lfs -text
97
+ assets/example_image/74.png filter=lfs diff=lfs merge=lfs -text
98
+ assets/example_image/76.png filter=lfs diff=lfs merge=lfs -text
99
+ assets/example_image/77.png filter=lfs diff=lfs merge=lfs -text
100
+ assets/example_image/78.png filter=lfs diff=lfs merge=lfs -text
101
+ assets/example_image/79.png filter=lfs diff=lfs merge=lfs -text
102
+ assets/example_image/83.png filter=lfs diff=lfs merge=lfs -text
103
+ assets/example_image/9.png filter=lfs diff=lfs merge=lfs -text
104
+ assets/example_multi_image/character_1.png filter=lfs diff=lfs merge=lfs -text
105
+ assets/example_multi_image/character_2.png filter=lfs diff=lfs merge=lfs -text
106
+ assets/example_multi_image/character_3.png filter=lfs diff=lfs merge=lfs -text
107
+ assets/example_multi_image/mushroom_1.png filter=lfs diff=lfs merge=lfs -text
108
+ assets/example_multi_image/mushroom_2.png filter=lfs diff=lfs merge=lfs -text
109
+ assets/example_multi_image/mushroom_3.png filter=lfs diff=lfs merge=lfs -text
110
+ assets/example_multi_image/orangeguy_1.png filter=lfs diff=lfs merge=lfs -text
111
+ assets/example_multi_image/orangeguy_2.png filter=lfs diff=lfs merge=lfs -text
112
+ assets/example_multi_image/orangeguy_3.png filter=lfs diff=lfs merge=lfs -text
113
+ assets/example_multi_image/popmart_1.png filter=lfs diff=lfs merge=lfs -text
114
+ assets/example_multi_image/popmart_2.png filter=lfs diff=lfs merge=lfs -text
115
+ assets/example_multi_image/popmart_3.png filter=lfs diff=lfs merge=lfs -text
116
+ assets/example_multi_image/rabbit_1.png filter=lfs diff=lfs merge=lfs -text
117
+ assets/example_multi_image/rabbit_2.png filter=lfs diff=lfs merge=lfs -text
118
+ assets/example_multi_image/rabbit_3.png filter=lfs diff=lfs merge=lfs -text
119
+ assets/example_multi_image/tiger_1.png filter=lfs diff=lfs merge=lfs -text
120
+ assets/example_multi_image/tiger_2.png filter=lfs diff=lfs merge=lfs -text
121
+ assets/example_multi_image/tiger_3.png filter=lfs diff=lfs merge=lfs -text
122
+ assets/example_multi_image/yoimiya_1.png filter=lfs diff=lfs merge=lfs -text
123
+ assets/example_multi_image/yoimiya_2.png filter=lfs diff=lfs merge=lfs -text
124
+ assets/example_multi_image/yoimiya_3.png filter=lfs diff=lfs merge=lfs -text
125
+ wheels/diff_gaussian_rasterization-0.0.0-cp310-cp310-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,14 +1,16 @@
1
- ---
2
- title: Hi3DGen CPU
3
- emoji: 👁
4
- colorFrom: red
5
- colorTo: red
6
- sdk: gradio
7
- sdk_version: 5.23.2
8
- app_file: app.py
9
- pinned: false
10
- license: gpl-2.0
11
- short_description: Hi3DGen-CPU
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
1
+ ---
2
+ title: Hi3DGen
3
+ emoji: 🏢
4
+ colorFrom: indigo
5
+ colorTo: blue
6
+ sdk: gradio
7
+ sdk_version: 4.44.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ short_description: High-fidelity 3D Geometry Generation from images
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
15
+
16
+ Paper:
app.py ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import spaces
3
+ from gradio_litmodel3d import LitModel3D
4
+
5
+ import os
6
+ import shutil
7
+ os.environ['SPCONV_ALGO'] = 'native'
8
+ from typing import *
9
+ import torch
10
+ import numpy as np
11
+ import imageio
12
+ from PIL import Image
13
+ from trellis.pipelines import TrellisImageTo3DPipeline
14
+ from trellis.utils import render_utils
15
+ import trimesh
16
+ import tempfile
17
+
18
+ MAX_SEED = np.iinfo(np.int32).max
19
+ TMP_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tmp')
20
+ os.makedirs(TMP_DIR, exist_ok=True)
21
+
22
+ def preprocess_mesh(mesh_prompt):
23
+ print("Processing mesh")
24
+ trimesh_mesh = trimesh.load_mesh(mesh_prompt)
25
+ trimesh_mesh.export(mesh_prompt+'.glb')
26
+ return mesh_prompt+'.glb'
27
+
28
+ def preprocess_image(image):
29
+ if image is None:
30
+ return None
31
+ image = pipeline.preprocess_image(image, resolution=1024)
32
+ return image
33
+
34
+ # Removed @spaces.GPU decorator to allow CPU execution
35
+ def generate_3d(image, seed=-1,
36
+ ss_guidance_strength=3, ss_sampling_steps=50,
37
+ slat_guidance_strength=3, slat_sampling_steps=6,):
38
+ if image is None:
39
+ return None, None, None
40
+
41
+ if seed == -1:
42
+ seed = np.random.randint(0, MAX_SEED)
43
+
44
+ image = pipeline.preprocess_image(image, resolution=1024)
45
+ normal_image = normal_predictor(image, resolution=768, match_input_resolution=True, data_type='object')
46
+
47
+ outputs = pipeline.run(
48
+ normal_image,
49
+ seed=seed,
50
+ formats=["mesh",],
51
+ preprocess_image=False,
52
+ sparse_structure_sampler_params={
53
+ "steps": ss_sampling_steps,
54
+ "cfg_strength": ss_guidance_strength,
55
+ },
56
+ slat_sampler_params={
57
+ "steps": slat_sampling_steps,
58
+ "cfg_strength": slat_guidance_strength,
59
+ },
60
+ )
61
+ generated_mesh = outputs['mesh'][0]
62
+
63
+ # Save outputs
64
+ import datetime
65
+ output_id = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
66
+ os.makedirs(os.path.join(TMP_DIR, output_id), exist_ok=True)
67
+ mesh_path = f"{TMP_DIR}/{output_id}/mesh.glb"
68
+
69
+ render_results = render_utils.render_video(generated_mesh, resolution=1024, ssaa=1, num_frames=8, pitch=0.25, inverse_direction=True)
70
+ def combine_diagonal(color_np, normal_np):
71
+ # Convert images to numpy arrays
72
+ h, w, c = color_np.shape
73
+ # Create a boolean mask that is True for pixels where x > y (diagonally)
74
+ mask = np.fromfunction(lambda y, x: x > y, (h, w))
75
+ mask = mask.astype(bool)
76
+ mask = np.stack([mask] * c, axis=-1)
77
+ # Where mask is True take color, else normal
78
+ combined_np = np.where(mask, color_np, normal_np)
79
+ return Image.fromarray(combined_np)
80
+
81
+ preview_images = [combine_diagonal(c, n) for c, n in zip(render_results['color'], render_results['normal'])]
82
+
83
+ # Export mesh
84
+ trimesh_mesh = generated_mesh.to_trimesh(transform_pose=True)
85
+
86
+ trimesh_mesh.export(mesh_path)
87
+
88
+ return preview_images, normal_image, mesh_path, mesh_path
89
+
90
+ def convert_mesh(mesh_path, export_format):
91
+ """Download the mesh in the selected format."""
92
+ if not mesh_path:
93
+ return None
94
+
95
+ # Create a temporary file to store the mesh data
96
+ temp_file = tempfile.NamedTemporaryFile(suffix=f".{export_format}", delete=False)
97
+ temp_file_path = temp_file.name
98
+
99
+ new_mesh_path = mesh_path.replace(".glb", f".{export_format}")
100
+ mesh = trimesh.load_mesh(mesh_path)
101
+ mesh.export(temp_file_path) # Export to the temporary file
102
+
103
+ return temp_file_path # Return the path to the temporary file
104
+
105
+ # Create the Gradio interface with improved layout
106
+ with gr.Blocks(css="footer {visibility: hidden}") as demo:
107
+ gr.Markdown(
108
+ """
109
+ <h1 style='text-align: center;'>Hi3DGen: High-fidelity 3D Geometry Generation from Images via Normal Bridging</h1>
110
+ <p style='text-align: center;'>
111
+ <strong>V0.1, Introduced By
112
+ <a href="https://gaplab.cuhk.edu.cn/" target="_blank">GAP Lab</a> from CUHKSZ and
113
+ <a href="https://www.nvsgames.cn/" target="_blank">Game-AIGC Team</a> from ByteDance</strong>
114
+ </p>
115
+ """
116
+ )
117
+
118
+ with gr.Row():
119
+ gr.Markdown("""
120
+ <p align="center">
121
+ <a title="Website" href="https://stable-x.github.io/Hi3DGen/" target="_blank" rel="noopener noreferrer" style="display: inline-block;">
122
+ <img src="https://www.obukhov.ai/img/badges/badge-website.svg">
123
+ </a>
124
+ <a title="arXiv" href="https://stable-x.github.io/Hi3DGen/hi3dgen_paper.pdf" target="_blank" rel="noopener noreferrer" style="display: inline-block;">
125
+ <img src="https://www.obukhov.ai/img/badges/badge-pdf.svg">
126
+ </a>
127
+ <a title="Github" href="https://github.com/Stable-X/Hi3DGen" target="_blank" rel="noopener noreferrer" style="display: inline-block;">
128
+ <img src="https://img.shields.io/github/stars/Stable-X/Hi3DGen?label=GitHub%20%E2%98%85&logo=github&color=C8C" alt="badge-github-stars">
129
+ </a>
130
+ <a title="Social" href="https://x.com/ychngji6" target="_blank" rel="noopener noreferrer" style="display: inline-block;">
131
+ <img src="https://www.obukhov.ai/img/badges/badge-social.svg" alt="social">
132
+ </a>
133
+ </p>
134
+ """)
135
+
136
+ with gr.Row():
137
+ with gr.Column(scale=1):
138
+ with gr.Tabs():
139
+
140
+ with gr.Tab("Single Image"):
141
+ with gr.Row():
142
+ image_prompt = gr.Image(label="Image Prompt", image_mode="RGBA", type="pil")
143
+ normal_output = gr.Image(label="Normal Bridge", image_mode="RGBA", type="pil")
144
+
145
+ with gr.Tab("Multiple Images"):
146
+ gr.Markdown("<div style='text-align: center; padding: 40px; font-size: 24px;'>Multiple Images functionality is coming soon!</div>")
147
+
148
+ with gr.Accordion("Advanced Settings", open=False):
149
+ seed = gr.Slider(-1, MAX_SEED, label="Seed", value=0, step=1)
150
+ gr.Markdown("#### Stage 1: Sparse Structure Generation")
151
+ with gr.Row():
152
+ ss_guidance_strength = gr.Slider(0.0, 10.0, label="Guidance Strength", value=3, step=0.1)
153
+ ss_sampling_steps = gr.Slider(1, 50, label="Sampling Steps", value=50, step=1)
154
+ gr.Markdown("#### Stage 2: Structured Latent Generation")
155
+ with gr.Row():
156
+ slat_guidance_strength = gr.Slider(0.0, 10.0, label="Guidance Strength", value=3.0, step=0.1)
157
+ slat_sampling_steps = gr.Slider(1, 50, label="Sampling Steps", value=6, step=1)
158
+
159
+ with gr.Group():
160
+ with gr.Row():
161
+ gen_shape_btn = gr.Button("Generate Shape", size="lg", variant="primary")
162
+
163
+ # Right column - Output
164
+ with gr.Column(scale=1):
165
+ with gr.Tabs():
166
+ with gr.Tab("Preview"):
167
+ output_gallery = gr.Gallery(label="Examples", columns=4, rows=2, object_fit="contain", height="auto",show_label=False)
168
+ with gr.Tab("3D Model"):
169
+ with gr.Column():
170
+ model_output = gr.Model3D(label="3D Model Preview (Each model is approximately 40MB, may take around 1 minute to load)")
171
+ with gr.Column():
172
+ export_format = gr.Dropdown(
173
+ choices=["obj", "glb", "ply", "stl"],
174
+ value="glb",
175
+ label="File Format"
176
+ )
177
+ download_btn = gr.DownloadButton(label="Export Mesh", interactive=False)
178
+
179
+ image_prompt.upload(
180
+ preprocess_image,
181
+ inputs=[image_prompt],
182
+ outputs=[image_prompt]
183
+ )
184
+
185
+ gen_shape_btn.click(
186
+ generate_3d,
187
+ inputs=[
188
+ image_prompt, seed,
189
+ ss_guidance_strength, ss_sampling_steps,
190
+ slat_guidance_strength, slat_sampling_steps
191
+ ],
192
+ outputs=[output_gallery, normal_output, model_output, download_btn]
193
+ ).then(
194
+ lambda: gr.Button(interactive=True),
195
+ outputs=[download_btn],
196
+ )
197
+
198
+
199
+ def update_download_button(mesh_path, export_format):
200
+ if not mesh_path:
201
+ return gr.File.update(value=None, interactive=False)
202
+
203
+ download_path = convert_mesh(mesh_path, export_format)
204
+ return download_path
205
+
206
+ export_format.change(
207
+ update_download_button,
208
+ inputs=[model_output, export_format],
209
+ outputs=[download_btn]
210
+ ).then(
211
+ lambda: gr.Button(interactive=True),
212
+ outputs=[download_btn],
213
+ )
214
+
215
+ examples = gr.Examples(
216
+ examples=[
217
+ f'assets/example_image/{image}'
218
+ for image in os.listdir("assets/example_image")
219
+ ],
220
+ inputs=image_prompt,
221
+ )
222
+
223
+ gr.Markdown(
224
+ """
225
+ **Acknowledgments**: Hi3DGen is built on the shoulders of giants. We would like to express our gratitude to the open-source research community and the developers of these pioneering projects:
226
+ - **3D Modeling:** Our 3D Model is finetuned from the SOTA open-source 3D foundation model [Trellis](https://github.com/microsoft/TRELLIS) and we draw inspiration from the teams behind [Rodin](https://hyperhuman.deemos.com/rodin), [Tripo](https://www.tripo3d.ai/app/home), and [Dora](https://github.com/Seed3D/Dora).
227
+ - **Normal Estimation:** Our Normal Estimation Model builds on the leading normal estimation research such as [StableNormal](https://github.com/hugoycj/StableNormal) and [GenPercept](https://github.com/aim-uofa/GenPercept).
228
+
229
+ **Your contributions and collaboration push the boundaries of 3D modeling!**
230
+ """
231
+ )
232
+
233
+ if __name__ == "__main__":
234
+ # Initialize pipeline
235
+ pipeline = TrellisImageTo3DPipeline.from_pretrained("Stable-X/trellis-normal-v0-1")
236
+ # Use CPU instead of GPU
237
+ pipeline.to("cpu")
238
+
239
+ # Initialize normal predictor
240
+ normal_predictor = torch.hub.load("hugoycj/StableNormal", "StableNormal_turbo", trust_repo=True, yoso_version='yoso-normal-v1-8-1')
241
+ # Ensure normal predictor is on CPU
242
+ normal_predictor.to("cpu")
243
+
244
+ # Launch the app
245
+ demo.launch()
assets/example_image/0.png ADDED

Git LFS Details

  • SHA256: ee9ece0ed5da13d89b2352cfcde54e319c5beb962948ba4dc66e8455e2b69028
  • Pointer size: 131 Bytes
  • Size of remote file: 833 kB
assets/example_image/1.png ADDED

Git LFS Details

  • SHA256: 7fe822d74aaf7326aaf3323a4bf78a5d2b939d96b47ee8f8329fe2d3e57f0347
  • Pointer size: 131 Bytes
  • Size of remote file: 539 kB
assets/example_image/102.png ADDED

Git LFS Details

  • SHA256: e82ac1cade50132110c0c7dac0f84d631494a1f200a3578ebb6502a5880efd45
  • Pointer size: 131 Bytes
  • Size of remote file: 157 kB
assets/example_image/104.png ADDED

Git LFS Details

  • SHA256: bebd84a5201f8a25b9da8273a01891c97a6416cf6f0295773f1c4e10ddc6f805
  • Pointer size: 131 Bytes
  • Size of remote file: 139 kB
assets/example_image/105.png ADDED

Git LFS Details

  • SHA256: f5b80d64dbf7117816de93d8b1bb6b07d92d2cd2c44ed2195f0ec5fb8dee7ea9
  • Pointer size: 131 Bytes
  • Size of remote file: 123 kB
assets/example_image/106.png ADDED
assets/example_image/111.png ADDED

Git LFS Details

  • SHA256: 3e97161585feefb1b3004f8016894c598631929925d2f75f517d2df56382b142
  • Pointer size: 131 Bytes
  • Size of remote file: 197 kB
assets/example_image/113.png ADDED

Git LFS Details

  • SHA256: f9e42aa44487a12a559ecdcb534610bb6a7f2ae6073c856feb27206775a40d98
  • Pointer size: 131 Bytes
  • Size of remote file: 104 kB
assets/example_image/115.png ADDED

Git LFS Details

  • SHA256: 367df35d24c2a1e0fc14e4476a33927486feaabb7915a41c55d518b5bc70ee29
  • Pointer size: 131 Bytes
  • Size of remote file: 132 kB
assets/example_image/116.png ADDED

Git LFS Details

  • SHA256: 8532bffecb1c413a217e0a2f476162c74056f3f4df9a2a2d5ddd672ea4ff4908
  • Pointer size: 131 Bytes
  • Size of remote file: 132 kB
assets/example_image/117.png ADDED

Git LFS Details

  • SHA256: a6772d91cca9d0b39e09a1984084099feae8e288537621ee5374caf5cc4b584f
  • Pointer size: 131 Bytes
  • Size of remote file: 134 kB
assets/example_image/118.png ADDED
assets/example_image/119.png ADDED
assets/example_image/12.png ADDED
assets/example_image/121.png ADDED

Git LFS Details

  • SHA256: 9eb0f68f2feb679f5cb06e156d014f0fb6555b9da46c19dbf45279e53f73f397
  • Pointer size: 131 Bytes
  • Size of remote file: 129 kB
assets/example_image/122.png ADDED

Git LFS Details

  • SHA256: dc79779a473686054b15495567a9a77678fc2b73bae98ce5fbd407cf314cb28f
  • Pointer size: 131 Bytes
  • Size of remote file: 135 kB
assets/example_image/123.png ADDED

Git LFS Details

  • SHA256: 3c5f5ee3bfa959955b823606c83dd79d219b2c386c4e032e2b6730ef7546114a
  • Pointer size: 131 Bytes
  • Size of remote file: 143 kB
assets/example_image/124.png ADDED

Git LFS Details

  • SHA256: 14882bb90a4e4cf06dec2ed6724bfdda51345c86cf6200fdeceaf24f6be1b161
  • Pointer size: 131 Bytes
  • Size of remote file: 223 kB
assets/example_image/125.png ADDED

Git LFS Details

  • SHA256: 7707ce5447583f390644c5023e105ddd5a51a0cc5b85e57811c9a3a3582df60a
  • Pointer size: 131 Bytes
  • Size of remote file: 190 kB
assets/example_image/126.png ADDED

Git LFS Details

  • SHA256: 0253416276122dc003145b46c0aedbe42c5d42a8a04b30dd234da1b3d9256744
  • Pointer size: 131 Bytes
  • Size of remote file: 176 kB
assets/example_image/127.png ADDED

Git LFS Details

  • SHA256: fe436dbc4988dd2a202f61602d7177e6f964c5088f3cfda69313aaab5b7abc1a
  • Pointer size: 131 Bytes
  • Size of remote file: 137 kB
assets/example_image/128.png ADDED
assets/example_image/13.png ADDED
assets/example_image/137.png ADDED

Git LFS Details

  • SHA256: f6ba8201c71787c7867e1e9ad0fd0fc8acf040b68dc500f47394d1850ffee72e
  • Pointer size: 131 Bytes
  • Size of remote file: 137 kB
assets/example_image/138.png ADDED

Git LFS Details

  • SHA256: a322a5cf75f0a64d946ecfc6e1231817db308a2006cfe6c5ca179fb6feb8b664
  • Pointer size: 131 Bytes
  • Size of remote file: 230 kB
assets/example_image/140.png ADDED

Git LFS Details

  • SHA256: 4ddcd39a09ace5771e2a0b66c271dd4a74e42612fcc18eee328ba2d625223f18
  • Pointer size: 131 Bytes
  • Size of remote file: 178 kB
assets/example_image/141.png ADDED

Git LFS Details

  • SHA256: 9f89940c0bf2dbaf6a48346b8b9861f56a1b002ad5452c14e0019149132873bd
  • Pointer size: 131 Bytes
  • Size of remote file: 114 kB
assets/example_image/142.png ADDED

Git LFS Details

  • SHA256: 8bdd23cdb952f2e9468e8762124f508bd93bf44cac732a84058430759954b124
  • Pointer size: 131 Bytes
  • Size of remote file: 104 kB
assets/example_image/144.png ADDED
assets/example_image/145.png ADDED

Git LFS Details

  • SHA256: 20150aae9d12385a5b4f724244789355d5335fd6c295e7fcc62930f4a70b5a71
  • Pointer size: 131 Bytes
  • Size of remote file: 131 kB
assets/example_image/146.png ADDED
assets/example_image/147.png ADDED

Git LFS Details

  • SHA256: 4d72bb0557085ff907826bab2fa42a8623328c2edb59bea066e23269ed5b4fe8
  • Pointer size: 131 Bytes
  • Size of remote file: 143 kB
assets/example_image/148.png ADDED
assets/example_image/15.png ADDED

Git LFS Details

  • SHA256: b8dc5e6398179ed7675b5a6f64770476807946031e2bfedeea26cdf255dfccca
  • Pointer size: 131 Bytes
  • Size of remote file: 640 kB
assets/example_image/150.png ADDED

Git LFS Details

  • SHA256: a59e113ebf09106ad29766ae44bbbc211d9a19f7331ba984ae066836884311ce
  • Pointer size: 131 Bytes
  • Size of remote file: 167 kB
assets/example_image/151.png ADDED

Git LFS Details

  • SHA256: 15f3623509a9a265037f2b5653daf769a35d48ec8aa045b22d282a86b4445f2e
  • Pointer size: 131 Bytes
  • Size of remote file: 240 kB
assets/example_image/152.png ADDED

Git LFS Details

  • SHA256: 0dfd41f4d884508d658fef2fe07447f5ff39340f5d987a465e168c6c8fe6f40d
  • Pointer size: 131 Bytes
  • Size of remote file: 281 kB
assets/example_image/153.png ADDED

Git LFS Details

  • SHA256: caa5a4d8b35f1f22075ee15a3d425d9c7b9e782c53e32646a8fcbee81d20b5d5
  • Pointer size: 131 Bytes
  • Size of remote file: 126 kB
assets/example_image/154.png ADDED

Git LFS Details

  • SHA256: 3f835e8e11e0ae2a8045724e62935746cc7daec4be1a80b104b56928731779b2
  • Pointer size: 131 Bytes
  • Size of remote file: 143 kB
assets/example_image/156.png ADDED

Git LFS Details

  • SHA256: f8310ccc0e66b2390771a1cebca05bd231f618eefb37c3b0c2a5c2433953f524
  • Pointer size: 131 Bytes
  • Size of remote file: 115 kB
assets/example_image/157.png ADDED

Git LFS Details

  • SHA256: 3d89f8698db6deaceb87bb44db24f3d0dae500071ca06f5dfd640ed75f9fcf72
  • Pointer size: 131 Bytes
  • Size of remote file: 142 kB
assets/example_image/16.png ADDED

Git LFS Details

  • SHA256: ddded4213e35001a5f4af985e19df789443844f0957a6cc563d4213972d300e3
  • Pointer size: 131 Bytes
  • Size of remote file: 192 kB
assets/example_image/161.png ADDED

Git LFS Details

  • SHA256: 9fa20fe09cfa7e62bf49753353ff448e4fe2f598032ed13797d69ef94506af71
  • Pointer size: 131 Bytes
  • Size of remote file: 696 kB
assets/example_image/162.png ADDED

Git LFS Details

  • SHA256: ef62ab815bb16c6c1a43b1b2eb041ac894ee2c206b4d04ed7b1e50a3f13de249
  • Pointer size: 131 Bytes
  • Size of remote file: 795 kB
assets/example_image/164.png ADDED

Git LFS Details

  • SHA256: 22851832611bbe00cca34892f3f8f34a71b8b8d6f3f282ccbcaa76fa2e5477a0
  • Pointer size: 131 Bytes
  • Size of remote file: 301 kB
assets/example_image/166.png ADDED

Git LFS Details

  • SHA256: c42040952b6b636542fb3863761b5ee19fff0505f910e657ea5a45850c7c2351
  • Pointer size: 131 Bytes
  • Size of remote file: 997 kB
assets/example_image/167.png ADDED