The unofficial Suno API (sunoapi.org) has been discontinued, so we need alternative solutions for AI music generation.
- URL: https://udio.com
- Status: Has unofficial API wrappers available
- Features: Text-to-music generation, style control, high quality output
- Implementation: Update SunoClient to UdioClient
- URL: https://huggingface.co/facebook/musicgen-large
- Status: Available via Hugging Face API
- Features: Text-to-music, controllable generation
- Implementation: Create MusicGenClient
- URL: https://stableaudio.com
- Status: Has API access
- Features: High-quality audio generation, commercial use
- Implementation: Create StableAudioClient
- URL: https://mubert.com/api
- Status: Official API available
- Features: Royalty-free music generation, style control
- Implementation: Create MubertClient
- Implementation: Run MusicGen locally via Python subprocess
- Pros: No API costs, full control
- Cons: Requires local setup, slower generation
- Create abstract
MusicGenerationClientbase class - Implement provider-specific clients (Udio, MusicGen, etc.)
- Add provider selection via environment variable
- Update CLI to support multiple providers
- Udio: Direct Suno-like replacement
- MusicGen: Local generation option
- Mubert: Commercial-grade generation
- Stable Audio: High-quality output
- Implement provider fallback chain
- Auto-retry with different providers on failure
- Provider health checking
// Abstract base class
class MusicGenerationClient {
async generateSong(params) { throw new Error('Not implemented'); }
async getGenerationStatus(id) { throw new Error('Not implemented'); }
async downloadSong(url) { throw new Error('Not implemented'); }
}
// Provider implementations
class UdioClient extends MusicGenerationClient { ... }
class MusicGenClient extends MusicGenerationClient { ... }
class MubertClient extends MusicGenerationClient { ... }
// Factory pattern
class MusicClientFactory {
static create(provider) {
switch(provider) {
case 'udio': return new UdioClient();
case 'musicgen': return new MusicGenClient();
case 'mubert': return new MubertClient();
default: throw new Error(`Unknown provider: ${provider}`);
}
}
}# Primary provider
MUSIC_PROVIDER=udio
# Provider-specific configs
UDIO_API_TOKEN=your_token
MUSICGEN_API_TOKEN=your_hf_token
MUBERT_API_TOKEN=your_token
STABLE_AUDIO_API_TOKEN=your_token
# Fallback chain
MUSIC_FALLBACK_PROVIDERS=udio,musicgen,mubert- Immediate: Update documentation to mention API discontinuation
- Short-term: Implement Udio client as direct replacement
- Medium-term: Add MusicGen and Mubert support
- Long-term: Full multi-provider architecture with fallbacks