Convert EZkeys TTFS (MIDI) packs to files (in browser)

This page operates entirely in the browser. No data is uploaded to the network from your computer. You can drag and drop files on this page. If you drop a directory, all files in the directory will be processed (non-recursively).

Beyond flexible renaming this tool does not have the bugs in the alternative kabaragoya. Also, there is no practical limit on the size of the packs you can process. The kabaragoya site has a 10MB limit so it will reject 000600@EZKEYS_2. The extraction is also fragile and it loses the first file in many packs. For example 000830@BALLADS_2 should have 212 files. The other tool is missing the first packed file (60BPM 4/4 Cmaj Intro 01).

On a relatively modern computer, this will repack the entire EZKeys library (over 20000 unique MIDI files) in a few seconds.

No output selected

Basic Use

EZKeys VST stores resources and MIDI packs in a simple proprietary format called TTFS (Toontrack File System). TTFS is like a zip file with no compression.

You can locate the EZKeys MIDI pack content that you've purchased in the following locations:

Windows: C:\Program Files (x86)\Common Files\Toontrack\EZkeys\MIDI

Mac: /Library/Application Support/Toontrack/EZKeys/MIDI
or possibly /Users/{username}/Library/Application Support/Toontrack/EZKeys/MIDI

Choose a file (or directory by checking "Allow directory selection"). Files or directories can also be dragged and dropped to the page. Clicking process will cause a ZIP file to be generated and saved as a download. This file is generated entirely within the browser.

Choose a file (or directory by checking "Allow directory selection"). Files or directories can also be dragged and dropped to the page. Since you are using a supported browser you can have the output directly as files written to a directory. This may require enabling write permissions. If you prefer, you can select "Save as ZIP Archive" and the output will be produced as a single ZIP file. If you are converting many files, creating a ZIP may be faster due to the poor performance of the browser filesystem API.

Advanced Features

The MIDI files in these packs are internally organized in a hierarchy like: ###@{Rhythm}_{TimeSignature}/{Tempo}-S###@{PartName}/Variation_##.mid

where {Rhythm} is "Swing" or "Straight" and {TimeSignature} is the Time Signature. The ### are numerical codes that are used by EZKeys to lookup in its database. {PartName} are names like "Intro", "Verse", "Bridge", etc.

The tool supports a flexible file renaming system based on a configurable template. There are a few predefined templates to choose from and use as examples. The basic syntax is that variables are enclosed within braces {}. There are a few simple modifiers for each variable. The name inside the braces can be prefixed and/or suffixed with a valid delimiter character (_, -, +, /, @, SPACE). For example {_part} will output an underscore before the part name, and {part } will output a SPACE after the part name. This feature prevents extraneous delimiters from appearing if the field value is missing for a particular file. The other modifier is #, which can be followed a number (by default it is 2). This causes the value to be zero padded. This is helpful with the index/counter variable to aid in sorting the files on the filesystem. For example {i#} will cause the counter numbers to be 01, 02, 03.

Template Variables

The following descriptions will refer to an example of a source archive file with a name of: 206@Swing_4#4/065-S021@Intro/Variation_02.mid

bpm
The tempo in BPM as extracted from the MIDI file. In the example it would be 65. If it can't be detected, it will be 0.
filename
The name of the uploaded file with any extension removed (the original files do not have an extension). A real example is 000851@SYNTH_POP.
fullpath
The original name unaltered. Useful to keep structure but in a subdirectory.
i
This implements an incrementing counter starting at 1. With the behavior that it is local to the destination directory of the file.
key
The key signature of the MIDI file. This is extracted from a meta event in the MIDI file. If it cannot be detected, defaults to C. This is because there are some files that are missing this event and they all seem to be in C major.
pack
Lowercased part of the uploaded file name after the @. For example for 000851@SYNTH_POP it is synth_pop.
part
The name after the @ of the parent directory containing the file. In the example it would Intro.
path
The original path components (directory). In the example it would be 206@Swing_4#4/065-S021@Intro
rhythm
Exactly like timesig, but an "s" is appended if the Swing rhythm is found in the path name. In the example it would be 4#4s.
timesig
The time signature encoded as N#D, extracted from the MIDI file (not from the path name). If the time signature is not detected it is X#X.
var
If the MIDI file name end with a number, as most are, this will be the number. For example it is the number 2 for Variation_02.mid.

The directory and file naming is peculiar to EZKeys. The VST contains a library of midiDB files that are sqlite3 files that contain numerous amounts of metadata including Tap2Find information and all of the display names and their mapping to the MIDI pack file names. It appears the MIDI expansion packs themselves do not usually ship with this metadata database, they come with the VST.

Note also that the 000851@SYNTH_POP MIDI pack appears to contain a copy of itself packed as a file in the archive.

💩 failed

Sorry, there was some kind of error. Here is all I know: