| | import folder_paths |
| | import comfy.audio_encoders.audio_encoders |
| | import comfy.utils |
| | from typing_extensions import override |
| | from comfy_api.latest import ComfyExtension, io |
| |
|
| |
|
| | class AudioEncoderLoader(io.ComfyNode): |
| | @classmethod |
| | def define_schema(cls) -> io.Schema: |
| | return io.Schema( |
| | node_id="AudioEncoderLoader", |
| | category="loaders", |
| | inputs=[ |
| | io.Combo.Input( |
| | "audio_encoder_name", |
| | options=folder_paths.get_filename_list("audio_encoders"), |
| | ), |
| | ], |
| | outputs=[io.AudioEncoder.Output()], |
| | ) |
| |
|
| | @classmethod |
| | def execute(cls, audio_encoder_name) -> io.NodeOutput: |
| | audio_encoder_name = folder_paths.get_full_path_or_raise("audio_encoders", audio_encoder_name) |
| | sd = comfy.utils.load_torch_file(audio_encoder_name, safe_load=True) |
| | audio_encoder = comfy.audio_encoders.audio_encoders.load_audio_encoder_from_sd(sd) |
| | if audio_encoder is None: |
| | raise RuntimeError("ERROR: audio encoder file is invalid and does not contain a valid model.") |
| | return io.NodeOutput(audio_encoder) |
| |
|
| |
|
| | class AudioEncoderEncode(io.ComfyNode): |
| | @classmethod |
| | def define_schema(cls) -> io.Schema: |
| | return io.Schema( |
| | node_id="AudioEncoderEncode", |
| | category="conditioning", |
| | inputs=[ |
| | io.AudioEncoder.Input("audio_encoder"), |
| | io.Audio.Input("audio"), |
| | ], |
| | outputs=[io.AudioEncoderOutput.Output()], |
| | ) |
| |
|
| | @classmethod |
| | def execute(cls, audio_encoder, audio) -> io.NodeOutput: |
| | output = audio_encoder.encode_audio(audio["waveform"], audio["sample_rate"]) |
| | return io.NodeOutput(output) |
| |
|
| |
|
| | class AudioEncoder(ComfyExtension): |
| | @override |
| | async def get_node_list(self) -> list[type[io.ComfyNode]]: |
| | return [ |
| | AudioEncoderLoader, |
| | AudioEncoderEncode, |
| | ] |
| |
|
| |
|
| | async def comfy_entrypoint() -> AudioEncoder: |
| | return AudioEncoder() |
| |
|