
    +j~                     \   d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	Z
d dlZd dlmZmZmZmZmZmZ d dlmZmZmZmZmZmZ i dd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)i d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKi dLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmi dndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddZddddddddddddZddddddddddddddddZg dZd Z G d dej                  Z  G d dej                  Z! G d dej                  Z" G d dej                  Z# G d de          Z$de$fdńZ%dS )    )BytesIO)override)IOComfyExtension)ImageN)IdeogramGenerateRequestIdeogramGenerateResponseImageRequestIdeogramV3RequestIdeogramV3EditRequestIdeogramV4Request)ApiEndpointbytesio_to_image_tensordownload_url_as_bytesioresize_mask_to_imagesync_opvalidate_stringAutoAUTOz
512 x 1536RESOLUTION_512_1536z
576 x 1408RESOLUTION_576_1408z
576 x 1472RESOLUTION_576_1472z
576 x 1536RESOLUTION_576_1536z
640 x 1024RESOLUTION_640_1024z
640 x 1344RESOLUTION_640_1344z
640 x 1408RESOLUTION_640_1408z
640 x 1472RESOLUTION_640_1472z
640 x 1536RESOLUTION_640_1536z
704 x 1152RESOLUTION_704_1152z
704 x 1216RESOLUTION_704_1216z
704 x 1280RESOLUTION_704_1280z
704 x 1344RESOLUTION_704_1344z
704 x 1408RESOLUTION_704_1408z
704 x 1472RESOLUTION_704_1472z
720 x 1280RESOLUTION_720_1280z
736 x 1312RESOLUTION_736_1312z
768 x 1024RESOLUTION_768_1024z
768 x 1088RESOLUTION_768_1088z
768 x 1152RESOLUTION_768_1152z
768 x 1216RESOLUTION_768_1216z
768 x 1232RESOLUTION_768_1232z
768 x 1280RESOLUTION_768_1280z
768 x 1344RESOLUTION_768_1344z	832 x 960RESOLUTION_832_960z
832 x 1024RESOLUTION_832_1024z
832 x 1088RESOLUTION_832_1088z
832 x 1152RESOLUTION_832_1152z
832 x 1216RESOLUTION_832_1216z
832 x 1248RESOLUTION_832_1248z
864 x 1152RESOLUTION_864_1152z	896 x 960RESOLUTION_896_960z
896 x 1024RESOLUTION_896_1024z
896 x 1088RESOLUTION_896_1088z
896 x 1120RESOLUTION_896_1120z
896 x 1152RESOLUTION_896_1152z	960 x 832RESOLUTION_960_832z	960 x 896RESOLUTION_960_896z
960 x 1024RESOLUTION_960_1024z
960 x 1088RESOLUTION_960_1088z
1024 x 640RESOLUTION_1024_640z
1024 x 768RESOLUTION_1024_768z
1024 x 832RESOLUTION_1024_832z
1024 x 896RESOLUTION_1024_896z
1024 x 960RESOLUTION_1024_960z1024 x 1024RESOLUTION_1024_1024z
1088 x 768RESOLUTION_1088_768z
1088 x 832RESOLUTION_1088_832z
1088 x 896RESOLUTION_1088_896z
1088 x 960RESOLUTION_1088_960z
1120 x 896RESOLUTION_1120_896z
1152 x 704RESOLUTION_1152_704z
1152 x 768RESOLUTION_1152_768z
1152 x 832RESOLUTION_1152_832z
1152 x 864RESOLUTION_1152_864z
1152 x 896RESOLUTION_1152_896z
1216 x 704RESOLUTION_1216_704z
1216 x 768RESOLUTION_1216_768z
1216 x 832RESOLUTION_1216_832z
1232 x 768RESOLUTION_1232_768z
1248 x 832RESOLUTION_1248_832z
1280 x 704RESOLUTION_1280_704z
1280 x 720RESOLUTION_1280_720z
1280 x 768RESOLUTION_1280_768z
1280 x 800RESOLUTION_1280_800z
1312 x 736RESOLUTION_1312_736z
1344 x 640RESOLUTION_1344_640RESOLUTION_1344_704RESOLUTION_1344_768RESOLUTION_1408_576RESOLUTION_1408_640RESOLUTION_1408_704RESOLUTION_1472_576RESOLUTION_1472_640RESOLUTION_1472_704RESOLUTION_1536_512RESOLUTION_1536_576RESOLUTION_1536_640)z
1344 x 704z
1344 x 768z
1408 x 576z
1408 x 640z
1408 x 704z
1472 x 576z
1472 x 640z
1472 x 704z
1536 x 512z
1536 x 576z
1536 x 640
ASPECT_1_1
ASPECT_4_3
ASPECT_3_4ASPECT_16_9ASPECT_9_16
ASPECT_2_1
ASPECT_1_2
ASPECT_3_2
ASPECT_2_3
ASPECT_4_5
ASPECT_5_4)1:14:33:416:99:162:11:23:22:34:55:41x33x11x22x19x1616x910x1616x102x33x23x44x34x55x41x1)z1:3z3:1ru   rt   rs   rr   z10:16z16:10rw   rv   rq   rp   rx   ry   ro   )Fr   512x1536576x1408576x1472576x1536640x1344640x1408640x1472640x1536704x1152704x1216704x1280704x1344704x1408704x1472736x1312768x1088768x1216768x1280768x1344800x1280832x960832x1024832x1088832x1152832x1216832x1248864x1152896x960896x1024896x1088896x1120896x1152960x832960x896960x1024960x10881024x8321024x8961024x960	1024x10241088x7681088x8321088x8961088x9601120x8961152x7041152x8321152x8641152x8961216x7041216x7681216x8321248x8321280x7041280x7681280x8001312x7361344x6401344x7041344x7681408x5761408x6401408x7041472x5761472x6401472x7041536x5121536x5761536x640c                    K   g }| D ]=}t          |           d{V }t          |d          }|                    |           >|rt          j        |d          }nt          d          |S )zAHelper function to download and process multiple images from URLsNRGB)moder   )dimzNo valid images were processed)r   r   appendtorchcat	Exception)
image_urlsimage_tensors	image_urlimage_bytesio
img_tensorstacked_tensorss         >/home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_ideogram.pydownload_and_process_imagesr      s       M ) )	5i@@@@@@@@,]GGG
Z((((  :)Mq9998999    c                   H    e Zd Zed             Ze	 	 	 	 	 	 d
d            Zd	S )
IdeogramV1c                    t          j        ddddt           j                            dddd	          t           j                            d
dd          t           j                            dt          t                                                    ddd          t           j                            dg ddddd          t           j	                            ddddddt           j
        j        d          t           j                            ddddd          t           j	                            dddd dt           j
        j        d!          gt           j                                        gt           j        j        t           j        j        t           j        j        gdt          j        t          j        dd
g"          d#$          %	  	        S )&Nr   zIdeogram V1partner/image/Ideogramz-Generates images using the Ideogram V1 model.promptT Prompt for the image generation	multilinedefaulttooltipturboFHWhether to use turbo mode (faster generation, potentially lower quality)r   r   aspect_ratioro   z&The aspect ratio for image generation.optionsr   r   optionalmagic_prompt_optionr   ONOFFr   5Determine if MagicPrompt should be used in generationr   r   r   r   advancedseedr      r   minmaxstepcontrol_after_generatedisplay_moder   negative_prompt-Description of what to exclude from the imager   r   r   r   
num_images   r   r   r   r   r   r   widgetsz
                (
                  $n := widgets.num_images;
                  $base := (widgets.turbo = true) ? 0.0286 : 0.0858;
                  {"type":"usd","usd": $round($base * $n, 2)}
                )
                
depends_onexpr	node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaStringInputBooleanCombolistV1_V2_RATIO_MAPkeysIntNumberDisplaynumberr   OutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgePriceBadgeDependsclss    r   define_schemazIdeogramV1.define_schema   s   y &-G	"=	     
  !f !  
 " !5!5!7!788!D!    )111"S!!    "+/!#!1!8!  	 	 	%"K!      !#!1!8!   Y5n !! 	.	+	#
 /w8OPPP	 	 	IN
 N
 N
 N	
r   Fro   r   r   r   r   c                   K   t                               |d           }|rdnd}t          | t          dd          t          t          t          |||||dk    r|nd |dk    r|nd |r|nd           	          d
           d {V }	|	j        rt          |	j                  dk    rt          d          d |	j        D             }
