o
    it                     @  s  d dl mZ d dlmZmZ d dlZd dlZd dlmZ er$d dl	m
Z
 d dlZd dl	Zd dlZd dlZG dd dZG dd	 d	ZG d
d dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd deZG dd dZG dd deZG d d! d!ZG d"d# d#ZG d$d% d%ZG d&d' d'ZG d(d) d)Z G d*d+ d+Z!G d,d- d-Z"G d.d/ d/Z#eeeeeeeee!e"e#eeeeeeeeegZ$i Z%i Z&e$D ]Z'e'e%e'j(< e'j)e&e'j(< qdS )0    )annotations)TYPE_CHECKINGUnionN)IterableCLIPc                   @  B   e Zd Zd ZdZedd ZdZdZdZ	dZ
dZ		ddddZd	S )PairConditioningSetPropertieszCond Pair Set Propsc                 C  0   ddddddddfdd	gfd
dddddS )NCONDITIONINGFLOAT      ?              $@{Gz?defaultminmaxstepr   mask bounds)positive_NEWnegative_NEWstrengthset_cond_areaMASKHOOKSTIMESTEPS_RANGEmaskhooks	timestepsrequiredoptional sr)   r)   6/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_hooks.pyINPUT_TYPES      z)PairConditioningSetProperties.INPUT_TYPESTr   r   positivenegativeadvanced/hooks/cond pairset_propertiesNr   floatr   strr#   torch.Tensorr$   comfy.hooks.HookGroupr%   tuplec           
      C  s(   t jj||g|||||d\}}	||	fS N)condsr   r   r#   r$   timesteps_rangecomfyr$   set_conds_props)
selfr   r   r   r   r#   r$   r%   final_positivefinal_negativer)   r)   r,   r4   +   s
   
z,PairConditioningSetProperties.set_propertiesNNN
r   r5   r   r6   r#   r7   r$   r8   r%   r9   __name__
__module____qualname__NodeIdNodeNameclassmethodr-   EXPERIMENTALRETURN_TYPESRETURN_NAMESCATEGORYFUNCTIONr4   r)   r)   r)   r,   r	      s    
r	   c                   @  r   )'PairConditioningSetPropertiesAndCombinezCond Pair Set Props Combinec              
   C  s4   ddddddddddfdd	gfd
dddddS )Nr   r   r   r   r   r   r   r   r   )r1   r2   r   r   r   r   r   r   r    r"   r&   r)   r*   r)   r)   r,   r-   6   s   	z3PairConditioningSetPropertiesAndCombine.INPUT_TYPESTr/   r0   r3   r4   Nr   r5   r   r6   r#   r7   r$   r8   r%   r9   c
              	   C  s.   t jj||g||g|||||	d\}
}|
|fS N)r;   	new_condsr   r   r#   r$   r<   r>   r$   set_conds_props_and_combine)r@   r1   r2   r   r   r   r   r#   r$   r%   rA   rB   r)   r)   r,   r4   N   s
   
z6PairConditioningSetPropertiesAndCombine.set_propertiesrC   rD   rE   r)   r)   r)   r,   rQ   3   s    
rQ   c                   @  >   e Zd Zd ZdZedd ZdZdZdZ	dZ
	ddddZdS )ConditioningSetPropertieszCond Set Propsc                 C  s.   dddddddfdd	gfd
dddddS )Nr   r   r   r   r   r   r   r   r   )cond_NEWr   r   r   r   r    r"   r&   r)   r*   r)   r)   r,   r-   Y   s   z%ConditioningSetProperties.INPUT_TYPESTr   advanced/hooks/cond singler4   Nr   r5   r   r6   r#   r7   r$   r8   r%   r9   c                 C  s"   t jj|g|||||d\}|fS r:   r=   )r@   rX   r   r   r#   r$   r%   
final_condr)   r)   r,   r4   m   s
   
z(ConditioningSetProperties.set_propertiesrC   rD   rF   rG   rH   rI   rJ   rK   r-   rL   rM   rO   rP   r4   r)   r)   r)   r,   rW   V   s    
rW   c                   @  rV   )#ConditioningSetPropertiesAndCombinezCond Set Props Combinec                 C  r
   )Nr   r   r   r   r   r   r   r   r   )condrX   r   r   r   r   r    r"   r&   r)   r*   r)   r)   r,   r-   x   r.   z/ConditioningSetPropertiesAndCombine.INPUT_TYPESTr   rY   r4   Nr   r5   r   r6   r#   r7   r$   r8   r%   r9   c           	   	   C  s&   t jj|g|g|||||d\}|fS rR   rT   )	r@   r]   rX   r   r   r#   r$   r%   rZ   r)   r)   r,   r4      s
   z2ConditioningSetPropertiesAndCombine.set_propertiesrC   rD   r[   r)   r)   r)   r,   r\   u   s    
