The UMP Manual
12th edition for 1.6
2021 Mar 22
Basics, tips, and answers for recently asked questions. You can now find right section by purpose. Suggestions will be appreciated at UMP Discord server! My English sucks. Really. Please correct.
What is UMP?
UMP (Ultralight MIDIPlayer, 超軽量MIDIプレイヤー, [tʃoːkeirjoː.midi.pureijaː]*1) is literally ultra lightweight (or is it?) and versatile MIDI player to help making MIDI videos, featuring no-lag video rendering, note counter, clean GUI and more.
Quick Start
1. Get a Decent PC
UMP should run smoothly on a PC with:
- Multi-core, 2GHz or faster CPU
- A graphics card
- 1GB or more free memory
- Windows 7, 8, 10, OSX or Ubuntu 16+ (Not tested on Sierra and Mojave)
2. Install Java
Download installer from Java download page and run it.
3. Get MIDI Synth Working
If you haven't installed virtual MIDI synth, this is good time to install one. Famous ones are CoolSoft VirtualMIDISynth (easy to use) and OmniMIDI (hard).
Many virtual synths requires a soundfont. Grab few and configure your synth.
4. Start UMP!
Download UMP from the main page and unzip it to empty folder.

config.yml
will be automatically created when starting UMP.On Windows, open MIDIPlayer.bat
and enjoy.
On other OSes, run:
$ java [JVM arguments...] -jar MIDIPlayer.jar [MIDI file path]
5. Play a MIDI
Use [File] menu or drop a .mid
file.
You can also drop a .zip
archive or a folder. In that case, UMP will load the first .mid
file in it.
6. Next Steps
- On Windows 10, don't forget to patch Java. It may improve Black MIDI performance.
- Remember how to change how much memory UMP can use, so you can load larger MIDIs.
- Explore the menu bar and play around with options.
- Have a look at Config and how to write it.
- By the way we also have few Tutorials.
9. Uninstal
Delete UMP folder. Easy!
The UMP Launcher
The UMP Launcher is a simple batch file (MIDIPlayer.bat
) to start UMP on Windows. The UMP Launcher can be edited in text editor for customization.
Options
Options starts at line 5. Option name and value is separated by =
with no spaces around.
set INITIAL_MEMORY=3G
set MAX_MEMORY=3G
set JVM_ARGS=-XX:+UseG1GC
set PAUSE_AFTER_EXIT=false
set CRASH_ON_OUT_OF_MEMORY=true
INITIAL_MEMORY
- Default:
3G
Initial amount of memory UMP can use. This value is used for JVM argument
-Xms
.
MAX_MEMORY
- Default:
3G
Maximum amount of memory UMP can use. This value is used for JVM argument
-Xmx
.
JVM_ARGS
- Default:
-XX:+UseG1GC
- Additional JVM arguments, separated by space.
PAUSE_AFTER_EXIT
- Default:
false
- If set to
true
, the Launcher window will stay open until any key is pressed. When UMP is closed abnormally, window stays open regardless of this option.
CRASH_ON_OUT_OF_MEMORY
- Default:
true
When set to
true
, a JVM argument-XX:+ExitOnOutOfMemoryError
will be added, which makes UMP crash immediately when running out of memory. When set to other value, you might be able to save config and gracefully exit as UMP stays open.
JVM Options
Frequently Used Options
-Xms<size>, -Xmx<size>
Example (1.5GB initial, 8GB max): -Xms1560M -Xmx8G
Initial and maximum amount of memory that program(UMP) can use. Size can have letter M or G at the end for megabytes or gigabytes. Increase this to load larger MIDIs.
By using MIDI diagnosis, you can estimate how much memory will be needed to load specific MIDI. Remember to allocate a bit more memory for UMP itself.
-XX:+UseG1GC
Example: -XX:+UseG1GC
Use Garbage first garbage collector (G1GC), which is probably the fastest. For more info about GC, ask Wikipedia Senpai.
Start UMP with Options
Add options before the -jar
argument:
$ java -Xms8G -Xmx8G -Xmn6G -XX:+UseG1GC -jar MIDIPlayer.jar
Renderers
DefaultMIDIRenderer
It's default...
TickBasedDefaultMIDIRenderer
It's default... but render interval changes according to tempo. 120 BPM makes 1x note speed.
KeyMIDIRenderer
Only displays keys pressed for each MIDI channel in single color. It doesn't use textures but color information from resource pack.
HorizontalMIDIRenderer
Displays notes in single color and moves from right to left. Pressed notes glows. It doesn't use textures but color information from resource pack.
HexMIDIRenderer
Simulates and displays the MIDI file content with all notes and tempo events in original MIDI merged into one track. Text color is automatically set to white in video render or if background is dark. It doesn't use resource packs at all. Monospace font required.
Render to Video

