
    
3j                         S SK rS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	 S SK
Jr  S SKJrJr  SrSSKJr  S rS	 rS
 r\" SS9 " S S5      5       rS r\" SS9 " S S5      5       rg! \ a    Sr NCf = f)    N)hadamard_transform)"patch_comfyui_native_avtransformer patch_comfyui_native_transformerTF   )
comfy_nodec                 H    [        U  Vs/ s H  o"U;   PM	     sn5      $ s  snf N)any)
check_listnamexs      F/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-LTXVideo/q8_nodes.pylist_in_namer      s!    :.:aT	:.//.s   c                  0    [         (       d  [        S5      eg )NzQ8 kernels are not available. To use this feature install the q8_kernels package from here:.https://github.com/Lightricks/LTX-Video-Q8-Kernels)Q8_AVAILABLEImportError     r   check_q8_availabler      s    <A
 	
 r   c                      [        S [        R                  R                  S5      R	                  S5      S S  5       5      n U S:  $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr	   )int).0r   s     r   	<genexpr>#check_deprecated.<locals>.<genexpr>'   s      O1AOs   
q8_kernels.   )r   r      )tuple	importlibmetadataversionsplit)
q8_versions    r   check_deprecatedr&   &   sI     !**22<@FFsKBQO J ""r   
LTXQ8Patch)r   c                   F    \ rS rSr\S 5       rSrSrSrSr	SSS	S
.r
S rSrg)LTXVQ8Patch-   c           
      L    SSSSSS.4/ SQSS	04SS
SS.4SS
SS.4SS
SS.4S.0$ )NrequiredMODELBOOLEANFzUse FP8 attention.)defaulttooltip)0.9.8ltxv2	full_bf16customr0   r2   TzQuantize Self Attention LayerzQuantize Cross Attention LayerzQuantize Feed Forward Layer)modeluse_fp8_attentionquantization_presetquantize_self_attnquantize_cross_attnquantize_ffnr   ss    r   INPUT_TYPESLTXVQ8Patch.INPUT_TYPES/   su     # %2FG&
 >((
  $1PQ'
  $1QR(
  $1NO!%
 	
r   r-   patchlightricks/LTXVzLTXV Q8 Patcher)TTT)TFT)FFF)r2   r3   r4   c                 8   [        5         UR                  5       nSnUR                  U5      n	U	R                  R                  S:H  n
U
(       a  [
        nO[        n[        5       (       a%  [        R                  " S5        SnSnU" XSX5        Op[        R                  R                  UXEU45      u  pEn[        U	SS 5      b!  XEU4[        U	S5      :w  a  [        U	S5      u  pEnU" U	USUUU5        [        U	SXEU45        [        U	SS5        [        U	S	U5        U4$ )
Ndiffusion_model
LTXAVModelz*This node is deprecated soon. Use new one.Fzblockwise-fp8Tquantization_configis_q8_patchedr7   )r   cloneget_model_object	__class____name__r   r   r&   logginginfor)   PRESETSgetgetattrsetattr)selfr6   r7   r8   r9   r:   r;   mtransformer_keytransformeris_avpatcherquant_audio_path
quant_types                 r   r@   LTXVQ8Patch.patchU   sE    	KKM+((9%%..,>8G6GLLEF$(JKD*W ##''''lK B\ {$94@L&\Jg!6O  MT#%:MI&\ !"# %#,G
 	_d302CDtr   r   N)rJ   
__module____qualname____firstlineno__classmethodr>   RETURN_TYPESFUNCTIONCATEGORYTITLErM   r@   __static_attributes__r   r   r   r)   r)   -   s?    
 
6 LH HE#$*G6r   r)   c                      U R                  US9$ )N)dtype)to)r   ts     r   idendity_quant_fnrg      s    44a4=r   LTXVQ8LoraModelLoaderc                   B    \ rS rSrS r\S 5       rSrSrSr	S r
S rS	rg
)rh      c                     S U l         g r	   loaded_lora)rQ   s    r   __init__LTXVQ8LoraModelLoader.__init__   s
    r   c           	      J    SS[         R                  " S5      4SSSSSS	.4S
.0$ )Nr,   r-   lorasFLOATg      ?g      Yg      Y@g{Gz?)r0   minmaxstep)r6   	lora_namestrength_model)folder_pathsget_filename_listr<   s    r   r>   !LTXVQ8LoraModelLoader.INPUT_TYPES   s>     #*<<WEG #F5$O#	
 		
r   r-   rA   load_lora_model_onlyc                    [         nUR                  S5      n[        USS5      nU(       a  [        (       d  [	        S5      eUS:X  a  U$ [        US5      u  pxn	/ n
U(       d  U
S/-  n
U(       d  U
S/-  n
U	(       d  U
S	/-  n
[
        R                  " S
U5      n[        R                  R                  USS9n0 nU H  nX   R                  nX   R                  S:X  ad  SU;   aV  [        X5      (       dF  U" X   R                  S[        R                  S9[        R                  S9R                  U5      X'   M  X   X'   M  X   X'   M     X4U l        [        R"                  R%                  US XS5      u  nnU$ )NrC   rF   FzrLTXV Q8 Patcher is not applied to the model. Please use LTXQ8Patch node before loading lora or install q8_kernels.r   rE   attn1attn2ffrq   T)	safe_load   lora_Acuda)devicerd   )out_type)r   rH   rO   r   
ValueErrorrx   get_full_path_or_raisecomfyutilsload_torch_filer   ndimr   re   torchbfloat16rm   sdload_lora_for_models)rQ   r6   rv   rw   quant_fnrT   is_patched_transformerr9   r:   r;   	skip_list	lora_pathloranew_lorakr   
model_lora_s                     r   	load_loraLTXVQ8LoraModelLoader.load_lora   s   %,,->?!(ou!M%\\ E  QL@G.A
= 	!'"I"'"I$I 77K	{{**9*EAW^^Fw||q q=i)C)C"*

&
G!&# bj K
 #''HK"g  &05541

A r   c                 (    U R                  XU5      4$ r	   )r   )rQ   r6   rv   rw   s       r   r{   *LTXVQ8LoraModelLoader.load_lora_model_only   s    u@BBr   rl   N)rJ   rZ   r[   r\   rn   r]   r>   r^   r`   r_   r   r{   rb   r   r   r   rh   rh      s8      

 

 L H%H*XCr   )importlib.metadatar!   rK   r   comfy.model_detectioncomfy.model_managementcomfy.model_patchercomfy.utilsrx   r   q8_kernels.functional.opsr   (q8_kernels.integration.patch_transformerr   r   r   r   nodes_registryr   r   r   r&   r)   rg   rh   r   r   r   <module>r      s            	<
 L '0
# ] ] ]@ ()BC BC *BC  Ls   A/ /A:9A: