o
    i$                     @   s~   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZdddZ	dddZ
dddZdd	 Zd
d ZdddZdddZdS )    Nc                    s   |d u rt j|  t j| j|ddj| jdS tj|dd\}}g  t	|d d D ]'}t jdgt
|  dd   t j| j|ddj| jd}||v rQ | q* fdd	|D  t j d
dS )Ncpu)dtypelayout	generatordevice)r   T)return_inverse   c                    s   g | ]} | qS  r
   ).0inoisesr
   */mnt/c/Users/fbmor/ComfyUI/comfy/sample.py
<listcomp>   s    z'prepare_noise_inner.<locals>.<listcomp>r   )axis)torchrandnsizefloat32r   tor   npuniquerangelistappendcat)latent_imager   
noise_indsunique_indsinverser   noiser
   r   r   prepare_noise_inner	   s   &8
r"   c                 C   sX   t |}| jr$|  }g }|D ]}|t||| qtj|}|S t| ||}|S )z
    creates random noise given a latent image and a seed.
    optional arg skip can be used to skip and discard x number of noise generations for a given seed
    )	r   manual_seed	is_nestedunbindr   r"   comfynested_tensorNestedTensor)r   seedr   r   tensorsr   tr
   r
   r   prepare_noise   s   
r,   c                 C   s   |j r|S | d}t|dkrJ|j|jd kr#tjj||jdd}|d urJ||j	krJ||j	 }tjj
|t|jd | t|jd | ddd	}|jd
krY|jdkrY|d}|S )Nlatent_formatr   r	   )dimr   znearest-exactdisabled)crop         )r$   get_model_objectr   count_nonzerolatent_channelsshaper&   utilsrepeat_to_batch_sizespacial_downscale_ratiocommon_upscaleroundlatent_dimensionsndim	unsqueeze)modelr   downscale_ratio_spacialr-   ratior
   r
   r   fix_empty_latent_channels(   s   


2
rD   c                 C   s   t d | |||g fS )NzLWarning: comfy.sample.prepare_sampling isn't used anymore and can be removedloggingwarning)rA   noise_shapepositivenegative
noise_maskr
   r
   r   prepare_sampling8   s   
rL   c                 C   s   t d d S )NzUWarning: comfy.sample.cleanup_additional_models isn't used anymore and can be removedrE   )modelsr
   r
   r   cleanup_additional_models<   s   rN         ?Fc                 C   s`   t jj| || j|||	| jd}|j|||||||||||||d}|jt j t j	 d}|S )N)stepsr   sampler	schedulerdenoisemodel_options)
cfgr   
start_step	last_stepforce_full_denoisedenoise_masksigmascallbackdisable_pbarr)   r   r   )
r&   samplersKSamplerload_devicerT   sampler   model_managementintermediate_deviceintermediate_dtype)rA   r!   rP   rU   sampler_namerR   rI   rJ   r   rS   disable_noiserV   rW   rX   rK   rZ   r[   r\   r)   rQ   samplesr
   r
   r   ra   ?   s   $ra   c                 C   sJ   t jj| ||||| j||| j|||	|
|d}|jt j t j d}|S )N)rT   r   rY   r[   r\   r)   r]   )	r&   r^   ra   r`   rT   r   rb   rc   rd   )rA   r!   rU   rQ   rZ   rI   rJ   r   rK   r[   r\   r)   rg   r
   r
   r   sample_customF   s   ,rh   )N)
rO   FNNFNNNFN)NNFN)r   comfy.model_managementr&   comfy.samplerscomfy.utilsnumpyr   rF   comfy.nested_tensorr"   r,   rD   rL   rN   ra   rh   r
   r
   r
   r   <module>   s    



