protoDirector wants to drive the ML-node audio model (ACE-Step, going up now) through the gateway — music generation first, then its edit family (extend / variation / section-repaint / lyric edit) and TTS. protoDirector is the main consumer, so this issue proposes the client-facing contract for us to converge on; the serving details are yours to decide against it (same way the video contract preceded the bridge — protoBanana#38).
Full spec: docs/fork/GATEWAY_CONTRACT.md → Audio section in protoDirector (PR incoming). Summary of what the client will call:
Music generation — POST /v1/audio/generations (JSON)
{model, prompt, lyrics?, instrumental, seconds, n, seed?, negative_prompt?, response_format:"b64_json", format:"mp3|wav|flac"} → {data:[{b64_json, seed, duration_s}], format}. Variation/retake = same call, fresh seed / n>1.
Edits — POST /v1/audio/edits (multipart)
Part audio (input clip) + per-op fields:
| Op |
Fields |
extend (ace-step-extend) |
seconds = target total, direction |
section repaint (ace-step-repaint) |
start_s, end_s, variance |
lyric/style edit (ace-step-edit) |
new lyrics/prompt, edit_strength |
TTS — POST /v1/audio/speech (OpenAI-native) → bytes
Voice-clone rides a reference_audio extra field when exposed.
Discovery
/model/info mode gains music_generation.
Open decisions for us to settle together
- Serving home — an ACE-Step protoBanana ComfyUI workflow (it's ComfyUI-first-party, so this is the natural fit and reuses the images idiom) vs. a standalone ACE-Step service (its :8002 inference server) behind an edge route like the video bridge. Which is easier on the ML node?
- Sync vs async — sync bytes is the target (ACE-Step is ~real-time on the RTX PRO 6000, and it's much simpler on the client). But if you'd rather batch long-form or run it behind the shared ComfyUI queue, the same request fields drop onto the async
/v1/videos-style submit→poll→content envelope and reuse our video runner. Either is fine — your call.
- Multipart part cap — the image path caps form-parts at 1 MB; an input clip for
/audio/edits blows past that (2-min WAV ≈ 20 MB). Need a larger cap or a different upload channel for audio.
- ComfyUI execution-cache nonce — ACE-Step runs in ComfyUI, so identical
(model,prompt,lyrics,seconds,seed) will hit the same cache trap as protoBanana#34/#38-video. Please fold the per-submission nonce into the audio graph too.
Notes
- No license gate — all local experiments (ACE-Step is MIT anyway).
- Design should stay open to more audio systems from the lab (the mode/alias scheme is extensible; new models are gateway config, not client code).
Happy to adjust any field names to match what the ML node emits — tell me what's easiest to serve and I'll conform the client.
protoDirector wants to drive the ML-node audio model (ACE-Step, going up now) through the gateway — music generation first, then its edit family (extend / variation / section-repaint / lyric edit) and TTS. protoDirector is the main consumer, so this issue proposes the client-facing contract for us to converge on; the serving details are yours to decide against it (same way the video contract preceded the bridge — protoBanana#38).
Full spec:
docs/fork/GATEWAY_CONTRACT.md→ Audio section in protoDirector (PR incoming). Summary of what the client will call:Music generation —
POST /v1/audio/generations(JSON){model, prompt, lyrics?, instrumental, seconds, n, seed?, negative_prompt?, response_format:"b64_json", format:"mp3|wav|flac"}→{data:[{b64_json, seed, duration_s}], format}. Variation/retake = same call, freshseed/n>1.Edits —
POST /v1/audio/edits(multipart)Part
audio(input clip) + per-op fields:ace-step-extend)seconds= target total,directionace-step-repaint)start_s,end_s,varianceace-step-edit)lyrics/prompt,edit_strengthTTS —
POST /v1/audio/speech(OpenAI-native) → bytesVoice-clone rides a
reference_audioextra field when exposed.Discovery
/model/infomodegainsmusic_generation.Open decisions for us to settle together
/v1/videos-style submit→poll→content envelope and reuse our video runner. Either is fine — your call./audio/editsblows past that (2-min WAV ≈ 20 MB). Need a larger cap or a different upload channel for audio.(model,prompt,lyrics,seconds,seed)will hit the same cache trap as protoBanana#34/#38-video. Please fold the per-submission nonce into the audio graph too.Notes
Happy to adjust any field names to match what the ML node emits — tell me what's easiest to serve and I'll conform the client.