Skip to content

Expose ACE-Step (music gen + edits + TTS) as an OpenAI-compatible audio provider for protoDirector #22

Description

@mabry1985

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.mdAudio 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

  1. 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?
  2. 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.
  3. 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.
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions