A modern GUI for CHDMAN operations, allowing you to compress, decompress, and manage disk images with ease.
- Version 1.0.0: Basic GUI implementation complete with modern interface and theme system
- Version 1.1.0: CHDMAN integration complete with proper worker tracking and intelligent disc image handling
- Version 1.2.0-dev: Currently enhancing batch processing capabilities
See the CHANGELOG.md for detailed version history and the ROADMAP.md for development plans.
- Compression: Convert disk images (ISO, BIN, IMG, etc.) to CHD format for efficient storage
- Media-Specific Compression Profiles: Optimized compression settings for CD, DVD, and hard disk images
- Extraction: Extract disk images from CHD files to various formats
- Batch Processing: Process multiple files in batch mode
- Tool Plugins: Extensible plugin system for additional tools
- Dynamic Theming: Customizable themes with accessibility validation
- Modern UI: Clean, responsive interface built with PySide6 (Qt)
- Python 3.8+
- PySide6
- CHDMAN executable (part of MAME)
-
Clone this repository
-
Install dependencies:
pip install -r requirements.txt -
Run the setup script:
setup_chdman.bat(Windows) or./setup_chdman.sh(Linux/macOS) -
Copy the CHDMAN executable to the
bindirectory -
Run the application:
python main.py -
Clone this repository:
git clone https://github.com/yourusername/retroclamp.git cd retroclamp -
Install dependencies:
pip install -r requirements.txt -
Run the application:
python main.pyOr use the provided batch file:
run_retroclamp.bat
RetroClamp features optimized compression profiles for different media types and gaming consoles:
- CD Images: Uses specialized CD algorithms (cdlz, cdzl, cdfl) with 9.8KB hunk size
- DVD Images: Uses optimized settings for DVD data with 2KB (sector-sized) hunks
- Hard Disk Images: Uses settings optimized for block-based storage with 4KB hunks
Each media type has three profile options:
- Optimal: Best compression ratio (slower)
- Balanced: Good balance of speed and compression
- Fast: Fastest compression (larger files)
RetroClamp now automatically detects and applies optimized settings for specific gaming consoles:
- PlayStation 1: Optimized CD compression for PS1 games
- PlayStation 2: DVD-specific settings for PS2 games
- PSP: UMD-optimized compression settings
- Dreamcast: GD-ROM specific settings with 8-sector hunks
- SEGA CD/Mega CD: Optimized for SEGA CD games
- SEGA Saturn: Saturn-specific CD compression
- TurboGrafx-CD/PC Engine CD: Optimized for TG-CD games
Console detection is based on file extensions, sizes, and filename patterns. See README_COMPRESSION_PROFILES.md for detailed information.
core/: Core functionality moduleschdman.py: CHDMAN wrapper for compression/extractionarchive.py: Archive handling (ZIP, 7z, RAR)file_scanner.py: File scanning and filteringcheckpoint.py: Checkpoint system for pause/resume
gui/: GUI componentshome_tab.py: Home screencompression_tab.py: Compression interfaceextraction_tab.py: Extraction interface
RetroClamp uses a robust and configurable debug logging system via core/debug_logger.py:
- DebugLogger provides contextual logging for all core modules.
- Log level is configurable via AppSettings (key:
advanced.debug_log_level, e.g.,DEBUG,INFO). - All log methods accept an
extraparameter (dict) for arbitrary contextual data. - Log file is written to
retroclamp_debug.login a platform-appropriatelogsdirectory (seeget_log_file_path()inDebugLogger). - Handler log level is explicitly set to match the logger, ensuring consistent filtering.
See the top of core/debug_logger.py for usage examples and advanced configuration.
RetroClamp supports multiple extraction methods for maximum compatibility:
- Install 7-Zip: https://7-zip.org/
pip install py7zr libarchive-c
sudo apt-get install p7zip-full libarchive-devpip install py7zr libarchive-c
brew install p7zip libarchivepip install py7zr libarchive-c
RetroClamp attempts extraction using the following fallback order for each supported format:
- Pure Python library (e.g. py7zr, zipfile, tarfile)
- Native command-line tool (e.g. 7-Zip, unrar, tar)
- libarchive (via libarchive-c)
If one method fails or is unavailable, the next is tried automatically. This ensures maximum compatibility across platforms and archive types.
At startup, RetroClamp checks for the availability of extraction dependencies and logs a warning if any are missing. See core/archive.py for details.
theme_tab.py: Theme customizationsettings_tab.py: Application settingsmodules/: Shared modulestheme_config.py: Theme configurationtheme_utils.py: Theme utilitiesui_functions.py: UI functionsapp_settings.py: Settings management
tools/: Plugin system and tools__init__.py: Plugin managerscummvm_generator.py: SCUMMVM configuration generator
config/: Configuration filestheme.json: Default themetheme_light.json: Light theme
resources/: Resources like icons
RetroClamp supports a plugin system for adding new tools. To create a plugin:
- Create a new Python file in the
tools/directory - Define the following metadata variables:
PLUGIN_NAME = "Your Plugin Name" PLUGIN_DESCRIPTION = "Description of your plugin" PLUGIN_VERSION = "1.0.0" PLUGIN_AUTHOR = "Your Name"
- Implement a
register_panelfunction that accepts aToolsViewand returns anOptional[QWidget]— the panel to embed — orNoneto show a coming-soon card
See tools/scummvm_generator.py for an example.
MIT
- CHDMAN - The compression/extraction tool
- PyDracula - UI design inspiration
- Tabler Icons - Icons used in the application
- namDHC and Tools-CHD - CLI inspiration
- RetroBat, Batocera, and Libretro - UX flow inspiration