Note
This repository is a personally maintained fork of Jakads/malody2osu. It retains the original conversion approach while carrying local cross-platform and output-safety adjustments. Refer to the upstream repository for the original implementation history.
Convert Malody Key mode charts (.mc) to osu!mania (.osu, Mode 3), and optionally pack results into .osz.
This repository contains a single-file Python script based on the original converter by Jakads, with tweaks for cross-platform behavior (Windows/Linux/macOS) and safer output filenames.
- Converts Malody Key mode
.mc→ osu!mania.osu(Mode 3) - Reads key count (4K–9K, etc.) from chart metadata
- Supports multiple BPMs and time signature changes
- Supports SV (scroll speed) effects (exported as inherited timing points)
- Supports per-note hitsounds when present
- Packs converted charts into
.oszmapsets; includes BG/audio if referenced and found
- Python 3.x
- No third-party dependencies
python3 convert.py /path/to/chart.mc [/path/to/pack.mcz] [/path/to/pack.zip]The script will:
- Convert supported
.mccharts to.osunext to the.mcfiles. - Wait for a key press, then compress into
.osz.
Notes:
- Directories are ignored.
- Unsupported file types are ignored.
.mczis treated as a zip container and extracted before conversion.
For each converted .mc, an .osu file is written next to it:
some_chart.mc→some_chart.osu
After conversion, press a key to start packing.
- All valid
.mcinputs are packed into one.oszmapset. - Output directory: the directory of the first
.mcfile. - Output filename:
<Artist> - <Title>.osz.
- Each package becomes one
.oszmapset. - Output directory: next to the extracted folder (i.e. the original archive’s directory).
- Output filename:
<package_filename>.osz. - The extracted folder is removed after packing.
- Output
.oszfilenames are sanitized for illegal characters. - If the target
.oszalready exists, the script saves asname (1).osz,name (2).osz, etc.
On startup, the script checks for updates from GitHub. If a newer version is available, it will print a notice. This check requires an internet connection and times out after 5 seconds.
- Only Key mode charts are supported (
meta.mode == 0). Other modes are skipped. - If background/audio files referenced by the chart are missing, packing continues and prints a warning.
- SV conversion uses Malody scroll values; extreme values may not behave as expected in osu!mania.
- osu!mania effectively interprets SV in the range 0.01x to 10x; values outside this range are clamped by the client.
If the script crashes, it writes a log file named CrashLog_YYYYMMDDHHMMSS.log in the current working directory, including a traceback and the last file being processed.
- Original converter: Jakads
- This fork/modification: Eric Zhao
中文说明
将 Malody 的 Key 模式谱面(.mc)转换为 osu!mania 的 .osu(Mode 3),并可在转换完成后打包为 .osz。
python3 convert.py /path/to/chart.mc [/path/to/pack.mcz] [/path/to/pack.zip].osu:与对应.mc同目录生成同名.osu。.osz:转换结束后按任意键开始打包。- 传入多个
.mc:合并打包为一个.osz,输出到第一个.mc所在目录,文件名为<Artist> - <Title>.osz。 - 传入
.mcz/.zip:每个包单独生成一个.osz,文件名为包名;打包后会删除解压目录。
- 传入多个
- 启动时会自动检查 GitHub 上的最新版本(超时 5 秒)。
- 输出文件名会做非法字符清理;若同名
.osz已存在,会自动追加(1),(2)后缀避免覆盖。 - 程序崩溃会在当前工作目录生成
CrashLog_YYYYMMDDHHMMSS.log。