ACE-Step Nodes - Repository Index & Build Strategy

March 25, 2026 · View on GitHub

Welcome to the central index for the ScromfyUI-AceStep project. This document defines the project's focus, status, and provides a structural map of every code file and node category in the repository. For deep-dives into specific node functionality, follow the links to the detailed category documents.

Project Focus

Primary Goal: Replicate 100% of the ACE-Step Gradio app functionality in ComfyUI nodes, while vastly surpassing its capabilities via modularity and explicit conditioning manipulation.

Success Criteria:

  • Load ACE-Step models via standard ComfyUI loaders ✅
  • Generate music in all 4 modes (Simple/Custom/Cover/Repaint) ✅
  • Access all advanced parameters (LM CFG, temperature, BPM, etc.) ✅
  • Use LoRA adapters ✅
  • Generate lyrics via multiple LLM APIs ✅
  • Apply post-processing (de-esser, spectral smoothing) ✅
  • Save with proper metadata ✅

Project Status

  • Node Implementation: 100% Complete.
  • Native Support: Confirmed ComfyUI native ACE-Step support. Checkpoint loaders work out-of-the-box.
  • Frontend Extensions: Available for WebAmp, Radio, and custom lyric syncing.

📂 Repository File Index

The root directory consists of __init__.py which handles dynamic node scanning. All nodes reside in nodes/.

Prompting Nodes (Detailed Specs ➡)

Centralize text formatting, LM prompting strategies (like Enriched CoT), and metadata building.

  • text_encoder_plusplus_node.pyScromfyAceStepTextEncoderPlusPlus: The definitive ACE-Step 1.5 text encoder.
  • metadata_builder_node.pyAceStepMetadataBuilder: Formats the music metadata dictionary.
  • prompt_gen_node.pyAceStepPromptGen: Dynamic multi-category prompt generator using weighted tags.
  • random_prompt_node.pyAceStepRandomPrompt: Randomized music prompt generator.
  • prompt_freeform_node.pyPrompt Freeform: Allows freeform text with dynamic wildcard resolution.

Conditioning Manipulation (Detailed Specs ➡)

Raw tensor manipulation, 5Hz audio code editing, splitting, combining, and custom masking logic.

  • audio_codes_mixer_node.pyAceStepAudioCodesMixer: Binary toolbox for mixing two sets of audio codes in 6D FSQ space.
  • audio_codes_unary_op_node.pyAceStepAudioCodesUnaryOp: Unary operations on audio codes with length scaling/masking.
  • conditioning_combine_node.pyAceStepConditioningCombine: Assemble individual tensors and codes into a full conditioning object.
  • conditioning_dual_mixer_node.pyAceStepConditioningMixer: Selectively mix components from two conditioning sources.
  • conditioning_split_node.pyAceStepConditioningSplitter: Decompose conditioning into raw components.
  • audio_codes_to_semantic_hints_node.pyAceStepAudioCodesToSemanticHints: Convert 5Hz audio codes to 25Hz semantic hints.
  • semantic_hints_to_audio_codes_node.pyAceStepSemanticHintsToAudioCodes: Convert 25Hz semantic hints back to 5Hz audio codes.
  • audio_codes_decode_node.pyAceStepAudioCodesUnderstand: Reconstruct metadata and lyrics from 5Hz token IDs.
  • conditioning_zero_out_node.pyAceStepConditioningZeroOut: Zero out conditioning for negative/unconditional input.
  • conditioning_view_node.pyAceStepConditioningExplore: Deep introspection and debugging of conditioning data.
  • conditioning_base_extract_node.pyAceStepBaseExtract: Base-model stem separation.
  • conditioning_base_lego_node.pyAceStepBaseLego: Context-aware track generation.
  • conditioning_base_complete_node.pyAceStepBaseComplete: Automatic accompaniment filling.
  • load_audio_codes_node.pyAceStepAudioCodesLoader: Load 5Hz audio code tensors from disk.
  • load_conditioning_node.pyAceStepConditioningLoad: Load saved conditioning components.
  • load_lyrics_tensor_node.pyAceStepLyricsTensorLoader: Load lyrics conditioning tensors.
  • load_mixed_conditioning_node.pyAceStepConditioningMixerLoader: Mix saved components during load.
  • load_timbre_tensor_node.pyAceStepTimbreTensorLoader: Load timbre conditioning tensors.
  • audio_mask_node.pyAceStepAudioMask: Time-to-step mask generator.
  • tensor_mask_node.pyAceStepTensorMaskGenerator: Primitive mask generator (fraction, range, window).
  • tensor_mixer_node.pyAceStepTensorMixer: Mix two tensors with masking.
  • tensor_unary_op_node.pyAceStepTensorUnaryOp: Transform single tensors.
  • save_conditioning_node.pyAceStepConditioningSave: Component saver.
  • save_tensor_node.pyAceStepTensorSave: Raw tensor saver.
  • conditioning_inspector_node.pyAceStepConditioningInspector: Deep introspection and debugging of conditioning data.
  • conditioning_add_chords_node.pyAceStepChordConditioner: Synthesize and inject chord progressions into conditioning.
  • audio_chord_preview_node.pyAceStepChordPreview: Preview chord audio before generation.
  • acestep_source_reader_node.pyAceStepSourceReader: Developer tool for source inspection and latent injection testing.

