o
    i                     @   sP  d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dl	Z	d dl
Zd dlZd dlmZ d dlmZmZ d dlZG dd dejZG dd	 d	ejZG d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG d d! d!ejZ G d"d# d#ejZ!G d$d% d%ejZ"G d&d' d'ejZ#G d(d) d)ejZ$G d*d+ d+ejZ%G d,d- d-ejZ&G d.d/ d/ejZ'G d0d1 d1ejZ(G d2d3 d3ejZ)G d4d5 d5ejZ*G d6d7 d7ejZ+G d8d9 d9ejZ,G d:d; d;Z-G d<d= d=Z.G d>d? d?ejZ/G d@dA dAej0j1Z2G dBdC dCejZ3G dDdE dEejZ1G dFdG dGej0j1Z4G dHdI dIejZ5G dJdK dKejZ6G dLdM dMejZ7G dNdO dOejZ8G dPdQ dQejZ9G dRdS dSejZ:G dTdU dUeZ;dVe;fdWdXZ<dS )Y    N)sampling)	sa_solver)override)ComfyExtensionioc                   @   0   e Zd Zedd ZedejfddZeZdS )BasicSchedulerc                 C   s\   t jddt jdt jjdtjjdt jjdddd	d
t j	jddddddgt j
 gdS )Nr   #sampling/custom_sampling/schedulersmodel	scheduleroptionssteps      '  defaultminmaxdenoise      ?        {Gz?r   r   r   stepnode_idcategoryinputsoutputs)r   SchemaModelInputCombocomfysamplersSCHEDULER_NAMESIntFloatSigmasOutputcls r.   ?/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_custom_sampler.pydefine_schema   s   

zBasicScheduler.define_schemareturnc                 C   sf   |}|dk r|dkrt tg S t|| }tj|d||	 }||d  d  }t |S )Nr   r   model_samplingr   )
r   
NodeOutputtorchFloatTensorintr%   r&   calculate_sigmasget_model_objectcpu)r-   r
   r   r   r   total_stepssigmasr.   r.   r/   execute   s   
zBasicScheduler.executeN	__name__
__module____qualname__classmethodr0   r   r3   r<   
get_sigmasr.   r.   r.   r/   r      s    
r   c                   @   r   )KarrasSchedulerc                 C   t   t jddt jjdddddt jjdd	d
dddddt jjddd
dddddt jjddd
dddddgt j gdS )NrC   r	   r   r   r   r   r   	sigma_max~1[:-@r        @r   FTr   r   r   r   roundadvanced	sigma_min<lޝ?rhog      @      Y@r   r   r!   r(   r#   r)   r*   r+   r,   r.   r.   r/   r0   .      
zKarrasScheduler.define_schemar1   c                 C      t j||||d}t|S N)nrK   rE   rM   )k_diffusion_samplingget_sigmas_karrasr   r3   r-   r   rE   rK   rM   r;   r.   r.   r/   r<   <      
zKarrasScheduler.executeNr=   r.   r.   r.   r/   rC   -       
rC   c                   @   r   )ExponentialSchedulerc                 C   s\   t jddt jjdddddt jjdd	d
dddddt jjddd
dddddgt j gdS )NrY   r	   r   r   r   r   r   rE   rF   r   rG   r   FTrH   rK   rL   r   rO   r,   r.   r.   r/   r0   D   s   
z"ExponentialScheduler.define_schemar1   c                 C   s   t j|||d}t|S )N)rS   rK   rE   )rT   get_sigmas_exponentialr   r3   )r-   r   rE   rK   r;   r.   r.   r/   r<   Q   s   
zExponentialScheduler.executeNr=   r.   r.   r.   r/   rY   C   s    
rY   c                   @   r   )PolyexponentialSchedulerc                 C   rD   )Nr[   r	   r   r   r   r   r   rE   rF   r   rG   r   FTrH   rK   rL   rM   r   rN   r   rO   r,   r.   r.   r/   r0   Y   rP   z&PolyexponentialScheduler.define_schemar1   c                 C   rQ   rR   )rT   get_sigmas_polyexponentialr   r3   rV   r.   r.   r/   r<   g   rW   z PolyexponentialScheduler.executeNr=   r.   r.   r.   r/   r[   X   rX   r[   c                   @   r   )LaplaceSchedulerc                 C   s   t jddt jjdddddt jjdd	d
dddddt jjddd
dddddt jjdd
ddddddt jjddd
dddddgt j gdS )Nr]   r	   r   r   r   r   r   rE   rF   r   rG   r   FTrH   rK   rL   mug      $      $@皙?beta      ?r   rO   r,   r.   r.   r/   r0   o   s   
zLaplaceScheduler.define_schemar1   c                 C   s   t j|||||d}t|S )N)rS   rK   rE   r^   ra   )rT   get_sigmas_laplacer   r3   )r-   r   rE   rK   r^   ra   r;   r.   r.   r/   r<   ~      
zLaplaceScheduler.executeNr=   r.   r.   r.   r/   r]   n   s    
r]   c                   @   r   )SDTurboSchedulerc                 C   sJ   t jddt jdt jjdddddt jjdd	d
d	ddgt j gdS )Nre   r	   r
   r   r   
   r   r   r   r   r   r   r   r   r!   r"   r#   r(   r)   r*   r+   r,   r.   r.   r/   r0      s   

