§
     ’Þjµ  ã                   ó¤  — d dl Z d dlZd dlZd dlmZ d dlmc mZ	 d dl
mc mZ d dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlmZ ddlmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z& dd	l'm(Z(m)Z)m*Z* d dlmZ g a+d
e,fd„Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d dlZd dl5m5Z5 d„ Z6dZd„Z7d[d„Z8d„ Z9dej:        fd„Z;ej<        fd„Z=d\d„Z>ej<        fd„Z?d ej@        ¦   «         d z  d!fd"e,fd#„ZAd]d%„ZB ed&¬'¦  «        d(„ ¦   «         ZCd)„ ZD ed&¬'¦  «        d*„ ¦   «         ZEd+„ ZFd^d,eGd-e,d.eHd/ejI        fd0„ZJd1„ ZKd[d2„ZLd3„ ZMdZNd_d5„ZOd[d6„ZPd7„ ZQd`d8„ZRdad;„ZSdbd=„ZTd>„ ZUdZd?„ZVd@„ ZWdZdA„ZXdZdB„ZYdcdD„ZZdE„ Z[dF„ Z\dddH„Z]dI„ Z^d^dJ„Z_dedK„Z`dfdM„ZadgdN„ZbdhdO„Zcd\dddPœdQ„Zdd\dR„Zed dddddSd!d g dT¢d d!fdddPœdU„ZfdidV„ZgdWdXd!d!dSg g dddd dfdY„ZhdS )jé    N)ÚImage)Úremove)Ú	lru_cacheé   )Úfiles_locator)Úprobe_video_stream_metadataÚdecode_video_frames_ffmpegÚget_video_summary_extras)Úget_virtual_imageÚparse_virtual_media_pathÚstrip_virtual_media_suffix)ÚMESH_EXTENSIONSÚMESH_IMPORT_EXTENSIONSÚWORLD_EXTENSIONSÚseedc                 ó–  — t          j        | ¦  «         t          j                              | ¦  «         t          j        | ¦  «         t          j                             ¦   «         rt          j                             | ¦  «         t          j        j                             ¦   «         r!t          j                             | ¦  «         d S d S ©N)	Úrandomr   ÚnpÚtorchÚmanual_seedÚcudaÚis_availableÚbackendsÚmps)r   s    ú:C:\Users\johnn\OneDrive\Documents\AI\shared\utils\utils.pyÚseed_everythingr      s¢   € Ý
„K�ÑÔÐÝ„I‡N‚N�4ÑÔÐÝ	Ô�dÑÔÐÝ„z×ÒÑ Ô ð %ÝŒ
×Ò˜tÑ$Ô$Ð$Ý„~Ô×&Ò&Ñ(Ô(ð $ÝŒ	×Ò˜dÑ#Ô#Ð#Ð#Ð#ð$ð $ó    c                 ó–   — t          | ¦  «        } t          j                             | ¦  «        d                              ¦   «         }|dv S )Néÿÿÿÿ)ú.mp4z.mkvz.aviz.mov©r   ÚosÚpathÚsplitextÚlower©ÚfilenameÚ	extensions     r   Úhas_video_file_extensionr*   &   sA   € Ý)¨(Ñ3Ô3€HÝ”× Ò  Ñ*Ô*¨2Ô.×4Ò4Ñ6Ô6€IØÐ8Ð8Ð8r   c                 ó–   — t          | ¦  «        } t          j                             | ¦  «        d                              ¦   «         }|dv S )Nr    )
z.pngz.jpgz.jpegz.bmpz.gifz.webpz.tifz.tiffz.jfifz.pjpegr"   r'   s     r   Úhas_image_file_extensionr,   +   sA   € Ý)¨(Ñ3Ô3€HÝ”× Ò  Ñ*Ô*¨2Ô.×4Ò4Ñ6Ô6€IØÐnÐnÐnr   c                 ó–   — t          | ¦  «        } t          j                             | ¦  «        d                              ¦   «         }|dv S )Nr    )z.wavz.mp3z.aacz.flacr"   r'   s     r   Úhas_audio_file_extensionr.   0   sA   € Ý)¨(Ñ3Ô3€HÝ”× Ò  Ñ*Ô*¨2Ô.×4Ò4Ñ6Ô6€IØÐ9Ð9Ð9r   c                 ó˜   — t           j                             t          | ¦  «        ¦  «        d                              ¦   «         t
          v S ©Nr    )r#   r$   r%   r   r&   r   ©r(   s    r   Úhas_mesh_file_extensionr2   6   s8   € ÝŒ7×ÒÕ6°xÑ@Ô@ÑAÔAÀ"ÔE×KÒKÑMÔMÕQ`Ð`Ð`r   c                 ó˜   — t           j                             t          | ¦  «        ¦  «        d                              ¦   «         t
          v S r0   )r#   r$   r%   r   r&   r   r1   s    r   Úhas_world_file_extensionr4   9   s8   € ÝŒ7×ÒÕ6°xÑ@Ô@ÑAÔAÀ"ÔE×KÒKÑMÔMÕQaÐaÐar   c                 ó„   — dt           fdt          fdt          fdt          fdt          ffD ]\  }} || ¦  «        r|c S ŒdS )zJ"image", "video", "audio", "3d", "world" or None, from the file extension.ÚvideoÚimageÚaudioÚ3dÚworldN)r*   r,   r.   r2   r4   )r(   ÚkindÚtests      r   Úget_media_kindr=   <   sz   € àÕ!9Ð:¸WÕF^Ð<_Ðbiõ  lDð  bEð  HLõ  Neð  GfØÕ!9Ð:ð<ð ð ‰
ˆˆdàˆ4�‰>Œ>ð 	ØˆKˆKˆKð	àˆ4r   c                 óŒ  — dd l }dt          | d¦  «        z  }dt          |d¦  «        z  }||z  } |j        ||z  ¦  «        }	|	|z  }
g }	 |dk    rt          |¦  «        |k    rnUt          ||
z
  |z  d¦  «        } |j        |¦  «        }|	|z  }	|	|k    rn#|                     |	¦  «         |
||z  z  }
||z  }Œo|d |…         }|S )Nr   r   Té   )ÚmathÚroundÚceilÚlenÚappend)Ú	video_fpsÚvideo_frames_countÚmax_target_frames_countÚ
target_fpsÚstart_target_framer@   Úvideo_frame_durationÚtarget_frame_durationÚtarget_timeÚframe_noÚcur_timeÚ	frame_idsÚdiffÚadd_frames_counts                 r   ÚresamplerR   D   s  € Ø€K€K€Kà�e I¨qÑ1Ô1Ñ1ÐØ¥ j°!Ñ 4Ô 4Ñ4Ðà$Ð'<Ñ<€KØˆtŒy˜Ð';Ñ;Ñ<Ô<€HØÐ.Ñ.€HØ€Ið
-Ø" aÒ'Ð'­C°	©N¬NÐ>UÒ,UÐ,UØÝ�{ HÑ,Ð0DÑDÀqÑIÔIˆØ$˜4œ9 dÑ+Ô+ÐØÐ$Ñ$ˆØÐ)Ò)Ð)ØØ×Ò˜Ñ"Ô"Ð"ØÐ$Ð';Ñ;Ñ;ˆØÐ,Ñ,ˆð
-ð Ð2Ð2Ð2Ô3€IØÐr   )Údatetimec                 ó  — t           j        dk    r1t          j        t           j                             | ¦  «        ¦  «        S t          j        | ¦  «        }t          j        t          |d¦  «        r|j        n|j	        ¦  «        S )NÚntÚst_birthtime)
r#   ÚnamerS   Úfromtimestampr$   ÚgetctimeÚstatÚhasattrrV   Úst_mtime)Ú	file_pathrZ   s     r   Úget_file_creation_dater^   _   sk   € å	„w�$‚€ÝÔ%¥b¤g×&6Ò&6°yÑ&AÔ&AÑBÔBÐBõ Œw�yÑ!Ô!ˆÝÔ!µw¸tÀ^Ñ7TÔ7TÐ"g $Ô"3Ð"3ÐZ^ÔZgÑhÔhÐhr   Ú c                 óF   ‡— d                      ˆfd„| D ¦   «         ¦  «        S )Nr_   c              3   óN   •K  — | ]}t          |¦  «        d k     s|dv r‰n|V — Œ dS )é    z	/\*:|?<>"N)Úord)Ú.0ÚcharÚreps     €r   ú	<genexpr>z%sanitize_file_name.<locals>.<genexpr>i   s?   øè è € ÐaÐaÈt�#˜d™)œ) bš.˜.¨D°LÐ,@Ð,@�3�3ÀdÐaÐaÐaÐaÐaÐar   )Újoin)Ú	file_namerf   s    `r   Úsanitize_file_namerj   h   s+   ø€ Ø�7Š7ÐaÐaÐaÐaÐW`ÐaÑaÔaÑaÔaÐar   c                 óN  — |€t           j        dk    rdnd}t          |                      d¦  «        ¦  «        |k    r| S dt          | ¦  «        }}||k     rG||z   dz   dz  }t          | d |…                              d¦  «        ¦  «        |k    r|}n|dz
  }||k     °G| d |…         S )NrU   é2   éd   zutf-8r   r   é   )r#   rW   rC   Úencode)ÚsÚ	max_bytesÚlÚrÚms        r   Útruncate_for_filesystemru   k   s¸   € ØÐÝœ' Tš/˜/�B�B¨cˆ	å
ˆ1�8Š8�GÑÔÑÔ Ò*Ð*°1¨HØ�c�!‰fŒf€q€AØ
ˆaŠ%ˆ%Ø�‰U�Q‰Y˜1ÑˆÝˆq��!�Œu�|Š|˜GÑ$Ô$Ñ%Ô%¨Ò2Ð2¸°A°AØ�a‘%ˆað ˆaŠ%ˆ%ð ˆRˆaˆRŒ5€Lr   c                  ó.   — t          j        ¦   «         dz  S )Nrn   )r#   Ú	cpu_count© r   r   Úget_default_workersry   w   s   € ÝŒ<‰>Œ>˜1ÑÐr   Úcpuc                 óT  — t          | t          j        ¦  «        r|                      ||¬¦  «        }nFt          | t          t
          t          j        f¦  «        r| }n| | | g}t          j        |||¬¦  «        }| 	                    ¦   «         dk    r| 
                    d¦  «        }nl| 	                    ¦   «         dk    rT|                     ¦   «         }| 	                    ¦   «         dk     r| 
                    d¦  «        d d…         }n
|d d…         }|                     ddd¦  «        S )N©ÚdeviceÚdtyper   é   )Ú
isinstancer   ÚTensorÚtoÚlistÚtupler   ÚndarrayÚtensorÚnumelÚrepeatÚflattenÚview)Úvaluer}   r~   r†   Úvalss        r   Úto_rgb_tensorr�   z   s  € Ý�%�œÑ&Ô&ð @Ø—’ ¨u�Ñ5Ô5ˆˆå�e�d¥E­2¬:Ð6Ñ7Ô7ð 	)ØˆDˆDà˜5 %Ð(ˆDÝ”˜d¨6¸Ð?Ñ?Ô?ˆØ‡|‚|�~„~˜ÒÐØ—’˜qÑ!Ô!ˆˆØ	�Š‰Œ˜1Ò	Ð	Ø—’Ñ!Ô!ˆØ�<Š<‰>Œ>˜AÒÐØ—]’] 1Ñ%Ô% b q bÔ)ˆFˆFà˜B˜Q˜B”ZˆFØ�;Š;�q˜!˜QÑÔÐr   c                 óô   — | �| j         t          j        k    r| S |                      t          j        |¬¦  «                             t          j        d| j        ¬¦  «        ¦  «                             d¦  «        S )ag  A control video in [-1, 1]. Models declaring model_def "uint8_guides" may receive uint8 control videos (0-255): they are converted
    with the operations WanGP applies to float guides, so the values are identical (the divisor is a tensor: CUDA divides by a scalar
    through its reciprocal, which changes some values). Float videos are returned as they are.N©Úmemory_formatç     à_@©r}   ç      ð?)	r~   r   Úuint8r‚   Úfloat32Údiv_r†   r}   Úsub_)r6   r�   s     r   Úguide_to_floatr˜   �   se   € ð €}˜œ¥u¤{Ò2Ð2ØˆØ�8Š8•E”M°ˆ8Ñ?Ô?×DÒDÅUÄ\ÐRWÐ`eÔ`lÐEmÑEmÔEmÑnÔn×sÒsÐtwÑxÔxÐxr   é   c                 ó  — | j         t          j        k    r|                      |¦  «        S t          j        | |¬¦  «        }t          d| j        d         |¦  «        D ],}t          | dd…|||z   …f         ¦  «        |dd…|||z   …f<   Œ-|S )zÌA control video (C, T, H, W) in dtype with the values of guide_to_float, converted by chunks of frames: a uint8 guide does not go
    through a float32 copy of the whole video. Float videos are only cast.©r~   r   r   N)r~   r   r”   r‚   Ú