Audio & Post-Processing (Detailed Specs ➡)

Decoding latents with extended VAE features, analyzing external audio, and post-processing tools.

  • audio_analyzer_node.pyAudio Analyzer (No LLM): DSP-based BPM, key, and duration extraction.
  • llm_music_analyzer_node.pyScromfyAceStepMusicAnalyzer: AI-powered analyzer (Whisper/Qwen) for tags and theory.
  • audio_post_process_node.pyAceStepPostProcess: Audio enhancement (de-esser, spectral smoothing).
  • audio_vae_decode_plusplus_node.pyScromfy Audio VAE Decode PLUSPLUS: Advanced VAE decoder with local logic overrides.
  • audio_vae_decode_settings_node.pyAceStepVAEDecodeSettings: Configure VAE decoding parameters (boost, normalize, shift).
  • audio_vae_encode_node.pyAceStepVAEEncode: Encode audio to latents.
  • save_audio_flac_node.py / save_audio_mp3_node.py / save_audio_opus_node.pyScromfy Save Audio: High-fidelity multi-format audio saver (handles metadata).
  • load_audio_node.pyAceStepLoadAudio: Audio loader with auto-resampling.
  • audio_matchering_node.pyMatchering: Simple two-input matching/mastering.
  • audio_matchering_advanced_node.pyMatchering (Advanced): Full parameter control for matching.
  • audio_matchering_limiter_config_node.pyMatchering Limiter Config: Detail configuration for the brickwall limiter.

Samplers (Detailed Specs ➡)

Overriding core implementations for specific features like masking.

  • sampler_node.pyScromfyAceStepSampler: The primary sampler with APG/ADG guidance and native mask-based inpainting.
  • sampler_settings_node.pyScromfySamplerSettings: Aggregated sampler configuration (guidance, momentum, decay).

Lyrics Generation & Formatting (Detailed Specs ➡)

AI interactions, BPM calculations, and formatters to properly align text.

  • lyrics_formatter_node.pyAceStepLyricsFormatter: Structure lyrics with required formatting tags.
  • lyrics_genius_search_node.pyAceStepGeniusLyricsSearch: Fetch particular lyrics from Genius.
  • lyrics_genius_random_node.pyAceStepRandomLyrics: Fetch random Genius lyrics.
  • lyrics_duration_node.pyAceStepLyricsBPMCalculator: BPM/Duration estimation for lyrics structure.
  • lyrics_claude_node.pyAceStepClaudeLyrics: Procedural generation via Anthropic Claude.
  • lyrics_gemini_node.pyAceStepGeminiLyrics: Procedural generation via Google Gemini.
  • lyrics_groq_node.pyAceStepGroqLyrics: Ultra-fast generation via Groq.
  • lyrics_openai_node.pyAceStepOpenAILyrics: Procedural generation via OpenAI GPT models.
  • lyrics_perplexity_node.pyAceStepPerplexityLyrics: Research-backed lyrics via Perplexity.
  • lyrics_generic_ai_node.pyAceStepGenericAILyrics: OpenAI-compatible model support for local/custom LLMs.
  • lyrics_generic_model_list_node.pyAceStepGenericModelList: Fetch model lists from remote providers.

