o
    i0                     @   s   d dl mZ d dlmZmZmZ d dlmZmZ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mZmZmZ G dd dejZG dd dejZG d	d
 d
ejZG dd deZdefddZdS )    )override)IOComfyExtensionInput)BriaEditImageRequestBriaRemoveBackgroundRequestBriaRemoveBackgroundResponse BriaRemoveVideoBackgroundRequest!BriaRemoveVideoBackgroundResponseBriaImageEditResponseBriaStatusResponseInputModerationSettings)	ApiEndpointconvert_mask_to_imagedownload_url_to_image_tensordownload_url_to_video_outputpoll_opsync_opupload_image_to_comfyapiupload_video_to_comfyapivalidate_video_durationc                   @   s`   e Zd Zedd Ze	ddedejdededed	ed
e	dede
dejdB dejfddZdS )BriaImageEditNodec                 C   sL  t jddddt jjddgdt jdt jjd	d
dddt jjdd
ddt jjdd
dddt jjdddddt jjd
dt j	jdddddt jjddt jjdddddt jjdt j
jd t j
d!g t j
d"t jjd#d$d%t jjd&d$d%t jjd'd
d%ggd(d)t jjd*d+d
d,g
t j t jjdd-gt jjt jjt jjgd
t jd.d/d0	S )1Nr   zBria FIBO Image Editapi node/image/Briaz#Edit images using Bria latest modelmodelFIBO)optionsimagepromptT zInstruction to edit image)	multilinedefaulttooltipnegative_prompt)r   r    structured_promptzA string containing the structured edit prompt in JSON format. Use this instead of usual prompt for precise, programmatic control.seed   )r    minmaxstepdisplay_modecontrol_after_generateguidance_scale      g{Gz?z<Higher value makes the image follow the prompt more closely.)r    r'   r(   r)   r*   r!   steps2      )r    r'   r(   r)   r*   
moderationfalsetrueprompt_content_moderationFr    visual_input_moderationvisual_output_moderationModeration settingsr   r!   maskz1If omitted, the edit applies to the entire image.)r!   optional)display_namez{"type":"usd","usd":0.04}expr	node_idr=   categorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaCombor   ImageStringIntNumberDisplaynumberFloatDynamicComboOptionBooleanMaskOutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgecls r]   8/mnt/c/Users/fbmor/ComfyUI/comfy_api_nodes/nodes_bria.pydefine_schema   s   
		AzBriaImageEditNode.define_schemaNr   r   r   r"   r#   r$   r,   r/   r2   r;   returnc                    s   |s	|s	t dd }|
d urt| t|
ddI d H }t| tdddt|r'|nd |r,|nd t| |ddI d H g||r<|nd |||||	dd	|	d
d	|	dd	dtdI d H }t| td|j	 ddd t
dI d H }tt|jjI d H |jjS )Nz?One of prompt or structured_prompt is required to be non-empty.zUploading mask
wait_labelzproxy/bria/v2/image/editPOSTpathmethodUploading imager5   Fr7   r8   )instructionstructured_instructionimagesr;   r"   r,   r$   model_version	steps_numr5   visual_input_content_moderation visual_output_content_moderationdataresponse_model/proxy/bria/v2/status/re   c                 S      | j S Nstatusrr]   r]   r^   <lambda>       z+BriaImageEditNode.execute.<locals>.<lambda>status_extractorrq   )
ValueErrorr   r   r   r   r   getr   r   
request_idr   r   
NodeOutputr   result	image_urlr#   )r\   r   r   r   r"   r#   r$   r,   r/   r2   r;   mask_urlresponser]   r]   r^   executes   sF   






zBriaImageEditNode.executeru   )__name__
__module____qualname__classmethodr_   strr   rK   intfloatr   r   r   r   r]   r]   r]   r^   r      s8    
U	
r   c                	   @   :   e Zd Zedd Zedejdedede	j
fddZd	S )
BriaRemoveImageBackgroundc                 C   s   t jddddt jdt jjdt jdg t jdt jjd	d
dt jjdddggddt jjddddt jj	dddgt j
 gt jjt jjt jjgdt jddd	S )Nr   zBria Remove Image Backgroundr   z8Remove the background from an image using Bria RMBG 2.0.r   r2   r3   r4   r7   Fr6   r8   Tr9   r:   r$   r   r&   _Seed controls whether the node should re-run; results are non-deterministic regardless of seed.r    r'   r(   r*   r+   r!   z{"type":"usd","usd":0.018}r>   r@   )r   rI   rK   r   rQ   rR   rS   rM   rN   rO   rU   rV   rW   rX   rY   rZ   r[   r]   r]   r^   r_      sL   


z'BriaRemoveImageBackground.define_schemar   r2   r$   r`   c                    s   t | tdddtt| |ddI d H d|dd|dd|d	td
I d H }t| td|j ddd tdI d H }t	
t|jjI d H S )Nz+/proxy/bria/v2/image/edit/remove_backgroundrc   rd   rg   ra   Fr7   r8   )r   syncrm   rn   r$   ro   rr   rs   c                 S   rt   ru   rv   rx   r]   r]   r^   rz      r{   z3BriaRemoveImageBackground.execute.<locals>.<lambda>r|   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r\   r   r2   r$   r   r]   r]   r^   r      s(   


z!BriaRemoveImageBackground.executeN)r   r   r   r   r_   r   rK   dictr   r   r   r   r]   r]   r]   r^   r      s    
-r   c                	   @   r   )
BriaRemoveVideoBackgroundc                 C   sx   t jddddt jdt jjdg ddd	t jjd
dddt jjdddgt j gt j	j
t j	jt j	jgdt jddd	S )Nr   zBria Remove Video Backgroundzapi node/video/Briaz/Remove the background from a video using Bria. videobackground_color)
BlackWhiteGrayRedGreenBlueYellowCyanMagentaOrangez&Background color for the output video.r:   r$   r   r&   Tr   r   z7{"type":"usd","usd":0.14,"format":{"suffix":"/second"}}r>   r@   )r   rI   Videor   rJ   rM   rN   rO   rU   rV   rW   rX   rY   rZ   r[   r]   r]   r^   r_      s>   

z'BriaRemoveVideoBackground.define_schemar   r   r$   r`   c              	      s   t |dd t| tdddtt| |I d H |d|dtdI d H }t| td	|j d
dd tdI d H }t	
t|jjI d H S )Ng      N@)max_durationz+/proxy/bria/v2/video/edit/remove_backgroundrc   rd   mp4_h264)r   r   output_container_and_codecr$   ro   rr   rs   c                 S   rt   ru   rv   rx   r]   r]   r^   rz   9  r{   z3BriaRemoveVideoBackground.execute.<locals>.<lambda>r|   )r   r   r   r	   r   r   r   r   r
   r   r   r   r   	video_url)r\   r   r   r$   r   r]   r]   r^   r   #  s(   
z!BriaRemoveVideoBackground.executeN)r   r   r   r   r_   r   r   r   r   r   r   r   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 )BriaExtensionr`   c                    s   t ttgS ru   )r   r   r   )selfr]   r]   r^   get_node_list@  s
   zBriaExtension.get_node_listN)	r   r   r   r   listtyper   	ComfyNoder   r]   r]   r]   r^   r   ?  s    r   r`   c                      s   t  S ru   )r   r]   r]   r]   r^   comfy_entrypointI  s   r   N)typing_extensionsr   comfy_api.latestr   r   r   comfy_api_nodes.apis.briar   r   r   r	   r
   r   r   r   comfy_api_nodes.utilr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r]   r]   r^   <module>   s    (,
 LN
