| import os |
| import torch |
| from shared.utils.hf import build_hf_url |
|
|
| class family_handler(): |
| @staticmethod |
| def query_model_def(base_model_type, model_def): |
| LTXV_config = model_def.get("LTXV_config", "") |
| distilled= "distilled" in LTXV_config |
| extra_model_def = {} |
| if distilled: |
| extra_model_def.update({ |
| "lock_inference_steps": True, |
| "no_negative_prompt" : True, |
| }) |
|
|
| text_encoder_folder = "T5_xxl_1.1" |
| extra_model_def["text_encoder_URLs"] = [ |
| build_hf_url("DeepBeepMeep/LTX_Video", text_encoder_folder, "T5_xxl_1.1_enc_bf16.safetensors"), |
| build_hf_url("DeepBeepMeep/LTX_Video", text_encoder_folder, "T5_xxl_1.1_enc_quanto_bf16_int8.safetensors"), |
| ] |
| extra_model_def["text_encoder_folder"] = text_encoder_folder |
|
|
| extra_model_def["fps"] = 30 |
| extra_model_def["frames_minimum"] = 17 |
| extra_model_def["frames_steps"] = 8 |
| extra_model_def["sliding_window"] = True |
| extra_model_def["image_prompt_types_allowed"] = "TSEV" |
|
|
| extra_model_def["guide_preprocessing"] = { |
| "selection": ["", "PV", "DV", "EV", "V"], |
| "labels" : { "V": "Use LTXV raw format"} |
| } |
|
|
| extra_model_def["mask_preprocessing"] = { |
| "selection": ["", "A", "NA", "XA", "XNA"], |
| } |
|
|
| extra_model_def["extra_control_frames"] = 1 |
| extra_model_def["dont_cat_preguide"]= True |
| return extra_model_def |
|
|
| @staticmethod |
| def query_supported_types(): |
| return ["ltxv_13B"] |
| |
| @staticmethod |
| def query_family_maps(): |
| return {}, {} |
|
|
| @staticmethod |
| def get_rgb_factors(base_model_type ): |
| from shared.RGB_factors import get_rgb_factors |
| latent_rgb_factors, latent_rgb_factors_bias = get_rgb_factors("ltxv") |
| return latent_rgb_factors, latent_rgb_factors_bias |
|
|
| @staticmethod |
| def query_model_family(): |
| return "ltxv" |
|
|
| @staticmethod |
| def query_family_infos(): |
| return {"ltxv":(30, "LTX Video")} |
|
|
| @staticmethod |
| def register_lora_cli_args(parser): |
| parser.add_argument( |
| "--lora-dir-ltxv", |
| type=str, |
| default=os.path.join("loras", "ltxv"), |
| help="Path to a directory that contains LTX Videos Loras" |
| ) |
|
|
| @staticmethod |
| def get_lora_dir(base_model_type, args): |
| return args.lora_dir_ltxv |
|
|
| @staticmethod |
| def get_vae_block_size(base_model_type): |
| return 32 |
|
|
| @staticmethod |
| def query_model_files(computeList, base_model_type, model_def=None): |
| return { |
| "repoId" : "DeepBeepMeep/LTX_Video", |
| "sourceFolderList" : ["T5_xxl_1.1", "" ], |
| "fileList" : [ ["added_tokens.json", "special_tokens_map.json", "spiece.model", "tokenizer_config.json"], ["ltxv_0.9.7_VAE.safetensors", "ltxv_0.9.7_spatial_upscaler.safetensors", "ltxv_scheduler.json"] ] |
| } |
|
|
|
|
| @staticmethod |
| def load_model(model_filename, model_type, base_model_type, model_def, quantizeTransformer = False, text_encoder_quantization = None, dtype = torch.bfloat16, VAE_dtype = torch.float32, mixed_precision_transformer = False, save_quantized = False, submodel_no_list = None, text_encoder_filename = None): |
| from .ltxv import LTXV |
|
|
| ltxv_model = LTXV( |
| model_filepath = model_filename, |
| text_encoder_filepath = text_encoder_filename, |
| model_type = model_type, |
| base_model_type = base_model_type, |
| model_def = model_def, |
| dtype = dtype, |
| |
| VAE_dtype = VAE_dtype, |
| mixed_precision_transformer = mixed_precision_transformer |
| ) |
|
|
| pipeline = ltxv_model.pipeline |
| pipe = {"transformer" : pipeline.video_pipeline.transformer, "vae" : pipeline.vae, "text_encoder" : pipeline.video_pipeline.text_encoder, "latent_upsampler" : pipeline.latent_upsampler} |
|
|
| return ltxv_model, pipe |
|
|
| @staticmethod |
| def update_default_settings(base_model_type, model_def, ui_defaults): |
| pass |
| |
|
|