Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/diskchord/hfe-to-songlist/archive/refs/heads/main.zipNo built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.
HFE to Songlist (WordPress Plugin)
This plugin adds a shortcode that lets users upload an .hfe disk image and generate a song list from MIDI and Yamaha E-SEQ/FIL files.
Uploads are processed asynchronously (AJAX), so the page does not reload between albums.
What It Produces
Output format:
ALBUM NAME
01. Song 1 Name
02. Song 2 Name
The plugin also shows a table with #, parsed song title, and source filename.
Requirements
- WordPress 6.0+
- PHP 8.0+
gw(Greaseweazle CLI) available on the serverPATH7z(7-Zip CLI) available on the serverPATH- Optional for AI cleanup: OpenAI API key
Installation
- Copy this plugin folder into
wp-content/plugins/hfe-to-songlist. - Activate HFE to Songlist in WordPress.
- Add shortcode to any page:
[hfe_songlist]
Validation and Safety
The plugin validates:
- uploaded extension is
.hfe - HFE signature is
HXCPICFE - geometry/bitrate map to supported floppy classes:
- 80 tracks, 2 sides, 250 kbps (720 KB)
- 80 tracks, 2 sides, 500 kbps (1440 KB)
- converted image is exactly
737280or1474560bytes - converted image can be listed as a FAT filesystem by
7z
Temporary files are created under WordPress uploads (hfe-songlist-temp) and removed after processing.
Notes on Song Title Parsing
- MIDI titles: reads text meta events (
0x03track name, fallback0x01) from track chunks. - E-SEQ/FIL titles: reads title bytes at offset
0x57length0x20, normalizes ASCII spaces. PIANODIR.FILis skipped as a control/directory file.
AI Cleanup (Optional)
- The upload form includes an AI Cleanup checkbox.
- When checked, the plugin sends extracted titles to OpenAI and attempts to clean them up.
- Default model is
gpt-5.4-nano. - If cleanup fails or key is missing, the plugin still returns the original parsed titles.
Optional Binary Overrides
If needed, define constants in wp-config.php:
define('HFE_SONGLIST_GW_BINARY', '/path/to/gw');
define('HFE_SONGLIST_7Z_BINARY', '/path/to/7z');
define('HFE_SONGLIST_OPENAI_API_KEY', 'sk-...');
define('HFE_SONGLIST_OPENAI_MODEL', 'gpt-5.4-nano'); // default
define('HFE_SONGLIST_OPENAI_API_URL', 'https://api.openai.com/v1/responses'); // default
Or use filters:
hfe_songlist_gw_binaryhfe_songlist_7z_binaryhfe_songlist_openai_api_keyhfe_songlist_openai_modelhfe_songlist_openai_api_url