Takes a gbs file and a json file for the "standard" tags, spits out a 7z file ready for distribution, containing the original GBS as well as NEZPlug-styled M3U playlists with tags. You can optionally have it preserve the folder that's being compressed so you can check it out immediately. The JSON file is arranged according to this schema, and an example can be found here.
While the script and schema are primarily built for GBS (the "cartridge" section in particular is used for file naming), I think it may be extensible should there be a need to support other formats that also use NEZPlug-styled M3Us.
This script has a tricky compromise, however. The "main" M3U with the same name as the GBS has 1-indexing for the track numbers, whereas the individual M3Us are 0-indexed. My rationale is that Game_Music_Emu (GME) at present --- especially as foo_gep for foobar2000 --- seems more widely used than NEZPlug + Winamp (in_nez). * GME has 1-indexing for every system, whereas 1-indexing in NEZPlug only applies to NSF. * GME cannot open the individual M3U files whereas in_nez can. So if you're using in_nez, you should drag them instead of the main M3U file. Weird situation, I know.
Game_Music_Emu doesn't seem to read the looping indicators? (At least, not when it's a "-" or a "00:00-") My previous rips just didn't bother and used a predetermined length --- as did a lot of other rips. Feedback would be appreciated.
For people who use an assembler to create GBS rips that requires some bootstrapping. It assumes the raw assembler output has addresses in the correct places and there is to be no content between the GBS header and the start of the code/data. The script truncates the large free space in between the header and the data so that the GBS can be loaded normally.
I admit, this is a desparate attempt at using any kind of standard when it comes to GBS tagging. NES music enjoys NSF2 and NSFE, systems that can be logged as a VGM has Gd3, while GBS to my knowledge is somehow still using NEZPlug M3U... An extended header specification was created for GBS, however it was dropped because absolutely no one was aware that this is even a thing. So here I am, bringing a dead format back from the grave. I'm using it with gbsdist.py to create "hybrid" rips. I don't even know.