--- 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/).