r\   c                   @  s<   e Zd Zd ZdZedd ZdZdZdZ	dZ
dZd	d
 ZdS )PairConditioningCombinezCond Pair Combinec                 C  s   ddddddiS )Nr'   r   )
positive_A
negative_A
positive_B
negative_Br)   r*   r)   r)   r,   r-      s   z#PairConditioningCombine.INPUT_TYPESTr/   r0   r3   combinec                 C  s$   t jj||g||gd\}}||fS )N)r;   rS   rT   )r@   r_   r`   ra   rb   rA   rB   r)   r)   r,   rc      s   zPairConditioningCombine.combineN)rF   rG   rH   rI   rJ   rK   r-   rL   rM   rN   rO   rP   rc   r)   r)   r)   r,   r^      s    

r^   c                   @  sB   e Zd ZdZdZedd ZdZdZdZ	dZ
d	Z	
ddddZd
S )$PairConditioningSetDefaultAndCombine!PairConditioningSetDefaultCombinezCond Pair Set Default Combinec                 C  s   dddddddidS )Nr   )r1   r2   positive_DEFAULTnegative_DEFAULTr$   r   r&   r)   r*   r)   r)   r,   r-      s   z0PairConditioningSetDefaultAndCombine.INPUT_TYPESTr/   r0   r3   set_default_and_combineNr$   r8   c                 C  s&   t jj||g||g|d\}}||fS N)r;   rS   r$   r>   r$   set_default_conds_and_combine)r@   r1   r2   rf   rg   r$   rA   rB   r)   r)   r,   rh      s   
z<PairConditioningSetDefaultAndCombine.set_default_and_combineNr$   r8   )rF   rG   rH   rI   rJ   rK   r-   rL   rM   rN   rO   rP   rh   r)   r)   r)   r,   rd      s    
rd   c                   @  s>   e Zd ZdZdZedd ZdZdZdZ	dZ
		ddddZd	S ) ConditioningSetDefaultAndCombineConditioningSetDefaultCombinezCond Set Default Combinec                 C  s   dddddidS )Nr   )r]   cond_DEFAULTr$   r   r&   r)   r*   r)   r)   r,   r-      s   z,ConditioningSetDefaultAndCombine.INPUT_TYPESTr   rY   rh   Nr$   r8   c                 C  s   t jj|g|g|d\}|fS ri   rj   )r@   r]   rp   r$   final_conditioningr)   r)   r,   rh      s   z8ConditioningSetDefaultAndCombine.set_default_and_combinerl   rm   )rF   rG   rH   rI   rJ   rK   r-   rL   rM   rO   rP   rh   r)   r)   r)   r,   rn          
rn   c                   @  s<   e Zd Zd ZdZedd ZdZdZdZ	dZ
ddddZdS )SetClipHookszSet CLIP Hooksc                 C  s*   dddddfddddfdddid	S )
Nr   BOOLEANTr   advancedF)clipapply_to_condsschedule_clipr$   r   r&   r)   r*   r)   r)   r,   r-      s   zSetClipHooks.INPUT_TYPESTr   zadvanced/hooks/clipapply_hooksNrw   r   ry   boolrx   r$   r8   c                 C  sf   |d ur0|j dd}|r||_|  |j_||_|js"|jjd  |j|tj	tjj
j |fS )NT)disable_dynamic)cloneapply_hooks_to_condspatcherforced_hooksuse_clip_scheduleset_keyframes_on_hooksregister_all_hook_patchesr>   r$   create_target_dictEnumWeightTargetClip)r@   rw   ry   rx   r$   r)   r)   r,   rz      s   zSetClipHooks.apply_hooksrl   )rw   r   ry   r{   rx   r{   r$   r8   )rF   rG   rH   rI   rJ   rK   r-   rL   rM   rO   rP   rz   r)   r)   r)   r,   rs      s    
rs   c                   @  sF   e Zd Zg dZd ZdZedd ZdZdZ	dZ
dZd	ZdddZdS )ConditioningTimestepsRange)zprompt schedulingztimestep segmentszconditioning phaseszTimesteps Rangec                 C  s*   dddddddfddddddfdiS )Nr'   r   r   r   MbP?r   )start_percentend_percentr)   r*   r)   r)   r,   r-   	  s
   z&ConditioningTimestepsRange.INPUT_TYPEST)r!   r!   r!   )r!   BEFORE_RANGEAFTER_RANGEzadvanced/hookscreate_ranger   r5   r   c                 C  s   ||fd|f|dffS )Nr   r   r)   )r@   r   r   r)   r)   r,   r     s   z'ConditioningTimestepsRange.create_rangeN)r   r5   r   r5   )rF   rG   rH   SEARCH_ALIASESrI   rJ   rK   r-   rL   rM   rN   rO   rP   r   r)   r)   r)   r,   r     s    
