
    +j1=                     v   S SK Jr  S SKJr  S SKJrJrJr  S SKJ	r	J
r
JrJr  S SKJrJrJrJrJr  S\S\S\\   S	-  4S
 jrS rS\S\S	-  4S jrS\SS	4S jrS\\   S\\   4S jr " S S\R:                  5      r " S S\R:                  5      r " S S\R:                  5      r  " S S\5      r!S\!4S jr"g	)    )BytesIO)override)IOComfyExtensionInput)ReveImageCreateRequestReveImageEditRequestReveImageRemixRequestRevePostprocessingOperation)ApiEndpointbytesio_to_image_tensorsync_op_rawtensor_to_base64_stringvalidate_stringupscaleremove_backgroundreturnNc                     / nU S   S:X  a  UR                  [        SU S   S95        U(       a  UR                  [        SS95        U=(       d    S $ )Nr   enabledupscale_factor)processr   r   )r   )appendr   )r   r   opss      :/home/wildlama/comfy/ComfyUI/comfy_api_nodes/nodes_reve.py_build_postprocessingr      sV    
CyY&

'!&'78	
 

.7JKL;$    c                  <   [         R                  R                  S[         R                  R                  S/ 5      [         R                  R                  S[         R                  R                  SSSSSSS	9/5      /S
S9[         R
                  R                  SSSS9/$ )Nr   disabledr   r            zUpscale factor (2x, 3x, or 4x).)defaultminmaxsteptooltipz5Upscale the generated image. May add additional cost.optionsr&   r   FzHRemove the background from the generated image. May add additional cost.)r"   r&   )r   DynamicCombor   OptionIntBoolean r   r   _postprocessing_inputsr.   #   s    
&&z26&&,$% ! !!"$E % 	  L% 	 	
( 	

^ 	 	
+ r   headersc                 H    U R                  S5      nUb  [        U5      S-  $ g )Nzx-reve-credits-usedgp=
c@)getfloat)r/   credits_useds     r   _reve_price_extractorr4   A   s*    ;;45L\"V++r   c                     U R                  S5      nU(       a  [        SU 35      eU R                  SS5      R                  5       S:X  a  [        S5      eg )Nzx-reve-error-codezReve API error: zx-reve-content-violation truez=The generated image was flagged for content policy violation.)r1   
ValueErrorlower)r/   
error_codes     r   _reve_response_header_validatorr;   H   sV    01J+J<899{{-r288:fDXYY Er   versionsaspect_ratiosc                     U  Vs/ s Hc  n[         R                  R                  U[         R                  R	                  SUSS9[         R
                  R	                  SSSSSSSS	9/5      PMe     sn$ s  snf )
Naspect_ratioz!Aspect ratio of the output image.r'   test_time_scalingr!      z:Higher values produce better images but cost more credits.T)r"   r#   r$   r%   r&   advanced)r   r)   r*   Combor   r+   )r<   r=   versions      r   _model_inputsrE   P   s    *  )(  G' 	")?  
 'X!  	
&  )  s   A*A2c                   d    \ rS rSr\S 5       r\S\S\S\S\S\	S\
R                  4S	 j5       rS
rg)ReveImageCreateNodei   c                 @   [         R                  " SSSS[         R                  R                  SSSSS	9[         R                  R                  S
[        S// SQS9SS9/[        5       Q[         R                  R                  SSSSSSS9P[         R                  R                  5       /[         R                  R                  [         R                  R                  [         R                  R                  /S[         R                  " [         R                  " SS/S9SS9S9	$ )NrG   zReve Image Createpartner/image/Revez2Generate images from text descriptions using Reve.promptTr6   z?Text description of the desired image. Maximum 2560 characters.	multiliner"   r&   modelzreve-create@20250915)3:216:99:162:34:33:41:1r=   z$Model version to use for generation.r'   seedr   _Seed controls whether the node should re-run; results are non-deterministic regardless of seed.r"   r#   r$   control_after_generater&   r   upscale.upscale_factorwidgetsa6  
                (
                    $factor := $lookup(widgets, "upscale.upscale_factor");
                    $fmt := {"approximate": true, "note": "(base)"};
                    widgets.upscale = "enabled" ? (
                        $factor = 4 ? {"type": "usd", "usd": 0.0762, "format": $fmt}
                        : $factor = 3 ? {"type": "usd", "usd": 0.0591, "format": $fmt}
                        : {"type": "usd", "usd": 0.0457, "format": $fmt}
                    ) : {"type": "usd", "usd": 0.03432, "format": $fmt}
                )
                
depends_onexpr	node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaStringr   r)   rE   r.   r+   ImageOutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgePriceBadgeDependsclss    r   define_schema!ReveImageCreateNode.define_schemak   s#   yy),)L		"]	    %%)/0&Y C &  ()  "+/H  !4 XX__&'		..		++		##
 //&(@A
	M6
 6	
r   rK   rN   r   r   rW   r   c                    #    [        USSS9  [        U [        SSSS0S9S	[        [        [        UUS
   US   US   [        X45      S9S9I S h  vN n[        R                  " [        [        U5      5      5      $  N,7f)Nr!    
  
min_length
max_lengthz/proxy/reve/v1/image/createPOSTAccept
image/webppathmethodr/   Tr?   rN   r@   )rK   r?   rD   r@   postprocessing	as_binaryprice_extractorresponse_header_validatordata)r   r   r   r4   r;   r   r   r   
NodeOutputr   r   )rw   rK   rN   r   r   rW   responses          r   executeReveImageCreateNode.execute   s      	1>$2!<0
 1&E'">2g"'(;"<4WP
 
$ }}4WX5FGHH%
s   AA>A<-A>r-   N)__name__
__module____qualname____firstlineno__classmethodrx   strdictboolintr   r   r   __static_attributes__r-   r   r   rG   rG   i   so    7
 7
