§
    ’ÞjE.  ã                   óÔ   — d dl mZ ddlm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 dZd	Zd
ZdZdZg d¢ZdddddddœZdZdZdZeddddœgZd„ Zd„ Zd„ Z G d„ d¦  «        ZdS )é    )Ú
merge_helpé   )Ú
KUGEL_HELPN)Úmps_device_or)Úfiles_locator)ÚTTS_MONOLOGUE_PROMPTÚTTS_QWEN3_DIALOGUE_PROMPTzDeepBeepMeep/TTSÚ
kugelaudioÚkugelaudio_text_tokenizerzconfig.jsonzgeneration_config.json)z
merges.txtztokenizer.jsonztokenizer_config.jsonz
vocab.jsonzpreprocessor_config.jsonzMax duration (seconds)zMax DurationiX  é   )ÚlabelÚnameÚminÚmaxÚ	incrementÚdefaultÚauto_split_every_sg      @g     €V@zoAuto Split Every s (5-90, optional), to avoid Acceleration Effect. Empty Lines will force anyway Manual Splits.zAuto Split Every sÚfloat)Úidr   r   Útypec                 óF  — |                       ¦   «         D ]\  }}d|_        Œt          | dd ¦  «        }|€ t          t          | dd ¦  «        dd ¦  «        }|€t          d¦  «        ‚t          |dd ¦  «        }|�|D ]	}d|_        Œ
t          |dd ¦  «        }|�	d|_        d S d S )NFÚprediction_headÚmodelzGKugelAudio diffusion head is missing; cannot configure compile targets.ÚlayersTÚfinal_layer)Únamed_modulesÚ_compile_meÚgetattrÚRuntimeError)r   Ú_Ú	submoduler   r   Úlayerr   s          úEC:\Users\johnn\OneDrive\Documents\AI\models\TTS\kugelaudio_handler.pyÚ$_configure_diffusion_compile_targetsr$   2   sÖ   € Ø×+Ò+Ñ-Ô-ð &ð &‰ˆˆ9Ø %ˆ	ÔÐå˜eÐ%6¸Ñ=Ô=€OØÐÝ!¥'¨%°¸$Ñ"?Ô"?ÐARÐTXÑYÔYˆØÐÝÐdÑeÔeÐeå�_ h°Ñ5Ô5€FØÐØð 	%ð 	%ˆEØ $ˆEÔÐÝ˜/¨=¸$Ñ?Ô?€KØÐØ"&ˆÔÐÐð Ðó    c                  ó  — i dd“dd“dd“dd“dd“d	d“d
d“dd“dd“ddg“dd“dt          t          ¦  «        “dd„ t          D ¦   «         “dd“dd“dd“dd“dg d¢dddddœdddœt          t          d d d!d"gd#d$d%œd!d&œd'd(gd)œ	¥S )*NÚ
audio_onlyTÚimage_outputsFÚsliding_windowÚguidance_max_phasesr   Úno_negative_promptÚinference_stepsÚtemperatureÚimage_prompt_types_allowedÚ Úsupports_early_stopÚprofiles_dirÚkugelaudio_0_openÚ
lm_decoderÚduration_sliderÚcustom_settingsc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Úcopy)Ú.0Úones     r#   ú
<listcomp>z-_get_kugelaudio_model_def.<locals>.<listcomp>S   s    € ÐMÐMÐM¨3˜CŸHšH™JœJÐMÐMÐMr%   Úpreserve_empty_prompt_linesÚpause_between_sentencesÚany_audio_promptÚaudio_guide_labelzReference voice (optional))r/   ÚAÚABÚABDz	Text onlyz!Voice cloning (1 reference audio)z;Voice cloning (2 reference audios: Speaker 1 and Speaker 2)z7Voice cloning (3 reference audios: Speakers 1, 2 and 3)rB   )Ú	selectionÚlabelsÚletters_filterr   i   ÚTÚT1z A Speech based on current Promptz5A Dialogue between two People based on current Prompt)rF   rG   )rC   rD   r   ÚWriteÚtransformer)	Úaudio_prompt_choicesÚaudio_prompt_type_sourcesÚ!text_prompt_enhancer_instructionsÚ"text_prompt_enhancer_instructions1Útext_prompt_enhancer_max_tokensÚ text_prompt_enhancer_max_tokens1Úprompt_enhancer_defÚprompt_enhancer_button_labelÚcompile)ÚdictÚKUGELAUDIO_DURATION_SLIDERÚKUGELAUDIO_CUSTOM_SETTINGSr   r	   r7   r%   r#   Ú_get_kugelaudio_model_defrV   E   sw  € ð,Ø�dð,à˜ð,ð 	˜%ð,ð 	˜qð	,ð
 	˜dð,ð 	˜5ð,ð 	�tð,ð 	% bð,ð 	˜tð,ð 	Ð,Ð-ð,ð 	�dð,ð 	�4Õ :Ñ;Ô;ð,ð 	ÐMÐMÕ2LÐMÑMÔMð,ð 	& tð,ð 	" 4ð,ð  	˜Dð!,ð" 	Ð9ð#,ð$ !%à/Ð/Ð/àØ8ØSØPð	ð ð $Øð
