§
    ÎÐj]#  ã                  ó  — d dl mZ d dlZd dlmZ d dlmZ d dlZd dl	Z	dZ
dZdZdZe
d	œd:d„Zd;d„Z G d„ d¦  «        Z G d„ d¦  «        ZdZdZd<d„Zd=d„Zdd œd>d"„Zd>d#„Zdd œd>d$„Zd?d&„Zd'd(œd@d+„ZdAd-„ZdAd.„Zd d/d0œdBd6„ZdCd9„ZdS )Dé    )ÚannotationsN)ÚPath)ÚIterableg     `i@zDG(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1)z	10000,400ú&©Úreference_white_nitsr   ÚfloatÚreturnÚstrc                ó*   — dt          | ¦  «        d›d�S )NzWzscale=pin=709:tin=linear:min=gbr:rin=full:p=2020:t=smpte2084:m=2020_ncl:r=limited:npl=z.12gz,format=yuv420p10le)r	   r   s    ú8C:\Users\johnn\OneDrive\Documents\AI\shared\utils\hdr.pyÚhdr10_zscale_filterr      s*   € ð	Ý7<Ð=QÑ7RÔ7RÐZð	ð 	ð 	ðó    c                 ó(   — dt           › dt          › d�S )Nz(hdr10=1:repeat-headers=1:master-display=z	:max-cll=z:log-level=none)ÚHDR10_MASTER_DISPLAYÚHDR10_MAX_CLL© r   r   Úhdr10_x265_paramsr      s   € ØsÕ6JÐsÐsÕUbÐsÐsÐsÐsr   c                  óB   — e Zd ZdZdZdZdZdZdZdZ	dd„Z
dd„Zdd„ZdS )ÚLogC3gåb¬ã8@gÒ6þDeÃª?g‡ùòì£Ï?gx™a£¬Ø?gñ×d�zx@gFCÆ£TÂ·?gv4õ»°…?Úhdrútorch.Tensorr
   c                ó   — t          j        |d¬¦  «        }| j        t          j        | j        |z  | j        z   ¦  «        z  | j        z   }| j        |z  | j        z   }t          j	        || j
        k    ||¦  «                             dd¦  «        S )Nç        ©Úminç      ð?)ÚtorchÚclampÚCÚlog10ÚAÚBÚDÚEÚFÚwhereÚCUTÚclamp_)Úselfr   ÚxÚlog_partÚlin_parts        r   ÚcompresszLogC3.compress&   s|   € ÝŒK˜ Ð%Ñ%Ô%ˆØ”6�EœK¨¬°©
°T´VÑ(;Ñ<Ô<Ñ<¸t¼vÑEˆØ”6˜A‘: ¤Ñ&ˆÝŒ{˜1 ¤š=¨(°HÑ=Ô=×DÒDÀSÈ#ÑNÔNÐNr   Úldrc                ó.   — t          j        |dd¦  «        S )Nr   r   )r   r   )r*   r/   s     r   Úcompress_ldrzLogC3.compress_ldr,   s   € ÝŒ{˜3  SÑ)Ô)Ð)r   Úlogcc                óF  — t          j        |dd¦  «        }| j        | j        z  | j        z   }t          j        d|| j        z
  | j        z  ¦  «        | j        z
  | j	        z  }|| j        z
  | j        z  }t          j
        ||k    ||¦  «                             d¬¦  «        S )Nr   r   g      $@r   )r   r   r%   r(   r&   Úpowr$   r    r#   r"   r'   r)   )r*   r2   Úcut_logÚlin_from_logÚlin_from_lins        r   Ú
decompresszLogC3.decompress/   s’   € ÝŒ{˜4  cÑ*Ô*ˆØ”&˜4œ8Ñ# d¤fÑ,ˆÝœ	 $¨°´©¸$¼&Ñ(@ÑAÔAÀDÄFÑJÈdÌfÑTˆØ˜tœv™¨¬Ñ/ˆÝŒ{˜4 7š?¨L¸,ÑGÔG×NÒNÐSVÐNÑWÔWÐWr   N)r   r   r
   r   )r/   r   r
   r   )r2   r   r
   r   )Ú__name__Ú
