ALL2MOD (YM/AY/VGM/SDNH and much more converter) https://eab.abime.net/attachment.php?attachmentid=87793&d=1775047779 The following was copied/pasted on 2026/07/29 from the forum post this file was found on with some minor editing by TheOuterLinux (https://theouterlinux.gitlab.io) for easier reading in plain-text... ------------------------------------------------------------------------ For a long time, I have dedicated myself to the study and conversion of various music formats and game soundtracks—including titles such as Where Time Stood Still, Recoil, and Starquake, among others. This journey has led me to the point where I am now ready to begin releasing tools to automate these processes for the community. I must clarify that this project was created with the assistance of AI, as I do not know how to program at all. However, I felt this specific tool was necessary; I wanted it to exist in case someone needs it in the future for a conversion or a port—much like the challenges faced by developers like Galahad/FLT during his famous Amiga ports. I truly hope you find this tool useful and enjoy using it as much as I have enjoyed the process of bringing it to life. ym2mod — Chiptune Format to ProTracker MOD Converter Python tool to convert chip music (AY-3-8910, YM2149, SN76489, POKEY) to ProTracker MOD format. Supports .ym, .ay, .vgm/.vgz and .sndh (Atari ST) files. .ay and .sndh files can contain multiple songs; in that case the program automatically extracts all of them into subfolders. Basic usage =========== $> python ym2mod.py [output.mod] [options] If more than one file or a wildcard is passed, the last argument is not interpreted as output. The output is automatically named from the title and author embedded in the file (if present), and saved in a subfolder named after the source file. Arguments ========= --outdir Output directory for all generated MODs. In batch mode with a wildcard, each source file creates its own subfolder inside this directory. $> python ym2mod.py *.ym --outdir ./output --song Selects a specific subsong (1-based index) in .ay or .sndh files. Without this argument, all subsongs are extracted. $> python ym2mod.py music.ay --song 3 --frames .sndh only. Limits capture to N frames (at 50Hz = seconds × 50). Defaults to the playerTickCount value from the file metadata. Useful when that value is incorrect or absent. $> python ym2mod.py intro.sndh --frames 3000 --tick-adjust Manual frame adjustment at the start. Negative value: removes N frames from the beginning (trims silence or unwanted intro). Positive value: adds N frames of silence at the beginning. Disables auto-trim of leading silence. $> python ym2mod.py song.ym --tick-adjust -25 --tone-level <0-100> / --noise-level <0-100> Adjusts the relative level of the tone channel and noise channel in the mix, as a percentage. Both default to 100%. Useful for attenuating noise when it dominates the mix. $> python ym2mod.py song.ym --noise-level 60 --vol-curve Volume conversion curve from chip levels (0-15) to ProTracker volume (0-64). Defaults to chip, which uses square root and is the most faithful to the real AY/YM response. Other options allow compensation depending on the target player. chip — square root, faithful to hardware (default) sqrt — same as chip linear — direct linear mapping log — logarithmic curve $> python ym2mod.py song.ym --vol-curve linear --vol-range Maximum volume range in the resulting MOD (1-64). Defaults to 64. Reducing it allows reserving headroom or leveling out volumes between songs. $> python ym2mod.py song.ym --vol-range 48 --pattern-div Pattern density divisor. Defaults to 1.0 (one chip frame = one MOD row). With 2.0, every two frames are grouped into one row, halving the number of patterns at the cost of temporal resolution. Useful when the song exceeds ProTracker's 128-pattern limit. $> python ym2mod.py song.ym --pattern-div 2 --eex Enables empty row compression using the ProTracker EEx (Pattern Delay) effect. Groups multiple consecutive empty rows into a single one with a delay, reducing the number of required patterns. The converter displays the compression percentage achieved. $> python ym2mod.py song.ym --eex --no-dedup Disables deduplication of identical patterns. By default the converter reuses duplicate patterns to save slots in the order list. With this flag, every 64-row block is always written as a new pattern. --no-loop Disables heuristic loop detection. When a file does not specify a loop point in its metadata, the converter attempts to detect one by comparing the order list for repetitions. On some files this produces incorrect results. With --no-loop the song is converted without a loop point (plays once). Explicit loop points embedded in the file (YM5, YM3b, VGM...) are always respected. Note: This option is temporary while the detection algorithm is improved. $> python ym2mod.py suite.ym --no-loop --debug Enables additional diagnostic output during conversion. Examples ======== Simple YM conversion: $> python ym2mod.py "Rob Hubbard - Thing on a Spring.ym" ...Generates the MOD in a subfolder named after the source file. Conversion with explicit output: $> python ym2mod.py song.ym output.mod Extract all subsongs from a .ay to a folder: $> python ym2mod.py game.ay --outdir ./mods ...Creates ./mods/game/ with one MOD per subsong, named by title/author if available. Convert a specific subsong from a .sndh with a frame limit: $> python ym2mod.py demo.sndh --song 2 --frames 6000 Batch convert an entire YM collection: $> python ym2mod.py *.ym --outdir ./output Reduce noise and apply EEx compression: $> python ym2mod.py song.ym --noise-level 50 --eex Long song that exceeds the pattern limit, with compression: $> python ym2mod.py long_suite.ym --pattern-div 2 --eex File with problematic heuristic loop: $> python ym2mod.py song.ym --no-loop Trim 30 frames of leading silence and adjust volume: $> python ym2mod.py song.ym --tick-adjust -30 --vol-range 48 This converter doesn't work for SID, tricky or Beeper chiptunes, don't ask for support since they need different aproaching. NOTE: I'm not responsible for the misusing of this software. I encourage you to test my other tool "MOD2WAV", useful to extract stems from protracker mods by grouping instruments. F$CK THE OBSOLESCENCE removed examples (they're along the post, just share your favourites here) Attached Files File Type: zip ALL2MODv1.zip (377.7 KB, 25 views) Last edited by adrdesign; 01 April 2026 at 14:57.