&
ð 
&
õ .BÝ.GØ+.Ø,/à˜t˜à7ØMðð ð ð 
ð  
ð )0Ø!�?ðW,ð ,ð ,ð ,r%   c                  ó2   — t           t          gt          gdœgS )N)ÚrepoIdÚsourceFolderListÚfileList)ÚKUGELAUDIO_REPO_IDÚKUGELAUDIO_TOKENIZER_DIRÚKUGELAUDIO_TOKENIZER_FILESr7   r%   r#   Ú_get_kugelaudio_download_defr^   u   s'   € õ )Ý!9Ð :Ý3Ð4ð	
ð 	
ðð r%   c                   ó.  — e Zd Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	edd„¦   «         Z
e	 	 	 	 	 	 	 	 	 	 dd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )Úfamily_handlerc                  ó   — dgS )Nr2   r7   r7   r%   r#   Úquery_supported_typesz$family_handler.query_supported_types€   s   € à#Ð$Ð$r%   c                  ó
   — i i fS ©Nr7   r7   r%   r#   Úquery_family_mapsz family_handler.query_family_maps„   s   € à�2ˆvˆr%   c                  ó   — dS )NÚttsr7   r7   r%   r#   Úquery_model_familyz!family_handler.query_model_familyˆ   s   € àˆur%   c                  ó
   — ddiS )Nrg   )i˜  ÚTTSr7   r7   r%   r#   Úquery_family_infosz!family_handler.query_family_infosŒ   s   € à�}Ð%Ð%r%   c                 ó   — dS )Nr
   r7   )Úbase_model_types    r#   Úget_lora_dirzfamily_handler.get_lora_dir�   s   € àˆ|r%   c                 óD   — t          t          ¦   «         t          ¦  «        S rd   )r   rV   r   )rm   Ú	model_defs     r#   Úquery_model_defzfamily_handler.query_model_def”   s   € åÕ3Ñ5Ô5µzÑBÔBÐBr%   Nc                 ó   — t          ¦   «         S rd   )r^   )ÚcomputeListrm   rp   s      r#   Úquery_model_filesz family_handler.query_model_files˜   s   € å+Ñ-Ô-Ð-r%   Fr   c           	      ó  — ddl m} | d         } ||t          j        ¦   «         t	          t          j        d¦  «        ¦  «        |j        ¬¦  «        }t          |j	        ¦  «         d|j	        i}|	rþ|rüddl
m} t          j                             t          j                             t           ¦  «        dd	dt"          ¦  «        }t          j                             |¦  «        r|}njt          j        t          j                             t(          t"          ¦  «        d
¬¦  «        }|€*t          j                             t(          t"          ¦  «        } ||j	        |||pt
          j        |¦  «         |||j        rdgnd
dœfS )Nr   )ÚKugelAudioPipeliner   Úcpu)Úmodel_weights_pathÚ	ckpt_rootÚdeviceÚcuda_graphsrI   )Úsave_quantized_modelr
   ÚconfigsF)Úerror_if_none)ÚpipeÚ
