Skip to main content

Make tunes

Project description

arioso

Unified Python facade for AI music generation.

One interface, many backends. Arioso wraps 14 AI music generation platforms — from local open-source models to commercial REST APIs — behind a single generate() call.

Install

pip install arioso

Quick start

import arioso

# Generate music (defaults to MusicGen, runs locally)
song = arioso.generate("upbeat jazz piano")

# The result is a Song object with audio data
song.audio.audio_array   # numpy array (for local models)
song.audio.sample_rate   # e.g. 32000

# Use a different platform
song = arioso.generate("epic orchestral soundtrack", platform="elevenlabs", duration=30)
song.audio.audio_bytes   # MP3 bytes

Platforms

14 platforms are included, spanning local models, REST APIs, and SDK-based services:

Platform Access Auth Install
MusicGen Local (audiocraft/transformers) None pip install arioso[musicgen]
Stable Audio Open Local (diffusers) None pip install arioso[stable-audio]
Harmonai Local (diffusers) None pip install arioso[harmonai]
Riffusion Local (diffusers) None pip install arioso[riffusion]
ElevenLabs REST API ELEVENLABS_API_KEY pip install arioso[elevenlabs]
Suno (via sunoapi.org) REST API SUNO_API_KEY pip install arioso[sunoapi]
Google Lyria 2 REST (Vertex AI) GOOGLE_CLOUD_PROJECT + gcloud auth pip install arioso[lyria2]
Google Lyria RT WebSocket (genai SDK) GOOGLE_API_KEY pip install arioso[lyria-rt]
Mubert REST API MUBERT_PAT pip install arioso[mubert]
Beatoven.ai REST API BEATOVEN_API_KEY pip install arioso[beatoven]
Loudly REST API LOUDLY_API_KEY pip install arioso[loudly]
Jen REST API JEN_API_KEY pip install arioso[jen]
YuE fal.ai / local CLI FAL_KEY pip install arioso[yue]
Udio Unofficial wrapper UDIO_AUTH_COOKIE pip install arioso[udio]
# See what's available
arioso.list_platforms()
# ['beatoven', 'elevenlabs', 'harmonai', 'jen', 'loudly', 'lyria2', ...]

# Inspect a platform's configuration
arioso.get_platform_info("musicgen")

MusicGen (local, no API key)

Runs on your machine. Tries audiocraft first, falls back to HuggingFace transformers.

song = arioso.generate(
    "chill lofi beats",
    platform="musicgen",
    duration=10,
    temperature=0.8,
    guidance=3.0,
    model="facebook/musicgen-small",  # or medium, large, melody
)

ElevenLabs

Needs ELEVENLABS_API_KEY environment variable.

song = arioso.generate(
    "dramatic film score",
    platform="elevenlabs",
    duration=60,
    instrumental=True,
    output_format="mp3_44100_128",
)

# With lyrics
song = arioso.generate(
    "pop ballad",
    platform="elevenlabs",
    lyrics="[Verse]\nWalking through the rain\n[Chorus]\nI found my way home",
    title="Coming Home",
)

Suno (via sunoapi.org)

Needs SUNO_API_KEY environment variable.

songs = arioso.generate_many(
    "summer reggae vibes",
    platform="sunoapi",
    genre="reggae, tropical",
    instrumental=True,
)
# Suno returns 2 songs per call
for song in songs:
    print(song.title, song.audio_url)

Parameters

All platforms share a common vocabulary of parameter names. Use any that the platform supports — unsupported ones are warned about and ignored.

song = arioso.generate(
    "ambient soundscape",           # prompt (required)
    platform="musicgen",
    duration=15,                    # seconds
    temperature=1.2,                # sampling randomness
    top_k=250,                      # top-k sampling
    guidance=3.0,                   # classifier-free guidance
    seed=42,                        # reproducibility
)

The full set of 40 unified parameter names:

