
    3j                         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 SK	rS SK
r
S SKr " S S\R                  5      r " S S\R                  5      r " S S	\R                  5      r " S
 S\5      rS\4S jrg)    N)override)ComfyExtensionioc                   T    \ rS rSr\S 5       r\SS\R                  4S jj5       rSr	g)TextEncodeQwenImageEdit
   c                 V   [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSS9[         R
                  R                  SSS9[         R                  R                  S	SS9/[         R                  R                  5       /S
9$ )Nr   model/conditioning/qwen imageclippromptT	multilinedynamic_promptsvaeoptionalimagenode_idcategoryinputsoutputs	r   SchemaClipInputStringVaeImageConditioningOutputclss    7/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_qwen.pydefine_schema%TextEncodeQwenImageEdit.define_schema   s    yy-4f%		D$OUT2w6	 &&(
 	
    Nreturnc                    S nUc  / nOUR                  SS5      n[        S5      n[        R                  " XR                  S   UR                  S   -  -  5      n	[        UR                  S   U	-  5      n
[        UR                  S   U	-  5      n[        R                  R                  XzUSS5      nUR                  SS5      nUS S 2S S 2S S 2S S24   /nUb   UR                  US S 2S S 2S S 2S S24   5      nUR                  X&S9nUR                  U5      nUb  [        R                  " US	U/0S
S9n[        R                  " U5      $ )N            areadisabled)imagesreference_latentsTappend)movedimintmathsqrtshaperoundcomfyutilscommon_upscaleencodetokenizeencode_from_tokens_schedulednode_helpersconditioning_set_valuesr   
NodeOutput)r#   r   r   r   r   
ref_latentr1   samplestotalscale_bywidthheightstokensconditionings                  r$   executeTextEncodeQwenImageEdit.execute   s>   
=FmmB*G$Eyy--*:W]]1=M*M!NOH'--*X56E7==+h67F**766:VAIIa$EAq!RaRK()F ZZaArrk(:;
v588@!'??ObeodpNqz~L}}\**r'    )NN
__name__
__module____qualname____firstlineno__classmethodr%   r   rC   rM   __static_attributes__rO   r'   r$   r   r   
   s3    
 
 +BMM + +r'   r   c                   T    \ rS rSr\S 5       r\SS\R                  4S jj5       rSr	g)TextEncodeQwenImageEditPlus5   c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSS9[         R
                  R                  SSS9[         R                  R                  S	SS9[         R                  R                  S
SS9[         R                  R                  SSS9/[         R                  R                  5       /S9$ )NrX   r
   r   r   Tr   r   r   image1image2image3r   r   r"   s    r$   r%   )TextEncodeQwenImageEditPlus.define_schema6   s    yy14f%		D$OUT2x$7x$7x$7 &&(
 	
r'   Nr(   c                    / nXEU/n/ n	Sn
Sn[        U5       GH  u  pUc  M  UR                  SS5      n[        S5      n[        R                  " XR
                  S   UR
                  S   -  -  5      n[        UR
                  S   U-  5      n[        UR
                  S   U-  5      n[        R                  R                  UUUSS	5      nU	R                  UR                  SS5      5        Ub  [        S
5      n[        R                  " XR
                  S   UR
                  S   -  -  5      n[        UR
                  S   U-  S-  5      S-  n[        UR
                  S   U-  S-  5      S-  n[        R                  R                  UUUSS	5      nUR                  UR                  UR                  SS5      S S 2S S 2S S 2S S24   5      5        USR                  US-   5      -  nGM     UR                  X-   XS9nUR                  U5      n[        U5      S:  a  [         R"                  " USU0SS9n[$        R&                  " U5      $ )Na  <|im_start|>system
Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>
<|im_start|>user
{}<|im_end|>
<|im_start|>assistant
 r*   r+   i @ r-   r.   r/   r0   r,   g       @   z7Picture {}: <|vision_start|><|image_pad|><|vision_end|>)r1   llama_templater   r2   Tr3   )	enumerater5   r6   r7   r8   r9   r:   r;   r<   r=   r4   r>   formatr?   r@   lenrA   rB   r   rC   )r#   r   r   r   r[   r\   r]   ref_latentsr1   	images_vlrb   image_promptir   rE   rF   rG   rH   rI   rJ   rK   rL   s                         r$   rM   #TextEncodeQwenImageEditPlus.executeH   s(   &)	 c!&)HA --A.I99UmmA.>qAQ.Q%RSgmmA.9:w}}Q/(:;KK..wvvzZ  1b!12?,E#yy--2BW]]STEU2U)VWH!'--"2X"="CDqHE"7==#3h#>#DEIF227E66S]^A&&szz!))Ar2B1aBQB;2O'PQ Y ` `abefaf gg) *, |4Yf88@{a'??ObdoNpy}~L}}\**r'   rO   )NNNNrP   rO   r'   r$   rX   rX   5   s6    
 
" !+WYWdWd !+ !+r'   rX   c                   T    \ rS rSr\S 5       r\SS\R                  4S jj5       rSr	g) EmptyQwenImageLayeredLatentImagem   c                    [         R                  " SSS[         R                  R                  SSS[        R
                  SS9[         R                  R                  SSS[        R
                  SS9[         R                  R                  S	S
S[        R
                  SS9[         R                  R                  SSSSS9/[         R                  R                  5       /S9$ )Nrl   zEmpty Qwen Image Layered Latentzmodel/latent/qwenrH   i     )defaultminmaxsteprI   layersr-   r   r+   
batch_sizei   )rp   rq   rr   )r   display_namer   r   r   )r   r   Intr   nodesMAX_RESOLUTIONLatentr!   r"   s    r$   r%   .EmptyQwenImageLayeredLatentImage.define_scheman   s    yy6:(Wcru?S?SZ\]Xs@T@T[]^XqaU=Q=QXYZ\1!F	 		  "
 	
r'   r(   c                     [         R                  " USUS-   US-  US-  /[        R                  R	                  5       S9n[
        R                  " SU05      $ )Nro   r+   ra   )devicerE   )torchzerosr;   model_managementintermediate_devicer   rC   )r#   rH   rI   rt   ru   latents         r$   rM   (EmptyQwenImageLayeredLatentImage.execute   s]    j"fqj&A+uPQzR[`[q[q  \F  \F  \H  I}}i011r'   rO   N)r+   rP   rO   r'   r$   rl   rl   m   s3    
 
  2R]] 2 2r'   rl   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)QwenExtension   r(   c                 ,   #    [         [        [        /$ 7fN)r   rX   rl   )selfs    r$   get_node_listQwenExtension.get_node_list   s      $',
 	
s   rO   N)rQ   rR   rS   rT   r   listtyper   	ComfyNoder   rV   rO   r'   r$   r   r      s)    
T$r||*<%= 
 
r'   r   r(   c                     #    [        5       $ 7fr   )r   rO   r'   r$   comfy_entrypointr      s     ?s   )rA   comfy.utilsr;   r7   typing_extensionsr   comfy_api.latestr   r   comfy.model_managementr~   rx   r   r   rX   rl   r   r   rO   r'   r$   <module>r      sg       & /   (+bll (+V5+",, 5+p2r|| 20
N 
 r'   