|
st          d          t          j        t          |
           d {V           S )N	V_1_TURBOV_1/proxy/ideogram/generatePOSTpathmethodrd   r   )r   modelr  r   r   r   r  image_requestr   response_modeldatamax_retriesr   (No images were generated in the responsec                 *    g | ]}|j         	|j         S  url.0
image_datas     r   
<listcomp>z&IdeogramV1.execute.<locals>.<listcomp>`  !    WWW
WjnWWWr   ,No image URLs were generated in the response)r  getr   r   r	   r   r
   r8  lenr   r   
NodeOutputr   )r)  r   r   r   r   r   r  r  r3  responser   s              r   executezIdeogramV1.execute<  sd      '**<>>$/% 7GGG3(*!)1=1M1MSW@SW]@]@])<)<cg7F$POOD  
 
 
 
 
 
 
 
 
 
 
 
$ } 	HHM 2 2a 7 7FGGGWWx}WWW
 	LJKKK}#>z#J#JJJJJJJKKKr   N)Fro   r   r   r   r   __name__
__module____qualname__classmethodr*  rI  r<  r   r   r   r      sk        O
 O
 [O
b  "&L &L &L [&L &L &Lr   r   c                   N    e Zd Zed             Ze	 	 	 	 	 	 	 	 	 dd
            ZdS )
IdeogramV2c                 z   t          j        ddddt           j                            dddd	          t           j                            d
dd          t           j                            dt          t                                                    ddd          t           j                            dt          t                                                    ddd          t           j                            dg ddddd          t           j
                            ddddddt           j        j        d          t           j                            dg d d!d"dd          t           j                            d#ddd$d%          t           j
                            d&ddd'dt           j        j        d(          g	t           j                                        gt           j        j        t           j        j        t           j        j        gdt          j        t          j        d&d
g)          d*+          ,	  	        S )-NrP  zIdeogram V2r   z-Generates images using the Ideogram V2 model.r   Tr   r   r   r   Fr   r   r   ro   zPThe aspect ratio for image generation. Ignored if resolution is not set to AUTO.r   
resolutionr   zaThe resolution for image generation. If not set to AUTO, this overrides the aspect_ratio setting.r   r   r   r   r   r   r   r   r   r   
style_type)r   GENERAL	REALISTICDESIGN	RENDER_3DANIMENONEz#Style type for generation (V2 only)r  r  r  r  r  r  r  z
                (
                  $n := widgets.num_images;
                  $base := (widgets.turbo = true) ? 0.0715 : 0.1144;
                  {"type":"usd","usd": $round($base * $n, 2)}
                )
                r	  r  )r   r  r  r  r  r  r  r  r  V1_V1_RES_MAPr  r  r   r   r!  r"  r#  r$  r%  r&  r'  r(  s    r   r*  zIdeogramV2.define_schemah  s]   y &-G	"=	     
  !f !  
 " !5!5!7!788!n!      !3!3!5!566"[!    )111"S!!    "+/!#!1!8!  	 	  \\\"A!!    	%"K!      !#!1!8!   yM^ !! 	.	+	#
 /w8OPPP	 	 	yf
 f
 f
 f	
r   Fro   r   r   r   rY  r   r   c                 p  K   t                               |d           }t                              |d           }|rdnd}d }d }|dk    r|}n
|dk    r|nd }t          | t	          dd          t
          t          t          |||	||||dk    r|nd |dk    r|nd |r|nd |
r|
nd 	
  
        
          d           d {V }|j        rt          |j                  dk    rt          d          d |j        D             }|st          d          t          j        t          |           d {V           S )N	V_2_TURBOV_2r   rd   r.  r/  r0  rY  )
r   r3  r  r   r   rR  r   rS  r  color_paletter4  r   )endpointr7  r8  r9  r   r:  c                 *    g | ]}|j         	|j         S r<  r=  r?  s     r   rB  z&IdeogramV2.execute.<locals>.<listcomp>  rC  r   rD  )r  rE  rZ  r   r   r	   r   r
   r8  rF  r   r   rG  r   )r)  r   r   r   rR  r   r   rS  r  r  r^  r3  final_resolutionfinal_aspect_ratiorH  r   s                   r   rI  zIdeogramV2.execute  s      '**<>>"&&z488
$/%  !)1=1M1MSW  &@PPP3(*!)!3/@SW]@]@])<)<cg-76-A-Azzt7F$POOD3@"J--d     %
 
 
 
 
 
 
 
 
( } 	HHM 2 2a 7 7FGGGWWx}WWW
 	LJKKK}#>z#J#JJJJJJJKKKr   N)	Fro   r   r   r   rY  r   r   r   rJ  r<  r   r   rP  rP  f  st        g
 g
 [g
R  "6L 6L 6L [6L 6L 6Lr   rP  c                   P    e Zd Zed             Ze	 	 	 	 	 	 	 	 	 	 d
d	            ZdS )
IdeogramV3c                    t          j        ddddt           j                            dddd	          t           j                            d
dd          t           j                            ddd          t           j                            dt          t          	                                          ddd          t           j                            dt          ddd          t           j                            dg ddddd          t           j                            ddddddt           j        j        d          t           j                            d ddd!dt           j        j        d"          t           j                            d#g d$d%d&dd          t           j                            d'd(d          t           j                            d)d*d          gt           j                                        gt           j        j        t           j        j        t           j        j        gdt          j        t          j        d#d gd'g+          d,-          .	  	        S )/Nrd  zIdeogram V3r   zGenerates images using the Ideogram V3 model. Supports both regular image generation from text prompts and image editing with mask.r   Tr   z*Prompt for the image generation or editingr   imagez+Optional reference image for image editing.)r   r   maskz;Optional mask for inpainting (white areas will be replaced)r   ro   zPThe aspect ratio for image generation. Ignored if resolution is not set to Auto.r   rR  r   zaThe resolution for image generation. If not set to Auto, this overrides the aspect_ratio setting.r   r   r   r   r   r   r   r   r   r   r  r  r  rendering_speedDEFAULTTURBOQUALITYrj  z;Controls the trade-off between generation speed and qualitycharacter_imagez$Image to use as character reference.character_maskz,Optional mask for character reference image.)r  r  a:  
                (
                  $n := widgets.num_images;
                  $speed := widgets.rendering_speed;
                  $hasChar := inputs.character_image.connected;
                  $base :=
                    $contains($speed,"quality") ? ($hasChar ? 0.286 : 0.1287) :
                    $contains($speed,"default") ? ($hasChar ? 0.2145 : 0.0858) :
                    $contains($speed,"turbo") ? ($hasChar ? 0.143 : 0.0429) :
                    0.0858;
                  {"type":"usd","usd": $round($base * $n, 2)}
                )
                r	  r  )r   r  r  r  r   Maskr  r  V3_RATIO_MAPr  V3_RESOLUTIONSr  r  r   r!  r"  r#  r$  r%  r&  r'  r(  s    r   r*  zIdeogramV3.define_schema  s   y &-p 	"H	     I!   
 Y!   
 " !2!2!4!455!n!     *"[!    )111"S!!    "+/!#!1!8!  	 	  !#!1!8!    %;;;%Y!!    %B!   
 $J!   QM^ !! 	.	+	#
 /9JL8Yctbuvvv  {m
 m
 m
 m	
r   Nr   ro   r   r   r   rj  c           	      t
  K   |	dk    rd}	d }d }|
|
                                                                 }|t          ||
d          }d|z
  }|j        dd          |
j        dd         k    rt	          d          |                                                                                                 d	z                      t          j                  }t          j
        |          }t                      }|                    |d
           |                    d           |}d|_        |                                d	z                      t          j                  }t          j
        |          }t                      }|                    |d
           |                    d           |}d|_        n|t	          d          |%|"|                                                                 }t          ||d          }d|z
  }|j        dd          |j        dd         k    rt	          d          |                                d	z                      t          j                  }t          j
        |          }t                      }|                    |d
           |                    d           |}d|_        |                                                                                                 d	z                      t          j                  }t          j
        |          }t                      }|                    |d
           |                    d           |}d|_        t          ||	          }|dk    r||_        |dk    r||_        |dk    r||_        ||d}|r||d<   |r||d<   t'          | t)          dd          t*          ||dd           d {V }n||t	          d          t-          ||	          }|dk    r||_        n)|dk    r#t0                              |          }|r||_        |dk    r||_        |dk    r||_        |dk    r||_        i }|r||d<   |r||d<   |rd|_        t'          | t)          dd          t*          ||r|nd dd           d {V }|j        rt;          |j                  dk    rt	          d           d! |j        D             }|st	          d"          t=          j        tA          |           d {V           S )#NBALANCEDrj  F)allow_gradientg      ?r   z.Character mask and image must be the same size   PNG)formatr   zmask.pngz	image.pngz5Character mask requires character image to be presentz$Mask and Image must be the same size)r   rh  r   )rf  rg  character_reference_imagescharacter_mask_binaryz /proxy/ideogram/ideogram-v3/editr/  r0  zmultipart/form-data)r7  r8  filescontent_typer9  z;Ideogram V3 image editing requires both an image AND a maskr   ro   z$/proxy/ideogram/ideogram-v3/generate)r_  r7  r8  r{  r|  r9  r:  c                 *    g | ]}|j         	|j         S r<  r=  r?  s     r   rB  z&IdeogramV3.execute.<locals>.<listcomp>  rC  r   rD  )!squeezecpur   shaper   numpyastypenpuint8r   	fromarrayr   saveseeknamer   magic_promptr   r  r   r   r	   r   rR  rp  rE  r   rS  r8  rF  r   rG  r   )r)  r   rf  rg  rR  r   r   r   r  rh  rm  rn  character_img_binaryrz  input_tensormask_npmask_imgmask_byte_arrimg_npimgimg_byte_arr
img_binarymask_binaryedit_requestr{  rH  gen_request	v3_aspectr   s                                r   rI  zIdeogramV3.execute  s      j(('O# $&*224488::L)!5nofk!l!l!l!$~!5!'+/DQrT/JJJ#$TUUU)11337799??AACGOOPRPXYY ?733 '		mE:::""1%%%(5%-7%*"((**S088BBF/&))C"99LHH\%H000a   #/ (3 %%'STTT !1 ==??..00L'eEJJJD:D z!""~QrT!222 FGGG #((**S088BBF/&))C"99LHH\%H000a   %J)JO ||~~))++1133c9AA"(KKGw//H#IIMMM-M666q!!!'K)K 1 /  L #f,,,?)qyy$(!A~~*4' $# E $ K6J23$ G1F-.$!CFSSS7!2        HH $"2YZZZ , /  K V##)3&&&&(,,\::	 9/8K, #f,,+>(qyy#' A~~)3&E# K6J23$ G1F-. 0)/&$$*PY_```7 $.ee$2        H } 	HHM 2 2a 7 7FGGGWWx}WWW
 	LJKKK}#>z#J#JJJJJJJKKKr   )