Parameter Type Description
prompt str Text description of desired music
duration float Output length in seconds
lyrics str Custom lyrics text
instrumental bool Force instrumental-only output
genre str Genre tag or category
title str Song title
model str Model version or variant
seed int Random seed for reproducibility
guidance float Classifier-free guidance scale
temperature float Sampling randomness
top_k int Top-k sampling parameter
top_p float Top-p (nucleus) sampling
bpm int Beats per minute
key str Musical key (e.g. "C major")
energy float Energy/intensity level 0-1
output_format str Desired output format
... See arioso.AFFORDANCES for all 40

Each platform maps these to its native parameter names automatically. For example, instrumental=True becomes make_instrumental=True for Suno and force_instrumental=True for ElevenLabs.

Output

Every call returns a Song object:

song = arioso.generate("jazz piano", platform="musicgen")

song.status           # 'complete'
song.platform         # 'musicgen'
song.title            # ''
song.metadata         # {'model': 'facebook/musicgen-small', ...}

# Audio is in song.audio (an AudioResult)
song.audio.audio_array    # numpy array (local models)
song.audio.audio_bytes    # raw bytes (REST APIs)
song.audio.audio_url      # URL string (Suno)
song.audio.sample_rate    # e.g. 32000
song.audio.format         # 'wav', 'mp3', etc.

# Shortcuts
song.audio_array          # same as song.audio.audio_array
song.audio_bytes          # same as song.audio.audio_bytes
song.sample_rate          # same as song.audio.sample_rate

Use generate_many() when you want all results (some platforms return multiple):

songs = arioso.generate_many("pop song", platform="sunoapi")
# Returns list[Song]

Adding a new platform

Arioso uses a plugin architecture. Each platform is a subfolder under arioso/platforms/ with two files:

arioso/platforms/myplatform/
    __init__.py
    config.py        # required: declares PLATFORM_CONFIG
    adapter.py       # optional: custom generation logic

Minimal example (REST API)

For a REST API, you may only need config.py:

# arioso/platforms/myplatform/config.py

PLATFORM_CONFIG = {
    "name": "myplatform",
    "display_name": "My Platform",
    "website": "https://myplatform.com",
    "tier": "simple",
    "access_type": "rest_api",

    "auth": {
        "type": "bearer_token",
        "env_var": "MYPLATFORM_API_KEY",
    },

    "param_map": {
        "prompt": {"native_name": "text", "required": True},
        "duration": {"native_name": "length_seconds"},
    },

    "supported_affordances": ["prompt", "duration"],
    "on_unsupported_param": "warn",

    "output": {
        "default_format": "mp3",
        "sample_rate": 44100,
        "returns": "bytes",
    },

    "api": {
        "base_url": "https://api.myplatform.com",
        "generate_endpoint": {"method": "post", "path": "/v1/generate"},
    },
}

The platform is auto-discovered on the next arioso.list_platforms() call.

Custom adapter (Python library)

For platforms that are Python libraries rather than REST APIs, add an adapter.py:

# arioso/platforms/myplatform/adapter.py

from arioso.base import Song, AudioResult

class Adapter:
    def __init__(self, config):
        self.config = config

    def generate(self, prompt, *, duration=10, **kwargs):
        # Your generation logic here
        from some_library import generate_audio
        audio = generate_audio(prompt, length=duration)

        return Song(
            audio=AudioResult(audio_array=audio, sample_rate=44100, format="wav"),
            platform="myplatform",
            status="complete",
        )

Manual registration

Third-party packages can register platforms at runtime:

from arioso.registry import register_platform

register_platform("custom", my_config_dict, my_adapter_instance)

Platforms Without Public APIs

The following platforms were considered during the design of arioso's unified parameter vocabulary and affordance system, but do not have public APIs (nor a reliable third-party API wrapper). They are listed here for completeness.