empty_likeÚrangeÚshaper˜   )r6   r~   Úchunk_framesÚoutputÚstarts        r   Úguide_to_dtyper¢   •   s¡   € ð „{•e”kÒ!Ð!Ø�xŠx˜‰ŒÐÝÔ˜e¨5Ð1Ñ1Ô1€FÝ�q˜%œ+ aœ.¨,Ñ7Ô7ð eð eˆÝ0>¸uÀQÀQÀQÈÈeÐVbÑNbÐHbÐEbÔ?cÑ0dÔ0dˆˆqˆqˆq�%˜ Ñ,Ð,Ð,Ñ-Ð-Ø€Mr   c                 óÎ   — | �| j         t          j        k    r| S |                      t          j        |¬¦  «                             t          j        d| j        ¬¦  «        ¦  «        S )z‡A control mask in [0, 1]: uint8 masks (0 / 255, model_def "uint8_guides") as WanGP's float masks; float masks are returned as they are.Nr�   ç     ào@r’   )r~   r   r”   r‚   r•   r–   r†   r}   )Úmaskr�   s     r   Úguide_mask_to_floatr¦   Ÿ   sT   € à€|�t”z¥U¤[Ò0Ð0ØˆØ�7Š7•5”=°ˆ7Ñ>Ô>×CÒCÅEÄLÐQVÐ_cÔ_jÐDkÑDkÔDkÑlÔlÐlr   Trn   FÚmax_workersc                 óø  ‡ ‡— |sg S dd l }t          j        ¦   «         }|dv �r9|rd„ |D ¦   «         }n|}|dk    rPg }	t          |¦  «        D ]=\  }
} ‰ |¦  «        }|	                     |¦  «         |rd ||
<   |r|r|d         n|||
<   Œ>nÃ|j                             |¬¦  «        5 Šˆˆ fd„t          |¦  «        D ¦   «         }d gt          |¦  «        z  }	|j                             |¦  «        D ]E}||         }
|                     ¦   «         |	|
<   |rd ||
<   |r|r|	|
         d         n|	|
         ||
<   ŒF	 d d d ¦  «         n# 1 swxY w Y   |rd„ |	D ¦   «         }	n ‰ |¦  «        }	t          j        ¦   «         }|	S )Nr   )ÚprephaseÚupsamplec                 ó   — g | ]}|g‘ŒS rx   rx   ©rd   Úimgs     r   ú
<listcomp>z.process_images_multithread.<locals>.<listcomp>®   s   € Ð2Ð2Ð2 S˜C˜5Ð2Ð2Ð2r   r   )r§   c                 óD   •— i | ]\  }}‰                      ‰|¦  «        |“ŒS rx   )Úsubmit)rd   Úidxr­   ÚexecutorÚimage_processors      €€r   ú
<dictcomp>z.process_images_multithread.<locals>.<dictcomp>º   s-   ø€ ÐlÐlÐlÉ(È#Ès˜8Ÿ?š?¨?¸CÑ@Ô@À#ÐlÐlÐlr   c                 ó   — g | ]
}|d          ‘ŒS )r   rx   r¬   s     r   r®   z.process_images_multithread.<locals>.<listcomp>Ä   s   € Ð2Ð2Ð2 3˜˜AœÐ2Ð2Ð2r   )	Úconcurrent.futuresÚtimeÚ	enumeraterD   ÚfuturesÚThreadPoolExecutorrC   Úas_completedÚresult)r³   ÚitemsÚprocess_typeÚwrap_in_listr§   Úin_placeÚ
concurrentÚ
start_timeÚ
items_listÚresultsr±   Úitemr¹   ÚfutureÚend_timer²   s   `              @r   Úprocess_images_multithreadrÈ   ¥   sC  øø€ Øð Ø€yàÐÐÐÝ”‘”€JàÐ/Ð/Ñ/Øð 	Ø2Ð2¨EÐ2Ñ2Ô2ˆJˆJàˆJØ˜!ÒÐØˆGÝ& uÑ-Ô-ð Lð L‘	��TØ&� tÑ,Ô,�Ø—’˜tÑ$Ô$Ð$ØÐ7°4 ¨C¡ØÐK°\Ð*K¨$¨q¬'¨'Àt˜U 3™Zøð	Lð Ô#×6Ò6À;Ð6ÑOÔOð WÐS[ØlÐlÐlÐlÐlÕV_Ð`jÑVkÔVkÐlÑlÔl�Ø˜&¥3 z¡?¤?Ñ2�Ø(Ô0×=Ò=¸gÑFÔFð Wð W�FØ! &œ/�CØ#)§=¢=¡?¤?�G˜C‘LØ#Ð;°t Z°¡_Øð WØ8DÐ%V W¨S¤\°!¤_ _È'ÐRUÌ,˜˜c™
øðWðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wð ð 	3Ø2Ð2¨'Ð2Ñ2Ô2ˆGøà!�/ %Ñ(Ô(ˆåŒy‰{Œ{€Hð €Ns   Â%BEÅEÅ	Er   c                 ó  — t          | t          ¦  «        rt          | ¦  «        n| }t          | t          ¦  «        rt          | ¦  «        nd }|�|} n8t          |t          ¦  «        r#t	          |¦  «        rt          j        |¦  «        } t          | t
          j        ¦  «        rrt          j        t          j
        | ¦  «                             t          j        ¦  «        ¦  «                             d¦  «        }|dk    r|n|                     ¦   «         S t          | ¦  «        }|�|d         nd}	|dk     r6|�2|	dk    r,t!          t#          |d         |	z  |z  |z   d¦  «        ¦  «        nd}t%          | ||||¬¦  «        S )Nr   r   Ú	fps_floatç        Úframe_count©rH   Úbridge)r€   Ústrr   r   r,   r   Úopenr   Ú
from_numpyr   ÚarrayÚastyper”   Ú	unsqueezeÚnumpyr   ÚintÚmaxr	   )
Úvideo_inÚstart_frameÚ
max_framesrH   rÎ   Úbase_video_inÚvirtual_imageÚframeÚmetadatarÊ   s
             r   Úget_resampled_video_transparentrß   Í   s�  € Ý<FÀxÕQTÑ<UÔ<UÐcÕ.¨xÑ8Ô8Ð8Ð[c€MÝ3=¸hÍÑ3LÔ3LÐVÕ% hÑ/Ô/Ð/ÐRV€MØÐ Ø ˆˆÝ	�M¥3Ñ	'Ô	'ð -Õ,DÀ]Ñ,SÔ,Sð -Ý”:˜mÑ,Ô,ˆÝ�(�EœKÑ(Ô(ð =ÝÔ ¥¤¨(Ñ!3Ô!3×!:Ò!:½2¼8Ñ!DÔ!DÑEÔE×OÒOÐPQÑRÔRˆØ 'Ò)Ð)ˆuˆu¨u¯{ª{©}¬}Ð<Ý*¨8Ñ4Ô4€HØ)1Ð)=�˜Ô%Ð%À3€IØ�A‚~€~ØemÐeyð  Hð  KLò  Lð  L•S�˜h }Ô5¸	ÑAÀZÑOÐR\Ñ\Ð^_Ñ`Ô`ÑaÔaÐað  RSˆ
Ý% h°¸ZÐT^ÐgmÐnÑnÔnÐnr   rm   )Úmaxsizec                 óô  — t          | ¦  «        }|�|d         |d         |d         |d         fS dd l} |j        | ¦  «        }t          |                     |j        ¦  «        ¦  «        }t          |                     |j        ¦  «        ¦  «        }t          |                     |j        ¦  «        ¦  «        }t          |                     |j	        ¦  «        ¦  «        }| 
                    ¦   «          ||||fS )NÚfpsÚdisplay_widthÚdisplay_heightrÌ   r   )r   Úcv2ÚVideoCapturerA   ÚgetÚCAP_PROP_FPSrÖ   ÚCAP_PROP_FRAME_WIDTHÚCAP_PROP_FRAME_HEIGHTÚCAP_PROP_FRAME_COUNTÚrelease)Ú