FFmpeg
You need FFmpeg executable to create a video. Go to FFmpeg website and download the executable from get the packages, or build your own.

ffmpeg.exe
in the UMP folder, UMP will automatically selcet it for you.Video Types and Codecs
- AVIUtl requires third-party input plugin.
- QuickTime Player automatically converts most types. Only converted version can be previewed in Quick Look.
- After Effects CC may automatically install codecs required to open some types.
Video | Programs | ||||||
---|---|---|---|---|---|---|---|
Type | Codec | Transparency | Windows | OSX | After Effects CC | ||
Movie & TV | Media Player | AVIUtl | QuickTime Player | ||||
mp4 | x264 | ✔ | ✔ | ✔ | ✔ | ✔ | |
x265 | ✔ | ✔ | ✔ | ✔ | |||
mov | png | ✔ | ✔ | ✔ | ✔ | ||
qtrle | ✔ | ✔ | ✔ | ||||
avi | png | ✔ | ✔ |
Presets
ultrafast
superfast
veryfast
faster
fast
medium
slow
slower
veryslow
placebo
The upper in the list, the faster the encoding and the larger the video file. placebo
seems to be not so much effective.
Increase mp4 Quality
Without changing any options, bitrate of the video is set automatically (200kbps?). If the video looks strange, try setting bitrate in advanced options. My recommendation is VBR with CRF of 20 or smaller.

Diagnose MIDI

