Open-source project
vgmtrans/vgmtrans avatar
vgmtrans/vgmtrans

VGMTrans pulls sequenced game music out of ROMs and hands it back as MIDI, SF2 or DLS

VGMTrans - a tool to convert proprietary, sequenced videogame music to industry-standard formats

1,287 stars109 forksC++Zlib

At a glance

What is it?
VGMTrans is a Qt6 desktop tool that scans game files for embedded sequenced music, shows you the structure of what it found, and converts it to standard interchange formats. It is aimed at people who want to work with a track as notes and instruments rather than as recorded audio.
Who is it for?
VGMTrans is worth adopting if your interest is in the note data inside a game soundtrack, because its scanner, analysis view and collection grouping are the parts other tools skip. It is the wrong tool for anyone who wants an audio file, a mastering workflow or a headless pipeline, since the project documents a desktop application with a Qt6 interface rather than a library or a command line.
Can I use it commercially?
Yes. Zlib is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

VGMTrans works on sequenced music, not on recorded audio

The distinction that matters most is between music that was stored as note data and music that was stored as samples. Game soundtracks from the era VGMTrans targets were largely written as sequences driving instrument banks, so the information exists in the file as something resembling a list of note on and note off events. VGMTrans targets exactly that layer. Its own description calls it a tool to convert proprietary, sequenced videogame music to industry standard formats, and the supported output list is MIDI, SoundFont2 and DLS. That is a different job from extracting an audio stream and re-encoding it, and it explains why the program insists on examining file structure rather than simply playing a file. If what you want is an mp3 of a soundtrack, this is the wrong starting point. If what you want is the actual composition, with the melody you can edit in a sequencer and the instrumentation you can load into a sampler, the format conversion is the point rather than a side effect. The project is written in C++ and the repository topics name qt6, midi, sf2, dls and vgm, which matches a desktop tool built around a file format browser.

Scanning a file and watching VGMTrans build its Collections

The workflow starts with loading a file, either by dragging it into the application window or by choosing Scan File from the File menu. The program then searches the file for contained music, and anything it recognises appears in the Detected Music Files panel. Three panels carry most of the state: Scanned Files lists every file that was scanned and yielded detections, Detected Music Files lists the individual music files found inside them, and Collections sits at the bottom. Collections are the part that catches attention, because for some formats VGMTrans associates sequence files, instrument files and sample files together into one grouped object. Once grouped, a collection can be played back with its associated instrument data by double-clicking it, by selecting it and pressing Space Bar, by choosing Play / Pause from the Preview menu, or by clicking the green Play button. Conversion commands are reachable from the Convert menu or by right-clicking a collection. The grouping is also where the tool shows its limits, since the documentation acknowledges that VGMTrans sometimes fails to group detected files properly.

The Create collection manually button exists because automatic grouping is imperfect

That failure mode has a dedicated escape hatch. When the automatic association does not put a sequence together with its instruments, the Create collection manually button at the bottom of the Collection panel opens a dialog that lets you pick a specific set of detected files and bind them into a new Collection yourself. This is a real design decision rather than a workaround bolted on afterwards, because the underlying problem is inherent to the formats. A SNES game might place its instrument bank in one file and its song data in another, and the tool has to infer the relationship. Doing it by hand is not a bug, it is a step the user takes when the inference is wrong. It also means a partially detected file is still useful, since the pieces you did get can be reassembled into a working collection. The removal path follows the same logic in reverse, because a scanned file can be deleted with Delete or Backspace, or through Remove in the File menu and the right-click context menu, and doing so also removes every detected file that was contained in it. Individual detected files can be removed the same way.

The Analysis View reads a file as a structure rather than a black box

Double-clicking a detected file opens the Analysis View, and this is arguably the most useful screen in the application for anyone who does not already know the format. The view provides a visual breakdown of the file as color coded hexadecimal data, and beside it sits a File Structure panel holding a hierarchical list of all the elements within the file. Clicking an element in either the hex view or the structure list highlights it in both and shows more information about it in the status bar at the bottom of the main window. A Show Details toggle in the top right corner of the File Structure panel expands the list so details appear inline instead of only in the status bar. The practical value is diagnostic: when a track refuses to play or a conversion produces silence, the structure view tells you which block is missing or malformed, which is information a plain file dump does not give you. It is also the reason the tool can support a long tail of vendor specific formats, because the parsing is structured around identifiable elements rather than a fixed offset table.

Loading rules differ by platform, and arcade music needs a MAME ROM set

