lexigram-multimedia-music
Music generation for the Lexigram Framework — local and API-based backends (local-http, stability-audio, ace-step, stable-audio-open).
Overview
lexigram-multimedia-music generates music and sound from a text prompt. The default backend calls a local HTTP reference server (http://localhost:5003) so the package works out of the box with no API keys; hosted backends (Stability Audio) and in-process reference servers (ACE-Step, Stable Audio Open) are selectable via config.
Full documentation: docs.lexigram.dev
Install
uv add lexigram-multimedia-music
# Optional extras
uv add "lexigram-multimedia-music[stability-audio]" # Stability Audio API
uv add "lexigram-multimedia-music[ace-step-server]" # local ACE-Step server (torch)
uv add "lexigram-multimedia-music[stable-audio-open-server]" # local Stable Audio Open server (torch)
Quick Start
from lexigram import Application
from lexigram.di.module import Module, module
from lexigram.multimedia.music import AudioMusicModule
from lexigram.contracts.multimedia import MusicProvider, MusicRequest
@module(imports=[AudioMusicModule.configure()])
class AppModule(Module):
pass
async def main() -> None:
async with Application.boot(modules=[AppModule]) as app:
music = await app.container.resolve(MusicProvider)
result = await music.generate(MusicRequest(prompt="upbeat synthwave, 120 bpm"))
if result.is_ok():
asset = result.unwrap() # MediaAsset — audio bytes or URI
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Configuration
Zero-config usage: Call
AudioMusicModule.configure()with no arguments to use thelocal-httpbackend athttp://localhost:5003.
Option 1 — YAML file
# application.yaml
multimedia:
music:
backend: "ace-step"
Option 2 — Profiles + Environment Variables
export LEX_PROFILE=production
export LEX_MULTIMEDIA_MUSIC__BACKEND=ace-step
Option 3 — Python
from lexigram.multimedia.music import AudioMusicModule
from lexigram.multimedia.music.config import MusicConfig
AudioMusicModule.configure(config=MusicConfig(backend="ace-step"))
Config reference
| Field | Default | Env var | Description |
|---|---|---|---|
backend |
"local-http" |
LEX_MULTIMEDIA_MUSIC__BACKEND |
local-http, stability-audio, ace-step, stable-audio-open |
local_http_base_url |
"http://localhost:5003" |
LEX_MULTIMEDIA_MUSIC__LOCAL_HTTP_BASE_URL |
Local reference server URL |
ace_step_base_url |
"http://localhost:5300" |
LEX_MULTIMEDIA_MUSIC__ACE_STEP_BASE_URL |
ACE-Step server URL |
stable_audio_open_base_url |
"http://localhost:5301" |
LEX_MULTIMEDIA_MUSIC__STABLE_AUDIO_OPEN_BASE_URL |
Stable Audio Open server URL |
timeout |
60.0 |
LEX_MULTIMEDIA_MUSIC__TIMEOUT |
Request timeout in seconds |
Module Factory Methods
| Method | Description |
|---|---|
AudioMusicModule.configure(config) |
Configure with explicit music config |
AudioMusicModule.stub() |
Real module pinned to the default local-http backend for tests |
Key Features
- Four backends —
local-http,stability-audio,ace-step,stable-audio-open - Reference servers —
lexigram-music-ace-step-serveandlexigram-music-stable-audio-open-serveconsole scripts run each local model server - Result-based —
generate() -> Result[MediaAsset, MultimediaError]; errors are domain values, not exceptions
Testing
from lexigram import Application
from lexigram.multimedia.music import AudioMusicModule
async def test_boot():
async with Application.boot(modules=[AudioMusicModule.stub()]) as app:
assert app.container is not None
Key Source Files
| File | What it contains |
|---|---|
src/lexigram/multimedia/music/module.py |
AudioMusicModule.configure() and .stub() |
src/lexigram/multimedia/music/config.py |
MusicConfig |
src/lexigram/multimedia/music/di/provider.py |
AudioMusicProvider — registers MusicProvider, wires task handlers |
src/lexigram/multimedia/music/providers/ |
Backend implementations (local_http, stability_audio, ace_step, stable_audio_open) |
src/lexigram/multimedia/music/servers/ |
Reference-server entry points (lexigram-music-*-serve) |
src/lexigram/multimedia/music/tasks.py |
Background generation task handlers |
src/lexigram/multimedia/music/exceptions.py |
MusicGenerationError hierarchy |
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lexigram_multimedia_music-0.1.5001.tar.gz.
File metadata
- Download URL: lexigram_multimedia_music-0.1.5001.tar.gz
- Upload date:
- Size: 27.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae79ca7c62c0bb85a3fad19b69c8adf44cec616e86beaca8fd0cee693c7f2b17
|
|
| MD5 |
bfaba7d5949032aeed71ca9b4f2682c2
|
|
| BLAKE2b-256 |
cc2e5274748f422c2a302fdb2cdad25ff01e3a0c5a2990ca9bec1ea94678ccea
|
File details
Details for the file lexigram_multimedia_music-0.1.5001-py3-none-any.whl.
File metadata
- Download URL: lexigram_multimedia_music-0.1.5001-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc74293254418b561440ae92cced0f2fc362b493e7937bd77b8a8ae37247b558
|
|
| MD5 |
40f0f23c7220a4b259ef280e837d620f
|
|
| BLAKE2b-256 |
534ea320d5a04b0a9bfb21ae4a82e0f392345e00d6946512cf576071115c5a4f
|