From ecf828b007b136db6c2a1df5ab8c333c656d1128 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Thu, 9 Apr 2026 20:28:55 +0200 Subject: [PATCH] fix: move vocoder to correct device after GAFilter injection inject_gafilters creates Conv1d modules on CPU. load_state_dict preserves existing param devices but GAFilter params stay on CPU, causing device mismatch during vocode. Save target device before injection, then move entire vocoder after loading. Co-Authored-By: Claude Opus 4.6 --- nodes/selva_bigvgan_loader.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nodes/selva_bigvgan_loader.py b/nodes/selva_bigvgan_loader.py index d6f3ff7..277b21f 100644 --- a/nodes/selva_bigvgan_loader.py +++ b/nodes/selva_bigvgan_loader.py @@ -61,12 +61,16 @@ class SelvaBigvganLoader: else: raise ValueError(f"[BigVGAN] Unknown mode: {mode}") + # Remember device before injecting new modules (which default to CPU) + target_device = next(vocoder.parameters()).device + if ckpt.get("has_gafilter", False): kernel_size = ckpt.get("gafilter_kernel_size", 9) n_gaf = inject_gafilters(vocoder, kernel_size) print(f"[BigVGAN] GAFilter injected: {n_gaf} filters kernel={kernel_size}", flush=True) vocoder.load_state_dict(ckpt["generator"]) + vocoder.to(target_device) vocoder.eval() print(f"[BigVGAN] Loaded fine-tuned vocoder from: {p}", flush=True)