§
    ‚+jž  ã                   óh   — d dl Z d dlZd dlZ G d„ d¦  «        Z G d„ de¦  «        ZeedœZdddœZdS )	é    Nc                   óL   — e Zd ZdZd„ Zed„ ¦   «         ZdZdZdZ	dZ
dZd	Zd
„ ZdS )ÚLoraLoaderBypasszÒ
    Apply LoRA in bypass mode without modifying base model weights.

    Bypass mode computes: output = base_forward(x) + lora_path(x)
    This is useful for training and when model weights are offloaded.
    c                 ó   — d | _         d S )N)Úloaded_lora)Úselfs    ú=/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_lora_debug.pyÚ__init__zLoraLoaderBypass.__init__   s   € ØˆÔÐÐó    c                 ór   — ddddifdddift          j        d¦  «        ddifd	d
dddddœfd	d
dddddœfdœiS )NÚrequiredÚMODELÚtooltipz0The diffusion model the LoRA will be applied to.ÚCLIPz+The CLIP model the LoRA will be applied to.ÚloraszThe name of the LoRA.ÚFLOATç      ð?ç      YÀç      Y@ç{®Gáz„?zGHow strongly to modify the diffusion model. This value can be negative.)ÚdefaultÚminÚmaxÚstepr   zBHow strongly to modify the CLIP model. This value can be negative.)ÚmodelÚclipÚ	lora_nameÚstrength_modelÚstrength_clip©Úfolder_pathsÚget_filename_list©Úss    r   ÚINPUT_TYPESzLoraLoaderBypass.INPUT_TYPES   sœ   € ð Ø! IÐ/aÐ#bÐcØ )Ð-ZÐ![Ð\Ý*Ô<¸WÑEÔEÈ	ÐSjÐGkÐlØ#*¸ÀFÐSXÐbfð  t}ð  -~ð  -~ð  #Ø")°sÀ6ÐRWÐaeð  swð  ,xð  ,xð  "yðð ð
ð 	
r
   )r   r   )zThe modified diffusion model.zThe modified CLIP model.Ú	load_lorazmodel/loadersz¯Apply LoRA in bypass mode. Unlike regular LoRA, this doesn't modify model weights - instead it injects the LoRA computation during forward pass. Useful for training scenarios.Tc                 óV  — |dk    r
|dk    r||fS t          j        d|¦  «        }d }| j        &| j        d         |k    r| j        d         }nd | _        |€*t          j                             |d¬¦  «        }||f| _        t          j                             |||||¦  «        \  }}	||	fS )Nr   r   é   T)Ú	safe_load)r    Úget_full_path_or_raiser   ÚcomfyÚutilsÚload_torch_fileÚsdÚload_bypass_lora_for_models)
r   r   r   r   r   r   Ú	lora_pathÚloraÚ
model_loraÚ	clip_loras
             r   r%   zLoraLoaderBypass.load_lora%   sÇ   € Ø˜QÒÐ =°AÒ#5Ð#5Ø˜4=Ð å Ô7¸ÀÑKÔKˆ	ØˆØÔÐ'ØÔ Ô" iÒ/Ð/ØÔ'¨Ô*à#'Ô àˆ<Ý”;×.Ò.¨yÀDÐ.ÑIÔIˆDØ )¨4Ð0ˆDÔå %¤× DÒ DÀUÈDÐRVÐXfÐhuÑ vÔ vÑˆ
IØ˜IÐ&Ð&r
   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   Úclassmethodr$   ÚRETURN_TYPESÚOUTPUT_TOOLTIPSÚFUNCTIONÚCATEGORYÚDESCRIPTIONÚEXPERIMENTALr%   © r
   r   r   r      sz   € € € € € ðð ð ð  ð  ð ð	
ð 	
ñ „[ð	
ð %€LØS€OØ€Hà€Hð D€KØ€Lð'ð 'ð 'ð 'ð 'r
   r   c                   ó2   — e Zd Zed„ ¦   «         ZdZdZd„ ZdS )ÚLoraLoaderBypassModelOnlyc           	      óF   — ddt          j        d¦  «        fdddddd	œfd
œiS )Nr   ©r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r"   s    r   r$   z%LoraLoaderBypassModelOnly.INPUT_TYPES:   sC   € à zÝ,8Ô,JÈ7Ñ,SÔ,SÐ+VØ18ÀcÐRXÐafÐptÐ:uÐ:uÐ0vð ð  ð !ð 	!r
   rB   Úload_lora_model_onlyc                 óB   — |                       |d ||d¦  «        d         fS )Nr   )r%   )r   r   r   r   s       r   rC   z.LoraLoaderBypassModelOnly.load_lora_model_onlyC   s$   € Ø—’˜u d¨I°~ÀqÑIÔIÈ!ÔLÐNÐNr
   N)r3   r4   r5   r7   r$   r8   r:   rC   r>   r
   r   r@   r@   9   sM   € € € € € Øð!ð !ñ „[ð!ð
 €LØ%€HðOð Oð Oð Oð Or
   r@   )r   r@   z"Load LoRA (Bypass) (For debugging)z.Load LoRA (Bypass, Model Only) (for debugging))r    Úcomfy.utilsr*   Úcomfy.sdr   r@   ÚNODE_CLASS_MAPPINGSÚNODE_DISPLAY_NAME_MAPPINGSr>   r
   r   ú<module>rI      s²   ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€ð0'ð 0'ð 0'ð 0'ð 0'ñ 0'ô 0'ð 0'ðfOð Oð Oð Oð OÐ 0ñ Oô Oð Oð )Ø!:ðð Ð ð =Ø!Qðð Ð Ð Ð r
   