o
    i,                     @   s   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZmZ d dlm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 )    )BytesIO)override)IOComfyExtension)QuiverImageObjectQuiverImageToSVGRequestQuiverSVGResponseQuiverTextToSVGRequest)ApiEndpointsync_opupload_image_to_comfyapivalidate_string)SVGc                   @   sJ   e Zd Zedd Ze		ddededededej	j
d	ejfd
dZdS )QuiverTextToSVGNodec                 C   s  t jddddt jjddddd	t jjd
dddddt jjdt jjt jddddddddt jjdt jdt j	jdddddt j
jdddt j	jdddddt j
jd ddt j	jd!dd"ddt j
jd#ddggd$d%t jjd&ddd'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Quiver Text to SVGapi node/image/Quiverz3Generate an SVG from a text prompt using Quiver AI.promptT z+Text description of the desired SVG output.)	multilinedefaulttooltipinstructionsz(Additional style or formatting guidance.)r   r   r   optionalreference_imagesimageref_r      )prefixminmaxz1Up to 4 reference images to guide the generation.)templater   r   modelarrow-previewtemperature      ?               @皙?6Randomness control. Higher values increase randomness.r   r   r   stepdisplay_moder   advancedtop_p皙?Nucleus sampling parameter.presence_penalty       Token presence penalty.z Model to use for SVG generation.optionsr   seed`Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.r   r   r   control_after_generater   {"type":"usd","usd":0.429}expr	node_iddisplay_namecategorydescriptioninputsoutputshiddenis_api_nodeprice_badge)r   SchemaStringInputAutogrowTemplatePrefixImageDynamicComboOptionFloatNumberDisplaysliderIntr   OutputHiddenauth_token_comfy_orgapi_key_comfy_org	unique_id
PriceBadgecls rZ   :/mnt/c/Users/fbmor/ComfyUI/comfy_api_nodes/nodes_quiver.pydefine_schema   s   


%)Mz!QuiverTextToSVGNode.define_schemaNr   r    r4   r   r   returnc                    s   t |ddd d }|r/g }|D ]}t| || I d H }|t|d qt|dkr/td|r5| nd }	|	dkr=d }	t| tdd	d
t	t
|d ||	||d|d|dddI d H }
dd |
jD }tt|S )NF   )strip_whitespace
min_lengthurlr   z'Maximum 4 reference images are allowed.r   z!/proxy/quiver/v1/svgs/generationsPOSTpathmethodr    r"   r,   r/   )r    r   r   
referencesr"   r,   r/   response_modeldatac                 S      g | ]
}t |jd qS zutf-8r   svgencode.0itemrZ   rZ   r[   
<listcomp>       z/QuiverTextToSVGNode.execute.<locals>.<listcomp>)r   r   appendr   len
ValueErrorstripr   r
   r   r	   getrj   r   
NodeOutputr   )rY   r   r    r4   r   r   rg   keyrb   instructions_valresponsesvg_datarZ   rZ   r[   executew   s:   	
zQuiverTextToSVGNode.execute)NN)__name__
__module____qualname__classmethodr\   strdictintr   rI   Typerz   r   rZ   rZ   rZ   r[   r      s&    
`r   c                	   @   s8   e Zd Zedd Zededededej	fddZ
d	S )
QuiverImageToSVGNodec                 C   s   t jddddt jjdddt jjdd	d
dt jjdt jdt jjddddddt jjdddddt j	j
dddt jjdddddt j	j
dddt jjddd ddt j	j
d!ddggd"d#t jjd$d%d%d&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Quiver Image to SVGr   z2Vectorize a raster image into SVG using Quiver AI.r   zInput image to vectorize.)r   	auto_cropFz+Automatically crop to the dominant subject.)r   r   r    r!   target_sizei      i   zSquare resize target in pixels.)r   r   r   r   r"   r#   r$   r%   r&   r'   Tr(   r,   r-   r.   r/   r0   r1   z#Model to use for SVG vectorization.r2   r4   r   r5   r6   r7   r9   r:   r<   )r   rF   rK   rH   BooleanrL   rM   rQ   rN   rO   rP   r   rR   rS   rT   rU   rV   rW   rX   rZ   rZ   r[   r\      s   

,0Ez"QuiverImageToSVGNode.define_schemar   r    r4   r]   c                    s   t | |I d H }t| tdddtt|d t|d|r|nd |d|d|d|d	d
dI d H }dd |jD }t	t
|S )Nz$/proxy/quiver/v1/svgs/vectorizationsrc   rd   r    ra   r   r"   r,   r/   )r    r   r   r   r"   r,   r/   rh   c                 S   rk   rl   rm   rp   rZ   rZ   r[   rs     rt   z0QuiverImageToSVGNode.execute.<locals>.<listcomp>)r   r   r
   r   r   r   ry   rj   r   rz   r   )rY   r   r   r    r4   	image_urlr}   r~   rZ   rZ   r[   r      s$   

zQuiverImageToSVGNode.executeN)r   r   r   r   r\   boolr   r   r   rz   r   rZ   rZ   rZ   r[   r      s    
Xr   c                   @   s(   e Zd Zedeeej  fddZdS )QuiverExtensionr]   c                    s
   t tgS N)r   r   )selfrZ   rZ   r[   get_node_list  s   zQuiverExtension.get_node_listN)	r   r   r   r   listtyper   	ComfyNoder   rZ   rZ   rZ   r[   r     s    r   r]   c                      s   t  S r   )r   rZ   rZ   rZ   r[   comfy_entrypoint"  s   r   N)ior   typing_extensionsr   comfy_api.latestr   r   comfy_api_nodes.apis.quiverr   r   r   r	   comfy_api_nodes.utilr
   r   r   r   comfy_extras.nodes_imagesr   r   r   r   r   r   rZ   rZ   rZ   r[   <module>   s     w	