video_pathrÞ   rå   Úcaprâ   ÚwidthÚheightrÌ   s           r   Ú_get_video_info_cachedrñ   Þ   sá   € å*¨:Ñ6Ô6€HØÐØ˜Œ ¨Ô 9¸8ÐDTÔ;UÐW_Ð`mÔWnÐnÐnà€J€J€JØ
ˆ#Ô
˜:Ñ
&Ô
&€CÝ
�—’˜Ô(Ñ)Ô)Ñ
*Ô
*€CÝ�—’˜Ô0Ñ1Ô1Ñ2Ô2€EÝ�—’˜Ô2Ñ3Ô3Ñ4Ô4€FÝ�c—g’g˜cÔ6Ñ7Ô7Ñ8Ô8€KØ‡K‚K�M„M€MØ��v˜{Ð*Ð*r   c                 ót   — t          | t          j        ¦  «        r| j        \  }}d||dfS t          | ¦  «        S )Nr   )r€   r   Úsizerñ   ©rí   rï   rð   s      r   Úget_video_inforõ   î   s>   € Ý�*�eœkÑ*Ô*ð #Ø"œ‰ˆˆvØ�%˜ Ð"Ð"Ý! *Ñ-Ô-Ð-r   c                 óR  — t          | ¦  «        }|�|S t          | ¦  «        \  }}}}i dt          | ¦  «        “d|“d|“d|“d|“dt          |¦  «        “dt	          |¦  «        “dt	          |¦  «        “d	|d
k    rt          ||z  ¦  «        nd“dd“dd“dd“dd“dd“dd“dd“dd“S )NÚsource_pathrï   rð   rã   rä   rÊ   râ   rÌ   Údurationr   rË   Úsample_aspect_ratioú1:1Údisplay_aspect_ratior_   Úcolor_transferÚcolor_primariesÚcolor_spaceÚcolor_rangeÚneeds_sar_fixFÚneeds_tonemap)r   rõ   r   ÚfloatrÖ   )rí   rÞ   râ   rï   rð   rÌ   s         r   Ú_get_video_info_details_cachedr  õ   s9  € å*¨:Ñ6Ô6€HØÐØˆÝ&4°ZÑ&@Ô&@Ñ#€Cˆ�˜ðØÕ1°*Ñ=Ô=ðà�ðð 	�&ðð 	˜ð	ð
 	˜&ðð 	•U˜3‘Z”Zðð 	�s�3‰xŒxðð 	•s˜;Ñ'Ô'ðð 	°°a²°•E˜+¨Ñ+Ñ,Ô,Ð,¸Sðð 	˜uðð 	 ðð 	˜"ðð 	˜2ðð 	�rðð 	�rðð  	˜ð!ð" 	˜ð#ð r   c                 óÒ   — t          | t          j        ¦  «        r?| j        \  }}i dd“d|“d|“d|“d|“dd“d	d
“dd
“dd“dd“dd“dd“dd“dd“dd“dd“dd“S t          | ¦  «        S )Nr÷   r_   rï   rð   rã   rä   rÊ   r“   râ   r   rÌ   rø   rù   rú   rû   rü   rý   rþ   rÿ   r   Fr  )r€   r   ró   r  rô   s      r   Úget_video_info_detailsr    s  € Ý�*�eœkÑ*Ô*ð 
Ø"œ‰ˆˆvð
Ø˜2ð
à�Uð
ð �fð
ð ˜Uð	
ð
 ˜fð
ð ˜ð
ð �1ð
ð ˜1ð
ð ˜ð
ð " 5ð
ð # Bð
ð ˜bð
ð ˜rð
ð ˜2ð
ð ˜2ð
ð  ˜Uð!
ð" ˜Uð#
ð 	
õ& *¨*Ñ5Ô5Ð5r   ri   rM   Úreturn_last_if_missingÚreturnc                 óÐ
  — t          | ¦  «        }|��ã|d         s|d         st          | ¦  «        ��Ã|d         dk    r|d         nt          |d         pd¦  «        }|�»t          |¦  «        dk    r¨|d         dk    r5t          t	          |d         |z  t          |¦  «        z  ¦  «        ¦  «        nd}|r4|dk    r.t          t          dt          |¦  «        ¦  «        |dz
  ¦  «        }t          | t          |¦  «        dt          |¦  «        d	¬
¦  «        }nc|r@|d         dk    r4t          t          dt          |¦  «        ¦  «        |d         dz
  ¦  «        }t          | t          |¦  «        ddd	¬
¦  «        }|j        d         dk    rt          d|› �¦  «        ‚|d         }	|rüt          j        |	¦  «        rš|	j        t          j        k    r…ddlm}
  |
|	                     t          j        ¬¦  «        ¦  «                             d¦  «                             ¦   «                              dd¦  «                             t          j        ¦  «        }	t+          j        t          j        |	¦  «        r&|	                     ¦   «                              ¦   «         n|	¦  «        S |	                     ddd¦  «                             ¦   «                              d¦  «                             d¦  «        S t          | ¦  «        }t9          | ¦  «        }t;          j        |¦  «        }|                     ¦   «         st          d| › �¦  «        ‚t          |                      t:          j!        ¦  «        ¦  «        }t	          |                      t:          j"        ¦  «        ¦  «        }d}|�Ž|dk    rˆt          dt          t          |j#        ¦  «        |dz
  ¦  «        ¦  «        }|j$        €|dz
  n2t          |t          t          |j$        ¦  «        |dz
  ¦  «        ¦  «        }t          d||z
  dz   ¦  «        }|�t	          ||z  |z  ¦  «        }||k    s|dk     r5|r|dz
  }n-| %                    ¦   «          tM          d|› d|dz
  › d�¦  «        ‚| '                    t:          j(        ||z   ¦  «         | )                    ¦   «         \  }}	| %                    ¦   «          |st          d|› �¦  «        ‚t;          j*        |	t:          j+        ¦  «        }	|rt+          j        |	¦  «        S t          j,        |	¦  «                             ddd¦  «                             ¦   «         dz  dz
  S )zEExtract nth frame from video as PyTorch tensor normalized to [-1, 1].Nr   r  rÊ   r   râ   r   rÌ   r   rÍ   zFailed to read frame )Úlinear_to_srgbr›   r¤   rË   rn   r‘   r“   zCannot open video: zFrame z out of bounds (0-ú))-r   r   r  rÖ   rA   Úminr×   r	   rž   Ú
ValueErrorr   Ú	is_tensorr~   r”   Úhdrr	  r‚   r•   ÚmulÚround_Úclamp_r   Ú	fromarrayrz   rÕ   Úpermuter–   r—   r   rå   ræ   ÚisOpenedrç   rë   rè   rÙ   Ú	end_framerì   Ú
IndexErrorÚsetÚCAP_PROP_POS_FRAMESÚreadÚcvtColorÚCOLOR_BGR2RGBrÑ   )ri   rM   r  rH   Ú
return_PILrÞ   rÊ   Úmax_target_framesÚframesrÝ   r	  Úvirtual_specÚbase_file_namerî   Útotal_framesrâ   Úvirtual_startÚvirtual_endÚrets                      r   Úget_video_framer%  (  sg  € å*¨9Ñ5Ô5€HØÑ ¨/Ô!:Ð¸hÀÔ>WÐÕ[sÐt}Ñ[~Ô[~ñ  \KØ-5°kÔ-BÀQÒ-FÐ-F�H˜[Ô)Ð)ÍEÐRZÐ[`ÔRaÐRfÐefÑLgÔLgˆ	ØÐ!¥e¨JÑ&7Ô&7¸!Ò&;Ð&;ØgoÐp}Ôg~ð  BCò  hCð  hC¥¥E¨(°=Ô*AÀIÑ*MÕPUÐV`ÑPaÔPaÑ*aÑ$bÔ$bÑ cÔ cÐ cð  IJÐØ%ð MÐ*;¸aÒ*?Ð*?Ý�s 1¥c¨(¡m¤mÑ4Ô4Ð6GÈ!Ñ6KÑLÔL�Ý/°	½3¸x¹=¼=È!ÕX]Ð^hÑXiÔXiÐryÐzÑzÔzˆFˆFà%ð S¨(°=Ô*AÀAÒ*EÐ*EÝ�s 1¥c¨(¡m¤mÑ4Ô4°h¸}Ô6MÐPQÑ6QÑRÔR�Ý/°	½3¸x¹=¼=È!ÐX\ÐelÐmÑmÔmˆFØŒ<˜Œ?˜aÒÐÝÐ?°XÐ?Ð?Ñ@Ô@Ð@Ø�q”	ˆØð 	]ÝŒ˜uÑ%Ô%ð }¨%¬+½¼Ò*DÐ*DØ/Ð/Ð/Ð/Ð/Ð/Ø&˜ u§x¢xµe´m xÑ'DÔ'DÑEÔE×IÒIÈ%ÑPÔP×WÒWÑYÔY×`Ò`ÐadÐfkÑlÔl×oÒoÕpuÔp{Ñ|Ô|�Ý”?½%¼/È%Ñ:PÔ:PÐ#[ 5§9¢9¡;¤;×#4Ò#4Ñ#6Ô#6Ð#6ÐV[Ñ\Ô\Ð\Ø�}Š}˜Q  1Ñ%Ô%×+Ò+Ñ-Ô-×2Ò2°5Ñ9Ô9×>Ò>¸sÑCÔCÐCÝ+¨IÑ6Ô6€LÝ/°	Ñ:Ô:€NÝ
Ô
˜>Ñ
*Ô
*€Cà�<Š<‰>Œ>ð <ÝÐ:¨yÐ:Ð:Ñ;Ô;Ð;å�s—w’w�sÔ7Ñ8Ô8Ñ9Ô9€LÝ
�—’�Ô(Ñ)Ô)Ñ
*Ô
*€CØ€MØÐ L°1Ò$4Ð$4Ý˜A�s¥3 |Ô'?Ñ#@Ô#@À,ÐQRÑBRÑSÔSÑTÔTˆØ*6Ô*@Ð*H�l QÑ&Ð&ÍcÐR_ÕadÕehÐiuÔiñ  fAô  fAð  COð  RSñ  CSñ  bTô  bTñ  OUô  OUˆÝ˜1˜k¨MÑ9¸AÑ=Ñ>Ô>ˆØÐÝ˜ hÑ.°Ñ3Ñ4Ô4ˆð �<ÒÐ 8¨a¢< <Ø!ð 	UØ# aÑ'ˆHˆHà�KŠK‰MŒMˆMÝÐS hÐSÐSÀ,ÈqÁ.ÐSÐSÐSÑTÔTÐTð ‡G‚G�CÔ# ]°XÑ%=Ñ>Ô>Ð>Ø—’‘”�J€CˆØ‡K‚K�M„M€Màð =ÝÐ;°Ð;Ð;Ñ<Ô<Ð<õ ŒL˜¥Ô 1Ñ2Ô2€EØð PÝ” Ñ'Ô'Ð
'åÔ  Ñ'Ô'×/Ò/°°1°aÑ8Ô8×>Ò>Ñ@Ô@À5ÑHÈCÑOÐOr   c                 ó   — | €d S t          | t          j        ¦  «        r t          j        | t          j        ¦  «        }n3t          j        | ¦  «        }t          j        |t          j        ¦  «        }|j        d d…         \  }}t          j	        dd¬¦  «        5 }t          j
        dŽ }t          j        |j        |d||f¦  «        }|                     |¦  «         |                     ¦   «          |j        cd d d ¦  «         S # 1 swxY w Y   d S )Nrn   r!   F)ÚsuffixÚdeleteÚmp4vg      >@)r€   r   r…   rå   r  ÚCOLOR_RGB2BGRrÒ   rž   ÚtempfileÚNamedTemporaryFileÚVideoWriter_fourccÚVideoWriterrW   Úwriterì   )r7   Úimg_bgrÚ	img_arrayrð   rï   Ú
temp_videoÚfourccÚouts           r   Úconvert_image_to_videor5  g  s4  € Ø€}Øˆtõ �%�œÑ$Ô$ð =å”,˜u¥cÔ&7Ñ8Ô8ˆˆõ ”H˜U‘O”Oˆ	Ý”,˜y­#Ô*;Ñ<Ô<ˆà”M " 1 "Ô%�M€FˆEõ 
Ô	$¨F¸5Ð	AÑ	AÔ	Að ÀZÝÔ'¨Ð0ˆÝŒo˜jœo¨v°t¸eÀV¸_ÑMÔMˆØ�	Š	�'ÑÔÐØ�Š‰ŒˆØŒðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÂADÄDÄ
Dc                 óª  — | dz                         ¦   «                              d¦  «        } t          j        t	          j        |                      dd¦  «                             ¦   «                              ¦   «         dd¦  «         	                    t          j
        ¦  «        ¦  «        } |                      ||f|€t          j        j        n|¬¦  «        } t          j        t	          j        | ¦  «         	                    t          j        ¦  «        ¦  «                             dd¦  «        } |                      d¦  «                             d¦  «        } | S )Nr   r‘   r   r    éÿ   ©rR   )r  Úmul_r   r  r   ÚclipÚmovedimrz   rÕ   rÓ   r”   ÚresizeÚ
ResamplingÚLANCZOSr   rÑ   rÒ   r•   Údivr—   )r­   ÚhÚwÚmethods       r   Úresize_lanczosrC  ~  sû   € Ø�‰7�/Š/Ñ
Ô
×
 Ò
  Ñ
'Ô
'€CÝ
Œ/�"œ' #§+¢+¨a°Ñ"4Ô"4×"8Ò"8Ñ":Ô":×"@Ò"@Ñ"BÔ"BÀAÀsÑKÔK×RÒRÕSUÔS[Ñ\Ô\Ñ
]Ô
]€CØ
�*Š*�a˜�UÀÀ¥UÔ%5Ô%=Ð%=ÐU[ˆ*Ñ
\Ô
\€CÝ
Ô
�2œ8 C™=œ=×/Ò/µ´
Ñ;Ô;Ñ
<Ô
<×
DÒ
DÀRÈÑ
KÔ
K€CØ
�'Š'�%‰.Œ.×
Ò
˜aÑ
 Ô
 €CØ€Jr   c                  óš   — t          j        dd¬¦  «        } | €t          j        d¬¦  «        } t          j                             | ¦  «        S )NÚrembgF)Úerror_if_none)Ú
force_path)ÚflÚlocate_folderÚget_smart_download_locationr#   r$   Úabspath)Ú
rembg_homes    r   Úresolve_rembg_homerM  †  sD   € ÝÔ! '¸Ð?Ñ?Ô?€JØÐÝÔ3¸wÐGÑGÔGˆ
ÝŒ7�?Š?˜:Ñ&Ô&Ð&r   Úu2netc                 óÞ  ‡ — ‰ dk    rddl m}  |¦   «          t          ¦   «         t          j        d<   dd l}ddlm} t          ˆ fd„|D ¦   «         ¦  «        }| 	                    |¦  «        }‰ |_
        t           od|                     ¦   «         v }|rddd	ifd
gnd
g}|                     t          |                     ¦   «         ¦  «        |                     ¦   «         |¬¦  «        |_        |S )NrN  r   )Úensure_assetsÚ
U2NET_HOME)Úsessions_classc              3   óL   •K  — | ]}|                      ¦   «         ‰k    ¯|V — Œd S r   )rW   )rd   ÚclsÚ
model_names     €r   rg   z$new_rembg_session.<locals>.<genexpr>˜  s5   øè è € ÐSÐS ¸#¿(º(¹*¼*È
Ò:RÐ:R˜Ð:RÐ:RÐ:RÐ:RÐSÐSr   ÚCUDAExecutionProviderÚcudnn_conv_algo_searchÚ	HEURISTICÚCPUExecutionProvider)Úsess_optionsÚ	providers)Úpreprocessing.rembg.assetsrP  rM  r#   ÚenvironÚonnxruntimeÚrembg.sessionsrR  ÚnextÚ__new__rU  ÚREMBG_ON_CPUÚget_available_providersÚInferenceSessionrÏ   Údownload_modelsÚSessionOptionsÚinner_session)rU  rP  ÚortrR  Úsession_classÚsessionr   r[  s   `       r   Únew_rembg_sessionrk  �  s7  ø€ Ø�WÒÐØ<Ð<Ð<Ð<Ð<Ð<Øˆ‰ŒˆÝ1Ñ3Ô3…B„Jˆ|ÑØÐÐÐØ-Ð-Ð-Ð-Ð-Ð-õ ÐSÐSÐSÐS¨ÐSÑSÔSÑSÔS€MØ×#Ò# MÑ2Ô2€GØ#€GÔÝÐÐXÐ 7¸3×;VÒ;VÑ;XÔ;XÐ X€DØptð  SÐ)Ð,DÀkÐ+RÐSÐUkÐlÐlð  |Rð  {S€IØ×0Ò0µ°]×5RÒ5RÑ5TÔ5TÑ1UÔ1UÐdg×dvÒdvÑdxÔdxð  ENÐ0ñ  Oô  O€GÔØ€Nr   c           	      ó.  — |d k    rt          ¦   «         }t          j        t          j        d|                      dd¦  «                             ¦   «                              ¦   «         z  dd¦  «                             t          j	        ¦  «        ¦  «        } t          | |dg d¢¬¦  «                             d¦  «        } t          j        t          j        | ¦  «                             t          j        ¦  «        dz  ¦  «                             dd¦  «        S )	Nr¤   r   r    r7  T)r7  r7  r7  r   )rj  Úalpha_mattingÚbgcolorÚRGB)rk  r   r  r   r:  r;  rz   rÕ   rÓ   r”   r   Úconvertr   rÑ   rÒ   r•   )r­   rj  s     r   Úremove_backgroundrq     sÛ   € Ø�‚~€~Ý#Ñ%Ô%ˆÝ
Œ/�"œ' $¨¯ª°Q¸Ñ);Ô);×)?Ò)?Ñ)AÔ)A×)GÒ)GÑ)IÔ)IÑ"IÈ1ÈcÑRÔR×YÒYÕZ\ÔZbÑcÔcÑ
dÔ
d€CÝ
�˜g°tÐEWÐEWÐEWÐ
XÑ
XÔ
X×
`Ò
`ÐafÑ
gÔ
g€CÝÔ�BœH S™MœM×0Ò0µ´Ñ<Ô<¸uÑDÑEÔE×MÒMÈbÐRSÑTÔTÐTr   c                 óü   — t          j        t          j        | ¦  «                             t          j        ¦  «        ¦  «                             d¦  «                             d¦  «                             dd¦  «        S )Nr‘   r“   r    r   )	r   rÑ   r   rÒ   rÓ   r•   r–   r—   r;  )r7   s    r   Úconvert_image_to_tensorrs  ¨  sZ   € ÝÔ�BœH U™OœO×2Ò2µ2´:Ñ>Ô>Ñ?Ô?×DÒDÀUÑKÔK×PÒPÐQSÑTÔT×\Ò\Ð]_ÐabÑcÔcÐcr   c                 óÄ  — t          | j        ¦  «        dk    r| d d …|f         } | j        d         dk    r|                      ddd¦  «        } | j        t          j        k    rMt          j        |                      ddd¦  «         	                    ¦   «          
                    ¦   «         ¦  «        S |r�t          j        |                      ¦   «                              d¦  «                             ddd¦  «                             t          j        ¦  «         	                    ¦   «          
                    ¦   «         ¦  «        S t          j        |                      ¦   «                              d¦  «                             d	¦  «                             ddd¦  «                             t          j        ¦  «         	                    ¦   «          
                    ¦   «         ¦  «        S )
