
    +j                         S SK Jr  S SKrS SKJrJr   " S S\R                  5      r " S S\R                  5      r " S S	\5      r	S
\	4S jr
g)    )overrideN)ComfyExtensionioc                   t    \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       rSrg	)
LatentRebatch   c                     [         R                  " SSSS[         R                  R                  S5      [         R                  R                  SSSSS	9/[         R                  R                  SS
9/S9$ )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_schemaLatentRebatch.define_schema   sh    yy$*)			*\1!F
 		   5
 	
    c           	         X   S   nUR                   nSX   ;   a  X   S   O'[        R                  " US   SUS   S-  US   S-  4SS	9nUR                   S
   US
   S-  :w  d  UR                   S   US   :w  ad  [        R                  R                  R                  UR                  S
SUR                   S   UR                   S
   45      US   S-  US
   S-  4SS9  UR                   S   UR                   S   :  a3  UR                  US   S-
  UR                   S   -  S-   SSS5      SUS    nSX   ;   a  X   S   nO [        US   5       Vs/ s H  owU-   PM	     nnX5U4$ s  snf )z*prepare a batch out of the list of latentssamples
noise_maskr   r            cpu)devicebilinear)sizemodeNbatch_index)	shapetorchonesnn
functionalinterpolatereshaperepeatrange)r   list_indoffsetr(   r5   mask
batch_indsxs           r#   	get_batchLatentRebatch.get_batch   s    #I.2>'BS2Sw .Y^YcYcejklemoprwxyrz{|r|  D  EF  G  HI  I  eJ  SX  ZY::b>U2Y]*djjnb	.IHH++DLL"aBQUQ[Q[\^Q_9`,ainoqirstitv{|~v  AB  wB  iC  JT+  U::a=7==++;;a1A>BAq!LYeTUhWDG-- *=9J,1%(O<OqF(OJ<j(( =s   E%c                     / n[        U5       H  nUR                  XU-  US-   U-   5        M!     X-  [        U 5      :  a  X0X-  S 4$ US4$ )zQdivides an indexable object into num slices of length batch_size, and a remainderr   N)r=   appendlen)	indexablenumr   slicesis        r#   
get_slicesLatentRebatch.get_slices(   sb     sAMM)jL!A#z1ABC c)n,S%5%67774<r&   c                 z    U  Vs/ s H  n[         R                  X1U5      PM     nn[        [        U6 5      $ s  snf N)r   rL   listzip)batchrI   r   rB   results        r#   slice_batchLatentRebatch.slice_batch3   s8    HMN1-**1:>NCL!! Os    8c                     U S   c  U$ [        X5       VVs/ s H;  u  p#[        R                  " U5      (       a  [        R                  " X#45      OX#-   PM=     nnnU$ s  snnf )Nr   )rQ   r6   	is_tensorcat)batch1batch2b1b2rS   s        r#   	cat_batchLatentRebatch.cat_batch8   sZ    !9MX[\bXklXkfb)<)<%))RH%"'IXkl ms   AAc                    US   n/ nSnSn[        [        U5      5       GHH  nU R                  XU5      nU[        US   5      -  nUS   c  UnOUS   R                  S   US   R                  S   :w  d&  US   R                  S   US   R                  S   :w  a?  U R	                  USU5      u  pUR                  US   S   US   S   US   S   S.5        UnOU R                  XG5      nUS   R                  S   U:  d  M  US   R                  S   U-  n
U R	                  XJU5      u  p[        U
5       H*  nUR                  US   U   US   U   US   U   S.5        M,     UnGMK     US   b<  U R	                  USU5      u  pUR                  US   S   US   S   US   S   S.5        U H  nUS   R                  5       S	:X  d  M  US	 M!     [        R                  " U5      $ )
Nr   )NNNr*   r/   r0   r   )r(   r)   r4   r)   g      ?)
r=   rG   rC   r5   rT   rF   r]   meanr   
NodeOutput)r"   r   r   output_listcurrent_batch	processedrK   
next_batchsliced_rI   	remainderss                r#   executeLatentRebatch.execute?   s.   ]
*	s7|$A w9=JZ]++IQ' *A$$R(M!,<,B,B2,FF*UV-J]J]^`Jaersteue{e{|~eJOOM1jI	""vay|6RS9UV<hnophqrsht#uv * !$m H Q%%a(:5#A&,,Q/:=$'OOM
$S!sA&&6!9Q<vVWyYZ|lrstluvwlx'yz $ !*3 %8 'q*EIF6!9Q<vayQR|djkldmnodpqr A##%,lO  }}[))r&    N)__name__
__module____qualname____firstlineno__classmethodr$   staticmethodrC   rL   rT   r]   rj   __static_attributes__rl   r&   r#   r   r      sx    
 
 ) )     " "   ,* ,*r&   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)ImageRebatchn   c                     [         R                  " SSSS[         R                  R                  S5      [         R                  R                  SSSSS	9/[         R                  R                  SS
9/S9$ )NRebatchImageszRebatch Imageszimage/batchTimagesr   r   r   r   r   r   )r   r   Imager   r   r    r!   s    r#   r$   ImageRebatch.define_schemao   se    yy#)"x(\1!F
 t4
 	
r&   c           	      F   US   n/ n/ nU H8  n[        UR                  S   5       H  nUR                  XVUS-    5        M     M:     [        S[        U5      U5       H+  nUR                  [        R
                  " XFXb-    SS95        M-     [        R                  " U5      $ )Nr   r   )dim)r=   r5   rF   rG   r6   rX   r   ra   )r"   ry   r   rb   
all_imagesimgrK   s          r#   rj   ImageRebatch.execute   s    ]

C399Q<(!!#!*- )  q#j/:6Auyyal)CKL 7 }}[))r&   rl   N)rm   rn   ro   rp   rq   r$   rj   rs   rl   r&   r#   ru   ru   n   s(    
 
 * *r&   ru   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)RebatchExtension   returnc                 "   #    [         [        /$ 7frO   )r   ru   )selfs    r#   get_node_listRebatchExtension.get_node_list   s      
 	
s   rl   N)rm   rn   ro   rp   r   rP   typer   	ComfyNoder   rs   rl   r&   r#   r   r      s)    
T$r||*<%= 
 
r&   r   r   c                     #    [        5       $ 7frO   )r   rl   r&   r#   comfy_entrypointr      s     s   )typing_extensionsr   r6   comfy_api.latestr   r   r   r   ru   r   r   rl   r&   r#   <module>r      sK    &  /e*BLL e*N*2<< *B
~ 
 0 r&   