NNr   ro   r   r   r   rj  NNrJ  r<  r   r   rd  rd    s}        n
 n
 [n
`  "!`L `L `L [`L `L `Lr   rd  c            	       L    e Zd Zed             Zededededefd            ZdS )
IdeogramV4c                 `   t          j        ddddt           j                            dddd	          t           j                            d
g dd          t           j                            dg ddd          t           j                            ddddddt           j        j                  gt           j        	                                gt           j
        j        t           j
        j        t           j
        j        gdt          j        t          j        dg          d          	  	        S )Nr  zIdeogram V4r   zAGenerates images using the Ideogram 4.0 model from a text prompt.r   Tr   z%Text prompt for the image generation.r   rR  )r   z2048x2048 (1:1)z1440x2880 (1:2)z2880x1440 (2:1)z1664x2496 (2:3)z2496x1664 (3:2)z1792x2240 (4:5)z2240x1792 (5:4)z1440x2560 (9:16)z2560x1440 (16:9)z1600x2560 (5:8)z2560x1600 (8:5)z1728x2304 (3:4)z2304x1728 (4:3)z1296x3168 (9:22)z3168x1296 (22:9)z1152x2944 (9:23)z2944x1152 (23:9)z1248x3328 (3:8)z3328x1248 (8:3)z1280x3072 (5:12)z3072x1280 (12:5)r   )r   r   rh  ri  rj  z<Controls the trade-off between generation speed and quality.)r   r   r   r   r   r   r   )r   r   r   r   r   r   r  aD  
                (
                  $speed := widgets.rendering_speed;
                  $price :=
                    $contains($speed,"turbo") ? 0.0429 :
                    $contains($speed,"quality") ? 0.143 :
                    0.0858;
                  {"type":"usd","usd": $price}
                )
                r	  r  )r   r  r  r  r  r  r  r   r   r!  r"  r#  r$  r%  r&  r'  r(  s    r   r*  zIdeogramV4.define_schema%  sQ   y &-[	"C	        0 #5   8 %;;;%Z	    "+/!#!1!8   S2h !! 	.	+	#
 /9J8KLLL	  CN
 N
 N
 N	
