o >g~@sddlZddlZddlmZddlmZddlmZddlZ ddl Z ddl Z ej Z GdddZ GdddZGd d d ZGd d d ZGd ddZe eeeedZdS)N)args)Image)PngInfoc@,eZdZeddZdZdZdZddZdS) ImageCropc CsLdddddtddfdddtddfdddtddfdddtddfdiS) NrequiredIMAGEINTidefaultminmaxstepr)imagewidthheightxy)MAX_RESOLUTIONsrC/home/comdoleger1/zen-flux-style-shape/comfy_extras/nodes_images.py INPUT_TYPESs zImageCrop.INPUT_TYPESrcropzimage/transformc Cs^t||jdd}t||jdd}||}||}|dd||||ddf}|fS)Nr )rshape) selfrrrrrto_xto_yimgrrrrs  zImageCrop.cropN) __name__ __module__ __qualname__ classmethodr RETURN_TYPESFUNCTIONCATEGORYrrrrrrs  rc@r) RepeatImageBatchcCsdddddddfdiS)Nrrr r r rr)ramountrrrrrr%szRepeatImageBatch.INPUT_TYPESrrepeat image/batchcCs||dddf}|fS)Nr )r.)rrr-rrrrr./szRepeatImageBatch.repeatN) r#r$r%r&rr'r(r)r.rrrrr*$s  r*c@r) ImageFromBatchcCs(dddddddfdddddfd iS) Nrrr rir,r r+)r batch_indexlengthrrrrrr4szImageFromBatch.INPUT_TYPESr frombatchr/cCsF|}t|jdd|}t|jd||}||||}|fS)Nrr )rrclone)rrr1r2s_inrrrrr3?s zImageFromBatch.frombatchN) r#r$r%r&rr'r(r)r3rrrrr03s  r0c@sFeZdZddZddddZeddZd Zd Zd Z d Z dddZ d S)SaveAnimatedWEBPcCt|_d|_d|_dSNoutput folder_pathsget_output_directory output_dirtype prefix_appendrrrr__init__G  zSaveAnimatedWEBP.__init__r)r ZfastestZslowestc CsTddddifdddddd fd dd ifd d dddft|jfdddddS)NrSTRINGr ComfyUIFLOAT@{Gz?@@r BOOLEANTr Prdr,)imagesfilename_prefixfpslosslessqualitymethodPROMPT EXTRA_PNGINFOprompt extra_pnginforhidden)listmethodskeysrrrrrMs  zSaveAnimatedWEBP.INPUT_TYPESr save_imagesTimage/animationNc  Cs|j|}||j7}t||j|djd|djd\} } } } }t}g}|D]}d| }t t |ddt j}||q*|d}tjs{|dur_dt||d<| dur{d}| D]}d|t| |||<|d8}qg|dkrt|}t|}td||D]9}| d | d d }||jtj| |d td |||d||||||d||| |jd| d7} q|dk}d||fdiS)Nrr o@z prompt:{}iiz{}:{}_05z_.webpTrK)save_allduration append_imagesexifrRrSrTfilename subfolderr?uirOanimated)r]getr@r<get_save_image_pathr>rr\cpunumpyr fromarraynpclipastypeuint8appendgetexifrdisable_metadataformatjsondumpslenrangesaveospathjoinintr?)rrOrQrPrRrSrT num_framesrXrYfull_output_folderrjcounterrkresults pil_imagesrir"metadataZ inital_exifrcfilernrrrr_bs@  0   @ zSaveAnimatedWEBP.save_images)rNN) r#r$r%rBr]r&rr'r( OUTPUT_NODEr)r_rrrrr6Fs   r6c@s:eZdZddZeddZdZdZdZdZ d d d Z d S)SaveAnimatedPNGcCr7r8r;rArrrrBrCzSaveAnimatedPNG.__init__cCs<ddddifdddddd fd d d d dfdddddS)NrrFr rGrHrIrJrKr r rDr r,)rOrPrQcompress_levelrUrVrWrZrrrrrrs zSaveAnimatedPNG.INPUT_TYPESrr_Tr`rGNc Csv||j7}t||j|djd|djd\}}} } }t} g} |D]} d| }t t |dd t j }| |q$d}tjst}|dure|jddddd t|ddd d |dur|D]}|jd|ddd t||ddd d qk|d | d d}| djtj||||d td|| ddd| || |jdd| ddiS)Nrr rarbscomfrXzlatin-1strictT) after_idatrcrdz_.pngrK)pnginforrerfrgrirl)Trm)r@r<rpr>rr\rqrrrrsrtrurvrwrxrrzraddencoder|r}rrrrrr?)rrOrQrrPrXrYrrjrrkrrrrr"rrrrrrr_s0 0 .44zSaveAnimatedPNG.save_images)rGNN) r#r$r%rBr&rr'r(rr)r_rrrrrs  r)rr*r0r6r)nodesr<comfy.cli_argsrPILrZPIL.PngImagePluginrrrrtr|rrrr*r0r6rNODE_CLASS_MAPPINGSrrrrs(   B6