Copy your Nintendo Switch 2 (and original Switch) screenshots and video clips to your Mac over a USB cable — one command, safe to re-run.
macOS has no native MTP support, so there's no Finder mount and no Image Capture for the Switch. This is a single, dependency-free Python script that pulls everything off the console anyway and drops it into ~/switch-screenshots/.
Pulls every screenshot and video clip off your Switch into ~/switch-screenshots/ as a flat folder of files with their original names. It remembers what it has already copied, so you can run it again any time and it only fetches what's new.
- Single Python file, standard library only — no
pip install, no virtualenv. - Original filenames, flat layout, capture timestamps preserved.
- Built-in dedup: re-running is always safe.
- Resumable: progress is saved after every small batch.
- macOS (Apple Silicon or Intel).
gphoto2— if it's missing, the script offers tobrew installit for you. Or install it yourself:(needs Homebrew)brew install gphoto2
- Python 3.7+ — the
python3that ships with macOS is fine. No packages to install. - A USB-C data cable (charge-only cables won't work).
# 1. Grab the script
curl -fLO https://raw.githubusercontent.com/radical-beard/switch-screenshots-mac/main/get-switch-screenshots.py
# 2. On the console, open the "Copy to PC over USB" screen (see below),
# plug the cable into the BOTTOM USB-C port, then run:
python3 get-switch-screenshots.pyThat's it. If gphoto2 isn't installed yet, the script asks to install it for you. Your screenshots and clips land in ~/switch-screenshots/.
If you've cloned the repo, it's wired for breach:
breach setup # install gphoto2
breach run # transfer new screenshots/clips
breach list # list what's on the console
breach preview # show what would transfer, download nothing- Open Settings → Data Management → Manage Screenshots and Videos → Copy to PC over USB.
- Leave that screen showing — the console only exposes its album while it's open.
- Plug the USB-C cable into the bottom port of the console (the one you charge from in handheld mode).
- Not the top port.
- Not through the dock.
python3 get-switch-screenshots.py # transfer everything new
python3 get-switch-screenshots.py --list # just list what's on the console, transfer nothing
python3 get-switch-screenshots.py --dry-run # show what would transfer, download nothing
python3 get-switch-screenshots.py --limit 5 # transfer at most 5 new files (handy for a first test)| Flag | Effect |
|---|---|
--list |
Print every file on the console (grouped by game) and exit. |
--dry-run |
Show exactly what would be fetched without downloading anything. |
--limit N |
Stop after N new files. Great for a quick sanity check. |
Switch filenames are timestamp-based and globally unique, so the script skips anything it has seen before. It checks three things, so a re-run never duplicates work:
- A manifest at
~/.local/share/switch-screenshots/manifest.jsonrecording everything transferred. - An on-disk name check against
~/switch-screenshots/, so re-runs stay correct even if the manifest is ever deleted. - A SHA-256 content hash of every file, so identical content is never stored twice — even under a different name.
The manifest is flushed after each small batch, so an interrupted run (or a yanked cable) just picks up where it left off next time.
| Path | Contents |
|---|---|
~/switch-screenshots/ |
Your screenshots and video clips (flat, original names). |
~/.local/share/switch-screenshots/manifest.json |
Dedup state. |
~/.local/share/switch-screenshots/staging/ |
Temporary download staging (auto-managed). |
"Could not find the Switch."
- Make sure the Copy to PC over USB screen is open on the console.
- Use the bottom USB-C port, directly — not the top port, not the dock.
- Confirm your cable carries data, not just power. Swap cables if unsure.
- Sanity check:
gphoto2 --auto-detectshould list a Nintendo/Switch device while the copy screen is open.
It worked, then got stuck mid-transfer.
- Unplug and replug the cable to reset the connection, then re-run. Thanks to dedup it resumes cleanly and won't re-copy finished files.
"The Switch is connected but no screenshots/videos are visible."
- The console is plugged in but not in transfer mode — open the Copy to PC over USB screen and re-run.
The Switch presents itself as an MTP device (PTP with a Nintendo vendor extension). On macOS that's surprisingly hard to deal with:
- macOS has no native MTP support. There's no Finder mount and no Image Capture support — Apple's
ImageCaptureCoreframework sees zero cameras when the Switch is plugged in. - So the script drives
gphoto2(Homebrew's CLI front-end tolibgphoto2's PTP/MTP driver), the one tool that reliably talks to the console here. - macOS's
ptpcameradservice grabs the USB interface the moment a still-image device appears, blockinggphoto2from claiming it. The script stopsptpcameradonce right before each session (it's user-owned, so nosudo). It deliberately does not kill it in a loop — that re-enumerates the USB bus and corrupts transfers. - It runs one
gphoto2session per folder, using repeated--get-file Nflags with per-folder, 1-based indices. (gphoto2 --list-filesnumbers files globally across the whole tree, but--folder F --get-file nexpectsnrelative to that folder — a subtle mismatch the script handles for you.)
The result is a transfer that "just works" from a single command, hiding a fair amount of macOS USB plumbing.
MIT — see LICENSE.