Spaces:
Runtime error
Runtime error
FrozenBurning
commited on
Commit
·
93bf50d
1
Parent(s):
fb96ff6
Update app.py
Browse files
app.py
CHANGED
|
@@ -84,7 +84,6 @@ def process(input_image, input_num_steps, input_seed=42, input_cfg=6.0):
|
|
| 84 |
output_rgb_video_path = os.path.join(config.output_dir, GRADIO_RGB_VIDEO_PATH)
|
| 85 |
output_prim_video_path = os.path.join(config.output_dir, GRADIO_PRIM_VIDEO_PATH)
|
| 86 |
output_mat_video_path = os.path.join(config.output_dir, GRADIO_MAT_VIDEO_PATH)
|
| 87 |
-
output_glb_path = os.path.join(config.output_dir, GRADIO_GLB_PATH)
|
| 88 |
|
| 89 |
respacing = "ddim{}".format(input_num_steps)
|
| 90 |
diffusion = create_diffusion(timestep_respacing=respacing, **config.diffusion)
|
|
@@ -139,7 +138,14 @@ def process(input_image, input_num_steps, input_seed=42, input_cfg=6.0):
|
|
| 139 |
prim_params = {'srt_param': recon_srt_param[0].detach().cpu(), 'feat_param': recon_feat_param[0].detach().cpu()}
|
| 140 |
torch.save({'model_state_dict': prim_params}, "{}/denoised.pt".format(config.output_dir))
|
| 141 |
|
|
|
|
|
|
|
|
|
|
| 142 |
# exporting GLB mesh
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
denoise_param_path = os.path.join(config.output_dir, 'denoised.pt')
|
| 144 |
primx_ckpt_weight = torch.load(denoise_param_path, map_location='cpu')['model_state_dict']
|
| 145 |
model_primx.load_state_dict(primx_ckpt_weight)
|
|
@@ -148,8 +154,7 @@ def process(input_image, input_num_steps, input_seed=42, input_cfg=6.0):
|
|
| 148 |
with torch.no_grad():
|
| 149 |
model_primx.srt_param[:, 1:4] *= 0.85
|
| 150 |
extract_texmesh(config.inference, model_primx, config.output_dir, device)
|
| 151 |
-
|
| 152 |
-
return output_rgb_video_path, output_prim_video_path, output_mat_video_path, output_glb_path
|
| 153 |
|
| 154 |
# gradio UI
|
| 155 |
_TITLE = '''3DTopia-XL'''
|
|
@@ -183,15 +188,15 @@ with block:
|
|
| 183 |
input_seed = gr.Slider(label="random seed", minimum=0, maximum=10000, step=1, value=42)
|
| 184 |
# gen button
|
| 185 |
button_gen = gr.Button("Generate")
|
|
|
|
| 186 |
|
| 187 |
with gr.Column(scale=1):
|
| 188 |
-
with gr.
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
with gr.Tab("GLB"):
|
| 195 |
# glb file
|
| 196 |
output_glb = LitModel3D(
|
| 197 |
label="3D GLB Model",
|
|
@@ -201,8 +206,33 @@ with block:
|
|
| 201 |
contrast=1.0,
|
| 202 |
scale=1.0,
|
| 203 |
)
|
| 204 |
-
|
| 205 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
|
| 207 |
gr.Examples(
|
| 208 |
examples=[
|
|
@@ -211,7 +241,7 @@ with block:
|
|
| 211 |
"assets/examples/shuai_panda_notail.png",
|
| 212 |
],
|
| 213 |
inputs=[input_image],
|
| 214 |
-
outputs=[output_rgb_video, output_prim_video, output_mat_video,
|
| 215 |
fn=lambda x: process(input_image=x),
|
| 216 |
cache_examples=False,
|
| 217 |
label='Single Image to 3D PBR Asset'
|
|
|
|
| 84 |
output_rgb_video_path = os.path.join(config.output_dir, GRADIO_RGB_VIDEO_PATH)
|
| 85 |
output_prim_video_path = os.path.join(config.output_dir, GRADIO_PRIM_VIDEO_PATH)
|
| 86 |
output_mat_video_path = os.path.join(config.output_dir, GRADIO_MAT_VIDEO_PATH)
|
|
|
|
| 87 |
|
| 88 |
respacing = "ddim{}".format(input_num_steps)
|
| 89 |
diffusion = create_diffusion(timestep_respacing=respacing, **config.diffusion)
|
|
|
|
| 138 |
prim_params = {'srt_param': recon_srt_param[0].detach().cpu(), 'feat_param': recon_feat_param[0].detach().cpu()}
|
| 139 |
torch.save({'model_state_dict': prim_params}, "{}/denoised.pt".format(config.output_dir))
|
| 140 |
|
| 141 |
+
return output_rgb_video_path, output_prim_video_path, output_mat_video_path, gr.update(interactive=True)
|
| 142 |
+
|
| 143 |
+
def export_mesh(remesh=False, decimate=100000, mc_resolution=256):
|
| 144 |
# exporting GLB mesh
|
| 145 |
+
output_glb_path = os.path.join(config.output_dir, GRADIO_GLB_PATH)
|
| 146 |
+
config.inference.remesh = remesh
|
| 147 |
+
config.inference.decimate = decimate
|
| 148 |
+
config.inference.mc_resolution = mc_resolution
|
| 149 |
denoise_param_path = os.path.join(config.output_dir, 'denoised.pt')
|
| 150 |
primx_ckpt_weight = torch.load(denoise_param_path, map_location='cpu')['model_state_dict']
|
| 151 |
model_primx.load_state_dict(primx_ckpt_weight)
|
|
|
|
| 154 |
with torch.no_grad():
|
| 155 |
model_primx.srt_param[:, 1:4] *= 0.85
|
| 156 |
extract_texmesh(config.inference, model_primx, config.output_dir, device)
|
| 157 |
+
return output_glb_path, gr.update(visible=True)
|
|
|
|
| 158 |
|
| 159 |
# gradio UI
|
| 160 |
_TITLE = '''3DTopia-XL'''
|
|
|
|
| 188 |
input_seed = gr.Slider(label="random seed", minimum=0, maximum=10000, step=1, value=42)
|
| 189 |
# gen button
|
| 190 |
button_gen = gr.Button("Generate")
|
| 191 |
+
export_glb_btn = gr.Button(value="Export GLB", interactive=False)
|
| 192 |
|
| 193 |
with gr.Column(scale=1):
|
| 194 |
+
with gr.Row():
|
| 195 |
+
# final video results
|
| 196 |
+
output_rgb_video = gr.Video(label="RGB")
|
| 197 |
+
output_prim_video = gr.Video(label="Primitives")
|
| 198 |
+
output_mat_video = gr.Video(label="Material")
|
| 199 |
+
with gr.Row():
|
|
|
|
| 200 |
# glb file
|
| 201 |
output_glb = LitModel3D(
|
| 202 |
label="3D GLB Model",
|
|
|
|
| 206 |
contrast=1.0,
|
| 207 |
scale=1.0,
|
| 208 |
)
|
| 209 |
+
with gr.Column(visible=False, scale=1.0) as hdr_row:
|
| 210 |
+
gr.Markdown("""## HDR Environment Map
|
| 211 |
+
|
| 212 |
+
Select / Upload an HDR environment map to light the 3D model.
|
| 213 |
+
""")
|
| 214 |
+
with gr.Row():
|
| 215 |
+
hdr_illumination_file = gr.File(
|
| 216 |
+
label="HDR Envmap", file_types=[".hdr"], file_count="single"
|
| 217 |
+
)
|
| 218 |
+
example_hdris = [
|
| 219 |
+
os.path.join("assets/hdri", f)
|
| 220 |
+
for f in os.listdir("assets/hdri")
|
| 221 |
+
]
|
| 222 |
+
hdr_illumination_example = gr.Examples(
|
| 223 |
+
examples=example_hdris,
|
| 224 |
+
inputs=hdr_illumination_file,
|
| 225 |
+
)
|
| 226 |
+
|
| 227 |
+
hdr_illumination_file.change(
|
| 228 |
+
lambda x: gr.update(env_map=x.name if x is not None else None),
|
| 229 |
+
inputs=hdr_illumination_file,
|
| 230 |
+
outputs=[output_glb],
|
| 231 |
+
)
|
| 232 |
+
|
| 233 |
+
button_gen.click(process, inputs=[input_image, input_num_steps, input_seed, input_cfg], outputs=[output_rgb_video, output_prim_video, output_mat_video, export_glb_btn])
|
| 234 |
+
|
| 235 |
+
export_glb_btn.click(export_mesh, inputs=[], outputs=[output_glb, hdr_row])
|
| 236 |
|
| 237 |
gr.Examples(
|
| 238 |
examples=[
|
|
|
|
| 241 |
"assets/examples/shuai_panda_notail.png",
|
| 242 |
],
|
| 243 |
inputs=[input_image],
|
| 244 |
+
outputs=[output_rgb_video, output_prim_video, output_mat_video, export_glb_btn],
|
| 245 |
fn=lambda x: process(input_image=x),
|
| 246 |
cache_examples=False,
|
| 247 |
label='Single Image to 3D PBR Asset'
|