YuE2 Music
SkillMediaLets your agent generate songs, cover recordings by transcribing their melody, and edit scores while preserving the tune.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the YuE2 Music skill
About this capability
Use when generating songs with YuE2, covering a recording via SheetSage2 audio-to-ABC, editing a score or lyrics with melody preservation, or building a reproducible listening comparison of YuE2 output
What this skill tells your AI
The instructions your AI receives, as published by sammcj/agentic-coding in Skills/yue2-music/SKILL.md and read by ahel’s review.
Turn a musical request into a reproducible song and an audible comparison. Retain the original song and its plan before changing anything.
Choose the workflow
- Generate with editable melody and harmony: YuE2
cot="full"-> ABC -> song - Generate with a melody plan and free accompaniment: YuE2
cot="melody"-> chord-free ABC -> song - Generate without symbolic planning: YuE2
cot="off"-> song (no editable ABC) - Cover a recording: SheetSage2 -> inspect and correct ABC -> strip chords -> YuE2
melody - Cover an ABC melody: inspect or convert native ABC -> strip chords -> YuE2
melody - Change harmony, instruments, tempo, structure or lyrics: copy the full plan -> edit ABC or text -> regenerate
- Agentic editing: export plan and baseline -> bounded editing agent -> check invariants -> render -> compare
- Analyse continuous musical features: MERT2, see models-and-setup.md
Set up
Read models-and-setup.md for model IDs, install pins and licences.
- Work from a project directory, never inside this skill folder.
<skill>in commands below is this skill's directory. - Create
.venv-yue2in the project and install the YuE2 runtime from the official GitHub repository source. - Create
.venv-sheetsage2separately (dependency pins differ) and download the SheetSage2 snapshot tomodels/SheetSage2. - Record every model revision you download.
- Run on the supported baseline: one request at a time, BF16-capable NVIDIA GPU with 24 GB VRAM, default YuE2 settings. On Apple Silicon follow the MPS section of models-and-setup.md; scripts auto-detect the device.
- Scripts default to Hub model IDs; see each script's
--helpfor local snapshot and revision flags. Use a fresh output directory per run.
Generate and retain the plan
Copy assets/prompt.json to requests/<id>.json and edit it. Put genre, instruments, vocal character, language and tempo in style; put section tags and the actual words in lyrics. Keep implementation notes out of lyrics.
.venv-yue2/bin/python <skill>/scripts/run_yue2.py generate --request requests/song.json --output outputs/pop
.venv-yue2/bin/python <skill>/scripts/run_yue2.py all-modes --request requests/song.json --output outputs/modes
.venv-yue2/bin/python <skill>/scripts/run_yue2.py plan --request requests/song.json --output outputs/plan
Inspect result.json, truncation, score.abc, request.json and audio. The helper saves native artefacts including exact tokens and latent.npy; keep them. Preserve every requested mode and every failure. A playable file does not establish musical quality.
Read generation-and-covers.md for the Python interface, exact plan continuation, CFG, sampling and cached decoding. For a niche or extreme genre, or when a result sounds like the mainstream version of what was asked, apply its "Steer away from generic renditions" section before changing the prompt again.
Cover a recording
- Transcribe in the SheetSage2 environment. Select the vocal melody or the full lead melody including instrumental passages.
- Inspect warnings. Correct missed notes, meter or key before attributing errors to YuE2. Preserve source audio and raw transcription.
- Export chord-free ABC. When dropping a part, select the retained voice explicitly; stripping chords alone should preserve both melodic voices and their rests.
- Render with
cot="melody", target style and suitable lyrics. To retain the original harmony as well, transcribe in full and usecot="full".
.venv-sheetsage2/bin/python <skill>/scripts/transcribe.py reference.wav --task melody-full --output outputs/transcription
python3 <skill>/scripts/abc_tools.py strip-chords outputs/transcription/score.abc outputs/cover.abc
# The request supplies target style and lyrics.
.venv-yue2/bin/python <skill>/scripts/run_yue2.py generate --request requests/cover.json --cot melody \
--abc-file outputs/cover.abc --output outputs/cover-song
Edit or delegate an edit
Read editing-workflows.md and abc-editing.md before changing a score. Create a task per step below, each with its completion criterion, then work them to completion.
-
Render a baseline from the full plan. Freeze its directory.
-
Define invariants: exact pitches; pitch plus rhythm; contour only; or bounded melodic adaptation. Name the voices, passages, lyrics, instruments, tempo, meter and structure covered.
-
Delegate when possible: fill in the edit brief and give a score-editing agent the raw ABC, prompt, lyrics and requested change. Request a new ABC, revised style or lyrics as needed, and an edit manifest. Give a separate reviewer the before/after artefacts and constraints. Without delegation, perform each stage yourself. Keep model generation sequential per GPU.
-
Check musical events, not character strings: ties, accidentals and compressed rests matter.
python3 <skill>/scripts/abc_tools.py inspect edits/jazz.abc python3 <skill>/scripts/abc_tools.py compare outputs/plan/score.abc edits/jazz.abc --voices Vocal .venv-yue2/bin/python <skill>/scripts/run_yue2.py generate --request edits/jazz.json --cot full \ --abc-file edits/jazz.abc --output outputs/jazzAdd
--allow-tempo-changefor intentional tempo changes. Exact comparison fails on intentional rhythm changes; audit the permitted differences from its report and label the result accordingly. -
Regenerate after changing style, lyrics or ABC. Old acoustic latents can be decoded again but do not contain a musical or lyric edit.
-
Compare full songs and short passages around the edit. Revise when the requested effect fails. Retain each attempt with its actual prompt.
For lyric translation, follow the syllable mapping steps in abc-editing.md and keep the sidecar. Use ASR/PER and listening as separate evidence.
Deliver an audible result
Read listening-and-evaluation.md.
python3 <skill>/scripts/listen.py outputs/pop outputs/jazz --output outputs/comparison
This builds a local HTML player with each score engraved (abcjs, as on the YuE2 demo page); notes turn red as the recording plays. Nothing is uploaded; the only fetch is the pinned abcjs build, avoided with --abcjs <file> or --no-notation. Return playable audio, full prompt and lyrics, before/after ABC, invariant checks and requested evaluations. Keep model and decoder identity and failures visible. Deliver edit manifests and comparison reports alongside the page.
Gotchas
- Public MERT feature tensors are not YuE2 codec tokens. YuE2 has no audio-reference, phoneme-alignment or local-inpainting argument; condition through style, lyrics and ABC only.
YuE2-Vaeis for listening.YuE2-Vae-legacyis for reproducing the supplied benchmark protocol. Keep decoded files separate; the name "legacy" says nothing about which is newer or better.- On OOM, free allocations or move to suitable hardware and report the change. Shortening the song or lowering inference settings without saying so hides the failure.
- Song length follows the planned score, not the prompt. "Short song" in
styleor few lyric lines still yields a 4-6 minute plan padded with interlude until the token cap. To control length, runplan, trimscore.abcto the wanted bars (abc_tools.py inspectreports nominal seconds), end on a held note so the song does not stop mid-riff, and regenerate with--abc-file. cfg_scaledefaults to 1.0 infullandmelody(1.01 inoff), which is guidance off: the style string conditions the semantic tokens once and nothing amplifies it. A genre label alone yields its most common form. Raisecfg_scale, addnegative_style, and write the score yourself; see generation-and-covers.md.run_yue2.pyhas no resume; after an interrupted run, rerun into a fresh directory. The upstreamyue2 --resumeflag reuses a completed matching result only.- Keep an edited score connected through
--abc-fileor requestabc_path. A request withabc: nulland no file generates a fresh plan and discards the edit. - Load unchanged plans with
SymbolicPlan.load; submit modified ABC as a new input. cot="melody"does not strip chord symbols; runabc_tools.py strip-chordsfirst.- Melody conditioning supplies a symbolic melody. It does not preserve the source singer's identity or waveform.
- There is no
phonemesrequest field. The syllable sidecar is bookkeeping, not acoustic alignment. - An ABC check or SongBench score does not show exact note realisation, instrument removal or sample-accurate preservation. Listen.
Signals
- GitHub stars
- 161
- Forks
- 25
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
yue2-music- Source
- github.com/sammcj/agentic-coding