Python script to back up Photos to SD card or HDD
FlyingDiver last edited by
Experienced Python developer here, but new to Pythonista and toolkits on iOS.
I'm looking for (or to write) a script that will backup the Photo Library to removable SD cards.
Going on a trip soon and I'm trying to avoid taking my laptop and it's accessories. I can load photos from my camera's memory card into the iOS Photo Library (camera roll). But then backing them up to some other media is really kinda painful. I can connect an SD card or USB HDD to the iPad, but saving the images requires manually selecting images and then exporting them. I'd like to automate that task.
I haven't found a script that does exactly that, or even a close approximation. Anyone have anything I can start with?
@FlyingDiver, check the photos module for accessing the pictures.
You could consider letting Pythonista pick the right images and package them in a zip file, which you could then share to your SD manager app, if that is what you are using. Or copy images one by one directly to the SD, if you know the path to it, Internet suggests something like /var/mobile/Media/DCIM might work.
if you know the path to it, Internet suggests something like /var/mobile/Media/DCIM might work.
Don't forget that you need to "open an external folder" in Pythonista and that this functionality only was existing in the last beta, thus we need to wait for the new version
Edit: just tried with path = '/private/var/mobile/Library/LiveFiles/com.apple.filesystems.userfsd/HOOTOO/' which is the path when I import a file from an usb Drive but I get an access error since I can't define a folder as "open external folder" in Pythonista.
Files app shows
But Pythonista open external does not even show the usb line
@FlyingDiver Assume you have imported your photos in the camera roll, you could import them, via script, into a Pythonista local folder, and there, via edit/share/save to files copy all your folder on an USB drive, like here
@FlyingDiver a (quick and dirty) script to show how to import, from the camera roll, all photos created after a specific date (ex: all new photos of a new day during your trip, if you run it each day) and to save them into Pythonista, up to you to specify a particular folder.
So all exifs (taken date, device, eventual gps, ...) are also copied into the jpg file.
from datetime import datetime from objc_util import * import photos d0 = datetime(2016,2,19) # date of first photo to save all_assets = photos.get_assets() for asset in all_assets: if asset.creation_date > d0: file_name = str(ObjCInstance(asset).valueForKey_('filename')) b = asset.get_image_data().getvalue() with open(file_name, mode='wb') as fil: fil.write(b)
@mikael for info, when I connect my Panasonic LUMIX to my iPad via the Apple USB adapter, a photo is accessed as
@cvp, accessible from Pythonista?
@mikael No, and I don't understand why Files app shows the usb connections but Pythonista "open external" does not 😢
Édit: it is accessible if you, in Files app, manually select a file and share to a Pythonista script.
FlyingDiver last edited by
Maybe it wasn't clear in my original post. I'm planning on doing the import using the Photos app. Then some initial culling of images. Then I want a script to backup any new images to external media. @cvp's post shows me how to get the images, which is great. But currently Pythonista can't write to the external media? I would have to use iOS "Share" to copy them from Pythonista's sandbox to the external media?
@FlyingDiver Assume you import your photos in the photos app.
The script shows how to import them from the photos app to a Pythonista folder.
Yes to "I would have to use iOS "Share" to copy them from Pythonista's sandbox to the external media?"
Then, in Pythonista, you can copy a folder to an external device like I also show
@FlyingDiver Personally, I plug an USB drive/flash to an usb slot of my router and I'm able, via SMB, to copy local Pythonista files to a folder of my external drive.But, I agree that in holiday/trip you don't have a router
Hoping next version of Pythonista will allow access to USB drives
dialogs.pick_document() does not show an usb Drive but shortcut command "get file" shows it, thus I think it could be possible, but perhaps with iOS 13 functions in future Pythonista version.
@FlyingDiver with the new beta, and thus in the v3.3 arriving begin of next week, you will be able to open an external folder on an usb Drive (flash, sd, Drive) connected to your iPhone/iPad, and thus save on it your local photos.
mikael last edited by mikael
@FlyingDiver, thus, a script like this should now be feasible:
- (After you have imported and edited the photos.)
- Opens the photo gallery.
- You pick the first photo that should be backed up.
- That photo and all newer photos are copied to the external drive, potentially to a specific folder created with today’s date or a running number.
Would that fit your use case?
@mikael it is what does my little scrip above, you only need to add a path in the file write, a path like some posts above.
@cvp, yes, indeed. I was just thinking about the usability, i.e. visually picking the first image to be saved.
@mikael ok, sorry. Wen I go in holidays, I always backup my photos from my camera to my iPad, until now via wifi, via usb in the future. But often, I have a lot of photos per day and it is sometimes difficult to say/pick which is the first to save visually. And I give the today date (I back up in the evening) and it is done.
jmv38 last edited by
@cvp what camera do you use? Just curious.
@jmv38 Panasonic Lumix DMC-TZ40