iOpenPod
Manage your iPod without iTunes.
Download · Website · Guides · Discord
A free, open-source iPod manager and iTunes alternative for Windows, macOS, and Linux. Sync music and other media from your computer to your iPod.
We are actively researching and reverse engineering iPod firmware, to push knowledge of these devices forward, add new features, and keep support alive. This is not a small rewrite of libgpod, this is iOpenPod.
Features · Installation · First Sync · Compatibility · Contributing · Support
Important
Built for filesystem-accessible iPod Classic, iPod mini, iPod nano, and earlier iPods. iPhone, iPod Touch, other iOS devices, and iPod Shuffle are not yet supported.
| Feature | Detail |
|---|---|
| Music, Album Artwork & Track Metadata | Full support to browse, sync, listen, and edit, even niche fields like chapter data, media type, compilation flags, play counts, and ratings. This is iPod centric software made to replace iTunes, it's all here. |
| Playlists & Smart Playlists | Arrange tracks, make playlist folders, and create rule-based smart playlists with nested rules just like iTunes.. |
| Sync & Conversion | Automatically converts audio and video to support your iPod, no more need for external tools or managing multiple copies of the same media. iOpenPod leaves your computer files alone, and associates the transcoded iPod copy to it. |
| Click Wheel Games. Including Phase | Install the entire preserved game collection without a virtual machine, and generate the Phase playlist with advanced GPU accelerated music listening. |
| Playback & Synesthesia | Listen with desktop intergrated media controls and explore a new advanced music-reactive visualizer. |
| Photos | Browse and organize Photos into Albums and export photos from your iPod onto your PC to keep those old memories safe. |
| Podcasts | Browse the iTunes Podcasts API and automatically or manually have podcasts sync. Full support for chapters, chapter artwork, per episode artwork, and proper grouping. Not even iTunes does this properly :) |
| Scrobbling | Optionally submit iPod music plays to Last.fm or ListenBrainz. |
| Backups | Backup your devices and restore to that point at anytime. |
Native downloads for Windows, macOS, and Linux are available on the latest release page. Choose your platform below; these downloads do not require a separate Python installation. See the installation guide for setup and troubleshooting.
| Platform | Latest release assets | Installation |
|---|---|---|
| Windows x64 | Windows x86_64 ZIP | Extract iOpenPod.exe and run it. |
| macOS · Apple Silicon | macOS arm64 DMG | Open the image and drag iOpenPod.app to Applications. |
| macOS · Intel | macOS x86_64 DMG | Open the image and drag iOpenPod.app to Applications. |
| Linux x64 | Linux x86_64 tar.gz | Extract the complete folder and run its top-level iOpenPod launcher. |
Windows setup and in-app updates
On Windows, keep the file name as iOpenPod.exe and place it in a folder you can write to
on a fixed NTFS drive for in-app updates. Windows users can also install through
Microsoft Store.
macOS setup and first launch
On macOS, launch from Applications after copying the app and ejecting the DMG.
The build targets macOS 12.3 or later. Current downloads are ad-hoc signed and not
notarized. Follow the Mac setup guide
for first-launch approval in System Settings → Privacy & Security. Choose a
DMG to install; the ZIPs labeled sparkle-update are reserved for the built-in updater.
Linux setup, diagnostics, and recovery storage
On Linux, extract into a folder you can write to, preserve executable permissions,
and keep the whole iOpenPod folder together. Always start its top-level launcher,
including after an update. The binary is built on Ubuntu 24.04 and requires glibc
2.39 or later plus desktop libraries.
If Linux does not launch the app, run its top-level launcher from a terminal to
see the startup error. For device-access problems, the Device Picker includes the
underlying error. Settings → About shows a copyable log file path even if
Open Log Folder fails. The default Linux log is
~/.local/state/iOpenPod/iopenpod.log, or $XDG_STATE_HOME/iOpenPod/iopenpod.log
when XDG_STATE_HOME is configured; a custom log setting takes precedence.
Linux device selection also validates that persistent Host recovery storage is separate from the selected iPod. Unsupported or incomplete storage layouts are blocked with a diagnostic. Btrfs recovery is supported when every member device can be verified as separate from the iPod; loop-backed recovery remains unsupported. See the backing-storage contract and Btrfs recovery support for supported layouts and remaining Linux acceptance work.
Mac App Store, Flathub, and Snap Store remain planned. Check the website for channel availability.
Updating a GitHub installation
iOpenPod checks for updates at launch. You can also use Settings → About → Check for updates. About shows your current version and Install Channel.
-
Windows and Linux: choose Update now to download the update, then Restart to install when ready. Save any Library Draft and finish running workflows first. Close other iOpenPod instances before restarting.
-
macOS: choose Update now after saving your work, then follow the built-in updater's installation and relaunch prompts.
Installation requires your choice. If an older build only offers Open download page, or cannot update itself, install the latest download from above manually. Older Linux directory bundles should be replaced by extracting the new archive into a fresh folder. Microsoft Store installations update through the Store.
Install or update from PyPI with uv
First install uv, then run:
uv tool install iopenpodLaunch the app with iopenpod. For updates, choose Update now, then
Restart to install in the app. Or manually run
uv tool upgrade iopenpodFFmpeg and FFprobe are installed separately for media conversion and inspection. Chromaprint's fpcalc is optional, installed separately, and enables acoustic matching during Sync.
The startup popup or Settings → Media Tools → Set Up Media Tools can install missing tools after you choose Install Missing Tools. Native setup uses WinGet, Homebrew, or a supported Linux package manager.
- Connect your iPod and select it in the device picker. Your operating system must be able to mount and access it.
- Choose Sync with Host, add media folders, and select what to scan.
- Select your media, then review additions, updates, and removals. Removal candidates start unchecked.
- Sync Selected prepares compatible media and publishes verified changes. Use the app’s eject action when you are finished.
Optional acoustic matching helps recognize the same recording after format or metadata changes. Sync can also recognize media from a previous successful Sync without generating a new fingerprint.
Install click wheel games without a virtual machine.
Start with one click on Install Games in the Games page. iOpenPod downloads the full preserved click wheel game collection and prepares game authorization for your iPod. Choose Select all → Add to install the collection, or pick individual games. No virtual machine is required.
The first download needs an internet connection; later visits reuse the files on your computer. Game compatibility depends on your iPod model and firmware.
Make a Phase Playlist from your music
With Phase installed, create a Phase Playlist or mark an existing playlist with Use as the Phase Playlist. Add your songs and save. iOpenPod generates the audio analysis the game uses to turn your music into gameplay, and reuses matching analysis on later saves.
The analyzer detects beats and musical attacks, with an emphasis on audible percussion. With the optional music analysis model installed, it also separates estimated vocals, drums, guitar, bass, piano, and other sounds, and recognizes recurring musical phrases. These help it follow the rhythm and prominent parts of a song. Acoustic analysis works without the optional model. Use Settings → Media Tools → Set Up Phase Analysis to download optional instrument analysis; setup can use several gigabytes. If optional analysis cannot run, iOpenPod uses acoustic analysis. Audio decoding uses your configured FFmpeg executable.
iOpenPod targets these iPod families. Available features depend on the model.
| Family | Target |
|---|---|
| iPod and iPod classic | Full-size generations 1–5.5 and the classic family 6-7 |
| iPod mini | 1st and 2nd generation |
| iPod nano | 1st–7th generation |
iPod shuffle, iPod touch, iPhone, and other iOS devices are not yet supported.
- Sync an iPod without iTunes — choose media folders and review your first Sync.
- Check iPod compatibility — understand model and filesystem requirements.
- Put FLAC music on an iPod — convert supported source files for your model during Sync.
- Troubleshoot an iPod that is not detected — check the connection and whether the computer can access the device.
Here's what makes iOpenPod different.
-
No separate libgpod installation. iOpenPod uses its own Python iPod database implementation, originally informed by libgpod and gtkpod research, but has been heavily modified and improved upon; expanding compatibility, fixing bugs, and adding features.
-
All features are free. Donations support development without unlocking features. You will never hit a pay wall, and will be able to install it on any platform, Windows, macOS, or Linux, all for free.
-
Review before writing. Sync shows planned changes, with removals unchecked by default. Backup Snapshots are user-controlled, and interrupted writes have explicit recovery actions.
Clone the repository, open its directory, and use the locked UV environment:
git clone https://github.com/TheRealSavi/iOpenPod.git
cd iOpenPod
uv sync --locked
uv run python -m scripts.prepare_typing
uv run -m iOpenPodDevelopment typing and platform notes
The typing preparation command gives Pylance and Mypy the same corrected Qt 6.9.3 annotations on macOS and Whenever 0.11.0 timezone annotations on all platforms. It changes development stubs only. Run it after syncing or recreating the environment; VS Code's Environment: Sync and Typecheck: Mypy tasks include it. Newer Qt versions use their bundled stubs. See development typing for details and remaining platform diagnostics.
iPod Hardware testing, platform testing, reproducible bug reports with logs and relevant database files, and focused and communicated pull requests all help.
For bug reports, include your iPod model, operating system, iOpenPod version, steps to reproduce the problem, logs, and relevant database files if possible, this helps developers reproduce the issue.
Keep each pull request focused on one change. Discuss proposed work in an issue or on Discord before starting, especially for major changes, so we can agree on the approach.
Run the development checks
Before submitting changes, run the repository checks:
uv lock --check
uv run ruff format --check .
uv run ruff check .
uv run rumdl check .
uv run mypy
uv run pytestFull-suite runs use eight workers with whole-file scheduling by default, including
uv run pytest tests and uv run pytest . from the repository root. A focused
test path, -k, -m, --lf, or collection-only run defaults to serial. Add -n8 to
parallelize a focused run; use -n0 only when diagnosing a failure. CI and VS Code
inherit the same default. See the test scheduling decision.
Explore the architecture and engineering docs
The application ships as one distribution with four internal boundaries:
| Package | Responsibility |
|---|---|
src/iOpenPod |
Application workflows, state, and GUI |
src/device_registry |
iPod identity and capabilities |
src/iPodDB |
iPod database formats |
src/storage |
Safe filesystem and removable-media operations |
flowchart TB
App["iOpenPod · workflows, state & GUI"]
App --> Registry["Device Registry · identity & capabilities"]
App --> Database["iPodDB · parse & serialize bytes"]
App --> Storage["Storage · safe filesystem operations"]
Device mutations belong in Storage. iPodDB works with bytes; lower-level boundaries do not import iOpenPod.
Read AGENTS.md, the project context, and the documentation map before making substantial changes. Packaging covers native builds and store release gates; website maintenance covers screenshots and channel activation.
I plan to keep everything free. Donations are optional and help a lot to support continued development.
Starring the project on GitHub helps a lot too!
-
libgpod - C library for iPod database access.
-
Rockbox - Open-source firmware replacement for iPods.
-
wInd3x - Tethered clickwheel iPod bootrom/DFU exploit tool.
-
Sphinxmoth - A working flash mod for FireWire iPods (1st/2nd gen).
-
PyMobileDevice3 - Python 3 implementation for interacting with iOS devices (iPhone, iPad, ...).
Licensed under GPL-3.0-or-later. All features are free; optional donations support development without unlocking features. See LICENSE, COPYING.md, and ACKNOWLEDGEMENTS.md for the license grant and third-party credits, including HASHAB, libgpod, and gtkpod research. The application icon has separate permission terms documented with its assets.
Special thanks to Dylan Staley (@dstaley) for the HASHAB WebAssembly implementation used by iOpenPod.
Thanks to dotm5 and their Genius-Mix-Research repository for helping us understand native Genius Data.
Thanks to Olsro for organizing and preserving iPod click wheel games through the iPod Clickwheel Games Preservation Project. iOpenPod's game binary downloads are sourced from this repository.
Independent software, not affiliated with or endorsed by Apple Inc. iPod and iTunes are trademarks of Apple Inc.











