Files
Gong Junmin 324b15952b feat: refactor nodes into modular workflow with sample_mode and auto audio2code
- Replace monolithic AceStepMusicGen node with modular architecture:
  AceStepText2MusicGenParams, AceStepSettings, AceStepText2MusicServer,
  AceStepAudioCodes, AceStepShowText
- Merge sample_mode into GenParams node with JS-driven widget visibility
  (sample_mode ON: sample_query/is_instrumental/language only;
   sample_mode OFF: full manual text2music controls)
- Move conditionally-hidden fields to optional inputs with defaults to
  prevent ComfyUI validation errors when JS hides widgets
- Remove standalone audio2code and example_generate server nodes;
  audio_codes now returned as a third output of Text2MusicServer
- Add frontend JS for dynamic widget hide/show, API key masking,
  server mode toggling (cloud/local), and show-text display
- Include pre-built text2music.json workflow
- Rewrite README with full node reference and usage guide

Made-with: Cursor
2026-02-28 21:35:25 +08:00

226 lines
6.2 KiB
JSON

{
"id": "ffe0e07f-9772-45cb-845d-bf5666d27930",
"revision": 1,
"last_node_id": 12,
"last_link_id": 10,
"nodes": [
{
"id": 5,
"type": "AceStepText2MusicGenParams",
"pos": [40, 40],
"size": [420, 500],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{ "name": "refer_audio", "shape": 7, "type": "AUDIO", "link": null },
{ "name": "src_audio", "shape": 7, "type": "AUDIO", "link": null },
{ "name": "audio_codes", "shape": 7, "type": "STRING", "link": null }
],
"outputs": [
{
"name": "gen_params",
"type": "ACESTEP_GEN_PARAMS",
"slot_index": 0,
"links": [1]
}
],
"title": "Text2music Gen Params",
"properties": { "Node name for S&R": "AceStepText2MusicGenParams" },
"widgets_values": [
false,
"en"
]
},
{
"id": 6,
"type": "AceStepSettings",
"pos": [40, 590],
"size": [420, 298],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "settings",
"type": "ACESTEP_SETTINGS",
"slot_index": 0,
"links": [2]
}
],
"title": "Settings",
"properties": { "Node name for S&R": "AceStepSettings" },
"widgets_values": [
"-1", true, true, true, 0.85, 2, 0.9, 0, 7, 8, "ode"
]
},
{
"id": 11,
"type": "LoadAudio",
"pos": [500, 40],
"size": [270, 136],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{ "name": "AUDIO", "type": "AUDIO", "slot_index": 0, "links": null }
],
"title": "Load Audio (refer audio)",
"properties": { "Node name for S&R": "LoadAudio" },
"widgets_values": ["", null, null]
},
{
"id": 2,
"type": "LoadAudio",
"pos": [500, 220],
"size": [270, 136],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{ "name": "AUDIO", "type": "AUDIO", "slot_index": 0, "links": null }
],
"title": "Load Audio (src audio)",
"properties": { "Node name for S&R": "LoadAudio" },
"widgets_values": ["", null, null]
},
{
"id": 7,
"type": "AceStepText2MusicServer",
"pos": [500, 420],
"size": [340, 130],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{ "name": "gen_params", "type": "ACESTEP_GEN_PARAMS", "link": 1 },
{ "name": "settings", "type": "ACESTEP_SETTINGS", "link": 2 }
],
"outputs": [
{ "name": "audio", "type": "AUDIO", "slot_index": 0, "links": [3] },
{ "name": "info", "type": "STRING", "slot_index": 1, "links": [4] },
{ "name": "audio_codes", "type": "STRING", "slot_index": 2, "links": [5] }
],
"title": "Text2music Server",
"properties": { "Node name for S&R": "AceStepText2MusicServer" },
"widgets_values": ["cloud", "https://api.acemusic.ai"]
},
{
"id": 8,
"type": "SaveAudio",
"pos": [500, 600],
"size": [340, 112],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{ "name": "audio", "type": "AUDIO", "link": 3 }
],
"outputs": [],
"title": "Save Audio",
"properties": { "Node name for S&R": "SaveAudio" },
"widgets_values": ["ace-step/text2music"]
},
{
"id": 9,
"type": "AceStepShowText",
"pos": [500, 760],
"size": [340, 160],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{ "name": "text", "type": "STRING", "link": 4 }
],
"outputs": [
{ "name": "text", "type": "STRING", "links": null }
],
"title": "Generation Info",
"properties": { "Node name for S&R": "AceStepShowText" },
"widgets_values": [""]
},
{
"id": 4,
"type": "AceStepAudioCodes",
"pos": [880, 40],
"size": [300, 200],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{ "name": "audio_codes_in", "shape": 7, "type": "STRING", "link": 5 }
],
"outputs": [
{ "name": "audio_codes", "type": "STRING", "slot_index": 0, "links": null }
],
"title": "Audio Codes",
"properties": { "Node name for S&R": "AceStepAudioCodes" },
"widgets_values": [""]
},
{
"id": 12,
"type": "Note",
"pos": [880, 280],
"size": [300, 340],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "Usage Guide",
"properties": {},
"widgets_values": [
"=== Text2music ===\nFill caption + lyrics, click Queue Prompt.\nOr toggle sample_mode ON and describe\nthe music you want in sample_query.\n\n=== Cover / Remix ===\nConnect src_audio to Gen Params.\nServer auto-converts audio to codes.\nAdjust cover/remix_strength.\n\n=== Repaint ===\nConnect src_audio, check is_repaint,\nset repaint_start / repaint_end.\n\n=== Reference Audio ===\nConnect refer_audio for style guidance.\n\n=== Auto Toggle ===\nON = LM decides bpm/key/duration.\nOFF = use your manual values.\n\n=== Audio Codes ===\nCodes from generation are output to\nthe Audio Codes node for reuse."
],
"color": "#232",
"bgcolor": "#353"
}
],
"links": [
[1, 5, 0, 7, 0, "ACESTEP_GEN_PARAMS"],
[2, 6, 0, 7, 1, "ACESTEP_SETTINGS"],
[3, 7, 0, 8, 0, "AUDIO"],
[4, 7, 1, 9, 0, "STRING"],
[5, 7, 2, 4, 0, "STRING"]
],
"groups": [
{
"id": 1,
"title": "Parameters",
"bounding": [20, -10, 460, 920],
"color": "#3f789e",
"font_size": 18,
"flags": {}
},
{
"id": 2,
"title": "Audio Input & Generation",
"bounding": [480, -10, 380, 960],
"color": "#3f789e",
"font_size": 18,
"flags": {}
},
{
"id": 3,
"title": "Output & Codes",
"bounding": [860, -10, 340, 660],
"color": "#3f789e",
"font_size": 18,
"flags": {}
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.8,
"offset": [30, 30]
},
"workflowRendererVersion": "LG",
"frontendVersion": "1.39.19"
},
"version": 0.4
}