YuE2-Jam / README.md
youngsemicolon
YuE2-Jam: run m-a-p/YuE2-3B instead of MiniMax Music 3, rebrand for YuE2
de0fe6c
|
Raw History Blame Contribute Delete
2.99 kB
---
title: YuE2-Jam
emoji: 🎤
colorFrom: yellow
colorTo: red
sdk: gradio
sdk_version: 6.24.0
app_file: app.py
pinned: false
license: cc-by-nc-4.0
short_description: Describe any song, YuE2 writes & sings it
startup_duration_timeout: 1h
suggested_hardware: zero-a10g
models:
- m-a-p/YuE2-3B
- m-a-p/YuE2-Vae
- Tongyi-MAI/Z-Image-Turbo
tags:
- mcp-server
---
# YuE2-Jam
Describe any song in plain English. An LLM writes the title, a YuE2 style prompt and section-tagged
lyrics, then [YuE2-3B](https://huggingface.co/m-a-p/YuE2-3B) plans a melody-and-chords score and
sings the full song (48 kHz stereo). Songs can be shared to a community feed (stored in the
`Mike0021/yue2-jam-community` bucket, each with its creation date).
## How it works
- **Compose** (CPU): `composer.py` calls an LLM on the HF Inference Router and returns
`{title, tags, style, lyrics}`: `style` is a line of comma-separated descriptors (language, genre,
singer, instruments, mood, BPM) as in the official examples; `lyrics` use YuE2's section tags
(`[Intro]`, `[Verse]`, `[Pre-Chorus]`, `[Chorus]`, `[Bridge]`, `[Interlude]`, `[Outro]`).
- **Sing** (ZeroGPU): `engine.py` runs the official `yue2_infer` package from the model repo
(installed with `--no-deps`; see `requirements.txt`): ABC score planning (`cot="full"`), 25 Hz
semantic tokens, flow matching, then the [YuE2-Vae](https://huggingface.co/m-a-p/YuE2-Vae) decoder.
YuE2 sets the song length from the lyrics; the requested duration caps it (fade-out if the cap is
hit). Lyrics made only of section tags render an instrumental without a score plan (`cot="off"`).
Cover art comes from Z-Image-Turbo in the same GPU allocation.
- **Share**: MP3 + cover + `meta.json` are written to the bucket mounted at `/data`; the feed is served
from memory.
## API
- `POST /create(description, audio_duration, seed, community, instrumental)` streams status JSON then the
final result `{audio, title, tags, lyrics, style, seed, duration, created_at, thumbnail?, community_url?}`.
- `POST /generate(style, lyrics, audio_duration, seed, title, tags, community, cover_word)` for explicit inputs.
- `POST /community()` returns the newest shared songs.
The same three endpoints are also exposed as MCP tools (`create`, `generate`, `community`) via Gradio's
built-in `mcp_server=True` — schema and description come straight from each function's type hints and
docstring, no extra code. MCP endpoint (streamable HTTP): `https://mike0021-yue2-jam.hf.space/gradio_api/mcp`
(legacy SSE transport at `/gradio_api/mcp/sse`; add `?tools=create,community` to either to expose only a subset).
Requires the `HF_TOKEN` secret (composer LLM) and the bucket volume `hf://buckets/Mike0021/yue2-jam-community:/data`.
YuE2 weights are released under [CC BY-NC 4.0](https://huggingface.co/m-a-p/YuE2-3B/blob/main/LICENSE):
non-commercial use only. The header mark is the YuE logo (Apache 2.0) from the
[YuE2 project page](https://map-yue2.github.io/).