{"record":{"id":"e41d08ad491027e8","repo":"Comfy-Org/ComfyUI","slug":"minimax-music3-dav-cannot-encode-audio","errorCode":null,"errorMessage":"MiniMax Music3 DAV cannot encode audio","messagePattern":"MiniMax Music3 DAV cannot encode audio","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"comfy/sd.py","lineNumber":534,"sourceCode":"        self.format_encoded = None\n\n        self.audio_sample_rate = 44100\n\n        if config is None:\n            if \"dec_in_proj.weight\" in sd and \"decoder.model.0.weight_g\" in sd:  # MiniMax Music3 DAV\n                self.first_stage_model = comfy.ldm.minimax_music.dav.MiniMaxMusic3DAV(operations=comfy.ops.disable_weight_init)\n                self.latent_channels = 128\n                self.output_channels = 2\n                self.upscale_ratio = 512\n                self.downscale_ratio = 512\n                self.latent_dim = 1\n                self.process_output = lambda audio: audio\n                self.process_input = lambda audio: audio\n                self.working_dtypes = [torch.float32]\n                self.disable_offload = True\n                self.memory_used_decode = lambda shape, dtype: (shape[-1] * 512 * 1400 + 800_000_000) * model_management.dtype_size(dtype)\n                def _no_encode(*args, **kwargs):\n                    raise RuntimeError(\"MiniMax Music3 DAV cannot encode audio\")\n                self.memory_used_encode = _no_encode\n            elif \"decoder.mid.block_1.mix_factor\" in sd:\n                encoder_config = {'double_z': True, 'z_channels': 4, 'resolution': 256, 'in_channels': 3, 'out_ch': 3, 'ch': 128, 'ch_mult': [1, 2, 4, 4], 'num_res_blocks': 2, 'attn_resolutions': [], 'dropout': 0.0}\n                decoder_config = encoder_config.copy()\n                decoder_config[\"video_kernel_size\"] = [3, 1, 1]\n                decoder_config[\"alpha\"] = 0.0\n                self.first_stage_model = AutoencodingEngine(regularizer_config={'target': \"comfy.ldm.models.autoencoder.DiagonalGaussianRegularizer\"},\n                                                            encoder_config={'target': \"comfy.ldm.modules.diffusionmodules.model.Encoder\", 'params': encoder_config},\n                                                            decoder_config={'target': \"comfy.ldm.modules.temporal_ae.VideoDecoder\", 'params': decoder_config})\n            elif \"taesd_decoder.1.weight\" in sd:\n                if isinstance(metadata, dict) and \"tae_latent_channels\" in metadata:\n                    self.latent_channels = metadata[\"tae_latent_channels\"]\n                else:\n                    self.latent_channels = sd[\"taesd_decoder.1.weight\"].shape[1]\n                self.first_stage_model = comfy.taesd.taesd.TAESD(latent_channels=self.latent_channels)\n            elif \"vquantizer.codebook.weight\" in sd: #VQGan: stage a of stable cascade\n                self.first_stage_model = StageA()\n                self.downscale_ratio = 4","sourceCodeStart":516,"sourceCodeEnd":552,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/comfy/sd.py#L516-L552","documentation":"The MiniMax Music3 DAV is a decoder-only audio VAE: it has no encoder, so VAE.encode paths are wired to a stub that raises this RuntimeError. The class sets memory_used_encode to a function whose only job is to fail loudly if anything tries to encode audio through this model. Decoding latents to audio is supported.","triggerScenarios":"Connecting the MiniMax Music3 VAE to VAEEncode / VAEEncodeTiled or any node calling VAE.encode; API code that assumes every VAE object supports encode(); building a text-to-audio workflow that starts from raw audio instead of empty latents.","commonSituations":"Trying img2img-style audio workflows (encode reference audio, then decode) with Music3; reusing generic VAE pipeline code for all models; custom nodes that call vae.encode unconditionally.","solutions":["Use the latent-generation path for MiniMax Music3 (sample latents from the model, then VAEDecode); never call VAEEncode on it.","Branch workflow code on the VAE type (or on vae.first_stage_model class) before choosing encode vs decode.","If audio-conditioned generation is needed, pick a VAE that actually has an encoder (e.g. a Stable Audio-style VAE)."],"exampleFix":"# before\nlatent = vae.encode(audio)  # RuntimeError for MiniMax Music3 DAV\n\n# after\nif isinstance(vae.first_stage_model, comfy.ldm.minimax_music.dav.MiniMaxMusic3DAV):\n    raise SystemExit('Music3 DAV is decode-only; start from sampled latents')\nlatent = vae.encode(audio)","handlingStrategy":"validation","validationCode":"encode_ok = not isinstance(\n    vae.first_stage_model,\n    comfy.ldm.minimax_music.dav.MiniMaxMusic3DAV,\n)\nassert encode_ok, 'MiniMax Music3 DAV is decode-only; build latents from the model instead of encoding audio'","typeGuard":"def vae_supports_encode(vae) -> bool:\n    return not isinstance(getattr(vae, 'first_stage_model', None),\n                          __import__('comfy.ldm.minimax_music.dav', fromlist=['MiniMaxMusic3DAV']).MiniMaxMusic3DAV)","tryCatchPattern":"try:\n    latent = vae.encode(audio)\nexcept RuntimeError as e:\n    if 'cannot encode audio' in str(e):\n        raise SystemExit('This VAE is decode-only: generate latents with the Music3 model, then VAEDecode.')\n    raise","preventionTips":["Treat decoder-only VAEs as a distinct class in workflow code; check the VAE type before choosing encode nodes.","For audio-to-audio workflows use a VAE with a real encoder."],"tags":["vae","audio","minimax-music","encode","unsupported-operation"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}