zSDTurboScheduler.define_schemar1   c                 C   sh   dt d|  }ttddd d d|||  }|d|}t||dgg}t	|S )Nrf   r      d   )r   r2   )
r6   r4   fliparanger8   sigmacat	new_zerosr   r3   )r-   r
   r   r   
start_step	timestepsr;   r.   r.   r/   r<      s
   (
zSDTurboScheduler.executeNr=   r.   r.   r.   r/   re      s    
re   c                   @   r   )BetaSamplingSchedulerc                 C   sf   t jddt jdt jjdddddt jjd	d
ddddddt jjdd
ddddddgt j gdS )Nrq   r	   r
   r   r   r   r   r   alphag333333?r   g      I@r   FTrH   ra   r   rg   r,   r.   r.   r/   r0      s   

z#BetaSamplingScheduler.define_schemar1   c                 C   s$   t jj|d|||d}t|S )Nr2   )rr   ra   )r%   r&   beta_schedulerr8   r   r3   )r-   r
   r   rr   ra   r;   r.   r.   r/   r<      s   
zBetaSamplingScheduler.executeNr=   r.   r.   r.   r/   rq      rX   rq   c                   @   r   )VPSchedulerc                 C   st   t jddt jjdddddt jjdd	d
dddddt jjddd
dddddt jjddd
dddddgt j gdS )Nrt   r	   r   r   r   r   r   beta_dgfffff3@r   rG   r   FTrH   beta_minr`   eps_sMbP?r   -C6?r   rO   r,   r.   r.   r/   r0      rP   zVPScheduler.define_schemar1   c                 C   s   t j||||d}t|S )N)rS   ru   rv   rw   )rT   get_sigmas_vpr   r3   )r-   r   ru   rv   rw   r;   r.   r.   r/   r<      rW   zVPScheduler.executeNr=   r.   r.   r.   r/   rt      rX   rt   c                   @   r   )SplitSigmasc              
   C   sF   t jddt jdt jjdddddgt jjdd	t jjd
d	gdS )Nr{   sampling/custom_sampling/sigmasr;   r   r   r   r   high_sigmasdisplay_name
low_sigmasr   )r   r!   r*   r#   r(   r+   r,   r.   r.   r/   r0      s   
zSplitSigmas.define_schemar1   c                 C   s(   |d |d  }||d  }t ||S Nr   )r   r3   )r-   r;   r   sigmas1sigmas2r.   r.   r/   r<      s   zSplitSigmas.executeNr=   r.   r.   r.   r/   r{      s    
r{   c                   @   r   )SplitSigmasDenoisec                 C   sH   t jddt jdt jjddddddgt jjd	d
t jjdd
gdS )Nr   r|   r;   r   r   r   r   r   r}   r~   r   r   r   r!   r*   r#   r)   r+   r,   r.   r.   r/   r0      s   
z SplitSigmasDenoise.define_schemar1   c                 C   sL   t |jd d d}t|| }|d |  }||d  d  }t||S )Nr   r   )r   shaperI   r   r3   )r-   r;   r   r   r:   r   r   r.   r.   r/   r<      s
   zSplitSigmasDenoise.executeNr=   r.   r.   r.   r/   r      s    
r   c                   @   r   )
FlipSigmasc                 C   s$   t jddt jdgt j gdS )Nr   r|   r;   r   )r   r!   r*   r#   r+   r,   r.   r.   r/   r0      s   
zFlipSigmas.define_schemar1   c                 C   s>   t |dkrt|S |d}|d dkrd|d< t|S )Nr   ry   )lenr   r3   rj   r-   r;   r.   r.   r/   r<     s   


zFlipSigmas.executeNr=   r.   r.   r.   r/   r      s    
	r   c                   @   r   )SetFirstSigmac                 C   s:   t jddt jdt jjdddddd	d
gt j gdS )Nr   r|   r;   rl   g      a@r        @rx   Fr   r   r   r   rI   r   r   r,   r.   r.   r/   r0     s   

zSetFirstSigma.define_schemar1   c                 C   s   |  }||d< t|S Nr   )cloner   r3   )r-   r;   rl   r.   r.   r/   r<     s   
zSetFirstSigma.executeN)	r>   r?   r@   rA   r0   r   r3   r<   set_first_sigmar.   r.   r.   r/   r         
r   c                   @   sF   e Zd Zedd Zedejdededede	de
jfd	d
ZeZdS )ExtendIntermediateSigmasc                 C   sx   t jddgdt jdt jjddddd	t jjd
ddddddt jjdddddddt jjdg ddgt j gdS )Nr   zinterpolate sigmasr|   r;   r      r   ri   r   start_at_sigmag      r   r   Fr   end_at_sigmag      (@r   spacinglinearcosinesiner   r   search_aliasesr   r   r    )r   r!   r*   r#   r(   r)   r$   r+   r,   r.   r.   r/   r0   (  s   

z&ExtendIntermediateSigmas.define_schemar;   r   r   r   r   r1   c                 C   s   |dk rt d}dd dd dd d| }tjdd|d |jd	dd
 }||}g }	tt|d D ],}
||
 }||
d  }|	| ||  krO|kr`n q4|||  | }|	|  q4t|dkrn|	|d
  t	|	}	t
