From f3c895ac4389178038341414c3dd92827f020c29 Mon Sep 17 00:00:00 2001 From: Andre Date: Fri, 20 Mar 2026 17:55:54 +0100 Subject: [PATCH] Add ComfyUI AudioCraft custom nodes und Game Audio Workflow - comfyui_audiocraft: eigene MusicGen + AudioGen Nodes - workflow_game_audio.json: vorgefertigter Workflow fuer Dungeon Musik und Sound Effects Co-Authored-By: Claude Sonnet 4.6 --- comfyui-audio/comfyui_audiocraft/__init__.py | 3 + comfyui-audio/comfyui_audiocraft/nodes.py | 92 +++++++++++++++++ comfyui-audio/workflow_game_audio.json | 102 +++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 comfyui-audio/comfyui_audiocraft/__init__.py create mode 100644 comfyui-audio/comfyui_audiocraft/nodes.py create mode 100644 comfyui-audio/workflow_game_audio.json diff --git a/comfyui-audio/comfyui_audiocraft/__init__.py b/comfyui-audio/comfyui_audiocraft/__init__.py new file mode 100644 index 0000000..39a8c6b --- /dev/null +++ b/comfyui-audio/comfyui_audiocraft/__init__.py @@ -0,0 +1,3 @@ +from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS + +__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] diff --git a/comfyui-audio/comfyui_audiocraft/nodes.py b/comfyui-audio/comfyui_audiocraft/nodes.py new file mode 100644 index 0000000..903fff7 --- /dev/null +++ b/comfyui-audio/comfyui_audiocraft/nodes.py @@ -0,0 +1,92 @@ +import torch +import torchaudio +import os +import time + + +class MusicGenNode: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "prompt": ("STRING", {"multiline": True, "default": "dark dungeon ambience, slow, mysterious"}), + "duration": ("FLOAT", {"default": 10.0, "min": 1.0, "max": 60.0, "step": 1.0}), + "model": (["facebook/musicgen-small", "facebook/musicgen-medium", "facebook/musicgen-large", "facebook/musicgen-stereo-medium"],), + "seed": ("INT", {"default": 0, "min": 0, "max": 2**32 - 1}), + } + } + + RETURN_TYPES = ("AUDIO_PATH",) + RETURN_NAMES = ("audio_file",) + FUNCTION = "generate" + CATEGORY = "AudioCraft" + + def generate(self, prompt, duration, model, seed): + from audiocraft.models import MusicGen + from audiocraft.data.audio import audio_write + + torch.manual_seed(seed) + + print(f"[MusicGen] Loading model: {model}") + mg = MusicGen.get_pretrained(model) + mg.set_generation_params(duration=duration) + + print(f"[MusicGen] Generating: {prompt}") + wav = mg.generate([prompt]) + + output_dir = "/app/ComfyUI/output/audio" + os.makedirs(output_dir, exist_ok=True) + filename = f"musicgen_{int(time.time())}" + out_path = os.path.join(output_dir, filename) + audio_write(out_path, wav[0].cpu(), mg.sample_rate, strategy="loudness") + + return (out_path + ".wav",) + + +class AudioGenNode: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "prompt": ("STRING", {"multiline": True, "default": "sword clash metal sound effect"}), + "duration": ("FLOAT", {"default": 3.0, "min": 0.5, "max": 30.0, "step": 0.5}), + "seed": ("INT", {"default": 0, "min": 0, "max": 2**32 - 1}), + } + } + + RETURN_TYPES = ("AUDIO_PATH",) + RETURN_NAMES = ("audio_file",) + FUNCTION = "generate" + CATEGORY = "AudioCraft" + + def generate(self, prompt, duration, seed): + from audiocraft.models import AudioGen + from audiocraft.data.audio import audio_write + + torch.manual_seed(seed) + + print(f"[AudioGen] Loading model...") + ag = AudioGen.get_pretrained("facebook/audiogen-medium") + ag.set_generation_params(duration=duration) + + print(f"[AudioGen] Generating: {prompt}") + wav = ag.generate([prompt]) + + output_dir = "/app/ComfyUI/output/audio" + os.makedirs(output_dir, exist_ok=True) + filename = f"audiogen_{int(time.time())}" + out_path = os.path.join(output_dir, filename) + audio_write(out_path, wav[0].cpu(), ag.sample_rate, strategy="loudness") + + return (out_path + ".wav",) + + +NODE_CLASS_MAPPINGS = { + "MusicGen": MusicGenNode, + "AudioGen": AudioGenNode, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "MusicGen": "MusicGen (Musik)", + "AudioGen": "AudioGen (Sound Effects)", +} diff --git a/comfyui-audio/workflow_game_audio.json b/comfyui-audio/workflow_game_audio.json new file mode 100644 index 0000000..27ecf32 --- /dev/null +++ b/comfyui-audio/workflow_game_audio.json @@ -0,0 +1,102 @@ +{ + "last_node_id": 4, + "last_link_id": 0, + "nodes": [ + { + "id": 1, + "type": "MusicGen", + "pos": [100, 100], + "size": {"0": 400, "1": 200}, + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + {"name": "audio_file", "type": "AUDIO_PATH", "links": [], "slot_index": 0} + ], + "properties": {"Node name for S&R": "MusicGen"}, + "widgets_values": [ + "dark dungeon ambience, slow, mysterious, atmospheric, medieval", + 10.0, + "facebook/musicgen-small", + 0 + ] + }, + { + "id": 2, + "type": "MusicGen", + "pos": [100, 380], + "size": {"0": 400, "1": 200}, + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + {"name": "audio_file", "type": "AUDIO_PATH", "links": [], "slot_index": 0} + ], + "properties": {"Node name for S&R": "MusicGen"}, + "widgets_values": [ + "epic battle music, drums, dark fantasy, intense, orchestral", + 15.0, + "facebook/musicgen-small", + 42 + ] + }, + { + "id": 3, + "type": "AudioGen", + "pos": [100, 660], + "size": {"0": 400, "1": 160}, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + {"name": "audio_file", "type": "AUDIO_PATH", "links": [], "slot_index": 0} + ], + "properties": {"Node name for S&R": "AudioGen"}, + "widgets_values": [ + "sword slash metal clang sound effect", + 3.0, + 0 + ] + }, + { + "id": 4, + "type": "AudioGen", + "pos": [100, 880], + "size": {"0": 400, "1": 160}, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + {"name": "audio_file", "type": "AUDIO_PATH", "links": [], "slot_index": 0} + ], + "properties": {"Node name for S&R": "AudioGen"}, + "widgets_values": [ + "footsteps on stone dungeon floor", + 3.0, + 1 + ] + } + ], + "links": [], + "groups": [ + { + "title": "Musik", + "bounding": [80, 75, 440, 480], + "color": "#8B0000", + "font_size": 14 + }, + { + "title": "Sound Effects", + "bounding": [80, 635, 440, 430], + "color": "#1a3a4a", + "font_size": 14 + } + ], + "config": {}, + "extra": {}, + "version": 0.4 +}