r   c                   @  sD   e Zd Zd ZdZdd Zedd ZdZdZ	dZ
d	ZddddZd
S )CreateHookLorazCreate Hook LoRAc                 C  
   d | _ d S rl   )loaded_lorar@   r)   r)   r,   __init__$  s   
zCreateHookLora.__init__c                 C  :   t dfddddddfddddddfdd	d
idS )Nlorasr   r         4      4@r   r   )	lora_namestrength_modelstrength_clip
prev_hooksr   r&   folder_pathsget_filename_listr*   r)   r)   r,   r-   '     
zCreateHookLora.INPUT_TYPESTr   advanced/hooks/createcreate_hookNr   r6   r   r5   r   r   r8   c           	      C  s   |d u r	t j }|  |dkr|dkr|fS td|}d }| jd ur9| jd |kr2| jd }n| j}d | _~|d u rJt jj|dd}||f| _t jj	|||d}|
|fS )Nr   r      T)	safe_load)lorar   r   )r>   r$   	HookGroupr}   r   get_full_pathr   utilsload_torch_filecreate_hook_loraclone_and_combine)	r@   r   r   r   r   	lora_pathr   tempr$   r)   r)   r,   r   9  s$   


zCreateHookLora.create_hookrl   )r   r6   r   r5   r   r5   r   r8   rF   rG   rH   rI   rJ   r   rK   r-   rL   rM   rO   rP   r   r)   r)   r)   r,   r   !  s    
r   c                   @  s<   e Zd Zd ZdZedd ZdZdZdZ	dZ
ddddZdS )CreateHookLoraModelOnlyzCreate Hook LoRA (MO)c                 C  *   t dfddddddfdd	d
idS )Nr   r   r   r   r   r   r   )r   r   r   r   r&   r   r*   r)   r)   r,   r-   U     
z#CreateHookLoraModelOnly.INPUT_TYPESTr   r   create_hook_model_onlyNr   r6   r   r5   r   r8   c                 C     | j ||d|dS )Nr   )r   r   r   r   r   )r@   r   r   r   r)   r)   r,   r   f  s   z.CreateHookLoraModelOnly.create_hook_model_onlyrl   )r   r6   r   r5   r   r8   rF   rG   rH   rI   rJ   rK   r-   rL   rM   rO   rP   r   r)   r)   r)   r,   r   R  s    
r   c                   @  sF   e Zd Zd ZdZdd Zedd ZdZdZ	dZ
d	Z	
ddddZd
S )CreateHookModelAsLorazCreate Hook Model as LoRAc                 C  r   rl   )loaded_weightsr   r)   r)   r,   r   m  s   
zCreateHookModelAsLora.__init__c                 C  r   )Ncheckpointsr   r   r   r   r   r   )	ckpt_namer   r   r   r   r&   r   r*   r)   r)   r,   r-   r  r   z!CreateHookModelAsLora.INPUT_TYPESTr   r   r   Nr   r6   r   r5   r   r   r8   c                 C  s   |d u r	t j }|  td|}d }d }| jd ur5| jd |kr.| jd }| jd }n| j}d | _~|d u ret jj|ddt	dd}	t j
|	d }t j
|	d rZ|	d jn|	d }|||f| _t jj||||d}
||
fS )	Nr   r   r      T
embeddings)
output_vaeoutput_clipembedding_directory)weights_modelweights_clipr   r   )r>   r$   r   r}   r   r   r   sdload_checkpoint_guess_configget_folder_pathsget_patch_weights_from_modelr   create_hook_model_as_lorar   )r@   r   r   r   r   	ckpt_pathr   r   r   outr$   r)   r)   r,   r     s,   


