Merge pull request #5 from Meisoftcoltd/fix/readme-and-renaming-7638010592883663595

Rename to ComfyUI-Demucs-AudioSeparator and update documentation
This commit is contained in:
Meisoft
2026-01-27 02:13:49 +01:00
committed by GitHub
3 changed files with 22 additions and 57 deletions
+6 -9
View File
@@ -1,4 +1,4 @@
# ComfyUI-Demucs-Pro
# ComfyUI-Demucs-AudioSeparator
Nodo personalizado para ComfyUI que permite la separación de fuentes de audio utilizando la tecnología **Meta Demucs (v4)**. Ideal para extraer voces, baterías, bajos y otros instrumentos con alta fidelidad.
@@ -6,16 +6,14 @@ Nodo personalizado para ComfyUI que permite la separación de fuentes de audio u
- **Soporte Demucs v4**: Incluye modelos Hybrid Transformer (HTDemucs).
- **Separación de hasta 6 pistas**: Voces, Batería, Bajo, Otros, y soporte para Guitarra y Piano (en modelos compatibles).
- **Optimizado para NVIDIA RTX 3090**: Aprovecha la aceleración CUDA y soporte para precisiones optimizadas (**bfloat16/float16**).
- **Caché Global de Modelos**: Los modelos se mantienen en memoria para un intercambio ultrarrápido.
- **Barra de Progreso Nativa**: Integración completa con la barra de progreso de ComfyUI.
- **Aceleración CUDA**: Aprovecha la potencia de la GPU para procesos ultrarrápidos.
- **Descarga Automática**: Los modelos se descargan automáticamente a `ComfyUI/models/demucs`.
- **Estabilidad Mejorada**: Opción `split` para evitar errores de memoria (OOM) en audios largos.
## Instalación
### Vía ComfyUI Manager (Recomendado)
1. Busca `ComfyUI-Demucs-Pro` en el Manager.
1. Busca `ComfyUI-Demucs-AudioSeparator` en el Manager.
2. Haz clic en Install.
3. Reinicia ComfyUI.
@@ -23,7 +21,7 @@ Nodo personalizado para ComfyUI que permite la separación de fuentes de audio u
1. Clona este repositorio en tu carpeta `custom_nodes`:
```bash
cd ComfyUI/custom_nodes
git clone https://github.com/usuario/ComfyUI-Demucs-Pro
git clone https://github.com/usuario/ComfyUI-Demucs-AudioSeparator
```
2. Instala las dependencias:
```bash
@@ -49,9 +47,8 @@ Nodo personalizado para ComfyUI que permite la separación de fuentes de audio u
## Recomendaciones de Hardware
Para un rendimiento óptimo, se recomienda el uso de GPUs de gama alta:
- **NVIDIA RTX 3090 / 4090**: Rendimiento excepcional, permitiendo procesar canciones completas en segundos con altos valores de `shifts`.
- **VRAM**: Se recomienda al menos 8GB para modelos `htdemucs`. Si encuentras errores de memoria, asegúrate de tener activada la opción `split` y usar `bfloat16`.
Para un rendimiento óptimo, se recomienda el uso de GPUs con aceleración CUDA:
- **VRAM**: Se recomienda al menos 8GB para modelos `htdemucs`. Si encuentras errores de memoria, asegúrate de tener activada la opción `split`.
## Reporte de Errores
Si encuentras algún problema, por favor abre un *Issue* en el repositorio de GitHub detallando tu sistema operativo, modelo de GPU y el error obtenido.
+5 -3
View File
@@ -1,11 +1,13 @@
from .demucs_nodes import DemucsProNode
from .demucs_nodes import DemucsAudioSeparator
NODE_CLASS_MAPPINGS = {
"DemucsProNode": DemucsProNode
"DemucsAudioSeparator": DemucsAudioSeparator,
"DemucsProNode": DemucsAudioSeparator # Legacy support
}
NODE_DISPLAY_NAME_MAPPINGS = {
"DemucsProNode": "⚡ Demucs Pro (Audio Separation) 🎵"
"DemucsAudioSeparator": "🎵 Demucs Audio Separator ⚡",
"DemucsProNode": "🎵 Demucs Audio Separator (Legacy) ⚡"
}
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
+11 -45
View File
@@ -26,10 +26,7 @@ except ImportError:
from demucs.pretrained import get_model
from demucs.apply import apply_model
# Global cache for models to support fast swapping and high RAM utilization
_MODEL_CACHE = {}
class DemucsProNode:
class DemucsAudioSeparator:
@classmethod
def INPUT_TYPES(cls):
return {
@@ -55,18 +52,6 @@ class DemucsProNode:
FUNCTION = "separate"
CATEGORY = "🎵 Audio/Separation"
def separate(self, audio, model, device, precision, shifts, overlap, split, vocals, drums, bass, other, guitar, piano):
global _MODEL_CACHE
# Handle model name mapping for compatibility with older workflows
model_map = {
"mdxc": "mdx_extra",
"mdxc_fb_ft": "mdx_extra_q"
}
model_name = model_map.get(model, model)
print(f"⚡ [Demucs Pro] Starting separation process with model: {model_name}")
# Configure model path
demucs_models_path = os.path.join(folder_paths.models_dir, "demucs")
if not os.path.exists(demucs_models_path):
@@ -76,38 +61,19 @@ class DemucsProNode:
# Determine device
if device == "cuda" and not torch.cuda.is_available():
print("⚡ [Demucs Pro] CUDA not available, falling back to CPU")
print("⚡ CUDA not available, falling back to CPU")
device = "cpu"
device_obj = torch.device(device)
# Precision mapping
dtype = torch.float32
if precision == "float16":
dtype = torch.float16
elif precision == "bfloat16":
dtype = torch.bfloat16
# Load model
print(f"⚡ Loading Demucs model: {model}...")
try:
model_inst = get_model(model)
except Exception as e:
raise RuntimeError(f"Failed to load Demucs model {model}: {str(e)}")
# Load or retrieve model from cache
if model_name in _MODEL_CACHE:
print(f"⚡ [Demucs Pro] Retrieving model '{model_name}' from cache...")
model_inst = _MODEL_CACHE[model_name]
else:
print(f"⚡ [Demucs Pro] Loading model '{model_name}'...")
try:
# Cache management: keep only 2 models to avoid excessive memory usage
if len(_MODEL_CACHE) >= 2:
evict_key = next(iter(_MODEL_CACHE))
print(f"⚡ [Demucs Pro] Evicting model '{evict_key}' from cache.")
del _MODEL_CACHE[evict_key]
model_inst = get_model(model_name)
_MODEL_CACHE[model_name] = model_inst
except Exception as e:
raise RuntimeError(f"⚡ [Demucs Pro] Failed to load Demucs model {model_name}: {str(e)}")
# Move model to device and precision
model_inst.to(device_obj).to(dtype)
model_inst.to(device_obj)
model_inst.eval()
# Prepare audio
@@ -123,7 +89,7 @@ class DemucsProNode:
# Resample if necessary
if sr != model_inst.samplerate:
print(f"⚡ [Demucs Pro] Resampling audio from {sr} to {model_inst.samplerate}...")
print(f"⚡ Resampling audio from {sr} to {model_inst.samplerate}...")
resampler = torchaudio.transforms.Resample(sr, model_inst.samplerate).to(device_obj)
waveform = resampler(waveform)
@@ -147,7 +113,7 @@ class DemucsProNode:
pbar.update_absolute(p_val)
# Apply model
print(f"⚡ [Demucs Pro] Separating audio (shifts={shifts}, overlap={overlap}, split={split}, precision={precision})...")
print(f"⚡ Separating audio with {model} (shifts={shifts}, overlap={overlap}, split={split})...")
try:
with torch.no_grad():
# Check if the installed version of apply_model supports a callback