The way a file must be obtained varies between console families, and this is a genuine constraint on who can use VGMTrans for what. The program can unpack portable sound format files, meaning psf and related formats such as psf2 and ssf. SNES material generally has to be loaded from spc or rsn files, so you need a pre-rendered sound file rather than a ROM image. Arcade formats are loaded through MAME ROM set zip files, and the catalogue of those sets lives in mame_roms.json inside the project. The supported format list is wide, covering Capcom CPS-1, CPS-2 and CPS-3, Konami GX and the TMNT Turtles in Time era hardware, fifteen separate SNES composer formats including Akihiko Mori, ASCII Corporation with Shuichi Ukai, Chunsoft, Compile, Heartbeat, Hudson, Konami, Namco, Nintendo N-SPC, Pandora Box, Prism Kikaku, Rare and SquareSoft, Sega Saturn, several PlayStation formats such as Sony seq and vab and SquareSoft AKAO and smds and dwds, SquareSoft PlayStation 2 formats, Nintendo's MP2k on Game Boy Advance, and SDAT on Nintendo DS. Coverage is broad but the formats are named after individual composers and studios, which tells you the parsing is per vendor rather than generic.

Where the binaries actually come from, and why vgmtrans.com is not one of them

Prebuilt binaries are published for Windows, macOS and Linux. The project points at two places, and the distinction between them matters if you are downloading for the first time. Stable releases live under the main repository, while a separate preview build repository carries an unstable tag, and the README labels these Download Stable Releases and Download Preview builds respectively. The project also carries a prominent notice that vgmtrans.com is not an official VGMTrans website and is not authorized to represent or speak on behalf of the VGMTrans project, that the project does not operate or endorse that domain, and that it does not provide or verify downloads distributed through it. For official downloads, the README directs you to the links in its own Download section. If a tool's whole purpose is extracting assets from game files, being careful about the provenance of the tool doing the extracting is reasonable, and the two GitHub locations are the ones the project names. The stable release v1.3 is dated 2026-01-18, with v1.2 from 2024-08-22 and a v1.1 preview from 2022-10-23.

Building from source means CMake, and the licence is zlib

The repository is laid out like a native C++ project with a CMake build. Top level entries include CMakeLists.txt, CMakePresets.json, a BUILDING.md, a CHANGELOG.md, a CONTRIBUTING.md, a.clang-format and.clang-format-ignore pair, an.editorconfig, a.gitmodules file, and directories named bin, build-aux, cmake, lib, licenses and src. The presence of a separate licenses directory and a per directory.clang-format-ignore suggests third party code is vendored rather than fetched at build time, though the.gitmodules file also points to submodules, so a build may not be entirely self contained. The licence of the project itself is zlib, which is a permissive licence with a short notice requirement and no copyleft obligation, so linking or redistributing the tool carries a light administrative burden rather than a source disclosure one. The build instructions themselves live in BUILDING.md. The last push was on 2026-10-02, and the repository is not archived, so the project is still receiving work.

Editorial conclusion

VGMTrans is worth adopting if your interest is in the note data inside a game soundtrack, because its scanner, analysis view and collection grouping are the parts other tools skip. It is the wrong tool for anyone who wants an audio file, a mastering workflow or a headless pipeline, since the project documents a desktop application with a Qt6 interface rather than a library or a command line. Before you rely on it, check that your specific title appears in the supported format list, and confirm that the arcade titles you care about can be loaded from a MAME ROM set, because the loading rules differ by platform. The zlib licence keeps commercial reuse simple, and the last push was on 2026-10-02, so the codebase is not sitting still.

Frequently asked questions

What file formats can VGMTrans convert game music into?

The documented output formats are MIDI, SoundFont2 (SF2) and DLS. The project describes itself as a tool for detecting, inspecting and converting sequenced video game music into these standard formats.

How do I load arcade game music into VGMTrans?

Arcade formats are loaded via MAME ROM set zip files, which are catalogued in mame_roms.json. SNES material generally has to be loaded from spc or rsn files, while portable sound format files such as psf, psf2 and ssf can be unpacked directly.

Why does VGMTrans group some detected files but not others?

When sequence, instrument and sample files are all present, VGMTrans may associate them into a Collection automatically, and for some formats it does not. The Create collection manually button in the Collection panel lets you select the detected files yourself and bind them into a new Collection.

Can I inspect why a music file failed to convert?

Double-clicking a detected file opens the Analysis View, which shows the file as color coded hexadecimal data with a File Structure panel listing every element. Clicking an element highlights it and displays more information about it in the status bar.

Is vgmtrans.com an official download site for VGMTrans?

No. The project states that vgmtrans.com is not an official VGMTrans website, is not authorized to represent the project, and is not endorsed by it. Official downloads are the GitHub releases and the separate preview build repository linked from the README Download section.

Official sources

  1. Issues
  2. License: Zlib
  3. README
  4. Releases
  5. vgmtrans/vgmtrans on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vgmtrans-vgmtrans.svg)](https://hysenlabs.com/projects/vgmtrans-vgmtrans)

Was this useful?