"Count notes & MIDI diagnosis" allows you to count notes and find problems of MIDI files in less memory. If UMP can't play some MIDIs, use this to diagnose the file before contacting, as 99% is problem in file, not UMP.
Name | Notes |
---|---|
File Size | Binary prefix (1KiB is 1024B not 1000B, 1MiB is 1024KiB) |
Resolution | PPQN |
Tracks | |
Notes | |
Memory to Open | Value will change even on same MIDI depending on config midi.loaderThreads |
Length | |
Tempo | Can show range ("minimum tempo~maximum tempo") |
Moment Max NPS | May not be correct :( |
Overlapped Notes |
YAML Data Types
UMP uses YAML 1.1 for storing data. YAML is basically a collection of colon-separated key-value sets.
yml
file for the first time.String
Example: "Hello, World!"
A text. Recommended to surround with "
or '
, but not always necessary.
Integer
Example: 77
, 0x4d
A number. Decimals can't be used. Hex can be used.
Float
A number. Decimals can be used.
Color
Example: 0xffb900
(yellow), 0xffffff
(white)
RGB Color. String or Integer in 0xRRGGBB
form.
Boolean
Only true
(Yes) or false
(No).
Config
Some UMP settings can be changed by editing config.yml
in UMP folder.
Sample
version: 2
language: ja
midi:
loaderThreads: 0
usePlayThread: true
render:
width: 1280
height: 720
fpsLimit: 120
renderInterval: 5.0
background: 0xc0c0c0
usePFAColors: false
resourcePack: null
font: Monospaced
overlay:
opaque: false
info:
scale: 1.0
type: DEFAULT
position: TOP_RIGHT
showDuration: false
fps:
type: SHOW_ALL
desync:
type: SHOW_NUMBERS
loading:
showMemoryUsage: false
ui:
font: Yu Gothic UI
files:
midi: null
ffmpeg: null
resourcePacks: null
updateChecker:
checkOnStartup: true
branch: development
version
- Type: Integer
- Default:
2
-
Config version. Do not change!
language
- Type: String
- Default:
"ja"
-
UI language. Can be Japanese(
ja
), English(en
), or name of language files in the UMP folder. - See also: Translation
midi.loaderThreads
- Type: Integer
- Default:
0
-
Number of threads to use for loading MIDI.
0 or less: Use as many threads as possible.
midi.usePlayThread
- Type: Boolean
- Default:
true
-
Whether to play MIDI in separate thread.
true
: Play MIDI in separate thread. Render thread won't wait for MIDI thread, resulting high framerate with off-sync audio.false
: Render screen and play MIDI alternately in same thread, resulting better audio sync and lower framerate.
render.width
- Type: Integer
- Default:
1280
- Restriction:
128
min,4096
max Screen width.
render.height
- Type: Integer
- Default:
720
- Restriction:
100
min,2160
max Screen height.
render.fpsLimit
- Type: Integer
- Default:
100
-
Framerate limit for rendering.
0 or less: unlimited FPS.
render.renderInterval
- Type: Float
- Default:
5.0
- Restriction:
0.01
min,20.0
max -
Value for in-app option [Options] -> [Render Interval (Note Speed)].
render.background
- Type: Color
- Default:
0xaaaaaa
-
Background color.
render.usePFAColors
- Type: Boolean
- Default:
false
-
Whether to load and use PFA colors.
true
: Load~/AppData/Roaming/Piano From Above/config.xml
, get all<Color>
elements and change note colors by using attributesR
,G
andB
. If fails, all colors will be random.
render.resourcePack
- Type: String
- Default:
null
-
Name of resourcepack's file or folder to automatically load on startup.
null
or any non-existing file name: Don't load pack and use default. - Also see: Resourcepacks
render.font
- Type: String
- Default:
"Monospaced"
-
Name of font to use in overlays(not UI). Since Java is not that good on loading fonts, some might not work.
Apparently some Java 8 environments can't properly display Noto CJK fonts :(
render.overlay.opaque
- Type: Boolean
- Default:
false
-
Value for in-app option [View] -> [Opaque Overlay].
render.overlay.info.type
- Type: String
- Default:
"DEFAULT"
-
Value for in-app option [View] -> [Playback Info].
"HIDE"
: Hide"DEFAULT"
: Default"MIDITRAIL"
: MIDITrail-ish"BASICS"
: Basic Info OnlyAny other: Default
render.overlay.info.position
- Type: String
- Default:
TOP_RIGHT
-
Value for in-app option [View] -> [Playback Info] -> [Position].
"TOP_LEFT"
: Top Left"TOP_RIGHT"
: Top Right"BOTTOM_LEFT"
: Bottom Left"BOTTOM_RIGHT"
: Bottom RightAny other: Top Right
render.overlay.info.scale
- Type: Float
- Default:
1.0
- Restriction:
0.25
min,4.0
max -
Value for in-app option [View] -> [Playback Info] -> [Scale].
render.overlay.info.showDuration
- Type: Boolean
- Default:
false
-
Value for in-app option [View] -> [Playback Info] -> [Show MIDI Duration].
render.overlay.fps.type
- Type: String
- Default:
SHOW_ALL
-
Value for in-app option [View] -> [FPS Counter].
"HIDE"
: Hide"SHOW_NUMBERS"
: Show Numbers"SHOW_ALL"
: Show AllAny other: Hide
render.overlay.desync.type
- Type: String
- Default:
SHOW_NUMBERS
-
Value for in-app option [View] -> [MIDI Thread Desync].
"HIDE"
: Hide"SHOW_NUMBERS"
: Show Numbers"SHOW_ALL"
: Show AllAny other: Hide
ui.font
- Type: String
- Default:
"Yu Gothic UI"
-
Name of font to use in UI(not overlay).
files.midi
- Type: String
- Default:
null
-
Location of last opened MIDI file.
files.ffmpeg
- Type: String
- Default:
null
-
Location of last opened ffmpeg executable.
files.resourcePacks
- Type: String
- Default:
null
-
Resourcepacks folder.
null
:resourcepacks/
inside UMP folder.
updateChecker.checkOnStartup
- Type: Boolean
- Default:
true
-
Whether to check for new version automatically after starting UMP.
updateChecker.branch
- Type: String
- Default:
"stable"
("development"
on development versions) -
Type of version to check for.
"stable"
: Stable version"development"
: Development version
Resourcepack
Resourcepack (or "Pack") is folder or zip file containing following PNG images and pack.yml
file. Some images should be grayscale for better coloring results.


note
and noteEdge
should be 1 pixel high. Others can be any size. Images are resized without anti-aliasing for maximum performance.
pack.yml
Sample
format: 0
name: "Synthesia Note Colors"
version: 1.1.0
author: "PipiraMine"
description: "No random colors."
note:
loopColors: true
colors:
- 0x85f202
- 0x71aceb
- 0xf94b3b
- 0xe18de6
- 0xffec00
- 0xffa300
signature: "44Gq44KT44Go5a2m5qCh44GM5pyd44GuOeaZguOBi+OCieOBquOBruOBoOODvCEK"
format
- Type: Integer
- Default:
0
-
Pack format. Packs with this value not 0 will be displayed as incompatible.
name
- Type: String
- Default:
null
-
Name of the pack to show in pack list.
version
- Type: String
- Default:
null
-
Version of the pack to show in pack list. There's no rules for writing version.
author
- Type: String
- Default:
null
-
Name of author of the pack to show in pack list.
description
- Type: String
- Default:
null
-
Description of the pack to show in pack list.
note.loopColors
- Type: Boolean
- Default:
false
-
Whether note colors should be looped. If
false
, Colors after using all will be random.
true
:

false
:

note.colors
- Type: Color[] or Map<Integer, Color>
Note color for each tracks. Use map to change specific track color(Note that track number starts from 0).

colors:
- 0xff0000
- 0x00ff00
- 0x0000ff
loopColors true
)
colors:
1: 0xffffff
3: 0x000000
loopColors
is true
.signature
- Type: String
- Default:
null
-
Signature to prove the pack is verified. Signature is manually issued by UMP devs.
Translation
UMP supports Japanese, English and Simplified Chinese by default. You can easily add translations by simply placing language files in UMP folder.

