A desktop iPod manager for Windows, macOS, and Linux.
iOpenPod is a free, open-source desktop application for managing iPods without iTunes. It can browse and edit an iPod library, sync media from the PC, convert unsupported audio and video formats automatically, manage podcasts and playlists, write artwork and photos, and is built to preserve iPod-specific database behaviors.
| Sync Setup | Sync Review | Track Editing |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Download the latest release for your platform. Native builds do not require a separate Python installation. PyPI installs are recommended over native builds while native packaging is still being hardened.
iOpenPod is available as a Python package to download through pip, pipx, and uv tool.
| Method | Install | Run | Upgrade |
|---|---|---|---|
pip |
python -m pip install iopenpod |
iopenpod |
python -m pip install --upgrade iopenpod |
pipx |
pipx install iopenpod |
iopenpod |
pipx upgrade iopenpod |
uv tool |
uv tool install iopenpod |
iopenpod |
uv tool upgrade iopenpod |
Requires Python 3.11+.
After installing invoke in your shell with:
iopenpodIf iopenpod is not on your shell PATH yet, run pipx ensurepath for pipx installs or uv tool update-shell for uv tool installs.
Installs should be updated with the same tool used to install them.
Required tools: Install FFmpeg with
ffprobefor transcoding and media probing, and Chromaprint for acoustic fingerprinting during sync.
- Connect your iPod - Make sure it is mounted as a drive.
- Select the device - Choose the detected iPod in iOpenPod. If the device is detected incorrectly, please open an issue.
- Browse and edit - Manage tracks, playlists, podcasts, artwork, and metadata.
- Sync - Choose PC media folder(s), configure the sync, review the proposed changes, then apply.
iOpenPod transcodes unsupported audio and video formats to iPod-compatible output using FFmpeg. ffprobe is needed to detect incompatible formats. Converted files are optionally cached so repeat syncs do not need to re-encode unchanged media.
The built-in podcast manager can search, subscribe, download episodes, and sync them to an iPod.
ListenBrainz and Last.FM scrobbling can submit play history during sync.
Supports music, audiobooks, podcasts, videos, and photos.
Files can be copied directly to the iPod by dragging them into the app, without using the full PC-folder sync workflow.
Play counts, ratings, and skip counts can be read from the iPod and synced back to the PC library metadata where supported.
Embedded or folder artwork is extracted, resized, and written to the iPod artwork database.
Before writing changes, iOpenPod presents a review of planned additions, removals, metadata updates, and artwork changes.
Standard playlists and rule-based smart playlists can be browsed and managed.
iOpenPod saves a database snapshot before sync so earlier states can be restored if needed.
Settings are available for transcoding, sync behavior, external tools, device handling, and related workflows.
iOpenPod supports most iPods. iPod Shuffle support is planned; iPod Touch support is not planned, but may be possible in the future.
| Device | Status | Notes |
|---|---|---|
| iPod "Classic" (all generations 1st-7th) | Supported | |
| iPod Mini (all generations 1st and 2nd) | Supported | |
| iPod Nano (all generations 1st-7th) | Supported | |
| iPod Shuffle | Planned | Shuffle uses a different DB Structure. ETA ~4 mo |
| iPod Touch | Not planned | Touch requires accessing the device through non file-system protocols |
To run iOpenPod from source, clone the repository and use uv sync.
- uv (Python package manager)
- FFmpeg with
ffprobe(for transcoding and media probing) - Chromaprint (for fingerprinting)
git clone https://github.com/TheRealSavi/iOpenPod.git
cd iOpenPod
uv sync
uv run python main.pyuv sync installs dependencies into a local virtual environment.
iOpenPod/
├── GUI/ # PyQt6 interface
│ ├── app.py # Main window
│ └── widgets/ # Album grid, track list, sidebar, sync review, etc.
├── iTunesDB_Parser/ # Reads iPod's binary iTunesDB
├── iTunesDB_Writer/ # Writes iTunesDB
├── ArtworkDB_Parser/ # Reads ArtworkDB binary format
├── ArtworkDB_Writer/ # Writes album art to .ithmb files
├── SyncEngine/ # Fingerprinting, diffing, transcoding, sync execution
├── PodcastManager/ # Podcast search, subscription, and download
├── SQLiteDB_Writer/ # SQLite DB for Nano 6G/7G
└── main.py # Entry point
The sync engine matches tracks between the PC library and iPod using acoustic fingerprints from Chromaprint. This allows the same recording to be matched across re-encodes, format changes, and metadata edits.
- Scan both the PC media folder and iPod's iTunesDB
- Compute or read cached fingerprints for each track
- Diff by fingerprint to classify: new, removed, changed, or matched
- Present the sync plan for review
- Copy/transcode files, update the database, sync artwork and play counts
- Rebuild the iTunesDB binary with the correct device-specific checksum
Useful contributions include:
- Hardware testing on different iPod models
- macOS and Linux testing
- Bug reports with steps to reproduce and logs
- Focused pull requests for documented issues
- Joining the discord to coordinate
Please open an issue before starting major changes, or use the Discord server to discuss implementation details.
- libgpod — C library for iPod database access (the reference implementation this project learned from)
- gtkpod — GTK+ iPod manager
- Rockbox — Open-source firmware replacement for iPods
iOpenPod is free and open source. Donations are optional and help support development.
MIT — see LICENSE.