Né   r   r   r   r    rn   r7  r“   r‘   )rC   rž   Úexpandr~   r   r”   r   r  r  rz   rÕ   Úcloner9  r‚   Úadd_)ÚtrM   Úmask_levelss      r   Úconvert_tensor_to_imager{  «  sf  € Ý
ˆ1Œ7�|„|�qÒÐØˆaˆaˆa�ˆkŒNˆØ„wˆq„z�A‚~€~Ø�HŠH�Q�r˜"ÑÔˆØ„w•%”+ÒÐÝŒ˜qŸyšy¨¨A¨qÑ1Ô1×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?Ñ@Ô@Ð@Øð lÝŒ˜qŸwšw™yœyŸ~š~¨cÑ2Ô2×:Ò:¸1¸Q¸qÑAÔA×DÒDÅUÄ[ÑQÔQ×UÒUÑWÔW×]Ò]Ñ_Ô_Ñ`Ô`Ð`åŒ˜qŸwšw™yœyŸ~š~¨bÑ1Ô1×6Ò6°uÑ=Ô=×EÒEÀaÈÈ!ÑLÔL×OÒOÕPUÔP[Ñ\Ô\×`Ò`ÑbÔb×hÒhÑjÔjÑkÔkÐkr   ©r    r   é   c                 óV  — |€| j         nt          j         |¦  «        }| j        t          j        k    r|                      |¦  «        S |\  }}d||z
  z  }t          j        | j        t          j        |¬¦  «        }| j        dk    rdn| j        dk    rdnd}| j        |         }	t          d|  	                    ¦   «         t          d|	¦  «        z  ¦  «        }
t          dt          |	t          |dz  dz  ¦  «        t          d|
dz  ¦  «        z  ¦  «        ¦  «        }t          | j        ¦  «        }|||<   t          j        |t          j        | j         ¬¦  «        }t          d|	|¦  «        D ]¼}t          ||	|z
  ¦  «        }|                     |d|¦  «        }|                     |                      |||¦  «        ¦  «         |                     |¦  «                             |¦  «                             dd	¦  «         |                     |||¦  «                             |¦  «         Œ½|S )
Nr¤   ©r~   r}   r?   rn   ru  r   r   i   r7  )r}   r   r~   r”   r‚   Úemptyrž   Úndimr×   r‡   r  rÖ   rƒ   Úfloat16r�   ÚnarrowÚcopy_r—   r9  r  )r6   Úvalue_rangeÚmax_buffer_mbÚoutput_deviceÚmin_valÚmax_valÚscaler    Útime_dimr  Úframe_elemsrŸ   Úbuffer_shapeÚbufferr¡   ró   Úworks                    r   Ú%convert_video_tensor_to_uint8_chunkedr�  ·  sø  € ð %2Ð$9�E”L�L½u¼|ÈMÑ?ZÔ?Z€MØ„{•e”kÒ!Ð!Ø�xŠx˜Ñ&Ô&Ð&Ø"Ñ€GˆWØ�W˜wÑ&Ñ'€EÝŒ[˜œ­E¬KÀÐNÑNÔN€FØ”J !’O�Oˆqˆq¨e¬j¸Aªo¨o¨¨À1€HØŒ[˜Ô"€FÝ�a˜Ÿš™œ­#¨a°©.¬.Ñ8Ñ9Ô9€KÝ�q�#˜f¥c¨-¸$Ñ*>ÀÑ*EÑ&FÔ&FÍ#ÈaÐQ\Ð_`ÑQ`ÑJaÔJaÑ&aÑbÔbÑcÔc€LÝ˜œÑ$Ô$€LØ)€L�ÑÝŒ[˜­U¬]À5Ä<ÐPÑPÔP€FÝ�q˜& ,Ñ/Ô/ð 9ð 9ˆÝ�< ¨%¡Ñ0Ô0ˆØ�}Š}˜X q¨$Ñ/Ô/ˆØ�
Š
�5—<’< ¨%°Ñ6Ô6Ñ7Ô7Ð7Ø�	Š	�'ÑÔ×Ò Ñ&Ô&×-Ò-¨a°Ñ5Ô5Ð5Ø�Š�h  tÑ,Ô,×2Ò2°4Ñ8Ô8Ð8Ð8Ø€Mr   r    c                 óL   — t          | |¦  «                             |¦  «         d S r   )r{  Úsave)Útensor_imagerW   rM   s      r   Ú
save_imager”  Ï  s&   € Ý˜L¨(Ñ3Ô3×8Ò8¸Ñ>Ô>Ð>Ð>Ð>r   c                 óx  — | €dn t          | ¦  «                             ¦   «         }t          |¦  «        dk    rd S |                     d¦  «        }t          |¦  «        dk    rd S 	 t	          |d         ¦  «        t	          |d         ¦  «        }}n# t
          t          f$ r Y d S w xY w|dk    s|dk    rd n||z  S )Nr_   r   ú:rn   r   )rÏ   ÚstriprC   Úsplitr  Ú	TypeErrorr  )Úoutpainting_ratioÚratioÚwidth_ratioÚheight_ratios       r   Úparse_outpainting_ratiorž  Ò  sÌ   € Ø#Ð+ˆBˆBµÐ5FÑ1GÔ1G×1MÒ1MÑ1OÔ1O€EÝ
ˆ5�z„z�Q‚€ØˆtØ�KŠK˜ÑÔ€EÝ
ˆ5�z„z�Q‚€ØˆtðÝ$)¨%°¬(¡O¤OµU¸5À¼8±_´_�\ˆˆøÝ•zÐ"ð ð ð Øˆtˆtðøøøà !Ò#Ð# |°qÒ'8Ð'8ˆ4ˆ4¸kÈLÑ>XÐXs   Á&*B ÂB&Â%B&c                 óB  — | €d S t          | ¦  «                             ¦   «         } |                      d¦  «        rd S | dk    st          | ¦  «        dk    rt          |¦  «        rg d¢nd S |                      d¦  «        }t          |¦  «        dk    rd nd„ |D ¦   «         S )Nú#z0 0 0 0r   )r   r   r   r   ú ru  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rx   )rÖ   ©rd   Úvs     r   r®   z(get_outpainting_dims.<locals>.<listcomp>é  s   € Ð3UÐ3UÐ3U¸qµC¸±F´FÐ3UÐ3UÐ3Ur   )rÏ   r—  Ú
startswithrC   r˜  )Úvideo_guide_outpaintingÚvideo_guide_outpainting_ratioÚoutpainting_dimss      r   Úget_outpainting_dimsr©  à  s¾   € ØÐ&ØˆtÝ!Ð"9Ñ:Ô:×@Ò@ÑBÔBÐØ×)Ò)¨#Ñ.Ô.ð ØˆtØ )Ò+Ð+­sÐ3JÑ/KÔ/KÈqÒ/PÐ/PÝ"Ð#@ÑAÔAÐKˆ|ˆ|ˆ|ˆ|ÀtÐKØ.×4Ò4°SÑ9Ô9ÐÝÐ'Ñ(Ô(¨AÒ-Ð-ˆ4ˆ4Ð3UÐ3UÐDTÐ3UÑ3UÔ3UÐUr   c           	      ó�  — t          dt          | ¦  «        ¦  «        } | dk    rdS t          dt          |¦  «        ¦  «        }t          dt          |¦  «        ¦  «        }||k    r| dz  }n*|dk    rd}n!|dk    r| }nt          | |z  ||z   z  ¦  «        }t          dt	          | t          |¦  «        ¦  «        ¦  «        }|| |z
  fS )Nr   )r   r   rË   rn   )r×   rÖ   r  rA   r  )Útotal_paddingÚbefore_weightÚafter_weightÚbefore_paddings       r   Ú_split_outpainting_paddingr¯  ì  sà   € Ý˜�3˜}Ñ-Ô-Ñ.Ô.€MØ˜ÒÐØˆtÝ˜�U =Ñ1Ô1Ñ2Ô2€MÝ�s�E ,Ñ/Ô/Ñ0Ô0€LØ˜Ò$Ð$Ø&¨!Ñ+ˆˆØ	˜!Ò	Ð	ØˆˆØ	˜Ò	Ð	Ø&ˆˆå˜}¨}Ñ<ÀÐP\Ñ@\Ñ]Ñ^Ô^ˆÝ˜�C ­s°>Ñ/BÔ/BÑCÔCÑDÔD€NØ˜=¨>Ñ9Ð9Ð9r   c                 óÌ  — t          |¦  «        }|€|€d ng d¢S d„ |D ¦   «         \  }}}}|�| dk    s|dk    r||||gS || z  }	|	|k     rIt          dt          | |z  |z
  ¦  «        ¦  «        }
t          |
||¦  «        \  }}ddd|z  |z  d|z  |z  gS |	|k    rIt          dt          ||z  | z
  ¦  «        ¦  «        }
