o
    i
                     @   st   d dl mZ d dlZd dlmZmZ dejdejdejfddZG d	d
 d
ejZ	G dd deZ
de
fddZdS )    )overrideN)ComfyExtensionio
cond_scoreuncond_scorereturnc           
      C   s   | j d }| |dd }||dd }tj||fdd}ztjj|dd\}}}W n tyC   tjj| dd\}}}Y nw |ddddddf 	|j
}||dd | }	|	|	|jS )	zFDrop tangential components from uncond score to align with cond score.r      )dimF)full_matricesN)shapereshapefloattorchcatlinalgsvdRuntimeErrorcputodevice	transpose
reshape_asdtype)
r   r   	batch_numcond_score_flatuncond_score_flatscore_matrix_Vhv1uncond_score_td r#   5/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_tcfg.pyscore_tangential_damping	   s   
"r%   c                   @   s$   e Zd Zedd Zedd ZdS )TCFGc              	   C   s,   t jddddt jdgt jjddgdS )	Nr&   zTangential Damping CFGzadvanced/guidanceu   TCFG – Tangential Damping CFG (2503.18137)

Refine the uncond (negative) to align with the cond (positive) for improving quality.modelpatched_model)display_name)node_idr)   categorydescriptioninputsoutputs)r   SchemaModelInputOutput)clsr#   r#   r$   define_schema   s   
zTCFG.define_schemac                 C   s$   |  }dd }|| t|S )Nc                 S   sr   | d }| d }t |dksd | d d d v r|S |d }|d }t|| || }|| }||g|dd   S )Ninput	conds_outr   conds   r   )lenr%   )argsxr6   	cond_preduncond_pred	uncond_tduncond_pred_tdr#   r#   r$   tangential_damping_cfg2   s    z,TCFG.execute.<locals>.tangential_damping_cfg)clone"set_model_sampler_pre_cfg_functionr   
NodeOutput)r3   r'   mr@   r#   r#   r$   execute.   s   

zTCFG.executeN)__name__
__module____qualname__classmethodr4   rE   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 )TcfgExtensionr   c                    s   t gS N)r&   )selfr#   r#   r$   get_node_listD   s   zTcfgExtension.get_node_listN)	rF   rG   rH   r   listtyper   	ComfyNoderM   r#   r#   r#   r$   rJ   C   s    rJ   c                      s   t  S rK   )rJ   r#   r#   r#   r$   comfy_entrypointK   s   rQ   )typing_extensionsr   r   comfy_api.latestr   r   Tensorr%   rP   r&   rJ   rQ   r#   r#   r#   r$   <module>   s   %