diff --git a/modules/ltx/ltx_process.py b/modules/ltx/ltx_process.py index 2fc79922c..5cbe5cb0c 100644 --- a/modules/ltx/ltx_process.py +++ b/modules/ltx/ltx_process.py @@ -360,8 +360,11 @@ def run_ltx(task_id, yield from abort('Video: process_images returned no frames', ok=True, p=p) return pixels = processed.images - if getattr(processed, 'audio', None) is not None: - audio = processed.audio + raw_audio = getattr(processed, 'audio', None) + if raw_audio is not None: + # Strip batch dim from (B, 2, N); write_audio expects (2, N) for the + # transpose-to-interleaved path used by AAC s16. + audio = raw_audio[0].float().cpu() if raw_audio.ndim == 3 else raw_audio.float().cpu() latents = None except AssertionError as e: yield from abort(e, ok=True, p=p) diff --git a/modules/processing.py b/modules/processing.py index 0306b20a8..36c600ebe 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -528,7 +528,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: output_images.append(batch_image) infotexts.append(batch_infotext) - audio = getattr(samples, 'audio', None) + audio = getattr(samples, 'audio', None) or getattr(p, 'audio_capture', None) if shared.cmd_opts.lowvram: devices.torch_gc(force=True, reason='lowvram') diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index b7b1030ef..6b701a966 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -628,6 +628,10 @@ def process_diffusers(p: processing.StableDiffusionProcessing): timer.process.add('lora', lora_common.timer.total) lora_common.timer.clear(complete=True) + # process_decode flattens video output to a frame list and drops the audio attribute; + # stash it on `p` so video pipelines can recover it after process_images returns. + if output is not None and getattr(output, 'audio', None) is not None: + p.audio_capture = output.audio results = process_decode(p, output) timer.process.record('decode')