t          |
||¦  «        \  }}d|z  | z  d|z  | z  ddgS g d¢S )N)rË   rË   rË   rË   c                 óH   — g | ]}t          d t          |¦  «        ¦  «        ‘Œ S )rË   )r×   r  r£  s     r   r®   z,resolve_outpainting_dims.<locals>.<listcomp>  s/   € ÐO}ÐO}ÐO}ÐghÕPSÐTWÕY^Ð_`ÑYaÔYaÑPbÔPbÐO}ÐO}ÐO}r   r   rË   g      Y@)rž  r×   rA   r¯  )Úframe_heightÚframe_widthr¨  rš  Útarget_ratioÚoutpainting_topÚoutpainting_bottomÚoutpainting_leftÚoutpainting_rightÚsource_ratior«  Úleft_paddingÚright_paddingÚtop_paddingÚbottom_paddings                  r   Úresolve_outpainting_dimsr¾  þ  s_  € Ý*Ð+<Ñ=Ô=€LØÐØ#Ð+ˆtˆtÐ1EÐ1EÐ1EÐEØO}ÐO}Ðl|ÐO}ÑO}ÔO}ÑL€OÐ'Ð)9Ð;LØÐ˜|¨qÒ0Ð0°KÀ1Ò4DÐ4DØÐ!3Ð5EÐGXÐYÐYà Ñ-€LØ�lÒ"Ð"Ý˜A�u \°LÑ%@À;Ñ%NÑOÔOÑPÔPˆÝ&@ÀÐP`ÐbsÑ&tÔ&tÑ#ˆ�mØ�S˜% ,Ñ.°Ñ<¸eÀmÑ>SÐVaÑ>aÐbÐbØ�lÒ"Ð"Ý˜A�u [°<Ñ%?À,Ñ%NÑOÔOÑPÔPˆÝ&@ÀÐP_ÐasÑ&tÔ&tÑ#ˆ�^Ø˜Ñ# lÑ2°E¸NÑ4JÈ\Ñ4YÐ[^Ð`cÐdÐdØÐÐÐr   c                 ó¤   — t          | |||¦  «        \  }}}}t          | d|z   |z   z  dz  ¦  «        } t          |d|z   |z   z  dz  ¦  «        }| |fS )Nrm   )r¾  rÖ   )r²  r³  r¨  rš  rµ  r¶  r·  r¸  s           r   Ú$get_outpainting_full_area_dimensionsrÀ    s‹   € ÝOgÐhtð  wBð  DTð  Vgñ  Phô  PhÑL€OÐ'Ð)9Ð;LÝ�| s¨_Ñ'<Ð?QÑ'QÑRÐUXÑXÑYÔY€LÝ�{ cÐ,<Ñ&<Ð?PÑ&PÑQÐTWÑWÑXÔX€KØ˜Ð$Ð$r   é   c                 ó>  — | j         dk    r| S t          j        |                      d¦  «        ¦  «        }||k                         t          j        ¦  «        dz  }t          j        t          j        |d¦  «        gdz  |gz   ¦  «        }t          j	        |d¦  «        S )NÚRGBAÚLr7  r   )
Úmoder   rÒ   rp  rÓ   r”   ÚdstackÚ	full_liker   r  )r­   ÚthreshÚarrÚalphaÚrgbas        r   Úrgb_bw_to_rgba_maskrÌ    sˆ   € Ø
„x�ÒÐ ˜Ý
Œ(�3—;’;˜sÑ#Ô#Ñ
$Ô
$€CØ�6Š\×!Ò!¥"¤(Ñ+Ô+¨cÑ1€EÝŒ9•b”l 5¨#Ñ.Ô.Ð/°!Ñ3°u°gÑ=Ñ>Ô>€DÝŒ?˜4 Ñ(Ô(Ð(r   c                 óª   — t          | t          j        ¦  «        r8| j        dk    r-|                      d¦  «        }t          j        d|||f¦  «        S | S )NrÃ  ÚAro  )r€   r   rÅ  Ú
getchannelÚmerge)ÚlayerrÊ  s     r   Úimage_editor_layer_to_rgb_maskrÒ     sS   € Ý�%�œÑ%Ô%ð 9¨%¬*¸Ò*>Ð*>Ø× Ò  Ñ%Ô%ˆÝŒ{˜5 5¨%°Ð"7Ñ8Ô8Ð8Ø€Lr   c           
      óD  — t          |pd¦  «        }|dk    r|| fS || z
  |z
  }t          dt          t          | |z  ¦  «        |z  ¦  «        ¦  «        } t          dt          t          ||z  ¦  «        |z  ¦  «        ¦  «        }||k    r|nd}| |z   |z   |z
  }|dk    rw|| k    r9t          d|t          t          j        ||z  ¦  «        |z  ¦  «        z
  ¦  «        }n8t          d| t          t          j        ||z  ¦  «        |z  ¦  «        z
  ¦  «        } || z
  |z
  }|| fS )Nr   r   )rÖ   r×   rA   r@   rB   )ÚbeforeÚinnerÚtotalÚquantumÚafterÚ	min_innerÚoverflows          r   Ú_quantize_outpainting_axisrÛ  '  s7  € Ý�'�,˜QÑÔ€GØ�!‚|€|Ø�fˆ}ÐØ�F‰N˜UÑ"€EÝ�•C�˜f wÑ.Ñ/Ô/°'Ñ9Ñ:Ô:Ñ;Ô;€FÝ�•3•u˜U W™_Ñ-Ô-°Ñ7Ñ8Ô8Ñ9Ô9€EØ  GÒ+Ð+��°€IØ˜‰~ 	Ñ)¨EÑ1€HØ�!‚|€|Ø�FŠ?ˆ?Ý˜˜5¥3¥t¤y°¸GÑ1CÑ'DÔ'DÀwÑ'NÑ#OÔ#OÑOÑPÔPˆEˆEå˜˜F¥S­¬°8¸gÑ3EÑ)FÔ)FÈÑ)PÑ%QÔ%QÑQÑRÔRˆFØ�F‰N˜UÑ"€EØ�&ˆ=Ðr   é   c                 óØ  — |�|�t          ||||¦  «        }|\  }}	}
}t          | d|z   |	z   dz  z  ¦  «        }t          ||z  ¦  «        |z  }||z
  }t          |d|
z   |z   dz  z  ¦  «        }t          ||z  ¦  «        |z  }||z
  }t          |d|z   |	z   z  | z  ¦  «        }|dk    r$||	z   dk    r|t          |||	z   z  |z  ¦  «        z  }||z   | k    s|	dk    r| |z
  }t          |
d|
z   |z   z  |z  ¦  «        }|dk    r$|
|z   dk    r|t          |
|
|z   z  |z  ¦  «        z  }||z   |k    s|dk    r||z
  }|r*t          ||| |¦  «        \  }}t          ||||¦  «        \  }}||||fS )Nrm   r   )r¾  rÖ   rÛ  )Úfinal_heightÚfinal_widthr¨  Ú
block_sizerš  Úsource_heightÚsource_widthÚquantize_marginsrµ  r¶  r·  r¸  Ú
raw_heightrð   Úextra_heightÚ	raw_widthrï   Úextra_widthÚ
margin_topÚmargin_lefts                       r   Úget_outpainting_frame_locationrê  8  s  € ØÐ  \Ð%=Ý3°MÀ<ÐQaÐctÑuÔuÐØN^ÑL€OÐ'Ð)9Ð;LÝ�\ c¨OÑ&;Ð>PÑ&PÐTWÑ%WÑXÑYÔY€JÝ�˜jÑ(Ñ)Ô)¨JÑ6€FØ Ñ&€Lå�K CÐ*:Ñ$:Ð=NÑ$NÐRUÑ#UÑVÑWÔW€IÝ�	˜JÑ&Ñ'Ô'¨*Ñ4€EØ˜eÑ#€KÝ�_ c¨OÑ&;Ð>PÑ&PÑQÐT`Ñ`ÑaÔa€JØ�qÒÐ˜oÐ0BÑBÀqÒHÐHØ•c˜/¨_Ð?QÑ-QÑRÐUaÑaÑbÔbÑbˆ
Ø�VÑ˜|Ò+Ð+Ð/AÀQÒ/FÐ/FÐUaÐdjÑUjÈ
ÝÐ&¨Ð.>Ñ(>ÐARÑ(RÑSÐVaÑaÑbÔb€KØ�aÒÐÐ-Ð0AÑAÀaÒGÐGØ•sÐ+Ð/?ÐBSÑ/SÑTÐWbÑbÑcÔcÑcˆØ�eÑ˜{Ò*Ð*Ð.?À1Ò.DÐ.DÐT_ÐbgÑTgÀkØð kÝ7¸
ÀFÈLÐZjÑkÔkÑˆ�
Ý7¸ÀUÈKÐYiÑjÔjÑˆˆ{Ø�5˜* kÐ1Ð1r   c                 óX  — | j         \  }}||z  }||z  }||k    r8t          ||z  ¦  «        }|                      ||z
  dz  d||z   dz  |f¦  «        } n7t          ||z  ¦  «        }|                      d||z
  dz  |||z   dz  f¦  «        } |                      ||ft          j        ¦  «        S )Nrn   r   )ró   rÖ   Úcropr<  r   r>  )	r­   rA  r@  ÚowÚohr´  Ú
orig_ratioÚnwÚnhs	            r   Úrescale_and_croprò  P  sÀ   € ØŒX�F€BˆØ�q‘5€LØ�b‘€Jà�LÒ Ð å��lÑ"Ñ#Ô#ˆØ�hŠh˜˜b™ Q™¨¨B°©G¸©>¸2Ð>Ñ?Ô?ˆˆõ ��lÑ"Ñ#Ô#ˆØ�hŠh˜˜B ™G¨™>¨2°°R±¸A©~Ð>Ñ?Ô?ˆà�:Š:�q˜!�f�eœmÑ,Ô,Ð,r   c                 ó°   ‡‡‡— t          | ¦  «        } ˆˆˆfd„}t          || ddt          dt          |pt	          ¦   «         ¦  «        ¦  «        |¬¦  «        S )Nc                 óB  •— t          j        | ¦  «        r8|                      ¦   «                              ¦   «                              ¦   «         nt          j        | ¦  «        }|j        t
          j        k    r3t          j	        |dd¦  «         
                    t
          j        ¦  «        }t          j        |¦  «        }‰rt          |‰‰¦  «        n'|                     ‰‰ft          j        j        ¬¦  «        }t          j        t          j        |d¬¦  «        ¦  «        S )Nr   r7  r8  T©Úcopy)r   r  Údetachrz   rÕ   r   Úasarrayr~   r”   r:  rÓ   r   r  rò  r<  r=  r>  rÑ   rÒ   )rÝ   rÉ  r­   rì  Útarget_hÚtarget_ws      €€€r   Úresize_framez+resize_lanczos_frames.<locals>.resize_framec  sñ   ø€ Ý.3¬o¸eÑ.DÔ.DÐ[ˆe�lŠl‰nŒn× Ò Ñ"Ô"×(Ò(Ñ*Ô*Ð*Í"Ì*ÐUZÑJ[ÔJ[ˆØŒ9�œÒ Ð Ý”'˜#˜q #Ñ&Ô&×-Ò-­b¬hÑ7Ô7ˆCÝŒo˜cÑ"Ô"ˆØ;?ð  IÕ˜s H¨hÑ7Ô7Ð7ÀSÇZÂZÐQYÐ[cÐPdÕotÔoô  pHÀZñ  FIô  FIˆÝÔ¥¤¨°4Ð 8Ñ 8Ô 8Ñ9Ô9Ð9r   rª   Fr   ©r¿   r§   rÀ   )rƒ   rÈ   r×   rÖ   ry   )r  rù  rú  rì  r§   rÀ   rû  s    ```   r   Úresize_lanczos_framesrý  `  s¤   øøø€ Ý�&‰\Œ\€Fð:ð :ð :ð :ð :ð :ð :õ & l°F¸JÐUZÕhkÐlmÕorÐs~ð  tXõ  CVñ  CXô  CXñ  pYô  pYñ  iZô  iZð  emð  nñ  nô  nð  nr   c                 ó–  — | �| j         dd …         ||fk    r| S | j        | j        }}d„ |                      dddd¦  «                             ¦   «                              ¦   «         D ¦   «         }t          |||||¬¦  «        }d„ |D ¦   «         }t          j        |d¬	¦  «         	                    ||¬