Radio & Playback (Detailed Specs ➡)

In-UI playback experiences for Comfy.

  • audio_player_webamp_node.pyAceStepWebAmpRadio: Full Winamp integration.
  • audio_player_radio_node.pyRadioPlayer: Lightweight in-UI player.

LoRA Loading (Detailed Specs ➡)

  • load_lora_node.pyAceStepLoRALoader: Standard ACE-Step 1.5 LoRA loader.
  • lora_loader_node.pyScromfy AceStep Lora Stack: Advanced multi-LoRA stacking.

Whisper Transcription (Detailed Specs ➡)

  • transcribe_faster_whisper_load_node.pyFaster Whisper Loader: Local weights manager.
  • transcribe_faster_whisper_node.pyFaster Whisper Transcribe: VAD-enabled transcription.
  • transcribe_faster_whisper_save_node.pyFaster Whisper Save: SRT/VTT/LRC exporter.

Misc & Utilities (Detailed Specs ➡)

  • wikipedia_random_entry_node.pyWikipediaRandomNode: Pull random page content.
  • build_emoji_spinner_node.pyScromfyEmojiSpinner: Iconify/SVG rendering to masks.
  • mask_picker_node.pyScromfyMaskPicker: Recursive mask directory browser.

Visualizers (Detailed Specs ➡)

  • visualizer_circular_node.pyCircular Audio Visualizer: Waveform rendered as a dynamic ring.
  • visualizer_contour_node.pyContour Audio Visualizer: Advanced shape-based waveform outlines.
  • visualizer_line_node.pyLine Audio Visualizer: Traditional horizontal or vertical spectral waveforms.
  • visualizer_lyrics_node.pyLyrics Overlay: Advanced text rendering over images with timing sync.
  • visualizer_emoji_spinner_node.pyEmoji Spinner Visualizer: Slot-machine style emoji animations for visual flair.
  • visualizer_lyric_settings_node.pyLyric Visualizer Settings: Dedicated color, font, and animation config for lyrics.
  • visualizer_global_settings_node.pyVisualizer Settings: Shared canvas and style configurations for all flex-visualizers.

Kaola High-Level Tasks (Detailed Specs ➡)

Specialized workflows for extraction, accompaniment, and AI-driven song building.

  • kaola_prompt_multiplier_node.pyKaolaAceStepPromptMultiplier: Intelligent prompt expander using a 1.7B LLM.
  • kaola_captioner_node.pyKaolaAceStepCaptioner: Whole-song audio captioning.
  • kaola_transcriber_node.pyKaolaAceStepTranscriber: Music-tuned lyrics extraction.

Shared Utility Modules (nodes/includes/)

  • analysis_utils.py: FSQ quantization logic and dependency checks.
  • audio_utils.py: FLAC metadata block generation, multi-format audio saving, and PCM format conversion.
  • emoji_utils.py: Iconify fetching, SVG-to-Mask conversion (svglib), and caching.
  • flex_utils.py: Dynamic layout parsing and styling logic for visualizers.
  • fsq_utils.py: Low-level FSQ encoding/decoding math.
  • icon_collections.py: Static categorization lists for icons mapping to genres/moods.
  • lyrics_utils.py: Prompt builders and markdown cleaning.
  • mapping_utils.py: Shared dictionaries (languages, time signatures) and dropdown wrappers.
  • prompt_utils.py: Dynamic wildcard expansion and UI-weight sorting.
  • sampling_utils.py: Noise schedule shift formulas.
  • visualizer_utils.py: Core rendering mechanics, font-loading, and mathematical plotting for visualizers.
  • whisper_utils.py: Model discovery, language mappings, and subtitle/LRC formatting logic.
  • chord_utils.py: Music theory, polyphonic chord synthesis, and ACE-Step conditioning injection logic.
  • matchering_utils.py: Adapter bridging ComfyUI AUDIO dicts and the file-path-based pip matchering API.
  • llm_utils.py: High-level orchestration for multi-track accompaniment, including Qwen text-generation and prompt expansion adapters.