cudaGraphs)Úkugelaudio.pipelinerv   ÚflÚget_download_locationr   Útorchrz   Úgraphsr$   r   Úwgpr|   ÚosÚpathÚjoinÚdirnameÚ__file__ÚKUGELAUDIO_CONFIG_NAMEÚisfileÚlocate_fileÚKUGELAUDIO_ASSET_DIRÚbfloat16)Úmodel_filenameÚ
model_typerm   rp   ÚquantizeTransformerÚtext_encoder_quantizationÚdtypeÚ	VAE_dtypeÚmixed_precision_transformerÚsave_quantizedÚsubmodel_no_listÚtext_encoder_filenameÚprofileÚlm_featuresÚkwargsrv   Úweights_pathÚpipeliner   r|   Úlocal_config_pathÚconfig_paths                         r#   Ú
load_modelzfamily_handler.load_modelœ   s•  € ð$ 	<Ð;Ð;Ð;Ð;Ð;à% aÔ(ˆØ%Ð%Ø+ÝÔ.Ñ0Ô0Ý ¥¤¨eÑ!4Ô!4Ñ5Ô5Ø#Ô*ð	
ñ 
ô 
ˆõ 	-¨X¬^Ñ<Ô<Ð<ð ˜8œ>ð
ˆð ð 	˜lð 	Ø0Ð0Ð0Ð0Ð0Ð0å "¤§¢Ý”—’¥Ñ)Ô)¨<¸ÀLÕRhñ!ô !Ðõ Œw�~Š~Ð/Ñ0Ô0ð ]Ø/��å œnÝ”G—L’LÕ!5Õ7MÑNÔNØ"'ðñ ô �ð Ð&Ý"$¤'§,¢,Õ/CÕE[Ñ"\Ô"\�KØ Ð Ø”ØØØÐ'�œØñô ð ð  $ÈÔI[Ð6f°}°o°oÐafÐgÐgÐgÐgr%   c                 ó€   — d|vrd|d<   ddi}|                      ¦   «         D ]\  }}|                     ||¦  «         Œd S )NÚ
alt_promptr/   Úaudio_prompt_type)ÚitemsÚ
setdefault)rm   Úsettings_versionrp   Úui_defaultsÚdefaultsÚkeyÚvalues          r#   Úfix_settingszfamily_handler.fix_settings×   sg   € à˜{Ð*Ð*Ø(*ˆK˜Ñ%ð   ð
ˆð #Ÿ.š.Ñ*Ô*ð 	/ð 	/‰JˆC�Ø×"Ò" 3¨Ñ.Ô.Ð.Ð.ð	/ð 	/r%   c                 óœ   — |                      di ¦  «        }|                     ddd|                      dd¦  «        ddddd	d
ddœ¦  «         d S )Nr4   r/   z>Hello! This is KugelAudio speaking in a clear, friendly voice.r   r   é<   g      à?r   g      ð?g      @ÚFG)r¥   ÚpromptÚrepeat_generationÚduration_secondsÚpause_secondsÚvideo_lengthÚnum_inference_stepsÚnegative_promptr-   Úguidance_scaleÚmulti_prompts_gen_type)ÚgetÚupdate)rm   rp   r©   Úduration_defs       r#   Úupdate_default_settingsz&family_handler.update_default_settingsâ   ss   € à —}’}Ð%6¸Ñ;Ô;ˆØ×Òà%'ØZØ%&Ø$0×$4Ò$4°YÀÑ$CÔ$CØ!$Ø !Ø'(Ø#%Ø"Ø"%Ø*.ðð ñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 ó8  ‡— ‰                      dd¦  «        pd}|�2t          t          |¦  «                             ¦   «         ¦  «        dk    rdS t          |¦  «        }d|v sd|v r
d|vsd|vrd	S d|v r¥d
|v rdnd}t	          ˆfd„dd |…         D ¦   «         ¦  «        r|› d|› d�S t          t          j        d|t          j        ¬¦  «        ¦  «        }|s|› d|› d|› d�S t          d„ |D ¦   «         ¦  «        }t          |¦  «        |k    r|› d|› d|› d�S d S )Nr¥   r/   r   z+Prompt text cannot be empty for KugelAudio.ÚSpeakerÚspeakerr@   ÚBzoMulti-speaker prompts require two reference voice audio samples. Provide a voice sample or remove Speaker tags.ÚDé   é   c              3   óF   •K  — | ]}‰                      |¦  «        d u V — Œd S rd   )rº   )r9   r«   Úinputss     €r#   ú	<genexpr>z<family_handler.validate_generative_prompt.<locals>.<genexpr>   s2   øè è € ÐvÐv¨s�6—:’:˜c‘?”? dÐ*ÐvÐvÐvÐvÐvÐvr%   )Úaudio_guideÚaudio_guide2Úaudio_guide3z-voice cloning requires z reference audio files.zSpeaker\s*(\d+)\s*:)Úflagsz@-voice cloning requires prompt lines with Speaker 1: to Speaker z
: (or any zx numeric speaker IDs). For headless settings, keep 'multi_prompts_gen_type' = 'FG' so dialogue lines stay in one prompt.c                 óR   — h | ]$}t          |                     d ¦  «        ¦  «        ’Œ%S )r   )ÚintÚgroup)r9   Úms     r#   ú	<setcomp>z<family_handler.validate_generative_prompt.<locals>.<setcomp>	  s(   € Ð!KÐ!KÐ!K°a¥# a§g¢g¨a¡j¤j¡/¤/Ð!KÐ!KÐ!Kr%   z -voice cloning requires exactly z( speaker IDs. Use Speaker 1: to Speaker z?:. For headless settings, keep 'multi_prompts_gen_type' = 'FG'.)
rº   ÚlenÚstrÚstripÚanyÚlistÚreÚfinditerÚ
IGNORECASEÚsorted)	rm   rp   rÆ   Ú
one_promptr¥   ÚtextÚspeaker_countÚspeaker_matchesÚspeaker_idss	     `      r#   Úvalidate_generative_promptz)family_handler.validate_generative_promptõ   sÐ  ø€ à"ŸJšJÐ':¸BÑ?Ô?ÐEÀ2ÐØÐ¥¥S¨¡_¤_×%:Ò%:Ñ%<Ô%<Ñ!=Ô!=ÀÒ!BÐ!BØ@Ð@Ý�:‰ŒˆØ˜ÐÐ 	¨TÐ 1Ð 1ØÐ+Ð+Ð+¨sÐ:KÐ/KÐ/Kð Ið  IØÐ#Ð#Ð#Ø!$Ð(9Ð!9Ð!9˜A˜A¸qˆMÝÐvÐvÐvÐvÐ6eÐftÐgtÐftÔ6uÐvÑvÔvÑvÔvð hØ'ÐgÐgÀÐgÐgÐgÐgÝ"¥2¤;Ð/EÀtÕSUÔS`Ð#aÑ#aÔ#aÑbÔbˆOØ"ð à$ð \ð \Ðfsð \ð \Ø,ð\ð \ð \ðõ
 !Ð!KÐ!K¸?Ð!KÑ!KÔ!KÑLÔLˆKÝ�;ÑÔ =Ò0Ð0à$ð Sð SÀmð Sð Sð  ~Kð Sð Sð Sðð ˆtr%   c                 ó  — |                      dd ¦  «        }|€d S t          |t          ¦  «        sdS |                      t          d ¦  «        }|€d S t          |t          ¦  «        r^|                     ¦   «         }t          |¦  «        dk    r7|                     t          d ¦  «         t          |¦  «        dk    r|nd |d<   d S 	 t          |t          ¦  «        rt          ¦   «         ‚t          |¦  «        }n=# t          $ r0 dt          t          ¦  «        › dt          t          ¦  «        › d�cY S w xY w|t          k     s|t          k    r-dt          t          ¦  «        › dt          t          ¦  «        › d�S ||t          <   ||d<   d S )Nr5   z%Custom settings must be a dictionary.r   z,Auto Split Every s must be a number between z and z	 seconds.z#Auto Split Every s must be between )rº   Ú