¦  «         
                    ¦   «         S )Néþÿÿÿc                 óª   — g | ]P}|                      d dd¦  «        dz   dz                       dd¦  «                             t          j        ¦  «        ‘ŒQS )r   rn   r   r“   r‘   r7  )r  Úclampr‚   r   r”   ©rd   rÝ   s     r   r®   z'resize_lanczos_cthw.<locals>.<listcomp>q  se   € ð  Mð  Mð  MÐY^�—’˜a  AÑ&Ô&¨Ñ,°Ñ5×<Ò<¸QÀÑDÔD×GÒGÍÌÑTÔTð  Mð  Mð  Mr   r   r   rn   r   )rì  r§   c                 óÂ   — g | ]\}|                      t          j        ¦  «                             d dd¦  «                             d¦  «                             d¦  «        ‘Œ]S )rn   r   r   r‘   r“   )r‚   r   r•   r  r–   r—   r  s     r   r®   z'resize_lanczos_cthw.<locals>.<listcomp>s  sU   € ÐaÐaÐaÐQVˆe�hŠh•u”}Ñ%Ô%×-Ò-¨a°°AÑ6Ô6×;Ò;¸EÑBÔB×GÒGÈÑLÔLÐaÐaÐar   ©Údimr|   )rž   r}   r~   r  r÷  rz   rý  r   Ústackr‚   Ú
contiguous)r†   rù  rú  rì  r§   r}   r~   r  s           r   Úresize_lanczos_cthwr  m  s  € Ø€~˜œ b c cÔ*¨x¸Ð.BÒBÐBØˆØ”M 6¤<ˆE€Fð Mð  MÐbh×bpÒbpÐqrÐtuÐwxÐz{Ñb|Ôb|÷  cDò  cDñ  cFô  cF÷  cJò  cJñ  cLô  cLð  Mñ  Mô  M€FÝ" 6¨8°XÀDÐVaÐbÑbÔb€FØaÐaÐZ`ÐaÑaÔa€FÝŒ;�v 1Ð%Ñ%Ô%×(Ò(°¸eÐ(ÑDÔD×OÒOÑQÔQÐQr   r   c                 óþ   — t          |pd¦  «        }|dk    r| S t          j        t          j        t	          |¦  «        t	          |¦  «        f¦  «        } |dk    rt          j        nt          j        | ||¬¦  «        S )Nr   )Ú
iterations)rÖ   rå   ÚgetStructuringElementÚMORPH_ELLIPSEÚabsÚdilateÚerode)r¥   Úexpand_scaler
  Úkernels       r   Úexpand_or_shrink_maskr  v  sy   € Ý�|Ð( qÑ)Ô)€LØ�qÒÐØˆÝÔ&¥sÔ'8½3¸|Ñ;LÔ;LÍcÐR^ÑN_ÔN_Ð:`ÑaÔa€FØ9˜,¨Ò*Ð*�CŒJˆJµ´	¸4ÀÐT^Ð_Ñ_Ô_Ð_r   c                 ó¬  — t          j        | ¦  «        r8|                      ¦   «                              ¦   «                              ¦   «         nt          j        | ¦  «        } | j        dk    r0| j        d         dk    rt          j
        | t          j        ¦  «        } |�:|�8| j        d d…         ||fk    r#t          j        | ||ft          j        ¬¦  «        } t          j        |                      t
          j        d¬¦  «        |dt          j        ¦  «        \  }} t%          | |¦  «        } |r| |k    n| |k                         t
          j        ¦  «        S )Nr   r    rn   )ÚinterpolationFrõ  r7  )r   r  r÷  rz   rÕ   r   rø  r�  rž   rå   r  ÚCOLOR_BGR2GRAYr<  ÚINTER_NEARESTÚ	thresholdrÓ   r”   ÚTHRESH_BINARYr  r•   )r¥   rù  rú  r  Úinvertr  Ú_s          r   Úprepare_binary_mask_framer  }  s  € Ý*/¬/¸$Ñ*?Ô*?ÐUˆ4�;Š;‰=Œ=×ÒÑÔ×$Ò$Ñ&Ô&Ð&ÅRÄZÐPTÑEUÔEU€DØ„y�A‚~€~˜$œ* Rœ.¨AÒ-Ð-ÝŒ|˜D¥#Ô"4Ñ5Ô5ˆØÐ Ð 4¸¼ÀBÀQÀB¼ÈHÐV^ÐK_Ò9_Ð9_ÝŒz˜$ ¨8Ð 4ÅCÔDUÐVÑVÔVˆÝŒm˜DŸKšK­¬°u˜KÑ=Ô=¸yÈ#ÍsÔO`ÑaÔa�G€A€tÝ   |Ñ4Ô4€DØ!'Ð=ˆD�IÒÐ¨T°IÒ-=×EÒEÅbÄjÑQÔQÐQr   c                 óà  ‡‡‡‡— | �t          ‰pd¦  «        dk    s|s| S | j        | j        }}t          |                      ¦   «         ¦  «        dk     }|r>|                      ¦   «                              ¦   «                              ¦   «         dz   dz  n7|                      ¦   «                              ¦   «                              ¦   «                              dd¦  «                             t          j
        ¦  «        Št          j        |t          j
        ¬¦  «                             dd¦  «        Št          j        |€g d¢n|t          j
        ¬¦  «                             d	d	d¦  «        Šˆˆˆfd
„}t          |ˆfd„t          ‰j        d	         ¦  «        D ¦   «         ddt#          d	t          |pt%          ¦   «         ¦  «        ¦  «        d¬¦  «        }	t          j        |	d¬¦  «                             ddd	d¦  «                             t          j        ¦  «        }
|r(|
                     d¦  «                             d¦  «        }
|
                     ||¬¦  «                             ¦   «         S )Nr   r“   r‘   r7  r›   r    r   )r   r   r   r   c                 óN  •— |                       ddd¦  «                             ¦   «         } t          j        ‰| j        ¦  «                             ¦   «         }t          j        | j        d d…         t          ¬¦  «        }‰D ]‘}t          j        | 	                    ddd¦  «        dk    | dk    | dk     ¦  «         
                    d¬¦  «        }t          |                     t          j        ¦  «        d	z  ‰¦  «        d
k    }|| z  }|||<   ||z  }Œ’t          j        |¦  «        S )Nr   rn   r   r›   r   é€   r    ©Úaxisr7  rÁ  )r  rÕ   r   Úbroadcast_torž   rö  ÚzerosÚboolÚwhereÚreshapeÚallr  rÓ   r”   r   rÑ   )rÝ   r    ÚoccupiedÚcolorÚselectorÚ
backgroundÚcolorsr  s        €€€r   Úexpand_framez.expand_colored_mask_cthw.<locals>.expand_frame�  s  ø€ Ø—’˜a  AÑ&Ô&×,Ò,Ñ.Ô.ˆÝ” ¨U¬[Ñ9Ô9×>Ò>Ñ@Ô@ˆÝ”8˜EœK¨¨¨œOµ4Ð8Ñ8Ô8ˆØð 	!ð 	!ˆEÝ”x §¢¨a°°AÑ 6Ô 6¸#Ò =¸uÈº|ÈUÐUXÊ[ÑYÔY×]Ò]ÐceÐ]ÑfÔfˆHÝ,¨X¯_ª_½R¼XÑ-FÔ-FÈÑ-LÈlÑ[Ô[Ð^aÒaˆHØ˜˜	Ñ!ˆHØ$ˆF�8ÑØ˜Ñ ˆHˆHÝÔ Ñ'Ô'Ð'r   c                 ó(   •— g | ]}‰d d …|f         ‘ŒS r   rx   )rd   ÚiÚmask_u8s     €r   r®   z,expand_colored_mask_cthw.<locals>.<listcomp>œ  s%   ø€ Ð6fÐ6fÐ6fÈ°w¸q¸q¸qÀ!¸t´}Ð6fÐ6fÐ6fr   rª   FTrü  r  rn   r|   )rÖ   r}   r~   r  r  r÷  rz   r  r‚   r   r”   r   rø  r%  rÈ   r�   rž   r×   ry   r  r  r•   r–   r—   r  )r¥   Úobject_colorsr  Úbackground_colorr§   r}   r~   Úwas_negativer,  r  r4  r*  r+  r/  s     `        @@@r   Úexpand_colored_mask_cthwr3  ‡  s�  øøøø€ Ø€|•s˜<Ð,¨1Ñ-Ô-°Ò2Ð2¸-Ð2ØˆØ”K ¤ˆE€FÝ˜Ÿš™œÑ$Ô$ qÒ(€LØ>JÐk�—’‘”×!Ò!Ñ#Ô#×)Ò)Ñ+Ô+¨cÑ1°UÑ:Ð:ÐPT×P[ÒP[ÑP]ÔP]×PaÒPaÑPcÔPc×PiÒPiÑPkÔPk×rÒrÐstÐvyÑzÔz×}Ò}õ  Dô  Jñ  Kô  K€GÝŒZ˜­R¬XÐ6Ñ6Ô6×>Ò>¸rÀ1ÑEÔE€FÝ”Ð)9Ð)A˜I˜I˜I˜IÐGWÕ_aÔ_gÐhÑhÔh×pÒpÐqrÐtuÐwxÑyÔy€Jð
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(õ (¨Ð6fÐ6fÐ6fÐ6fÍeÐT[ÔTaÐbcÔTdÑNeÔNeÐ6fÑ6fÔ6fÐhrð  BGõ  UXð  YZõ  \_ð  `kð  `Dõ  oBñ  oDô  oDñ  \Eô  \Eñ  UFô  UFð  QUð  Vñ  Vô  V€FÝ
Œ+�f !Ð
$Ñ
$Ô
$×
,Ò
,¨Q°°1°aÑ
8Ô
8×
;Ò
;½E¼MÑ
JÔ
J€CØð (Ø�hŠh�u‰oŒo×"Ò" 3Ñ'Ô'ˆØ�6Š6˜ uˆ6Ñ-Ô-×8Ò8Ñ:Ô:Ð:r   )Ú	max_widthÚ
max_heightc                óÆ  — |d k    s|dk    r| |fS |dk    r=t          | |z  ||z  ¦  «        }t          ||z  | |z  ¦  «        }	t          ||	¦  «        }
n| |z  ||z  z  dz  }
||f||ffD ] \  }}|�t          |
||z  |z  |z  ¦  «        }
Œ!t          ||
z  |z  ¦  «        |z  }t          ||
z  |z  ¦  «        |z  }|€|� t          ||¦  «        t          ||¦  «        }}||fS )Nrn   r   ç      à?)r  r×   rA   )Úcanvas_heightÚcanvas_widthÚimage_heightÚimage_widthÚfit_into_canvasrà  r4  r5  Úscale1Úscale2rŠ  ÚlimitÚ	dimensionÚ
new_heightÚ	new_widths                  r   Úcalculate_new_dimensionsrC  ¢  s?  € Ø˜$ÒÐ /°QÒ"6Ð"6à˜lÐ*Ð*Ø˜!ÒÐÝ�m lÑ2°LÀ;Ñ4NÑOÔOˆÝ�l \Ñ1°=À;Ñ3NÑOÔOˆÝ�F˜FÑ#Ô#ˆˆà Ñ-°ÀÑ1KÑLÐPSÑTˆà'¨Ð5¸
ÀLÐ7QÐRð Oð OÑˆˆyØÐÝ˜ ¨Ñ 3°jÑ @ÀIÑMÑNÔNˆEøÝ˜ uÑ,¨zÑ9Ñ:Ô:¸ZÑG€JÝ�{ UÑ*¨ZÑ7Ñ8Ô8¸:ÑE€IØÐ 
Ð 6Ý # J°
Ñ ;Ô ;½SÀÈYÑ=WÔ=W�Iˆ
Ø�yÐ Ð r   c                 óÜ   — |rt          | ||¦  «        } | j        \  }}nJ| j        \  }}	t          |||	|||¬¦  «        \  }}|                      ||ft          j        j        ¬¦  «        } | ||fS )N)rà  r8  )rò  ró   rC  r<  r   r=  r>  )
r7   r8  r9  r<  Úfit_croprà  rB  rA  r;  r:  s
             r   Ú%calculate_dimensions_and_resize_imagerF  ¶  s—   € Øð YÝ  ¨°mÑDÔDˆØ %¤
