AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Ableton Describe To MIDI

skill-korben00-ableton-producer-skills-ableton-describe-to-midi · by Korben00

This skill should be used when the user describes music in natural language and wants it written into Ableton Live — "turn this description into MIDI", "generate a [mood] [instrument] motif", "write me an 8-bar [genre] [part] in [key]", "make a melancholic piano line in D dorian", or any free-form "make music that sounds like…" request. Translates a prose brief into a MIDI clip in the Set.

No reviews yet
0 installs
3 views
0.0% view→install

Install

$ agentstack add skill-korben00-ableton-producer-skills-ableton-describe-to-midi

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-korben00-ableton-producer-skills-ableton-describe-to-midi)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Ableton Describe To MIDI? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Ableton Describe To MIDI

Translate a natural-language brief ("a melancholic 8-bar piano motif in D dorian, sparse, building") into MIDI written into the Live Set. This is the "language → music in your project" magic. Two delivery modes: (A) Claude composes the notes and writes them via the runner; (B) the extension calls an LLM at runtime from Node (it has network access) and writes the returned notes.

When to use

Triggers: "turn this into MIDI", "generate a [mood/genre] [part] in [key]", "make music like…". For a known song's melody use ableton-genre-cover; for a melody over given chords use ableton-topline.

Process

  1. Use ableton-live-runner for build/run/kill + scaffold.
  2. Parse the brief into musical parameters — key/scale, tempo, length (bars), part(s)

(chords/bass/melody/drums), density, register, mood. Ask 1–2 questions only if a critical parameter is missing (key or length).

  1. Set the project contextsong.tempo, and optionally song.rootNote/scale so the Set stays

coherent and Ableton's scale-aware tools agree.

  1. Compose — for each requested part, reuse the relevant skill's logic (chords →

ableton-reharmonize voicings, melody → ableton-topline principles, bass → ableton-bassline, drums → ableton-drum-groove). Stay in scale; anchor chord tones on strong beats; phrase with rests.

  1. Write tracks with makeTrack (sensible instrument per part + light FX) and report what was

generated (key, bars, parts).

Mode B — generate at runtime via an LLM (optional, advanced)

Because the extension is a full Node process it has network access, so compose() can call an LLM API and parse structured notes. Caveats: verify fetch exists in Live's bundled Node (the runtime Node version is not guaranteed — polyfill or use node-fetch if it is undefined); load the API key from environment.storageDirectory, not process.env; and pin the model in one constant so it is easy to update. Force JSON output and validate before writing.

const MODEL = "claude-opus-4-8"; // update as models change
async function llmNotes(apiKey, brief, bars) { // apiKey read from environment.storageDirectory
  const res = await fetch("https://api.anthropic.com/v1/messages", {
    method: "POST",
    headers: { "x-api-key": apiKey, "anthropic-version": "2023-06-01", "content-type": "application/json" },
    body: JSON.stringify({
      model: MODEL, max_tokens: 2000,
      messages: [{ role: "user", content:
        `Return ONLY JSON: {"notes":[{"pitch":0-127,"startTime":beats,"duration":beats,"velocity":1-127}]}.
         ${bars} bars, 4/4. Brief: ${brief}` }],
    }),
  });
  const txt = (await res.json()).content[0].text;
  return JSON.parse(txt.slice(txt.indexOf("{"), txt.lastIndexOf("}") + 1)).notes;
}
// then: clip.notes = validate(await llmNotes(apiKey, brief, bars));

Validation (always, especially Mode B)

Clamp pitch 0–127, velocity 1–127, startTime ≥ 0, duration > 0; drop out-of-scale notes if a scale was requested; cap total to the clip length. Never write unvalidated model output.

Limits

  • Mode B needs an API key and network; interactively-authenticated services may be unavailable in

headless runs — prefer Mode A (Claude composes) for reliability.

  • No automation/real-time — generates notes, not performance moves.

See ableton-topline, ableton-reharmonize, ableton-bassline, ableton-drum-groove.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.