Fix proper handling of difference between 1.7B and 14B HuMo models

This commit is contained in:
ozbayb 2025-09-26 12:15:19 -06:00
parent 710254affc
commit 9aa11f6f1a
2 changed files with 17 additions and 22 deletions

View File

@ -1510,7 +1510,7 @@ class HumoWanModel(WanModel):
operations=None, operations=None,
): ):
super().__init__(model_type='i2v', patch_size=patch_size, text_len=text_len, in_dim=36, dim=dim, ffn_dim=ffn_dim, freq_dim=freq_dim, text_dim=text_dim, out_dim=out_dim, num_heads=num_heads, num_layers=num_layers, window_size=window_size, qk_norm=qk_norm, cross_attn_norm=cross_attn_norm, eps=eps, flf_pos_embed_token_number=flf_pos_embed_token_number, wan_attn_block_class=WanAttentionBlockAudio, image_model=image_model, device=device, dtype=dtype, operations=operations) super().__init__(model_type='i2v', patch_size=patch_size, text_len=text_len, in_dim=in_dim, dim=dim, ffn_dim=ffn_dim, freq_dim=freq_dim, text_dim=text_dim, out_dim=out_dim, num_heads=num_heads, num_layers=num_layers, window_size=window_size, qk_norm=qk_norm, cross_attn_norm=cross_attn_norm, eps=eps, flf_pos_embed_token_number=flf_pos_embed_token_number, wan_attn_block_class=WanAttentionBlockAudio, image_model=image_model, device=device, dtype=dtype, operations=operations)
self.audio_proj = AudioProjModel(seq_len=8, blocks=5, channels=1280, intermediate_dim=512, output_dim=1536, context_tokens=audio_token_num, dtype=dtype, device=device, operations=operations) self.audio_proj = AudioProjModel(seq_len=8, blocks=5, channels=1280, intermediate_dim=512, output_dim=1536, context_tokens=audio_token_num, dtype=dtype, device=device, operations=operations)
@ -1539,12 +1539,6 @@ class HumoWanModel(WanModel):
e0 = self.time_projection(e).unflatten(2, (6, self.dim)) e0 = self.time_projection(e).unflatten(2, (6, self.dim))
if reference_latent is not None: if reference_latent is not None:
if reference_latent.shape[1] < 36:
padding_needed = 36 - reference_latent.shape[1]
padding = torch.zeros(reference_latent.shape[0], padding_needed, *reference_latent.shape[2:],
device=reference_latent.device, dtype=reference_latent.dtype)
reference_latent = torch.cat([padding, reference_latent], dim=1) # pad at beginning like c_concat
ref = self.patch_embedding(reference_latent.float()).to(x.dtype) ref = self.patch_embedding(reference_latent.float()).to(x.dtype)
ref = ref.flatten(2).transpose(1, 2) ref = ref.flatten(2).transpose(1, 2)
freqs_ref = self.rope_encode(reference_latent.shape[-3], reference_latent.shape[-2], reference_latent.shape[-1], t_start=time, device=x.device, dtype=x.dtype) freqs_ref = self.rope_encode(reference_latent.shape[-3], reference_latent.shape[-2], reference_latent.shape[-1], t_start=time, device=x.device, dtype=x.dtype)

View File

@ -1227,11 +1227,13 @@ class WAN21_HuMo(WAN21):
if audio_embed is not None: if audio_embed is not None:
out['audio_embed'] = comfy.conds.CONDRegular(audio_embed) out['audio_embed'] = comfy.conds.CONDRegular(audio_embed)
if "c_concat" not in out or "concat_latent_image" in kwargs: # 1.7B model OR I2V mode
reference_latents = kwargs.get("reference_latents", None) reference_latents = kwargs.get("reference_latents", None)
if reference_latents is not None:
if "c_concat" not in out and reference_latents is not None and reference_latents[0].shape[1] == 16: # 1.7B model
out['reference_latent'] = comfy.conds.CONDRegular(self.process_latent_in(reference_latents[-1])) out['reference_latent'] = comfy.conds.CONDRegular(self.process_latent_in(reference_latents[-1]))
else: else:
concat_latent_image = kwargs.get("concat_latent_image", None)
if concat_latent_image is None:
noise_shape = list(noise.shape) noise_shape = list(noise.shape)
noise_shape[1] += 4 noise_shape[1] += 4
concat_latent = torch.zeros(noise_shape, device=noise.device, dtype=noise.dtype) concat_latent = torch.zeros(noise_shape, device=noise.device, dtype=noise.dtype)
@ -1242,7 +1244,6 @@ class WAN21_HuMo(WAN21):
concat_latent[:, 4:, :1] = zero_vae_values_first concat_latent[:, 4:, :1] = zero_vae_values_first
concat_latent[:, 4:, 1:2] = zero_vae_values_second concat_latent[:, 4:, 1:2] = zero_vae_values_second
out['c_concat'] = comfy.conds.CONDNoiseShape(concat_latent) out['c_concat'] = comfy.conds.CONDNoiseShape(concat_latent)
reference_latents = kwargs.get("reference_latents", None)
if reference_latents is not None: if reference_latents is not None:
ref_latent = self.process_latent_in(reference_latents[-1]) ref_latent = self.process_latent_in(reference_latents[-1])
ref_latent_shape = list(ref_latent.shape) ref_latent_shape = list(ref_latent.shape)