|	S )Nr   infc                 S   s   | S Nr.   xr.   r.   r/   <lambda>>  s    z2ExtendIntermediateSigmas.execute.<locals>.<lambda>c                 S   s   t | tj d S )Nr   )r4   sinmathpir   r.   r.   r/   r   ?      c                 S   s   dt | tj d  S )Nr   r   )r4   cosr   r   r   r.   r.   r/   r   @  s    r   r   )devicer   )floatr4   linspacer   ranger   appendextendtolistr5   r   r3   )r-   r;   r   r   r   r   interpolatorr   computed_spacingextended_sigmasisigma_current
sigma_nextinterpolated_stepsr.   r.   r/   r<   8  s.    


z ExtendIntermediateSigmas.executeN)r>   r?   r@   rA   r0   r4   Tensorr6   r   strr   r3   r<   r   r.   r.   r.   r/   r   '  s    
(!r   c                   @   r   )SamplingPercentToSigmac                 C   sL   t jddt jdt jjddddddt jjd	d
ddgt jjddgdS )Nr   r|   r
   sampling_percentr   r   ry   r   return_actual_sigmaFzvReturn the actual sigma value instead of the value used for interval checks.
This only affects results at 0.0 and 1.0.)r   tooltipsigma_valuer~   r   )r   r!   r"   r#   r)   Booleanr+   r,   r.   r.   r/   r0   ^  s   
z$SamplingPercentToSigma.define_schemar1   c                 C   sH   | d}||}|r|dkr|j }n	|dkr|j }t|S )Nr2   r   r   )r8   percent_to_sigmarE   itemrK   r   r3   )r-   r
   r   r   r2   	sigma_valr.   r.   r/   r<   k  s   



zSamplingPercentToSigma.executeN)	r>   r?   r@   rA   r0   r   r3   r<   	get_sigmar.   r.   r.   r/   r   ]  s    

