Ë
    ^(jž  ã                   óZ   — 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y)	é    Nc                   óD   — 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y)Ú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 | _         y )N)Úloaded_lora)Úselfs    úG/Users/danicosta/Desktop/Flux2/ComfyUI/comfy_extras/nodes_lora_debug.pyÚ__init__zLoraLoaderBypass.__init__   s
   € ØˆÕó    c                 ót   — 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È	ÐSjÐGkÐlØ#*¸ÀFÐSXÐbfð  t}ñ  -~ð  #Ø")°sÀ6ÐRWÐaeð  swñ  ,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                 ód  — |dk(  r	|dk(  r||fS t        j                  d|«      }d }| j                  )| j                  d   |k(  r| j                  d   }nd | _        |€*t        j                  j                  |d¬«      }||f| _        t        j                  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Ø˜4=Ð ä ×7Ñ7¸ÀÓKˆ	ØˆØ×ÑÐ'Ø×Ñ Ñ" iÒ/Ø×'Ñ'¨Ñ*‘à#'Ô àˆ<Ü—;‘;×.Ñ.¨yÀDÐ.ÓIˆDØ )¨4Ð0ˆDÔä %§¡× DÑ DÀUÈDÐRVÐXfÐhuÓ vÑˆ
IØ˜IÐ&Ð&r
   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   Úclassmethodr$   ÚRETURN_TYPESÚOUTPUT_TOOLTIPSÚFUNCTIONÚCATEGORYÚDESCRIPTIONÚEXPERIMENTALr%   © r
   r   r   r      sH   „ ñò ð ñ	
ó ð	
ð %€LØS€OØ€Hà€Hð D€KØ€Ló'r
   r   c                   ó*   — e Zd Zed„ «       ZdZdZd„ Zy)ÚLoraLoaderBypassModelOnlyc           	      óH   — 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:   s;   € à zÜ,8×,JÑ,JÈ7Ó,SÐ+VØ18ÀcÐRXÐafÐptÑ:uÐ0vñ ð !ð 	!r
   rB   Úload_lora_model_onlyc                 ó4   — | j                  |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È!ÑLÐNÐNr
   N)r3   r4   r5   r7   r$   r8   r:   rC   r>   r
   r   r@   r@   9   s&   „ Øñ!ó ð!ð
 €LØ%€Hó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      sH   ðÛ Û Û ÷0'ñ 0'ôfOÐ 0ô Oð )Ø!:ñÐ ð =Ø!QñÑ r
   