
    
3j.                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	J
r
  SSKJr  SSKJr  S/rS/rSr " S	 S
\R$                  R&                  5      r\" SS9 " S S5      5       r\" SS9 " S S5      5       rg)    N)AutoModelForCausalLMAutoProcessorAutoTokenizer   )
comfy_node)generate_cinematic_promptzunsloth/Llama-3.2-3B-Instructz*MiaoshouAI/Florence-2-large-PromptGen-v2.0LLMc                   X   ^  \ rS rSrS\S\S\S\4U 4S jjrS r\	S 5       r
S	 rS
rU =r$ )PromptEnhancer   image_caption_processorimage_caption_model	llm_modelllm_tokenizerc                    > [         TU ]  5         Xl        X l        X0l        X@l        UR                  U l        U R                  U R                  5      U R                  U R                  5      -   S-   U l        g )Ni   @)	super__init__r   r   r   r   deviceget_model_size
model_size)selfr   r   r   r   	__class__s        S/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-LTXVideo/prompt_enhancer_nodes.pyr   PromptEnhancer.__init__   sp     	'>$#6 "*)00  8 89!!$..12 	    c           
      t    [        U R                  U R                  U R                  U R                  UUUS9nU$ )N)max_new_tokens)r   r   r   r   r   )r   promptimage_conditioningmax_resulting_tokensenhanced_prompts        r   forwardPromptEnhancer.forward)   s?    3$$((NN/
 r   c                     [        S U R                  5        5       5      nU[        S U R                  5        5       5      -  nU$ )Nc              3   b   #    U  H%  oR                  5       UR                  5       -  v   M'     g 7fNnumelelement_size).0ps     r   	<genexpr>0PromptEnhancer.get_model_size.<locals>.<genexpr>8   s"     R?Q!Q^^%55?Q   -/c              3   b   #    U  H%  oR                  5       UR                  5       -  v   M'     g 7fr&   r'   )r*   bs     r   r,   r-   9   s      P1'')ann&66r.   )sum
parametersbuffers)model
total_sizes     r   r   PromptEnhancer.get_model_size6   s<    Ru?O?O?QRR
cPPPP
r   c                     U R                   $ r&   )r   )r   input_shapes     r   memory_requiredPromptEnhancer.memory_required<   s    r   )r   r   r   r   r   r   )__name__
__module____qualname____firstlineno__r   r   r   r   r"   staticmethodr   r9   __static_attributes____classcell__)r   s   @r   r   r      sQ    
!.
 2
 (	

 %
(  
 r   r   LTXVPromptEnhancerLoader)namec                   X    \ rS rSr\S 5       rSrSrSrSr	Sr
SrS	rS
 rS rS rS rSrg)rB   @   c                 4    SS[         SS.4S[        SS.4S.0$ )NrequiredSTRINGz/The hugging face name of the llm model to load.)defaulttooltipz<The hugging face name of the image captioning model to load.)llm_nameimage_captioner_name)LLM_NAMEIMAGE_CAPTIONERss    r   INPUT_TYPES$LTXVPromptEnhancerLoader.INPUT_TYPESB   s>     #+#T #2#a)
 	