r   c                   @   r   )KSamplerSelectc                 C   s,   t jddt jjdtjjdgt j gdS )Nr   !sampling/custom_sampling/samplerssampler_namer   r   )	r   r!   r$   r#   r%   r&   SAMPLER_NAMESSamplerr+   r,   r.   r.   r/   r0   z  s   
zKSamplerSelect.define_schemar1   c                 C   s   t j|}t|S r   )r%   r&   sampler_objectr   r3   )r-   r   samplerr.   r.   r/   r<     s   
zKSamplerSelect.executeN	r>   r?   r@   rA   r0   r   r3   r<   get_samplerr.   r.   r.   r/   r   y      
r   c                   @   r   )SamplerDPMPP_3M_SDEc                 C   s^   t jddt jjddddddd	d
t jjddddddd	d
t jjdddgd	dgt j gdS )Nr   r   etar   r   rN   r   FTrH   s_noisenoise_devicegpur9   r   rJ   r   r   r!   r)   r#   r$   r   r+   r,   r.   r.   r/   r0     s   
z!SamplerDPMPP_3M_SDE.define_schemar1   c                 C   s0   |dkrd}nd}t j|||d}t|S )Nr9   dpmpp_3m_sdedpmpp_3m_sde_gpur   r   r%   r&   ksamplerr   r3   )r-   r   r   r   r   r   r.   r.   r/   r<     s
   
zSamplerDPMPP_3M_SDE.executeNr   r.   r.   r.   r/   r     s    
r   c                   @   r   )SamplerDPMPP_2M_SDEc                 C   sp   t jddt jjdddgdt jjddd	d
ddddt jjddd	d
ddddt jjdddgddgt j gdS )Nr   r   solver_typemidpointheunr   r   r   r   rN   r   FTrH   r   r   r   r9   r   r   r   r!   r$   r#   r)   r   r+   r,   r.   r.   r/   r0     s   
z!SamplerDPMPP_2M_SDE.define_schemar1   c                 C   s2   |dkrd}nd}t j||||d}t|S )Nr9   dpmpp_2m_sdedpmpp_2m_sde_gpu)r   r   r   r   )r-   r   r   r   r   r   r   r.   r.   r/   r<     
   
zSamplerDPMPP_2M_SDE.executeNr   r.   r.   r.   r/   r         
r   c                   @   r   )SamplerDPMPP_SDEc                 C   sv   t jddt jjddddddd	d
t jjddddddd	d
t jjddddddd	d
t jjdddgd	dgt j gdS )Nr   r   r   r   r   rN   r   FTrH   r   rrb   r   r   r9   r   r   r   r,   r.   r.   r/   r0     s   
zSamplerDPMPP_SDE.define_schemar1   c                 C   s2   |dkrd}nd}t j||||d}t|S )Nr9   	dpmpp_sdedpmpp_sde_gpu)r   r   r   r   )r-   r   r   r   r   r   r   r.   r.   r/   r<     r   zSamplerDPMPP_SDE.executeNr   r.   r.   r.   r/   r     r   r   c                   @   r   )SamplerDPMPP_2S_Ancestralc                 C   sF   t jddt jjddddddd	t jjd
dddddd	gt j gdS )Nr   r   r   r   r   rN   r   Fr   r   r   r   r!   r)   r#   r   r+   r,   r.   r.   r/   r0     s   
z'SamplerDPMPP_2S_Ancestral.define_schemar1   c                 C      t jd||d}t|S )Ndpmpp_2s_ancestralr   r   r-   r   r   r   r.   r.   r/   r<     rd   z!SamplerDPMPP_2S_Ancestral.executeNr   r.   r.   r.   r/   r         
r   c                   @   r   )SamplerEulerAncestralc                 C   sJ   t jddt jjddddddd	d
t jjddddddd	d
gt j gdS )Nr   r   r   r   r   rN   r   FTrH   r   r   r   r,   r.   r.   r/   r0     s   
z#SamplerEulerAncestral.define_schemar1   c                 C   r   )Neuler_ancestralr   r   r   r.   r.   r/   r<     rd   zSamplerEulerAncestral.executeNr   r.   r.   r.   r/   r     r   r   c                   @   r   )SamplerEulerAncestralCFGPPc                 C   sH   t jdddt jjddddddd	t jjd
dddddd	gt j gdS )Nr   zSamplerEulerAncestralCFG++r   r   r   r   r   Fr   r   r_   )r   r   r   r   r    r   r,   r.   r.   r/   r0     s   
z(SamplerEulerAncestralCFGPP.define_schemar1   c                 C   r   )Neuler_ancestral_cfg_ppr   r   r   r.   r.   r/   r<     s
   
z"SamplerEulerAncestralCFGPP.executeNr   r.   r.   r.   r/   r      s    
r   c                   @   r   )
SamplerLMSc              
   C   s.   t jddt jjddddddgt j gd	S )