r II I 	I
  I I 
I Ir   rG   c                   |    \ rS rSr\S 5       r\S\R                  S\S\	S\	S\
S\S	\R                  4S
 j5       rSrg)ReveImageEditNode   c                 |   [         R                  " SSSS[         R                  R                  SSS9[         R                  R                  SS	S
SS9[         R
                  R                  S[        SS// SQS9SS9/[        5       Q[         R                  R                  SSSSS	SS9P[         R                  R                  5       /[         R                  R                  [         R                  R                  [         R                  R                  /S	[         R                  " [         R                  " / SQS9SS9S9	$ )Nr   zReve Image EditrJ   z:Edit images using natural language instructions with Reve.imagezThe image to edit.)r&   edit_instructionTr6   zCText description of how to edit the image. Maximum 2560 characters.rL   rN   zreve-edit@20250915zreve-edit-fast@20251030autorP   rQ   rO   rR   rS   rT   rU   rV   z!Model version to use for editing.r'   rW   r   rX   rY   rZ   rN   r   r\   r]     
                (
                    $fmt := {"approximate": true, "note": "(base)"};
                    $isFast := $contains(widgets.model, "fast");
                    $enabled := widgets.upscale = "enabled";
                    $factor := $lookup(widgets, "upscale.upscale_factor");
                    $isFast
                        ? {"type": "usd", "usd": 0.01001, "format": $fmt}
                        : $enabled ? (
                            $factor = 4 ? {"type": "usd", "usd": 0.0991, "format": $fmt}
                            : $factor = 3 ? {"type": "usd", "usd": 0.0819, "format": $fmt}
                            : {"type": "usd", "usd": 0.0686, "format": $fmt}
                        ) : {"type": "usd", "usd": 0.0572, "format": $fmt}
                )
                r_   rb   )r   rl   rn   r   rm   r)   rE   r.   r+   ro   rp   rq   rr   rs   rt   ru   rv   s    r   rx   ReveImageEditNode.define_schema   s5   yy'*)Tw0DE		&"a	    %%)-/HI&a @ &   ()!" "+/H  #6 XX__&'		..		++		##
 //J	O;
 ;	
r   r   r   rN   r   r   rW   r   c                 J  #    [        USSS9  US   nUS   n[        U [        SSSS	0S
9S[        [        [        U[        U5      US:w  a  UOS US   U(       a  US:  a  UOS [        XE5      S9S9I S h  vN n	[        R                  " [        [        U	5      5      5      $  N,7f)Nr!   r{   r|   r@   r?   z/proxy/reve/v1/image/editr   r   r   r   Tr   rN   )r   reference_imager?   rD   r@   r   r   )r   r   r   r4   r;   r	   r   r   r   r   r   r   )
rw   r   r   rN   r   r   rW   ttsarr   s
             r   r   ReveImageEditNode.execute  s      	(Q4H'(>"$0!<0
 1&E%!1 7 >#%<RTg),q#d4WP
 
& }}4WX5FGHH'
s   A2B#4B!5-B#r-   N)r   r   r   r   r   rx   r   rn   r   r   r   r   r   r   r   r   r-   r   r   r   r      s~    <
 <
| I{{I I 	I
 I  I I 
I Ir   r   c                       \ rS rSr\S 5       r\S\R                  R                  S\	S\
S\
S\S\S	\R                  4S
 j5       rSrg)ReveImageRemixNodei(  c                    [         R                  " SSSS[         R                  R                  S[         R                  R	                  [         R
                  R                  S5      SSS	S
9S9[         R                  R                  SSSSS9[         R                  R                  S[        SS// SQS9SS9/[        5       Q[         R                  R                  SSSSSSS9P[         R
                  R                  5       /[         R                  R                  [         R                  R                  [         R                  R                  /S[         R                   " [         R"                  " / SQS9SS 9S!9	$ )"Nr   zReve Image RemixrJ   zKCombine reference images with text prompts to create new images using Reve.reference_imagesr   image_r!      )prefixr#   r$   )templaterK   Tr6   zText description of the desired image. May include XML img tags to reference specific images by index, e.g. <img>0</img>, <img>1</img>, etc.rL   rN   zreve-remix@20250915zreve-remix-fast@20251030r   rV   z"Model version to use for remixing.r'   rW   r   rX   rY   rZ   r   r]   r   r_   rb   )r   rl   Autogrowr   TemplatePrefixrn   rm   r)   rE   r.   r+   ro   rp   rq   rr   rs   rt   ru   rv   s    r   rx    ReveImageRemixNode.define_schema*  sq   yy(+)e!!&[[77w/'	 8  "  		"<	    %%).0JK&a A & %$4 ()5$6 "+/H  7$J XX__&'		..		++		##
 //J	cE
 E	
r   r   rK   rN   r   r   rW   r   c                   #    [        USSS9  U(       d  [        S5      e/ nU H  nUR                  [        X   5      5        M!     [	        U5      S:  a  [        S5      eUS   n	US   n
[        U [        S	S
SS0S9S[        [        [        UUU
S:w  a  U
OS US   U	(       a  U	S:  a  U	OS [        XE5      S9S9I S h  vN n[        R                  " [        [        U5      5      5      $  N,7f)Nr!   r{   r|   z)At least one reference image is required.r   z'Maximum 6 reference images are allowed.r@   r?   z/proxy/reve/v1/image/remixr   r   r   r   Tr   rN   )rK   r   r?   rD   r@   r   r   )r   r8   r   r   lenr   r   r4   r;   r
   r   r   r   r   r   )rw   r   rK   rN   r   r   rW   ref_base64_listkeyr   r   r   s               r   r   ReveImageRemixNode.executes  s      	1>HII#C""#:;K;P#QR $!#FGG'(>"$1!<0
 1&E&!0#%<RTg),q#d4WP
 
& }}4WX5FGHH'
s   B<C->C+?-C-r-   N)r   r   r   r   r   rx   r   r   Typer   r   r   r   r   r   r   r-   r   r   r   r   (  s    F
 F
P &I++**&I &I 	&I
 &I  &I &I 
&I &Ir   r   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)ReveExtensioni  r   c                 ,   #    [         [        [        /$ 7fN)rG   r   r   )selfs    r   get_node_listReveExtension.get_node_list  s       
 	
s   r-   N)r   r   r   r   r   listtyper   	ComfyNoder   r   r-   r   r   r   r     s)    
T$r||*<%= 
 
r   r   c                     #    [        5       $ 7fr   )r   r-   r   r   comfy_entrypointr     s     ?s   )#ior   typing_extensionsr   comfy_api.latestr   r   r   comfy_api_nodes.apis.rever   r	   r
   r   comfy_api_nodes.utilr   r   r   r   r   r   r   r   r   r.   r2   r4   r;   r   rE   r   rG   r   r   r   r   r-   r   r   <module>r      s     & 6 6  4 D TJeEfimEm <4 EDL ZT Zd ZDI d3i 2XI",, XIvaI aIHrI rIj
N 
 r   