75808cfed8e4f768b84cc74bf5d2522a6d408dac
Transmutate (Python GUI)
A modern Python/CustomTkinter rewrite of the original transmutate.sh bash script.
Convert images, videos, and audio using ffmpeg + ImageMagick with a modern, cross-platform GUI.
Requirements
- Python 3.8+
- customtkinter (
pip install customtkinter) - Pillow (for animated image detection)
- ffmpeg (must be in PATH)
- magick / ImageMagick (optional, provides better WebP/GIF handling)
Usage
cd rewrite
python transmutate.py <path/to/file>
The GUI opens automatically and detects the media type of the file.
Features
Supported Conversions
| Source → Target | Options |
|---|---|
| Image → Image | PNG, JPG, WebP, AVIF, GIF (animated), MP4, MKV, WebM, AVI, MOV (animated) |
| Image → Video | MP4, MKV, WebM, AVI, MOV |
| Image → Audio | MP3, FLAC, WAV, OGG, M4A, AAC |
| Video → Image | PNG, JPG, WebP, AVIF |
| Video → Video | MP4, MKV, WebM, AVI, MOV, GIF, WebP (animated) |
| Video → Audio | MP3, FLAC, WAV, OGG, M4A, AAC |
| Audio → Image | PNG, JPG, WebP, AVIF |
| Audio → Video | MP4, MKV, WebM, AVI, MOV |
| Audio → Audio | MP3, FLAC, WAV, OGG, M4A, AAC |
Per-Conversion Options
- Quality slider (0-100, or 0-51 for video CRF) — smooth CustomTkinter slider
- Audio quality slider (for video output)
- Audio track selection (when multiple tracks exist)
- Subtitle track selection (when multiple tracks exist)
- Loop toggle (for GIF/WebP output)
- Output path — same directory as source, auto-renamed on conflict
Conversion Modes
- Image → Image: Direct ffmpeg conversion with quality control
- Image → Video: Animated images are re-encoded with CRF
- Image → Audio: Single frame extracted to audio
- Video → Image: Single frame extraction
- Video → Video: Full conversion with CRF and audio quality control
- Video → GIF: Palettegen-based GIF with quality-dependent dithering
- Video → WebP: Animated WebP output
- Audio → Audio: Format conversion with quality control
- Audio → Image: First frame extracted as image
- Audio → Video: Single frame rendered as video
Architecture
rewrite/
├── transmutate.py # Entry point (CLI → GUI)
├── transmutate_app/ # Package
│ ├── __init__.py
│ ├── gui.py # CustomTkinter GUI application
│ └── engine/ # Conversion engine
│ ├── __init__.py
│ └── ffmpeg_engine.py # Command building + execution
Compared to Bash Version
| Feature | Bash (kdialog) | Python (CustomTkinter) |
|---|---|---|
| Dependencies | bash, ffmpeg, kdialog | python3, customtkinter, ffmpeg |
| GUI | Multiple sequential popups | Single unified CustomTkinter window |
| Stream selection | kdialog checklist | CustomTkinter checkboxes |
| Quality input | kdialog inputbox | CustomTkinter slider |
| File overwrite | kdialog yes/no | CustomTkinter dialog + auto-rename |
| Animated detection | ffprobe | Pillow + ffprobe |
| Code organization | Single monolithic script | Modular package |
Description
Transmutate is a KDE desktop tool for converting images, videos, and audio files. It uses KDialog to provide interactive menus where users select the output format, set quality parameters, and choose audio/subtitle tracks. Under the hood, it leverages FFMPEG and ImageMagick to perform the actual transcoding.
Languages
Python
66.5%
Shell
33.5%