Nr   r   order   r   ri   Tr   r   r   rJ   r   )r   r!   r(   r#   r   r+   r,   r.   r.   r/   r0        
zSamplerLMS.define_schemar1   c                 C   s   t jdd|i}t|S )Nlmsr   r   )r-   r   r   r.   r.   r/   r<   !  rW   zSamplerLMS.executeNr   r.   r.   r.   r/   r     r   r   c                   @   r   )SamplerDPMAdaptativec                 C   s  t jddt jjddddddt jjdd	d
dddddt jjddd
dddddt jjdd	d
dddddt jjdd
d
dddddt jjddd
dddddt jjdd
d
dddddt jjddd
dddddt jjdd
d
dddddt jjddd
dddddg
t j gdS )Nr   r   r      r   Tr   rtolg?r   rN   r   FrH   atolgq?h_initpcoefficoeffr   dcoeffaccept_safetygQ?r   r   r   )r   r!   r(   r#   r)   r   r+   r,   r.   r.   r/   r0   )  s    
z"SamplerDPMAdaptative.define_schemar1   c                 C   s.   t jd|||||||||	|
d
}t|S )Ndpm_adaptive)
r   r   r   r   r   r   r   r   r   r   r   )r-   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r/   r<   =  s
   
zSamplerDPMAdaptative.executeNr   r.   r.   r.   r/   r   (  s    
r   c                   @   r   )SamplerER_SDEc                 C   sr   t jddt jjdg ddt jjddddd	d
t jjdddddddd	dt jjddddddd	dgt j gdS )Nr   r   r   )ER-SDEReverse-time SDEODEr   	max_stager   r   Tr   r   r   r   rN   r   FzStochastic strength of reverse-time SDE.
When eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.r   r   r   r   rI   r   rJ   r   rH   r   )r   r!   r$   r#   r(   r)   r   r+   r,   r.   r.   r/   r0   H  s   
zSamplerER_SDE.define_schemar1   c           	         sb   |dks|dkr dkrd d} fdd}|dkrd }n|}d}t j||||d}t|S )	Nr  r   r   c                    s   |  d  S r   r.   r   r   r.   r/   reverse_time_sde_noise_scaler\  s   z<SamplerER_SDE.execute.<locals>.reverse_time_sde_noise_scalerr   er_sde)r   noise_scalerr  r   )	r-   r   r  r   r   r  r  r   r   r.   r  r/   r<   V  s   
zSamplerER_SDE.executeNr   r.   r.   r.   r/   r   G  s    
r   c                   @   r   )SamplerSASolverc                 C   s   t jddgdt jdt jjddddd	d
ddt jjdddddddt jjdddddddt jjddddd	d
ddt jjddddddt jjddddddt jjdddt jjdddg	t j gd S )!Nr  sder   r
   r   r   r   r_   r   FTrH   sde_start_percentg?rx   )r   r   r   r   rJ   sde_end_percentg?r   rN   predictor_orderr   r      r   corrector_orderr   r   use_pece)rJ   simple_order_2r   )	r   r!   r"   r#   r)   r(   r   r   r+   r,   r.   r.   r/   r0   m  s    

zSamplerSASolver.define_schemar1   c
              
   C   sX   | d}
|
|}|
|}tj|||d}d}tj|||||||	d}t|S )Nr2   r  r   )tau_funcr   r  r  r  r  )	r8   r   r   get_tau_interval_funcr%   r&   r   r   r3   )r-   r
   r   r
  r  r   r  r  r  r  r2   start_sigma	end_sigmar  r   r   r.   r.   r/   r<     s    



zSamplerSASolver.executeNr   r.   r.   r.   r/   r  l  s    
r  c                   @   ,   e Zd Zedd ZedejfddZdS )SamplerSEEDS2c                 C   s   t jdddgdt jjdddgdt jjd	d
dddddddt jjdd
dddddddt jjdddd
dddddgt j gddS )Nr  r	  zexp heunr   r   phi_1phi_2r   r   r   r   rN   r   FzStochastic strengthTr  r   zSDE noise multiplierr   rb   z7Relative step size for the intermediate stage (c2 node)zThis sampler node can represent multiple samplers:

seeds_2
- default setting

exp_heun_2_x0
- solver_type=phi_2, r=1.0, eta=0.0