r   LTXV_PROMPT_ENHANCER)prompt_enhancerloadlightricks/LTXVz!LTXV Prompt Enhancer (Down)LoaderFzyDownloads and initializes LLM and image captioning models from Hugging Face to enhance text prompts for image generation.c                    [         R                  R                  [        R                  [
        5      n[         R                  " USS9  UR                  SS5      S   n[         R                  R                  X#5      n[         R                  R                  U5      (       d  SSK	J
n   U" UUSS	9  U$ U$ ! [         a    [        R                  " USS
9  e f = f)NT)exist_ok/r   r   )snapshot_downloadF)repo_id	local_dirlocal_dir_use_symlinks)ignore_errors)ospathjoinfolder_paths
models_dirMODELS_PATH_KEYmakedirsrsplitexistshuggingface_hubr\   	Exceptionshutilrmtree)r   
model_namemodel_directorymodel_name_
model_pathr\   s         r   model_path_download_if_needed6LTXVPromptEnhancerLoader.model_path_download_if_needed_   s    '',,|'>'>P
Od3 ''Q/3WW\\/?
ww~~j))9!&(+0 z  j=s   'B3 3!Cc                     U R                  U5      n[        R                  " U[        R                  S9n[
        R                  " U5      nXE4$ )N)torch_dtype)rr   r   from_pretrainedtorchbfloat16r   )r   rK   load_devicerq   r   r   s         r   down_load_llm_model,LTXVPromptEnhancerLoader.down_load_llm_modelt   sL    77A
(88
	
 &55
 ''r   c                 ~    U R                  U5      n[        R                  " USS9n[        R                  " USS9nXE4$ )NT)trust_remote_code)rr   r   rv   r   )r   image_captionerry   rq   r   r   s         r   down_load_image_captioner2LTXVPromptEnhancerLoader.down_load_image_captioner   sK    77H
2BB$
 #0"?"?$#
 #;;r   c                 &   [         R                  R                  5       n[         R                  R                  5       nU R	                  X5      u  pVU R                  X#5      u  px[        XXV5      n	[         R                  R                  U	UU5      n
U
4$ r&   )	comfymodel_managementget_torch_devicevae_offload_devicerz   r   r   model_patcherModelPatcher)r   rK   rL   ry   offload_devicer   r   r   r   enhancerpatchers              r   rV   LTXVPromptEnhancerLoader.load   s    ,,==?//BBD#'#;#;H#R 	7;7U7U 8
4 "#)
 %%22

 zr    N)r;   r<   r=   r>   classmethodrQ   RETURN_TYPESRETURN_NAMESFUNCTIONCATEGORYTITLEOUTPUT_NODEDESCRIPTIONrr   rz   r   rV   r@   r   r   r   rB   rB   @   sP    
 
( -L'LH H/EK NK*(
<r   LTXVPromptEnhancerc                       \ rS rSr\S 5       rSrSrSrSr	Sr
SrS	r  SS\R                  R                  S\R"                  4S jjrSrg
)r      c                 $    SSSSSSS.4S.S	S
0S.$ )NrH   rS   INT       i   )rI   minmax)r   rU   r    image_prompt)IMAGE)rG   optionalr   rO   s    r   rQ   LTXVPromptEnhancer.INPUT_TYPES   s7     &#< #Bs;) 

 	
r   r   )strenhancerW   zLTXV Prompt EnhancerFzEnhances text prompts for image generation using LLMs. Optionally incorporates reference images to create more contextually relevant descriptions.NrU   r   c                 X   [         R                  R                  UR                  / 5      [         R                  R	                  5       5        [         R                  R                  U5        UR                  nS nUb!  UR                  SSSS5      S S S 24   nUSS4/nU" XU5      nUS   4$ )N   r   r      g      ?)r   r   free_memoryr9   r   load_model_gpur4   permute)	r   r   rU   r   r    r4   r   permuted_imager!   s	            r   r   LTXVPromptEnhancer.enhance   s     	**++B/""335	
 	--o>%%!#)11!Q1=dAgFN#11c":!;<PQ"$$r   r   )Nr   )r;   r<   r=   r>   r   rQ   r   r   r   r   r   r   r   r   r   r   rw   Tensorr   r@   r   r   r   r   r      su    
 
 LLH H"EK	f  &* % ,,99% ll	% %r   )ra   rl   comfy.model_managementr   comfy.model_patcherrd   rw   transformersr   r   r   nodes_registryr   prompt_enhancer_utilsr   rM   rN   rf   nnModuler   rB   r   r   r   r   <module>r      s    	      K K & <+,?@)UXX__ )X +,\ \ -\~ %&/% /% '/%r   