Platform Website What It Does Affordances Considered
AIVA aiva.ai Orchestral AI composition. Desktop/web DAW with 250+ style presets, direct BPM/key/instrument control. genre, bpm, key, instruments, duration
ACE Studio acestudio.ai AI vocal synthesis DAW plugin. 140+ voice models for singing voice generation. voice_id, lyrics, instruments
Boomy boomy.com AI song creation with Auto Vocal and streaming platform distribution. Enterprise-only API. prompt, voice_id, instrumental
Soundraw soundraw.io AI music generation for content creators. Enterprise B2B API only ($11/mo consumer web app). genre, duration, energy
CassetteAI cassetteai.com Prompt-based music generation. Web-only, no known API. prompt, duration
Musicfy musicfy.lol AI music generation with voice cloning and pitch shifting. Web-only, no known API. prompt, voice_id, pitch_shift

Research & Background

Arioso's design is informed by extensive research into the AI music generation landscape. Two reference documents in misc/docs/ provide the full background:

Platform comparison and API landscape

AI Music Generation Tools: A Unified API Reference for 21 Platforms maps the full union of capabilities across every tool we investigated. Highlights:

Prompt engineering across platforms

Prompt Engineering for Music AI Generation: A Resource Guide compiles 78 resources (papers, datasets, tools, taxonomies, and guides) covering how to write effective prompts for text-to-music systems. Key sections:

Each platform also has a <PLATFORM>_REFERENCE.md in its directory under arioso/platforms/ with platform-specific prompt engineering guidance, API details, and links to further reading.

Architecture

arioso/
    __init__.py          # Facade: generate(), list_platforms()
    base.py              # Song, AudioResult, AFFORDANCES (40 unified params)
    registry.py          # Auto-discovery, lazy loading, manual registration
    translation.py       # Parameter renaming & coercion (common -> native)
    _util.py             # Auth helpers, HTTP session factory

    platforms/
        _base_adapter.py   # BaseRestAdapter (shared REST infrastructure)
        musicgen/          # Local inference via audiocraft/transformers
        stable_audio/      # Local inference via diffusers
        harmonai/          # Unconditional generation via Dance Diffusion
        riffusion/         # Spectrogram-based via diffusers
        elevenlabs/        # REST with OpenAPI spec via ho
        sunoapi/           # REST via sunoapi.org
        lyria2/            # Google Vertex AI REST
        lyria_rt/          # Google Lyria RealTime WebSocket
        mubert/            # Mubert REST API
        beatoven/          # Beatoven.ai REST API
        loudly/            # Loudly REST API
        jen/               # Jen REST API
        yue/               # YuE via fal.ai or local CLI
        udio/              # Udio via unofficial wrapper

Key design choices:

  • Zero required dependencies. The core package imports nothing outside stdlib. Platform dependencies are lazy-imported when you first call generate().
  • Config-driven plugins. Each platform declares a PLATFORM_CONFIG dict with parameter mappings, auth scheme, endpoints, and output format. Adding a platform is mostly configuration.
  • Automatic parameter translation. The translation layer renames unified affordance names to native platform names and applies type coercions (e.g. duration seconds to music_length_ms milliseconds for ElevenLabs).
  • Leverages existing libraries. Uses ho for OpenAPI-to-Python-function generation, i2 for signature manipulation and function wrapping.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arioso-0.0.8.tar.gz (63.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

arioso-0.0.8-py3-none-any.whl (89.9 kB view details)

Uploaded Python 3

File details

Details for the file arioso-0.0.8.tar.gz.

File metadata

  • Download URL: arioso-0.0.8.tar.gz
  • Upload date:
  • Size: 63.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for arioso-0.0.8.tar.gz
Algorithm Hash digest
SHA256 438d06f95ae8b504f096369d574a8fcd9688dee6030bcf2aa659f2b1ca1392e8
MD5 ae047f1c17197ac412d20d179d5a759a
BLAKE2b-256 cfc5bb50093926554d1d2d0f9945238bf8787aeabf163eb62240690a75f05889

See more details on using hashes here.

File details

Details for the file arioso-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: arioso-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 89.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for arioso-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 bc50bcecda778d050bb225cb3ad3533bc801b05950a3835f9b9a26d80b3e049a
MD5 44794e11eae2fecec5b798486848619e
BLAKE2b-256 a7378206c4434157d38e04ffaebb800eda09d81e17c13ec0a80d5486be93d636

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page