Skip to content

CLI Commands

Complete reference for all podkit CLI commands.

Global Options

These options work with all commands:

OptionDescription
-d, --device <name|path>Device name from config, or path to iPod mount point
--config <path>Path to config file (default: ~/.config/podkit/config.toml)
-v, --verboseIncrease verbosity (stackable: -v, -vv, -vvv)
-q, --quietSuppress non-essential output
--jsonOutput in JSON format
--no-colorDisable colored output
--no-tipsSuppress contextual tips
--helpShow help for command
--versionShow version number

Commands Overview

CommandDescription
podkit initCreate a default configuration file
podkit migrateMigrate config file to the latest version
podkit syncSync music and/or video collections to iPod
podkit deviceDevice management commands
podkit collectionCollection management commands
podkit doctorRun health checks on iPod, repair artwork
podkit ejectSafely eject iPod (shortcut for device eject)
podkit mountMount an iPod (shortcut for device mount)
podkit completionsGenerate shell completion scripts

podkit init

Create a default configuration file.

Terminal window
podkit init [options]

Options

OptionDescription
-f, --forceOverwrite existing config file
--path <path>Config file path (default: ~/.config/podkit/config.toml)

Examples

Terminal window
# Create default config
podkit init
# Overwrite existing config
podkit init --force
# Create config at a custom path
podkit init --path ~/my-podkit-config.toml

podkit migrate

Migrate the config file to the latest version. Run this when podkit reports that your config is outdated.

Terminal window
podkit migrate [options]

Options

OptionDescription
-n, --dry-runShow what would change without writing
-y, --yesSkip the confirmation prompt

Examples

Terminal window
# Preview changes without applying
podkit migrate --dry-run
# Apply migrations (with confirmation prompt)
podkit migrate
# Apply without prompting (for scripts)
podkit migrate --yes
# Migrate a config at a non-default path
podkit migrate --config /path/to/config.toml

Behavior

  1. Reads the current config version
  2. Lists all pending migrations (version chain from current to latest)
  3. For interactive migrations, prompts for user input — aborting leaves the config unchanged
  4. Shows a diff of the changes
  5. Asks for confirmation (unless --yes is passed)
  6. Backs up the original file (e.g., config.toml.backup.2026-01-01)
  7. Writes the migrated config

If the config is already at the latest version, the command reports success with no changes.

podkit sync

Sync music and/or video collections to an iPod.

Terminal window
podkit sync [options]

Options

OptionDescription
-t, --type <type>Content type: music or video (repeatable; omit for both)
-c, --collection <name>Collection name to sync (searches both music and video)
-n, --dry-runShow what would be synced without making changes
--quality <preset>Unified quality preset for audio and video: max, high, medium, low
--audio-quality <preset>Audio-specific quality override: max, high, medium, low
--video-quality <preset>Video-specific quality override: max, high, medium, low
--encoding <mode>Encoding mode: vbr (default) or cbr
--transfer-mode <mode>Transfer mode: fast (default), optimized, or portable. Controls whether extra file data is preserved or stripped during sync
--force-transfer-modeRe-process all tracks when changing transfer mode
--filter <pattern>Only sync tracks matching pattern
--no-artworkSkip artwork transfer
--check-artworkDetect changed artwork by comparing fingerprints between syncs
--skip-upgradesSkip file-replacement upgrades for changed source files
--force-transcodeRe-transcode all lossless-source tracks regardless of bitrate match
--force-sync-tagsWrite sync tags to all matched transcoded tracks without re-transcoding
--force-metadataRewrite metadata on all matched tracks without re-transcoding or re-transferring files
--deleteRemove tracks from iPod that are not in the source
--ejectEject iPod after successful sync

Examples

Terminal window
# Preview what would be synced
podkit sync --dry-run
# Sync music only
podkit sync -t music
# Sync video only
podkit sync -t video
# Sync multiple types explicitly
podkit sync -t music -t video
# Sync a specific collection
podkit sync -c jazz
# Sync music collection named "main"
podkit sync -t music -c main
# Sync to a specific device
podkit sync -d myipod
# Sync with lower quality to save space
podkit sync --quality medium
# Best quality — ALAC on supported devices
podkit sync --audio-quality max
# Set unified quality, but override audio specifically
podkit sync --quality medium --audio-quality high
# Remove orphaned tracks and eject when done
podkit sync --delete --eject
# Skip artwork transfer for faster sync
podkit sync --no-artwork

Interruption Behaviour

Pressing Ctrl+C during sync triggers a graceful shutdown:

  1. The current operation finishes (no partial files)
  2. All completed tracks are saved to the iPod database
  3. The process exits with code 130