r   r   rR  rh  r   c                   K   t          |dd           t          | t          dd          t          t	          ||dk    r|                    d          d	         nd |
          d           d {V }|j        rt          |j                  d	k    rt          d          d |j        D             }|st          d          t          j
        t          |           d {V           S )NTr   )strip_whitespace
min_lengthz$/proxy/ideogram/ideogram-v4/generater/  r0  r    r   )text_promptrR  rh  r6  r:  c                 *    g | ]}|j         	|j         S r<  r=  r?  s     r   rB  z&IdeogramV4.execute.<locals>.<listcomp>  rC  r   rD  )r   r   r   r	   r   splitr8  rF  r   r   rG  r   )r)  r   rR  rh  r   rH  r   s          r   rI  zIdeogramV4.executew  s1      	!DDDD CFSSS3""7AV7K7K:++C0033QU /  
 

 

 

 

 

 

 

 

 

 } 	HHM 2 2a 7 7FGGGWWx}WWW
 	LJKKK}#>z#J#JJJJJJJKKKr   N)rK  rL  rM  rN  r*  strintrI  r<  r   r   r  r  #  s        O
 O
 [O
b LL L 	L
 L L L [L L Lr   r  c                   L    e Zd Zedeeej                          fd            ZdS )IdeogramExtensionreturnc                 :   K   t           t          t          t          gS N)r   rP  rd  r  )selfs    r   get_node_listzIdeogramExtension.get_node_list  s       	
 	