_lang=Deutsch
welcome.synth=Wählen Sie einen Synthesizer
welcome.synth.none=(Keinen benutzen)
welcome.next=Weiter
Language Format
# Syntax:
key=value
# Examples:
_lang=English
converter.speedLimit=Slow down render to %s%%
converter.speedLimit.unlimited=No render speed limit
converter.done=Finished rendering to:\n%s
- Key and value is separated by
=
. - Lines starting with
#
are ignored. - Some values can have line breaks by
\n
. %s
in values are replaced with data passed from UMP, and%%
with the literal%
character. You can also use%1$s
or%2$s
instead of%s
, which will be replaced with first data, second data, and so on.- Value for key
_lang
is used as language name. Make sure to set value for this. More info in next section.
Language Metadata
Metadata has key starting with _
to distinguish from UI translations.
_lang
Name of this language. Used in [Languages] dialog and welcome window.
_lang.xx
Name of this language in other language. Used in [Languages] dialog, next to language with file name same as xx
part.

_lang=日本語
_lang.en=Japanese
_lang=English
_lang=簡体中文
_lang.en=Chinese Simplified
_lang.en
in other languages._font
Name of suitable font to display this language. Multiple fonts can be specified using comma to support more OSes (don't put spaces around comma). First installed fonts in this list or default sans serif (if no fonts were installed) will be used.

_font=Yu Gothic UI,Meiryo UI,メイリオ
_createdBy
Name of translators. Not yet used in UMP, but reserved for future use.
Tutorials
Index
- Change Memory Allocation
- Apply WinMM Patch
- Change Note Colors
- Sync Sound to Screen
- Open AVI in AVIUtl
Change Memory Allocation
JVM has option for how much memory JVM/UMP can use. To open bigger MIDIs, you might need to change this option to allow more memory.
Configure the Launcher Windows
- Open
MIDIPlayer.bat
in your favorite text editor.Right clicking on batch file and selecting [Edit]. - Update memory options.
MIDIPlayer.bat (before)
set INITIAL_MEMORY=2G set MAX_MEMORY=2G
MIDIPlayer.bat (after)set INITIAL_MEMORY=6G set MAX_MEMORY=6G
Changing Launcher options to use 6GB memory How it looks in MS Notepad. - Save file and restart UMP.
Use options in command line Any OS
Memory Options Generator
-
Add options in between
java
and-jar
and run.Terminal$ java -Xms6G -Xmx6G -jar MIDIPlayer.jar
Starting UMP with memory allocation of 6GB.
Tips
- If you try to allocate memory more than the amount your PC has, JVM may fail to start at all. You might be able to increase the amount of memory by using something called virtual memory (try googling like windows 10 page file).
-- Begin JVM/UMP Log ----------- Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000080000000, 1099511627776, 0) failed; error='ページング ファイルが小さすぎるため、この操作を完了できません。' (DOS error/errno=1455) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 1099511627776 bytes for Failed to commit area from 0x0000000080000000 to 0x0000010080000000 of length 1099511627776. # An error report file with more information is saved as: # C:\some\folder\hs_err_pid24532.log -- End JVM/UMP Log ------------- Crashed with exitcode 1. Memory allocation was 1024G initial, 1024G max.
The Launcher log when JVM didn't start. - Since the 1.6 Launcher, UMP will crash immediately when running out of memory.
-=[!]================== UMP Out of Memory ==================[!]=- UMP has ran out of memory and needs to stop! Avoid loading big MIDIs, or increase memory allocation by editing this .bat file. More info: https://pipiraworld.web.fc2.com/ump/manual/#Memory -=[!]=======================================================[!]=- Terminating due to java.lang.OutOfMemoryError: Java heap space -- End JVM/UMP Log ------------- Crashed with exitcode 3. Memory allocation was 1G initial, 1G max.
The Launcher log when running out of memory. - 32bit JVM can only use less than 4GB memory. If you're using 64bit Windows, you can install 64bit Java to be able to allocate more.
Apply WinMM Patch
MIDI performance on Windows 10 can be improved drastically by applying WinMM patch.
Since UMP is a Java program whch can't be patched, you need to patch the JVM, a software that actually runs UMP.
Find JVM
- Have UMP running.
-
Open Task Manager.
- On Windows 8 or later, click [More details] at bottom-left if exists.
-
Find JVM process called "Java(TM) Platform SE binary" in [Processes] tab. Expand and check it's running UMP, right click on it, click [Open file location].
JVM process running UMP. -
File explorer will open. Copy the path.
Copying path (file address) in file explorer.
Patch with OmniMIDI
- Requirements:
-
Open OmniMIDI Configurator as administrator and go [Tools] -> [Windows Multimedia Wrapper Patch].
Windows Multimedia Wrapper Patch. It's funny that there's a typo in OmniMIDI 7.1.0.1 where it says "MIcrosoft" instead of "Microsoft". - Click [Patch an application] inside [For Black MIDIs].
-
In [Select an application to patch] dialog, go to JVM folder and select
java.exe
.Pasting copied path in file explorer. Did you know that you can click on address bar and copy or paste path, just like how we did now? - Restart UMP.
- Done!
Patch Manually
- Requirements: Patch File
- Unzip the patch file, copy all files in
WinMM32
orWinMM64
depending on your JVM type, into JVM folder. Administrator privilege may be required. - Restart UMP.
- Done!
Change Note Colors
- Manual:
-
Check what track has the notes you want to change color. Skip all tracks with no notes, count from 0 and remember the number of that track.
-
Open
resourcepacks
folder (create if it doesn't exist) in UMP folder, create new folder with any name, create new file namedpack.yml
in that folder.Folder structure after this step -
Open
pack.yml
in text editor and write:format: 0 name: (Any name) version: 1.0 author: (Your name) description: (Short description) note: colors: (Track number): (Color you want)
Not to mention you don't need to use your real name.You can also use list if you want to change many colors from track 0:note: colors: - (Color 0) - (Color 1) - (Color 2)
- Save the file, return to UMP and go [Options] -> [Resourcepacks].
- Select your pack you just made, click [Done].
- Done!
Sync Sound to Screen
- Close UMP.
- Open
config.yml
in text editor. - Find
usePlayThread
, set value tofalse
and save file. - Restart UMP.
Open AVI in AVIUtl
Japanese free video editing software AVIUtl can open UMP's AVI file by installing input plugin. This section in the manual is made for Japanese people and translated with no reason.
- Install L-SMASH Works to AVIUtl.
- Open Settings([ファイル] -> [環境設定] -> [入力プラグインの設定] -> [L-SMASH Works File Readerの設定]).
- Check [Libav+L-SMASH] and [LW-Libav] at the top.
- Restart AVIUtl or reopen project file.
- Make sure to check [アルファチャンネルを読み込む] for videos with transparent background.

April Features
UMP has special features that are available only in between April 1st and April 3rd. UMP checks current date when starting with system clock converted to Japan timezone.
Since 1.5 (2019)
- Window title scrolls.
- Renderer PushingDefaultMIDIRenderer appears. During April 1st, this becomes the default renderer.
Since 1.6 β2 (2020)
- Language select always appears in splash window. When some language is selected, the あああーあ・あーああ option appears.
Since 1.6 β3 (2021)
- The [Game] menu appears.
FAQ
It doesn't work!
Install Java 8.
It lags!
Try [Options] -> [FPS Limit...] -> [Unlimited]. If this doesn't help, UMP isn't good enough to run on your PC. I'm sorry. (but you can still use video render! try it out!)
Audio lags!
- Use OmniMIDI as MIDI Synth
- Patch Java properly. Placing
winmm.dll
in UMP folder has no effect!!
If this doesn't help... the MIDI you're playing is too powerful.
I see random lag spikes!
It's caused by JVM GC (Java cleaning memory), and it's really hard to get rid of it completely.
If you're used to tune GC things, you can change JVM arguments by editing batch file yourself. video render won't get affected by this.
Why it says file isn't supported even though other players can play?
Because UMP's MIDI loader is so strict.
I won't change this strictness, so give up playing that on UMP. Other player's MIDI loading is little bit lazy in my opinion.
Will you add PFA's red bar?
No. I'm leaving this difference so you can see it's not PFA in glance. I also hope you never add this.
FPS limit makes stuttering!
Few workarounds I came up with:
- Keep this text visible in your browser window.
- Have a browser window with YouTube video page open, in front.
- Set FPS limit to multiple of your monitor's refresh rate. (60, 120, 144, etc)
Do I have to write credit?
Not necessary, but it'd be appreciated! Using credit overlay in video render is also a good way to credit.

Player: UMP
Video rendered with UMP 1.5
https://pipiraworld.web.fc2.com/ump/
https://pipiraworld.web.fc2.com/ump/
.Why Java?
Because it's my primary language. I'm interested in C++, but... Java is so easy... I can't escape...
What's the limit for notes it can load?
23,455,889,992,365 notes, if my calculations are right.
Single MIDI file can have 46,911,780,246,870 notes, but UMP and some MIDI players can't load. Note that both calculations doesn't include EoT (End of Track) message. If you want to make biggest MIDI for some reason, you should remove 1 note and add EoT to every track.
Recalculated in 10th edition. I think this one is more accurate.
Source code?
No. Code is private as long as I continue making updates (...or maybe private forever, me in future decides that). You are not allowed to decompile.
Mobile platform?
No. Just buy PC!!! Oh also I have no money to publish apps to App store.
What do you think about other players?
I don't think much of them. I'm not competing hard with other players!
Bad design!
How can I donate?
I currently don't have any way to accept direct donation.
If you're in UMP Discord server you can throw me Nitro in DM
Extra: Some History Stuff
bruh ump is so dead
20191.5.1
Apr 29 20191.5
April 1 20191 Year
November 17th 20181.4.1
September 20181.4
July 20181.3
April 2018The make good videos guys update.
Discord server
February 11th 20181.2.2
December 20171.2.1
December 20171.2
December 2017The color boost update.
1.1
November 20171.0.1
November 20171
November 17th 2017First public version. Release announcement video acquired 620 views in first 7 days, which was incredible for tiny YT channel like me.
UMP 0
November 8th 2017First reveal. The beginning of my busy life.
MIDIPlayerTest
??? ~ July 2017First project to generate PFA-like image was started.
First MIDI Project
December 28th 2015Creation date of oldest file produced from my MIDI-related project.
- *1: I'm not sure that this IPA is correct.