Ñˆ	�:�:à$)¤JÑ!ˆ�\Ý 8¸ÈÐVbÐdoð  rAð  PZð  !\ñ  !\ô  !\Ñˆ
�IØ—’˜i¨Ð4½uÔ?OÔ?W�ÑXÔXˆØ�*˜iÐ'Ð'r   r‘   )r7  r7  r7  c                óŠ  — |€|�t          ||||d|||¬¦  «        \  }}|rt          ¦   «         }g }g }t          |dk    r| n
| d | …         ¦  «        D �]\  }}|j        \  }}d }|dk    r|dk    s|dk    r^|�!|	rt	          |||f|
d||dd|¬¦	  «	        \  }}�nå|j        ||fk    r*|                     ||ft          j        j        ¬¦  «        }�n®|}�nª|dk    �rat          |dt          j        ¬	¦  «                             ddd
¦  «                             ¦   «         }|j        dk    r4t          j        |t          j        |dd d…f         ¦  «        gd¬¦  «        }t          j        ||||j        d         f¦  «                             ¦   «         }t+          ||z  ||z  ¦  «        }t-          ||z  ¦  «        }t-          ||z  ¦  «        }|                     ||ft          j        j        ¬¦  «        }||z
  dz  } ||z
  dz  }!t          j        |¦  «        || | |z   …|!|!|z   …f<   t          j        |¦  «        }nBt          ||||d|||¬¦  «        \  }}|                     ||ft          j        j        ¬¦  «        }|r~|r|dk    sv|dk    sp|rC|j        dk    r$|                     ¦   «         d
         d         dk     st5          ||dd¬¦  «        }n+t5          ||dd|dgz   ¬¦  «                             d¦  «        }|r6|                     t;          |¦  «                             d¦  «        ¦  «         n|                     |¦  «         |                     |¦  «         �Œ|r\| | d …         D ]P}|                     |r"t;          |¦  «                             d¦  «        n|¦  «         |                     d ¦  «         ŒQ||fS )Nr   )rà  r4  r5  r   rn   T)Ú
full_framer¨  rš  Úreturn_maskÚreturn_imageÚoutpainting_quantize_marginsr8  rz   r|   r   rÃ  .r    r  r7  )rj  Úalpha_matting_erode_sizerm  )rj  rL  rm  rn  ro  )rC  rk  r¸   ró   Úfit_image_into_canvasr<  r   r=  r>  r�   r   r”   rŠ   rÕ   rÅ  r   ÚconcatenateÚ
zeros_liker!  rž   rö  r  rÖ   rÒ   r  Ú
getextremar   rp  rD   rs  rÔ   )"Úimg_listÚbudget_widthÚbudget_heightÚrm_backgroundÚany_background_refr<  rà  r¨  rš  Úbackground_ref_outpaintedÚinpaint_colorÚreturn_tensorÚignore_last_refsÚbackground_removal_colorrK  Ú
keep_alphar4  r5  rj  Úoutput_listÚoutput_mask_listr.  r­   rï   rð   Úresized_maskÚresized_imageÚcanvas_colorÚcanvasrŠ  rA  rB  ÚtopÚlefts"                                     r   Úresize_and_remove_backgroundrd  À  sè  € ØÐ 
Ð 6Ý&>¸}ÈlÐ\iÐkwÐyzð  HRð  ^gð  t~ð  'ñ  'ô  'Ñ#ˆ�|Øð &Ý#Ñ%Ô%ˆà€KØÐÝÐ(8¸AÒ(=Ð(=˜H˜HÀ8ÐL^ÐN^ÐM^ÐL^ÔC_Ñ`Ô`ð %.ñ %.‰ˆˆ3Øœ‰ˆˆvØˆØ Ò"Ð" q¨!¢t tÐ/AÀQÒ/FÐ/FØÐ+Ð0IÐ+Ý.CÀCÈ-ÐYeÐIfÐhuð  EIð  ^nð  DUð  dhð  x|ð  ]yð  /zñ  /zô  /zÑ+�˜|™|Ø”˜l¨MÐ:Ò:Ð:Ø"Ÿzšz¨<¸Ð*GÕRWÔRbÔRj˜zÑkÔk�‘à"�‘Ø Ò!Ñ!Ý(Ð)AÈ%ÕW\ÔWbÐcÑcÔc×hÒhÐijÐlmÐopÑqÔq×wÒwÑyÔyˆLØŒx˜6Ò!Ð!Ý!œ~¨|½R¼]È<ÐX[Ð]_Ð^_Ð]_ÐX_ÔK`Ñ=aÔ=aÐ.bÐikÐlÑlÔl�Ý”_ \°MÀ<ÐQ]ÔQcÐdfÔQgÐ3hÑiÔi×nÒnÑpÔpˆFÝ˜¨Ñ.°¸uÑ0DÑEÔEˆEÝ˜V e™^Ñ,Ô,ˆJÝ˜E E™MÑ*Ô*ˆIØŸ:š: y°Ð&<ÅuÔGWÔG_˜:Ñ`Ô`ˆMØ  :Ñ-°!Ñ3ˆCØ  9Ñ,°Ñ2ˆDÝBDÄ(È=ÑBYÔBYˆF�3�s˜ZÑ'Ð'¨¨d°YÑ.>Ð)>Ð>Ñ?Ý!œO¨FÑ3Ô3ˆMˆMå$<¸]ÈLÐZ`ÐbgÐijð  xBð  NWð  dnð  %oñ  %oô  %oÑ!ˆJ˜	ØŸ:š: y°Ð&<ÅuÔGWÔG_˜:Ñ`Ô`ˆMØð 	rÐ#5ð 	r¸!¸Qº$¸$ÐBTÐXYÒBYÐBYàð rØœ FÒ*Ð*¨s¯~ª~Ñ/?Ô/?ÀÔ/BÀ1Ô/EÈÒ/KÐ/KÝ$*¨=À'ÐfgÐy}Ð$~Ñ$~Ô$~�Møå & }¸gÐbcÐuyð  D\ð  `að  _bñ  Dbð  !cñ  !cô  !c÷  !kò  !kð  lqñ  !rô  !r�Øð 	.Ø×ÒÕ6°}ÑEÔE×OÒOÐPQÑRÔRÑSÔSÐSÐSà×Ò˜}Ñ-Ô-Ð-Ø×Ò Ñ-Ô-Ð-Ñ-Øð *ØÐ-Ð-Ð.Ð.Ô/ð 	*ð 	*ˆCØ×ÒÈMÐbÕ6°sÑ;Ô;×EÒEÀaÑHÔHÐHÐ_bÑcÔcÐcØ×#Ò# DÑ)Ô)Ð)Ð)àÐ(Ð(Ð(r   c
           
      ó6  — t          ||t          j        ¬¦  «        dz  dz
  }
|
                     d¦  «        }
| j        \  }}||f|k    ru|d k    rot          j        | ¦  «                             d¦  «                             d¦  «                             d¦  «        } |rt          j	        | d d…         ¦  «        nd }�n2|d k    r"|\  }}t          |||d||||	¬¦  «        \  }}}}n|\  }}|r	|}|}dx}}nJt          ||z  ||z  ¦  «        }t          ||z  ¦  «        }t          ||z  ¦  «        }||z
  dz  }||z
  dz  }|                      ||ft          j        j        ¬¦  «        } t          j        | ¦  «                             d¦  «                             d¦  «                             d¦  «        } |d k    rN|
                     d	d||¦  «                             ¦   «         }| |d d …d d …||z   ||z   |z   …||z   ||z   |z   …f<   nA|
                     d	d||¦  «                             ¦   «         }| |d d …d d …|||z   …|||z   …f<   |} d }|r |d k    rIt          j        dd||ft          j        |¬
¦  «        }d|d d …d d …||z   ||z   |z   …||z   ||z   |z   …f<   n<t          j        dd||ft          j        |¬
¦  «        }d|d d …d d …|||z   …|||z   …f<   |                     |¦  «        }|rt+          | ¦  «        |fS |                      |¦  «        |fS )Nr|   r‘   r   r7  )rã  r   rn   r8  r   r  )r�   r   r  rÔ   ró   ÚTFÚ	to_tensorr—   r–   rO  rê  r  rÖ   r<  r   r=  r>  rv  rw  Úonesr‚   r{  )Úref_imgÚ
image_sizeÚcanvas_tf_bgr}   rH  r¨  rš  rI  rJ  rK  rW  Ú	ref_widthÚ
ref_heightra  rÞ  rß  r8  r9  rè  ré  rA  rB  rb  rc  rŠ  s                            r   rM  rM  õ  s÷  € Ý! ,°vÅUÄ[ÐQÑQÔQÐTYÑYÐ\]Ñ]€MØ!×+Ò+¨AÑ.Ô.€Mà#œLÑ€IˆzØ�IÐ *Ò,Ð,Ð1AÀdÒ1JÐ1JÝ”,˜wÑ'Ô'×,Ò,¨SÑ1Ô1×6Ò6°sÑ;Ô;×EÒEÀaÑHÔHˆØ2=ÐG•Ô! '¨"¨1¨"¤+Ñ.Ô.Ð.À4ˆ‰à˜tÒ#Ð#Ø(2Ñ%ˆL˜+ÝCaÐbnÐp{ð  ~Nð  PQð  Sdð  fpð  r{ð  Njð  Dkñ  Dkô  DkÑ@ˆM˜<¨°[°[à*4Ñ'ˆM˜<Øð 	3Ø&ˆJØ$ˆIØˆNˆC�$�$õ ˜¨
Ñ2°LÀ9Ñ4LÑMÔMˆEÝ˜Z¨%Ñ/Ñ0Ô0ˆJÝ˜I¨Ñ-Ñ.Ô.ˆIØ  :Ñ-°!Ñ3ˆCØ  9Ñ,°Ñ2ˆDØ—.’. )¨ZÐ!8Å5ÔCSÔC[�.Ñ\Ô\ˆÝ”,˜wÑ'Ô'×,Ò,¨SÑ1Ô1×6Ò6°sÑ;Ô;×EÒEÀaÑHÔHˆØ˜tÒ#Ð#Ø"×)Ò)¨!¨Q°¸kÑJÔJ×PÒPÑRÔRˆFð FˆF�1�1�1�a�a�a˜ cÑ)¨*°sÑ*:¸ZÑ*GÐGÈÐW[ÑI[Ð\gÐjnÑ\nÐqzÑ\zÐIzÐzÑ{Ð{à"×)Ò)¨!¨Q°¸|ÑLÔL×RÒRÑTÔTˆFØHOˆF�1�1�1�a�a�a˜˜S :Ñ-Ð-¨t°D¸9Ñ4DÐ/DÐDÑEØˆØˆØð 	'Ø 4Ò'Ð'Ýœ Q¨¨<¸Ð$EÍeÌkÐbhÐiÑiÔi�ð CD��q�q�q˜!˜!˜!˜Z¨#Ñ-¨j¸3Ñ.>ÀÑ.KÐKÈ[Ð[_ÑM_Ð`kÐnrÑ`rÐu~Ñ`~ÐM~Ð~ÑÐåœ Q¨¨=¸,Ð$GÕPUÔP[ÐdjÐkÑkÔk�ØLM��q�q�q˜!˜!˜!˜S  zÑ!1Ð1°4¸¸yÑ8HÐ3HÐHÑIØ—Y’Y˜vÑ&Ô&ˆFØð 8Ý& wÑ/Ô/°Ð7Ð7à�:Š:�fÑÔ˜vÐ%Ð%r   éQ   ru  c                 ó¬  — g g }}t          ||t          j        ¬¦  «        }|dz  dz
                       d¦  «        }|�|j        d         nd}t          j        ||                     ¦   «         ¦  «        }|�¨t          d„ | D ¦   «         ¦  «        r�|                     d¦  «         	                    d¦  «         
                    ¦   «                              dd¦  «                             t          j        ¦  «        }t          j        t          |¦  «        |¦  «        r|}|d ur|j        t          j        k    p*|pt!          |	¦  «         pt          d„ |
