← Discover MCPs and Agents
s
MCPDeveloper toolsGitHub

sample-chopper

Chops a recording the way it would be done by hand in Ableton, driven by measured numbers rather than guesses.

Links

README

From the repo.

sample-chopper

Chops a recording the same way it would be done by hand in Ableton, and accumulates the results into a Live project. Cut points come from the numbers sample-reader measured; when a number is missing it skips the technique rather than guessing.

Install

No extra packages. numpy, soundfile, librosa and scipy are already on the machine. sample-reader is imported from the sibling directory, not installed separately.

Usage

cd 01_AI_Tools/sample-chopper
python3 -m samplechopper chop "/path/to/recordings"

Default project: 07_Projects/ChopLab Project. Use --project for another.

# only certain techniques, at most 4 chops per source
python3 -m samplechopper chop recordings --techniques micro_chop reverse_chop --per-technique 4

# chop only what matches a sample-reader profile (the real use)
python3 -m samplereader profile "/my/own/music" --label mine --out mine.json
python3 -m samplechopper chop "/downloaded/records" --match mine.json --top 20

# watch a folder and chop new material automatically
python3 -m samplechopper watch "/path/to/recordings" --every 300

python3 -m samplechopper status       # what is in the project, what was skipped
python3 -m samplechopper techniques   # list the techniques

chop is safe to re-run. A source already in the ledger is not chopped twice, and a file is recognised by its content hash even if it has been renamed.

Ten techniques

Same ids as Sensei's sample_chop_techniques.json taxonomy:

idwhat it doesneeds tempo
micro_chop1/16 slicesyes
phrase_chop2-bar phrasesyes
stutter_chop1/8 → 1/16 → 1/32 rollyes
filter_sweep_chopresonant LP sweep over 1 bar (up and down)yes
reverse_choptransient slice, reversedno
one_shot_hitsingle hit, cut at the measured decayno
granular_spray4-second bed built from 40–90 ms grainsno
texture_bedharmonic section, 4 kHz LP, held lowno
time_stretch_padharmonic layer stretched 4×no
vocal_chopslices from a separated vocal stemno

What it will not do

  • No grid cuts without a tempo. On a recording where the pulse cannot be measured, grid techniques are skipped and the reason is written to the ledger. A wrong grid is worse than no grid.
  • It does not extract a vocal chop from a mix. Without a real vocals stem beside it (demucs layout) it says no_vocal_stem and moves on.
  • No texture bed from a drum break. If the measured harmonic ratio is below the threshold, it skips.
  • It does not write .als. Chops land as files; placing them on a Live timeline is separate work and needs separate evidence.

The cut itself

Every cut point is pulled to the nearest zero crossing (±5 ms) and a 3 ms fade is placed at both ends of each slice. Those two things are the only difference between a chop and a click. Files are written at the source's own sample rate and bit depth; a lossy source (mp3) drops to 24-bit.

Tests

python3 -m pytest tests -q

23 tests. They run without opening Live: each reads the written file back, confirms a reversed chop really is reversed by correlation, checks which way the sweep moved the spectrum by FFT, and verifies there is no click at the boundaries from the first and last samples. What they do not prove: that the folder behaves like a project inside Live, and that the resulting sounds are any good.

Collected info

  • ★ 0 stars
  • Language: Python
  • Source updated: 9/18/2026

Config for your environment

Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.

Tool

OS

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "mcp-server": {
      "url": "{MCP_ENDPOINT_URL}"
    }
  }
}

Paste into mcpServers in the config file. Restart Cursor after saving.

If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.