mirror of
https://github.com/Comfy-Org/ComfyUI.git
synced 2026-08-24 18:10:27 +08:00
Cube3D: route VAE decode through managed comfy.sd.VAE.decode
Stop fighting ComfyUI's model management. VAEDecodeCube was manually calling load_models_gpu + .to(vae.device) and the VAE forced disable_offload=True because it bypassed the managed decode path. Now CubeShapeVAE.decode(samples) is the entry point that comfy.sd.VAE.decode calls, so loading/device/dtype are handled automatically (like Hunyuan3Dv2): - removed disable_offload=True (let the offload system manage weights) - removed manual load_models_gpu + .to(device) from the node - process_output set to identity (default clamps [0,1] in-place and would destroy the occupancy isosurface) - decode() pre-inverts VAE.decode's trailing movedim(1,-1) so the node receives grid logits unchanged (parity preserved) - memory_used_decode sized by num_tokens (shape[-1]) for the new latent layout Amp-Thread-ID: https://ampcode.com/threads/T-019ec361-addb-70d8-a74b-438ce8a1e096 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -121,15 +121,15 @@ class VAEDecodeCube(IO.ComfyNode):
|
||||
|
||||
@classmethod
|
||||
def execute(cls, vae, samples, resolution_base, chunk_size) -> IO.NodeOutput:
|
||||
comfy.model_management.load_models_gpu([vae.patcher])
|
||||
tok = vae.first_stage_model
|
||||
ids = samples["samples"]
|
||||
ids = ids.reshape(ids.shape[0], -1)[:, :tok.cfg_num_encoder_latents].long()
|
||||
ids = ids.clamp(0, tok.cfg_num_codes - 1).to(vae.device)
|
||||
# Managed decode: comfy.sd.VAE.decode handles model loading + device/dtype and
|
||||
# returns the occupancy grid logits (B, gx, gy, gz). Marching cubes runs here.
|
||||
grid = vae.decode(samples["samples"],
|
||||
vae_options={"resolution_base": resolution_base, "chunk_size": chunk_size})
|
||||
|
||||
latents = tok.decode_indices(ids)
|
||||
grid, grid_size, bbox_size, bbox_min = tok.extract_geometry(
|
||||
latents, resolution_base=resolution_base, chunk_size=chunk_size)
|
||||
bounds = vae.first_stage_model.decode_bounds
|
||||
bbox_min = np.array(bounds[0:3])
|
||||
bbox_size = np.array(bounds[3:6]) - bbox_min
|
||||
grid_size = list(grid.shape[1:])
|
||||
|
||||
verts_list, faces_list = [], []
|
||||
for i in range(grid.shape[0]):
|
||||
|
||||
Reference in New Issue
Block a user