"
z!CreateHookModelAsLora.create_hookrl   )r   r6   r   r5   r   r5   r   r8   r   r)   r)   r)   r,   r   i  s    
r   c                   @  s>   e Zd Zd ZdZedd ZdZdZdZ	dZ
	ddddZdS )CreateHookModelAsLoraModelOnlyzCreate Hook Model as LoRA (MO)c                 C  r   )Nr   r   r   r   r   r   r   )r   r   r   r   r&   r   r*   r)   r)   r,   r-     r   z*CreateHookModelAsLoraModelOnly.INPUT_TYPESTr   r   r   Nr   r6   r   r5   r   r8   c                 C  r   )Nr   )r   r   r   r   r   )r@   r   r   r   r)   r)   r,   r     s   z5CreateHookModelAsLoraModelOnly.create_hook_model_onlyrl   )r   r6   r   r5   r   r8   r   r)   r)   r)   r,   r     rr   r   c                   @  s<   e Zd Zd ZdZedd ZdZdZdZ	dZ
ddddZdS )SetHookKeyframeszSet Hook Keyframesc                 C  s   ddiddidS )Nr$   r   hook_kfHOOK_KEYFRAMESr&   r)   r*   r)   r)   r,   r-     s
   zSetHookKeyframes.INPUT_TYPESTr   advanced/hooks/schedulingset_hook_keyframesNr$   r8   r   comfy.hooks.HookKeyframeGroupc                 C  s"   |d ur|  }|j|d |fS )N)r   )r}   r   )r@   r$   r   r)   r)   r,   r     s   z#SetHookKeyframes.set_hook_keyframesrl   )r$   r8   r   r   )rF   rG   rH   rI   rJ   rK   r-   rL   rM   rO   rP   r   r)   r)   r)   r,   r     s    

r   c                   @  sH   e Zd Zg dZd ZdZedd ZdZdZ	dZ
dZd	ZddddZd
S )CreateHookKeyframe)zhook schedulingzstrength animationz
timed hookzCreate Hook Keyframec                 C  s0   ddddddfddddddfd	d
didS )Nr   r   r   r   r   r   r   r   )strength_multr   prev_hook_kfr   r&   r)   r*   r)   r)   r,   r-     s   zCreateHookKeyframe.INPUT_TYPESTr   HOOK_KFr   create_hook_keyframeNr   r5   r   r   r   c                 C  s:   |d u r	t j }| }t jj||d}|| |fS )N)r   r   )r>   r$   HookKeyframeGroupr}   HookKeyframeadd)r@   r   r   r   keyframer)   r)   r,   r     s   

z'CreateHookKeyframe.create_hook_keyframerl   )r   r5   r   r5   r   r   )rF   rG   rH   r   rI   rJ   rK   r-   rL   rM   rN   rO   rP   r   r)   r)   r)   r,   r     s    
r   c                   @  sJ   e Zd Zg dZd ZdZedd ZdZdZ	dZ
dZd	Z	ddddZdS )CreateHookKeyframesInterpolated)zease hook strengthzsmooth hook transitionzinterpolate keyframeszCreate Hook Keyframes Interp.c                 C  sv   ddddddfddddddft jjjfddddddfddddddfddd	d
ddfddddfdddidS )Nr   r   r   r   r   r   INT   r   d   r   rt   FTru   )strength_startstrength_endinterpolationr   r   keyframes_countprint_keyframesr   r   r&   )r>   r$   InterpolationMethod_LISTr*   r)   r)   r,   r-     s   

z+CreateHookKeyframesInterpolated.INPUT_TYPESTr   r   r   create_hook_keyframesFNr   r5   r   r   r6   r   r   r   intr   r   c	                 C  s   |d u r	t j }| }t jjj|||t jjjd}	t jjj||||d}
d}t|	|
D ]%\}}d}|r9d}d}|t jj	|||d |rRt
d| d|  q-|fS )	Nnum_fromnum_tolengthmethodTr   r   Fr   r   guarantee_stepsHook Keyframe - start_percent: = )r>   r$   r   r}   r   get_weightsLINEARzipr   r   logginginfo)r@   r   r   r   r   r   r   r   r   percents	strengthsis_firstpercentr   r   r)   r)   r,   r     s$   
z5CreateHookKeyframesInterpolated.create_hook_keyframes)FN)r   r5   r   r5   r   r6   r   r5   r   r5   r   r   r   r   rF   rG   rH   r   rI   rJ   rK   r-   rL   rM   rN   rO   rP   r   r)   r)   r)   r,   r     s    
r   c                   @  sJ   e Zd ZddgZd ZdZedd ZdZdZ	dZ
d	Zd
Z	ddddZdS )CreateHookKeyframesFromFloatszbatch keyframeszstrength list to keyframesz!Create Hook Keyframes From Floatsc                 C  sL   ddddddfdddddd	fdddddd	fd
dddfdddidS )NFLOATSr   T)r   r   r   
forceInputr   r   r   r   rt   Fru   )floats_strengthr   r   r   r   r   r&   r)   r*   r)   r)   r,   r-   )  s   z)CreateHookKeyframesFromFloats.INPUT_TYPESTr   r   r   r   NFr   Union[float, list[float]]r   r5   r   r   r   c                 C  s   |d u r	t j }| }t|ttfv rt|g}nt|tr!nt	dt|j
 dt jjj||t|t jjjd}d}t||D ]%\}}	d}
