{
 "104": {
  "inputs": {
   "unet_name": "acestep_v1.5_xl_turbo_bf16.safetensors",
   "weight_dtype": "default"
  },
  "class_type": "UNETLoader",
  "_meta": {
   "title": "Load Diffusion Model"
  }
 },
 "106": {
  "inputs": {
   "vae_name": "ace_1.5_vae.safetensors"
  },
  "class_type": "VAELoader",
  "_meta": {
   "title": "Load VAE"
  }
 },
 "98": {
  "inputs": {
   "batch_size": 1,
   "seconds": [
    "128",
    0
   ]
  },
  "class_type": "EmptyAceStep1.5LatentAudio",
  "_meta": {
   "title": "Empty Ace Step 1.5 Latent Audio"
  }
 },
 "47": {
  "inputs": {
   "conditioning": [
    "94",
    0
   ]
  },
  "class_type": "ConditioningZeroOut",
  "_meta": {
   "title": "Conditioning Zero Out"
  }
 },
 "3": {
  "inputs": {
   "seed": 0,
   "steps": 12,
   "cfg": 1,
   "sampler_name": "euler",
   "scheduler": "simple",
   "denoise": 1,
   "model": [
    "78",
    0
   ],
   "positive": [
    "94",
    0
   ],
   "negative": [
    "47",
    0
   ],
   "latent_image": [
    "98",
    0
   ]
  },
  "class_type": "KSampler",
  "_meta": {
   "title": "KSampler"
  }
 },
 "78": {
  "inputs": {
   "shift": 3,
   "sampling": "flow",
   "model": [
    "104",
    0
   ]
  },
  "class_type": "ModelSamplingAuraFlow",
  "_meta": {
   "title": "ModelSamplingAuraFlow"
  }
 },
 "18": {
  "inputs": {
   "samples": [
    "3",
    0
   ],
   "vae": [
    "106",
    0
   ]
  },
  "class_type": "VAEDecodeAudio",
  "_meta": {
   "title": "VAE Decode Audio"
  }
 },
 "105": {
  "inputs": {
   "clip_name1": "qwen_0.6b_ace15.safetensors",
   "clip_name2": "qwen_4b_ace15.safetensors",
   "type": "ace",
   "device": "default"
  },
  "class_type": "DualCLIPLoader",
  "_meta": {
   "title": "Load CLIP (Dual)"
  }
 },
 "94": {
  "inputs": {
   "tags": "Lo-fi hip-hop chill track with mellow electric piano, soft vinyl crackle, subtle synth pads, low-pass filtered drums, percussion loops, and soft plucked bass for a relaxed, dreamy vibe.",
   "seed": 1103026267678031,
   "timesignature": "4",
   "language": "en",
   "keyscale": "E minor",
   "generate_audio_codes": true,
   "cfg_scale": 2,
   "temperature": 0.85,
   "top_p": 0.9,
   "top_k": 0,
   "min_p": 0,
   "clip": [
    "105",
    0
   ],
   "lyrics": [
    "116",
    0
   ],
   "bpm": [
    "129",
    0
   ],
   "duration": [
    "128",
    0
   ]
  },
  "class_type": "TextEncodeAceStepAudio1.5",
  "_meta": {
   "title": "TextEncodeAceStepAudio1.5"
  }
 },
 "111": {
  "inputs": {
   "filename_prefix": "audio/ACE_Step1.5_xl_turbo",
   "format": "mp3",
   "audio": [
    "18",
    0
   ],
   "format.quality": "V0"
  },
  "class_type": "SaveAudioAdvanced",
  "_meta": {
   "title": "Save Audio (Advanced)"
  }
 },
 "112": {
  "inputs": {
   "value": "An upbeat electronic anthem about building workflows in ComfyUI \u2014 connecting nodes late at night and watching the render come through."
  },
  "class_type": "PrimitiveStringMultiline",
  "_meta": {
   "title": "User: song topic (USER_INPUT)"
  }
 },
 "113": {
  "inputs": {
   "clip_name": "qwen3.5_4b_bf16.safetensors",
   "type": "stable_diffusion",
   "device": "default"
  },
  "class_type": "CLIPLoader",
  "_meta": {
   "title": "CLIP Loader (Qwen LLM for lyrics)"
  }
 },
 "114": {
  "inputs": {
   "string": "You are a professional songwriter. Write complete, singable lyrics about the topic below.\n\nThe song is about TARGET_DURATION seconds long at TARGET_BPM BPM. Write enough sections to fill that length naturally:\n- around 120-150s: 2 verses + 2 choruses.\n- around 180-240s: also add a bridge.\n- 210s or more: also add a short intro and outro.\nAt slower tempo (under 90 BPM) use fewer words per line; at faster tempo (over 130 BPM) you can fit more, but keep every line easy to sing in one breath.\n\nOutput ONLY the lyrics \u2014 no title, no notes, no explanation.\n\nPut each section tag on its own line, e.g. [Intro], [Verse 1], [Chorus], [Verse 2], [Bridge], [Outro].\n\nRules:\n- Blank line between sections.\n- 6-10 syllables per line; keep lines within a section a similar length.\n- Rhyme the verses; give the chorus one short, repeatable hook.\n- Stay with ONE core image or metaphor.\n- Plain, concrete lines a singer can breathe through \u2014 no stacked adjectives or vague filler (neon skies, electric hearts, endless dreams).\n\nTopic: USER_INPUT\nLyrics:",
   "find": "USER_INPUT",
   "replace": [
    "112",
    0
   ]
  },
  "class_type": "StringReplace",
  "_meta": {
   "title": "Lyrics Prompt (fill USER_INPUT)"
  }
 },
 "131": {
  "inputs": {
   "find": "TARGET_DURATION",
   "string": [
    "114",
    0
   ],
   "replace": [
    "130",
    0
   ]
  },
  "class_type": "StringReplace",
  "_meta": {
   "title": "Inject DURATION (TARGET_DURATION)"
  }
 },
 "132": {
  "inputs": {
   "find": "TARGET_BPM",
   "string": [
    "131",
    0
   ],
   "replace": [
    "127",
    0
   ]
  },
  "class_type": "StringReplace",
  "_meta": {
   "title": "Inject BPM (TARGET_BPM)"
  }
 },
 "117": {
  "inputs": {
   "value": ""
  },
  "class_type": "PrimitiveStringMultiline",
  "_meta": {
   "title": "Manual lyrics (leave EMPTY to auto-generate)"
  }
 },
 "115": {
  "inputs": {
   "max_length": 512,
   "sampling_mode": "on",
   "thinking": false,
   "use_default_template": true,
   "mtp": "auto",
   "clip": [
    "113",
    0
   ],
   "prompt": [
    "132",
    0
   ],
   "sampling_mode.temperature": 0.7,
   "sampling_mode.top_k": 64,
   "sampling_mode.top_p": 0.95,
   "sampling_mode.min_p": 0.05,
   "sampling_mode.repetition_penalty": 1.05,
   "sampling_mode.seed": 35146436134,
   "sampling_mode.presence_penalty": 0
  },
  "class_type": "TextGenerate",
  "_meta": {
   "title": "Qwen TextGenerate (lyrics)"
  }
 },
 "116": {
  "inputs": {
   "switch": [
    "121",
    0
   ],
   "on_false": [
    "117",
    0
   ],
   "on_true": [
    "115",
    0
   ]
  },
  "class_type": "ComfySwitchNode",
  "_meta": {
   "title": "Switch (auto: LLM if manual empty)"
  }
 },
 "121": {
  "inputs": {
   "string_b": "",
   "mode": "Equal",
   "case_sensitive": true,
   "string_a": [
    "117",
    0
   ]
  },
  "class_type": "StringCompare",
  "_meta": {
   "title": "Compare Text (manual lyrics == empty)"
  }
 },
 "119": {
  "inputs": {
   "source": [
    "116",
    0
   ]
  },
  "class_type": "PreviewAny",
  "_meta": {
   "title": "Preview Lyrics"
  }
 },
 "127": {
  "inputs": {
   "source": [
    "129",
    0
   ]
  },
  "class_type": "PreviewAny",
  "_meta": {
   "title": "bpm to string"
  }
 },
 "128": {
  "inputs": {
   "value": 120
  },
  "class_type": "PrimitiveFloat",
  "_meta": {
   "title": "Float (Duration)"
  }
 },
 "129": {
  "inputs": {
   "value": 90
  },
  "class_type": "PrimitiveInt",
  "_meta": {
   "title": "Int (bpm)"
  }
 },
 "130": {
  "inputs": {
   "source": [
    "128",
    0
   ]
  },
  "class_type": "PreviewAny",
  "_meta": {
   "title": "duration to string"
  }
 }
}