Press Ctrl+C a second time to force-quit immediately. The database is saved periodically during sync (every 50 music tracks or 10 video transfers), so even a force-quit or crash loses at most a small batch of recent work.

If a sync is interrupted, run podkit doctor to check for orphaned files that may be wasting space on the iPod.

podkit device

Device management commands. Running podkit device with no subcommand lists all configured devices.

All device subcommands use the global -d, --device flag to specify the device name or path.

Terminal window
podkit device [subcommand] [options]

podkit device list

List all configured devices.

Terminal window
podkit device list

podkit device scan

Scan for connected iPod devices. Shows volume name, UUID, size, and mount status for each detected iPod. Useful for finding the volume UUID needed to configure devices.

Terminal window
podkit device scan
podkit device scan --format json

podkit device add

Detect a connected iPod and add it to the config.

Terminal window
podkit device add -d <name> [options]
OptionDescription
--path <path>Explicit path to iPod mount point (auto-detected if omitted)
-y, --yesSkip confirmation prompts
--quality <preset>Set transcoding quality: max, high, medium, low
--audio-quality <preset>Set audio quality (overrides --quality)
--video-quality <preset>Set video quality: max, high, medium, low
--encoding <mode>Set encoding mode: vbr or cbr
--artwork / --no-artworkEnable or disable artwork sync for this device
Terminal window
# Auto-detect connected iPod
podkit device add -d classic
# Specify mount point explicitly
podkit device add -d classic --path /Volumes/IPOD
# Add with quality settings
podkit device add -d nano --quality medium --no-artwork
# Add with best quality (ALAC on supported devices)
podkit device add -d classic --audio-quality max --video-quality high

podkit device remove

Remove a device from the config.

Terminal window
podkit device remove -d <name>
OptionDescription
--confirmSkip confirmation prompt

podkit device set

Update settings on an existing device.

Terminal window
podkit device set -d <name> [options]
OptionDescription
--quality <preset>Set transcoding quality: max, high, medium, low
--audio-quality <preset>Set audio quality (overrides --quality)
--video-quality <preset>Set video quality: max, high, medium, low
--encoding <mode>Set encoding mode: vbr or cbr
--artwork / --no-artworkEnable or disable artwork sync
--clear-qualityRemove quality setting (use global default)
--clear-audio-qualityRemove audio quality setting
--clear-video-qualityRemove video quality setting
--clear-artworkRemove artwork setting (use global default)
Terminal window
# Set quality on a device
podkit device set -d classic --quality max
# Set audio and video quality separately
podkit device set -d nano --audio-quality medium --video-quality low
# Disable artwork
podkit device set -d nano --no-artwork
# Reset to global defaults
podkit device set -d classic --clear-quality --clear-artwork

podkit device default

Set or show the default device.

Terminal window
podkit device default [-d <name>]
OptionDescription
--clearClear the default device
Terminal window
# Show current default
podkit device default
# Set default device
podkit device default -d classic
# Clear the default
podkit device default --clear

podkit device info

Display device configuration and live status (storage, track count, model).

Terminal window
podkit device info [-d <name>]
Terminal window
# Show default device info
podkit device info
# Show info for a named device
podkit device info -d classic

podkit device music

Show music on an iPod. By default, displays summary stats (track/album/artist counts and file type breakdown).

Terminal window
podkit device music [-d <name>] [options]
OptionDescription
--tracksList all tracks (detailed view)
--albumsList albums with track counts
--artistsList artists with album/track counts
--format <fmt>Output format: table, json, csv (default: table)
--fields <list>Comma-separated fields to show with --tracks (see Display Fields)
Terminal window
# Show music stats (default)
podkit device music
# List all tracks
podkit device music --tracks
# Browse by album or artist
podkit device music --albums
podkit device music --artists
# Export as JSON
podkit device music --json
podkit device music --tracks --json
# Show specific fields
podkit device music --tracks --fields title,artist,album,genre,year

podkit device video

Show video content on an iPod. By default, displays summary stats.

Terminal window
podkit device video [-d <name>] [options]
OptionDescription
--tracksList all tracks (detailed view)
--albumsList albums with track counts
--artistsList artists with album/track counts
--format <fmt>Output format: table, json, csv (default: table)
--fields <list>Comma-separated fields to show with --tracks (see Display Fields)

podkit device clear

Remove content from the iPod.

Terminal window
podkit device clear [-d <name>] [options]
OptionDescription
--type <type>Content type to clear: music, video, or all (default: all)
--confirmSkip confirmation prompt (for scripts)
--dry-runShow what would be removed without removing
Terminal window
# Preview what would be cleared
podkit device clear --dry-run
# Clear only music
podkit device clear --type music
# Clear everything, no prompt
podkit device clear --confirm

