Android-Media-Importer

May 1, 2026 · View on GitHub

A Claude Code plugin for moving (or copying) media from a connected Android phone into your local filesystem, with user-configured source→destination mappings.

What it does

  • Talks to your phone over ADB (USB debugging).
  • Routes files by MIME type (not file extension) — HEIC, DNG, WEBP, AVIF, MOV, MKV, 3GP, opus, m4a all sort correctly out of the box.
  • Per-mapping options:
    • flat dest, or split image_dest / video_dest subtrees
    • optional date-stamped folder (DDMM, DD-MM, YYYY-MM-DD, YYYYMMDD, or none)
    • optional portrait/ / landscape/ split for images and videos (orientation-aware via EXIF + ffprobe rotation)
    • MIME allowlist (image,video, audio, etc.)
    • move (delete from phone after byte-size-verified copy) or copy
  • Incremental by default — only files newer than the newest already in the destination.
  • Auto-creates missing destination dirs.
  • Dry-run preview supported.

Skills

  • onboard — interactive setup. Probes the phone for common media roots, walks you through defining mappings, writes <workspace>/config.yaml.
  • import-media — runs the import. import-media with no argument runs every mapping; pass a label (e.g. import-media camera) to run one.

Requirements

  • adb (USB debugging enabled and authorised on the phone)
  • file, exiftool, ffprobe

Debian/Ubuntu:

sudo apt install android-tools-adb file libimage-exiftool-perl ffmpeg

Workspace

User config lives at $CLAUDE_USER_DATA/android-media-importer/config.yaml (or $XDG_DATA_HOME/claude-plugins/android-media-importer/, fallback ~/.local/share/claude-plugins/android-media-importer/). Nothing is written under ~/.claude/.

Move semantics

When a mapping is mode: move, a phone-side file is deleted only after the local copy's size matches adb shell stat -c%s on the source. Mismatches are reported and the phone copy is preserved.

License

MIT.