Midi agent skill
Generate MIDI files with GM instruments and music theory. Use when creating music, composing melodies, or generating MIDI files.From its SKILL.md
npx -y skills add tubone24/midi-agent-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.7 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
MIDI Generation Skill
Generate MIDI files with proper music theory. Use the provided Python scripts in skills/. Do NOT write custom code.
Important Rules
- Use provided scripts in
skills/directory (Python) - Never write custom Python/JS for MIDI generation
- Install dependencies first:
pip install midiutil - Consult music theory resources when needed (see below)
Quick Dissonance Rules
Always follow these to avoid harsh sounds:
- Never play notes 1 semitone apart (C+C#, E+F, B+C)
- Bass plays root or fifth of the chord
- Spread voices across octaves (don't cluster)
- Each track uses different MIDI channel (automatic)
Music Theory Resources (Read When Needed)
Only read the resource that matches your current task:
| When you need... | Read this file |
|---|---|
| Scales, chords, intervals, cadences | resources/music-theory.md |
| Chord progressions by genre | resources/chord-progressions.md |
| Avoiding dissonance, voice spacing | resources/voice-leading.md |
| Classical/Baroque counterpoint | resources/counterpoint.md |
| Modes (Dorian, Phrygian, etc.) | resources/modes-scales.md |
| Rhythm, time signatures, syncopation | resources/rhythm-patterns.md |
| Instrument ranges, combinations | resources/orchestration.md |
When to Read Each Resource
- Pop/Rock song → chord-progressions.md + voice-leading.md
- Classical piece → counterpoint.md + orchestration.md
- Jazz composition → modes-scales.md + chord-progressions.md
- Film score → orchestration.md + modes-scales.md
- Any composition → Always check voice-leading.md for dissonance
Workflow
- Install dependencies:
pip install midiutil - Identify genre/style → Select appropriate resources
- Read relevant theory → Only the files you need
- Choose instruments → See midi_types/gm_instruments.py
- Create composition JSON
- Use scripts to generate MIDI
Python Scripts
| Script | Purpose |
|---|---|
skills/generate_midi.py | Generate MIDI (auto-assigns channels per track) |
skills/normalize_composition.py | Validate and normalize input |
skills/refine_composition.py | Adjust length, extend tracks |
skills/convert_to_wav.py | MIDI → WAV (requires FluidSynth) |
Usage Example
import sys
sys.path.insert(0, '/path/to/midi-skill')
from skills.generate_midi import generate_midi_from_dict
composition = {
"title": "My Song",
"bpm": 120,
"tracks": [
{
"instrument": "acoustic-grand-piano",
"notes": [
{"pitch": "C4", "duration": "4"},
{"pitch": "E4", "duration": "4"},
{"pitch": "G4", "duration": "4"},
{"pitch": "C5", "duration": "2"}
]
},
{
"instrument": "acoustic-bass",
"notes": [
{"pitch": "C2", "duration": "2"},
{"pitch": "G2", "duration": "2"}
]
}
]
}
midi_path = generate_midi_from_dict(composition)
print(f"Generated: {midi_path}")
Composition Format
{
"title": "My Song",
"bpm": 120,
"tracks": [
{
"instrument": "acoustic-grand-piano",
"notes": [
{ "pitch": "C4", "duration": "4" },
{ "pitch": "E4", "duration": "4" }
]
},
{
"instrument": "acoustic-bass",
"notes": [
{ "pitch": "C2", "duration": "2" }
]
}
]
}
Duration Notation
| Value | Note |
|---|---|
1 | Whole note (4 beats) |
2 | Half note (2 beats) |
d2 | Dotted half (3 beats) |
4 | Quarter note (1 beat) |
d4 | Dotted quarter (1.5 beats) |
8 | Eighth note (0.5 beats) |
16 | Sixteenth note (0.25 beats) |
Instrument Aliases
| Alias | GM Instrument |
|---|---|
piano | acoustic-grand-piano |
guitar | acoustic-guitar-nylon |
bass | acoustic-bass |
strings | string-ensemble-1 |
brass | brass-section |
sax | alto-sax |
Full list: midi_types/gm_instruments.py
Notes
- Max 15 melodic tracks (MIDI channels 0-8, 10-15; ch.9 = drums)
- Output:
output/directory - WAV requires: FluidSynth + A320U.sf2 in
soundfonts/
What ships with it: 21 files
69.2 KB alongside SKILL.md, 8 of them executable
midi_types/
- gm_instruments.pyruns6.4 KB
- __init__.pyruns436 B
- music.pyruns1.5 KB
output/
- .gitkeep0 B
resources/
- chord-progressions.md3.1 KB
- counterpoint.md5.0 KB
- modes-scales.md4.5 KB
- music-theory.md3.4 KB
- orchestration.md5.8 KB
- rhythm-patterns.md4.9 KB
- voice-leading.md4.0 KB
skills/
- convert_to_wav.pyruns5.0 KB
- generate_midi.pyruns6.4 KB
- __init__.pyruns624 B
- normalize_composition.pyruns3.3 KB
- refine_composition.pyruns3.9 KB
soundfonts/
- .gitkeep0 B
- .gitignore2.0 KB
- LICENSE.txt2.5 KB
- README.md6.4 KB
- requirements.txt178 B