Install
$ agentstack add skill-korben00-ableton-producer-skills-ableton-humanize ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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 No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
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 →About
Ableton Humanize
Make stiff, grid-locked MIDI feel played-by-a-human by reading an existing clip and rewriting its notes with micro-timing offsets, swing, and velocity dynamics. The "lazy" lofi feel and a tight funk pocket are both just controlled deviations from the grid.
When to use
Triggers: "humanize", "add swing/groove", "less robotic", "shape velocities". To generate new parts use the composition/groove skills; this one transforms an existing clip.
Process
- Use
ableton-live-runnerfor build/run/kill + scaffold. - Read the target clip's notes (
clip.notes). Operate in place (rewrite the same clip) or write
a humanized copy — confirm which with the user.
- Apply transformations (let the user pick intensity; keep it subtle by default):
- Timing jitter — nudge each note
startTimeby a small random offset (±0.005–0.02 beats). - Swing — push notes on off-beat subdivisions later (8th swing: +0.04–0.08; 16th swing
smaller). Decide the subdivision from the note grid.
- Feel offset — a constant lean: drag the whole part slightly late (laid-back) or early (on
top). Drums often want snare-late, kick-on.
- Velocity dynamics — accent strong beats, soften off-beats/ghosts; add ±gentle variation;
optionally a slow swell across a phrase.
- Duration variation — vary note lengths slightly (legato vs staccato) for realism.
- Clamp — keep
startTime >= 0, velocities in 1–127, and don't let jitter create flams unless
wanted. Write the array back with clip.notes = newNotes.
Code pattern
const rand = (a) => (Math.random() * 2 - 1) * a;
function humanize(notes, { jitter = 0.012, swing = 0.06, velVar = 6, drag = 0 } = {}) {
return notes.map(n => {
const isOff = Math.round((n.startTime % 1) * 2) % 2 === 1; // on an 8th off-beat?
return {
...n,
startTime: Math.max(0, n.startTime + rand(jitter) + drag + (isOff ? swing : 0)),
velocity: Math.max(1, Math.min(127, Math.round((n.velocity ?? 90) + rand(velVar)))),
};
});
}
Limits
- This shifts note events, not Ableton's Groove Pool (no groove-template API). For consistent swing
across many clips, consider baking the same offsets.
- Over-humanizing muddies tight genres — default to subtle, increase on request.
See ableton-drum-groove, ableton-topline.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Korben00
- Source: Korben00/ableton-producer-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.