isinstancerS   Ú KUGELAUDIO_AUTO_SPLIT_SETTING_IDrÒ   rÓ   rÑ   ÚpopÚboolÚ
ValueErrorr   Ú	ExceptionrÍ   Ú!KUGELAUDIO_AUTO_SPLIT_MIN_SECONDSÚ!KUGELAUDIO_AUTO_SPLIT_MAX_SECONDS)rm   rp   rÆ   r5   Ú	raw_valueÚauto_split_secondss         r#   Úvalidate_generative_settingsz+family_handler.validate_generative_settings  sÜ  € à Ÿ*š*Ð%6¸Ñ=Ô=ˆØÐ"Ø�4Ý˜/­4Ñ0Ô0ð 	;Ø:Ð:à#×'Ò'Õ(HÈ$ÑOÔOˆ	ØÐØ�4Ý�i¥Ñ%Ô%ð 	Ø!ŸšÑ)Ô)ˆIÝ�9‰~Œ~ Ò"Ð"Ø×#Ò#Õ$DÀdÑKÔKÐKÝ?BÀ?Ñ?SÔ?SÐVWÒ?WÐ?W¨O¨OÐ]a�Ð(Ñ)Ø�tð	Ý˜)¥TÑ*Ô*ð #Ý ‘l”lÐ"Ý!& yÑ!1Ô!1ÐÐøÝð 	ð 	ð 	ðrÝÕ8Ñ9Ô9ðrð rÝ@CÕDeÑ@fÔ@fðrð rð rðð ð ð	øøøð Õ!BÒBÐBØ!Õ$EÒEÐEðrÝÕ8Ñ9Ô9ðrð rÝ@CÕDeÑ@fÔ@fðrð rð rðð
 =OˆÕ8Ñ9Ø$3ˆÐ Ñ!Øˆts   Ã2C8 Ã87D2Ä1D2rd   )