r   N)	rK  rL  rM  r   r  typer   	ComfyNoder  r<  r   r   r  r    sE        
T$r|*<%= 
 
 
 X
 
 
r   r  r  c                  "   K   t                      S r  )r  r<  r   r   comfy_entrypointr    s      r   )&ior   typing_extensionsr   comfy_api.latestr   r   PILr   r  r  r   comfy_api_nodes.apis.ideogramr   r	   r
   r   r   r   comfy_api_nodes.utilr   r   r   r   r   r   rZ  r  rp  rq  r   r  r   rP  rd  r  r  r  r<  r   r   <module>r     s;         & & & & & & / / / / / / / /                                         PP$P $P $	P
 $P $P $P $P $P $P $P $P $P $P $P  $!P" $#P P$ $%P& $'P( $)P* $+P, $-P. $/P0 $1P2 $3P4 "5P6 $7P8 $9P: $;P< $=P> $?P@ $APB "CPD $EP P PF $GPH $IPJ $KPL "MPN "OPP $QPR $SPT $UPV $WPX $YPZ $[P\ $]P^ &_P` $aPb $cPd $ePf $gP P Ph $iPj $kPl $mPn $oPp $qPr $sPt $uPv $wPx $yPz ${P| $}P~ $P@ $APB $CPD $EPF $GPH $IP PJ %$$$$$$$$$$_P P Pf 			  









 $G G GR  *{L {L {L {L {L {L {L {L|cL cL cL cL cL cL cL cLLTL TL TL TL TL TL TL TLnnL nL nL nL nL nL nL nLb
 
 
 
 
 
 
 
 1      r   