Comfy-Org/ComfyUI · error · ValueError
SaveAudioOpus: input audio is None (source video may have no
Error message
SaveAudioOpus: input audio is None (source video may have no audio track).
What it means
SaveAudioOpus.execute raises when audio is None — the Opus export variant of the audio save nodes with the same None guard. Without a waveform the Opus encoder cannot run, so execution stops with a message pointing at a missing audio track.
Source
Thrown at comfy_extras/nodes_audio.py:242
node_id="SaveAudioOpus",
search_aliases=["export opus"],
display_name="Save Audio (Opus) (DEPRECATED)",
category="audio",
inputs=[
IO.Audio.Input("audio"),
IO.String.Input("filename_prefix", default="audio/ComfyUI"),
IO.Combo.Input("quality", options=["64k", "96k", "128k", "192k", "320k"], default="128k"),
],
hidden=[IO.Hidden.prompt, IO.Hidden.extra_pnginfo],
is_deprecated=True,
is_output_node=True,
outputs=[IO.Audio.Output("audio")]
)
@classmethod
def execute(cls, audio, filename_prefix="ComfyUI", format="opus", quality="V3") -> IO.NodeOutput:
if audio is None:
raise ValueError("SaveAudioOpus: input audio is None (source video may have no audio track).")
return IO.NodeOutput(
audio,
ui=UI.AudioSaveHelper.get_save_audio_ui(
audio, filename_prefix=filename_prefix, cls=cls, format=format, quality=quality
)
)
class SaveAudioAdvanced(IO.ComfyNode):
@classmethod
def define_schema(cls):
return IO.Schema(
node_id="SaveAudioAdvanced",
search_aliases=["save audio", "export audio", "output audio", "write audio", "flac", "mp3", "opus"],
display_name="Save Audio (Advanced)",
description="Saves the input audio to your ComfyUI output directory.",
category="audio",
inputs=[View on GitHub (pinned to 1c6d8d45b3)
Solutions
- Check the input container actually has an audio stream before wiring it to export
- Source audio from LoadAudio or an audio-generating node
- Gate the export branch on audio being non-None
Defensive patterns
Strategy: type-guard
Validate before calling
if audio is None:
return # skip Opus export Type guard
def is_audio(v) -> bool:
return isinstance(v, dict) and 'waveform' in v and 'sample_rate' in v Prevention
- Guard export branches against None audio
- Validate containers have audio streams up front
- Migrate off deprecated SaveAudioOpus to the current save path
When it happens
Trigger: Opus export wired to a LoadVideo audio output that is None (no audio stream in container), or an optional audio socket that never received a value.
Common situations: Podcast/voice pipelines exporting Opus where one input file is silent video; template workflows reused across heterogeneous sources.
Related errors
- torchaudio is not available; cannot resample audio.
- VAEEncodeAudio: input audio is None (source video may have n
- SaveAudio: input audio is None (source video may have no aud
- SaveAudioMP3: input audio is None (source video may have no
- PreviewAudio: input audio is None (source video may have no
AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14).
Data as JSON: /api/errors/3a91f6d1173a8e87.
Report an issue: GitHub.