o
    iQ                     @   s   d dl Z d dlmZmZ d dlm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 zd dlmZ d dlmZ eje  e d W n   Y G d	d
 d
ejZG dd dejZG dd deZdefddZdS )    N)ModelLoaderImageModelDescriptor)model_management)override)ComfyExtensionio)EXTRA_REGISTRY)MAIN_REGISTRYzWSuccessfully imported spandrel_extra_arches: support for non commercial upscale models.c                   @   0   e Zd Zedd ZedejfddZeZdS )UpscaleModelLoaderc              	   C   s0   t jdddt jjdtddgt j gdS )Nr   zLoad Upscale Modelloaders
model_nameupscale_models)options)node_iddisplay_namecategoryinputsoutputs)r   SchemaComboInputfolder_pathsget_filename_listUpscaleModelOutputcls r   >/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_upscale_model.pydefine_schema   s   z UpscaleModelLoader.define_schemareturnc                 C   sb   t d|}tjj|dd}d|v rtj|ddi}t | }t	|t
s,tdt|S )Nr   T)	safe_loadz4module.layers.0.residual_group.blocks.0.norm1.weightzmodule. z+Upscale model must be a single-image model.)r   get_full_path_or_raisecomfyutilsload_torch_filestate_dict_prefix_replacer   load_from_state_dicteval
isinstancer   	Exceptionr   
NodeOutput)r   r   
model_pathsdoutr   r   r   execute!   s   

zUpscaleModelLoader.executeN)	__name__
__module____qualname__classmethodr    r   r-   r1   
load_modelr   r   r   r   r      s    
r   c                   @   r
   )ImageUpscaleWithModelc              	   C   s6   t jdddg dt jdt jdgt j gdS )Nr7   zUpscale Image (using Model)zimage/upscaling)upscaleupscalerupsczenlarge imagezsuper resolutionhiressuperreszincrease resolutionupscale_modelimage)r   r   r   search_aliasesr   r   )r   r   r   r   Imager   r   r   r   r   r    2   s   

z#ImageUpscaleWithModel.define_schemar!   c              
      sj  t  }t  j}|d|  t jd d 7 }|| |  7 }t ||  	| |
dd	|}d}d}d}z_|rz2|jd	 tjj|jd
 |jd |||d }	tj|	}
tjj| fdd||| j|
d}d}W n! ty } zt | |d }|dk r|W Y d }~nd }~ww |sAW  	d n 	d w tj|
ddd	dd}t|S )Ni   g      ?g      x@i       Tr         )tile_xtile_yoverlapc                    s    | S Nr   )ar=   r   r   <lambda>W   s    z/ImageUpscaleWithModel.execute.<locals>.<lambda>)rF   rG   rH   upscale_amountpbarF   cpu)minmax)r   get_torch_devicemodule_sizemodelelement_sizerR   scalenelementfree_memorytomovedimshaper%   r&   get_tiled_scale_stepsProgressBartiled_scaler,   raise_non_oomtorchclampr   r-   )r   r=   r>   devicememory_requiredin_imgtilerH   oomstepsrN   ser   rK   r   r1   B   s<    
,$

zImageUpscaleWithModel.executeN)	r2   r3   r4   r5   r    r   r-   r1   r8   r   r   r   r   r7   1   s    
!r7   c                   @   s(   e Zd Zedeeej  fddZdS )UpscaleModelExtensionr!   c                    s
   t tgS rI   )r   r7   )selfr   r   r   get_node_listh   s   z#UpscaleModelExtension.get_node_listN)	r2   r3   r4   r   listtyper   	ComfyNoderm   r   r   r   r   rk   g   s    rk   r!   c                      s   t  S rI   )rk   r   r   r   r   comfy_entrypointp   s   rq   )loggingspandrelr   r   r%   r   ra   comfy.utilsr   typing_extensionsr   comfy_api.latestr   r   spandrel_extra_archesr   r	   addinforp   r   r7   rk   rq   r   r   r   r   <module>   s&    
6	