exp_heun_2_x0_sde
- solver_type=phi_2, r=1.0, eta=1.0, s_noise=1.0)r   r   r   r   r    descriptionr   r,   r.   r.   r/   r0     s   
zSamplerSEEDS2.define_schemar1   c                 C   s&   d}t j|||||d}t|S )Nseeds_2)r   r   r   r   r   )r-   r   r   r   r   r   r   r.   r.   r/   r<     s   
zSamplerSEEDS2.executeNr>   r?   r@   rA   r0   r   r3   r<   r.   r.   r.   r/   r    s
    
r  c                   @      e Zd Zdd Zdd ZdS )Noise_EmptyNoisec                 C   s
   d| _ d S r   seedselfr.   r.   r/   __init__     
zNoise_EmptyNoise.__init__c              	   C   sf   |d }|j r'| }g }|D ]}|tj|j|j|jdd qtj	
|S tj|j|j|jddS )Nsamplesr9   )dtypelayoutr   )	is_nestedunbindr   r4   zerosr   r%  r&  r%   nested_tensorNestedTensor)r!  input_latentlatent_imagetensorsr)  tr.   r.   r/   generate_noise  s    zNoise_EmptyNoise.generate_noiseNr>   r?   r@   r"  r0  r.   r.   r.   r/   r        r  c                   @   r  )Noise_RandomNoisec                 C   s
   || _ d S r   r  )r!  r  r.   r.   r/   r"    r#  zNoise_RandomNoise.__init__c                 C   s.   |d }d|v r|d nd }t j|| j|S )Nr$  batch_index)r%   sampleprepare_noiser  )r!  r,  r-  
batch_indsr.   r.   r/   r0    s   z Noise_RandomNoise.generate_noiseNr1  r.   r.   r.   r/   r3    r2  r3  c                   @   r   )SamplerCustomc                 C   s   t jddt jdt jjddddt jjdddd	dd
t jjdddddddt jdt jdt jdt j	dt j
dg	t j
jddt j
jddgdS )Nr8  sampling/custom_samplingr
   	add_noiseT)r   rJ   
noise_seedr       r   r   r   control_after_generatecfg       @r   rN   r`   r   r   positivenegativer   r;   r-  outputr~   denoised_outputr   )r   r!   r"   r#   r   r(   r)   Conditioningr   r*   Latentr+   r,   r.   r.   r/   r0     s"   





zSamplerCustom.define_schemar1   c
                 C   s:  |	}
|
d }	|
  }
tj||	|
dd }	|	|
d< |s#t |
}nt||
}d }d|
v r4|
d }i }t	||j
d d |}tjj }tjj||||||||	||||d}|
  }|dd  ||d< d|v r|j|d  }|jrdd	 | D }tjtj||}|
  }||d< n|}t||S )
Nr$  downscale_ratio_spacial
noise_maskr   r   )rH  callbackdisable_pbarr  x0c                 S      g | ]}|j qS r.   r   .0r   r.   r.   r/   
<listcomp>	      z)SamplerCustom.execute.<locals>.<listcomp>)copyr%   r5  fix_empty_latent_channelsgetr  r0  r3  latent_previewprepare_callbackr   utilsPROGRESS_BAR_ENABLEDsample_custompopr
   process_latent_outr9   r'  r(  r*  r+  unpack_latentsr   r3   )r-   r
   r:  r;  r?  rA  rB  r   r;   r-  latentnoiserH  	x0_outputrI  rJ  r$  outx0_outlatent_shapesout_denoisedr.   r.   r/   r<     s6   
$
zSamplerCustom.executeN	r>   r?   r@   rA   r0   r   r3   r<   r5  r.   r.   r.   r/   r8    s    
$r8  c                   @   s   e Zd Zdd ZdS )Guider_Basicc                 C   s   |  d|i d S )NrA  )inner_set_conds)r!  rA  r.   r.   r/   	set_conds  s   zGuider_Basic.set_condsN)r>   r?   r@   rg  r.   r.   r.   r/   re    s    re  c                   @   r   )BasicGuiderc                 C   s.   t jddt jdt jdgt j gdS )Nrh   sampling/custom_sampling/guidersr
   conditioningr   )r   r!   r"   r#   rE  Guiderr+   r,   r.   r.   r/   r0     s   


zBasicGuider.define_schemar1   c                 C   s   t |}|| t|S r   )re  rg  r   r3   )r-   r
   rj  guiderr.   r.   r/   r<   $  s   

zBasicGuider.executeN	r>   r?   r@   rA   r0   r   r3   r<   
get_guiderr.   r.   r.   r/   rh    r   rh  c                   @   r   )	CFGGuiderc                 C   sN   t jddt jdt jdt jdt jjdddd	d
ddgt j gdS )Nro  ri  r
   rA  rB  r?  r@  r   rN   r`   r   r   r   )r   r!   r"   r#   rE  r)   rk  r+   r,   r.   r.   r/   r0   -  s   



