- Notifications
You must be signed in to change notification settings - Fork5
Automate Apple / MacOS Photos app with python. Wraps applescript calls in python to allow automation of Photos from python code.
License
RhetTbull/PhotoScript
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
PhotoScript provides a python wrapper around Apple Photos applescript interface. With PhotoScript you can interact with Photos using python. Runs only on MacOS. Tested on MacOS Catalina.
PhotosScript is limited by Photos' very limited AppleScript dictionary.
Designed for MacOS Catalina/Photos 5. Preliminary testing on Big Sur/Photos 6 beta shows this should work on Big Sur as well. Photos' AppleScript interface has changed very little since Photos 2 (the earliest version I have access to). This package should work with most versions of Photos but some methods may not function correctly on versions earlier than Photos 5. If you find compatibility issues, open an issue or send a PR.
You can install via pip:
python3 -m pip install photoscript
To install via the source code:
- Installuv if not already installed
- Clone the repo:
git clone git@github.com:RhetTbull/PhotoScript.git
- Change to the directory:
cd PhotoScript
- Run
uv pip install -r pyproject.toml
.
If you want to develop code for PhotoScript, seeREADME_DEV.md.
""" Simple example showing use of photoscript """importphotoscriptphotoslib=photoscript.PhotosLibrary()photoslib.activate()print(f"Running Photos version:{photoslib.version}")album=photoslib.album("Album1")photos=album.photos()forphotoinphotos:photo.keywords= ["travel","vacation"]print(f"{photo.title},{photo.description},{photo.keywords}")new_album=photoslib.create_album("New Album")photoslib.import_photos(["/Users/rhet/Downloads/test.jpeg"],album=new_album)photoslib.quit()
Full documentationhere.
Additional documentation about Photos and AppleScript available on thewiki.
Tested on MacOS Catalina, Photos 5 with 100% coverage.
Photos' AppleScript interface is very limited. For example, it cannot access information on faces in photos nor can it delete a photo. PhotoScript is thus limited. PhotoScript works by executing AppleScript through an Objective-C bridge from python. Every method call has to do a python->Objective C->AppleScript round trip; this makes the interface much slower than native python code. This is particularly noticeable when dealing with Folders which requires significant work arounds.
Where possible, PhotoScript attempts to provide work-arounds to Photos' limitations. For example, Photos does not provide a way to remove a photo from an album. PhotoScript does provide aAlbum.remove()
method but in order to do this, it creates a new album with the same name as the original, copies all but the removed photos to the new album then deletes the original album. This simulates removing photos and produces the desired effect but is not the same thing as removing a photo from an album.
- osxphotos: Python package that provides read-only access to the Photos library including all associated metadata.
- PhotoKit: Experimental Python package for accessing the macOS Photos.app library via Apple's native PhotoKit framework.
Thanks goes to these wonderful people (emoji key):
David Haberthür 📖 | André Anjos 🤔🐛 |
This project follows theall-contributors specification. Contributions of any kind welcome!
For a more comprehensive python interface for Mac automation, seePyXAwhich provides a python interface to Photos and many other Mac applications.
About
Automate Apple / MacOS Photos app with python. Wraps applescript calls in python to allow automation of Photos from python code.