From e90dfe7e0a126f563c5833955e00f779b5f8d868 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 27 Jan 2025 15:39:59 -0500 Subject: [PATCH] fix fasthunyuan Signed-off-by: Vladimir Mandic --- installer.py | 2 +- scripts/hunyuanvideo.py | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/installer.py b/installer.py index 8d6aeb471..33347a0be 100644 --- a/installer.py +++ b/installer.py @@ -492,7 +492,7 @@ def check_diffusers(): t_start = time.time() if args.skip_all or args.skip_git: return - sha = '07860f991639f35f4b5a152676bd4d590c3e589e' # diffusers commit hash + sha = '8ceec90d76767035a63b879d659a2ed8e12c5bba' # diffusers commit hash pkg = pkg_resources.working_set.by_key.get('diffusers', None) minor = int(pkg.version.split('.')[1] if pkg is not None else 0) cur = opts.get('diffusers_version', '') if minor > 0 else '' diff --git a/scripts/hunyuanvideo.py b/scripts/hunyuanvideo.py index ec061836f..a4bb148b0 100644 --- a/scripts/hunyuanvideo.py +++ b/scripts/hunyuanvideo.py @@ -19,6 +19,8 @@ models = { 'HunyuanVideo': { 'repo': 'tencent/HunyuanVideo', 'revision': 'refs/pr/18' }, 'FastHunyuan': { 'repo': 'FastVideo/FastHunyuan', 'revision': None }, } +loaded_model = None + def get_template(template: str = None): # diffusers.pipelines.hunyuan_video.pipeline_hunyuan_video.DEFAULT_PROMPT_TEMPLATE @@ -85,7 +87,8 @@ class Script(scripts.Script): return [model, num_frames, tile_frames, override_scheduler, scheduler_shift, template, video_type, duration, gif_loop, mp4_pad, mp4_interpolate] def load(self, model:str): - if shared.sd_model.__class__ != diffusers.HunyuanVideoPipeline: + global loaded_model # pylint: disable=global-statement + if shared.sd_model.__class__ != diffusers.HunyuanVideoPipeline or model != loaded_model: sd_models.unload_model_weights() t0 = time.time() quant_args = {} @@ -113,12 +116,20 @@ class Script(scripts.Script): torch_dtype=devices.dtype, **quant_args ) + text_encoder_2 = transformers.CLIPTextModel.from_pretrained( + pretrained_model_name_or_path=models.get(model)['repo'], + subfolder="text_encoder_2", + revision=models.get(model)['revision'], + cache_dir = shared.opts.hfcache_dir, + torch_dtype=devices.dtype, + ) shared.log.debug(f'Video: module={text_encoder.__class__.__name__}') shared.sd_model = diffusers.HunyuanVideoPipeline.from_pretrained( - pretrained_model_name_or_path=models.get(model)['repo'], + pretrained_model_name_or_path='tencent/HunyuanVideo', transformer=transformer, text_encoder=text_encoder, - revision=models.get(model)['revision'], + text_encoder_2=text_encoder_2, + revision='refs/pr/18', cache_dir = shared.opts.hfcache_dir, torch_dtype=devices.dtype, **quant_args @@ -134,6 +145,7 @@ class Script(scripts.Script): shared.sd_model.encode_prompt = hijack_encode_prompt shared.sd_model.vae.enable_slicing() shared.sd_model.vae.enable_tiling() + loaded_model = model def run(self, p: processing.StableDiffusionProcessing, model, num_frames, tile_frames, override_scheduler, scheduler_shift, template, video_type, duration, gif_loop, mp4_pad, mp4_interpolate): # pylint: disable=arguments-differ, unused-argument # set params