podkit device reset

Reset the iPod database. This erases all tracks and recreates the database from scratch.

Terminal window
podkit device reset [-d <name>] [options]
OptionDescription
-y, --yesSkip confirmation prompt
--dry-runShow what would happen without making changes

podkit device reset-artwork

Wipe all artwork from the iPod and clear artwork sync tags. The next podkit sync will re-add artwork from your source collection.

This is also available through the doctor workflow as podkit doctor --repair artwork-reset. See iPod Health Checks for when to use each approach.

Terminal window
podkit device reset-artwork [-d <name>] [options]
OptionDescription
-y, --yesSkip confirmation prompt
--dry-runShow what would happen without making changes

podkit device eject

Safely unmount an iPod device. Also available as podkit device unmount.

Terminal window
podkit device eject [-d <name>] [options]
OptionDescription
-f, --forceForce unmount even if device is busy

podkit device mount

Mount an iPod device.

Terminal window
podkit device mount [-d <name>] [options]
OptionDescription
--disk <identifier>Disk identifier (e.g., /dev/disk4s2)
--dry-runShow mount command without executing
Terminal window
# Mount default device
podkit device mount
# Mount by name
podkit device mount -d classic
# Mount using disk identifier
podkit device mount --disk /dev/disk4s2
# Show what mount command would run
podkit device mount --dry-run

podkit device init

Initialize an iPod database on a device. Use this for blank or corrupted iPods.

Terminal window
podkit device init [-d <name>] [options]
OptionDescription
-f, --forceOverwrite existing database
-y, --yesSkip confirmation prompt

podkit collection

Manage music and video collections. Running podkit collection with no subcommand lists all configured collections.

Terminal window
podkit collection [subcommand] [options]

podkit collection list

List configured collections.

Terminal window
podkit collection list [-t <type>]
OptionDescription
-t, --type <type>Filter by type: music or video
Terminal window
# List all collections
podkit collection list
# List only music collections
podkit collection list -t music

podkit collection add

Add a new collection to the config.

Terminal window
podkit collection add -t <type> -c <name> --path <path>
OptionDescription
-t, --type <type>Collection type: music or video
-c, --collection <name>Collection name (letters, numbers, hyphens, underscores)
--path <path>Path to the collection directory
Terminal window
# Add a music collection
podkit collection add -t music -c main --path /Volumes/Media/music
# Add a video collection
podkit collection add -t video -c movies --path /Volumes/Media/movies

podkit collection remove

Remove a collection from the config.

Terminal window
podkit collection remove -c <name>
OptionDescription
-c, --collection <name>Collection name to remove
-y, --yesSkip confirmation prompt

podkit collection default

Set or show the default collection for a type.

Terminal window
podkit collection default -t <type> [-c <name>]
OptionDescription
-t, --type <type>Collection type: music or video
-c, --collection <name>Collection name (omit to show current default)
--clearClear the default for this type
Terminal window
# Show default music collection
podkit collection default -t music
# Set default music collection
podkit collection default -t music -c main
# Set default video collection
podkit collection default -t video -c movies
# Clear default
podkit collection default -t music --clear

podkit collection info

Display collection details.

Terminal window
podkit collection info -c <name>

podkit collection music

Show music in a collection. By default, displays summary stats (track/album/artist counts and file type breakdown). Scans the source directory or Subsonic server.

Terminal window
podkit collection music [-c <name>] [options]
OptionDescription
-c, --collection <name>Collection name (uses default if omitted)
--tracksList all tracks (detailed view)
--albumsList albums with track counts
--artistsList artists with album/track counts
--format <fmt>Output format: table, json, csv (default: table)
--fields <list>Comma-separated fields to show with --tracks (see Display Fields)

podkit collection video

Show videos in a collection. By default, displays summary stats.

Terminal window
podkit collection video [-c <name>] [options]
OptionDescription
-c, --collection <name>Collection name (uses default if omitted)
--tracksList all tracks (detailed view)
--albumsList albums with track counts
--artistsList artists with album/track counts
--format <fmt>Output format: table, json, csv (default: table)
--fields <list>Comma-separated fields to show with --tracks (see Display Fields)

podkit doctor

Run health checks on an iPod and optionally repair detected issues.

Terminal window
podkit doctor [options]

Options

OptionDescription
--repair <check-id>Repair a specific check by ID, e.g. artwork-rebuild (requires -d; some checks also need -c)
--dry-runPreview repair without modifying the iPod
--format csvExport orphan file list as CSV (path and size)

Examples