FNNNFFNNr   N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodrb   re   rh   rk   rn   rq   rt   r¢   r­   r½   rß   rë   r7   r%   r#   r`   r`      sˆ  € € € € € Øð%ð %ñ „\ð%ð ðð ñ „\ðð ðð ñ „\ðð ð&ð &ñ „\ð&ð ðð ñ „\ðð ðCð Cñ „\ðCð ð.ð .ð .ñ „\ð.ð ð "Ø"&ØØØ$)ØØØ"ØØð8hð 8hð 8hñ „\ð8hðt ð/ð /ñ „\ð/ð ð
ð 
ñ „\ð
ð$ ðð ñ „\ðð6 ð&ð &ñ „\ð&ð &ð &r%   r`   )Úmodels.help_sharedr   Úhelpr   r‡   rÖ   r„   Ú
shared.mpsr   Úshared.utilsr   r‚   Úprompt_enhancersr   r	   r[   r�   r\   rŒ   Ú!KUGELAUDIO_GENERATION_CONFIG_NAMEr]   rT   râ   rç   rè   rU   r$   rV   r^   r`   r7   r%   r#   ú<module>rö      st  ðà )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	à €€€à $Ð $Ð $Ð $Ð $Ð $Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,à MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð (Ð Ø#Ð Ø6Ð à&Ð Ø$<Ð !ðð ð Ð ð &ØØØØØðð Ð ð $8Ð  Ø$'Ð !Ø$(Ð !ð /ð CØ$Øð	ð ðÐ ð'ð 'ð 'ð&-ð -ð -ð`ð ð ðyð yð yð yð yñ yô yð yð yð yr%   