o
    iL
                     @   s:   d dl Z d dlmZ d dlZG dd dejjjjj	Z
dS )    N)Optionalc                       s`   e Zd Z					d fdd	Z			ddejdejdeej deej dejf
d	d
Z  ZS )
ControlNetNc                    s   t  jd|||d|d| tjg | _tt| jD ]}| j	|j
| j| j||d q|d u r6| j}tjjjjjd | j|| jdd|||d	| _d S )NF)dtypedevice
operationsfinal_layer
num_blocks)r   r   T)biasstrict_img_sizer   r   r    )super__init__torchnn
ModuleListcontrolnet_blocksrangelenjoint_blocksappendLinearhidden_sizein_channelscomfyldmmodulesdiffusionmodulesmmdit
PatchEmbed
patch_sizepos_embed_input)selfr   control_latent_channelsr   r   r   kwargs_	__class__r   ./mnt/c/Users/fbmor/ComfyUI/comfy/cldm/mmdit.pyr      s"   	 zControlNet.__init__x	timestepsycontextreturnc                 C   s,  t |}| jd ur| |}|jdd  }| || j||jdj|j|jd }|| 	|7 }| j
||jd}|d urK| jd urK| |}|| }|d urT| |}g }t| j}	t|	D ]2}
| j|
 |||| jd\}}| j|
 |}| j|	 }|
|	d kr|d8 }t|D ]}|| qq_d|iS )N)r   )r   r   )r   )cuse_checkpoint   output)r   
zeros_likecontext_processorshape
x_embeddercropped_pos_embedr   tor   r    
t_embedder
y_embeddercontext_embedderr   r   r   r/   r   depthr   )r!   r(   r)   r*   r+   hinthwr.   r1   blocksioutcountjr   r   r'   forward$   s:   



(




zControlNet.forward)NNNNN)NNN)	__name__
__module____qualname__r   r   Tensorr   rC   __classcell__r   r   r%   r'   r      s*    "r   )r   typingr   (comfy.ldm.modules.diffusionmodules.mmditr   r   r   r   r   MMDiTr   r   r   r   r'   <module>   s    