Terminal window
# Run all health checks
podkit doctor
# Check a specific device
podkit doctor -d myipod
# Repair corrupted artwork (device and collection are required)
podkit doctor -d myipod -c main --repair artwork-rebuild
# Clear all artwork without a source collection
podkit doctor --repair artwork-reset
# Preview what repair would do
podkit doctor -d myipod -c main --repair artwork-rebuild --dry-run
# Verbose output with orphan breakdown by directory and extension
podkit doctor --verbose
# Export orphan file list as CSV
podkit doctor --format csv > orphans.csv

Interruption Behaviour

Pressing Ctrl+C during a repair triggers a graceful shutdown — partial repair progress is saved before exiting.

Health Checks

CheckDescriptionRepair
Artwork IntegrityVerifies ArtworkDB offsets are within .ithmb file bounds--repair artwork-rebuild -c <collection>
Artwork ResetClears all artwork without needing a source collection--repair artwork-reset
Orphan FilesDetects unreferenced files in iPod_Control/Music that waste storage--repair orphan-files

See iPod Health Checks for a full guide to using doctor, including when to use each repair option.

podkit eject

Safely unmount an iPod device. This is a shortcut for podkit device eject. Also available as podkit unmount.

Terminal window
podkit eject [-d <name>] [options]
OptionDescription
-f, --forceForce unmount even if device is busy
Terminal window
# Eject default device
podkit eject
# Eject named device
podkit eject -d classic
# Force eject
podkit eject --force

podkit mount

Mount an iPod device. This is a shortcut for podkit device mount.

Terminal window
podkit mount [-d <name>] [options]
OptionDescription
--disk <identifier>Disk identifier (e.g., /dev/disk4s2)
--dry-runShow mount command without executing
Terminal window
# Mount default device
podkit mount
# Mount using disk identifier
podkit mount --disk /dev/disk4s2

podkit completions

Generate and install shell completion scripts for tab completion support. The completions are generated from the actual CLI command tree, so they stay in sync automatically.

Completions include:

  • Subcommands and flags — all commands, subcommands, aliases, and options
  • Static argument values — options like --quality, --type, --encoding, and --format offer their known values (e.g. max, high, medium, low)
  • Dynamic argument values--device and --collection complete with names from your config file

podkit completions install

Detect your shell and show setup instructions. This is the easiest way to get started.

Terminal window
podkit completions install
OptionDescription
--appendAppend the setup lines to your shell config file automatically
--alias <command>Create a dev shell function wrapping this command (e.g. "bun run podkit")
--name <name>Name for the dev function (default: pk)

The install subcommand detects your shell from $SHELL and finds the correct config file:

ShellConfig file
zsh~/.zshrc
bash (macOS)~/.bash_profile
bash (Linux)~/.bashrc
Terminal window
# Show what to add and where
podkit completions install
# Do it automatically
podkit completions install --append

podkit completions zsh

Print the zsh completion script to stdout.

Terminal window
podkit completions zsh
OptionDescription
--cmd <command>CLI command for dynamic completions (default: podkit). Use when the binary has a different name, e.g. --cmd podkit-dev.

podkit completions bash

Print the bash completion script to stdout.

Terminal window
podkit completions bash
OptionDescription
--cmd <command>CLI command for dynamic completions (default: podkit).

What Gets Completed

ContextCompletions
podkit <TAB>Subcommands: init, sync, device, collection, eject, mount
podkit sync --<TAB>Flags: --dry-run, --quality, --type, --filter, …
podkit sync --quality <TAB>Values: max, high, medium, low
podkit sync --type <TAB>Values: music, video
podkit sync --encoding <TAB>Values: vbr, cbr
podkit device music --format <TAB>Values: table, json, csv
podkit sync -d <TAB>Device names from config
podkit sync -c <TAB>Collection names from config

Examples

Terminal window
# Quickest setup — auto-detect shell and append to config
podkit completions install --append
# See what would be added first
podkit completions install
# Activate in current shell session (temporary)
source <(podkit completions zsh)
# Test completions after setup
podkit <TAB> # Shows subcommands
podkit sync --quality <TAB> # Shows: max high medium low
podkit sync -c <TAB> # Shows collection names from config
podkit sync -d <TAB> # Shows device names from config

Display Fields

The --fields option for track listing commands accepts a comma-separated list of field names.

Available fields:

FieldDescription
titleTrack title
artistArtist name
albumAlbum name
durationTrack duration
albumArtistAlbum artist
genreGenre
yearRelease year
trackNumberTrack number
discNumberDisc number
filePathFile path
artworkWhether artwork is present
compilationWhether track is part of a compilation album
formatAudio format
bitrateBitrate

Default fields: title, artist, album, duration

See Also