Skip to content
Automation
Skill

/midi-cleanup

Use when the user asks to humanize a MIDI part, fix voice leading, quantize notes, clean up timing, fix stuck/duplicate notes, or generally polish a MIDI clip they recorded or wrote. Examples - "humanize this hat", "voice these chords better", "the timing is too stiff", "fix the

From plugin
ableton-skills
4512 skills4 commands

Claude Code

$ npx -y skills add glincker/ableton-skills --skill midi-cleanup --agent claude-code

SKILL.md

midi-cleanup.SKILL.md
name: midi-cleanup
description: Use when the user asks to humanize a MIDI part, fix voice leading, quantize notes, clean up timing, fix stuck/duplicate notes, or generally polish a MIDI clip they recorded or wrote. Examples - "humanize this hat", "voice these chords better", "the timing is too stiff", "fix the voice leading on the strings".

MIDI Cleanup

You are polishing a MIDI clip the user wrote or recorded. Your job: make it feel human, voice-led, and rhythmically appropriate without rewriting their musical intent.

Workflow

1. Identify the target clip

User must specify which clip. If ambiguous, ask: > *"Which clip — the lead on track 3 or the chords on track 5?"*

Then read the clip with `get_notes_from_clip` (or equivalent). Note the note count, range, and rhythmic density.

2. Identify the cleanup type

Match the user's request to one of these operations:

A. Humanize velocity

For drums, hats, percussion, or any rhythmic part that feels stiff.

  • Default range: ±10-15 velocity for hats/percussion, ±8-12 for drums
  • Preserve accents: notes already at velocity >100 stay loud; notes <40 stay quiet
  • Add micro-timing offsets: ±5-15 ticks (5-15 ms at 120 BPM) with a slight forward bias on off-beats for groove
  • For shuffled feels: add 2-5% swing on 16th notes

B. Humanize timing

For piano, guitar, or string parts that sound MIDI-stiff.

  • ±8-20 ms timing variance, slightly more on off-beats
  • Chord notes: stagger attack 5-15 ms (top note slightly later) for "rolled" feel — only if the user wants that
  • Don't humanize the downbeat of bar 1 — it's the anchor

C. Voice leading fix

For chord progressions where each chord is in root position closed voicing (the "MIDI chord" sound).

Rules:

  • Keep the bass note in the bass voice
  • Move upper voices by smallest interval to the next chord — usually a step or stay-still
  • Maintain a max interval of an octave between adjacent voices (except bass-tenor which can be wider)
  • For string ensembles: respect ranges (Vln1: G3-G6, Vln2: G3-D6, Vla: C3-A5, Cello: C2-C5, Bass: E1-A3)
  • Avoid parallel fifths and octaves between outer voices (counterpoint baseline)

Apply by reading the current chord notes, computing the optimal voicing for each chord, and rewriting.

D. Quantize (intelligent)

Don't auto-quantize 100% — that destroys feel.

  • Default strength: 75% to 16th-note grid
  • For shuffled genres (hip-hop, lo-fi): 60-70% to a swing grid
  • For tight EDM/house: 90-100% on percussion only, looser on lead/chords
  • Preserve grace notes and intentional pickups (notes within 30 ms of another note ahead of grid)

E. Stuck/duplicate note fix

  • Find notes with duration < 5 ms → delete
  • Find overlapping notes with same pitch → merge or trim to non-overlap
  • Find sustained notes longer than 2 bars in fast parts → suspect, ask user

3. Preview the changes

Before writing, summarize:

> *"I'll humanize velocity ±12 on the 32 hat notes (preserving the 4 accent hits at velocity 110), and add ±8 ms timing variance with a slight late-bias on the off-beats. Apply?"*

4. Apply

Use batch operations if the MCP server supports them (`set_clip_notes` with the full new note array is preferred over per-note edits — atomic, undoable in one Ctrl+Z).

5. Confirm result

  • State what changed
  • Suggest the user listen and tell you if they want more/less of the effect
  • Offer to revert with one command if it doesn't feel right

Don'ts

  • **Don't change pitches** unless doing voice leading — and even then, never the melody/lead voice.
  • **Don't humanize beyond ±25 velocity or ±25 ms** — that becomes noticeable as "bad timing" rather than "human."
  • **Don't quantize at 100%** unless explicitly requested. Loss of feel is the #1 complaint about MIDI.
  • **Don't apply voice leading to a melody.** Voice leading is for chords/pads/inner voices, not the lead line.
  • **Don't touch the velocity 127 hits** — those are intentional accents.
  • **Don't merge a clip you just modified.** Always leave undo on the table.

Example

> User: "The hi-hat sounds too robotic, humanize it"

Steps: 1. Read the hat clip — 32 16th notes, all velocity 100, perfectly on grid. 2. Plan: ±12 velocity (preserve any accents), ±8 ms timing with off-beat late-bias of +3 ms, slight 4% swing. 3. Preview: "32 notes, no existing accents detected. I'll spread velocity 88-112, add 8 ms timing variance, 4% swing on off-beats. Apply?" 4. On confirm, rewrite the clip atomically. 5. Report: "Done. Listen — if it's still too tight, say 'more humanize' and I'll go to ±18 velocity."

Read more
@glincker
Ships withableton-skills

Claude Skills for Ableton Live producers. Workflows for Claude Code, Cursor, Codex, and Gemini CLI. Pairs with any Ableton MCP server. MIT.

Stars on GitHub

Momentum

stars in total
45
Star history of glincker/ableton-skills on GitHub, a chart by star-history.com

Other skills on ableton-skills.

chord-pro

chord-pro

Use when the user wants to generate, voice, or modify chord progressions. Examples - "give me a sad chord progression in C…

groove-builder

groove-builder

Use when the user wants drum patterns by genre - kick, snare, hi-hat, percussion. Examples - "give me a trap beat", "house drum…

mastering-prep

mastering-prep

Use when the user is finishing a track and wants to check it's ready to send to a mastering engineer or for self-mastering.…

mixer-doctor

mixer-doctor

Use when the user describes a mix problem ("muddy", "harsh", "no headroom", "vocals get lost", "kick and bass fighting") or asks…

producer-mode

producer-mode

Use when the user asks to set up tracks, pick instruments, scaffold an arrangement, build a project template, or describe a track…

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n10d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

browser-usetoday120k
@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about midi-cleanup.

Which coding agents can use midi-cleanup?
midi-cleanup installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.