o >g~@sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z GdddZ GdddZGdddZd d Zd d ZGd ddZGdddeZGdddZe eeeeedZdS)N)argsc@s4eZdZddZeddZdZdZdZdd Z d S) EmptyLatentAudiocCstj|_dS)N)comfymodel_managementintermediate_devicedeviceselfr B/home/comdoleger1/zen-flux-style-shape/comfy_extras/nodes_audio.py__init__szEmptyLatentAudio.__init__cCs*dddddddfdd d d d d fd iS)NrequiredFLOATgG@?g@@g?)defaultminmaxstepINTiz)The number of latent images in the batch.)rrrtooltip)seconds batch_sizer sr r r INPUT_TYPESszEmptyLatentAudio.INPUT_TYPESLATENTgenerate latent/audiocCs:t|dddd}tj|d|g|jd}|ddfS)NDi@)raudio)samplestype)roundtorchzerosr)r rrlengthlatentr r r rs zEmptyLatentAudio.generateN) __name__ __module__ __qualname__r classmethodr RETURN_TYPESFUNCTIONCATEGORYrr r r r r s  rc@,eZdZeddZdZdZdZddZdS) VAEEncodeAudiocCddddiS)Nr ZAUDIOVAE)r#vaer rr r r r!zVAEEncodeAudio.INPUT_TYPESrencodercCsJ|d}d|krtj|d|d}n|d}||dd}d|ifS)N sample_rater waveformrr$) torchaudio functionalresampler:movedim)r r8r#r;r<tr r r r:)s  zVAEEncodeAudio.encodeN) r+r,r-r.rr/r0r1r:r r r r r3   r3c@r2) VAEDecodeAudiocCr4)Nr rr6)r$r8r rr r r r4r9zVAEDecodeAudio.INPUT_TYPESr5decodercCsN||ddd}tj|ddgddd}d||dk<||}|d d fS) Nr$r=rr!T)dimkeepdimg@rr r<r;)rErAr'std)r r8r$r#rIr r r rE<s   zVAEDecodeAudio.decodeN) r+r,r-r.rr/r0r1rEr r r r rD3rCrDc Csd}t|}g}|D]\}}|d|d}|tdt||q t|}d|} td||td|| } |rFd} nd} | tdt| d d| } | S) NsComfyUI=zutf-8zIr)lenitemsr:appendstructpackjoin) comment_dict last_blockZ vendor_stringZ vendor_lengthcommentskeyvaluecommentZuser_comment_list_lengthZ user_commentsZ comment_dataid comment_blockr r r create_vorbis_comment_blockDs   r]c Cst|dkr|S|dg}d}|sZ|d}|dd@dk}|dd@}tdd|ddd}||}|dksA|dkrBnt|dd @g|dd}||||r|t|d d t }| d |D]} | | qn| ||S) NrFrNriT)rVsfLaC) rOseekreadrRunpackbytesrQr]ioBytesIOwrite) Zflac_iorUblocksrVheader block_typeZ block_lengthZ block_dataZ new_flac_ioblockr r r insert_or_replace_vorbis_commentYs.        rmc@s:eZdZddZeddZdZdZdZdZ d d d Z d S) SaveAudiocCst|_d|_d|_dS)Noutput) folder_pathsget_output_directory output_dirr% prefix_appendrr r r r {s  zSaveAudio.__init__cCsddddifddddd S) Nr5STRINGrz audio/ComfyUI)r#filename_prefixPROMPT EXTRA_PNGINFOprompt extra_pnginfor hiddenr rr r r rs  zSaveAudio.INPUT_TYPESr save_audioTr#ComfyUINc Cs:||j7}t||j\}}}}}t} i} tjs6|dur$t|| d<|dur6|D] } t|| | | <q*t |d D]X\} } | dt | }|d|dd}t }tj|| |ddd t|| }ttj||d }||Wdn1swY| |||jd |d 7}q>d d| iiS)Nrzr<z %batch_num%_05z_.flacr;ZFLAC)formatwb)filename subfolderr%ruir#)rtrqget_save_image_pathrslistrdisable_metadatajsondumps enumeratecpureplacestrrfrgr>savermopenospathrTrh getbufferrQr%)r r#rvrzr{full_output_folderrcounterrresultsmetadatax batch_numberr<filename_with_batch_numfilebufffr r r r~s4    zSaveAudio.save_audio)rNN) r+r,r-r r.rr/r0 OUTPUT_NODEr1r~r r r r rnzs rnc@s eZdZddZeddZdS) PreviewAudiocCs2t|_d|_ddddtdD|_dS)Ntemp_temp_rpcss|]}tdVqdS)abcdefghijklmnopqrstupvxyzN)randomchoice).0rr r r sz(PreviewAudio.__init__..)rqget_temp_directoryrsr%rTrangertrr r r r s "zPreviewAudio.__init__cCsddiddddS)Nr#r5rwrxryr|r rr r r rszPreviewAudio.INPUT_TYPESN)r+r,r-r r.rr r r r rsrc@sDeZdZeddZdZdZdZddZedd Z ed d Z d S) LoadAudiocCs6t}tt|ddg}ddt|ddifiiS)Nr#videor Z audio_uploadT)rqget_input_directoryfilter_files_content_typesrlistdirsorted)r input_dirfilesr r r rszLoadAudio.INPUT_TYPESr#r5loadcCs.t|}t|\}}|d|d}|fS)NrrH)rqget_annotated_filepathr>r unsqueeze)r r# audio_pathr<r;r r r rs zLoadAudio.loadcCsVt|}t}t|d}||Wdn1s wY|S)Nrb) rqrhashlibsha256rupdatercdigesthex)rr# image_pathmrr r r IS_CHANGEDs   zLoadAudio.IS_CHANGEDcCst|s d|SdS)NzInvalid audio file: {}T)rqexists_annotated_filepathr)rr#r r r VALIDATE_INPUTSs  zLoadAudio.VALIDATE_INPUTSN) r+r,r-r.rr1r/r0rrrr r r r rs  r)rr3rDrnrr)r>r'Zcomfy.model_managementrrqrrfrrRrrcomfy.cli_argsrrr3rDr]rmrnrrNODE_CLASS_MAPPINGSr r r r s4 !6 !