{"record":{"id":"3a91f6d1173a8e87","repo":"Comfy-Org/ComfyUI","slug":"saveaudioopus-input-audio-is-none-source-video-m","errorCode":null,"errorMessage":"SaveAudioOpus: input audio is None (source video may have no audio track).","messagePattern":"SaveAudioOpus: input audio is None \\(source video may have no audio track\\)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"comfy_extras/nodes_audio.py","lineNumber":242,"sourceCode":"            node_id=\"SaveAudioOpus\",\n            search_aliases=[\"export opus\"],\n            display_name=\"Save Audio (Opus) (DEPRECATED)\",\n            category=\"audio\",\n            inputs=[\n                IO.Audio.Input(\"audio\"),\n                IO.String.Input(\"filename_prefix\", default=\"audio/ComfyUI\"),\n                IO.Combo.Input(\"quality\", options=[\"64k\", \"96k\", \"128k\", \"192k\", \"320k\"], default=\"128k\"),\n            ],\n            hidden=[IO.Hidden.prompt, IO.Hidden.extra_pnginfo],\n            is_deprecated=True,\n            is_output_node=True,\n            outputs=[IO.Audio.Output(\"audio\")]\n        )\n\n    @classmethod\n    def execute(cls, audio, filename_prefix=\"ComfyUI\", format=\"opus\", quality=\"V3\") -> IO.NodeOutput:\n        if audio is None:\n            raise ValueError(\"SaveAudioOpus: input audio is None (source video may have no audio track).\")\n        return IO.NodeOutput(\n            audio,\n            ui=UI.AudioSaveHelper.get_save_audio_ui(\n                audio, filename_prefix=filename_prefix, cls=cls, format=format, quality=quality\n            )\n        )\n\n\nclass SaveAudioAdvanced(IO.ComfyNode):\n    @classmethod\n    def define_schema(cls):\n        return IO.Schema(\n            node_id=\"SaveAudioAdvanced\",\n            search_aliases=[\"save audio\", \"export audio\", \"output audio\", \"write audio\", \"flac\", \"mp3\", \"opus\"],\n            display_name=\"Save Audio (Advanced)\",\n            description=\"Saves the input audio to your ComfyUI output directory.\",\n            category=\"audio\",\n            inputs=[","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/comfy_extras/nodes_audio.py#L224-L260","documentation":"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.","triggerScenarios":"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.","commonSituations":"Podcast/voice pipelines exporting Opus where one input file is silent video; template workflows reused across heterogeneous sources.","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"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if audio is None:\n    return  # skip Opus export","typeGuard":"def is_audio(v) -> bool:\n    return isinstance(v, dict) and 'waveform' in v and 'sample_rate' in v","tryCatchPattern":null,"preventionTips":["Guard export branches against None audio","Validate containers have audio streams up front","Migrate off deprecated SaveAudioOpus to the current save path"],"tags":["audio","opus","none-input"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}