neo-pod-desktop/README.md

85 lines
2.9 KiB
Markdown

# neo-pod-desktop
Desktop application for converting, managing and transferring music to iPod Nano 7G. Includes format conversion, metadata management, local library with playback, cover art pipeline, and full iTunesDB/ArtworkDB generation.
## Features
- **Convert** to iPod-compatible formats (AAC/M4A, MP3) with `-map 0:t?` cover preservation
- **Metadata** handling -- title, artist, album, track number, genre, embedded cover art
- **Cover art pipeline** -- extract from audio files (APIC/covr/FLAC pictures), encode to iPod Nano 7G formats (RGB565), write ArtworkDB + ithmb
- **iTunes-style player** -- play local library with cover art display (60x60), seek, volume
- **iPod Nano 7G database** -- full iTunesCDB sync, SQLite management, Locations.itdb with HASHAB checksums
- **Library management** -- sortable table, source/ready track separation, bulk transfer
- **Portable AppImage** -- `scripts/build-appimage.sh` builds standalone x86_64 AppImage
- **Config** stored in `~/.config/neo-pod-desktop/config.ini`
## Installation
### Dependencies
- Python 3.14+
- FFmpeg (for audio conversion)
- libusb (for USB device access on Linux)
```bash
pip install -r requirements.txt
```
Install FFmpeg:
- **macOS**: `brew install ffmpeg`
- **Linux**: `sudo apt-get install ffmpeg`
- **Windows**: Download from [ffmpeg.org](https://ffmpeg.org/download.html)
## Usage
### GUI Application
```bash
python src/main.py
```
### AppImage (portable)
```bash
./neo-pod-desktop-x86_64.AppImage
```
Build from source:
```bash
./scripts/build-appimage.sh
```
## Project Structure
```
src/
main.py -- GUI application (PyQt6)
track_info.py -- TrackInfo data class
audio_converter.py -- FFmpeg audio conversion
metadata_handler.py -- ID3/MP4 tag reading and writing
metadata_editor.py -- GUI metadata editing widget
config_loader.py -- Config in ~/.config/
ipod_device.py -- iPod device detection and file management
ipod_nano7_db.py -- Nano 7G SQLite + iTunesCDB + ArtworkDB
ipod_mhbd_writer.py -- Binary iTunesDB writer
hashab.py -- HASHAB checksum generation
hotkeys.py -- Global keyboard shortcut management
library_cache.py -- Local library caching
artwork/
__init__.py -- Public API
presets.py -- 50+ iPod artwork format definitions
types.py -- ArtworkEntry, EncodedFormatPayload, IthmbLocation
codecs.py -- RGB565/RGB555/UYVY/JPEG encode/decode (numpy)
extractor.py -- Cover extraction from audio files (mutagen)
chunks.py -- ArtworkDB binary parser/writer (MHFD->MHII->MHNI)
writer.py -- ithmb file + ArtworkDB writing
cache.py -- Local JPEG cover cache for player UI
scripts/
build-appimage.sh -- AppImage builder (PyInstaller + appimagetool)
```
## License
MIT License