|rOd}
d}|t jj|	||
d |rhtd	| d
|	  qC|fS )NzDfloats_strength must be either an iterable input or a float, but was.r   Tr   r   Fr   r   r   )r>   r$   r   r}   typer5   r   
isinstancer   	Exception__repr__r   r   lenr   r   r   r   r   r   )r@   r   r   r   r   r   r   r   r   r   r   r)   r)   r,   r   =  s,   

z3CreateHookKeyframesFromFloats.create_hook_keyframes)NF)r   r   r   r5   r   r5   r   r   r   r)   r)   r)   r,   r   %  s    
r   c                   @  s2   e Zd Zedd ZdZdZdZdZdd	d
Z	dS )SetModelHooksOnCondc                 C  s   ddddiS )Nr'   r   r   )conditioningr$   r)   r*   r)   r)   r,   r-   [  s
   zSetModelHooksOnCond.INPUT_TYPESTr   zadvanced/hooks/manualattach_hookr$   r8   c                 C  s   t j||fS rl   )r>   r$   set_hooks_for_conditioning)r@   r  r$   r)   r)   r,   r  i  s   zSetModelHooksOnCond.attach_hookNrm   )
rF   rG   rH   rK   r-   rL   rM   rO   rP   r  r)   r)   r)   r,   r  Z  s    
r  c                   @  sF   e Zd ZdgZdZdZedd ZdZdZ	dZ
d	Z	
	
ddddZd
S )CombineHookszmerge hooksCombineHooks2zCombine Hooks [2]c                 C  s   i ddddS )Nr   )hooks_Ahooks_Br&   r)   r*   r)   r)   r,   r-   t  s
   zCombineHooks.INPUT_TYPESTr   advanced/hooks/combinecombine_hooksNr  r8   r  c                 C  s   ||g}t jj|fS rl   r>   r$   r   combine_all_hooks)r@   r  r  
candidatesr)   r)   r,   r    s   zCombineHooks.combine_hooks)NN)r  r8   r  r8   )rF   rG   rH   r   rI   rJ   rK   r-   rL   rM   rO   rP   r  r)   r)   r)   r,   r	  p  s    

r	  c                   @  sD   e Zd ZdZdZedd ZdZdZdZ	dZ
								ddddZd	S )CombineHooksFourCombineHooks4zCombine Hooks [4]c                 C  s   i ddddddS )Nr   )r  r  hooks_Chooks_Dr&   r)   r*   r)   r)   r,   r-     s   zCombineHooksFour.INPUT_TYPESTr   r  r  Nr  r8   r  r  r  c                 C  s   ||||g}t jj|fS rl   r  )r@   r  r  r  r  r  r)   r)   r,   r    s   zCombineHooksFour.combine_hooks)NNNN)r  r8   r  r8   r  r8   r  r8   rF   rG   rH   rI   rJ   rK   r-   rL   rM   rO   rP   r  r)   r)   r)   r,   r    s    
r  c                   @  sL   e Zd ZdZdZedd ZdZdZdZ	dZ
																ddddZd	S )CombineHooksEightCombineHooks8zCombine Hooks [8]c              
   C  s   i ddddddddddS )Nr   )r  r  r  r  hooks_Ehooks_Fhooks_Ghooks_Hr&   r)   r*   r)   r)   r,   r-     s   zCombineHooksEight.INPUT_TYPESTr   r  r  Nr  r8   r  r  r  r  r  r  r  c	           
      C  s$   ||||||||g}	t jj|	fS rl   r  )
r@   r  r  r  r  r  r  r  r  r  r)   r)   r,   r    s   	zCombineHooksEight.combine_hooks)NNNNNNNN)r  r8   r  r8   r  r8   r  r8   r  r8   r  r8   r  r8   r  r8   r  r)   r)   r)   r,   r    s$    
r  )*
__future__r   typingr   r   r   torchcollections.abcr   comfy.sdr   comfy.hooksr>   comfy.utilsr   r	   rQ   rW   r\   r^   rd   rn   rs   r   r   r   r   r   r   r   r   r   r  r	  r  r  	node_listNODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSnoderI   rJ   r)   r)   r)   r,   <module>   sv    !# !1705)
