o >g1 @s ddlZddlZddlZddlZddlmZd#ddZ GdddZ Gd d d Z Gd d d Z Gd ddZ GdddZGdddZGdddZGdddZGdddZGdddZGdddZGdddZe e e e eeeeeeeed Zd d!d"ZdS)$NMAX_RESOLUTIONFcCs ||j}|rtjjj||jd|jdfdd}tj ||jd}t |jd |t ||jd|}t |jd |t ||jd|}||||}}||jd||jd} } |durlt |}n1|j|jdd}tjjj| dd |jd |jdf|jd|jdfdd}tj ||jd}|jd|t d||jd|t d|} } |ddddd| d| f}t ||} ||ddddd| d| f}| |dddd|| || f}|||dddd|| || f<|S) Nbilinear)sizemoderT)copy)todevicetorchnn functional interpolateshapecomfyutilsrepeat_to_batch_sizemaxmin ones_likereshape) destinationsourcexymask multiplier resize_sourcelefttoprightbottom visible_widthvisible_heightZ inverse_masksource_portiondestination_portionr+A/home/comdoleger1/zen-flux-style-shape/comfy_extras/nodes_mask.py composites( $&& >2 $$$r-c@.eZdZeddZdZdZdZd ddZdS) LatentCompositeMaskedc C>dddddtddfdddtddfdddifd d d id S) NLATENTINTrrdefaultrrstepBOOLEANr5Frrrrr"r MASKrequiredoptionalrsr+r+r, INPUT_TYPES+ z!LatentCompositeMasked.INPUT_TYPESr1r-latentNcCs:|}|d}|d}t|||||d||d<|fS)Nsamplesr)r cloner-selfrrrrr"r outputr+r+r,r->s  zLatentCompositeMasked.compositeN __name__ __module__ __qualname__ classmethodr@ RETURN_TYPESFUNCTIONCATEGORYr-r+r+r+r,r/*  r/c@r.) ImageCompositeMaskedc Cr0) NIMAGEr3rr r4r7r5Fr8r r9r;rr>r+r+r,r@FrAz ImageCompositeMasked.INPUT_TYPESrSr-imageNcCs:|dd}t||dd|||d|dd}|fS)Nr r )rDmovedimr-rEr+r+r,r-Ys$zImageCompositeMasked.compositerHrIr+r+r+r,rRErQrRc@,eZdZeddZdZdZdZddZdS) MaskToImagecC dddiiSNr<r r9r+r>r+r+r,r@_zMaskToImage.INPUT_TYPESr rS mask_to_imagecCs8|dd|jd|jdfdddddd}|fS)Nr r r r)rrrVexpand)rFr resultr+r+r,r\ls2zMaskToImage.mask_to_imageN) rJrKrLrMr@rPrNrOr\r+r+r+r,rX^s  rXc@rW) ImageToMaskcCsddgdfdiS)Nr<rSredgreenbluealpha)rUchannelr+r>r+r+r,r@qs zImageToMask.INPUT_TYPESr r9 image_to_maskcCs0gd}|dddddd||f}|fS)Nr`)index)rFrUrechannelsr r+r+r,rfs"zImageToMask.image_to_maskN rJrKrLrMr@rPrNrOrfr+r+r+r,r_p  r_c@rW) ImageColorToMaskc Csdddddddddfd iS) Nr<rSr3rir color)r5rrr6display)rUrlr+r>r+r+r,r@s zImageColorToMask.INPUT_TYPESr r9rfcCst|dddtj}t|dddddddfdt|dddddddfd|dddddddf}t||kdd}|fS) Nr?go@r rr)rclamproundrintbitwise_left_shiftwherefloat)rFrUrltempr r+r+r,rfsdzImageColorToMask.image_to_maskNrir+r+r+r,rkrjrkc@rW) SolidMaskc Cs:dddddddfddd td dfddd td dfd iS) Nr<FLOATrn{Gz?r4r3r )valuewidthheightrclsr+r+r,r@s zSolidMask.INPUT_TYPESr r9solidcCs tjd||f|tjdd}|fS)Nr cpu)dtyper)rfullfloat32)rFr}r~routr+r+r,rszSolidMask.solidN) rJrKrLrMr@rPrNrOrr+r+r+r,rx   rxc@rW) InvertMaskcCrYrZr+rr+r+r,r@r[zInvertMask.INPUT_TYPESr r9invertcCsd|}|fS)Nrnr+)rFr rr+r+r,rszInvertMask.invertN) rJrKrLrMr@rPrNrOrr+r+r+r,rs  rc@rW) CropMaskc CsLdddddtddfdddtddfdddtddfdddtddfdiS) Nr<r9r3rr r4r|)r rrr~rrrr+r+r,r@zCropMask.INPUT_TYPESr r9cropcCsD|d|jd|jdf}|dd||||||f}|fS)Nr r )rr)rFr rrr~rrr+r+r,rs"z CropMask.cropN) rJrKrLrMr@rPrNrOrr+r+r+r,r   rc@rW) MaskCompositec Cs6ddddddtddfdddtddfgdfdiS) Nr<r9r3rr r4)multiplyaddsubtractandorxor)rrrr operationrrr+r+r,r@szMaskComposite.INPUT_TYPESr r9combinecCs |d|jd|jdf}|d|jd|jdf}||}}t||jd|jdt||jd|jd} } | || |} } |ddd| d| f} |dd|| || f}|dkru|| |dd|| || f<n|dkr|| |dd|| || f<ns|dkr|| |dd|| || f<n_|dkrt|| |dd|| || f<n?|dkrt || |dd|| || f<n|dkrt || |dd|| || f<t |d d }|fS) Nr r rrrrrrrzrn) rrrDrr bitwise_andrrboolrv bitwise_or bitwise_xorrq)rFrrrrrrGr#r$r%r&r'r(r)r*r+r+r,rs*  6   886zMaskComposite.combineN) rJrKrLrMr@rPrNrOrr+r+r+r,rrrc@rW) FeatherMaskc CsLdddddtddfdddtddfdddtddfdddtddfdiS)Nr<r9r3rr r4)r r#r$r%r&rrr+r+r,r@ rzFeatherMask.INPUT_TYPESr r9featherc CsJ|d|jd|jdf}t||jd}t||jd}t||jd}t||jd}t|D]}|d|}|dddd|f|9<q4t|D]}|d|}|dddd| f|9<qPt|D]} | d|}|dd| ddf|9<qmt|D]} | d|}|dd| ddf|9<q|fS)Nr r rnr )rrrDrrange) rFr r#r$r%r&rGrZ feather_raterr+r+r,rs$      "     "zFeatherMask.featherN) rJrKrLrMr@rPrNrOrr+r+r+r,rrrc@rW) GrowMaskcCs(ddddt tddfddd ifd iS) Nr<r9r3rr r4r7r5T)r r]tapered_cornersrrr+r+r,r@6s  zGrowMask.INPUT_TYPESr r9 expand_maskc Cs|rdnd}t|d|ggd|d|gg}|d|jd|jdf}g}|D].}|}tt|D]} |dkrCtjj ||d}q4tjj ||d}q4t |}| |q(t j|ddfS)Nrr )r r r r r ) footprint)dim)nparrayrrnumpyrabsscipyndimage grey_erosion grey_dilationr from_numpyappendstack) rFr r]rckernelrmrG_r+r+r,rFs    zGrowMask.expand_maskN) rJrKrLrMr@rPrNrOrr+r+r+r,r5rrc@rW) ThresholdMaskcCsddddddddfd iS) Nr<r9ryg?rzrnr{r4)r r}r+r>r+r+r,r@Ys zThresholdMask.INPUT_TYPESr r9rfcCs||k}|fSrH)rv)rFr r}r+r+r,rfgs zThresholdMask.image_to_maskNrir+r+r+r,rXrjr) r/rRrXr_rkrxrrrrrrzConvert Image to MaskzConvert Mask to Image)r_rX)NrF)rr scipy.ndimagerr comfy.utilsrnodesrr-r/rRrXr_rkrxrrrrrrNODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSr+r+r+r,sD  "/-#