zCFGGuider.define_schemar1   c                 C   s,   t j|}||| || t|S r   )r%   r&   ro  rg  set_cfgr   r3   )r-   r
   rA  rB  r?  rl  r.   r.   r/   r<   ;  s   

zCFGGuider.executeNrm  r.   r.   r.   r/   ro  ,  s    
ro  c                   @   s,   e Zd Zd	ddZdd Zi dfddZdS )
Guider_DualCFGFc                 C   s   || _ || _|| _d S r   )cfg1cfg2nested)r!  rr  rs  rt  r.   r.   r/   rp  E  s   
zGuider_DualCFG.set_cfgc                 C   s&   t |ddi}| |||d d S )Nprompt_typerB  )rA  middlerB  )node_helpersconditioning_set_valuesrf  )r!  rA  rv  rB  r.   r.   r/   rg  J  s   zGuider_DualCFG.set_condsNc           
      C   s   | j dd }| j dd }| j dd }| jrHtj| j|||g|||}tjj| j|d |d | j|||||d	}	|d | j	|	|d    S |dd	d	krbt
| j	d
rbd }t
| jd
rbd }tj| j|||g|||}tjj| j|d |d | j	|||||d	|d |d  | j  S )NrB  rv  rA  r   r   )model_optionsconduncondr   disable_cfg1_optimizationFr   )condsrT  rt  r%   r&   calc_cond_batchinner_modelcfg_functionrr  rs  r   isclose)
r!  r   timestepry  r  negative_condmiddle_condpositive_condr`  	pred_textr.   r.   r/   predict_noiseN  s   *@zGuider_DualCFG.predict_noise)F)r>   r?   r@   rp  rg  r  r.   r.   r.   r/   rq  D  s    
rq  c                   @   r   )DualCFGGuiderc                 C   s   t jddgdt jdt jdt jdt jdt jjdd	d
ddddt jjdd	d
ddddt jjdddgdgt j gdS )Nr  zdual prompt guidanceri  r
   cond1cond2rB  	cfg_condsr@  r   rN   r`   r   r   cfg_cond2_negativestyleregularrt  r   r   )	r   r!   r"   r#   rE  r)   r$   rk  r+   r,   r.   r.   r/   r0   b  s   




	zDualCFGGuider.define_schemar1   c           	      C   s4   t |}|||| |j|||dkd t|S )Nrt  )rt  )rq  rg  rp  r   r3   )	r-   r
   r  r  rB  r  r  r  rl  r.   r.   r/   r<   t  s   
zDualCFGGuider.executeNrm  r.   r.   r.   r/   r  a  s    
r  c                   @   r   )DisableNoisec                 C   s   t jddgdg t j gdS )Nr  z
zero noisesampling/custom_sampling/noiser   )r   r!   Noiser+   r,   r.   r.   r/   r0   ~  s   
zDisableNoise.define_schemar1   c                 C   s   t t S r   )r   r3   r  r,   r.   r.   r/   r<     s   zDisableNoise.executeN	r>   r?   r@   rA   r0   r   r3   r<   	get_noiser.   r.   r.   r/   r  }  s    
	r  c                   @   r   )RandomNoisec              
   C   s.   t jddt jjddddddgt j gdS )	Nr  r  r;  r   r<  Tr=  r   )r   r!   r(   r#   r  r+   r,   r.   r.   r/   r0     r   zRandomNoise.define_schemar1   c                 C   s   t t|S r   )r   r3   r3  )r-   r;  r.   r.   r/   r<     s   zRandomNoise.executeNr  r.   r.   r.   r/   r    s    
r  c                   @   r   )SamplerCustomAdvancedc              
   C   s\   t jddt jdt jdt jdt jdt jdgt jjdd	t jjd
