m8gd is a M8 display client for the M8 Tracker that provides a variety of 3D and 2D scenes.
This repository consists of the Rust library and GDExtension libm8gd that allows Godot to connect to M8 devices, and the Godot project m8gd.
GitHub Releases (Windows, Linux, & MacOS)
Note that this project is a work-in-progress. All releases are pre-release builds.
For MacOS users: please see the Running on MacOS section for additional instructions on running the app.
If you wish to build this project from source, please see Building.
The M8 screen can be displayed in various built-in scenes. Scenes are loaded and configured from the main menu.
- Fast Display: resembles other M8 display apps such as m8.run and m8c.
- Fancy Display: same as the Fast Display with additional customizable settings.
- Desktop (3D): resembles a real-world desktop camera setup, including an interactive 3D model of the M8 and some desktop decorations.
- Floating (3D): resembles a floating 3D model of the M8 in empty space with a jumbotron showing the M8 display in the background.
Various overlays can be toggled on/off and configured in the main menu.
- Audio Spectrum: an audio spectrum (magnitude over frequency) graph.
- Audio Waveform: an audio waveform (magnitude over time) graph.
- Display Panel: a secondary 2D M8 display panel. Useful for overlaying over 3D scenes.
- Keycast: displays live keystrokes and key combos (either from the physical device or the app).
- Input Display: displays the M8 key layout with live key presses (either from the physical device or the app).
The audio spectrum and audio waveform overlays are able to use colors from your M8's current theme (defaults to white), however, you must enter the Theme screen on the M8 at least once while m8gd is open first.
Various shaders/filters can be toggled on/off and configured in the main menu.
- VHS Shader: emulates VHS effects
- Retro Shader: emulates CRT effects such as scanlines
- Bezel Shader: emulates monitor curvature and bezel
- Post Process Shader: a general post-processing shader to adjust brightness, contrast, saturation, vignette, and noise
| Action | Binding |
|---|---|
| Open/Close Main Menu | ESC |
| Toggle Fullscreen | Alt+Enter |
| Drag Window | Hold Alt+LMB & Mouse Move |
| Take Screenshot | F12 |
| Action | Binding |
|---|---|
| Pan camera | Mouse Move |
| Zoom camera | Hold RMB |
| Move camera mode (when in camera or scene menu) | Hold RMB |
| Move camera (when in "move camera mode") | WASD |
| Adjust camera angle (when in "move camera mode") | Mouse Move |
| Adjust camera focal distance (when in "move camera mode") | Mouse Scroll Up/Down |
| M8 Key | Default Binding (KB) |
|---|---|
| Up | Up Arrow |
| Down | Down Arrow |
| Left | Left Arrow |
| Right | Right Arrow |
| Shift | Shift |
| Play | Spacebar |
| Option | Z |
| Edit | X |
Note: the Virtual Keyboard must be enabled first (main menu > input).
| Action | Default Binding (KB) |
|---|---|
| Play Note | A to ' |
| Decrease Octave | - |
| Increase Octave | = |
| Decrease Velocity | [ |
| Increase Velocity | ] |
- Git
- Windows/Linux only: GCC
- MacOS only: Clang
- MacOS only: Homebrew or MacPorts
- Python 3.6+
- Rustup
- Godot 4.3-stable
If on Windows, a MSYS2/MinGW64 installation is recommended when compiling.
$ pacman -S git python python-pip base-devel mingw-w64-x86_64-gcc$ sudo pacman -S git python python-pip base-devel gcc# with Homebrew
$ brew install python3 libtool
# with MacPorts
$ macports install python3
$ macports install libtool$ git clone https://github.com/octoocto/m8gd
$ cd m8gd
$ python3 build.pyOn MacOS, the GDExtension will be built as a universal binary (both x86_64 and arm64 architectures).
The build.py script will automatically download Godot and its export templates in order to export the project if it does not find a godot command. To force the script to run without downloading anything, run python build.py --nodownload instead.
If the export was successful, a .zip file containing the app should be created in the build/ folder.
Run python build.py -h for different options
In order to monitor audio, m8gd will attempt to find the audio input device associated with the M8 and listen to it.
If the device is disabled, or m8gd doesn't have permissions to access the M8's audio input device, then it will fail to connect. See more details here.
m8gd will also detect if the audio device is connected but not playing (this may happen when repeatedly disconnecting/connecting the M8) and automatically attempt to reconnect the audio device. This can happen around 10 seconds of the audio device not playing.
At this time, the MacOS build included in the releases does not have an official Apple Developer code signature and will likely not start as-is.
To allow the app to run, run the following command (replace "m8gd.app" with the location of the downloaded app if needed):
$ xattr -dr com.apple.quarantine "m8gd.app"
Please read this guide from the Godot docs for more info on this workaround.
A debug binary of the gdextension libm8gd is required to open this project in the Godot editor.
Please follow the build instructions in Building (run python build.py --dev to compile a debug gdextension) or use a precompiled library from the latest release if available, placed in project/addons/libm8gd/bin.
This project has been tested to work on Godot 4.5-stable.
- Thanks to laamaa for creating m8c! This was used as a reference when creating
libm8gd. - Thanks to rm for creating a model of the M8 M:02!
- m8stealth57 and m8stealth89 fonts by Trash80. These fonts were converted to bitmaps.
- M8 Tracker 3D Model by David Junghanns
- Prototype Textures by Kenney
- Succulent plants model by uniko
- VHS with wiggle shader by cyanone
- CRT + VHS Effects (Compatability Mode Safe) shader by doffu
- VHS Post Processing shader by LazarusOverlook
- CRT with Luminance Preservation shader by Harrison Allen
- Realistic CRT Shader shader by c64cosmin



