SuperAPI AI Directory

mc-render-compile

Agents & models

View repository

Updated 10-15 17:55

About this skill

Compilation Layer (Render Compile)

This library has only one compiler. Backends are data, not skills.

ARR-SPEC(唯一 IR)
    ↓  mc-render-compile   ← 只有这一个,管共性
    ├─→ backends.yaml: yue2      ★ 可直接吃 ABC 乐谱,控制力最强
    ├─→ backends.yaml: suno         散文 prompt + 段落标签,成品最润
    ├─→ backends.yaml: minimax-music-3
    ├─→ backends.yaml: ace-step-1.5
    ├─→ backends.yaml: stable-audio-3   (无人声)
    └─→ backends.yaml: symbolic         MIDI/MusicXML,完全确定

Adding a new model = adding a block in backends.yaml , without touching any skill. This is the compiler front-end/back-end separation setup.

Which sections to read by task

Task Read
Which backend to choose §2 Capability comparison
Compile a spec §3 Compilation order (do it in order, don't skip)
Write style_prompt §4
Paragraph tags don't match up §5
The backend ignores my spec §6 honors contract + §7 degradation
Need to output ABC/MIDI mc-symbolic-score
Hand the compilation result to the backend for execution §8
Add a new backend §9
Generation is done mc-ai-tell-audit

Boundaries

Not covered here Where it belongs
How to come up with the content in ARR-SPEC L1/L2 skills
How to generate ABC / MusicXML / MIDI mc-symbolic-score
Whether the generated result looks like AI mc-ai-tell-audit
How the compliance rate is calculated Defined in mc-ai-tell-audit §3.1; §6 of this skill only covers how the three honors tiers affect scoring
Where a specific backend's weights go and what the nodes are called backends.yaml(Data)
What style words should be written in the style description mc-style-*(L3)

1. Must fill in before starting

Required Question
① Target backend At least one.If multiple, you need to do the degradation table in §7
② What is to be verified this time Is it producing a final product, or running an AB?For AB, you must lock down the other variables
③ Seed strategy Fixed seed for comparison, or best-of-N selection
④ Which fields this backend cannot do Check honors。This determines that you shouldn't waste prompt budget on those fields

2. Backend capability comparison

YuE2 Suno MiniMax ACE-Step Stable Audio Symbol
Input Style + lyrics + optional ABC Prose + paragraph tags Prose + lyrics + reference Tags + prose Prose Score
Key/harmony ★ Exact(ABC) Can only hint Hint Hint — Exact
Form/number of measures ★ Exact Can't be controlled Hint Hint — Exact
Vocals Yes Yes Yes Yes No No
Reproducible seed + best-of-8 Weak — seed seed Fully
Tone quality/finish level High Highest High Medium High Depends on the sound source
Commercial use ★ License CC-BY-NC, non-commercial use only Depends on the subscription tier To be verified Check the license Check the license Allowed

Selection recommendations:

Purpose Choose
Verify whether the spec is enforced YuE2(the only one that can "enforce" rather than "suggest")
Want a finished-quality sound Suno
Want a fully reproducible control baseline Symbolic path
Pure instrumental/ambient Stable Audio
Commercial release ★ Settle licensing first——YuE2 weights are CC-BY-NC-4.0, non-commercial use only

3. ★ Compilation order

Do it in order. Skipping steps causes the problem of "contradictory prompts."

# Step Description
0 Go through mc-workflow the 20 self-checks in §3.0 For any items that fail, fix them or state the reason before compiling——not an admission threshold, but one last chance to discover that "the spec isn't finished"
1 Read the backends.yaml in honors Mark the none fields——they don't go into the prompt, and they don't count toward scoring
2 mix_intent.mood Put at the very front It has veto power over the remaining decisions, so it must be placed near the front of the prompt
3 Compile style_prompt §4
4 Compile the section tag sequence §5。★ The count must equal the form number of sections(lint #13)
5 Compile the lyric chunks §5.3
6 Symbolic path(if the backend supports it) → mc-symbolic-score
7 Compile exclude / negative prompts §4.4
8 Set the seed and batch §7.3
9 Write back to render.<backend> ARR-SPEC records the result of this compilation itself

★ Don't miss step 9:render The section is part of the spec, if it isn't written back, the next AB round won't know what was actually fed in last time.


4. style_prompt: compress structured fields into prose without losing information

4.1 Priority order of information sources

Extract from the following fields, arranged in this order(the earlier, the more likely the model is to adopt it):

  1. mix_intent.mood(one sentence)
  2. meta.style_layer the corresponding style word (→ L3 skill)
  3. meta.tempo、meta.key
  4. arrangement.roster[].instrument + timbre
  5. groove.feel + push_pull'sdirection(don't write milliseconds, write "bass playing ahead of the beat")
  6. vocal.persona + vocal.delivery
  7. Era/production-quality words

4.2 ★ Three hard rules

  1. Ban information-free adjectives:epic / emotional / beautiful / amazing / masterpiece / perfect (lint #13 soft warning). They carry no executable information and only take up space
  2. Numbers must be converted into audible descriptions: push_pull: bass −12ms → bass playing slightly ahead of the beat(Don't write −12ms)
  3. Every word must point to a roster item or a spec field。 ★ Self-check action:Circle every word of style_prompt one by one; delete any word whose source cannot be traced

4.3 A measured sample (City Pop)

1980s Japanese city pop, 112 BPM, D major, Rhodes electric piano,
16th-note muted clean guitar, electric bass playing ahead of the beat,
gated reverb snare, analog saw synth lead riff,
tenor saxophone solo in the bridge and outro,
female vocal with breathy tone mixed back, warm tape saturation

Note its construction:era + style → tempo and key → each instrument with playing technique → vocals → production texture. Not a single adjective is empty.

4.4 exclude (negative prompt)

Write from "what this song is not", not from "don't make it unpleasant."

Measured sample:

["EDM drop", "trap hi-hats", "modern sidechain pumping",
 "orchestral epic", "fade out ending"]

★ The last item fade out ending is worth noting—— Fade-out is the default ending of generative models, and if you don't exclude it, you will definitely get a fade-out (→ mc-arrangement-arch §8 Three kinds of endings).


5. Section tags and lyrics

5.1 Mapping table

form[].name → backend tag:

ARR-SPEC Suno / most backends
Intro [Intro]
Verse [Verse]
Pre-Chorus [Pre-Chorus]
Chorus [Chorus]
Bridge [Bridge]
Instrumental [Instrumental]
Outro [Outro]

★ Two mapping traps:

  1. 大サビ maps to [Bridge], not [Chorus](→ mc-form §7). If mapped wrong, the backend will give you a high-energy chorus at the introspective position
  2. 落ちサビ (a chorus with sparse arrangement) still maps to [Chorus], write the sparse requirement into style_prompt or the section annotation,don't express it by changing the tag

5.2 The counts must be equal

The full statement of this rule is in §3 Step 4 (the count must equal the form number of sections, lint #13), and it also appears once in the §11 must-pass checklist. It is given its own section because it is the place most prone to error at compile time: after manually changing lyric sections, it is very easy to forget to synchronously add or remove tags, and if one is missing the backend will decide for itself what that section is; when an error occurs, check here first.

5.3 Lyric chunking

  • Lyrics are split by section,corresponding one-to-one with the tags
  • ★ Line breaks within a sectionaffect phrasing——it is not just layout; the backend reads them as phrase boundaries
  • Where the lyrics come from:This skill only compiles this package's side (section tags, style description, exclusion words, symbolic paths); the lyrics side is read from meta.upstream.lyrics.sections , where the id is the form[].id, and by id each section's lines are placed under the corresponding tag. It can also be the lyric spec sheet for the same song: find it by meta.upstream.lyrics.source , take lines by section id, and use the lines as-is, without changing words or re-splitting lines
  • Section ids don't match (the lyrics have sections that form doesn't have, or vice versa) → don't guess, compile according to form[] , write the unmatched sections into checks.exemptions, then write a messages for the lyricist (to: lyrics). When lyrics come before music, the section ids are determined by the lyrics side (mc-workflow §5.1), so change this package's form[] to align
  • When there are no lyrics, handle it according to the three cases in mc-workflow §2.3 (no lyrics, placeholder syllables to indicate vocal rhythm, or this package writes lyrics and records an exemption)
  • For the format when the divided chunks are sent to the backend (the consequences of line breaks, breath, melisma, punctuation and parentheses, annotations not entering the lyric field, purely instrumental sections, which backends accept lyrics, what to check before submitting), see reference-lyrics.md

6. ★ honors contract: the most important rule of this skill

Each backend declares in backends.yaml its execution capability for each ARR-SPEC field:

value Meaning How it counts during acceptance
exact Can be executed precisely Scored, and if it doesn't meet the standard, that means it failed to do it
hint Can only serve as a hint affecting generation Scored, but with a discounted weight
none Does not accept this field at all ★ Excluded from scoring, marked "this backend does not support it"

6.1 Why none must be excluded rather than given 0

Suno was never told the exact chords; docking it points for "the chords didn't keep up" is punishing it for something it cannot do.

★ An even more serious consequence: if none is given 0 points, then a backend that honestly declares "I can't do stereo imaging" will score lower than a backend that pretends it can—— the scoring system would reward misreporting capabilities.This is a correctness bug, not a matter of interpretation.

6.2 How to use it at compile time

  1. none fieldsdo not go into the prompt——writing them is useless and also takes up space that could hold useful information
  2. hint fieldsshould be written, but don't count on them——pair with best-of-N
  3. exact fieldsmust be written accurately, this is where you spend money to buy control

7. Degradation strategy

7.1 One spec, multiple backends

Don't write a separate spec for each backend. Write one, and degrade according to honors:

Field YuE2 (exact) Suno (none) How to degrade
form.harmony Compile to ABC — Degrade to mode/color words in the style description("contains a lot of subdominant minor color")
form.bars Compile to ABC measures — Degrade to a length hint in the section label sequence, and accept that it cannot do it
groove.push_pull — hint Degrade to "playing ahead of the beat"
mix_intent none none ★ Neither side can do it → go through post-processing, or go through the symbolic path

7.2 Degradation must be recorded

For the recording format, see §10 (write into checks.exemptions), and for the delivery checklist, see §8.1 (write back to render.<backend>). What needs to be made clear here is the motivation: ★ in render.<backend> record which fields were degraded this time; otherwise, next round when you see a low compliance rate, you won't be able to tell whether the spec was written wrong or the backend simply couldn't do it. Low scores caused by degradation and low scores caused by spec errors look the same in the compliance rate; only the person who compiled it at the time knows the difference, so it must be recorded on the spot.

7.3 Seeds and batching

Purpose Method
AB comparison Fixed seed, change only one field. If you change two, nothing can be proven
Produce finished output best-of-N(YuE2 recommends 8), sort by compliance rate (use a measurement tool if available; otherwise compare field by field),then use your ears to pick from the top 3
Exploration Release the seed, but record which seed produced what

8. Handing off to the backend for execution

The output of this skill isthe input values for each backend: Suno's style description and section labels, YuE2's ABC and parameters, ACE-Step / MiniMax / Stable Audio's prompt and parameters. ★ Which tools are used to feed these values into the model is determined by the user's environment——command line, Python API, or a node-based carrier like ComfyUI; this skill does not presuppose or manage it. backends.yaml 's transport only records "where this backend usually runs"; it is data, not a premise.

8.1 What to deliver to the user

Backend What is handed over
Suno style_prompt, exclude, lyrics with section tags or placeholder syllables (§4, §5)
YuE2 ABC text (mc-symbolic-score) + genre / tempo parameters;and note: feed this ABC directly into the synthesis step, skipping the model's own symbolic planning
ACE-Step / MiniMax / Stable Audio prompt and parameters such as duration, according to their respective accepts lists

write each item back to render.<backend>; the user can take it and fill it into their own tools.

8.2 The key way to connect YuE2

YuE2 has two steps:symbolic planning (the model writes ABC itself) → synthesize audio from ABC。 ★ bypass the first step, and send the ABC compiled by mc-symbolic-score directly into the second step. This is the highest point of this library's control—the spec is no longer a "hint" here, but is executed. Any carrier that supports YuE2 can be connected this way (the official repository has scripts, ComfyUI has native nodes); how exactly to wire it is a matter for the user's environment.

The official YuE2 repository comes with skills/yue2-music/(including "check music invariants"). ★ do not rewrite it—we only write the ARR-SPEC→ABC adapter; for knowledge of model operations, reference theirs.


9. Adding a new backend

  1. In backends.yaml add a block:id / name / transport / accepts / honors / license
  2. ★ honors must be honest—rather mark none than mark hint just to fill the slot (for the reason see §6.1)
  3. fill in transport(hosted / local)—this only records where it usually runs, it is not a requirement
  4. run example-01-citypop.yamland see whether the compiled output is reasonable
  5. does not change any skill

10. Correspondence with ARR-SPEC fields

Field This skill
render.suno §4、§5
render.yue §4、§5、§8.3
render.midi → mc-symbolic-score
checks.exemptions ★ Degradation records are also written here

11. Must pass after compilation

  • mc-workflow The 20 items in §3.0 have been gone through; for any that fail, the reason is written
  • checked the target backend's honors,none fieldsdid not enter the prompt
  • mood is in the promptnear the front
  • in style_promptevery word points to a spec field
  • there is no epic/emotional/beautiful such empty words
  • numeric parametersconverted into audible descriptions, without writing milliseconds into the prompt
  • section tagscount == form number of sections
  • 大サビ is mapped to [Bridge]
  • exclude inexcluded the fade-out ending(unless a fade-out is really wanted)
  • seed strategy is clear; if doing AB,only one variable was changed
  • degradation records were written back to render.<backend>
  • after generation, first compare field by field against the spec (compliance rate),Then use your ears

Appendix: Sources

  • Backend data:backends.yaml
  • ⚠ MiniMax Music commercial API has been closed to new users, see the profile in backends.yaml
  • ⚠ Unconfirmed: the ABC dialect accepted by the YuE2 synthesis step; its correspondence between musical invariants and the 20 self-checks
  • Stem separation: Vocal AI-tell auditing requires first separating the vocal track; any stem separation tool will do (something like demucs, or the one built into the user's platform), see mc-ai-tell-audit §6.1