Skip to main content

clickwheel

PyPI CI docs Python License: MIT

Sync a music library to a classic iPod from a modern Mac, no iTunes required. Scan, clean up metadata, pick what goes on the iPod, and sync, all from the terminal. Optional MCP server lets Claude or other AI clients drive it conversationally.

Full documentation: docs.clickwheel.fm.

Install

pipx install clickwheel

Optional extras:

pipx inject clickwheel 'clickwheel[mcp]'   # MCP server for Claude / AI clients

clickwheel fix (metadata cleanup) runs entirely on the base install, no extras required.

Quick Start

Point clickwheel at your music:

mkdir -p ~/.clickwheel
echo "music_dir: /path/to/your/music" > ~/.clickwheel/config.yaml

Then index it and pick what goes on the iPod:

clickwheel scan      # build the library index
clickwheel select    # interactive checkbox picker
clickwheel sync      # push to the iPod

Commands

The iPod workflow:

Command Description
clickwheel scan Index your library; report metadata gaps
clickwheel convert Transcode FLAC albums to iPod-playable MP3
clickwheel fix Fill in album art, years, genres; repair tags
clickwheel select Interactive checkbox picker for the iPod
clickwheel playlist List saved playlists or show one's tracks
clickwheel edit Add/remove artists or set a description
clickwheel heal Drop playlist refs to files no longer on disk
clickwheel delete Delete a saved playlist
clickwheel diff Preview what would change on the iPod
clickwheel sync Push your playlist to the iPod
clickwheel ls Show what's on the iPod
clickwheel eject Safely unmount the iPod

clickwheel convert transcodes selected FLAC albums to iPod-playable MP3 (interactive picker, or --artist/--album/--all-flac; --bitrate, --force). Output goes to transcode_dir and is indexed into the library, so the resulting MP3s flow through select/sync like any other track. It requires ffmpeg on your PATH (brew install ffmpeg).

Each optional integration has its own doc:

  • Plex / Plexamp: push/pull playlists between clickwheel and a Plex music library. See the Plex guide.
  • Apple Music: push/pull/delete playlists in your Apple Music account; syncs across Apple devices via iCloud Music Library. See the Apple Music guide.
  • Last.fm: submit iPod listens. See the scrobbling guide.

Configuration

# ~/.clickwheel/config.yaml
music_dir: /Volumes/Music/Library
ipod_capacity_gb: 64
auto_scan: true
transcode_dir: ~/.clickwheel/transcoded
transcode_bitrate: 320
  • transcode_dir — where clickwheel convert writes converted MP3s (default ~/.clickwheel/transcoded). Kept outside your music library so Plex and the scanner don't pick them up.
  • transcode_bitrate — MP3 CBR bitrate in kbps for conversion (default 320).

Environment variables (MUSIC_DIR, AUTO_SCAN, etc.) override config values. See the configuration reference for the full schema and fix walkthrough. Integrations (Plex, Apple Music, Last.fm) are all off by default; opt in via the per-integration guides linked above.

MCP server

clickwheel ships an optional MCP server so Claude Code, Claude Desktop, and other MCP-aware clients can drive your library conversationally:

What's on my iPod, and how full is it?

Build me a 45-minute late-night indie folk playlist using only tracks I actually own.

Sync the 'ipod' playlist to my iPod and then eject it.

Quick start with Claude Code:

pipx inject clickwheel 'clickwheel[mcp]'
claude mcp add clickwheel clickwheel-mcp --scope user

The server exposes tools across library, playlist, iPod, Plex, Apple Music, and Last.fm domains, plus a build_playlist prompt with anti-hallucination rules. Destructive operations (delete_playlist, sync_playlist_to_ipod) are gated by client confirmation.

For client setup (Claude Code, Claude Desktop, mobile) and the full tool reference, see the MCP server docs.

Requirements

  • macOS (iPod sync depends on macOS disk utilities)
  • Python 3.11+
  • iPod Classic with stock firmware, connected via USB
  • FLAC files are excluded from sync (stock firmware limitation); use clickwheel convert to transcode them to MP3
  • ffmpeg on your PATH for clickwheel convert (brew install ffmpeg)

Contributing

See CONTRIBUTING.md for dev setup, testing, and commit conventions.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clickwheel-0.19.0.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clickwheel-0.19.0-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file clickwheel-0.19.0.tar.gz.

File metadata

  • Download URL: clickwheel-0.19.0.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for clickwheel-0.19.0.tar.gz
Algorithm Hash digest
SHA256 366b6cd2dc09c804645f7667c016fff17038a29c5f9fac8d6a18863989c26603
MD5 7768021370f269157ca233503828cda8
BLAKE2b-256 aaf920fa9fe902374f1a92cb6269fe795b491ca4880637812a596f9ef7adf0ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for clickwheel-0.19.0.tar.gz:

Publisher: publish.yml on pdugan20/clickwheel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clickwheel-0.19.0-py3-none-any.whl.

File metadata

  • Download URL: clickwheel-0.19.0-py3-none-any.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for clickwheel-0.19.0-py3-none-any.whl
Algorithm Hash digest
SHA256 188d4faccddbcac8985b28226d823e28d0b78c7e9376b7f9951742c9880592e1
MD5 11a390dca156a9ab8687cd3a0383f7c4
BLAKE2b-256 6d0e3ffd66c2686d75e6d9e8ecd711095dab46895fefb03e6158d4355a4eeb2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for clickwheel-0.19.0-py3-none-any.whl:

Publisher: publish.yml on pdugan20/clickwheel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page