d	gdS )Nr  r9  r^  rl  r   r;   r-  rC  r~   rD  r   )	r   r!   r  r#   rk  r   r*   rF  r+   r,   r.   r.   r/   r0     s   




z#SamplerCustomAdvanced.define_schemar1   c              
   C   s.  |}|d }|  }tj|j||dd }||d< d }d|v r%|d }i }t|j|jd d |}	tj	j
 }
|j|||||||	|
|jd}|tj }|  }|dd  ||d< d|v r|jj|d  }|jrdd	 | D }tjtj	||}|  }||d< n|}t||S )
Nr$  rG  rH  r   r   )denoise_maskrI  rJ  r  rK  c                 S   rL  r.   rM  rN  r.   r.   r/   rP    rQ  z1SamplerCustomAdvanced.execute.<locals>.<listcomp>)rR  r%   r5  rS  model_patcherrT  rU  rV  r   rW  rX  r0  r  tomodel_managementintermediate_devicerZ  r
   r[  r9   r'  r(  r*  r+  r\  r   r3   )r-   r^  rl  r   r;   r-  r]  rH  r_  rI  rJ  r$  r`  ra  rb  rc  r.   r.   r/   r<     s2   
"
zSamplerCustomAdvanced.executeNrd  r.   r.   r.   r/   r    s    
 r  c                   @   r   )AddNoisec              
   C   sD   t jdddt jdt jdt jdt jdgt j gdS )	Nr  z"_for_testing/custom_sampling/noiseTr
   r^  r;   r-  )r   r   is_experimentalr   r    )r   r!   r"   r#   r  r*   rF  r+   r,   r.   r.   r/   r0     s   



zAddNoise.define_schemar1   c                 C   s   t |dkrt|S |}|d }||}|d}|d}|d}	t |dkr7t|d |d  }
n|d }
t|dkrF|	|}||
||}||}tj	|dddd	}|
 }||d< t|S )
Nr   r$  r2   r[  process_latent_inr   r   r   )nanposinfneginf)r   r   r3   r0  r8   r4   abscount_nonzeronoise_scaling
nan_to_numrR  )r-   r
   r^  r;   r-  r]  noisyr2   r[  r  scaler`  r.   r.   r/   r<     s&   





zAddNoise.executeN)	r>   r?   r@   rA   r0   r   r3   r<   r:  r.   r.   r.   r/   r    s    
r  c                   @   r  )ManualSigmasc              
   C   s2   t jdddgddt jjdddd	gt j gd
S )Nr  zcustom noise schedulezdefine sigmasz_for_testing/custom_samplingTr;   z1, 0.5F)r   	multiline)r   r   r   r  r   r    )r   r!   Stringr#   r*   r+   r,   r.   r.   r/   r0     s   
zManualSigmas.define_schemar1   c                 C   s.   t d|}dd |D }t|}t|S )Nz[-+]?(?:\d*\.*\d+)c                 S   s   g | ]}t |qS r.   )r   )rO  r   r.   r.   r/   rP    r   z(ManualSigmas.execute.<locals>.<listcomp>)refindallr4   r5   r   r3   r   r.   r.   r/   r<     s   

zManualSigmas.executeNr  r.   r.   r.   r/   r    s
    
r  c                   @   s(   e Zd Zedeeej  fddZdS )CustomSamplersExtensionr1   c                    s   g t ttttttttt	t
tttttttttttttttttttttt t!t"S r   )#r8  r   rC   rY   r[   r]   rt   rq   re   r   r   r   r   r   r   r   r   r   r   r  r  r{   r   r   r   r   r   ro  r  rh  r  r  r  r  r  r   r.   r.   r/   get_node_list  s   	
 !"#z%CustomSamplersExtension.get_node_listN)	r>   r?   r@   r   listtyper   	ComfyNoder  r.   r.   r.   r/   r    s    r  r1   c                      s   t  S r   )r  r.   r.   r.   r/   comfy_entrypointF  s   r  )=r   comfy.samplersr%   comfy.samplecomfy.k_diffusionr   rT   r   rU  r4   comfy.utilsrw  typing_extensionsr   comfy_api.latestr   r   r  r  r   rC   rY   r[   r]   re   rq   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r3  r8  r&   ro  re  rh  rq  r  r  r  r  r  r  r  r  r.   r.   r.   r/   <module>   sj    6%-#	>61*