__module__Ú__qualname__r"   r#   r    r$   r%   r&   r(   r.   r1   r8   r   r   r   r   r      s}   € € € € € Ø€AØ€AØ€AØ€AØ€AØ€AØ
€CðOð Oð Oð Oð*ð *ð *ð *ðXð Xð Xð Xð Xð Xr   r   c                  ó:   — e Zd ZdZdZdZdZdZdZdZ	dd„Z
dd„ZdS )ÚACEScctzaACEScct log encoding of linear ACEScg (AP1 primaries), as used by the LTX-2.5 SDR-to-HDR IC-LoRA.g$ñ�
š%@g»Šåï©²?g      €?gå=Ñ÷DßÃ?g…ëQ¸…1@gq=
×£p#@Ú
linear_ap1r   r
   c                ó$  — t          j        |d¬¦  «        }t          j        t          j        |d¬¦  «        ¦  «        | j        z   | j        z  }t          j        || j        k    || j        |z  | j        z   ¦  «         	                    dd¦  «        S )Nr   r   gê-�™—q=r   )
r   r   Úlog2Ú
LOG_OFFSETÚ	LOG_SCALEr'   ÚX_BREAKr"   r#   r)   )r*   r>   r+   r,   s       r   r.   zACEScct.compressA   s|   € ÝŒK˜
¨Ð,Ñ,Ô,ˆÝ”J�uœ{¨1°%Ð8Ñ8Ô8Ñ9Ô9¸D¼OÑKÈtÌ~Ñ]ˆÝŒ{˜1˜tœ|Ò+¨X°t´vÀ±zÀDÄFÑ7JÑKÔK×RÒRÐSVÐX[Ñ\Ô\Ð\r   Úacescctc                óÒ   — t          j        |dd¦  «        }t          j        || j        k    t          j        d|| j        z  | j        z
  ¦  «        || j        z
  | j        z  ¦  «        S )Nr   r   ç       @)	r   r   r'   ÚY_BREAKr4   rB   rA   r#   r"   )r*   rD   Úcts      r   r8   zACEScct.decompressF   s_   € ÝŒ[˜ # sÑ+Ô+ˆÝŒ{˜2 ¤Ò,­e¬i¸¸RÀ$Ä.Ñ=PÐSWÔSbÑ=bÑ.cÔ.cÐfhÐkoÔkqÑfqÐuyÔu{Ñe{Ñ|Ô|Ð|r   N)r>   r   r
   r   )rD   r   r
   r   )r9   r:   r;   Ú__doc__r"   r#   rC   rG   rB   rA   r.   r8   r   r   r   r=   r=   7   sj   € € € € € ØkÐkà€AØ€AØ€GØ€GØ€IØ€Jð]ð ]ð ]ð ]ð
}ð }ð }ð }ð }ð }r   r=   ))g   €ãGû?g    ¸åã¿g    tPµ¿)g    >¬À¿g   €¼@ò?g   `[š…¿)g    V”˜¿g    ‚À¿g    “rò?))g   €~žã?g   `¿ºÕ?g    B¨?)g   @7ø±?g   `ÅRí?g   @îŒ‹?)g    A•?g    Ã¼?g   €…Õë?Úframesr   ÚmatrixÚtupleÚchannel_dimÚintc                óÂ   — t          j        || j        | j        ¬¦  «        }t          j        ||                      |d¦  «        d¬¦  «                             d|¦  «        S )N)ÚdtypeÚdevicer   é   )Údims)r   ÚtensorrP   rQ   Ú	tensordotÚmovedim)rJ   rK   rM   s      r   Ú_apply_primariesrW   P   sS   € ÝŒ\˜&¨¬¸V¼]ÐKÑKÔK€FÝŒ?˜6 6§>¢>°+¸qÑ#AÔ#AÈÐJÑJÔJ×RÒRÐSTÐVaÑbÔbÐbr   Úsrgbc                óš   — t          j        | dd¦  «        }t          j        |dk    |dz  t          j        |dz   dz  d¦  «        ¦  «        S )Nr   r   g?ÆÜµ¤?ç×£p=
×)@ç)\�Âõ(¬?çáz®Gáð?g333333@)r   r   r'   r4   )rX   r+   s     r   Ú	srgb_eotfr]   U   sF   € ÝŒ�D˜#˜sÑ#Ô#€AÝŒ;�q˜G’| Q¨¡Yµ´	¸1¸u¹9ÈÑ:MÈsÑ0SÔ0SÑTÔTÐTr   Úlogc3)Ú	transformr_   c               óÂ  — |                       t          j        ¬¦  «        } |dk    rGt          ¦   «                              | ¦  «                             d¦  «                             d¦  «        S |dk    r[t          ¦   «                              t          | t          |¦  «        ¦  «                             d¦  «                             d¦  «        S t          d|› �¦  «        ‚)zNScene-linear Rec.709 frames to the [-1, 1] VAE range of the HDR working space.©rP   r^   rF   r   rD   úUnsupported HDR transform: )Útor   Úfloat32r   r.   Úmul_Úsub_r=   rW   Ú_REC709_TO_AP1Ú
ValueError©rJ   r_   rM   s      r   Úhdr_linear_to_vae_rangerj   Z   s»   € à�YŠY�Uœ]ˆYÑ+Ô+€FØ�GÒÐÝ‰wŒw×Ò Ñ'Ô'×,Ò,¨SÑ1Ô1×6Ò6°sÑ;Ô;Ð;Ø�IÒÐÝ‰yŒy×!Ò!Õ"2°6½>È;Ñ"WÔ"WÑXÔX×]Ò]Ð^aÑbÔb×gÒgÐhkÑlÔlÐlÝ
Ð>°9Ð>Ð>Ñ
?Ô
?Ð?r   c               ó–  — |                       t          j        ¬¦  «                             d¦  «                             d¦  «        } |dk    rGt          ¦   «                              | ¦  «                             d¦  «                             d¦  «        S |dk    rt          t          | ¦  «        ||¬¦  «        S t          d|› �¦  «        ‚)	zUsRGB-encoded SDR frames in [-1, 1] to the [-1, 1] VAE range of the HDR working space.ra   r   ç      à?r^   rF   rD   )r_   rM   rb   )rc   r   rd   Úaddre   r   r1   rf   rj   r]   rh   ri   s      r   Úsdr_to_vae_rangern   d   s²   € à�YŠY�Uœ]ˆYÑ+Ô+×/Ò/°Ñ4Ô4×9Ò9¸#Ñ>Ô>€FØ�GÒÐÝ‰wŒw×#Ò# FÑ+Ô+×0Ò0°Ñ5Ô5×:Ò:¸3Ñ?Ô?Ð?Ø�IÒÐÝ&¥y°Ñ'8Ô'8ÀIÐ[fÐgÑgÔgÐgÝ
Ð>°9Ð>Ð>Ñ
?Ô
?Ð?r   c               óÆ  — |                       t          j        ¬¦  «                             d¦  «                             d¦  «                             dd¦  «        } |dk    r!t          ¦   «                              | ¦  «        S |dk    rIt          t          ¦   «                              | ¦  «        t          |¦  «                             d¬¦  «        S t          d|› �¦  «        ‚)	zK[-1, 1] VAE output of the HDR working space to scene-linear Rec.709 frames.ra   r   rl   r   r^   rD   r   rb   )rc   r   rd   Úadd_re   r)   r   r8   rW   r=   Ú_AP1_TO_REC709rh   ri   s      r   Úvae_range_to_hdr_linearrr   n   s¾   € à�YŠY�Uœ]ˆYÑ+Ô+×0Ò0°Ñ5Ô5×:Ò:¸3Ñ?Ô?×FÒFÀsÈCÑPÔP€FØ�GÒÐÝ‰wŒw×!Ò! &Ñ)Ô)Ð)Ø�IÒÐÝ¥¡	¤	× 4Ò 4°VÑ <Ô <½nÈkÑZÔZ×aÒaÐfiÐaÑjÔjÐjÝ
Ð>°9Ð>Ð>Ñ
?Ô
?Ð?r   Úlinearc                óÊ   — t          j        | dd¦  «        } | dz  }dt          j        | d¦  «        z  dz
  }t          j        | dk    ||¦  «                             dd¦  «        S )Nr   r   rZ   r\   g«ªªªªªÚ?r[   g·‡sÃ¥i?)r   r   r4   r'   r)   )rs   ÚlowÚhighs      r   Úlinear_to_srgbrw   x   sb   € ÝŒ[˜  cÑ*Ô*€FØ
�5‰.€CØ•5”9˜V YÑ/Ô/Ñ/°%Ñ7€DÝŒ;�v Ò*¨C°Ñ6Ô6×=Ò=¸cÀ3ÑGÔGÐGr   r   )ÚexposureÚvideorx   c               ó  — | j         dk    r| j        d         dk    r| d         } | j         dk    r%t          dt          | j        ¦  «        › d�¦  «        ‚t	          dt	          |¦  «        z  ¦  «        }t          |                      t          j        ¬¦  «         	                    |¦  «        ¦  «        }| 	                    d	¦  «         
                    ¦   «                              d
d	¦  «                             t          j        ¦  «        S )Né   r   rR   é   ú#Expected [C,F,H,W] HDR tensor, got ú.rF   ra   g     ào@r   )ÚndimÚshaperh   rL   r	   rw   rc   r   rd   ÚmulÚround_r)   Úuint8)ry   rx   ÚscalerX   s       r   Útonemap_hdr_tensor_to_uint8r…      sÔ   € Ø„z�Q‚€˜5œ; qœ>¨QÒ.Ð.Ø�a”ˆØ„z�Q‚€ÝÐT½uÀUÄ[Ñ?QÔ?QÐTÐTÐTÑUÔUÐUÝ�#�˜x™œÑ(Ñ)Ô)€EÝ˜%Ÿ(š(­¬˜(Ñ7Ô7×;Ò;¸EÑBÔBÑCÔC€DØ�8Š8�E‰?Œ?×!Ò!Ñ#Ô#×*Ò*¨3°Ñ6Ô6×9Ò9½%¼+ÑFÔFÐFr   ú%torch.Tensor | Iterable[torch.Tensor]c              #  óT   K  — t          j        | ¦  «        r| V — d S | D ]}|�|V — Œ	d S )N)r   Ú	is_tensor)ry   Úchunks     r   Úiter_video_chunksrŠ   ‰   sO   è è € Ý„�uÑÔð ØˆˆˆØˆØð ð ˆØÐØˆKˆKˆKøðð r   c              #  ód  K  — t          | ¦  «        D �]}|€Œ|j        dk    r|j        d         dk    r|d         }|j        dk    r%t          dt	          |j        ¦  «        › d�¦  «        ‚|                     ¦   «                              ¦   «         }|                     dddd¦  «        D ]ƒ}|                     t          j
        ¬	¦  «        }|g d
¢                              ¦   «                              ¦   «                              t          j
        d¬¦  «                             ¦   «         V — Œ„�Œd S )Nr{   r   rR   r|   r}   r~   é   é   ra   )rR   rŒ   r   F©Úcopy)rŠ   r   r€   rh   rL   ÚdetachÚcpuÚpermuterc   r   rd   Ú
contiguousÚnumpyÚastypeÚnpÚtobytes)ry   r‰   rJ   Úframes       r   Úiter_hdr_gbrpf32_framesr™   ’   s/  è è € Ý" 5Ñ)Ô)ð 
añ 
aˆØˆ=ØØŒ:˜Š?ˆ?˜uœ{¨1œ~°Ò2Ð2Ø˜!”HˆEØŒ:˜Š?ˆ?ÝÐXÅ5ÈÌÑCUÔCUÐXÐXÐXÑYÔYÐYØ—’‘”×#Ò#Ñ%Ô%ˆØ—^’^ A q¨!¨QÑ/Ô/ð 	að 	aˆEØ—H’H¥5¤=�HÑ1Ô1ˆEØ˜	˜	˜	Ô"×-Ò-Ñ/Ô/×5Ò5Ñ7Ô7×>Ò>½r¼zÐPUÐ>ÑVÔV×^Ò^Ñ`Ô`Ð`Ð`Ð`Ð`ñ	að
að 
ar   T)Ústart_indexÚexr_halfÚ
output_dirústr | os.PathLike[str]rš   r›   Úboolc          	     ór  — t           j                             dd¦  «         dd l}t	          |¦  «                             dd¬¦  «         g }|rHt          |d¦  «        r8t          |d¦  «        r(t          |j        ¦  «        t          |j	        ¦  «        g}d}t          | ¦  «        D �]�}|j        dk    r|j        d         d	k    r|d         }|j        d
k    r%t          dt          |j        ¦  «        › d�¦  «        ‚|                     ¦   «                              ¦   «                              d	ddd¦  «        }|D ]ù}	|	                     t&          j        ¬¦  «                             ¦   «                              ¦   «                              t0          j        d¬¦  «        }
t1          j        |
dd d d…f         ¦  «        }t           j                             t          j        |¦  «        dt          |¦  «        |z   d›d�¦  «        }|                     |||¦  «        st=          d|› �¦  «        ‚|d	z  }Œú�Œ‘|S )NÚOPENCV_IO_ENABLE_OPENEXRÚ1r   T)ÚparentsÚexist_okÚIMWRITE_EXR_TYPEÚIMWRITE_EXR_TYPE_HALFr{   rR   r|   r}   r~   rŒ   r�   ra   FrŽ   .éÿÿÿÿÚframe_Ú06dú.exrzFailed to write HDR EXR frame: )ÚosÚenvironÚ
setdefaultÚcv2r   ÚmkdirÚhasattrrN   r¤   r¥   rŠ   r   r€   rh   rL   r�   r‘   r’   rc   r   rd   r“   r”   r•   r–   ÚascontiguousarrayÚpathÚjoinÚfspathÚimwriteÚRuntimeError)ry   rœ   rš   r›   r­   ÚparamsÚframe_countr‰   rJ   r˜   ÚrgbÚbgrr±   s                r   Úwrite_hdr_exr_framesrº       s,  € õ „J×ÒÐ4°cÑ:Ô:Ð:Ø€J€J€JåˆÑÔ×Ò 4°$ÐÑ7Ô7Ð7Ø€FØð M•G˜CÐ!3Ñ4Ô4ð M½ÀÐF]Ñ9^Ô9^ð MÝ�cÔ*Ñ+Ô+­S°Ô1JÑ-KÔ-KÐLˆØ€KÝ" 5Ñ)Ô)ð ñ ˆØŒ:˜Š?ˆ?˜uœ{¨1œ~°Ò2Ð2Ø˜!”HˆEØŒ:˜Š?ˆ?ÝÐXÅ5ÈÌÑCUÔCUÐXÐXÐXÑYÔYÐYØ—’‘”×#Ò#Ñ%Ô%×-Ò-¨a°°A°qÑ9Ô9ˆØð 	ð 	ˆEØ—(’(¥¤�(Ñ/Ô/×:Ò:Ñ<Ô<×BÒBÑDÔD×KÒKÍBÌJÐ]bÐKÑcÔcˆCÝÔ& s¨3°°°"°¨9¤~Ñ6Ô6ˆCÝ”7—<’<¥¤	¨*Ñ 5Ô 5Ð7hÅÀKÑ@PÔ@PÐS^Ñ@^Ð7hÐ7hÐ7hÐ7hÑiÔiˆDØ—;’;˜t S¨&Ñ1Ô1ð MÝ"Ð#KÀTÐ#KÐ#KÑLÔLÐLØ˜1ÑˆKˆKñ	ð Ðr   r·   útorch.Tensor | Nonec               ó  — t           j                             dd¦  «         dd l}g }t	          t          |¦  «        t          |¦  «        t          |¦  «        z   ¦  «        D ]à}t           j                             t          j        | ¦  «        d|d›d�¦  «        }t           j         	                    |¦  «        s d S | 
                    ||j        ¦  «        }|€ d S t          j        |dd d d…f         ¦  «                             t          j        d	¬
¦  «        }|                     t#          j        |¦  «        ¦  «         Œá|sd S t#          j        |d¬¦  «                             dddd¦  «                             ¦   «         S )Nr    r¡   r   r§   r¨   r©   .r¦   FrŽ   )Údimr�   rR   rŒ   )rª   r«   r¬   r­   ÚrangerN   r±   r²   r³   ÚisfileÚimreadÚIMREAD_UNCHANGEDr–   r°   r•   rd   Úappendr   Ú
from_numpyÚstackr’   r“   )	rœ   rš   r·   r­   rJ   Úidxr±   r¹   r¸   s	            r   Úread_hdr_exr_framesrÆ   ¿   sc  € õ „J×ÒÐ4°cÑ:Ô:Ð:Ø€J€J€Jà€FÝ•S˜Ñ%Ô%¥s¨;Ñ'7Ô'7½#¸kÑ:JÔ:JÑ'JÑKÔKð -ð -ˆÝŒw�|Š|�BœI jÑ1Ô1Ð3I¸CÐ3IÐ3IÐ3IÐ3IÑJÔJˆÝŒw�~Š~˜dÑ#Ô#ð 	Ø�4�4Ø�jŠj˜˜sÔ3Ñ4Ô4ˆØˆ;Ø�4�4ÝÔ" 3 s¨D¨D¨b¨D y¤>Ñ2Ô2×9Ò9½"¼*È5Ð9ÑQÔQˆØ�Š•eÔ& sÑ+Ô+Ñ,Ô,Ð,Ð,Øð ØˆtÝŒ;�v 1Ð%Ñ%Ô%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFÐFr   )r   r	   r
   r   )r
   r   )rJ   r   rK   rL   rM   rN   r
   r   )rX   r   r
   r   )rJ   r   r_   r   rM   rN   r
   r   )rs   r   r
   r   )ry   r   rx   r	   r
   r   )ry   r†   )
ry   r†   rœ   r�   rš   rN   r›   rž   r
   rN   )rœ   r�   rš   rN   r·   rN   r
   r»   )Ú
__future__r   rª   Úpathlibr   Útypingr   r”   r–   r   ÚHDR_REFERENCE_WHITE_NITSr   r   ÚVIDEO_PROMPT_HDR_OUTPUT_FLAGr   r   r   r=   rq   rg   rW   r]   rj   rn   rr   rw   r…   rŠ   r™   rº   rÆ   r   r   r   ú<module>rÌ      ss  ðà "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€à Ð Ø]Ð Ø€Ø"Ð ð :Rð ð ð ð ð ð ðtð tð tð tðXð Xð Xð Xð Xñ Xô Xð Xð4}ð }ð }ð }ð }ñ }ô }ð }ð* W€ð R€ðcð cð cð cð
Uð Uð Uð Uð
 GNð @ð @ð @ð @ð @ð @ð@ð @ð @ð @ð GNð @ð @ð @ð @ð @ð @ðHð Hð Hð Hð KNð Gð Gð Gð Gð Gð Gðð ð ð ðað að að að$ Øðð ð ð ð ð ð>Gð Gð Gð Gð Gð Gr   