D ¦   «         ¦  «        }t#          t%          | |¦  «        ¦  «        D �]Q\  }\  }}|o|d u p||j        d         z   |k     }|s|r |st          |¦  «        t'          |¦  «        fn||f\  }}|�˜|�|j        |j        k    r|nt          |¦  «        }|€|nt          j        ||gd¬	¦  «        }|rW|€t          j        |d d…         ¦  «        n8t          j        t          j        |d d…         |j        ¬
¦  «        |gd¬	¦  «        }|rì|€# |j        d|g|¢R Ž                      ¦   «         }�nN|j        d         |k     rµ|j        t          j        k    r2|                     t          j        ¦  «                             d¦  «        n|} |                     |j        ¦  «        j        d||j        d         z
  g|j        dd …         ¢R Ž                      ¦   «         } t          j        || gd¬	¦  «        }n‡|�…|j        d         |k     r|j        d         n|j        d         |z
  |z  |z  |z   }!|!|j        d         k     r/t3          d|j        d         › d|j        d         |!z
  › d�¦  «         |d d …d |!…f         }|�|j        t          j        k    rdnd}"|r»|�¹|€t          j        |d d…         |"¦  «        }n™|j        d         |j        d         k     rdt          j        |t          j        d|j        d         |j        d         z
  g|j        dd …         ¢R |"|j        |j        ¬¦  «        gd¬	¦  «        }n|d d …d |j        d         …f         }|�ðt#          |	¦  «        D ]‰\  }#}$|$s‚||#z   }%|j        t          j        k    r2|                     t          j        ¦  «                             d¦  «        n|                     |j        ¦  «        |d d …|%|%dz   …f<   |r|"|d d …|%|%dz   …f<   ŒŠt#          |
¦  «        D ]G\  }#}&|&d k    r<||#z   }%t9          |&|||d||||¬¦	  «	        \  |d d …|%|%dz   …f<   }'|r|'|d d …|%|%dz   …f<   ŒH|                     |¦  «         |                     |¦  «         �ŒS||fS )Nr|   r‘   r   r   c              3   óH   K  — | ]}|d uo|j         t          j        k    V — Œd S r   )r~   r   r”   )rd   Úguides     r   rg   z/prepare_video_guide_and_mask.<locals>.<genexpr>0  s8   è è € Ð*vÐ*vÐ`e¨5¸Ð+<Ð+[ÀÄÕPUÔP[ÒA[Ð*vÐ*vÐ*vÐ*vÐ*vÐ*vr   r“   r7  c              3   ó   K  — | ]}|d uV — Œ	d S r   rx   r  s     r   rg   z/prepare_video_guide_and_mask.<locals>.<genexpr>5  sZ   è è € ð  SAð  SAð  joð  TYð  aeð  Teð  SAð  SAð  SAð  SAð  SAð  SAr   r  r›   r   rÿ  z!invalid number of control frames z, potentially z frames will be lostr  T)rI  rK  )r�   r   r  rÔ   rž   ÚequalrA   ÚanyÚaddr9  r  r  r‚   r”   r˜   r~   r&  r¸   Úzipr¦   ÚcatrO  rv  rw  r}   ÚprintrÇ  ÚfullrM  rD   )(Úvideo_guidesÚvideo_masksÚpre_video_guiderj  Úcurrent_video_lengthÚlatent_sizeÚany_maskÚany_guide_paddingÚguide_inpaint_colorÚkeep_video_guide_framesÚinject_framesr¨  rš  r}   rK  Úframe_offsetÚ
src_videosÚ	src_masksrW  Úinpaint_color_compressedÚprepend_countÚwhole_colorÚpre_video_guide_uint8Úfloat_editsÚguide_noÚcur_video_guideÚcur_video_maskÚpaddedÚ	src_videoÚsrc_maskÚ	pre_guider(  ÚpadÚnew_num_framesÚ	full_maskÚkÚkeepÚposrÝ   Úmsks(                                           r   Úprepare_video_guide_and_maskrš  (  sø  € Ø �	€JÝ!Ð"5¸fÍEÌKÐXÑXÔX€MØ -°Ñ 5¸Ñ 9×DÒDÀQÑGÔGÐØ0?Ð0K�OÔ)¨!Ô,Ð,ÐQR€Mõ ”+˜m¨]×-@Ò-@Ñ-BÔ-BÑCÔC€KØÐ"¥sÐ*vÐ*vÐiuÐ*vÑ*vÔ*vÑ'vÔ'vÐ"à /× 3Ò 3°CÑ 8Ô 8× =Ò =¸eÑ DÔ D× KÒ KÑ MÔ M× TÒ TÐUVÐX[Ñ \Ô \× _Ò _Õ`eÔ`kÑ lÔ lÐÝŒ;•~Ð&;Ñ<Ô<¸oÑNÔNð 	4Ø3ˆOØ!¨Ð-ÐV°/Ô2GÍ5Ì;Ò2Vð  AÐ_jð  `KÕnqð  sJñ  oKô  oKð  [Lð  Aõ  PSð  SAð  SAð  s@ð  SAñ  SAô  SAñ  PAô  PA€KÝ7@ÅÀ\ÐS^ÑA_ÔA_Ñ7`Ô7`ð ,#ñ ,#Ñ3ˆÑ3�? NØ"ð  D¨¸4Ð(?ð  )CÀ=ÐSbÔShÐijÔSkÑCkð  oCò  DCˆØhsð  yÐw}ð  yð  GRð  y�~¨oÑ>Ô>Õ@SÐTbÑ@cÔ@cÐdÐdð  Yhð  jxð  XyÑˆ	�8ØÐ&Ø+4Ð+<À	ÄÐSbÔShÒ@hÐ@h˜˜Õn|ð  ~Mñ  oNô  oNˆIØ%.Ð%6˜	˜	½E¼IÈ	ÐS\ÐG]ÐcdÐ<eÑ<eÔ<eˆIØð iØ>FÐ>N�5Ô+¨I°b°q°b¬MÑ:Ô:Ð:ÕTYÔT]Õ`eÔ`pÐqzÐ{}Ð|}Ð{}Ôq~ð  GOô  GUð  aVñ  aVô  aVð  X`ð  `að  ghð  Uiñ  Uiô  Ui�àð 	6ØÐ Ø;Ð4Ô;¸AÐ?SÐaÐV`ÐaÐaÐa×gÒgÑiÔi�	‘	Ø” Ô#Ð&:Ò:Ð:ØFOÄoÕY^ÔYdÒFdÐFd˜×(Ò(­¬Ñ5Ô5×?Ò?ÀÑBÔBÐBð  kC�Ø7�e—h’h˜yÔ/Ñ0Ô0Ô7¸Ð;OÐR[ÔRaÐbcÔRdÑ;dÐ|ÐgpÔgvÐwyÐwzÐwzÔg{Ð|Ð|Ð|÷  Cò  Cñ  Eô  E�Ý!œI y°#Ð&6¸AÐ>Ñ>Ô>�	øØÐ"Ø3<´?À1Ô3EÈÒ3TÐ3T˜Yœ_¨QÔ/Ð/Ð[dÔ[jÐklÔ[mÐp|Ñ[|ð  BMñ  [Mð  P[ñ  [[ð  ^jñ  [jˆNØ 	¤°Ô 2Ò2Ð2Ýð  T¸)¼/È!Ô:Lð  Tð  TÐ\eÔ\kÐlmÔ\nÐo}Ñ\}ð  Tð  Tð  Tñ  Uô  Uð  UØ! ! ! ! _ n _Ð"4Ô5ˆIà$Ð0°Y´_ÍÌÒ5SÐ5S�C�CÐYZˆ	Øð 	<˜	Ð-ØÐÝ œ?¨9°R°a°R¬=¸)ÑDÔD��Ø” Ô" Y¤_°QÔ%7Ò7Ð7Ý œ9 hµ´
¸QÀ	ÄÐPQÔ@RÐT\ÔTbÐcdÔTeÑ@eÐ<~ÐhpÔhvÐwyÐwzÐwzÔh{Ð<~Ð<~ð  AJð  T]ô  Tcð  mvô  m}ð  1~ñ  1~ô  1~ð  &@ð  FGð  Hñ  Hô  H��à# A A AÐ':¨	¬¸Ô(:Ð':Ð$:Ô;�àÐ Ý$Ð%<Ñ=Ô=ð Dð D‘��4Øð DØ'¨!Ñ+�CØ]fÔ]lÕpuÔp{Ò]{Ð]{¨}×/?Ò/?ÅÄÑ/LÔ/L×/VÒ/VÐWXÑ/YÔ/YÐ/Yð  BZ÷  /^ò  /^ð  _hô  _oñ  /pô  /p�I˜a˜a˜a  S¨¡U ˜lÑ+ØÐC¸) ¨!¨!¨!¨S°°Q±¨Y¨,Ñ!7øå% mÑ4Ô4ð >ð >‘��5Ø˜D’=�=Ø'¨!Ñ+�CÝ3HÈÐPZÐ\oÐqwÐy}ð  @Pð  Rcð  rzð  Yuð  4vñ  4vô  4vÑ0�I˜a˜a˜a  S¨¡U ˜lÑ+¨SØÐ=¸# ¨!¨!¨!¨S°°Q±¨Y¨,Ñ!7øØ×Ò˜)Ñ$Ô$Ð$Ø×Ò˜Ñ"Ô"Ð"Ñ"Ø�yÐ Ð r   )r_   r   )r™   )r   )FNT)rN  )r   F)r|  r}  N)r    )rÁ  )rÜ  r_   NNr   )FN)r   )NNr   FrÁ  )NN)r‘   rz   FNr_   FFr   )iÚargparser@   r#   Úos.pathr$   ÚospÚ!torchvision.transforms.functionalÚ
transformsÚ
functionalrf  Útorch.nn.functionalÚnnÚFrå   r+  Úimageior   ÚPILr   rÕ   r   rE  r   r   Úffmpegr·   Ú	functoolsr   r_   r   rH  Úvideo_decoder   r	   r
   Úvirtual_mediar   r   r   Úgallery_sourcesr   r   r   Úvideo_info_cacherÖ   r   r*   r,   r.   r2   r4   r=   rR   rS   r^   rj   ru   ry   r  r�   Úpreserve_formatr˜   r¢   r¦   rw   rÈ   rß   rñ   rõ   r  r  rÏ   r#  r�   r%  r5  rC  rM  rb  rk  rq  rs  r{  r�  r”  rž  r©  r¯  r¾  rÀ  rÌ  rÒ  rÛ  rê  rò  rý  r  r  r  r3  rC  rF  rd  rM  rš  rx   r   r   ú<module>r­     s1  ðà €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kØ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bØ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ Vð Ð Ð Ð Ð Ð ØÐ ð$˜#ð $ð $ð $ð $ð9ð 9ð 9ð
oð oð oð
:ð :ð :ðað að aðbð bð bðð ð ðð ð ð0 
€	€	€	Ø Ð Ð Ð Ð Ð ðið ið iðbð bð bð bð
ð 
ð 
ð 
ðð ð ð !&¨U¬[ð  ð  ð  ð  ð& ).Ô(=ð yð yð yð yðð ð ð ð -2Ô,Að mð mð mð mð UYÐmyÐmoÔmyÑm{Ôm{Ð}~Ñm~ð  LQð &ð &Ðgjð &ð &ð &ð &ðPoð oð oð oð" €�3ÐÑÔð+ð +ñ Ôð+ð.ð .ð .ð €�3ÐÑÔðð ñ Ôðð46ð 6ð 6ð0=Pð =P˜sð =P¨cð =PÈ4ð =Pð  DIô  DPð =Pð =Pð =Pð =Pð~ð ð ð.ð ð ð ð'ð 'ð 'ð €ðð ð ð ð"Uð Uð Uð Uðdð dð dð
lð 
lð 
lð 
lðð ð ð ð0?ð ?ð ?ð ?ðYð Yð Yð	Vð 	Vð 	Vð 	Vð:ð :ð :ð$ ð  ð  ð  ð(%ð %ð %ð %ð)ð )ð )ð )ðð ð ðð ð ð"2ð 2ð 2ð 2ð0-ð -ð -ð nð nð nð nðRð Rð Rð Rð`ð `ð `ð `ðRð Rð Rð Rð;ð ;ð ;ð ;ð6!ð  CGð  TXð !ð !ð !ð !ð !ð((ð (ð (ð (ð ~ð  MOð  dhð  ~@ð  ^bð  tyð  KPð  efð  DSð  DSð  DSð  tuð  DIð 3)ð  X\ð  imð 3)ð 3)ð 3)ð 3)ð 3)ðj1&ð 1&ð 1&ð 1&ðf rtð  DEð  RWð  mrð  JOð  kmð  @Bð  W[ð  qsð  }Bð  cdð  uvð ;!ð ;!ð ;!ð ;!ð ;!ð ;!r   