Drummable Machine
Drummable Course Authoring Tool
A browser-based editor for creating practice courses for Drummable — the app for beginner electronic drum kit players.
What it does:
Build drum machine patterns, arrange them into lessons, and export a ready-to-load Drummable course package. The export includes .dbl drum notation files, a click track .mp3, and a course.json — everything Drummable needs to display scrolling drum notes synced to audio.
Features:
- Step sequencer with up to 10 drum pads and configurable BPM, note resolution, and step count
- Arrange patterns into sequences and sequences into lessons
- Export the full course as a zip file, ready to drop into Drummable
How to use:
- Build patterns on the drum grid
- Organise them into lessons in the Lessons tab
- Fill in course details in the Course tab
- Click Export to Drummable — download the zip and load it in the Drummable app
No install, no account. Runs entirely in your browser. All data stays in your browser's local storage.
ChatGPT + YouTube = Drummable Course
Use this prompt to generate a course from the transcript of any YouTube drum lesson:
# ChatGPT Prompt: YouTube Transcript → Course JSON
Copy everything below the line and paste it into ChatGPT, then paste the transcript at the end.
---
You are a drum notation expert. I will give you a YouTube transcript about drum lessons. Your job is to read it and output a valid course JSON that I can import into my drum machine app.
## Output format
Output a single valid JSON object. Do not wrap it in markdown code fences. Here is the schema:
```
{
"name": "string — course name, taken from the video topic",
"lessonIds": ["string — IDs of lessons in order"],
"patterns": [ ...pattern objects... ],
"sequences": [ ...sequence objects... ],
"lessons": [ ...lesson objects... ]
}
```
### Pattern object
```
{
"id": "p0",
"name": "Precount",
"bpm": 80,
"stepCount": 16,
"resolution": "16n",
"grid": {
"kick": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"snare": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"closedHihat": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"openHihat": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"hihatPedal": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"crash": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"ride": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"highTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"midTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"lowTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
}
}
```
All 10 tracks must always be present. Unused tracks are all false.
### Sequence object
```
{
"id": "s1",
"name": "Step 1: Kick and Hi-Hat — Practice",
"items": [
{ "type": "pattern", "patternId": "p0" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" }
]
}
```
The sequence always starts with the precount pattern (p0) followed by the actual pattern repeated exactly 8 times.
### Lesson object
```
{
"id": "l1",
"name": "Step 1: Kick and Hi-Hat",
"bpm": 80,
"beatsPerBar": 4,
"items": [
{ "type": "sequence", "sequenceId": "s1" }
]
}
```
Each lesson contains exactly one sequence.
## How the grid works
The grid has 16 steps. They represent one bar of 4/4 time in 16th notes.
The standard drum counting "1 e and a 2 e and a 3 e and a 4 e and a" maps to indexes 0–15:
| Count | Index | Description |
|-------|-------|----------------------|
| 1 | 0 | Beat 1 (quarter note)|
| e | 1 | 16th after beat 1 |
| and | 2 | 8th note after beat 1|
| a | 3 | 16th before beat 2 |
| 2 | 4 | Beat 2 |
| e | 5 | |
| and | 6 | 8th note after beat 2|
| a | 7 | |
| 3 | 8 | Beat 3 |
| e | 9 | |
| and | 10 | 8th note after beat 3|
| a | 11 | |
| 4 | 12 | Beat 4 |
| e | 13 | |
| and | 14 | 8th note after beat 4|
| a | 15 | |
Common grid patterns for reference:
- **Hi-hat on every 8th note**: true at indexes 0, 2, 4, 6, 8, 10, 12, 14
- **Hi-hat on every 16th note**: true at all 16 indexes
- **Snare on beats 2 and 4**: true at indexes 4, 12
- **Kick on beats 1 and 3**: true at indexes 0, 8
- **Crash on beat 1 only**: true at index 0
## Rules
1. **Always create one precount pattern with id "p0".** It is a completely empty bar (all false on every track). It is always the first item in every sequence. Its name is "Precount". Use the same BPM as the other patterns.
2. **One pattern per step or beat described.** If the video teaches a beat in 5 steps (step 1: add kick, step 2: add snare, etc.) create 5 patterns (p1–p5), each building on the previous one. IDs start at p1 — p0 is reserved for precount.
3. **For every pattern, create one sequence.** The sequence is: precount (p0) once, then the pattern repeated 8 times. Name the sequence after the pattern, adding "— Practice" at the end.
4. **For every sequence, create one lesson.** The lesson contains exactly one item: that sequence. Name the lesson the same as the pattern (without "— Practice").
5. **`lessonIds`** lists all lesson IDs in the order the steps appear in the video.
6. **Best-effort accuracy.** Infer the grid from verbal descriptions. If the description is ambiguous, make a reasonable guess based on standard drum conventions.
7. **Triplets and 32nd notes** cannot be represented in the grid. Approximate them as 16th notes (place the notes at the closest 16th note position). Add "(approximated)" to the pattern name if you do this.
8. **Default BPM is 80** unless the transcript says a specific number. Beginner/slow = 70–80, medium = 90–100, fast/workout = 100–120.
9. **IDs** use simple sequential strings: `p0` for precount, `p1`, `p2`, `p3` for patterns, `s1`, `s2` for sequences, `l1`, `l2` for lessons.
10. **All IDs must be unique and consistent.** Every ID referenced in a sequence or lesson must exist as a real object in the JSON.
## Example output
For a video that teaches a basic rock beat in 2 steps:
```json
{
"name": "Basic Rock Beat",
"lessonIds": ["l1", "l2"],
"patterns": [
{
"id": "p0",
"name": "Precount",
"bpm": 80,
"stepCount": 16,
"resolution": "16n",
"grid": {
"kick": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"snare": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"closedHihat": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"openHihat": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"hihatPedal": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"crash": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"ride": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"highTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"midTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"lowTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
}
},
{
"id": "p1",
"name": "Step 1: Kick and Hi-Hat Together",
"bpm": 80,
"stepCount": 16,
"resolution": "16n",
"grid": {
"kick": [true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false],
"snare": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"closedHihat": [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false],
"openHihat": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"hihatPedal": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"crash": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"ride": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"highTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"midTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"lowTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
}
},
{
"id": "p2",
"name": "Step 2: Add Snare on Beats 2 and 4",
"bpm": 80,
"stepCount": 16,
"resolution": "16n",
"grid": {
"kick": [true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false],
"snare": [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false],
"closedHihat": [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false],
"openHihat": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"hihatPedal": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"crash": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"ride": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"highTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"midTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
"lowTom": [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
}
}
],
"sequences": [
{
"id": "s1",
"name": "Step 1: Kick and Hi-Hat Together — Practice",
"items": [
{ "type": "pattern", "patternId": "p0" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" },
{ "type": "pattern", "patternId": "p1" }
]
},
{
"id": "s2",
"name": "Step 2: Add Snare on Beats 2 and 4 — Practice",
"items": [
{ "type": "pattern", "patternId": "p0" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" },
{ "type": "pattern", "patternId": "p2" }
]
}
],
"lessons": [
{
"id": "l1",
"name": "Step 1: Kick and Hi-Hat Together",
"bpm": 80,
"beatsPerBar": 4,
"items": [
{ "type": "sequence", "sequenceId": "s1" }
]
},
{
"id": "l2",
"name": "Step 2: Add Snare on Beats 2 and 4",
"bpm": 80,
"beatsPerBar": 4,
"items": [
{ "type": "sequence", "sequenceId": "s2" }
]
}
]
}
```
## Now process this transcript
[PASTE THE YOUTUBE TRANSCRIPT BELOW THIS LINE]
| Published | 12 days ago |
| Status | Released |
| Platforms | HTML5 |
| Author | Arnold Farkas |
| Genre | Rhythm |
| AI Disclosure | AI Assisted, Code |
Download
Download NowName your own price
Click download now to get access to the following files:
chatgpt-transcript-to-course-json.md 12 kB
Leave a comment
Log in with itch.io to leave a comment.