- Rust 99.8%
- C 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| crates/libgpod-sys | ||
| docs | ||
| src | ||
| tests | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
| rust-toolchain.toml | ||
| SPEC.md | ||
ironpod
Put music on an iPod without iTunes.
Browse your files and the device side by side in the terminal, or drive it from the command line — either way, tracks land with their metadata and cover art, and nothing syncs behind your back.
Built in Rust, wrapping libgpod via FFI so the iTunesDB format, per-model checksums and artwork encoding are handled by the library that has always handled them.
Features
- Dual-pane terminal browser — your files on one side, the iPod on the other. Mark across several folders and disks, then copy once.
- Or just use the command line —
cp,ls,rm,info, all where you'd expect them. - Converts on the way over. FLAC, Ogg and Opus can't play on an iPod; ironpod encodes them to AAC with ffmpeg as it copies. Tags and cover art come from the original, not from ffmpeg's output.
- Duplicate-aware. Re-copying a folder you've already copied is free and
safe, and
dedupecleans up what earlier tools left behind. - Cover art, from the file's embedded picture or a
cover.jpgnext to it. - Never syncs. It copies what you asked for and removes what you asked it to remove. Nothing else.
Install
No packages yet — build from source. You'll need a C toolchain and a few development headers first; see docs/install.md for the one-liner for your platform.
git clone https://code.nolog.cz/wokoman/ironpod
cd ironpod
cargo install --path . # puts `ironpod` in ~/.cargo/bin
The first build compiles the vendored libgpod C sources, so give it a minute.
Install ffmpeg too unless you have no FLAC, Ogg or Opus anywhere.
Usage
Run it with no arguments for the browser, opened on the folder you're standing in with the connected iPod on the right:
ironpod
Tab switches panes, Space marks, c copies, d deletes, ? shows every
key. Marks survive walking around, so you can gather an album here, another
one on a network share, and copy them in one go.
Or from the command line:
$ ironpod info
model: Classic (Silver)
generation: Classic
model no: B029
capacity: 80 GB
mountpoint: /Volumes/IPOD
tracks: 1203
playlists: 17
music: 8.8 GB
free: 70.4 GB
$ ironpod cp ~/Music/Harakiri /Volumes/IPOD
[1/11] 01 - Serj Tankian - Cornucopia.mp3
[2/11] 02 - Serj Tankian - Figure It Out.mp3
...
copied 11 of 11 files
You can usually leave the mountpoint out — ironpod finds a mounted volume with
an iPod_Control directory on it.
Status
Working, and used on real hardware: albums copy with full metadata, track
numbers and cover art, and play on the device. dedupe has cleaned 11 real
duplicates off that iPod without touching anything else.
Three things worth knowing before you start:
- FLAC, Ogg and Opus need ffmpeg installed, or they're refused rather than converted.
- No playlist management. You can list playlists, not create or edit them.
- It is not a sync tool and never will be.
Documentation
- Usage — the browser, the commands, transcoding, limitations
- Install — dependencies, toolchain, building
- Contributing — tests, checks, device-test opt-ins
- SPEC.md — design, roadmap, and the libgpod pitfalls found the hard way
Licence
ironpod is MIT.
The vendored libgpod under crates/libgpod-sys/vendor/ is LGPL-2.1+ (see
crates/libgpod-sys/vendor/COPYING). It is compiled at build time via the cc
crate, so it can be replaced with a modified copy.