
    +j                         d dl mZ d dlZd dlmZmZ  G d dej                  Z G d dej                  Z G d d	e          Z	d
e	fdZ
dS )    )overrideN)ComfyExtensionioc                       e Zd Zed             Zed             Zed             Zed             Zed             Z	ed             Z
dS )LatentRebatchc                     t          j        ddddt           j                            d          t           j                            dddd	          gt           j                            d
          g          S )NRebatchLatentszRebatch Latentszmodel/latent/batchTlatents
batch_size      defaultminmaxis_output_listnode_iddisplay_namecategoryis_input_listinputsoutputs)r   SchemaLatentInputIntOutputclss    :/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_rebatch.pydefine_schemazLatentRebatch.define_schema   ss    y$*)		**\1!FF
 	   55
 
 
 	
    c           	      *   | |         d         }|j         }d| |         v r| |         d         n1t          j        |d         d|d         dz  |d         dz  fd	          }|j         d
         |d
         dz  k    s|j         d         |d         k    rht          j        j                            |                    d
d|j         d         |j         d
         f          |d         dz  |d
         dz  fd           |j         d         |j         d         k     r@|                    |d         dz
  |j         d         z  dz   ddd          d|d                  }d| |         v r| |         d         }n!fdt          |d                   D             }|||fS )z*prepare a batch out of the list of latentssamples
noise_maskr   r            cpu)devicebilinear)sizemodeNbatch_indexc                     g | ]}|z   S  r4   ).0xoffsets     r"   
<listcomp>z+LatentRebatch.get_batch.<locals>.<listcomp>%   s    <<<q!F(<<<r$   )	shapetorchonesnn
functionalinterpolatereshaperepeatrange)r
   list_indr7   r&   r9   mask
batch_indss     `    r"   	get_batchzLatentRebatch.get_batch   s    (#I.2>'(BS2S2Swx ..Y^Ycejklemoprwxyrz{|r|  D  EF  G  HI  I  eJ  SX  ZY  ZY  ZY:b>U2Y]**djnb	.I.IH++DLL"aBQUQ[\^Q_9`,a,ainoqirstitv{|~v  AB  wB  iC  JT+  U  U  U:a=7=+++;;a1A>BAq!LLYeTUhYWDGH--- *=9JJ<<<<E%(OO<<<Jj((r$   c                     g }t          |          D ](}|                    | ||z  |dz   |z                      )||z  t          |           k     r|| ||z  d         fS |dfS )zQdivides an indexable object into num slices of length batch_size, and a remainderr   N)rA   appendlen)	indexablenumr   slicesis        r"   
get_sliceszLatentRebatch.get_slices(   s     s 	D 	DAMM)AjL!A#z1A$ABCCCCc)nn,,9S:%5%6%67774<r$   c                 P    fd| D             }t          t          |           S )Nc                 H    g | ]}t                               |          S r4   )r   rM   )r5   r6   r   rJ   s     r"   r8   z-LatentRebatch.slice_batch.<locals>.<listcomp>5   s+    NNN1-**1c:>>NNNr$   )listzip)batchrJ   r   results    `` r"   slice_batchzLatentRebatch.slice_batch3   s2    NNNNNNNNCL!!!r$   c                 N    | d         |S d t          | |          D             }|S )Nr   c                 r    g | ]4\  }}t          j        |          rt          j        ||f          n||z   5S r4   )r:   	is_tensorcat)r5   b1b2s      r"   r8   z+LatentRebatch.cat_batch.<locals>.<listcomp><   sC    lllfbRT)<)<I%)RH%%%"r'lllr$   )rQ   )batch1batch2rS   s      r"   	cat_batchzLatentRebatch.cat_batch8   s6    !9MllX[\bdjXkXklllr$   c                    |d         }g }d}d}t          t          |                    D ]}|                     |||          }|t          |d                   z  }|d         |}n|d         j        d         |d         j        d         k    s(|d         j        d         |d         j        d         k    rZ|                     |d|          \  }}	|                    |d         d         |d         d         |d         d         d           |}n|                     ||          }|d         j        d         |k    r|d         j        d         |z  }
|                     ||
|          \  }}t          |
          D ]?}|                    |d         |         |d         |         |d         |         d           @|}|d         W|                     |d|          \  }}	|                    |d         d         |d         d         |d         d         d           |D ]#}|d                                         d	k    r|d= $t          j	        |          S )
Nr   )NNNr(   r-   r.   r   )r&   r'   r2   r'   g      ?)
rA   rH   rE   r9   rT   rG   r]   meanr   
NodeOutput)r!   r
   r   output_listcurrent_batch	processedrL   
next_batchsliced_rJ   	remainderss                r"   executezLatentRebatch.execute?   s   ]
*	s7||$$ 	* 	*A w9==JZ]+++IQ' *A$R(M!,<,B2,FFF*UV-J]^`Jaersteue{|~eJJOOM1jII	""vay|6RS9UV<hnophqrsht#u#uvvv * !$mZ H H Q%a(:55#A&,Q/:=$'OOM3
$S$S!	s { {A&&6!9Q<vVWyYZ|lrstluvwlx'y'yzzzz ) 'q*EEIFA6!9Q<vayQR|djkldmnodpqqrrr  	$ 	$A##%%,,lO}[)))r$   N)__name__
__module____qualname__classmethodr#   staticmethodrE   rM   rT   r]   ri   r4   r$   r"   r   r      s        
 
 [
 ) ) \)     \  " " \"   \ ,* ,* [,* ,* ,*r$   r   c                   :    e Zd Zed             Zed             ZdS )ImageRebatchc                     t          j        ddddt           j                            d          t           j                            dddd	          gt           j                            d
          g          S )NRebatchImageszRebatch Imageszimage/batchTimagesr   r   r   r   r   r   )r   r   Imager   r   r   r    s    r"   r#   zImageRebatch.define_schemao   sp    y#)"x((\1!FF
 t44
 
 
 	
r$   c           	      p   |d         }g }g }|D ]?}t          |j        d                   D ]"}|                    |||dz                       #@t          dt          |          |          D ]6}|                    t	          j        ||||z            d                     7t          j        |          S )Nr   r   )dim)rA   r9   rG   rH   r:   rX   r   r`   )r!   rs   r   ra   
all_imagesimgrL   s          r"   ri   zImageRebatch.execute   s    ]

 	. 	.C39Q<(( . .!!#a!e*----. q#j//:66 	M 	MAuyAa
lN)CKKKLLLL}[)))r$   N)rj   rk   rl   rm   r#   ri   r4   r$   r"   rp   rp   n   sH        
 
 [
 * * [* * *r$   rp   c                   L    e Zd Zedeeej                          fd            ZdS )RebatchExtensionreturnc                 "   K   t           t          gS N)r   rp   )selfs    r"   get_node_listzRebatchExtension.get_node_list   s       
 	
r$   N)	rj   rk   rl   r   rP   typer   	ComfyNoder   r4   r$   r"   rz   rz      sE        
T$r|*<%= 
 
 
 X
 
 
r$   rz   r{   c                  "   K   t                      S r}   )rz   r4   r$   r"   comfy_entrypointr      s      r$   )typing_extensionsr   r:   comfy_api.latestr   r   r   r   rp   rz   r   r4   r$   r"   <module>r      s    & & & & & &  / / / / / / / /e* e* e* e* e*BL e* e* e*N* * * * *2< * * *B
 
 
 
 
~ 
 
 
 0      r$   