Maksim Totmin aaaf354c9d fix: restore JumpStyle seek slider and fix fractional truncation bug
- Add JumpStyle(QProxyStyle) to player_header.py so clicking the seek
  bar jumps to the clicked position (lost during player_header extraction)
- Fix _on_slider_user_action: int(frac) always truncated to 0
  (e.g. 500/1000=0.5 → int(0.5)=0), now emits raw value 0-1000
- Fix _on_user_seek_frac: properly converts slider value (0-1000) to
  playback position with bounds clamping
2026-06-01 20:09:52 +07:00

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)
pip install -r requirements.txt

Install FFmpeg:

  • macOS: brew install ffmpeg
  • Linux: sudo apt-get install ffmpeg
  • Windows: Download from ffmpeg.org

Usage

GUI Application

python src/main.py

AppImage (portable)

./neo-pod-desktop-x86_64.AppImage

Build from source:

./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

Description
Desktop manager for iPod Nano 7G — download, convert, transfer music with cover art.
Readme 1.9 MiB
Languages
Python 98.4%
Shell 1.4%
Batchfile 0.2%