diff --git a/README.md b/README.md index 561892e6..92ce73c3 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ OSXPhotos provides the ability to interact with and query Apple's Photos.app lib # Table of Contents * [Supported operating systems](#supported-operating-systems) -* [Installation instructions](#installation-instructions) +* [Installation](#installation) * [Command Line Usage](#command-line-usage) + [Command line examples](#command-line-examples) + [Tutorial](#tutorial) @@ -25,6 +25,7 @@ OSXPhotos provides the ability to interact with and query Apple's Photos.app lib + [ExifInfo](#exifinfo) + [AlbumInfo](#albuminfo) + [ImportInfo](#importinfo) + + [ProjectInfo](#projectinfo) + [FolderInfo](#folderinfo) + [PlaceInfo](#placeinfo) + [ScoreInfo](#scoreinfo) @@ -1714,7 +1715,7 @@ Substitution Description {lf} A line feed: '\n', alias for {newline} {cr} A carriage return: '\r' {crlf} a carriage return + line feed: '\r\n' -{osxphotos_version} The osxphotos version, e.g. '0.43.9' +{osxphotos_version} The osxphotos version, e.g. '0.44.0' {osxphotos_cmd_line} The full command line used to run osxphotos The following substitutions may result in multiple values. Thus if specified for @@ -1729,6 +1730,13 @@ Substitution Description {folder_album} Folder path + album photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder +{project} Project(s) photo is contained in (such as greeting + cards, calendars, slideshows) +{album_project} Album(s) and project(s) photo is contained in; treats + projects as regular albums +{folder_album_project} Folder path + album (includes projects as albums) + photo is contained in. e.g. 'Folder/Subfolder/Album' + or just 'Album' if no enclosing folder {keyword} Keyword(s) assigned to photo {person} Person(s) / face(s) in a photo {label} Image categorization label associated with a photo @@ -2103,7 +2111,7 @@ keywords = photosdb.keywords Returns a list of the keywords found in the Photos library -#### `album_info` +#### `album_info` ```python # assumes photosdb is a PhotosDB object (see above) albums = photosdb.album_info @@ -2133,6 +2141,10 @@ Returns list of shared album names found in photos database (e.g. albums shared Returns a list of [ImportInfo](#importinfo) objects representing the import sessions for the database. +#### `project_info` + +Returns a list of [ProjectInfo](#projectinfo) objects representing the projects/creations (cards, calendars, etc.) in the database. + #### `folder_info` ```python # assumes photosdb is a PhotosDB object (see above) @@ -2422,11 +2434,15 @@ Returns a list of keywords (e.g. tags) applied to the photo Returns a list of albums the photo is contained in. See also [album_info](#album_info). #### `album_info` -Returns a list of [AlbumInfo](#AlbumInfo) objects representing the albums the photo is contained in. See also [albums](#albums). +Returns a list of [AlbumInfo](#AlbumInfo) objects representing the albums the photo is contained in or empty list of the photo is not in any albums. See also [albums](#albums). #### `import_info` Returns an [ImportInfo](#importinfo) object representing the import session associated with the photo or `None` if there is no associated import session. +#### `project_info` +Returns a list of [ProjectInfo](#projectinfo) objects representing projects/creations (cards, calendars, etc.) the photo is contained in or empty list if there are no projects associated with the photo. + + #### `persons` Returns a list of the names of the persons in the photo @@ -2934,6 +2950,23 @@ Returns the start date as a timezone aware datetime.datetime object for when the #### `end_date` Returns the end date as a timezone aware datetime.datetime object for when the import session completed. +### ProjectInfo +PhotosDB.projcet_info returns a list of ProjectInfo objects. Each ProjectInfo object represents a project in the library. PhotoInfo.project_info returns a list of ProjectInfo objects for each project the photo is contained in. + +Projects (found under "My Projects" in Photos) are projects or creations such as cards, calendars, and slideshows created in Photos. osxphotos provides only very basic information about projects and projects created with third party plugins may not accessible to osxphotos. + +#### `uuid` +Returns the universally unique identifier (uuid) of the project. This is how Photos keeps track of individual objects within the database. + +#### `title` +Returns the title or name of the project. + +#### `photos` +Returns a list of [PhotoInfo](#PhotoInfo) objects representing each photo contained in the project. + +#### `creation_date` +Returns the creation date as a timezone aware datetime.datetime object of the project. + ### FolderInfo PhotosDB.folder_info returns a list of FolderInfo objects representing the top level folders in the library. Each FolderInfo object represents a single folder in the Photos library. @@ -3584,10 +3617,13 @@ The following template field substitutions are availabe for use the templating s |{lf}|A line feed: '\n', alias for {newline}| |{cr}|A carriage return: '\r'| |{crlf}|a carriage return + line feed: '\r\n'| -|{osxphotos_version}|The osxphotos version, e.g. '0.43.9'| +|{osxphotos_version}|The osxphotos version, e.g. '0.44.0'| |{osxphotos_cmd_line}|The full command line used to run osxphotos| |{album}|Album(s) photo is contained in| |{folder_album}|Folder path + album photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder| +|{project}|Project(s) photo is contained in (such as greeting cards, calendars, slideshows)| +|{album_project}|Album(s) and project(s) photo is contained in; treats projects as regular albums| +|{folder_album_project}|Folder path + album (includes projects as albums) photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder| |{keyword}|Keyword(s) assigned to photo| |{person}|Person(s) / face(s) in a photo| |{label}|Image categorization label associated with a photo (Photos 5+ only). Labels are added automatically by Photos using machine learning algorithms to categorize images. These are not the same as {keyword} which refers to the user-defined keywords/tags applied in Photos.| diff --git a/docs/.buildinfo b/docs/.buildinfo index 55e0dd8e..719f4af2 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 6a7b21011951131043e717993112beb1 +config: 4b8efce5e11b970d619d6d5988967d84 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 680837a6..8810dcbd 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.43.9', + VERSION: '0.44.0', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_static/pygments.css b/docs/_static/pygments.css index 540bf58b..87f8bd12 100644 --- a/docs/_static/pygments.css +++ b/docs/_static/pygments.css @@ -1,7 +1,7 @@ pre { line-height: 125%; } -td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } -span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } -td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #f8f8f8; } diff --git a/docs/cli.html b/docs/cli.html index 35eef2a7..2b1dd641 100644 --- a/docs/cli.html +++ b/docs/cli.html @@ -4,8 +4,9 @@ - - osxphotos command line interface (CLI) — osxphotos 0.43.9 documentation + + + osxphotos command line interface (CLI) — osxphotos 0.44.0 documentation @@ -32,1623 +33,9 @@
-
+

osxphotos command line interface (CLI)

-
-

osxphotos

-
osxphotos [OPTIONS] COMMAND [ARGS]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -
-
--v, --version
-

Show the version and exit.

-
- -
-

about

-

Print information about osxphotos including license.

-
osxphotos about [OPTIONS]
-
-
-
-
-

albums

-

Print out albums found in the Photos library.

-
osxphotos albums [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

dump

-

Print list of all photos & associated info from the Photos library.

-
osxphotos dump [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -
-
---deleted
-

Include photos from the ‘Recently Deleted’ folder.

-
- -
-
---deleted-only
-

Include only photos from the ‘Recently Deleted’ folder.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

export

-

Export photos from the Photos database. -Export path DEST is required. -Optionally, query the Photos database using 1 or more search options; -if more than one option is provided, they are treated as “AND” -(e.g. search for photos matching all options). -If no query options are provided, all photos will be exported. -By default, all versions of all photos will be exported including edited -versions, live photo movies, burst photos, and associated raw images. -See –skip-edited, –skip-live, –skip-bursts, and –skip-raw options -to modify this behavior.

-
osxphotos export [OPTIONS] [PHOTOS_LIBRARY]... DEST
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
--V, --verbose
-

Print verbose output.

-
- -
-
---keyword <KEYWORD>
-

Search for photos with keyword KEYWORD. If more than one keyword, treated as “OR”, e.g. find photos matching any keyword

-
- -
-
---person <PERSON>
-

Search for photos with person PERSON. If more than one person, treated as “OR”, e.g. find photos matching any person

-
- -
-
---album <ALBUM>
-

Search for photos in album ALBUM. If more than one album, treated as “OR”, e.g. find photos matching any album

-
- -
-
---folder <FOLDER>
-

Search for photos in an album in folder FOLDER. If more than one folder, treated as “OR”, e.g. find photos in any FOLDER. Only searches top level folders (e.g. does not look at subfolders)

-
- -
-
---name <FILENAME>
-

Search for photos with filename matching FILENAME. If more than one –name options is specified, they are treated as “OR”, e.g. find photos matching any FILENAME.

-
- -
-
---uuid <UUID>
-

Search for photos with UUID(s).

-
- -
-
---uuid-from-file <FILE>
-

Search for photos with UUID(s) loaded from FILE. Format is a single UUID per line. Lines preceded with # are ignored.

-
- -
-
---title <TITLE>
-

Search for TITLE in title of photo.

-
- -
-
---no-title
-

Search for photos with no title.

-
- -
-
---description <DESC>
-

Search for DESC in description of photo.

-
- -
-
---no-description
-

Search for photos with no description.

-
- -
-
---place <PLACE>
-

Search for PLACE in photo’s reverse geolocation info

-
- -
-
---no-place
-

Search for photos with no associated place name info (no reverse geolocation info)

-
- -
-
---location
-

Search for photos with associated location info (e.g. GPS coordinates)

-
- -
-
---no-location
-

Search for photos with no associated location info (e.g. no GPS coordinates)

-
- -
-
---label <LABEL>
-

Search for photos with image classification label LABEL (Photos 5 only). If more than one label, treated as “OR”, e.g. find photos matching any label

-
- -
-
---uti <UTI>
-

Search for photos whose uniform type identifier (UTI) matches UTI

-
- -
-
--i, --ignore-case
-

Case insensitive search for title, description, place, keyword, person, or album.

-
- -
-
---edited
-

Search for photos that have been edited.

-
- -
-
---external-edit
-

Search for photos edited in external editor.

-
- -
-
---favorite
-

Search for photos marked favorite.

-
- -
-
---not-favorite
-

Search for photos not marked favorite.

-
- -
-
---hidden
-

Search for photos marked hidden.

-
- -
-
---not-hidden
-

Search for photos not marked hidden.

-
- -
-
---shared
-

Search for photos in shared iCloud album (Photos 5 only).

-
- -
-
---not-shared
-

Search for photos not in shared iCloud album (Photos 5 only).

-
- -
-
---burst
-

Search for photos that were taken in a burst.

-
- -
-
---not-burst
-

Search for photos that are not part of a burst.

-
- -
-
---live
-

Search for Apple live photos

-
- -
-
---not-live
-

Search for photos that are not Apple live photos.

-
- -
-
---portrait
-

Search for Apple portrait mode photos.

-
- -
-
---not-portrait
-

Search for photos that are not Apple portrait mode photos.

-
- -
-
---screenshot
-

Search for screenshot photos.

-
- -
-
---not-screenshot
-

Search for photos that are not screenshot photos.

-
- -
-
---slow-mo
-

Search for slow motion videos.

-
- -
-
---not-slow-mo
-

Search for photos that are not slow motion videos.

-
- -
-
---time-lapse
-

Search for time lapse videos.

-
- -
-
---not-time-lapse
-

Search for photos that are not time lapse videos.

-
- -
-
---hdr
-

Search for high dynamic range (HDR) photos.

-
- -
-
---not-hdr
-

Search for photos that are not HDR photos.

-
- -
-
---selfie
-

Search for selfies (photos taken with front-facing cameras).

-
- -
-
---not-selfie
-

Search for photos that are not selfies.

-
- -
-
---panorama
-

Search for panorama photos.

-
- -
-
---not-panorama
-

Search for photos that are not panoramas.

-
- -
-
---has-raw
-

Search for photos with both a jpeg and raw version

-
- -
-
---only-movies
-

Search only for movies (default searches both images and movies).

-
- -
-
---only-photos
-

Search only for photos/images (default searches both images and movies).

-
- -
-
---from-date <from_date>
-

Search by item start date, e.g. 2000-01-12T12:00:00, 2001-01-12T12:00:00-07:00, or 2000-12-31 (ISO 8601 with/without timezone).

-
- -
-
---to-date <to_date>
-

Search by item end date, e.g. 2000-01-12T12:00:00, 2001-01-12T12:00:00-07:00, or 2000-12-31 (ISO 8601 with/without timezone).

-
- -
-
---from-time <from_time>
-

Search by item start time of day, e.g. 12:00, or 12:00:00.

-
- -
-
---to-time <to_time>
-

Search by item end time of day, e.g. 12:00 or 12:00:00.

-
- -
-
---has-comment
-

Search for photos that have comments.

-
- -
-
---no-comment
-

Search for photos with no comments.

-
- -
-
---has-likes
-

Search for photos that have likes.

-
- -
-
---no-likes
-

Search for photos with no likes.

-
- -
-
---is-reference
-

Search for photos that were imported as referenced files (not copied into Photos library).

-
- -
-
---in-album
-

Search for photos that are in one or more albums.

-
- -
-
---not-in-album
-

Search for photos that are not in any albums.

-
- -
-
---duplicate
-

Search for photos with possible duplicates. osxphotos will compare signatures of photos, evaluating date created, size, height, width, and edited status to find possible duplicates. This does not compare images byte-for-byte nor compare hashes but should find photos imported multiple times or duplicated within Photos.

-
- -
-
---min-size <SIZE>
-

Search for photos with size >= SIZE bytes. The size evaluated is the photo’s original size (when imported to Photos). Size may be specified as integer bytes or using SI or NIST units. For example, the following are all valid and equivalent sizes: ‘1048576’ ‘1.048576MB’, ‘1 MiB’.

-
- -
-
---max-size <SIZE>
-

Search for photos with size <= SIZE bytes. The size evaluated is the photo’s original size (when imported to Photos). Size may be specified as integer bytes or using SI or NIST units. For example, the following are all valid and equivalent sizes: ‘1048576’ ‘1.048576MB’, ‘1 MiB’.

-
- -
-
---regex <REGEX TEMPLATE>
-

Search for photos where TEMPLATE matches regular expression REGEX. For example, to find photos in an album that begins with ‘Beach’: ‘–regex “^Beach” “{album}”’. You may specify more than one regular expression match by repeating ‘–regex’ with different arguments.

-
- -
-
---selected
-

Filter for photos that are currently selected in Photos.

-
- -
-
---exif <EXIF_TAG VALUE>
-

Search for photos where EXIF_TAG exists in photo’s EXIF data and contains VALUE. For example, to find photos created by Adobe Photoshop: –exif Software ‘Adobe Photoshop’ `or to find all photos shot on a Canon camera: `–exif Make Canon. EXIF_TAG can be any valid exiftool tag, with or without group name, e.g. EXIF:Make or Make. To use –exif, exiftool must be installed and in the path.

-
- -
-
---query-eval <CRITERIA>
-

Evaluate CRITERIA to filter photos. CRITERIA will be evaluated in context of the following python list comprehension: photos = [photo for photo in photos if CRITERIA] where photo represents a PhotoInfo object. For example: –query-eval photo.favorite returns all photos that have been favorited and is equivalent to –favorite. You may specify more than one CRITERIA by using –query-eval multiple times. CRITERIA must be a valid python expression. See https://rhettbull.github.io/osxphotos/ for additional documentation on the PhotoInfo class.

-
- -
-
---query-function <filename.py::function>
-

Run function to filter photos. Use this in format: –query-function filename.py::function where filename.py is a python file you’ve created and function is the name of the function in the python file you want to call. Your function will be passed a list of PhotoInfo objects and is expected to return a filtered list of PhotoInfo objects. You may use more than one function by repeating the –query-function option with a different value. Your query function will be called after all other query options have been evaluated. See https://github.com/RhetTbull/osxphotos/blob/master/examples/query_function.py for example of how to use this option.

-
- -
-
---missing
-

Export only photos missing from the Photos library; must be used with –download-missing.

-
- -
-
---deleted
-

Include photos from the ‘Recently Deleted’ folder.

-
- -
-
---deleted-only
-

Include only photos from the ‘Recently Deleted’ folder.

-
- -
-
---update
-

Only export new or updated files. See notes below on export and –update.

-
- -
-
---ignore-signature
-

When used with ‘–update’, ignores file signature when updating files. This is useful if you have processed or edited exported photos changing the file signature (size & modification date). In this case, ‘–update’ would normally re-export the processed files but with ‘–ignore-signature’, files which exist in the export directory will not be re-exported. If used with ‘–sidecar’, ‘–ignore-signature’ has the following behavior: 1) if the metadata (in Photos) that went into the sidecar did not change, the sidecar will not be updated; 2) if the metadata (in Photos) that went into the sidecar did change, a new sidecar is written but a new image file is not; 3) if a sidecar does not exist for the photo, a sidecar will be written whether or not the photo file was written or updated.

-
- -
-
---only-new
-

If used with –update, ignores any previously exported files, even if missing from the export folder and only exports new files that haven’t previously been exported.

-
- -
-
---dry-run
-

Dry run (test) the export but don’t actually export any files; most useful with –verbose.

-
- -
- -

Hardlink files instead of copying them. Cannot be used with –exiftool which creates copies of the files with embedded EXIF data. Note: on APFS volumes, files are cloned when exporting giving many of the same advantages as hardlinks without having to use –export-as-hardlink.

-
- -
-
---touch-file
-

Sets the file’s modification time to match photo date.

-
- -
-
---overwrite
-

Overwrite existing files. Default behavior is to add (1), (2), etc to filename if file already exists. Use this with caution as it may create name collisions on export. (e.g. if two files happen to have the same name)

-
- -
-
---retry <RETRY>
-

Automatically retry export up to RETRY times if an error occurs during export. This may be useful with network drives that experience intermittent errors.

-
- -
-
---export-by-date
-

Automatically create output folders to organize photos by date created (e.g. DEST/2019/12/20/photoname.jpg).

-
- -
-
---skip-edited
-

Do not export edited version of photo if an edited version exists.

-
- -
-
---skip-original-if-edited
-

Do not export original if there is an edited version (exports only the edited version).

-
- -
-
---skip-bursts
-

Do not export all associated burst images in the library if a photo is a burst photo.

-
- -
-
---skip-live
-

Do not export the associated live video component of a live photo.

-
- -
-
---skip-raw
-

Do not export associated RAW image of a RAW+JPEG pair. Note: this does not skip RAW photos if the RAW photo does not have an associated JPEG image (e.g. the RAW file was imported to Photos without a JPEG preview).

-
- -
-
---current-name
-

Use photo’s current filename instead of original filename for export. Note: Starting with Photos 5, all photos are renamed upon import. By default, photos are exported with the the original name they had before import.

-
- -
-
---convert-to-jpeg
-

Convert all non-JPEG images (e.g. RAW, HEIC, PNG, etc) to JPEG upon export. Note: does not convert the RAW component of a RAW+JPEG pair as the associated JPEG image will be exported. You can use –skip-raw to skip exporting the associated RAW image of a RAW+JPEG pair. See also –jpeg-quality and –jpeg-ext. Only works if your Mac has a GPU (thus may not work on virtual machines).

-
- -
-
---jpeg-quality <jpeg_quality>
-

Value in range 0.0 to 1.0 to use with –convert-to-jpeg. A value of 1.0 specifies best quality, a value of 0.0 specifies maximum compression. Defaults to 1.0

-
- -
-
---preview
-

Export preview image generated by Photos. This is a lower-resolution image used by Photos to quickly preview the image. See also –preview-suffix and –preview-if-missing.

-
- -
-
---preview-if-missing
-

Export preview image generated by Photos if the actual photo file is missing from the library. This may be helpful if photos were not copied to the Photos library and the original photo is missing. See also –preview-suffix and –preview.

-
- -
-
---preview-suffix <SUFFIX>
-

Optional suffix template for naming preview photos. Default name for preview photos is in form ‘photoname_preview.ext’. For example, with ‘–preview-suffix _low_res’, the preview photo would be named ‘photoname_low_res.ext’. The default suffix is ‘_preview’. Multi-value templates (see Templating System) are not permitted with –preview-suffix. See also –preview and –preview-if-missing.

-
- -
-
---download-missing
-

Attempt to download missing photos from iCloud. The current implementation uses Applescript to interact with Photos to export the photo which will force Photos to download from iCloud if the photo does not exist on disk. This will be slow and will require internet connection. This obviously only works if the Photos library is synched to iCloud. Note: –download-missing does not currently export all burst images; only the primary photo will be exported–associated burst images will be skipped.

-
- -
-
---sidecar <FORMAT>
-

Create sidecar for each photo exported; valid FORMAT values: xmp, json, exiftool; –sidecar xmp: create XMP sidecar used by Digikam, Adobe Lightroom, etc. The sidecar file is named in format photoname.ext.xmp The XMP sidecar exports the following tags: Description, Title, Keywords/Tags, Subject (set to Keywords + PersonInImage), PersonInImage, CreateDate, ModifyDate, GPSLongitude, Face Regions (Metadata Working Group and Microsoft Photo). -–sidecar json: create JSON sidecar useable by exiftool (https://exiftool.org/) The sidecar file can be used to apply metadata to the file with exiftool, for example: “exiftool -j=photoname.jpg.json photoname.jpg” The sidecar file is named in format photoname.ext.json; format includes tag groups (equivalent to running ‘exiftool -G -j’). -–sidecar exiftool: create JSON sidecar compatible with output of ‘exiftool -j’. Unlike ‘–sidecar json’, ‘–sidecar exiftool’ does not export tag groups. Sidecar filename is in format photoname.ext.json; For a list of tags exported in the JSON and exiftool sidecar, see ‘–exiftool’. See also ‘–ignore-signature’.

-
-
Options
-

xmp | json | exiftool

-
-
-
- -
-
---sidecar-drop-ext
-

Drop the photo’s extension when naming sidecar files. By default, sidecar files are named in format ‘photo_filename.photo_ext.sidecar_ext’, e.g. ‘IMG_1234.JPG.xmp’. Use ‘–sidecar-drop-ext’ to ignore the photo extension. Resulting sidecar files will have name in format ‘IMG_1234.xmp’. Warning: this may result in sidecar filename collisions if there are files of different types but the same name in the output directory, e.g. ‘IMG_1234.JPG’ and ‘IMG_1234.MOV’.

-
- -
-
---exiftool
-

Use exiftool to write metadata directly to exported photos. To use this option, exiftool must be installed and in the path. exiftool may be installed from https://exiftool.org/. Cannot be used with –export-as-hardlink. Writes the following metadata: EXIF:ImageDescription, XMP:Description (see also –description-template); XMP:Title; XMP:TagsList, IPTC:Keywords, XMP:Subject (see also –keyword-template, –person-keyword, –album-keyword); XMP:PersonInImage; EXIF:GPSLatitudeRef; EXIF:GPSLongitudeRef; EXIF:GPSLatitude; EXIF:GPSLongitude; EXIF:GPSPosition; EXIF:DateTimeOriginal; EXIF:OffsetTimeOriginal; EXIF:ModifyDate (see –ignore-date-modified); IPTC:DateCreated; IPTC:TimeCreated; (video files only): QuickTime:CreationDate; QuickTime:CreateDate; QuickTime:ModifyDate (see also –ignore-date-modified); QuickTime:GPSCoordinates; UserData:GPSCoordinates.

-
- -
-
---exiftool-path <EXIFTOOL_PATH>
-

Optionally specify path to exiftool; if not provided, will look for exiftool in $PATH.

-
- -
-
---exiftool-option <OPTION>
-

Optional flag/option to pass to exiftool when using –exiftool. For example, –exiftool-option ‘-m’ to ignore minor warnings. Specify these as you would on the exiftool command line. See exiftool docs at https://exiftool.org/exiftool_pod.html for full list of options. More than one option may be specified by repeating the option, e.g. –exiftool-option ‘-m’ –exiftool-option ‘-F’.

-
- -
-
---exiftool-merge-keywords
-

Merge any keywords found in the original file with keywords used for ‘–exiftool’ and ‘–sidecar’.

-
- -
-
---exiftool-merge-persons
-

Merge any persons found in the original file with persons used for ‘–exiftool’ and ‘–sidecar’.

-
- -
-
---ignore-date-modified
-

If used with –exiftool or –sidecar, will ignore the photo modification date and set EXIF:ModifyDate to EXIF:DateTimeOriginal; this is consistent with how Photos handles the EXIF:ModifyDate tag.

-
- -
-
---person-keyword
-

Use person in image as keyword/tag when exporting metadata.

-
- -
-
---album-keyword
-

Use album name as keyword/tag when exporting metadata.

-
- -
-
---keyword-template <TEMPLATE>
-

For use with –exiftool, –sidecar; specify a template string to use as keyword in the form ‘{name,DEFAULT}’ This is the same format as –directory. For example, if you wanted to add the full path to the folder and album photo is contained in as a keyword when exporting you could specify –keyword-template “{folder_album}” You may specify more than one template, for example –keyword-template “{folder_album}” –keyword-template “{created.year}”. See ‘–replace-keywords’ and Templating System below.

-
- -
-
---replace-keywords
-

Replace keywords with any values specified with –keyword-template. By default, –keyword-template will add keywords to any keywords already associated with the photo. If –replace-keywords is specified, values from –keyword-template will replace any existing keywords instead of adding additional keywords.

-
- -
-
---description-template <TEMPLATE>
-

For use with –exiftool, –sidecar; specify a template string to use as description in the form ‘{name,DEFAULT}’ This is the same format as –directory. For example, if you wanted to append ‘exported with osxphotos on [today’s date]’ to the description, you could specify –description-template “{descr} exported with osxphotos on {today.date}” See Templating System below.

-
- -
-
---finder-tag-template <TEMPLATE>
-

Set MacOS Finder tags to TEMPLATE. These tags can be searched in the Finder or Spotlight with ‘tag:tagname’ format. For example, ‘–finder-tag-template “{label}”’ to set Finder tags to photo labels. You may specify multiple TEMPLATE values by using ‘–finder-tag-template’ multiple times. See also ‘–finder-tag-keywords and Extended Attributes below.’.

-
- -
-
---finder-tag-keywords
-

Set MacOS Finder tags to keywords; any keywords specified via ‘–keyword-template’, ‘–person-keyword’, etc. will also be used as Finder tags. See also ‘–finder-tag-template and Extended Attributes below.’.

-
- -
-
---xattr-template <ATTRIBUTE TEMPLATE>
-

Set extended attribute ATTRIBUTE to TEMPLATE value. Valid attributes are: ‘authors’, ‘comment’, ‘copyright’, ‘creator’, ‘description’, ‘findercomment’, ‘headline’, ‘keywords’, ‘participants’, ‘projects’, ‘rating’, ‘subject’, ‘title’, ‘version’. For example, to set Finder comment to the photo’s title and description: ‘–xattr-template findercomment “{title}; {descr}” See Extended Attributes below for additional details on this option.

-
- -
-
---directory <DIRECTORY>
-

Optional template for specifying name of output directory in the form ‘{name,DEFAULT}’. See below for additional details on templating system.

-
- -
-
---filename <FILENAME>
-

Optional template for specifying name of output file in the form ‘{name,DEFAULT}’. File extension will be added automatically–do not include an extension in the FILENAME template. See below for additional details on templating system.

-
- -
-
---jpeg-ext <EXTENSION>
-

Specify file extension for JPEG files. Photos uses .jpeg for edited images but many images are imported with .jpg or .JPG which can result in multiple different extensions used for JPEG files upon export. Use –jpeg-ext to specify a single extension to use for all exported JPEG images. Valid values are jpeg, jpg, JPEG, JPG; e.g. ‘–jpeg-ext jpg’ to use ‘.jpg’ for all JPEGs.

-
-
Options
-

jpeg | jpg | JPEG | JPG

-
-
-
- -
-
---strip
-

Optionally strip leading and trailing whitespace from any rendered templates. For example, if –filename template is “{title,} {original_name}” and image has no title, resulting file would have a leading space but if used with –strip, this will be removed.

-
- -
-
---edited-suffix <SUFFIX>
-

Optional suffix template for naming edited photos. Default name for edited photos is in form ‘photoname_edited.ext’. For example, with ‘–edited-suffix _bearbeiten’, the edited photo would be named ‘photoname_bearbeiten.ext’. The default suffix is ‘_edited’. Multi-value templates (see Templating System) are not permitted with –edited-suffix.

-
- -
-
---original-suffix <SUFFIX>
-

Optional suffix template for naming original photos. Default name for original photos is in form ‘filename.ext’. For example, with ‘–original-suffix _original’, the original photo would be named ‘filename_original.ext’. The default suffix is ‘’ (no suffix). Multi-value templates (see Templating System) are not permitted with –original-suffix.

-
- -
-
---use-photos-export
-

Force the use of AppleScript or PhotoKit to export even if not missing (see also ‘–download-missing’ and ‘–use-photokit’).

-
- -
-
---use-photokit
-

Use with ‘–download-missing’ or ‘–use-photos-export’ to use direct Photos interface instead of AppleScript to export. Highly experimental alpha feature; does not work with iTerm2 (use with Terminal.app). This is faster and more reliable than the default AppleScript interface.

-
- -
-
---report <path to export report>
-

Write a CSV formatted report of all files that were exported.

-
- -
-
---cleanup
-

Cleanup export directory by deleting any files which were not included in this export set. For example, photos which had previously been exported and were subsequently deleted in Photos. WARNING: –cleanup will delete any files in the export directory that were not exported by osxphotos, for example, your own scripts or other files. Be sure this is what you intend before using –cleanup. Use –dry-run with –cleanup first if you’re not certain.

-
- -
-
---add-exported-to-album <ALBUM>
-

Add all exported photos to album ALBUM in Photos. Album ALBUM will be created if it doesn’t exist. All exported photos will be added to this album. This only works if the Photos library being exported is the last-opened (default) library in Photos. This feature is currently experimental. I don’t know how well it will work on large export sets.

-
- -
-
---add-skipped-to-album <ALBUM>
-

Add all skipped photos to album ALBUM in Photos. Album ALBUM will be created if it doesn’t exist. All skipped photos will be added to this album. This only works if the Photos library being exported is the last-opened (default) library in Photos. This feature is currently experimental. I don’t know how well it will work on large export sets.

-
- -
-
---add-missing-to-album <ALBUM>
-

Add all missing photos to album ALBUM in Photos. Album ALBUM will be created if it doesn’t exist. All missing photos will be added to this album. This only works if the Photos library being exported is the last-opened (default) library in Photos. This feature is currently experimental. I don’t know how well it will work on large export sets.

-
- -
-
---post-command <CATEGORY COMMAND>
-

Run COMMAND on exported files of category CATEGORY. CATEGORY can be one of: exported, new, updated, skipped, missing, exif_updated, touched, converted_to_jpeg, sidecar_json_written, sidecar_json_skipped, sidecar_exiftool_written, sidecar_exiftool_skipped, sidecar_xmp_written, sidecar_xmp_skipped, error. COMMAND is an osxphotos template string, for example: ‘–post-command exported “echo {filepath|shell_quote} >> {export_dir}/exported.txt”’, which appends the full path of all exported files to the file ‘exported.txt’. You can run more than one command by repeating the ‘–post-command’ option with different arguments. See Post Command below.

-
- -
-
---post-function <filename.py::function>
-

Run function on exported files. Use this in format: –post-function filename.py::function where filename.py is a python file you’ve created and function is the name of the function in the python file you want to call. The function will be passed information about the photo that’s been exported and a list of all exported files associated with the photo. You can run more than one function by repeating the ‘–post-function’ option with different arguments. See Post Function below.

-
- -
-
---exportdb <EXPORTDB_FILE>
-

Specify alternate name for database file which stores state information for export and –update. If –exportdb is not specified, export database will be saved to ‘.osxphotos_export.db’ in the export directory. Must be specified as filename only, not a path, as export database will be saved in export directory.

-
- -
-
---load-config <config file path>
-

Load options from file as written with –save-config. This allows you to save a complex export command to file for later reuse. For example: ‘osxphotos export <lots of options here> –save-config osxphotos.toml’ then ‘osxphotos export /path/to/export –load-config osxphotos.toml’. If any other command line options are used in conjunction with –load-config, they will override the corresponding values in the config file.

-
- -
-
---save-config <config file path>
-

Save options to file for use with –load-config. File format is TOML.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-DEST
-

Required argument

-
- -
-
-

help

-

Print help; for help on commands: help <command>.

-
osxphotos help [OPTIONS] [TOPIC]
-
-
-

Arguments

-
-
-TOPIC
-

Optional argument

-
- -
-
-

info

-

Print out descriptive info of the Photos library database.

-
osxphotos info [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

install

-

Install Python packages into the same environment as osxphotos

-
osxphotos install [OPTIONS] PACKAGES...
-
-
-

Options

-
-
--U, --upgrade
-

Upgrade packages to latest version

-
- -

Arguments

-
-
-PACKAGES
-

Required argument(s)

-
- -
-
-

keywords

-

Print out keywords found in the Photos library.

-
osxphotos keywords [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

labels

-

Print out image classification labels found in the Photos library.

-
osxphotos labels [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

list

-

Print list of Photos libraries found on the system.

-
osxphotos list [OPTIONS]
-
-
-

Options

-
-
---json
-

Print output in JSON format.

-
- -
-
-

persons

-

Print out persons (faces) found in the Photos library.

-
osxphotos persons [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

places

-

Print out places found in the Photos library.

-
osxphotos places [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

query

-

Query the Photos database using 1 or more search options; -if more than one option is provided, they are treated as “AND” -(e.g. search for photos matching all options).

-
osxphotos query [OPTIONS] [PHOTOS_LIBRARY]...
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---json
-

Print output in JSON format.

-
- -
-
---keyword <KEYWORD>
-

Search for photos with keyword KEYWORD. If more than one keyword, treated as “OR”, e.g. find photos matching any keyword

-
- -
-
---person <PERSON>
-

Search for photos with person PERSON. If more than one person, treated as “OR”, e.g. find photos matching any person

-
- -
-
---album <ALBUM>
-

Search for photos in album ALBUM. If more than one album, treated as “OR”, e.g. find photos matching any album

-
- -
-
---folder <FOLDER>
-

Search for photos in an album in folder FOLDER. If more than one folder, treated as “OR”, e.g. find photos in any FOLDER. Only searches top level folders (e.g. does not look at subfolders)

-
- -
-
---name <FILENAME>
-

Search for photos with filename matching FILENAME. If more than one –name options is specified, they are treated as “OR”, e.g. find photos matching any FILENAME.

-
- -
-
---uuid <UUID>
-

Search for photos with UUID(s).

-
- -
-
---uuid-from-file <FILE>
-

Search for photos with UUID(s) loaded from FILE. Format is a single UUID per line. Lines preceded with # are ignored.

-
- -
-
---title <TITLE>
-

Search for TITLE in title of photo.

-
- -
-
---no-title
-

Search for photos with no title.

-
- -
-
---description <DESC>
-

Search for DESC in description of photo.

-
- -
-
---no-description
-

Search for photos with no description.

-
- -
-
---place <PLACE>
-

Search for PLACE in photo’s reverse geolocation info

-
- -
-
---no-place
-

Search for photos with no associated place name info (no reverse geolocation info)

-
- -
-
---location
-

Search for photos with associated location info (e.g. GPS coordinates)

-
- -
-
---no-location
-

Search for photos with no associated location info (e.g. no GPS coordinates)

-
- -
-
---label <LABEL>
-

Search for photos with image classification label LABEL (Photos 5 only). If more than one label, treated as “OR”, e.g. find photos matching any label

-
- -
-
---uti <UTI>
-

Search for photos whose uniform type identifier (UTI) matches UTI

-
- -
-
--i, --ignore-case
-

Case insensitive search for title, description, place, keyword, person, or album.

-
- -
-
---edited
-

Search for photos that have been edited.

-
- -
-
---external-edit
-

Search for photos edited in external editor.

-
- -
-
---favorite
-

Search for photos marked favorite.

-
- -
-
---not-favorite
-

Search for photos not marked favorite.

-
- -
-
---hidden
-

Search for photos marked hidden.

-
- -
-
---not-hidden
-

Search for photos not marked hidden.

-
- -
-
---shared
-

Search for photos in shared iCloud album (Photos 5 only).

-
- -
-
---not-shared
-

Search for photos not in shared iCloud album (Photos 5 only).

-
- -
-
---burst
-

Search for photos that were taken in a burst.

-
- -
-
---not-burst
-

Search for photos that are not part of a burst.

-
- -
-
---live
-

Search for Apple live photos

-
- -
-
---not-live
-

Search for photos that are not Apple live photos.

-
- -
-
---portrait
-

Search for Apple portrait mode photos.

-
- -
-
---not-portrait
-

Search for photos that are not Apple portrait mode photos.

-
- -
-
---screenshot
-

Search for screenshot photos.

-
- -
-
---not-screenshot
-

Search for photos that are not screenshot photos.

-
- -
-
---slow-mo
-

Search for slow motion videos.

-
- -
-
---not-slow-mo
-

Search for photos that are not slow motion videos.

-
- -
-
---time-lapse
-

Search for time lapse videos.

-
- -
-
---not-time-lapse
-

Search for photos that are not time lapse videos.

-
- -
-
---hdr
-

Search for high dynamic range (HDR) photos.

-
- -
-
---not-hdr
-

Search for photos that are not HDR photos.

-
- -
-
---selfie
-

Search for selfies (photos taken with front-facing cameras).

-
- -
-
---not-selfie
-

Search for photos that are not selfies.

-
- -
-
---panorama
-

Search for panorama photos.

-
- -
-
---not-panorama
-

Search for photos that are not panoramas.

-
- -
-
---has-raw
-

Search for photos with both a jpeg and raw version

-
- -
-
---only-movies
-

Search only for movies (default searches both images and movies).

-
- -
-
---only-photos
-

Search only for photos/images (default searches both images and movies).

-
- -
-
---from-date <from_date>
-

Search by item start date, e.g. 2000-01-12T12:00:00, 2001-01-12T12:00:00-07:00, or 2000-12-31 (ISO 8601 with/without timezone).

-
- -
-
---to-date <to_date>
-

Search by item end date, e.g. 2000-01-12T12:00:00, 2001-01-12T12:00:00-07:00, or 2000-12-31 (ISO 8601 with/without timezone).

-
- -
-
---from-time <from_time>
-

Search by item start time of day, e.g. 12:00, or 12:00:00.

-
- -
-
---to-time <to_time>
-

Search by item end time of day, e.g. 12:00 or 12:00:00.

-
- -
-
---has-comment
-

Search for photos that have comments.

-
- -
-
---no-comment
-

Search for photos with no comments.

-
- -
-
---has-likes
-

Search for photos that have likes.

-
- -
-
---no-likes
-

Search for photos with no likes.

-
- -
-
---is-reference
-

Search for photos that were imported as referenced files (not copied into Photos library).

-
- -
-
---in-album
-

Search for photos that are in one or more albums.

-
- -
-
---not-in-album
-

Search for photos that are not in any albums.

-
- -
-
---duplicate
-

Search for photos with possible duplicates. osxphotos will compare signatures of photos, evaluating date created, size, height, width, and edited status to find possible duplicates. This does not compare images byte-for-byte nor compare hashes but should find photos imported multiple times or duplicated within Photos.

-
- -
-
---min-size <SIZE>
-

Search for photos with size >= SIZE bytes. The size evaluated is the photo’s original size (when imported to Photos). Size may be specified as integer bytes or using SI or NIST units. For example, the following are all valid and equivalent sizes: ‘1048576’ ‘1.048576MB’, ‘1 MiB’.

-
- -
-
---max-size <SIZE>
-

Search for photos with size <= SIZE bytes. The size evaluated is the photo’s original size (when imported to Photos). Size may be specified as integer bytes or using SI or NIST units. For example, the following are all valid and equivalent sizes: ‘1048576’ ‘1.048576MB’, ‘1 MiB’.

-
- -
-
---regex <REGEX TEMPLATE>
-

Search for photos where TEMPLATE matches regular expression REGEX. For example, to find photos in an album that begins with ‘Beach’: ‘–regex “^Beach” “{album}”’. You may specify more than one regular expression match by repeating ‘–regex’ with different arguments.

-
- -
-
---selected
-

Filter for photos that are currently selected in Photos.

-
- -
-
---exif <EXIF_TAG VALUE>
-

Search for photos where EXIF_TAG exists in photo’s EXIF data and contains VALUE. For example, to find photos created by Adobe Photoshop: –exif Software ‘Adobe Photoshop’ `or to find all photos shot on a Canon camera: `–exif Make Canon. EXIF_TAG can be any valid exiftool tag, with or without group name, e.g. EXIF:Make or Make. To use –exif, exiftool must be installed and in the path.

-
- -
-
---query-eval <CRITERIA>
-

Evaluate CRITERIA to filter photos. CRITERIA will be evaluated in context of the following python list comprehension: photos = [photo for photo in photos if CRITERIA] where photo represents a PhotoInfo object. For example: –query-eval photo.favorite returns all photos that have been favorited and is equivalent to –favorite. You may specify more than one CRITERIA by using –query-eval multiple times. CRITERIA must be a valid python expression. See https://rhettbull.github.io/osxphotos/ for additional documentation on the PhotoInfo class.

-
- -
-
---query-function <filename.py::function>
-

Run function to filter photos. Use this in format: –query-function filename.py::function where filename.py is a python file you’ve created and function is the name of the function in the python file you want to call. Your function will be passed a list of PhotoInfo objects and is expected to return a filtered list of PhotoInfo objects. You may use more than one function by repeating the –query-function option with a different value. Your query function will be called after all other query options have been evaluated. See https://github.com/RhetTbull/osxphotos/blob/master/examples/query_function.py for example of how to use this option.

-
- -
-
---deleted
-

Include photos from the ‘Recently Deleted’ folder.

-
- -
-
---deleted-only
-

Include only photos from the ‘Recently Deleted’ folder.

-
- -
-
---missing
-

Search for photos missing from disk.

-
- -
-
---not-missing
-

Search for photos present on disk (e.g. not missing).

-
- -
-
---cloudasset
-

Search for photos that are part of an iCloud library

-
- -
-
---not-cloudasset
-

Search for photos that are not part of an iCloud library

-
- -
-
---incloud
-

Search for photos that are in iCloud (have been synched)

-
- -
-
---not-incloud
-

Search for photos that are not in iCloud (have not been synched)

-
- -
-
---add-to-album <ALBUM>
-

Add all photos from query to album ALBUM in Photos. Album ALBUM will be created if it doesn’t exist. All photos in the query results will be added to this album. This only works if the Photos library being queried is the last-opened (default) library in Photos. This feature is currently experimental. I don’t know how well it will work on large query sets.

-
- -

Arguments

-
-
-PHOTOS_LIBRARY
-

Optional argument(s)

-
- -
-
-

repl

-

Run interactive osxphotos REPL shell (useful for debugging, prototyping, and inspecting your Photos library)

-
osxphotos repl [OPTIONS]
-
-
-

Options

-
-
---db <Photos database path>
-

Specify Photos database path. Path to Photos library/database can be specified using either –db or directly as PHOTOS_LIBRARY positional argument. If neither –db or PHOTOS_LIBRARY provided, will attempt to find the library to use in the following order: 1. last opened library, 2. system library, 3. ~/Pictures/Photos Library.photoslibrary

-
- -
-
---emacs
-

Launch REPL with Emacs keybindings (default is vi bindings)

-
- -
-
-

tutorial

-

Display osxphotos tutorial.

-
osxphotos tutorial [OPTIONS] [WIDTH]...
-
-
-

Arguments

-
-
-WIDTH
-

Optional argument(s)

-
- -
-
-

uninstall

-

Uninstall Python packages from the osxphotos environment

-
osxphotos uninstall [OPTIONS] PACKAGES...
-
-
-

Options

-
-
--y, --yes
-

Don’t ask for confirmation

-
- -

Arguments

-
-
-PACKAGES
-

Required argument(s)

-
- -
-
-
+
@@ -1668,28 +55,7 @@ if more than one option is provided, they are treated as “AND”

Navigation

@@ -1728,7 +94,7 @@ if more than one option is provided, they are treated as “AND” ©2021, Rhet Turnbull. | - Powered by Sphinx 4.3.2 + Powered by Sphinx 4.3.1 & Alabaster 0.7.12 | diff --git a/docs/genindex.html b/docs/genindex.html index fdf830c4..caa12d53 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -5,7 +5,7 @@ - Index — osxphotos 0.43.9 documentation + Index — osxphotos 0.44.0 documentation @@ -34,2420 +34,8 @@

Index

- Symbols - | A - | B - | C - | D - | E - | F - | G - | H - | I - | J - | K - | L - | M - | N - | O - | P - | Q - | R - | S - | T - | U - | V - | W - | Y
-

Symbols

- - - -
- -

A

- - - -
- -

B

- - - -
- -

C

- - - -
- -

D

- - - -
- -

E

- - - -
- -

F

- - - -
- -

G

- - - -
- -

H

- - - -
- -

I

- - - -
- -

J

- - -
- -

K

- - - -
- -

L

- - - -
- -

M

- - - -
- -

N

- - - -
- -

O

- - - -
- -

P

- - - -
- -

Q

- - -
- -

R

- - - -
- -

S

- - - -
- -

T

- - - -
- -

U

- - - -
- -

V

- - - -
- -

W

- - - -
- -

Y

- - -
- @@ -2504,7 +92,7 @@ ©2021, Rhet Turnbull. | - Powered by Sphinx 4.3.2 + Powered by Sphinx 4.3.1 & Alabaster 0.7.12 diff --git a/docs/index.html b/docs/index.html index 3dd8b8b2..5271b030 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,8 +4,9 @@ - - Welcome to osxphotos’s documentation! — osxphotos 0.43.9 documentation + + + Welcome to osxphotos’s documentation! — osxphotos 0.44.0 documentation @@ -31,30 +32,30 @@
-
+

Welcome to osxphotos’s documentation!

-
-
+ +

OSXPhotos

-
+

What is osxphotos?

OSXPhotos provides both the ability to interact with and query Apple’s Photos.app library on macOS directly from your python code as well as a very flexible command line interface (CLI) app for exporting photos. You can query the Photos library database – for example, file name, file path, and metadata such as keywords/tags, persons/faces, albums, etc. You can also easily export both the original and edited photos.

-
-
+
+

Supported operating systems

Only works on macOS (aka Mac OS X). Tested on macOS Sierra (10.12.6) through macOS Big Sur (11.3).

If you have access to macOS 12 / Monterey beta and would like to help ensure osxphotos is compatible, please contact me via GitHub.

This package will read Photos databases for any supported version on any supported macOS version. E.g. you can read a database created with Photos 5.0 on MacOS 10.15 on a machine running macOS 10.12 and vice versa.

Requires python >= 3.7.

-
-
+ +

Installation

If you are new to python and just want to use the command line application, I recommend you to install using pipx. See other advanced options below.

-
+

Installation using pipx

If you aren’t familiar with installing python applications, I recommend you install osxphotos with pipx. If you use pipx, you will not need to create a virtual environment as pipx takes care of this. The easiest way to do this on a Mac is to use homebrew:

    @@ -64,15 +65,15 @@ E.g. you can read a database created with Photos 5.0 on MacOS 10.15 on a machine
  • Then type this: pipx install osxphotos

  • Now you should be able to run osxphotos by typing: osxphotos

-
-
+
+

Installation using pip

You can also install directly from pypi:

pip install osxphotos
 
-
-
+ +

Installation from git repository

OSXPhotos uses setuptools, thus simply run:

git clone https://github.com/RhetTbull/osxphotos.git
@@ -87,9 +88,9 @@ I recommend you install the latest version from release or you can install via pip which also installs the command line app.
 If you aren’t comfortable with running python on your Mac, start with the pre-built executable or pipx as described above.

-
-
-
+
+ +

Command Line Usage

This package will install a command line utility called osxphotos that allows you to query the Photos database and export photos. Alternatively, you can also run the command line utility like this: python3 -m osxphotos

@@ -127,38 +128,38 @@ Alternatively, you can also run the command line utility like this:

To get help on a specific command, use osxphotos help <command_name>

-
+

Command line examples

-
+

export all photos to ~/Desktop/export group in folders by date created

osxphotos export --export-by-date ~/Pictures/Photos\ Library.photoslibrary ~/Desktop/export

Note: Photos library/database path can also be specified using --db option:

osxphotos export --export-by-date --db ~/Pictures/Photos\ Library.photoslibrary ~/Desktop/export

-
-
+
+

find all photos with keyword “Kids” and output results to json file named results.json:

osxphotos query --keyword Kids --json ~/Pictures/Photos\ Library.photoslibrary >results.json

-
-
+ +

export photos to file structure based on 4-digit year and full name of month of photo’s creation date:

osxphotos export ~/Desktop/export --directory "{created.year}/{created.month}"

(by default, it will attempt to use the system library)

-
-
+ +

export photos to file structure based on 4-digit year of photo’s creation date and add keywords for media type and labels (labels are only awailable on Photos 5 and higher):

osxphotos export ~/Desktop/export --directory "{created.year}" --keyword-template "{label}" --keyword-template "{media_type}"

-
-
+ +

export default library using ‘country name/year’ as output directory (but use “NoCountry/year” if country not specified), add persons, album names, and year as keywords, write exif metadata to files when exporting, update only changed files, print verbose ouput

osxphotos export ~/Desktop/export --directory "{place.name.country,NoCountry}/{created.year}"  --person-keyword --album-keyword --keyword-template "{created.year}" --exiftool --update --verbose

-
-
+ +

find all videos larger than 200MB and add them to Photos album “Big Videos” creating the album if necessary

osxphotos query --only-movies --min-size 200MB --add-to-album "Big Videos"

-
- - -
+ + + +

Example uses of the package

""" Simple usage of the package """
 import osxphotos
@@ -274,50 +275,29 @@ Alternatively, you can also run the command line utility like this: export()  # pylint: disable=no-value-for-parameter
 
-
- - -
+ + +

Indices and tables

-
+ @@ -375,7 +355,7 @@ Alternatively, you can also run the command line utility like this: Sphinx 4.3.2 + Powered by Sphinx 4.3.1 & Alabaster 0.7.12 | diff --git a/docs/modules.html b/docs/modules.html index 0d76f1db..7ea94dfb 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -4,8 +4,9 @@ - - osxphotos — osxphotos 0.43.9 documentation + + + osxphotos — osxphotos 0.44.0 documentation @@ -30,11 +31,11 @@
-
+

osxphotos

-
+
@@ -91,7 +92,7 @@ ©2021, Rhet Turnbull. | - Powered by Sphinx 4.3.2 + Powered by Sphinx 4.3.1 & Alabaster 0.7.12 | diff --git a/docs/objects.inv b/docs/objects.inv index b92d1d55..9505ccde 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/reference.html b/docs/reference.html index 14cff0a4..b89383c6 100644 --- a/docs/reference.html +++ b/docs/reference.html @@ -4,8 +4,9 @@ - - osxphotos package — osxphotos 0.43.9 documentation + + + osxphotos package — osxphotos 0.44.0 documentation @@ -31,1352 +32,12 @@
-
+

osxphotos package

-
+

osxphotos module

-
-
-class osxphotos.PhotosDB(dbfile=None, verbose=None, exiftool=None)[source]
-

Processes a Photos.app library database to extract information about photos

-
-
-property album_info
-

return list of AlbumInfo objects for each album in the photos database

-
- -
-
-property album_info_shared
-

return list of AlbumInfo objects for each shared album in the photos database -only valid for Photos 5; on Photos <= 4, prints warning and returns empty list

-
- -
-
-property albums
-

return list of albums found in photos database

-
- -
-
-property albums_as_dict
-

return albums as dict of albums, count in reverse sorted order (descending)

-
- -
-
-property albums_shared
-

return list of shared albums found in photos database -only valid for Photos 5; on Photos <= 4, prints warning and returns empty list

-
- -
-
-property albums_shared_as_dict
-

returns shared albums as dict of albums, count in reverse sorted order (descending) -valid only on Photos 5; on Photos <= 4, prints warning and returns empty dict

-
- -
-
-property db_path
-

returns path to the Photos library database PhotosDB was initialized with

-
- -
-
-property db_version
-

return the database version as stored in LiGlobals table

-
- -
-
-execute(sql)[source]
-

Execute sql statement and return cursor

-
- -
-
-property folder_info
-

return list FolderInfo objects representing top-level folders in the photos database

-
- -
-
-property folders
-

return list of top-level folder names in the photos database

-
- -
-
-get_db_connection()[source]
-

Get connection to the working copy of the Photos database

-
-
Returns
-

tuple of (connection, cursor) to sqlite3 database

-
-
-
- -
-
-get_photo(uuid)[source]
-

Returns a single photo matching uuid

-
-
Parameters
-

uuid – the UUID of photo to get

-
-
Returns
-

PhotoInfo instance for photo with UUID matching uuid or None if no match

-
-
-
- -
-
-property import_info
-

return list of ImportInfo objects for each import session in the database

-
- -
-
-property keywords
-

return list of keywords found in photos database

-
- -
-
-property keywords_as_dict
-

return keywords as dict of keyword, count in reverse sorted order (descending)

-
- -
-
-property labels
-

return list of all search info labels found in the library

-
- -
-
-property labels_as_dict
-

count in reverse sorted order (descending)

-
-
Type
-

return labels as dict of label

-
-
-
- -
-
-property labels_normalized
-

return list of all normalized search info labels found in the library

-
- -
-
-property labels_normalized_as_dict
-

count in reverse sorted order (descending)

-
-
Type
-

return normalized labels as dict of label

-
-
-
- -
-
-property library_path
-

returns path to the Photos library PhotosDB was initialized with

-
- -
-
-property person_info
-

return list of PersonInfo objects for each person in the photos database

-
- -
-
-property persons
-

return list of persons found in photos database

-
- -
-
-property persons_as_dict
-

return persons as dict of person, count in reverse sorted order (descending)

-
- -
-
-photos(keywords=None, uuid=None, persons=None, albums=None, images=True, movies=True, from_date=None, to_date=None, intrash=False)[source]
-

Return a list of PhotoInfo objects -If called with no args, returns the entire database of photos -If called with args, returns photos matching the args (e.g. keywords, persons, etc.) -If more than one arg, returns photos matching all the criteria (e.g. keywords AND persons) -If more than one keyword, uuid, persons, albums is passed, they are treated as “OR” criteria -e.g. keywords=[“wedding”,”vacation”] returns photos matching either keyword -from_date and to_date may be either naive or timezone-aware datetime.datetime objects. -If naive, timezone will be assumed to be local timezone.

-
-
Parameters
-
    -
  • keywords – list of keywords to search for

  • -
  • uuid – list of UUIDs to search for

  • -
  • persons – list of persons to search for

  • -
  • albums – list of album names to search for

  • -
  • images – if True, returns image files, if False, does not return images; default is True

  • -
  • movies – if True, returns movie files, if False, does not return movies; default is True

  • -
  • from_date – return photos with creation date >= from_date (datetime.datetime object, default None)

  • -
  • to_date – return photos with creation date <= to_date (datetime.datetime object, default None)

  • -
  • intrash – if True, returns only images in “Recently deleted items” folder, -if False returns only photos that aren’t deleted; default is False

  • -
-
-
Returns
-

list of PhotoInfo objects

-
-
-
- -
-
-photos_by_uuid(uuids)[source]
-
-
Returns a list of photos with UUID in uuids.

Does not generate error if invalid or missing UUID passed. -This is faster than using PhotosDB.photos if you have list of UUIDs. -Returns photos regardless of intrash state.

-
-
-
-
Parameters
-

uuid – list of UUIDs of photos to get

-
-
Returns
-

list of PhotoInfo instance for photo with UUID matching uuid or [] if no match

-
-
-
- -
-
-query(options: osxphotos.queryoptions.QueryOptions) List[osxphotos.photoinfo.photoinfo.PhotoInfo][source]
-

Run a query against PhotosDB to extract the photos based on user supplied options

-
-
Parameters
-

options – a QueryOptions instance

-
-
-
- -
- -
-
-class osxphotos.PhotoInfo(db=None, uuid=None, info=None)[source]
-

Info about a specific photo, contains all the details about the photo -including keywords, persons, albums, uuid, path, etc.

-
-
-class ExifInfo(flash_fired: bool, iso: int, metering_mode: int, sample_rate: int, track_format: int, white_balance: int, aperture: float, bit_rate: float, duration: float, exposure_bias: float, focal_length: float, fps: float, latitude: float, longitude: float, shutter_speed: float, camera_make: str, camera_model: str, codec: str, lens_model: str)
-

EXIF info associated with a photo from the Photos library

-
-
-aperture: float
-
- -
-
-bit_rate: float
-
- -
-
-camera_make: str
-
- -
-
-camera_model: str
-
- -
-
-codec: str
-
- -
-
-duration: float
-
- -
-
-exposure_bias: float
-
- -
-
-flash_fired: bool
-
- -
-
-focal_length: float
-
- -
-
-fps: float
-
- -
-
-iso: int
-
- -
-
-latitude: float
-
- -
-
-lens_model: str
-
- -
-
-longitude: float
-
- -
-
-metering_mode: int
-
- -
-
-sample_rate: int
-
- -
-
-shutter_speed: float
-
- -
-
-track_format: int
-
- -
-
-white_balance: int
-
- -
- -
-
-class ExportResults(exported=None, new=None, updated=None, skipped=None, exif_updated=None, touched=None, converted_to_jpeg=None, sidecar_json_written=None, sidecar_json_skipped=None, sidecar_exiftool_written=None, sidecar_exiftool_skipped=None, sidecar_xmp_written=None, sidecar_xmp_skipped=None, missing=None, error=None, exiftool_warning=None, exiftool_error=None, xattr_written=None, xattr_skipped=None, deleted_files=None, deleted_directories=None, exported_album=None, skipped_album=None, missing_album=None)
-

holds export results for export2

-
-
-all_files()
-

return all filenames contained in results

-
- -
- -
-
-class ScoreInfo(overall: float, curation: float, promotion: float, highlight_visibility: float, behavioral: float, failure: float, harmonious_color: float, immersiveness: float, interaction: float, interesting_subject: float, intrusive_object_presence: float, lively_color: float, low_light: float, noise: float, pleasant_camera_tilt: float, pleasant_composition: float, pleasant_lighting: float, pleasant_pattern: float, pleasant_perspective: float, pleasant_post_processing: float, pleasant_reflection: float, pleasant_symmetry: float, sharply_focused_subject: float, tastefully_blurred: float, well_chosen_subject: float, well_framed_subject: float, well_timed_shot: float)
-

Computed photo score info associated with a photo from the Photos library

-
-
-behavioral: float
-
- -
-
-curation: float
-
- -
-
-failure: float
-
- -
-
-harmonious_color: float
-
- -
-
-highlight_visibility: float
-
- -
-
-immersiveness: float
-
- -
-
-interaction: float
-
- -
-
-interesting_subject: float
-
- -
-
-intrusive_object_presence: float
-
- -
-
-lively_color: float
-
- -
-
-low_light: float
-
- -
-
-noise: float
-
- -
-
-overall: float
-
- -
-
-pleasant_camera_tilt: float
-
- -
-
-pleasant_composition: float
-
- -
-
-pleasant_lighting: float
-
- -
-
-pleasant_pattern: float
-
- -
-
-pleasant_perspective: float
-
- -
-
-pleasant_post_processing: float
-
- -
-
-pleasant_reflection: float
-
- -
-
-pleasant_symmetry: float
-
- -
-
-promotion: float
-
- -
-
-sharply_focused_subject: float
-
- -
-
-tastefully_blurred: float
-
- -
-
-well_chosen_subject: float
-
- -
-
-well_framed_subject: float
-
- -
-
-well_timed_shot: float
-
- -
- -
-
-class SearchInfo(photo, normalized=False)
-

Info about search terms such as machine learning labels that Photos knows about a photo

-
-
-property activities
-

returns list of activity names

-
- -
-
-property all
-

return all search info properties in a single list

-
- -
-
-asdict()
-

return dict of search info

-
- -
-
-property bodies_of_water
-

returns list of body of water names

-
- -
-
-property city
-

returns city/town

-
- -
-
-property country
-

returns country name

-
- -
-
-property holidays
-

returns list of holiday names

-
- -
-
-property labels
-

return list of labels associated with Photo

-
- -
-
-property locality_names
-

returns list of other locality names

-
- -
-
-property media_types
-

returns list of media types (photo, video, panorama, etc)

-
- -
-
-property month
-

returns month name

-
- -
-
-property neighborhoods
-

returns list of neighborhoods

-
- -
-
-property place_names
-

returns list of place names

-
- -
-
-property season
-

returns season name

-
- -
-
-property state
-

returns state name

-
- -
-
-property state_abbreviation
-

returns state abbreviation

-
- -
-
-property streets
-

returns list of street names

-
- -
-
-property venue_types
-

returns list of venue types

-
- -
-
-property venues
-

returns list of venue names

-
- -
-
-property year
-

returns year

-
- -
- -
-
-property adjustments
-

Returns AdjustmentsInfo class for adjustment data or None if no adjustments; Photos 5+ only

-
- -
-
-property album_info
-

list of AlbumInfo objects representing albums the photo is contained in

-
- -
-
-property albums
-

list of albums picture is contained in

-
- -
-
-asdict()[source]
-

return dict representation

-
- -
-
-property burst
-

Returns True if photo is part of a Burst photo set, otherwise False

-
- -
-
-property burst_album_info
-

If photo is a burst photo, returns list of AlbumInfo objects representing albums the photo is contained in as well as albums the burst key photo is contained in, otherwise returns self.album_info.

-
- -
-
-property burst_albums
-

If photo is burst photo, list of albums it is contained in as well as any albums the key photo is contained in, otherwise returns self.albums

-
- -
-
-property burst_default_pick
-

Returns True if photo is a burst image and is the photo that Photos selected as the default image for the burst set, otherwise False

-
- -
-
-property burst_key
-

Returns True if photo is a burst photo and is the key image for the burst set (the image that Photos shows on top of the burst stack), otherwise False

-
- -
-
-property burst_photos
-

If photo is a burst photo, returns list of PhotoInfo objects -that are part of the same burst photo set; otherwise returns empty list. -self is not included in the returned list

-
- -
-
-property burst_selected
-

Returns True if photo is a burst photo and has been selected from the burst set by the user, otherwise False

-
- -
-
-property comments
-

Returns list of Comment objects for any comments on the photo (sorted by date)

-
- -
-
-property date
-

image creation date as timezone aware datetime object

-
- -
-
-property date_added
-

Date photo was added to the database

-
- -
-
-property date_modified
-

image modification date as timezone aware datetime object -or None if no modification date set

-
- -
-
-property date_trashed
-

Date asset was placed in the trash or None

-
- -
-
-property description
-

long / extended description of picture

-
- -
-
-detected_text(confidence_threshold=0.75)[source]
-

Detects text in photo and returns lists of results as (detected text, confidence)

-

confidence_threshold: float between 0.0 and 1.0. If text detection confidence is below this threshold, -text will not be returned. Default is TEXT_DETECTION_CONFIDENCE_THRESHOLD

-

If photo is edited, uses the edited photo, otherwise the original; falls back to the preview image if neither edited or original is available

-

Returns: list of (detected text, confidence) tuples

-
- -
-
-property duplicates
-

return list of PhotoInfo objects for possible duplicates (matching signature of original size, date, height, width) or empty list if no matching duplicates

-
- -
-
-property exif_info
-

Returns an ExifInfo object with the EXIF data for photo -Note: the returned EXIF data is the data Photos stores in the database on import; -ExifInfo does not provide access to the EXIF info in the actual image file -Some or all of the fields may be None -Only valid for Photos 5; on earlier database returns None

-
- -
-
-property exiftool
-

Returns a ExifToolCaching (read-only instance of ExifTool) object for the photo. -Requires that exiftool (https://exiftool.org/) be installed -If exiftool not installed, logs warning and returns None -If photo path is missing, returns None

-
- -
-
-export(dest, filename=None, edited=False, live_photo=False, raw_photo=False, export_as_hardlink=False, overwrite=False, increment=True, sidecar_json=False, sidecar_exiftool=False, sidecar_xmp=False, use_photos_export=False, timeout=120, exiftool=False, use_albums_as_keywords=False, use_persons_as_keywords=False, keyword_template=None, description_template=None, render_options: Optional[osxphotos.phototemplate.RenderOptions] = None)
-

export photo -dest: must be valid destination path (or exception raised) -filename: (optional): name of exported picture; if not provided, will use current filename

-
-

NOTE: if provided, user must ensure file extension (suffix) is correct. -For example, if photo is .CR2 file, edited image may be .jpeg. -If you provide an extension different than what the actual file is, -export will print a warning but will export the photo using the -incorrect file extension (unless use_photos_export is true, in which case export will -use the extension provided by Photos upon export; in this case, an incorrect extension is -silently ignored). -e.g. to get the extension of the edited photo, -reference PhotoInfo.path_edited

-
-
-
edited: (boolean, default=False); if True will export the edited version of the photo, otherwise exports the original version

(or raise exception if no edited version)

-
-
-

live_photo: (boolean, default=False); if True, will also export the associated .mov for live photos -raw_photo: (boolean, default=False); if True, will also export the associated RAW photo -export_as_hardlink: (boolean, default=False); if True, will hardlink files instead of copying them -overwrite: (boolean, default=False); if True will overwrite files if they already exist -increment: (boolean, default=True); if True, will increment file name until a non-existant name is found

-
-

if overwrite=False and increment=False, export will fail if destination file already exists

-
-
-
sidecar_json: if set will write a json sidecar with data in format readable by exiftool

sidecar filename will be dest/filename.json; includes exiftool tag group names (e.g. exiftool -G -j)

-
-
sidecar_exiftool: if set will write a json sidecar with data in format readable by exiftool

sidecar filename will be dest/filename.json; does not include exiftool tag group names (e.g. exiftool -j)

-
-
sidecar_xmp: if set will write an XMP sidecar with IPTC data

sidecar filename will be dest/filename.xmp

-
-
-

use_photos_export: (boolean, default=False); if True will attempt to export photo via applescript interaction with Photos -timeout: (int, default=120) timeout in seconds used with use_photos_export -exiftool: (boolean, default = False); if True, will use exiftool to write metadata to export file -returns list of full paths to the exported files -use_albums_as_keywords: (boolean, default = False); if True, will include album names in keywords -when exporting metadata with exiftool or sidecar -use_persons_as_keywords: (boolean, default = False); if True, will include person names in keywords -when exporting metadata with exiftool or sidecar -keyword_template: (list of strings); list of template strings that will be rendered as used as keywords -description_template: string; optional template string that will be rendered for use as photo description -render_options: an optional osxphotos.phototemplate.RenderOptions instance with options to pass to template renderer

-

Returns: list of photos exported

-
- -
-
-export2(dest, original=True, original_filename=None, edited=False, edited_filename=None, live_photo=False, raw_photo=False, export_as_hardlink=False, overwrite=False, increment=True, sidecar=0, sidecar_drop_ext=False, use_photos_export=False, timeout=120, exiftool=False, use_albums_as_keywords=False, use_persons_as_keywords=False, keyword_template=None, description_template=None, update=False, ignore_signature=False, export_db=None, fileutil=<class 'osxphotos.fileutil.FileUtil'>, dry_run=False, touch_file=False, convert_to_jpeg=False, jpeg_quality=1.0, ignore_date_modified=False, use_photokit=False, verbose=None, exiftool_flags=None, merge_exif_keywords=False, merge_exif_persons=False, jpeg_ext=None, persons=True, location=True, replace_keywords=False, preview=False, preview_suffix='_preview', render_options: Optional[osxphotos.phototemplate.RenderOptions] = None, strip=False)
-

export photo, like export but with update and dry_run options -dest: must be valid destination path or exception raised -filename: (optional): name of exported picture; if not provided, will use current filename

-
-

NOTE: if provided, user must ensure file extension (suffix) is correct. -For example, if photo is .CR2 file, edited image may be .jpeg. -If you provide an extension different than what the actual file is, -will export the photo using the incorrect file extension (unless use_photos_export is true, -in which case export will use the extension provided by Photos upon export. -e.g. to get the extension of the edited photo, -reference PhotoInfo.path_edited

-
-

original: (boolean, default=True); if True, will export the original version of the photo -edited: (boolean, default=False); if True will export the edited version of the photo -live_photo: (boolean, default=False); if True, will also export the associated .mov for live photos -raw_photo: (boolean, default=False); if True, will also export the associated RAW photo -export_as_hardlink: (boolean, default=False); if True, will hardlink files instead of copying them -overwrite: (boolean, default=False); if True will overwrite files if they already exist -increment: (boolean, default=True); if True, will increment file name until a non-existant name is found

-
-

if overwrite=False and increment=False, export will fail if destination file already exists

-
-
-
sidecar: bit field: set to one or more of SIDECAR_XMP, SIDECAR_JSON, SIDECAR_EXIFTOOL
-
SIDECAR_JSON: if set will write a json sidecar with data in format readable by exiftool

sidecar filename will be dest/filename.json; includes exiftool tag group names (e.g. exiftool -G -j)

-
-
SIDECAR_EXIFTOOL: if set will write a json sidecar with data in format readable by exiftool

sidecar filename will be dest/filename.json; does not include exiftool tag group names (e.g. exiftool -j)

-
-
SIDECAR_XMP: if set will write an XMP sidecar with IPTC data

sidecar filename will be dest/filename.xmp

-
-
-
-
-

sidecar_drop_ext: (boolean, default=False); if True, drops the photo’s extension from sidecar filename (e.g. ‘IMG_1234.json’ instead of ‘IMG_1234.JPG.json’) -use_photos_export: (boolean, default=False); if True will attempt to export photo via applescript interaction with Photos -timeout: (int, default=120) timeout in seconds used with use_photos_export -exiftool: (boolean, default = False); if True, will use exiftool to write metadata to export file -use_albums_as_keywords: (boolean, default = False); if True, will include album names in keywords -when exporting metadata with exiftool or sidecar -use_persons_as_keywords: (boolean, default = False); if True, will include person names in keywords -when exporting metadata with exiftool or sidecar -keyword_template: (list of strings); list of template strings that will be rendered as used as keywords -description_template: string; optional template string that will be rendered for use as photo description -update: (boolean, default=False); if True export will run in update mode, that is, it will

-
-

not export the photo if the current version already exists in the destination

-
-

ignore_signature: (bool, default=False), ignore file signature when used with update (look only at filename) -export_db: (ExportDB_ABC); instance of a class that conforms to ExportDB_ABC with methods

-
-

for getting/setting data related to exported files to compare update state

-
-

fileutil: (FileUtilABC); class that conforms to FileUtilABC with various file utilities -dry_run: (boolean, default=False); set to True to run in “dry run” mode -touch_file: (boolean, default=False); if True, sets file’s modification time upon photo date -convert_to_jpeg: boolean; if True, converts non-jpeg images to jpeg -jpeg_quality: float in range 0.0 <= jpeg_quality <= 1.0. A value of 1.0 specifies use best quality, a value of 0.0 specifies use maximum compression. -ignore_date_modified: for use with sidecar and exiftool; if True, sets EXIF:ModifyDate to EXIF:DateTimeOriginal even if date_modified is set -verbose: optional callable function to use for printing verbose text during processing; if None (default), does not print output. -exiftool_flags: optional list of flags to pass to exiftool when using exiftool option, e.g [“-m”, “-F”] -merge_exif_keywords: boolean; if True, merged keywords found in file’s exif data (requires exiftool) -merge_exif_persons: boolean; if True, merged persons found in file’s exif data (requires exiftool) -jpeg_ext: if set, will use this value for extension on jpegs converted to jpeg with convert_to_jpeg; if not set, uses jpeg; do not include the leading “.” -persons: if True, include persons in exported metadata -location: if True, include location in exported metadata -replace_keywords: if True, keyword_template replaces any keywords, otherwise it’s additive -preview: if True, also exports preview image -preview_suffix: optional string to append to end of filename for preview images -render_options: optional osxphotos.phototemplate.RenderOptions instance to specify options for rendering templates -strip: if True, strip whitespace from rendered templates

-
-
Returns: ExportResults class

ExportResults has attributes: -“exported”, -“new”, -“updated”, -“skipped”, -“exif_updated”, -“touched”, -“converted_to_jpeg”, -“sidecar_json_written”, -“sidecar_json_skipped”, -“sidecar_exiftool_written”, -“sidecar_exiftool_skipped”, -“sidecar_xmp_written”, -“sidecar_xmp_skipped”, -“missing”, -“error”, -“error_str”, -“exiftool_warning”, -“exiftool_error”,

-
-
Note: to use dry run mode, you must set dry_run=True and also pass in memory version of export_db,

and no-op fileutil (e.g. ExportDBInMemory and FileUtilNoOp)

-
-
-
- -
-
-property external_edit
-

Returns True if picture was edited outside of Photos using external editor

-
- -
-
-property face_info
-

list of FaceInfo objects for faces in picture

-
- -
-
-property favorite
-

True if picture is marked as favorite

-
- -
-
-property filename
-

filename of the picture

-
- -
-
-property has_raw
-

returns True if photo has an associated raw image (that is, it’s a RAW+JPEG pair), otherwise False

-
- -
-
-property hasadjustments
-

True if picture has adjustments / edits

-
- -
-
-property hdr
-

Returns True if photo is an HDR photo, otherwise False

-
- -
-
-property height
-

returns height of the current photo version in pixels

-
- -
-
-property hidden
-

True if picture is hidden

-
- -
-
-property import_info
-

ImportInfo object representing import session for the photo or None if no import session

-
- -
-
-property incloud
-

Returns True if photo is cloud asset and is synched to cloud -False if photo is cloud asset and not yet synched to cloud -None if photo is not cloud asset

-
- -
-
-property intrash
-

True if picture is in trash (‘Recently Deleted’ folder)

-
- -
-
-property iscloudasset
-

Returns True if photo is a cloud asset (in an iCloud library), -otherwise False

-
- -
-
-property ismissing
-

returns true if photo is missing from disk (which means it’s not been downloaded from iCloud) -NOTE: the photos.db database uses an asynchrounous write-ahead log so changes in Photos

-
-

do not immediately get written to disk. In particular, I’ve noticed that downloading -an image from the cloud does not force the database to be updated until something else -e.g. an edit, keyword, etc. occurs forcing a database synch -The exact process / timing is a mystery to be but be aware that if some photos were recently -downloaded from cloud to local storate their status in the database might still show -isMissing = 1

-
-
- -
-
-property ismovie
-

Returns True if file is a movie, otherwise False

-
- -
-
-property isphoto
-

Returns True if file is an image, otherwise False

-
- -
-
-property israw
-

returns True if photo is a raw image. For images with an associated RAW+JPEG pair, see has_raw

-
- -
-
-property isreference
-

Returns True if photo is a reference (not copied to the Photos library), otherwise False

-
- -
-
-json()[source]
-

Return JSON representation

-
- -
-
-property keywords
-

list of keywords for picture

-
- -
-
-property labels
-

returns list of labels applied to photo by Photos image categorization -only valid on Photos 5, on older libraries returns empty list

-
- -
-
-property labels_normalized
-

returns normalized list of labels applied to photo by Photos image categorization -only valid on Photos 5, on older libraries returns empty list

-
- -
-
-property likes
-

Returns list of Like objects for any likes on the photo (sorted by date)

-
- -
-
-property live_photo
-

Returns True if photo is a live photo, otherwise False

-
- -
-
-property location
-

returns (latitude, longitude) as float in degrees or None

-
- -
-
-property moment
-

Moment photo belongs to

-
- -
-
-property orientation
-

returns EXIF orientation of the current photo version as int or 0 if current orientation cannot be determined

-
- -
-
-property original_filename
-

original filename of the picture -Photos 5 mangles filenames upon import

-
- -
-
-property original_filesize
-

returns filesize of original photo in bytes as int

-
- -
-
-property original_height
-

returns height of the original photo version in pixels

-
- -
-
-property original_orientation
-

returns EXIF orientation of the original photo version as int

-
- -
-
-property original_width
-

returns width of the original photo version in pixels

-
- -
-
-property owner
-

Return name of photo owner for shared photos (Photos 5+ only), or None if not shared

-
- -
-
-property panorama
-

Returns True if photo is a panorama, otherwise False

-
- -
-
-property path
-

absolute path on disk of the original picture

-
- -
-
-property path_derivatives
-

Return any derivative (preview) images associated with the photo as a list of paths, sorted by file size (largest first)

-
- -
-
-property path_edited
-

absolute path on disk of the edited picture

-
- -
-
-property path_edited_live_photo
-

return path to edited version of live photo movie; only valid for Photos 5+

-
- -
-
-property path_live_photo
-

Returns path to the associated video file for a live photo -If photo is not a live photo, returns None -If photo is missing, returns None

-
- -
-
-property path_raw
-

absolute path of associated RAW image or None if there is not one

-
- -
-
-property person_info
-

list of PersonInfo objects for person in picture

-
- -
-
-property persons
-

list of persons in picture

-
- -
-
-property place
-

Returns PlaceInfo object containing reverse geolocation info

-
- -
-
-property portrait
-

Returns True if photo is a portrait, otherwise False

-
- -
-
-property raw_original
-

returns True if associated raw image and the raw image is selected in Photos -via “Use RAW as Original ” -otherwise returns False

-
- -
-
-render_template(template_str: str, options: Optional[osxphotos.phototemplate.RenderOptions] = None)[source]
-

Renders a template string for PhotoInfo instance using PhotoTemplate

-
-
Parameters
-
    -
  • template_str – a template string with fields to render

  • -
  • options – a RenderOptions instance

  • -
-
-
Returns
-

tuple of list of rendered strings and list of unmatched template values

-
-
Return type
-

([rendered_strings], [unmatched])

-
-
-
- -
-
-property score
-

Computed score information for a photo

-
-
Returns
-

ScoreInfo instance

-
-
-
- -
-
-property screenshot
-

Returns True if photo is an HDR photo, otherwise False

-
- -
-
-property search_info
-

returns SearchInfo object for photo -only valid on Photos 5, on older libraries, returns None

-
- -
-
-property search_info_normalized
-

returns SearchInfo object for photo that produces normalized results -only valid on Photos 5, on older libraries, returns None

-
- -
-
-property selfie
-

Returns True if photo is a selfie (front facing camera), otherwise False

-
- -
-
-property shared
-

returns True if photos is in a shared iCloud album otherwise false -Only valid on Photos 5; returns None on older versions

-
- -
-
-property slow_mo
-

Returns True if photo is a slow motion video, otherwise False

-
- -
-
-property time_lapse
-

Returns True if photo is a time lapse video, otherwise False

-
- -
-
-property title
-

name / title of picture

-
- -
-
-property tzoffset
-

timezone offset from UTC in seconds

-
- -
-
-property uti
-

Returns Uniform Type Identifier (UTI) for the image -for example: public.jpeg or com.apple.quicktime-movie

-
- -
-
-property uti_edited
-

Returns Uniform Type Identifier (UTI) for the edited image -if the photo has been edited, otherwise None; -for example: public.jpeg

-
- -
-
-property uti_original
-

Returns Uniform Type Identifier (UTI) for the original image -for example: public.jpeg or com.apple.quicktime-movie

-
- -
-
-property uti_raw
-

Returns Uniform Type Identifier (UTI) for the RAW image if there is one -for example: com.canon.cr2-raw-image -Returns None if no associated RAW image

-
- -
-
-property uuid
-

UUID of picture

-
- -
-
-property visible
-

True if picture is visble

-
- -
-
-property width
-

returns width of the current photo version in pixels

-
- -
- -
-
+ +
@@ -1437,7 +98,7 @@ Returns None if no associated RAW image

©2021, Rhet Turnbull. | - Powered by Sphinx 4.3.2 + Powered by Sphinx 4.3.1 & Alabaster 0.7.12 | diff --git a/docs/search.html b/docs/search.html index 33811827..280bc1cb 100644 --- a/docs/search.html +++ b/docs/search.html @@ -5,7 +5,7 @@ - Search — osxphotos 0.43.9 documentation + Search — osxphotos 0.44.0 documentation @@ -111,7 +111,7 @@ ©2021, Rhet Turnbull. | - Powered by Sphinx 4.3.2 + Powered by Sphinx 4.3.1 & Alabaster 0.7.12 diff --git a/docs/searchindex.js b/docs/searchindex.js index 8c31206e..e2adf759 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["cli","index","modules","reference"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["cli.rst","index.rst","modules.rst","reference.rst"],objects:{"osxphotos-albums":[[0,4,1,"cmdoption-osxphotos-albums-db","--db"],[0,4,1,"cmdoption-osxphotos-albums-json","--json"],[0,4,1,"cmdoption-osxphotos-albums-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-dump":[[0,4,1,"cmdoption-osxphotos-dump-db","--db"],[0,4,1,"cmdoption-osxphotos-dump-deleted","--deleted"],[0,4,1,"cmdoption-osxphotos-dump-deleted-only","--deleted-only"],[0,4,1,"cmdoption-osxphotos-dump-json","--json"],[0,4,1,"cmdoption-osxphotos-dump-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-export":[[0,4,1,"cmdoption-osxphotos-export-add-exported-to-album","--add-exported-to-album"],[0,4,1,"cmdoption-osxphotos-export-add-missing-to-album","--add-missing-to-album"],[0,4,1,"cmdoption-osxphotos-export-add-skipped-to-album","--add-skipped-to-album"],[0,4,1,"cmdoption-osxphotos-export-album","--album"],[0,4,1,"cmdoption-osxphotos-export-album-keyword","--album-keyword"],[0,4,1,"cmdoption-osxphotos-export-burst","--burst"],[0,4,1,"cmdoption-osxphotos-export-cleanup","--cleanup"],[0,4,1,"cmdoption-osxphotos-export-convert-to-jpeg","--convert-to-jpeg"],[0,4,1,"cmdoption-osxphotos-export-current-name","--current-name"],[0,4,1,"cmdoption-osxphotos-export-db","--db"],[0,4,1,"cmdoption-osxphotos-export-deleted","--deleted"],[0,4,1,"cmdoption-osxphotos-export-deleted-only","--deleted-only"],[0,4,1,"cmdoption-osxphotos-export-description","--description"],[0,4,1,"cmdoption-osxphotos-export-description-template","--description-template"],[0,4,1,"cmdoption-osxphotos-export-directory","--directory"],[0,4,1,"cmdoption-osxphotos-export-download-missing","--download-missing"],[0,4,1,"cmdoption-osxphotos-export-dry-run","--dry-run"],[0,4,1,"cmdoption-osxphotos-export-duplicate","--duplicate"],[0,4,1,"cmdoption-osxphotos-export-edited","--edited"],[0,4,1,"cmdoption-osxphotos-export-edited-suffix","--edited-suffix"],[0,4,1,"cmdoption-osxphotos-export-exif","--exif"],[0,4,1,"cmdoption-osxphotos-export-exiftool","--exiftool"],[0,4,1,"cmdoption-osxphotos-export-exiftool-merge-keywords","--exiftool-merge-keywords"],[0,4,1,"cmdoption-osxphotos-export-exiftool-merge-persons","--exiftool-merge-persons"],[0,4,1,"cmdoption-osxphotos-export-exiftool-option","--exiftool-option"],[0,4,1,"cmdoption-osxphotos-export-exiftool-path","--exiftool-path"],[0,4,1,"cmdoption-osxphotos-export-export-as-hardlink","--export-as-hardlink"],[0,4,1,"cmdoption-osxphotos-export-export-by-date","--export-by-date"],[0,4,1,"cmdoption-osxphotos-export-exportdb","--exportdb"],[0,4,1,"cmdoption-osxphotos-export-external-edit","--external-edit"],[0,4,1,"cmdoption-osxphotos-export-favorite","--favorite"],[0,4,1,"cmdoption-osxphotos-export-filename","--filename"],[0,4,1,"cmdoption-osxphotos-export-finder-tag-keywords","--finder-tag-keywords"],[0,4,1,"cmdoption-osxphotos-export-finder-tag-template","--finder-tag-template"],[0,4,1,"cmdoption-osxphotos-export-folder","--folder"],[0,4,1,"cmdoption-osxphotos-export-from-date","--from-date"],[0,4,1,"cmdoption-osxphotos-export-from-time","--from-time"],[0,4,1,"cmdoption-osxphotos-export-has-comment","--has-comment"],[0,4,1,"cmdoption-osxphotos-export-has-likes","--has-likes"],[0,4,1,"cmdoption-osxphotos-export-has-raw","--has-raw"],[0,4,1,"cmdoption-osxphotos-export-hdr","--hdr"],[0,4,1,"cmdoption-osxphotos-export-hidden","--hidden"],[0,4,1,"cmdoption-osxphotos-export-i","--ignore-case"],[0,4,1,"cmdoption-osxphotos-export-ignore-date-modified","--ignore-date-modified"],[0,4,1,"cmdoption-osxphotos-export-ignore-signature","--ignore-signature"],[0,4,1,"cmdoption-osxphotos-export-in-album","--in-album"],[0,4,1,"cmdoption-osxphotos-export-is-reference","--is-reference"],[0,4,1,"cmdoption-osxphotos-export-jpeg-ext","--jpeg-ext"],[0,4,1,"cmdoption-osxphotos-export-jpeg-quality","--jpeg-quality"],[0,4,1,"cmdoption-osxphotos-export-keyword","--keyword"],[0,4,1,"cmdoption-osxphotos-export-keyword-template","--keyword-template"],[0,4,1,"cmdoption-osxphotos-export-label","--label"],[0,4,1,"cmdoption-osxphotos-export-live","--live"],[0,4,1,"cmdoption-osxphotos-export-load-config","--load-config"],[0,4,1,"cmdoption-osxphotos-export-location","--location"],[0,4,1,"cmdoption-osxphotos-export-max-size","--max-size"],[0,4,1,"cmdoption-osxphotos-export-min-size","--min-size"],[0,4,1,"cmdoption-osxphotos-export-missing","--missing"],[0,4,1,"cmdoption-osxphotos-export-name","--name"],[0,4,1,"cmdoption-osxphotos-export-no-comment","--no-comment"],[0,4,1,"cmdoption-osxphotos-export-no-description","--no-description"],[0,4,1,"cmdoption-osxphotos-export-no-likes","--no-likes"],[0,4,1,"cmdoption-osxphotos-export-no-location","--no-location"],[0,4,1,"cmdoption-osxphotos-export-no-place","--no-place"],[0,4,1,"cmdoption-osxphotos-export-no-title","--no-title"],[0,4,1,"cmdoption-osxphotos-export-not-burst","--not-burst"],[0,4,1,"cmdoption-osxphotos-export-not-favorite","--not-favorite"],[0,4,1,"cmdoption-osxphotos-export-not-hdr","--not-hdr"],[0,4,1,"cmdoption-osxphotos-export-not-hidden","--not-hidden"],[0,4,1,"cmdoption-osxphotos-export-not-in-album","--not-in-album"],[0,4,1,"cmdoption-osxphotos-export-not-live","--not-live"],[0,4,1,"cmdoption-osxphotos-export-not-panorama","--not-panorama"],[0,4,1,"cmdoption-osxphotos-export-not-portrait","--not-portrait"],[0,4,1,"cmdoption-osxphotos-export-not-screenshot","--not-screenshot"],[0,4,1,"cmdoption-osxphotos-export-not-selfie","--not-selfie"],[0,4,1,"cmdoption-osxphotos-export-not-shared","--not-shared"],[0,4,1,"cmdoption-osxphotos-export-not-slow-mo","--not-slow-mo"],[0,4,1,"cmdoption-osxphotos-export-not-time-lapse","--not-time-lapse"],[0,4,1,"cmdoption-osxphotos-export-only-movies","--only-movies"],[0,4,1,"cmdoption-osxphotos-export-only-new","--only-new"],[0,4,1,"cmdoption-osxphotos-export-only-photos","--only-photos"],[0,4,1,"cmdoption-osxphotos-export-original-suffix","--original-suffix"],[0,4,1,"cmdoption-osxphotos-export-overwrite","--overwrite"],[0,4,1,"cmdoption-osxphotos-export-panorama","--panorama"],[0,4,1,"cmdoption-osxphotos-export-person","--person"],[0,4,1,"cmdoption-osxphotos-export-person-keyword","--person-keyword"],[0,4,1,"cmdoption-osxphotos-export-place","--place"],[0,4,1,"cmdoption-osxphotos-export-portrait","--portrait"],[0,4,1,"cmdoption-osxphotos-export-post-command","--post-command"],[0,4,1,"cmdoption-osxphotos-export-post-function","--post-function"],[0,4,1,"cmdoption-osxphotos-export-preview","--preview"],[0,4,1,"cmdoption-osxphotos-export-preview-if-missing","--preview-if-missing"],[0,4,1,"cmdoption-osxphotos-export-preview-suffix","--preview-suffix"],[0,4,1,"cmdoption-osxphotos-export-query-eval","--query-eval"],[0,4,1,"cmdoption-osxphotos-export-query-function","--query-function"],[0,4,1,"cmdoption-osxphotos-export-regex","--regex"],[0,4,1,"cmdoption-osxphotos-export-replace-keywords","--replace-keywords"],[0,4,1,"cmdoption-osxphotos-export-report","--report"],[0,4,1,"cmdoption-osxphotos-export-retry","--retry"],[0,4,1,"cmdoption-osxphotos-export-save-config","--save-config"],[0,4,1,"cmdoption-osxphotos-export-screenshot","--screenshot"],[0,4,1,"cmdoption-osxphotos-export-selected","--selected"],[0,4,1,"cmdoption-osxphotos-export-selfie","--selfie"],[0,4,1,"cmdoption-osxphotos-export-shared","--shared"],[0,4,1,"cmdoption-osxphotos-export-sidecar","--sidecar"],[0,4,1,"cmdoption-osxphotos-export-sidecar-drop-ext","--sidecar-drop-ext"],[0,4,1,"cmdoption-osxphotos-export-skip-bursts","--skip-bursts"],[0,4,1,"cmdoption-osxphotos-export-skip-edited","--skip-edited"],[0,4,1,"cmdoption-osxphotos-export-skip-live","--skip-live"],[0,4,1,"cmdoption-osxphotos-export-skip-original-if-edited","--skip-original-if-edited"],[0,4,1,"cmdoption-osxphotos-export-skip-raw","--skip-raw"],[0,4,1,"cmdoption-osxphotos-export-slow-mo","--slow-mo"],[0,4,1,"cmdoption-osxphotos-export-strip","--strip"],[0,4,1,"cmdoption-osxphotos-export-time-lapse","--time-lapse"],[0,4,1,"cmdoption-osxphotos-export-title","--title"],[0,4,1,"cmdoption-osxphotos-export-to-date","--to-date"],[0,4,1,"cmdoption-osxphotos-export-to-time","--to-time"],[0,4,1,"cmdoption-osxphotos-export-touch-file","--touch-file"],[0,4,1,"cmdoption-osxphotos-export-update","--update"],[0,4,1,"cmdoption-osxphotos-export-use-photokit","--use-photokit"],[0,4,1,"cmdoption-osxphotos-export-use-photos-export","--use-photos-export"],[0,4,1,"cmdoption-osxphotos-export-uti","--uti"],[0,4,1,"cmdoption-osxphotos-export-uuid","--uuid"],[0,4,1,"cmdoption-osxphotos-export-uuid-from-file","--uuid-from-file"],[0,4,1,"cmdoption-osxphotos-export-V","--verbose"],[0,4,1,"cmdoption-osxphotos-export-xattr-template","--xattr-template"],[0,4,1,"cmdoption-osxphotos-export-V","-V"],[0,4,1,"cmdoption-osxphotos-export-i","-i"],[0,4,1,"cmdoption-osxphotos-export-arg-DEST","DEST"],[0,4,1,"cmdoption-osxphotos-export-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-help":[[0,4,1,"cmdoption-osxphotos-help-arg-TOPIC","TOPIC"]],"osxphotos-info":[[0,4,1,"cmdoption-osxphotos-info-db","--db"],[0,4,1,"cmdoption-osxphotos-info-json","--json"],[0,4,1,"cmdoption-osxphotos-info-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-install":[[0,4,1,"cmdoption-osxphotos-install-U","--upgrade"],[0,4,1,"cmdoption-osxphotos-install-U","-U"],[0,4,1,"cmdoption-osxphotos-install-arg-PACKAGES","PACKAGES"]],"osxphotos-keywords":[[0,4,1,"cmdoption-osxphotos-keywords-db","--db"],[0,4,1,"cmdoption-osxphotos-keywords-json","--json"],[0,4,1,"cmdoption-osxphotos-keywords-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-labels":[[0,4,1,"cmdoption-osxphotos-labels-db","--db"],[0,4,1,"cmdoption-osxphotos-labels-json","--json"],[0,4,1,"cmdoption-osxphotos-labels-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-list":[[0,4,1,"cmdoption-osxphotos-list-json","--json"]],"osxphotos-persons":[[0,4,1,"cmdoption-osxphotos-persons-db","--db"],[0,4,1,"cmdoption-osxphotos-persons-json","--json"],[0,4,1,"cmdoption-osxphotos-persons-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-places":[[0,4,1,"cmdoption-osxphotos-places-db","--db"],[0,4,1,"cmdoption-osxphotos-places-json","--json"],[0,4,1,"cmdoption-osxphotos-places-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-query":[[0,4,1,"cmdoption-osxphotos-query-add-to-album","--add-to-album"],[0,4,1,"cmdoption-osxphotos-query-album","--album"],[0,4,1,"cmdoption-osxphotos-query-burst","--burst"],[0,4,1,"cmdoption-osxphotos-query-cloudasset","--cloudasset"],[0,4,1,"cmdoption-osxphotos-query-db","--db"],[0,4,1,"cmdoption-osxphotos-query-deleted","--deleted"],[0,4,1,"cmdoption-osxphotos-query-deleted-only","--deleted-only"],[0,4,1,"cmdoption-osxphotos-query-description","--description"],[0,4,1,"cmdoption-osxphotos-query-duplicate","--duplicate"],[0,4,1,"cmdoption-osxphotos-query-edited","--edited"],[0,4,1,"cmdoption-osxphotos-query-exif","--exif"],[0,4,1,"cmdoption-osxphotos-query-external-edit","--external-edit"],[0,4,1,"cmdoption-osxphotos-query-favorite","--favorite"],[0,4,1,"cmdoption-osxphotos-query-folder","--folder"],[0,4,1,"cmdoption-osxphotos-query-from-date","--from-date"],[0,4,1,"cmdoption-osxphotos-query-from-time","--from-time"],[0,4,1,"cmdoption-osxphotos-query-has-comment","--has-comment"],[0,4,1,"cmdoption-osxphotos-query-has-likes","--has-likes"],[0,4,1,"cmdoption-osxphotos-query-has-raw","--has-raw"],[0,4,1,"cmdoption-osxphotos-query-hdr","--hdr"],[0,4,1,"cmdoption-osxphotos-query-hidden","--hidden"],[0,4,1,"cmdoption-osxphotos-query-i","--ignore-case"],[0,4,1,"cmdoption-osxphotos-query-in-album","--in-album"],[0,4,1,"cmdoption-osxphotos-query-incloud","--incloud"],[0,4,1,"cmdoption-osxphotos-query-is-reference","--is-reference"],[0,4,1,"cmdoption-osxphotos-query-json","--json"],[0,4,1,"cmdoption-osxphotos-query-keyword","--keyword"],[0,4,1,"cmdoption-osxphotos-query-label","--label"],[0,4,1,"cmdoption-osxphotos-query-live","--live"],[0,4,1,"cmdoption-osxphotos-query-location","--location"],[0,4,1,"cmdoption-osxphotos-query-max-size","--max-size"],[0,4,1,"cmdoption-osxphotos-query-min-size","--min-size"],[0,4,1,"cmdoption-osxphotos-query-missing","--missing"],[0,4,1,"cmdoption-osxphotos-query-name","--name"],[0,4,1,"cmdoption-osxphotos-query-no-comment","--no-comment"],[0,4,1,"cmdoption-osxphotos-query-no-description","--no-description"],[0,4,1,"cmdoption-osxphotos-query-no-likes","--no-likes"],[0,4,1,"cmdoption-osxphotos-query-no-location","--no-location"],[0,4,1,"cmdoption-osxphotos-query-no-place","--no-place"],[0,4,1,"cmdoption-osxphotos-query-no-title","--no-title"],[0,4,1,"cmdoption-osxphotos-query-not-burst","--not-burst"],[0,4,1,"cmdoption-osxphotos-query-not-cloudasset","--not-cloudasset"],[0,4,1,"cmdoption-osxphotos-query-not-favorite","--not-favorite"],[0,4,1,"cmdoption-osxphotos-query-not-hdr","--not-hdr"],[0,4,1,"cmdoption-osxphotos-query-not-hidden","--not-hidden"],[0,4,1,"cmdoption-osxphotos-query-not-in-album","--not-in-album"],[0,4,1,"cmdoption-osxphotos-query-not-incloud","--not-incloud"],[0,4,1,"cmdoption-osxphotos-query-not-live","--not-live"],[0,4,1,"cmdoption-osxphotos-query-not-missing","--not-missing"],[0,4,1,"cmdoption-osxphotos-query-not-panorama","--not-panorama"],[0,4,1,"cmdoption-osxphotos-query-not-portrait","--not-portrait"],[0,4,1,"cmdoption-osxphotos-query-not-screenshot","--not-screenshot"],[0,4,1,"cmdoption-osxphotos-query-not-selfie","--not-selfie"],[0,4,1,"cmdoption-osxphotos-query-not-shared","--not-shared"],[0,4,1,"cmdoption-osxphotos-query-not-slow-mo","--not-slow-mo"],[0,4,1,"cmdoption-osxphotos-query-not-time-lapse","--not-time-lapse"],[0,4,1,"cmdoption-osxphotos-query-only-movies","--only-movies"],[0,4,1,"cmdoption-osxphotos-query-only-photos","--only-photos"],[0,4,1,"cmdoption-osxphotos-query-panorama","--panorama"],[0,4,1,"cmdoption-osxphotos-query-person","--person"],[0,4,1,"cmdoption-osxphotos-query-place","--place"],[0,4,1,"cmdoption-osxphotos-query-portrait","--portrait"],[0,4,1,"cmdoption-osxphotos-query-query-eval","--query-eval"],[0,4,1,"cmdoption-osxphotos-query-query-function","--query-function"],[0,4,1,"cmdoption-osxphotos-query-regex","--regex"],[0,4,1,"cmdoption-osxphotos-query-screenshot","--screenshot"],[0,4,1,"cmdoption-osxphotos-query-selected","--selected"],[0,4,1,"cmdoption-osxphotos-query-selfie","--selfie"],[0,4,1,"cmdoption-osxphotos-query-shared","--shared"],[0,4,1,"cmdoption-osxphotos-query-slow-mo","--slow-mo"],[0,4,1,"cmdoption-osxphotos-query-time-lapse","--time-lapse"],[0,4,1,"cmdoption-osxphotos-query-title","--title"],[0,4,1,"cmdoption-osxphotos-query-to-date","--to-date"],[0,4,1,"cmdoption-osxphotos-query-to-time","--to-time"],[0,4,1,"cmdoption-osxphotos-query-uti","--uti"],[0,4,1,"cmdoption-osxphotos-query-uuid","--uuid"],[0,4,1,"cmdoption-osxphotos-query-uuid-from-file","--uuid-from-file"],[0,4,1,"cmdoption-osxphotos-query-i","-i"],[0,4,1,"cmdoption-osxphotos-query-arg-PHOTOS_LIBRARY","PHOTOS_LIBRARY"]],"osxphotos-repl":[[0,4,1,"cmdoption-osxphotos-repl-db","--db"],[0,4,1,"cmdoption-osxphotos-repl-emacs","--emacs"]],"osxphotos-tutorial":[[0,4,1,"cmdoption-osxphotos-tutorial-arg-WIDTH","WIDTH"]],"osxphotos-uninstall":[[0,4,1,"cmdoption-osxphotos-uninstall-y","--yes"],[0,4,1,"cmdoption-osxphotos-uninstall-y","-y"],[0,4,1,"cmdoption-osxphotos-uninstall-arg-PACKAGES","PACKAGES"]],"osxphotos.PhotoInfo":[[3,0,1,"","ExifInfo"],[3,0,1,"","ExportResults"],[3,0,1,"","ScoreInfo"],[3,0,1,"","SearchInfo"],[3,3,1,"","adjustments"],[3,3,1,"","album_info"],[3,3,1,"","albums"],[3,2,1,"","asdict"],[3,3,1,"","burst"],[3,3,1,"","burst_album_info"],[3,3,1,"","burst_albums"],[3,3,1,"","burst_default_pick"],[3,3,1,"","burst_key"],[3,3,1,"","burst_photos"],[3,3,1,"","burst_selected"],[3,3,1,"","comments"],[3,3,1,"","date"],[3,3,1,"","date_added"],[3,3,1,"","date_modified"],[3,3,1,"","date_trashed"],[3,3,1,"","description"],[3,2,1,"","detected_text"],[3,3,1,"","duplicates"],[3,3,1,"","exif_info"],[3,3,1,"","exiftool"],[3,2,1,"","export"],[3,2,1,"","export2"],[3,3,1,"","external_edit"],[3,3,1,"","face_info"],[3,3,1,"","favorite"],[3,3,1,"","filename"],[3,3,1,"","has_raw"],[3,3,1,"","hasadjustments"],[3,3,1,"","hdr"],[3,3,1,"","height"],[3,3,1,"","hidden"],[3,3,1,"","import_info"],[3,3,1,"","incloud"],[3,3,1,"","intrash"],[3,3,1,"","iscloudasset"],[3,3,1,"","ismissing"],[3,3,1,"","ismovie"],[3,3,1,"","isphoto"],[3,3,1,"","israw"],[3,3,1,"","isreference"],[3,2,1,"","json"],[3,3,1,"","keywords"],[3,3,1,"","labels"],[3,3,1,"","labels_normalized"],[3,3,1,"","likes"],[3,3,1,"","live_photo"],[3,3,1,"","location"],[3,3,1,"","moment"],[3,3,1,"","orientation"],[3,3,1,"","original_filename"],[3,3,1,"","original_filesize"],[3,3,1,"","original_height"],[3,3,1,"","original_orientation"],[3,3,1,"","original_width"],[3,3,1,"","owner"],[3,3,1,"","panorama"],[3,3,1,"","path"],[3,3,1,"","path_derivatives"],[3,3,1,"","path_edited"],[3,3,1,"","path_edited_live_photo"],[3,3,1,"","path_live_photo"],[3,3,1,"","path_raw"],[3,3,1,"","person_info"],[3,3,1,"","persons"],[3,3,1,"","place"],[3,3,1,"","portrait"],[3,3,1,"","raw_original"],[3,2,1,"","render_template"],[3,3,1,"","score"],[3,3,1,"","screenshot"],[3,3,1,"","search_info"],[3,3,1,"","search_info_normalized"],[3,3,1,"","selfie"],[3,3,1,"","shared"],[3,3,1,"","slow_mo"],[3,3,1,"","time_lapse"],[3,3,1,"","title"],[3,3,1,"","tzoffset"],[3,3,1,"","uti"],[3,3,1,"","uti_edited"],[3,3,1,"","uti_original"],[3,3,1,"","uti_raw"],[3,3,1,"","uuid"],[3,3,1,"","visible"],[3,3,1,"","width"]],"osxphotos.PhotoInfo.ExifInfo":[[3,1,1,"","aperture"],[3,1,1,"","bit_rate"],[3,1,1,"","camera_make"],[3,1,1,"","camera_model"],[3,1,1,"","codec"],[3,1,1,"","duration"],[3,1,1,"","exposure_bias"],[3,1,1,"","flash_fired"],[3,1,1,"","focal_length"],[3,1,1,"","fps"],[3,1,1,"","iso"],[3,1,1,"","latitude"],[3,1,1,"","lens_model"],[3,1,1,"","longitude"],[3,1,1,"","metering_mode"],[3,1,1,"","sample_rate"],[3,1,1,"","shutter_speed"],[3,1,1,"","track_format"],[3,1,1,"","white_balance"]],"osxphotos.PhotoInfo.ExportResults":[[3,2,1,"","all_files"]],"osxphotos.PhotoInfo.ScoreInfo":[[3,1,1,"","behavioral"],[3,1,1,"","curation"],[3,1,1,"","failure"],[3,1,1,"","harmonious_color"],[3,1,1,"","highlight_visibility"],[3,1,1,"","immersiveness"],[3,1,1,"","interaction"],[3,1,1,"","interesting_subject"],[3,1,1,"","intrusive_object_presence"],[3,1,1,"","lively_color"],[3,1,1,"","low_light"],[3,1,1,"","noise"],[3,1,1,"","overall"],[3,1,1,"","pleasant_camera_tilt"],[3,1,1,"","pleasant_composition"],[3,1,1,"","pleasant_lighting"],[3,1,1,"","pleasant_pattern"],[3,1,1,"","pleasant_perspective"],[3,1,1,"","pleasant_post_processing"],[3,1,1,"","pleasant_reflection"],[3,1,1,"","pleasant_symmetry"],[3,1,1,"","promotion"],[3,1,1,"","sharply_focused_subject"],[3,1,1,"","tastefully_blurred"],[3,1,1,"","well_chosen_subject"],[3,1,1,"","well_framed_subject"],[3,1,1,"","well_timed_shot"]],"osxphotos.PhotoInfo.SearchInfo":[[3,3,1,"","activities"],[3,3,1,"","all"],[3,2,1,"","asdict"],[3,3,1,"","bodies_of_water"],[3,3,1,"","city"],[3,3,1,"","country"],[3,3,1,"","holidays"],[3,3,1,"","labels"],[3,3,1,"","locality_names"],[3,3,1,"","media_types"],[3,3,1,"","month"],[3,3,1,"","neighborhoods"],[3,3,1,"","place_names"],[3,3,1,"","season"],[3,3,1,"","state"],[3,3,1,"","state_abbreviation"],[3,3,1,"","streets"],[3,3,1,"","venue_types"],[3,3,1,"","venues"],[3,3,1,"","year"]],"osxphotos.PhotosDB":[[3,3,1,"","album_info"],[3,3,1,"","album_info_shared"],[3,3,1,"","albums"],[3,3,1,"","albums_as_dict"],[3,3,1,"","albums_shared"],[3,3,1,"","albums_shared_as_dict"],[3,3,1,"","db_path"],[3,3,1,"","db_version"],[3,2,1,"","execute"],[3,3,1,"","folder_info"],[3,3,1,"","folders"],[3,2,1,"","get_db_connection"],[3,2,1,"","get_photo"],[3,3,1,"","import_info"],[3,3,1,"","keywords"],[3,3,1,"","keywords_as_dict"],[3,3,1,"","labels"],[3,3,1,"","labels_as_dict"],[3,3,1,"","labels_normalized"],[3,3,1,"","labels_normalized_as_dict"],[3,3,1,"","library_path"],[3,3,1,"","person_info"],[3,3,1,"","persons"],[3,3,1,"","persons_as_dict"],[3,2,1,"","photos"],[3,2,1,"","photos_by_uuid"],[3,2,1,"","query"]],osxphotos:[[3,0,1,"","PhotoInfo"],[3,0,1,"","PhotosDB"],[0,4,1,"cmdoption-osxphotos-db","--db"],[0,4,1,"cmdoption-osxphotos-json","--json"],[0,4,1,"cmdoption-osxphotos-v","--version"],[0,4,1,"cmdoption-osxphotos-v","-v"]]},objnames:{"0":["py","class","Python class"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["std","cmdoption","program option"]},objtypes:{"0":"py:class","1":"py:attribute","2":"py:method","3":"py:property","4":"std:cmdoption"},terms:{"0":[0,1,3],"00":0,"01":0,"048576mb":0,"07":0,"1":[0,1,3],"10":1,"1048576":0,"11":1,"12":[0,1],"120":3,"12t12":0,"15":1,"1gb":1,"2":[0,1],"20":0,"2000":0,"2001":0,"2019":0,"3":[0,1],"31":0,"4":3,"5":[0,3],"6":1,"7":1,"75":3,"8601":0,"boolean":3,"byte":[0,3],"case":[0,3],"class":[0,3],"default":[0,3],"do":[0,1,3],"export":3,"float":3,"function":[0,3],"import":[0,1,3],"int":3,"long":3,"new":[0,1,3],"public":3,"return":[0,3],"true":[1,3],A:[0,3],AND:[0,3],Be:0,By:0,For:[0,3],If:[0,1,3],In:[0,3],OR:[0,3],The:[0,1,3],Then:1,These:0,To:[0,1],__main__:1,__name__:1,_bearbeiten:0,_edit:0,_low_r:0,_origin:0,_preview:[0,3],abbrevi:3,abil:1,abl:1,about:[1,3],abov:1,absolut:3,access:[1,3],accord:1,activ:3,actual:[0,3],ad:[0,3],add:0,addit:[0,3],adjust:3,adjustmentsinfo:3,adob:0,advanc:1,advantag:0,after:0,against:3,ahead:3,aka:1,album:3,album_info:3,album_info_shar:3,album_nam:1,albuminfo:3,albums_as_dict:[1,3],albums_shar:3,albums_shared_as_dict:3,alic:1,all:[0,3],all_fil:3,allow:[0,1],alpha:0,alreadi:[0,3],also:[0,1,3],altern:[0,1],an:[0,3],ani:[0,1,3],apertur:3,apf:0,app:[0,1,3],append:[0,3],appl:[0,1,3],applescript:[0,3],appli:[0,3],applic:1,ar:[0,3],aren:[1,3],arg:[0,1,3],argument:[0,1],asdict:3,ask:0,asset:3,associ:[0,1,3],assum:3,asynchroun:3,attempt:[0,1,3],attribut:[0,3],author:0,auto:1,automat:0,avail:3,awar:3,back:3,bar:1,base:3,beach:0,becaus:1,been:[0,1,3],befor:[0,1],begin:0,behavior:[0,3],being:0,belong:3,below:[0,1,3],best:[0,3],beta:1,between:3,bind:0,bit:3,bit_rat:3,blob:0,bodi:3,bodies_of_wat:3,bool:3,both:[0,1],brew:1,built:1,burst:[0,3],burst_album:3,burst_album_info:3,burst_default_pick:3,burst_kei:3,burst_photo:3,burst_select:3,call:[0,1,3],callabl:3,camera:[0,3],camera_mak:3,camera_model:3,can:[0,1],cannot:[0,3],canon:[0,3],care:1,categor:3,categori:0,caution:0,cd:1,certain:0,chang:[0,3],charact:1,citi:3,classif:[0,1],cleanup:0,cli:1,click:1,clone:[0,1],cloud:3,cloudasset:0,code:1,codec:3,collis:0,com:[0,1,3],comfort:1,command_nam:1,comment:[0,3],compar:[0,3],compat:[0,1],complex:0,compon:0,comprehens:0,compress:[0,3],comput:3,confid:3,confidence_threshold:3,config:0,confirm:0,conform:3,conjunct:0,connect:[0,3],consist:0,contact:1,contain:[0,1,3],context:0,convert:[0,3],convert_to_jpeg:3,converted_to_jpeg:[0,3],coordin:0,copi:[0,3],copyright:0,correct:3,correspond:0,could:[0,1],count:3,countri:3,cr2:3,creat:0,created:0,creation:3,creationd:0,creator:0,criteria:[0,3],csv:0,curat:3,current:[0,3],cursor:3,dai:0,data:[0,3],databas:[0,1,3],date:[0,3],date_ad:3,date_modifi:3,date_trash:3,datecr:0,datetim:3,datetimeorigin:[0,3],db:[0,1,3],db_path:3,db_version:3,dbfile:3,debug:0,def:1,default_album:1,degre:3,delet:[0,3],deleted_directori:3,deleted_fil:3,deriv:3,desc:0,descend:3,descr:0,describ:1,descript:[0,1,3],description_templ:3,dest:[0,3],dest_dir:1,destin:[1,3],detail:[0,3],detect:3,detected_text:3,determin:3,dict:3,did:0,differ:[0,1,3],digikam:0,dir:1,direct:0,directli:[0,1],directori:0,disabl:1,disk:[0,3],displai:[0,1],doc:0,document:0,doe:[0,1,3],doesn:0,don:0,download:[0,1,3],drive:0,drop:[0,3],dry:[0,3],dry_run:3,dump:1,duplic:[0,1,3],durat:3,dure:[0,3],dynam:0,e:[0,1,3],each:[0,3],earlier:3,easiest:1,easili:1,echo:[0,1],edit:[0,1,3],edited_filenam:3,edited_nam:1,editor:[0,3],either:[0,1,3],els:[1,3],emac:0,embed:0,empti:3,end:[0,3],ensur:[1,3],entir:3,environ:[0,1],equival:0,error:[0,3],error_str:3,etc:[0,1,3],eval:0,evalu:0,even:[0,3],exact:3,exampl:[0,3],except:3,execut:[1,3],exif:[0,3],exif_info:3,exif_tag:0,exif_upd:[0,3],exifinfo:3,exiftool:[0,1,3],exiftool_error:3,exiftool_flag:3,exiftool_path:0,exiftool_pod:0,exiftool_warn:3,exiftoolcach:3,exist:[0,1,3],exit:[0,1],expandus:1,expect:0,experi:0,experiment:0,export2:3,export_as_hardlink:3,export_db:3,export_dir:0,export_path:1,exportdb:0,exportdb_abc:3,exportdb_fil:0,exportdbinmemori:3,exported_album:3,exportresult:3,exposure_bia:3,express:0,ext:0,extend:[0,3],extens:[0,3],extern:[0,3],external_edit:3,extract:3,f:[0,1,3],face:[0,1,3],face_info:3,faceinfo:3,fail:3,failur:3,fall:3,fals:3,familiar:1,faster:[0,3],favorit:[0,3],featur:0,field:3,file:[0,3],filenam:[0,1,3],filename_origin:0,filepath:[0,1],files:3,fileutil:3,fileutilabc:3,fileutilnoop:3,filter:0,find:0,finder:0,findercom:0,first:[0,3],flag:[0,3],flash_fir:3,flexibl:1,focal_length:3,folder:[0,3],folder_album:0,folder_info:3,folderinfo:3,follow:[0,1],foo:1,forc:[0,3],form:0,format:[0,1,3],found:[0,1,3],fp:3,from:[0,3],from_dat:[0,3],from_tim:0,front:[0,3],full:[0,3],g:[0,1,3],gener:[0,3],geoloc:[0,3],get:[1,3],get_db_connect:3,get_photo:3,github:[0,1],give:0,gp:0,gpscoordin:0,gpslatitud:0,gpslatituderef:0,gpslongitud:0,gpslongituderef:0,gpsposit:0,gpu:0,group:[0,3],h:1,ha:[0,1,3],had:0,handl:0,happen:0,hardlink:[0,3],harmonious_color:3,has_raw:3,hasadjust:[1,3],hash:0,have:[0,1,3],haven:0,hdr:[0,3],headlin:0,heic:0,height:[0,3],help:1,here:0,hidden:[0,3],high:0,highli:0,highlight_vis:3,hold:3,holidai:3,homebrew:1,how:0,html:0,http:[0,1,3],i:[0,1,3],icloud:[0,3],identifi:[0,3],ignor:[0,3],ignore_date_modifi:3,ignore_signatur:3,imag:[0,1,3],imagedescript:0,img_1234:[0,3],immedi:3,immers:3,implement:0,import_info:3,importinfo:3,incloud:[0,3],includ:[0,1,3],incorrect:3,increment:3,index:1,info:[1,3],inform:[0,1,3],initi:3,insensit:0,inspect:0,instal:3,instanc:3,instead:[0,3],instruct:1,integ:0,intend:0,interact:[0,1,3],interesting_subject:3,intermitt:0,internet:0,intrash:3,intrusive_object_pres:3,invalid:[1,3],io:0,iptc:[0,3],is_valid_filepath:1,iscloudasset:3,isdir:1,ismiss:[1,3],ismovi:3,iso:[0,3],isphoto:3,israw:3,isrefer:3,item:[0,3],iterm2:0,j:[0,3],john:1,join:1,jpeg:[0,3],jpeg_ext:3,jpeg_qual:[0,3],jpg:[0,3],json:[0,3],just:1,kei:3,keybind:0,keyword:3,keyword_templ:3,keywords_as_dict:[1,3],know:[0,3],label:3,labels_as_dict:3,labels_norm:3,labels_normalized_as_dict:3,laps:[0,3],larg:[0,1],largest:3,last:[0,1],later:0,latest:[0,1],latitud:3,launch:0,lead:[0,3],learn:3,lens_model:3,level:[0,3],librari:[0,3],library_path:[1,3],licens:[0,1],lightroom:0,liglob:3,like:[0,1,3],list:[1,3],live:[0,3],live_photo:3,lively_color:3,load:0,local:3,locality_nam:3,locat:[0,3],log:3,longitud:3,look:[0,1,3],lot:0,low_light:3,lower:0,m:[0,1,3],mac:[0,1],machin:[0,1,3],maco:[0,1],mai:[0,3],main:1,make:[0,1],makedir:1,mangl:3,mani:0,mark:[0,3],master:0,match:[0,3],max:0,maximum:[0,3],me:1,mean:3,media:3,media_typ:[1,3],memori:3,merg:[0,3],merge_exif_keyword:3,merge_exif_person:3,messag:1,metadata:[0,3],metering_mod:3,method:3,mib:0,microsoft:0,might:3,min:[0,1],minor:0,miss:[0,1,3],missing_album:3,mo:0,mode:[0,3],modif:[0,3],modifi:0,modifyd:[0,3],modul:1,moment:3,monterei:1,month:3,more:[0,1,3],most:0,motion:[0,3],mov:[0,3],movi:[0,1,3],multi:0,multipl:[0,1],must:[0,3],mysteri:3,naiv:3,name:[0,3],need:1,neighborhood:3,neither:[0,1,3],network:0,nist:0,nois:3,non:[0,3],none:[1,3],nor:0,normal:[0,3],note:[0,1,3],notic:3,now:1,object:[0,3],obvious:0,occur:[0,3],offset:3,offsettimeorigin:0,older:3,one:[0,3],onli:[0,3],op:3,open:[0,1],option:[0,1,3],order:[0,1,3],org:[0,3],organ:0,orient:3,origin:[0,1,3],original_filenam:[1,3],original_files:3,original_height:3,original_nam:0,original_orient:3,original_width:3,os:1,osxphotos_export:0,other:[0,1,3],otherwis:[1,3],out:[0,1],output:[0,3],outsid:3,overal:3,overrid:0,overwrit:[0,3],own:[0,1],owner:3,p:1,packag:0,page:1,pair:[0,3],panorama:[0,3],paramet:[1,3],part:[0,3],particip:0,particular:3,pass:[0,3],path:[0,1,3],path_deriv:3,path_edit:[1,3],path_edited_live_photo:3,path_live_photo:3,path_raw:3,pathlib:1,pathvalid:1,per:0,permit:0,person:3,person_info:3,personinfo:3,personinimag:0,persons_as_dict:[1,3],photo:[0,3],photo_ext:0,photo_filenam:0,photoinfo:[0,3],photokit:0,photonam:0,photoname_bearbeiten:0,photoname_edit:0,photoname_low_r:0,photoname_preview:0,photos_by_uuid:3,photos_librari:[0,1],photosdb:[1,3],photoshop:0,photoslibrari:[0,1],phototempl:3,pictur:[0,1,3],pixel:3,place:[1,3],place_nam:3,placeinfo:3,platform:1,pleas:1,pleasant_camera_tilt:3,pleasant_composit:3,pleasant_light:3,pleasant_pattern:3,pleasant_perspect:3,pleasant_post_process:3,pleasant_reflect:3,pleasant_symmetri:3,png:0,portrait:[0,3],posit:[0,1],possibl:[0,3],post:0,pre:1,preced:0,present:0,preview:[0,3],preview_suffix:3,previous:0,primari:0,print:[0,3],process:[0,3],produc:3,project:[0,1],promot:3,properti:3,prototyp:0,provid:[0,1,3],py:[0,1],pylint:1,pypi:1,python3:1,python:[0,1],qualiti:[0,3],queri:[1,3],query_funct:0,queryopt:3,quickli:0,quicktim:[0,3],rais:3,rang:[0,3],rate:0,raw:[0,3],raw_origin:3,raw_photo:3,re:0,read:[1,3],readabl:3,recent:[0,3],recommend:1,refer:[0,1,3],referenc:0,regardless:3,regex:0,region:0,regular:0,relat:3,releas:1,reliabl:0,remov:0,renam:0,render:[0,3],render_opt:3,render_templ:3,rendered_str:3,renderopt:3,repeat:0,repl:1,replac:[0,3],replace_keyword:3,repo:1,report:0,repres:[0,3],represent:3,requir:[0,1,3],resolut:0,result:[0,3],retri:0,reus:0,revers:[0,3],rhettbul:[0,1],run:[0,1,3],s:[0,3],same:[0,3],sample_r:3,sanitize_filepath:1,save:0,score:3,scoreinfo:3,screenshot:[0,3],script:0,search:[0,1,3],search_info:3,search_info_norm:3,searchinfo:3,season:3,second:3,see:[0,1,3],select:[0,3],self:3,selfi:[0,3],session:3,set:[0,3],setup:1,setuptool:1,sh:1,share:[0,3],sharply_focused_subject:3,shell:[0,1],shell_quot:0,shot:0,should:[0,1],show:[0,1,3],shutter_spe:3,si:0,sidecar:[0,3],sidecar_drop_ext:3,sidecar_exiftool:3,sidecar_exiftool_skip:[0,3],sidecar_exiftool_written:[0,3],sidecar_ext:0,sidecar_json:3,sidecar_json_skip:[0,3],sidecar_json_written:[0,3],sidecar_xmp:3,sidecar_xmp_skip:[0,3],sidecar_xmp_written:[0,3],sierra:1,signatur:[0,3],silent:3,simpl:1,simpli:1,singl:[0,3],size:[0,1,3],skip:[0,1,3],skipped_album:3,slow:[0,3],slow_mo:3,smith:1,so:3,softwar:0,some:3,someth:3,sort:3,sourc:3,space:0,specif:[1,3],specifi:[0,3],spotlight:[0,1],sql:3,sqlite3:3,stack:3,start:[0,1],state:[0,3],state_abbrevi:3,statement:3,statu:[0,3],still:3,storat:3,store:[0,3],str:3,street:3,string:[0,3],strip:[0,3],subfold:0,subject:0,subsequ:0,suffix:[0,3],suppli:3,sur:1,sure:[0,1],sy:1,synch:[0,3],system:0,t:[0,1,3],tabl:3,tag:[0,1,3],tagnam:0,tagslist:0,take:1,taken:0,tastefully_blur:3,templat:[0,1,3],template_str:3,term:3,termin:[0,1],test:[0,1],text:3,text_detection_confidence_threshold:3,than:[0,3],thei:[0,3],them:[0,3],thi:[0,1,3],threshold:3,through:1,thu:[0,1],time:[0,3],time_laps:3,timecr:0,timeout:3,timezon:[0,3],titl:[0,1,3],to_dat:[0,3],to_tim:0,todai:0,toml:0,top:[0,3],topic:0,touch:[0,3],touch_fil:3,town:3,track_format:3,trail:0,trash:3,treat:[0,3],tupl:3,tutori:1,two:0,txt:0,type:[0,3],tzoffset:3,u:0,unedit:1,unfil:1,uniform:[0,3],uninstal:1,unit:0,unless:3,unlik:0,unmatch:3,until:3,up:0,updat:[0,3],upgrad:0,upon:[0,3],us:[0,3],use_albums_as_keyword:3,use_persons_as_keyword:3,use_photokit:3,use_photos_export:3,useabl:0,user:3,userdata:0,utc:3,uti:[0,3],uti_edit:3,uti_origin:3,uti_raw:3,util:[1,3],uuid:[0,1,3],v:[0,1],vacat:3,valid:[0,1,3],valu:[0,1,3],variou:3,ve:[0,3],venu:3,venue_typ:3,verbos:[0,3],veri:1,verifi:1,versa:1,version:[0,1,3],vi:0,via:[0,1,3],vice:1,video:[0,3],virtual:[0,1],visbl:3,visibl:3,volum:0,wa:[0,3],wai:1,want:[0,1],warn:[0,1,3],water:3,wed:3,well:[0,1,3],well_chosen_subject:3,well_framed_subject:3,well_timed_shot:3,went:0,were:[0,3],what:[0,3],when:[0,3],where:0,whether:0,which:[0,1,3],white_bal:3,whitespac:[0,3],whose:0,width:[0,3],within:0,without:0,work:[0,1,3],would:[0,1],write:[0,3],written:[0,3],x:1,xattr:0,xattr_skip:3,xattr_written:3,xmp:[0,3],y:0,ye:0,year:[0,3],yet:3,you:[0,1,3],your:[0,1]},titles:["osxphotos command line interface (CLI)","Welcome to osxphotos\u2019s documentation!","osxphotos","osxphotos package"],titleterms:{"200mb":1,"4":1,"5":1,"default":1,"export":[0,1],about:0,add:1,album:[0,1],all:1,ar:1,awail:1,base:1,big:1,chang:1,cli:0,command:[0,1],countri:1,creat:1,creation:1,date:1,desktop:1,digit:1,directori:1,document:1,dump:0,exampl:1,exif:1,file:1,find:1,folder:1,from:1,full:1,git:1,group:1,help:0,higher:1,indic:1,info:0,instal:[0,1],interfac:[0,1],json:1,keyword:[0,1],kid:1,label:[0,1],larger:1,librari:1,line:[0,1],list:0,media:1,metadata:1,modul:3,month:1,name:1,necessari:1,nocountri:1,onli:1,oper:1,osxphoto:[0,1,2,3],ouput:1,output:1,packag:[1,3],person:[0,1],photo:1,pip:1,pipx:1,place:0,print:1,queri:0,repl:0,repositori:1,result:1,s:1,specifi:1,structur:1,support:1,system:1,tabl:1,than:1,them:1,tutori:0,type:1,uninstal:0,updat:1,us:1,usag:1,verbos:1,video:1,welcom:1,what:1,when:1,write:1,year:1}}) \ No newline at end of file +Search.setIndex({docnames:["cli","index","modules","reference"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["cli.rst","index.rst","modules.rst","reference.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":1,"00":[],"01":[],"048576mb":[],"07":[],"1":1,"10":1,"1048576":[],"11":1,"12":1,"120":[],"12t12":[],"15":1,"1gb":1,"2":1,"20":[],"2000":[],"2001":[],"2019":[],"3":1,"31":[],"4":[],"5":[],"6":1,"7":1,"75":[],"8601":[],"boolean":[],"byte":[],"case":[],"class":[],"default":[],"do":1,"export":[],"float":[],"function":[],"import":1,"int":[],"long":[],"new":1,"public":[],"return":[],"true":1,A:[],AND:[],Be:[],By:[],For:[],If:1,In:[],OR:[],The:1,Then:1,These:[],To:1,__main__:1,__name__:1,_bearbeiten:[],_edit:[],_low_r:[],_origin:[],_preview:[],abbrevi:[],abil:1,abl:1,about:1,abov:1,absolut:[],access:1,accord:1,activ:[],actual:[],ad:[],add:[],addit:[],adjust:[],adjustmentsinfo:[],adob:[],advanc:1,advantag:[],after:[],against:[],ahead:[],aka:1,album:[],album_info:[],album_info_shar:[],album_nam:1,albuminfo:[],albums_as_dict:1,albums_shar:[],albums_shared_as_dict:[],alic:1,all:[],all_fil:[],allow:1,alpha:[],alreadi:[],also:1,altern:1,an:[],ani:1,apertur:[],apf:[],app:1,append:[],appl:1,applescript:[],appli:[],applic:1,ar:[],aren:1,arg:1,argument:1,asdict:[],ask:[],asset:[],associ:1,assum:[],asynchroun:[],attempt:1,attribut:[],author:[],auto:1,automat:[],avail:[],awar:[],back:[],bar:1,base:[],beach:[],becaus:1,been:1,befor:1,begin:[],behavior:[],being:[],belong:[],below:1,best:[],beta:1,between:[],bind:[],bit:[],bit_rat:[],blob:[],bodi:[],bodies_of_wat:[],bool:[],both:1,brew:1,built:1,burst:[],burst_album:[],burst_album_info:[],burst_default_pick:[],burst_kei:[],burst_photo:[],burst_select:[],call:1,callabl:[],camera:[],camera_mak:[],camera_model:[],can:1,cannot:[],canon:[],care:1,categor:[],categori:[],caution:[],cd:1,certain:[],chang:[],charact:1,citi:[],classif:1,cleanup:[],cli:1,click:1,clone:1,cloud:[],cloudasset:[],code:1,codec:[],collis:[],com:1,comfort:1,command_nam:1,comment:[],compar:[],compat:1,complex:[],compon:[],comprehens:[],compress:[],comput:[],confid:[],confidence_threshold:[],config:[],confirm:[],conform:[],conjunct:[],connect:[],consist:[],contact:1,contain:1,context:[],convert:[],convert_to_jpeg:[],converted_to_jpeg:[],coordin:[],copi:[],copyright:[],correct:[],correspond:[],could:1,count:[],countri:[],cr2:[],creat:[],created:[],creation:[],creationd:[],creator:[],criteria:[],csv:[],curat:[],current:[],cursor:[],dai:[],data:[],databas:1,date:[],date_ad:[],date_modifi:[],date_trash:[],datecr:[],datetim:[],datetimeorigin:[],db:1,db_path:[],db_version:[],dbfile:[],debug:[],def:1,default_album:1,degre:[],delet:[],deleted_directori:[],deleted_fil:[],deriv:[],desc:[],descend:[],descr:[],describ:1,descript:1,description_templ:[],dest:[],dest_dir:1,destin:1,detail:[],detect:[],detected_text:[],determin:[],dict:[],did:[],differ:1,digikam:[],dir:1,direct:[],directli:1,directori:[],disabl:1,disk:[],displai:1,doc:[],document:[],doe:1,doesn:[],don:[],download:1,drive:[],drop:[],dry:[],dry_run:[],dump:1,duplic:1,durat:[],dure:[],dynam:[],e:1,each:[],earlier:[],easiest:1,easili:1,echo:1,edit:1,edited_filenam:[],edited_nam:1,editor:[],either:1,els:1,emac:[],embed:[],empti:[],end:[],ensur:1,entir:[],environ:1,equival:[],error:[],error_str:[],etc:1,eval:[],evalu:[],even:[],exact:[],exampl:[],except:[],execut:1,exif:[],exif_info:[],exif_tag:[],exif_upd:[],exifinfo:[],exiftool:1,exiftool_error:[],exiftool_flag:[],exiftool_path:[],exiftool_pod:[],exiftool_warn:[],exiftoolcach:[],exist:1,exit:1,expandus:1,expect:[],experi:[],experiment:[],export2:[],export_as_hardlink:[],export_db:[],export_dir:[],export_path:1,exportdb:[],exportdb_abc:[],exportdb_fil:[],exportdbinmemori:[],exported_album:[],exportresult:[],exposure_bia:[],express:[],ext:[],extend:[],extens:[],extern:[],external_edit:[],extract:[],f:1,face:1,face_info:[],faceinfo:[],fail:[],failur:[],fall:[],fals:[],familiar:1,faster:[],favorit:[],featur:[],field:[],file:[],filenam:1,filename_origin:[],filepath:1,files:[],fileutil:[],fileutilabc:[],fileutilnoop:[],filter:[],find:[],finder:[],findercom:[],first:[],flag:[],flash_fir:[],flexibl:1,focal_length:[],folder:[],folder_album:[],folder_info:[],folderinfo:[],follow:1,foo:1,forc:[],form:[],format:1,found:1,fp:[],from:[],from_dat:[],from_tim:[],front:[],full:[],g:1,gener:[],geoloc:[],get:1,get_db_connect:[],get_photo:[],github:1,give:[],gp:[],gpscoordin:[],gpslatitud:[],gpslatituderef:[],gpslongitud:[],gpslongituderef:[],gpsposit:[],gpu:[],group:[],h:1,ha:1,had:[],handl:[],happen:[],hardlink:[],harmonious_color:[],has_raw:[],hasadjust:1,hash:[],have:1,haven:[],hdr:[],headlin:[],heic:[],height:[],help:1,here:[],hidden:[],high:[],highli:[],highlight_vis:[],hold:[],holidai:[],homebrew:1,how:[],html:[],http:1,i:1,icloud:[],identifi:[],ignor:[],ignore_date_modifi:[],ignore_signatur:[],imag:1,imagedescript:[],img_1234:[],immedi:[],immers:[],implement:[],import_info:[],importinfo:[],incloud:[],includ:1,incorrect:[],increment:[],index:1,info:1,inform:1,initi:[],insensit:[],inspect:[],instal:[],instanc:[],instead:[],instruct:1,integ:[],intend:[],interact:1,interesting_subject:[],intermitt:[],internet:[],intrash:[],intrusive_object_pres:[],invalid:1,io:[],iptc:[],is_valid_filepath:1,iscloudasset:[],isdir:1,ismiss:1,ismovi:[],iso:[],isphoto:[],israw:[],isrefer:[],item:[],iterm2:[],j:[],john:1,join:1,jpeg:[],jpeg_ext:[],jpeg_qual:[],jpg:[],json:[],just:1,kei:[],keybind:[],keyword:[],keyword_templ:[],keywords_as_dict:1,know:[],label:[],labels_as_dict:[],labels_norm:[],labels_normalized_as_dict:[],laps:[],larg:1,largest:[],last:1,later:[],latest:1,latitud:[],launch:[],lead:[],learn:[],lens_model:[],level:[],librari:[],library_path:1,licens:1,lightroom:[],liglob:[],like:1,list:1,live:[],live_photo:[],lively_color:[],load:[],local:[],locality_nam:[],locat:[],log:[],longitud:[],look:1,lot:[],low_light:[],lower:[],m:1,mac:1,machin:1,maco:1,mai:[],main:1,make:1,makedir:1,mangl:[],mani:[],mark:[],master:[],match:[],max:[],maximum:[],me:1,mean:[],media:[],media_typ:1,memori:[],merg:[],merge_exif_keyword:[],merge_exif_person:[],messag:1,metadata:[],metering_mod:[],method:[],mib:[],microsoft:[],might:[],min:1,minor:[],miss:1,missing_album:[],mo:[],mode:[],modif:[],modifi:[],modifyd:[],modul:1,moment:[],monterei:1,month:[],more:1,most:[],motion:[],mov:[],movi:1,multi:[],multipl:1,must:[],mysteri:[],naiv:[],name:[],need:1,neighborhood:[],neither:1,network:[],nist:[],nois:[],non:[],none:1,nor:[],normal:[],note:1,notic:[],now:1,object:[],obvious:[],occur:[],offset:[],offsettimeorigin:[],older:[],one:[],onli:[],op:[],open:1,option:1,order:1,org:[],organ:[],orient:[],origin:1,original_filenam:1,original_files:[],original_height:[],original_nam:[],original_orient:[],original_width:[],os:1,osxphotos_export:[],other:1,otherwis:1,out:1,output:[],outsid:[],overal:[],overrid:[],overwrit:[],own:1,owner:[],p:1,packag:[],page:1,pair:[],panorama:[],paramet:1,part:[],particip:[],particular:[],pass:[],path:1,path_deriv:[],path_edit:1,path_edited_live_photo:[],path_live_photo:[],path_raw:[],pathlib:1,pathvalid:1,per:[],permit:[],person:[],person_info:[],personinfo:[],personinimag:[],persons_as_dict:1,photo:[],photo_ext:[],photo_filenam:[],photoinfo:[],photokit:[],photonam:[],photoname_bearbeiten:[],photoname_edit:[],photoname_low_r:[],photoname_preview:[],photos_by_uuid:[],photos_librari:1,photosdb:1,photoshop:[],photoslibrari:1,phototempl:[],pictur:1,pixel:[],place:1,place_nam:[],placeinfo:[],platform:1,pleas:1,pleasant_camera_tilt:[],pleasant_composit:[],pleasant_light:[],pleasant_pattern:[],pleasant_perspect:[],pleasant_post_process:[],pleasant_reflect:[],pleasant_symmetri:[],png:[],portrait:[],posit:1,possibl:[],post:[],pre:1,preced:[],present:[],preview:[],preview_suffix:[],previous:[],primari:[],print:[],process:[],produc:[],project:1,promot:[],properti:[],prototyp:[],provid:1,py:1,pylint:1,pypi:1,python3:1,python:1,qualiti:[],queri:1,query_funct:[],queryopt:[],quickli:[],quicktim:[],rais:[],rang:[],rate:[],raw:[],raw_origin:[],raw_photo:[],re:[],read:1,readabl:[],recent:[],recommend:1,refer:1,referenc:[],regardless:[],regex:[],region:[],regular:[],relat:[],releas:1,reliabl:[],remov:[],renam:[],render:[],render_opt:[],render_templ:[],rendered_str:[],renderopt:[],repeat:[],repl:1,replac:[],replace_keyword:[],repo:1,report:[],repres:[],represent:[],requir:1,resolut:[],result:[],retri:[],reus:[],revers:[],rhettbul:1,run:1,s:[],same:[],sample_r:[],sanitize_filepath:1,save:[],score:[],scoreinfo:[],screenshot:[],script:[],search:1,search_info:[],search_info_norm:[],searchinfo:[],season:[],second:[],see:1,select:[],self:[],selfi:[],session:[],set:[],setup:1,setuptool:1,sh:1,share:[],sharply_focused_subject:[],shell:1,shell_quot:[],shot:[],should:1,show:1,shutter_spe:[],si:[],sidecar:[],sidecar_drop_ext:[],sidecar_exiftool:[],sidecar_exiftool_skip:[],sidecar_exiftool_written:[],sidecar_ext:[],sidecar_json:[],sidecar_json_skip:[],sidecar_json_written:[],sidecar_xmp:[],sidecar_xmp_skip:[],sidecar_xmp_written:[],sierra:1,signatur:[],silent:[],simpl:1,simpli:1,singl:[],size:1,skip:1,skipped_album:[],slow:[],slow_mo:[],smith:1,so:[],softwar:[],some:[],someth:[],sort:[],sourc:[],space:[],specif:1,specifi:[],spotlight:1,sql:[],sqlite3:[],stack:[],start:1,state:[],state_abbrevi:[],statement:[],statu:[],still:[],storat:[],store:[],str:[],street:[],string:[],strip:[],subfold:[],subject:[],subsequ:[],suffix:[],suppli:[],sur:1,sure:1,sy:1,synch:[],system:[],t:1,tabl:[],tag:1,tagnam:[],tagslist:[],take:1,taken:[],tastefully_blur:[],templat:1,template_str:[],term:[],termin:1,test:1,text:[],text_detection_confidence_threshold:[],than:[],thei:[],them:[],thi:1,threshold:[],through:1,thu:1,time:[],time_laps:[],timecr:[],timeout:[],timezon:[],titl:1,to_dat:[],to_tim:[],todai:[],toml:[],top:[],topic:[],touch:[],touch_fil:[],town:[],track_format:[],trail:[],trash:[],treat:[],tupl:[],tutori:1,two:[],txt:[],type:[],tzoffset:[],u:[],unedit:1,unfil:1,uniform:[],uninstal:[],unit:[],unless:[],unlik:[],unmatch:[],until:[],up:[],updat:[],upgrad:[],upon:[],us:[],use_albums_as_keyword:[],use_persons_as_keyword:[],use_photokit:[],use_photos_export:[],useabl:[],user:[],userdata:[],utc:[],uti:[],uti_edit:[],uti_origin:[],uti_raw:[],util:1,uuid:1,v:1,vacat:[],valid:1,valu:1,variou:[],ve:[],venu:[],venue_typ:[],verbos:[],veri:1,verifi:1,versa:1,version:1,vi:[],via:1,vice:1,video:[],virtual:1,visbl:[],visibl:[],volum:[],wa:[],wai:1,want:1,warn:1,water:[],wed:[],well:1,well_chosen_subject:[],well_framed_subject:[],well_timed_shot:[],went:[],were:[],what:[],when:[],where:[],whether:[],which:1,white_bal:[],whitespac:[],whose:[],width:[],within:[],without:[],work:1,would:1,write:[],written:[],x:1,xattr:[],xattr_skip:[],xattr_written:[],xmp:[],y:[],ye:[],year:[],yet:[],you:1,your:1},titles:["osxphotos command line interface (CLI)","Welcome to osxphotos\u2019s documentation!","osxphotos","osxphotos package"],titleterms:{"200mb":1,"4":1,"5":1,"default":1,"export":1,about:[],add:1,album:1,all:1,ar:1,awail:1,base:1,big:1,chang:1,cli:0,command:[0,1],countri:1,creat:1,creation:1,date:1,desktop:1,digit:1,directori:1,document:1,dump:[],exampl:1,exif:1,file:1,find:1,folder:1,from:1,full:1,git:1,group:1,help:[],higher:1,indic:1,info:[],instal:1,interfac:[0,1],json:1,keyword:1,kid:1,label:1,larger:1,librari:1,line:[0,1],list:[],media:1,metadata:1,modul:3,month:1,name:1,necessari:1,nocountri:1,onli:1,oper:1,osxphoto:[0,1,2,3],ouput:1,output:1,packag:[1,3],person:1,photo:1,pip:1,pipx:1,place:[],print:1,queri:[],repl:[],repositori:1,result:1,s:1,specifi:1,structur:1,support:1,system:1,tabl:1,than:1,them:1,tutori:[],type:1,uninstal:[],updat:1,us:1,usag:1,verbos:1,video:1,welcom:1,what:1,when:1,write:1,year:1}}) \ No newline at end of file diff --git a/osxphotos/_constants.py b/osxphotos/_constants.py index 4bece2f5..5b17bca6 100644 --- a/osxphotos/_constants.py +++ b/osxphotos/_constants.py @@ -123,12 +123,20 @@ _XMP_TEMPLATE_NAME_BETA = "xmp_sidecar_beta.mako" # Constants used for processing folders and albums _PHOTOS_5_ALBUM_KIND = 2 # normal user album _PHOTOS_5_SHARED_ALBUM_KIND = 1505 # shared album +_PHOTOS_5_PROJECT_ALBUM_KIND = 1508 # My Projects (e.g. Calendar, Card, Slideshow) _PHOTOS_5_FOLDER_KIND = 4000 # user folder _PHOTOS_5_ROOT_FOLDER_KIND = 3999 # root folder _PHOTOS_5_IMPORT_SESSION_ALBUM_KIND = 1506 # import session _PHOTOS_4_ALBUM_KIND = 3 # RKAlbum.albumSubclass -_PHOTOS_4_TOP_LEVEL_ALBUM = "TopLevelAlbums" +_PHOTOS_4_ALBUM_TYPE_ALBUM = 1 # RKAlbum.albumType +_PHOTOS_4_ALBUM_TYPE_PROJECT = 9 # RKAlbum.albumType +_PHOTOS_4_ALBUM_TYPE_SLIDESHOW = 8 # RKAlbum.albumType +_PHOTOS_4_TOP_LEVEL_ALBUMS = [ + "TopLevelAlbums", + "TopLevelKeepsakes", + "TopLevelSlideshows", +] _PHOTOS_4_ROOT_FOLDER = "LibraryFolder" # EXIF related constants diff --git a/osxphotos/_version.py b/osxphotos/_version.py index aa90a84a..ed56f193 100644 --- a/osxphotos/_version.py +++ b/osxphotos/_version.py @@ -1,3 +1,3 @@ """ version info """ -__version__ = "0.43.9" +__version__ = "0.44.0" diff --git a/osxphotos/albuminfo.py b/osxphotos/albuminfo.py index 2446cd48..e431a279 100644 --- a/osxphotos/albuminfo.py +++ b/osxphotos/albuminfo.py @@ -14,7 +14,7 @@ from datetime import datetime, timedelta, timezone from ._constants import ( _PHOTOS_4_ALBUM_KIND, - _PHOTOS_4_TOP_LEVEL_ALBUM, + _PHOTOS_4_TOP_LEVEL_ALBUMS, _PHOTOS_4_VERSION, _PHOTOS_5_ALBUM_KIND, _PHOTOS_5_FOLDER_KIND, @@ -161,7 +161,6 @@ class AlbumInfoBaseClass: class AlbumInfo(AlbumInfoBaseClass): """ - Base class for AlbumInfo, ImportInfo Info about a specific Album, contains all the details about the album including folders, photos, etc. """ @@ -231,7 +230,7 @@ class AlbumInfo(AlbumInfoBaseClass): parent_uuid = self._db._dbalbum_details[self._uuid]["folderUuid"] self._parent = ( FolderInfo(db=self._db, uuid=parent_uuid) - if parent_uuid != _PHOTOS_4_TOP_LEVEL_ALBUM + if parent_uuid not in _PHOTOS_4_TOP_LEVEL_ALBUMS else None ) else: @@ -266,18 +265,17 @@ class AlbumInfo(AlbumInfoBaseClass): def photo_index(self, photo): """return index of photo in album (based on album sort order)""" - index = 0 - for p in self.photos: + for index, p in enumerate(self.photos): if p.uuid == photo.uuid: return index - index += 1 - else: - raise ValueError( - f"Photo with uuid {photo.uuid} does not appear to be in this album" - ) + raise ValueError( + f"Photo with uuid {photo.uuid} does not appear to be in this album" + ) class ImportInfo(AlbumInfoBaseClass): + """Information about import sessions""" + @property def photos(self): """return list of photos contained in import session""" @@ -296,6 +294,15 @@ class ImportInfo(AlbumInfoBaseClass): return self._photos +class ProjectInfo(AlbumInfo): + """ + ProjectInfo with info about projects + Projects are cards, calendars, slideshows, etc. + """ + + ... + + class FolderInfo: """ Info about a specific folder, contains all the details about the folder @@ -357,7 +364,7 @@ class FolderInfo: parent_uuid = self._db._dbfolder_details[self._uuid]["parentFolderUuid"] self._parent = ( FolderInfo(db=self._db, uuid=parent_uuid) - if parent_uuid != _PHOTOS_4_TOP_LEVEL_ALBUM + if parent_uuid not in _PHOTOS_4_TOP_LEVEL_ALBUMS else None ) else: diff --git a/osxphotos/cli.py b/osxphotos/cli.py index 02a6b7b7..54af9c97 100644 --- a/osxphotos/cli.py +++ b/osxphotos/cli.py @@ -4159,6 +4159,7 @@ def _spotlight_photo(photo: PhotoInfo): ) def repl(ctx, cli_obj, db, emacs): """Run interactive osxphotos REPL shell (useful for debugging, prototyping, and inspecting your Photos library)""" + import logging from objexplore import explore from photoscript import Album, Photo, PhotosLibrary @@ -4169,6 +4170,9 @@ def repl(ctx, cli_obj, db, emacs): from osxphotos.placeinfo import PlaceInfo from osxphotos.queryoptions import QueryOptions + logger = logging.getLogger() + logger.disabled = True + pretty.install() print(f"python version: {sys.version}") print(f"osxphotos version: {osxphotos._version.__version__}") diff --git a/osxphotos/photoinfo/photoinfo.py b/osxphotos/photoinfo/photoinfo.py index 88b6a613..31acac95 100644 --- a/osxphotos/photoinfo/photoinfo.py +++ b/osxphotos/photoinfo/photoinfo.py @@ -20,10 +20,14 @@ from .._constants import ( _MOVIE_TYPE, _PHOTO_TYPE, _PHOTOS_4_ALBUM_KIND, + _PHOTOS_4_ALBUM_TYPE_ALBUM, + _PHOTOS_4_ALBUM_TYPE_PROJECT, + _PHOTOS_4_ALBUM_TYPE_SLIDESHOW, _PHOTOS_4_ROOT_FOLDER, _PHOTOS_4_VERSION, _PHOTOS_5_ALBUM_KIND, _PHOTOS_5_IMPORT_SESSION_ALBUM_KIND, + _PHOTOS_5_PROJECT_ALBUM_KIND, _PHOTOS_5_SHARED_ALBUM_KIND, _PHOTOS_5_SHARED_PHOTO_PATH, _PHOTOS_5_VERSION, @@ -34,7 +38,7 @@ from .._constants import ( TEXT_DETECTION_CONFIDENCE_THRESHOLD, ) from ..adjustmentsinfo import AdjustmentsInfo -from ..albuminfo import AlbumInfo, ImportInfo +from ..albuminfo import AlbumInfo, ImportInfo, ProjectInfo from ..momentinfo import MomentInfo from ..personinfo import FaceInfo, PersonInfo from ..phototemplate import PhotoTemplate, RenderOptions @@ -570,6 +574,18 @@ class PhotoInfo: ) return self._import_info + @property + def project_info(self): + """list of AlbumInfo objects representing projects for the photo or None if no projects""" + try: + return self._project_info + except AttributeError: + project_uuids = self._get_album_uuids(project=True) + self._project_info = [ + ProjectInfo(db=self._db, uuid=album) for album in project_uuids + ] + return self._project_info + @property def keywords(self): """list of keywords for picture""" @@ -1197,34 +1213,48 @@ class PhotoInfo: """Returns latitude, in degrees""" return self._info["latitude"] - def _get_album_uuids(self): + def _get_album_uuids(self, project=False): """Return list of album UUIDs this photo is found in Filters out albums in the trash and any special album types + if project is True, returns special "My Project" albums (e.g. cards, calendars, slideshows) + Returns: list of album UUIDs """ if self._db._db_version <= _PHOTOS_4_VERSION: - version4 = True album_kind = [_PHOTOS_4_ALBUM_KIND] - else: - version4 = False - album_kind = [_PHOTOS_5_SHARED_ALBUM_KIND, _PHOTOS_5_ALBUM_KIND] + album_type = ( + [_PHOTOS_4_ALBUM_TYPE_PROJECT, _PHOTOS_4_ALBUM_TYPE_SLIDESHOW] + if project + else [_PHOTOS_4_ALBUM_TYPE_ALBUM] + ) + album_list = [] + for album in self._info["albums"]: + detail = self._db._dbalbum_details[album] + if ( + detail["kind"] in album_kind + and detail["albumType"] in album_type + and not detail["intrash"] + and detail["folderUuid"] != _PHOTOS_4_ROOT_FOLDER + # in Photos <= 4, special albums like "printAlbum" have kind _PHOTOS_4_ALBUM_KIND + # but should not be listed here; they can be distinguished by looking + # for folderUuid of _PHOTOS_4_ROOT_FOLDER as opposed to _PHOTOS_4_TOP_LEVEL_ALBUM + ): + album_list.append(album) + return album_list + + # Photos 5+ + album_kind = ( + [_PHOTOS_5_PROJECT_ALBUM_KIND] + if project + else [_PHOTOS_5_SHARED_ALBUM_KIND, _PHOTOS_5_ALBUM_KIND] + ) album_list = [] for album in self._info["albums"]: detail = self._db._dbalbum_details[album] - if ( - detail["kind"] in album_kind - and not detail["intrash"] - and ( - not version4 - # in Photos <= 4, special albums like "printAlbum" have kind _PHOTOS_4_ALBUM_KIND - # but should not be listed here; they can be distinguished by looking - # for folderUuid of _PHOTOS_4_ROOT_FOLDER as opposed to _PHOTOS_4_TOP_LEVEL_ALBUM - or (version4 and detail["folderUuid"] != _PHOTOS_4_ROOT_FOLDER) - ) - ): + if detail["kind"] in album_kind and not detail["intrash"]: album_list.append(album) return album_list diff --git a/osxphotos/photosdb/photosdb.py b/osxphotos/photosdb/photosdb.py index fd63204f..a6eec9ed 100644 --- a/osxphotos/photosdb/photosdb.py +++ b/osxphotos/photosdb/photosdb.py @@ -28,11 +28,15 @@ from .._constants import ( _PHOTOS_3_VERSION, _PHOTOS_4_ALBUM_KIND, _PHOTOS_4_ROOT_FOLDER, - _PHOTOS_4_TOP_LEVEL_ALBUM, + _PHOTOS_4_TOP_LEVEL_ALBUMS, + _PHOTOS_4_ALBUM_TYPE_ALBUM, + _PHOTOS_4_ALBUM_TYPE_PROJECT, + _PHOTOS_4_ALBUM_TYPE_SLIDESHOW, _PHOTOS_4_VERSION, _PHOTOS_5_ALBUM_KIND, _PHOTOS_5_FOLDER_KIND, _PHOTOS_5_IMPORT_SESSION_ALBUM_KIND, + _PHOTOS_5_PROJECT_ALBUM_KIND, _PHOTOS_5_ROOT_FOLDER_KIND, _PHOTOS_5_SHARED_ALBUM_KIND, _TESTED_OS_VERSIONS, @@ -42,7 +46,7 @@ from .._constants import ( TIME_DELTA, ) from .._version import __version__ -from ..albuminfo import AlbumInfo, FolderInfo, ImportInfo +from ..albuminfo import AlbumInfo, FolderInfo, ImportInfo, ProjectInfo from ..datetime_utils import datetime_has_tz, datetime_naive_to_local from ..fileutil import FileUtil from ..personinfo import PersonInfo @@ -429,7 +433,7 @@ class PhotosDB: for folder, detail in self._dbfolder_details.items() if not detail["intrash"] and not detail["isMagic"] - and detail["parentFolderUuid"] == _PHOTOS_4_TOP_LEVEL_ALBUM + and detail["parentFolderUuid"] in _PHOTOS_4_TOP_LEVEL_ALBUMS ] else: folders = [ @@ -450,7 +454,7 @@ class PhotosDB: for folder in self._dbfolder_details.values() if not folder["intrash"] and not folder["isMagic"] - and folder["parentFolderUuid"] == _PHOTOS_4_TOP_LEVEL_ALBUM + and folder["parentFolderUuid"] in _PHOTOS_4_TOP_LEVEL_ALBUMS ] else: folder_names = [ @@ -529,6 +533,18 @@ class PhotosDB: ] return self._import_info + @property + def project_info(self): + """return list of AlbumInfo projects for each project in the database""" + try: + return self._project_info + except AttributeError: + self._project_info = [ + ProjectInfo(db=self, uuid=album) + for album in self._get_album_uuids(project=True) + ] + return self._project_info + @property def db_version(self): """return the database version as stored in LiGlobals table""" @@ -848,11 +864,10 @@ class PhotosDB: # build folder hierarchy for album, details in self._dbalbum_details.items(): parent_folder = details["folderUuid"] - if details[ - "albumSubclass" - ] == _PHOTOS_4_ALBUM_KIND and parent_folder not in [ - _PHOTOS_4_TOP_LEVEL_ALBUM - ]: + if ( + details["albumSubclass"] == _PHOTOS_4_ALBUM_KIND + and parent_folder not in _PHOTOS_4_TOP_LEVEL_ALBUMS + ): folder_hierarchy = self._build_album_folder_hierarchy_4(parent_folder) self._dbalbum_folders[album] = folder_hierarchy else: @@ -1582,7 +1597,7 @@ class PhotosDB: if parent_uuid is None: return folders - if parent_uuid == _PHOTOS_4_TOP_LEVEL_ALBUM: + if parent_uuid in _PHOTOS_4_TOP_LEVEL_ALBUMS: if not folders: # this is a top-level folder with no sub-folders folders = {uuid: None} @@ -2825,7 +2840,7 @@ class PhotosDB: hierarchy = _recurse_folder_hierarchy(folders) return hierarchy - def _get_album_uuids(self, shared=False, import_session=False): + def _get_album_uuids(self, shared=False, import_session=False, project=False): """Return list of album UUIDs found in photos database Filters out albums in the trash and any special album types @@ -2833,20 +2848,21 @@ class PhotosDB: Args: shared: boolean; if True, returns shared albums, else normal albums import_session: boolean, if True, returns import session albums, else normal or shared albums + project: boolean, if True, returns albums that are part of My Projects Note: flags (shared, import_session) are mutually exclusive + Raises: ValueError: raised if mutually exclusive flags passed Returns: list of album UUIDs """ - if shared and import_session: + if sum(bool(x) for x in [shared, import_session, project]) > 1: raise ValueError( - "flags are mutually exclusive: pass zero or one of shared, import_session" + "flags are mutually exclusive: pass zero or one of shared, import_session, projects" ) if self._db_version <= _PHOTOS_4_VERSION: - version4 = True if shared: logging.warning( f"Shared albums not implemented for Photos library version {self._db_version}" @@ -2857,16 +2873,44 @@ class PhotosDB: f"Import sessions not implemented for Photos library version {self._db_version}" ) return [] # not implemented for _PHOTOS_4_VERSION - else: + elif project: + album_type = [ + _PHOTOS_4_ALBUM_TYPE_PROJECT, + _PHOTOS_4_ALBUM_TYPE_SLIDESHOW, + ] album_kind = _PHOTOS_4_ALBUM_KIND - else: - version4 = False - if shared: - album_kind = _PHOTOS_5_SHARED_ALBUM_KIND - elif import_session: - album_kind = _PHOTOS_5_IMPORT_SESSION_ALBUM_KIND else: - album_kind = _PHOTOS_5_ALBUM_KIND + album_type = [_PHOTOS_4_ALBUM_TYPE_ALBUM] + album_kind = _PHOTOS_4_ALBUM_KIND + + album_list = [] + # look through _dbalbum_details because _dbalbums_album won't have empty albums it + for album, detail in self._dbalbum_details.items(): + if ( + detail["kind"] == album_kind + and detail["albumType"] in album_type + and not detail["intrash"] + and ( + (shared and detail["cloudownerhashedpersonid"] is not None) + or (not shared and detail["cloudownerhashedpersonid"] is None) + ) + and detail["folderUuid"] != _PHOTOS_4_ROOT_FOLDER + # in Photos <= 4, special albums like "printAlbum" have kind _PHOTOS_4_ALBUM_KIND + # but should not be listed here; they can be distinguished by looking + # for folderUuid of _PHOTOS_4_ROOT_FOLDER as opposed to _PHOTOS_4_TOP_LEVEL_ALBUM + ): + album_list.append(album) + return album_list + + # Photos version 5+ + if shared: + album_kind = _PHOTOS_5_SHARED_ALBUM_KIND + elif import_session: + album_kind = _PHOTOS_5_IMPORT_SESSION_ALBUM_KIND + elif project: + album_kind = _PHOTOS_5_PROJECT_ALBUM_KIND + else: + album_kind = _PHOTOS_5_ALBUM_KIND album_list = [] # look through _dbalbum_details because _dbalbums_album won't have empty albums it @@ -2878,13 +2922,6 @@ class PhotosDB: (shared and detail["cloudownerhashedpersonid"] is not None) or (not shared and detail["cloudownerhashedpersonid"] is None) ) - and ( - not version4 - # in Photos 4, special albums like "printAlbum" have kind _PHOTOS_4_ALBUM_KIND - # but should not be listed here; they can be distinguished by looking - # for folderUuid of _PHOTOS_4_ROOT_FOLDER as opposed to _PHOTOS_4_TOP_LEVEL_ALBUM - or (version4 and detail["folderUuid"] != _PHOTOS_4_ROOT_FOLDER) - ) ): album_list.append(album) return album_list diff --git a/osxphotos/phototemplate.py b/osxphotos/phototemplate.py index 04b704ca..fd785505 100644 --- a/osxphotos/phototemplate.py +++ b/osxphotos/phototemplate.py @@ -181,6 +181,9 @@ TEMPLATE_SUBSTITUTIONS_PATHLIB = { TEMPLATE_SUBSTITUTIONS_MULTI_VALUED = { "{album}": "Album(s) photo is contained in", "{folder_album}": "Folder path + album photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder", + "{project}": "Project(s) photo is contained in (such as greeting cards, calendars, slideshows)", + "{album_project}": "Album(s) and project(s) photo is contained in; treats projects as regular albums", + "{folder_album_project}": "Folder path + album (includes projects as albums) photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder", "{keyword}": "Keyword(s) assigned to photo", "{person}": "Person(s) / face(s) in a photo", "{label}": "Image categorization label associated with a photo (Photos 5+ only). " @@ -1116,6 +1119,11 @@ class PhotoTemplate: values = [] if field == "album": values = self.photo.burst_albums if self.photo.burst else self.photo.albums + elif field == "project": + values = [p.title for p in self.photo.project_info] + elif field == "album_project": + values = self.photo.burst_albums if self.photo.burst else self.photo.albums + values += [p.title for p in self.photo.project_info] elif field == "keyword": values = self.photo.keywords elif field == "person": @@ -1126,13 +1134,15 @@ class PhotoTemplate: values = self.photo.labels elif field == "label_normalized": values = self.photo.labels_normalized - elif field == "folder_album": + elif field in ["folder_album", "folder_album_project"]: values = [] # photos must be in an album to be in a folder if self.photo.burst: album_info = self.photo.burst_album_info else: album_info = self.photo.album_info + if field == "folder_album_project": + album_info += self.photo.project_info for album in album_info: if album.folder_names: # album in folder @@ -1193,7 +1203,7 @@ class PhotoTemplate: elif isinstance(obj, (str, int, float)): values = [str(obj)] else: - values = [val for val in obj] + values = list(obj) elif field == "detected_text": values = _get_detected_text(self.photo, self.exportdb, confidence=subfield) else: diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumkins1.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumkins1.jpg new file mode 100644 index 00000000..3748a6b4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumkins1.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumkins2.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumkins2.jpg new file mode 100644 index 00000000..4d88368a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumkins2.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumpkins3.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumpkins3.jpg new file mode 100644 index 00000000..775207c8 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Pumpkins3.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Tulips.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Tulips.jpg new file mode 100644 index 00000000..3f09e25b Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-101607/Tulips.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-195532/wedding_edited.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-195532/wedding_edited.jpg new file mode 100644 index 00000000..88caa537 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/29/20211229-195532/wedding_edited.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/30/20211230-204903/St James Park.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/30/20211230-204903/St James Park.jpg new file mode 100644 index 00000000..494d60de Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Masters/2021/12/30/20211230-204903/St James Park.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/ProjectDBVersion.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/ProjectDBVersion.plist new file mode 100644 index 00000000..a635a873 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/ProjectDBVersion.plist @@ -0,0 +1,12 @@ + + + + + MajorVersion + 1 + MinorVersion + 34 + createDate + 2021-12-30T03:56:43Z + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Projects.db b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Projects.db new file mode 100644 index 00000000..c5f4dfca Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/Projects.db differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/DataModelVersion.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/DataModelVersion.plist new file mode 100644 index 00000000..6ada256d --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/DataModelVersion.plist @@ -0,0 +1,20 @@ + + + + + DatabaseMinorVersion + 1 + DatabaseVersion + 112 + LastOpenMode + 2 + LibrarySchemaVersion + 2622 + MetaSchemaVersion + 2 + createDate + 2021-12-29T18:15:21Z + databaseUuid + Nm7MKBmoSRygMmA9WlEaGw + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKAlbum_name.skindex b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKAlbum_name.skindex new file mode 100644 index 00000000..d2b41e3a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKAlbum_name.skindex differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKMemory_title.skindex b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKMemory_title.skindex new file mode 100644 index 00000000..a5beee72 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKMemory_title.skindex differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKVersion_searchIndexText.skindex b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKVersion_searchIndexText.skindex new file mode 100644 index 00000000..93d50714 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/RKVersion_searchIndexText.skindex differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/metaSchema.db b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/metaSchema.db new file mode 100644 index 00000000..a69a92eb Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/metaSchema.db differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db new file mode 100644 index 00000000..5b9b432a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db-shm b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db-shm differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db-wal b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/database/photos.db-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/iPhotoLock.data b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/iPhotoLock.data new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/iPhotoLock.data @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/.metadata_never_index b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/.metadata_never_index new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist new file mode 100644 index 00000000..5442f194 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist @@ -0,0 +1,27 @@ + + + + + LithiumMessageTracer + + LastReportedDate + 2021-12-30T03:56:48Z + + PXPeopleScreenUnlocked + + Photos + + IPXWorkspaceControllerZoomLevelsKey + + kZoomLevelIdentifierAlbums + 7 + kZoomLevelIdentifierVersions + 7 + + + RDLegacyProxyMediaRelocationCleanupCompletedKey + + ShowHiddenPhotosAlbumUserDefault + + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist new file mode 100644 index 00000000..4d63c08f --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist @@ -0,0 +1,10 @@ + + + + + PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate + 2021-12-31T04:32:23Z + PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate + 2021-12-31T04:32:23Z + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb new file mode 100644 index 00000000..52393d2e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb-shm b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb-wal b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/construction-photosgraph.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb new file mode 100644 index 00000000..52393d2e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb-shm b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb-wal b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/liveupdate-photosgraph.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb new file mode 100644 index 00000000..52393d2e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-wal b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb new file mode 100644 index 00000000..3edfa4e7 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-shm b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-shm new file mode 100644 index 00000000..4e15ad7a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-wal b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/131E6190-EED6-4DAD-B225-E6F7D367DD93.cmap b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/131E6190-EED6-4DAD-B225-E6F7D367DD93.cmap new file mode 100644 index 00000000..fbf59add Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/131E6190-EED6-4DAD-B225-E6F7D367DD93.cmap differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/AlgoFaceClusterCache.data b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/AlgoFaceClusterCache.data new file mode 100644 index 00000000..f3d1dca9 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/AlgoFaceClusterCache.data differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/B328F83F-A198-4FCB-A29E-6A5881573DC5.cmap b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/B328F83F-A198-4FCB-A29E-6A5881573DC5.cmap new file mode 100644 index 00000000..77c3e8cf Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/B328F83F-A198-4FCB-A29E-6A5881573DC5.cmap differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/.metadata_never_index b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/.metadata_never_index new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_1.jpeg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_1.jpeg new file mode 100644 index 00000000..58f9d332 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_1.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_3.jpeg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_3.jpeg new file mode 100644 index 00000000..8a56094a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_3.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_4.jpeg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_4.jpeg new file mode 100644 index 00000000..59b04f8c Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_4.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_5.jpeg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_5.jpeg new file mode 100644 index 00000000..081e5805 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_5.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_6.jpeg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_6.jpeg new file mode 100644 index 00000000..ead993d4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_6.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_7.jpeg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_7.jpeg new file mode 100644 index 00000000..bced1de4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/media/face/00/00/facetile_7.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/analysismetadata.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/analysismetadata.plist new file mode 100644 index 00000000..c06b7377 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/analysismetadata.plist @@ -0,0 +1,16 @@ + + + + + PLLanguageAndLocaleKey + en-US:en_US + PLLastGeoProviderIdKey + 7618 + PLLastLocationInfoFormatVer + 12 + PLLastRevGeoForcedProviderOutOfDateCheckVersionKey + 1 + PLLastRevGeoVerFileFetchDateKey + 2021-12-30T03:56:45Z + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/historicalmarker.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/historicalmarker.plist new file mode 100644 index 00000000..fb9a912f --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/historicalmarker.plist @@ -0,0 +1,12 @@ + + + + + LastHistoryRowId + 164 + LibraryBuildTag + E371079C-71D9-4C33-91F6-54B17B4B3066 + LibrarySchemaVersion + 2622 + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/needsanalysis b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/needsanalysis new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/serverinfo.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/serverinfo.plist new file mode 100644 index 00000000..ce9edee3 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/moments/serverinfo.plist @@ -0,0 +1,47 @@ + + + + + FileVersion + 11 + Source + + 35230 + + CountryMinVersions + + OTHER + 1 + + CurrentVersion + 1 + NoResultErrorIsSuccess + + + 57879 + + CountryMinVersions + + OTHER + 1 + + CurrentVersion + 1 + NoResultErrorIsSuccess + + + 7618 + + AddCountyIfNeeded + + CountryMinVersions + + OTHER + 10 + + CurrentVersion + 10 + + + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/Project.db b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/Project.db new file mode 100644 index 00000000..30f7b7fb Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/Project.db differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectDBVersion.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectDBVersion.plist new file mode 100644 index 00000000..a635a873 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectDBVersion.plist @@ -0,0 +1,12 @@ + + + + + MajorVersion + 1 + MinorVersion + 34 + createDate + 2021-12-30T03:56:43Z + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectInfo.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectInfo.plist new file mode 100644 index 00000000..f00caea2 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectInfo.plist @@ -0,0 +1,18 @@ + + + + + creationDate + 2021-12-30T03:56:00Z + name + Photos + previewImageHash + 0 + previewImageName + Calendar + themeIdentifier + Picture-Calendar + type + 2 + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/Project.db b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/Project.db new file mode 100644 index 00000000..cb71de6d Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/Project.db differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectDBVersion.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectDBVersion.plist new file mode 100644 index 00000000..a635a873 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectDBVersion.plist @@ -0,0 +1,12 @@ + + + + + MajorVersion + 1 + MinorVersion + 34 + createDate + 2021-12-30T03:56:43Z + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectInfo.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectInfo.plist new file mode 100644 index 00000000..934caa33 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/projects/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectInfo.plist @@ -0,0 +1,18 @@ + + + + + creationDate + 2021-12-30T03:55:08Z + name + Photos + previewImageHash + 0 + previewImageName + Card_Landscape + themeIdentifier + PremiumClassic-FoldedCard + type + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/1/UNADJUSTEDNONRAW_mini_1.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/1/UNADJUSTEDNONRAW_mini_1.jpg new file mode 100644 index 00000000..a8e5d859 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/1/UNADJUSTEDNONRAW_mini_1.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/1/UNADJUSTEDNONRAW_thumb_1.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/1/UNADJUSTEDNONRAW_thumb_1.jpg new file mode 100644 index 00000000..d45a0fd6 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/1/UNADJUSTEDNONRAW_thumb_1.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/3/UNADJUSTEDNONRAW_mini_3.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/3/UNADJUSTEDNONRAW_mini_3.jpg new file mode 100644 index 00000000..8c8b18dd Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/3/UNADJUSTEDNONRAW_mini_3.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/3/UNADJUSTEDNONRAW_thumb_3.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/3/UNADJUSTEDNONRAW_thumb_3.jpg new file mode 100644 index 00000000..e1378790 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/3/UNADJUSTEDNONRAW_thumb_3.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/5/UNADJUSTEDNONRAW_mini_5.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/5/UNADJUSTEDNONRAW_mini_5.jpg new file mode 100644 index 00000000..37d035b4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/5/UNADJUSTEDNONRAW_mini_5.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/5/UNADJUSTEDNONRAW_thumb_5.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/5/UNADJUSTEDNONRAW_thumb_5.jpg new file mode 100644 index 00000000..b9d0a90e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/5/UNADJUSTEDNONRAW_thumb_5.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/7/UNADJUSTEDNONRAW_mini_7.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/7/UNADJUSTEDNONRAW_mini_7.jpg new file mode 100644 index 00000000..f320965e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/7/UNADJUSTEDNONRAW_mini_7.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/7/UNADJUSTEDNONRAW_thumb_7.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/7/UNADJUSTEDNONRAW_thumb_7.jpg new file mode 100644 index 00000000..f874ba42 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/7/UNADJUSTEDNONRAW_thumb_7.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/9/UNADJUSTEDNONRAW_mini_9.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/9/UNADJUSTEDNONRAW_mini_9.jpg new file mode 100644 index 00000000..d7ff6e77 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/9/UNADJUSTEDNONRAW_mini_9.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/9/UNADJUSTEDNONRAW_thumb_9.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/9/UNADJUSTEDNONRAW_thumb_9.jpg new file mode 100644 index 00000000..55cc6a23 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/9/UNADJUSTEDNONRAW_thumb_9.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/b/UNADJUSTEDNONRAW_mini_b.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/b/UNADJUSTEDNONRAW_mini_b.jpg new file mode 100644 index 00000000..5c0a3f8e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/b/UNADJUSTEDNONRAW_mini_b.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/b/UNADJUSTEDNONRAW_thumb_b.jpg b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/b/UNADJUSTEDNONRAW_thumb_b.jpg new file mode 100644 index 00000000..76a8ab23 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/proxies/derivatives/00/00/b/UNADJUSTEDNONRAW_thumb_b.jpg differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/Info.plist b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/Info.plist new file mode 100644 index 00000000..aabc91b0 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/Info.plist @@ -0,0 +1,112 @@ + + + + + DatabaseMinorVersion + 1 + DatabaseVersion + 112 + HistoricalMarker + + LastHistoryRowId + 164 + LibraryBuildTag + E371079C-71D9-4C33-91F6-54B17B4B3066 + LibrarySchemaVersion + 2622 + + LibrarySchemaVersion + 2622 + MetaSchemaVersion + 2 + SnapshotComplete + + SnapshotCompletedDate + 2021-12-30T03:56:44Z + SnapshotLastAttemptStartDate + 2021-12-30T03:56:44Z + SnapshotTables + + RKAdminData + + 0000000000.lisj + 33ba9a656c3588b4bdc1e44575e794e1d256d625 + + RKAlbum + + 0000000000.lisj + 3b09c246d3a74e7f57265e6ab6abb0d333665215 + + RKAlbumVersion + + 0000000000.lisj + fc7c9baa656623406304fcc10474e561dff5a53a + + RKBookmark + + 0000000000.lisj + 33e3f9220c22909667ab63c0070757b8ffe1aeac + + RKCustomSortOrder + + 0000000000.lisj + d65281f0c3f9e519cc5a00e21bb5ece35aa03cbd + + RKFace + + 0000000000.lisj + dd0f12962d72c2e53f483bd3e02e18f3bbf423ac + + RKFolder + + 0000000000.lisj + 8712074c0728e02c777705031c0e16882eda9bff + + RKImageProxyState + + 0000000000.lisj + 5b0f369a4df955c63b1a636980e76e3d30d99fa9 + + RKImportGroup + + 0000000000.lisj + 0ad244b52516a1cac3ea5532af1e60b3f74b4af7 + + RKKeyword + + 0000000000.lisj + 85669e2bf25048d655ed8042d1607d50587de1fc + + RKKeywordForVersion + + 0000000000.lisj + cf61584fa6191e45a64311ae4617418fde4d5263 + + RKMaster + + 0000000000.lisj + a609e1942bd9e5d69f3532e1e3e091156f5c3469 + + RKModelResource + + 0000000000.lisj + c677e8613d841620d96ed750d1a720bd283a0df7 + + RKVersion + + 0000000000.lisj + b2d209286b8f7b68a5fba0fb84e364ce55d83608 + + RKVersionAnalysisState + + 0000000000.lisj + 2a36598c306df54e303c14ccb19bcdeae2d85bf5 + + RKVolume + + 0000000000.lisj + 5d16bc7903a060b2e879d148100441b1ac5c1629 + + + + diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAdminData/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAdminData/0000000000.lij new file mode 100644 index 00000000..380882b9 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAdminData/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAdminData/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAdminData/0000000000.lisj new file mode 100644 index 00000000..77212a7e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAdminData/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lij new file mode 100644 index 00000000..c3be1721 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lisj new file mode 100644 index 00000000..2635369f Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lij new file mode 100644 index 00000000..54c37adf Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lisj new file mode 100644 index 00000000..0e9fae43 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKBookmark/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKBookmark/0000000000.lisj new file mode 100644 index 00000000..dbe4262f Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKBookmark/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lij new file mode 100644 index 00000000..862c2c26 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lisj new file mode 100644 index 00000000..4f6e92c9 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFace/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFace/0000000000.lij new file mode 100644 index 00000000..a97c0f05 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFace/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFace/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFace/0000000000.lisj new file mode 100644 index 00000000..9cb97104 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFace/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFaceGroup/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFaceGroup/0000000000.lij new file mode 100644 index 00000000..9646c0cf Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFaceGroup/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFacePrint/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFacePrint/0000000000.lij new file mode 100644 index 00000000..b6d40dea Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFacePrint/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFolder/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFolder/0000000000.lij new file mode 100644 index 00000000..4de777aa Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFolder/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFolder/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFolder/0000000000.lisj new file mode 100644 index 00000000..b9d1817a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKFolder/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImageProxyState/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImageProxyState/0000000000.lij new file mode 100644 index 00000000..718c882d Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImageProxyState/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImageProxyState/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImageProxyState/0000000000.lisj new file mode 100644 index 00000000..4c7eaf04 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImageProxyState/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImportGroup/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImportGroup/0000000000.lij new file mode 100644 index 00000000..746abfce Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImportGroup/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImportGroup/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImportGroup/0000000000.lisj new file mode 100644 index 00000000..0c2e7ba7 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKImportGroup/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeyword/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeyword/0000000000.lij new file mode 100644 index 00000000..a6bdf13c Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeyword/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeyword/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeyword/0000000000.lisj new file mode 100644 index 00000000..4a5f0989 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeyword/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeywordForVersion/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeywordForVersion/0000000000.lij new file mode 100644 index 00000000..0c18874d Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeywordForVersion/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeywordForVersion/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeywordForVersion/0000000000.lisj new file mode 100644 index 00000000..54ee23f1 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKKeywordForVersion/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKMaster/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKMaster/0000000000.lij new file mode 100644 index 00000000..a0515f8b Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKMaster/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKMaster/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKMaster/0000000000.lisj new file mode 100644 index 00000000..c0ed08e5 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKMaster/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKModelResource/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKModelResource/0000000000.lij new file mode 100644 index 00000000..ecc93272 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKModelResource/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKModelResource/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKModelResource/0000000000.lisj new file mode 100644 index 00000000..de9b69d0 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKModelResource/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPerson/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPerson/0000000000.lij new file mode 100644 index 00000000..3075162a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPerson/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPlace/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPlace/0000000000.lij new file mode 100644 index 00000000..061bf7c5 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPlace/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPlaceForVersion/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPlaceForVersion/0000000000.lij new file mode 100644 index 00000000..99c29b9a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKPlaceForVersion/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKSceneInVersion/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKSceneInVersion/0000000000.lij new file mode 100644 index 00000000..d56694a3 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKSceneInVersion/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lij new file mode 100644 index 00000000..b5a32254 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lisj new file mode 100644 index 00000000..94b72983 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersion/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersionAnalysisState/0000000000.lij b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersionAnalysisState/0000000000.lij new file mode 100644 index 00000000..d4411927 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersionAnalysisState/0000000000.lij differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersionAnalysisState/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersionAnalysisState/0000000000.lisj new file mode 100644 index 00000000..b995c53e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVersionAnalysisState/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVolume/0000000000.lisj b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVolume/0000000000.lisj new file mode 100644 index 00000000..6f22b42f Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/recovery/RKVolume/0000000000.lisj differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/segments/Thumb64Segment_0.data b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/segments/Thumb64Segment_0.data new file mode 100644 index 00000000..23312ef9 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/segments/Thumb64Segment_0.data differ diff --git a/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/segments/ThumbJPGSegment_0.data b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/segments/ThumbJPGSegment_0.data new file mode 100644 index 00000000..1cfd78f6 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.12.6.photoslibrary/resources/segments/ThumbJPGSegment_0.data differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/ProjectDBVersion.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/ProjectDBVersion.plist new file mode 100644 index 00000000..a635a873 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/ProjectDBVersion.plist @@ -0,0 +1,12 @@ + + + + + MajorVersion + 1 + MinorVersion + 34 + createDate + 2021-12-30T03:56:43Z + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/Projects.db b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/Projects.db new file mode 100644 index 00000000..c5f4dfca Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/Projects.db differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/DataModelVersion.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/DataModelVersion.plist new file mode 100644 index 00000000..be9740fe --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/DataModelVersion.plist @@ -0,0 +1,10 @@ + + + + + LibrarySchemaVersion + 5001 + MetaSchemaVersion + 3 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite new file mode 100644 index 00000000..0a391f0c Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite-shm new file mode 100644 index 00000000..b57f6a4e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite-wal new file mode 100644 index 00000000..94ee6353 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/Photos.sqlite-wal differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/metaSchema.db b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/metaSchema.db new file mode 100644 index 00000000..2d75bd40 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/metaSchema.db differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/photos.db b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/photos.db new file mode 100644 index 00000000..2d75bd40 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/photos.db differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/protection b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/database/protection new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/iPhotoLock.data b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/iPhotoLock.data new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/iPhotoLock.data @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B.jpeg new file mode 100644 index 00000000..4d88368a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE.jpeg new file mode 100644 index 00000000..3748a6b4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/9/96615063-993E-458B-A9E5-7A68C75A04B6.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/9/96615063-993E-458B-A9E5-7A68C75A04B6.jpeg new file mode 100644 index 00000000..3f09e25b Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/9/96615063-993E-458B-A9E5-7A68C75A04B6.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF.jpeg new file mode 100644 index 00000000..494d60de Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/E/E3BC179B-B87A-45F1-9100-209D71B2E208.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/E/E3BC179B-B87A-45F1-9100-209D71B2E208.jpeg new file mode 100644 index 00000000..775207c8 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/E/E3BC179B-B87A-45F1-9100-209D71B2E208.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/E/EF16E453-7C86-4628-9161-63563708910F.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/E/EF16E453-7C86-4628-9161-63563708910F.jpeg new file mode 100644 index 00000000..88caa537 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/originals/E/EF16E453-7C86-4628-9161-63563708910F.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/.metadata_never_index b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/.metadata_never_index new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist new file mode 100644 index 00000000..cfe39785 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.Photos.Migration/appPrivateData.plist @@ -0,0 +1,26 @@ + + + + + MigrationService + + State + 4 + + MigrationService.LastCompletedTask + 12 + MigrationService.ValidationCounts + + MigrationDetectedFaceprint + 6 + MigrationManagedAsset + 0 + MigrationSceneClassification + 38 + MigrationUnmanagedAdjustment + 0 + RDVersion.cloudLocalState.CPLIsNotPushed + 6 + + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.Photos/appPrivateData.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.Photos/appPrivateData.plist new file mode 100644 index 00000000..93b2a11d --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.Photos/appPrivateData.plist @@ -0,0 +1,33 @@ + + + + + CollapsedSidebarSectionIdentifiers + + ExpandedSidebarItemIdentifiers + + EF3B6E8B-3D76-4771-8056-AD4D80CA5B42/L0/020 + + LithiumMessageTracer + + LastReportedDate + 2021-12-30T03:56:48Z + + PXPeopleScreenUnlocked + + Photos + + IPXWorkspaceControllerZoomLevelsKey + + kZoomLevelIdentifierAlbums + 7 + kZoomLevelIdentifierVersions + 7 + + + RDLegacyProxyMediaRelocationCleanupCompletedKey + + ShowHiddenPhotosAlbumUserDefault + + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite new file mode 100644 index 00000000..d3af13a5 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite new file mode 100644 index 00000000..d5208e07 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite new file mode 100644 index 00000000..3a097aac Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite new file mode 100644 index 00000000..4770f399 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite new file mode 100644 index 00000000..80ddaefd Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite new file mode 100644 index 00000000..f716d344 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite new file mode 100644 index 00000000..2d61e83d Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGCurationCache.sqlite.sqlite-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist new file mode 100644 index 00000000..4d63c08f --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotoAnalysisServicePreferences.plist @@ -0,0 +1,10 @@ + + + + + PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate + 2021-12-31T04:32:23Z + PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate + 2021-12-31T04:32:23Z + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb new file mode 100644 index 00000000..52393d2e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/construction-photosgraph.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb new file mode 100644 index 00000000..52393d2e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/liveupdate-photosgraph.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb new file mode 100644 index 00000000..52393d2e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph-tmp.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb new file mode 100644 index 00000000..3edfa4e7 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm new file mode 100644 index 00000000..4e15ad7a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-shm differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-wal b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/graph/PhotosGraph/photosgraph.graphdb-wal new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/131E6190-EED6-4DAD-B225-E6F7D367DD93.cmap b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/131E6190-EED6-4DAD-B225-E6F7D367DD93.cmap new file mode 100644 index 00000000..fbf59add Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/131E6190-EED6-4DAD-B225-E6F7D367DD93.cmap differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data new file mode 100644 index 00000000..f3d1dca9 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/AlgoFaceClusterCache.data differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/B328F83F-A198-4FCB-A29E-6A5881573DC5.cmap b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/B328F83F-A198-4FCB-A29E-6A5881573DC5.cmap new file mode 100644 index 00000000..77c3e8cf Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photoanalysisd/vision/B328F83F-A198-4FCB-A29E-6A5881573DC5.cmap differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist new file mode 100644 index 00000000..2120d8ee --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/private/com.apple.photolibraryd/appPrivateData.plist @@ -0,0 +1,8 @@ + + + + + PLLibraryServicesManager.LocaleIdentifier + en_US + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/.metadata_never_index b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/.metadata_never_index new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B_1_105_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B_1_105_c.jpeg new file mode 100644 index 00000000..b9d0a90e Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B_1_105_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE_1_105_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE_1_105_c.jpeg new file mode 100644 index 00000000..e1378790 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE_1_105_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/9/96615063-993E-458B-A9E5-7A68C75A04B6_1_105_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/9/96615063-993E-458B-A9E5-7A68C75A04B6_1_105_c.jpeg new file mode 100644 index 00000000..f874ba42 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/9/96615063-993E-458B-A9E5-7A68C75A04B6_1_105_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF_1_105_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF_1_105_c.jpeg new file mode 100644 index 00000000..76a8ab23 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF_1_105_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/E/E3BC179B-B87A-45F1-9100-209D71B2E208_1_105_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/E/E3BC179B-B87A-45F1-9100-209D71B2E208_1_105_c.jpeg new file mode 100644 index 00000000..d45a0fd6 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/E/E3BC179B-B87A-45F1-9100-209D71B2E208_1_105_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/E/EF16E453-7C86-4628-9161-63563708910F_1_105_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/E/EF16E453-7C86-4628-9161-63563708910F_1_105_c.jpeg new file mode 100644 index 00000000..55cc6a23 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/E/EF16E453-7C86-4628-9161-63563708910F_1_105_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B_4_5005_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B_4_5005_c.jpeg new file mode 100644 index 00000000..8a0f4f01 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/1/14EDAAE6-4840-4BDC-B83B-D0A48E9B986B_4_5005_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE_4_5005_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE_4_5005_c.jpeg new file mode 100644 index 00000000..081a369c Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/6/65757433-36CE-49FE-B9AB-CD9EBE7E86EE_4_5005_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/9/96615063-993E-458B-A9E5-7A68C75A04B6_4_5005_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/9/96615063-993E-458B-A9E5-7A68C75A04B6_4_5005_c.jpeg new file mode 100644 index 00000000..9922ba65 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/9/96615063-993E-458B-A9E5-7A68C75A04B6_4_5005_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF_4_5005_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF_4_5005_c.jpeg new file mode 100644 index 00000000..dbeecff4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/C/C4EA300F-50AD-4FCB-9173-D29B57B52BCF_4_5005_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/E/E3BC179B-B87A-45F1-9100-209D71B2E208_4_5005_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/E/E3BC179B-B87A-45F1-9100-209D71B2E208_4_5005_c.jpeg new file mode 100644 index 00000000..033cf6d6 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/E/E3BC179B-B87A-45F1-9100-209D71B2E208_4_5005_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/E/EF16E453-7C86-4628-9161-63563708910F_4_5005_c.jpeg b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/E/EF16E453-7C86-4628-9161-63563708910F_4_5005_c.jpeg new file mode 100644 index 00000000..9378e097 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/masters/E/EF16E453-7C86-4628-9161-63563708910F_4_5005_c.jpeg differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/3305.ithmb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/3305.ithmb new file mode 100644 index 00000000..39d0ae66 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/3305.ithmb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/4031.ithmb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/4031.ithmb new file mode 100644 index 00000000..03365b62 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/4031.ithmb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/4132.ithmb b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/4132.ithmb new file mode 100644 index 00000000..8c12ce0a Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/4132.ithmb differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration new file mode 100644 index 00000000..8c122be1 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/derivatives/thumbs/thumbnailConfiguration @@ -0,0 +1,10 @@ + + + + + PLThumbnailManagerThumbnailFormatKey + 5005 + PLThumbnailManagerVersionKey + 28 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Album-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Album-snapshot.plj new file mode 100644 index 00000000..2570a7dc Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Album-snapshot.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Album.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Album.plist new file mode 100644 index 00000000..93e8ed0a --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Album.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:08Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Asset-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Asset-snapshot.plj new file mode 100644 index 00000000..2fa158a4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Asset-snapshot.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Asset.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Asset.plist new file mode 100644 index 00000000..5fa3a213 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Asset.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 10 + snapshotDate + 2021-12-31T05:30:08Z + snapshotPayloadVersion + 10 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DeferredRebuildFace-snapshot.plj new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DeferredRebuildFace.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DeferredRebuildFace.plist new file mode 100644 index 00000000..8e8e1380 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DeferredRebuildFace.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:10Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DetectedFace-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DetectedFace-snapshot.plj new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DetectedFace.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DetectedFace.plist new file mode 100644 index 00000000..93e8ed0a --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/DetectedFace.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:08Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FetchingAlbum-snapshot.plj new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FetchingAlbum.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FetchingAlbum.plist new file mode 100644 index 00000000..5bda0f87 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FetchingAlbum.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:09Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FileSystemVolume-snapshot.plj new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FileSystemVolume.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FileSystemVolume.plist new file mode 100644 index 00000000..5bda0f87 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/FileSystemVolume.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:09Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder-change.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder-change.plj new file mode 100644 index 00000000..a3605998 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder-change.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder-snapshot.plj new file mode 100644 index 00000000..cfe43fc4 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder-snapshot.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder.plist new file mode 100644 index 00000000..5bda0f87 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Folder.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:09Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/HistoryToken.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/HistoryToken.plist new file mode 100644 index 00000000..2ae7617c Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/HistoryToken.plist differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ImportSession-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ImportSession-snapshot.plj new file mode 100644 index 00000000..174e3de8 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ImportSession-snapshot.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ImportSession.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ImportSession.plist new file mode 100644 index 00000000..5bda0f87 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ImportSession.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:09Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Keyword-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Keyword-snapshot.plj new file mode 100644 index 00000000..0f21659b Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Keyword-snapshot.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Keyword.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Keyword.plist new file mode 100644 index 00000000..5bda0f87 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Keyword.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:09Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Memory-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Memory-snapshot.plj new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Memory.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Memory.plist new file mode 100644 index 00000000..93e8ed0a --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Memory.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:08Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Person-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Person-snapshot.plj new file mode 100644 index 00000000..e69de29b diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Person.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Person.plist new file mode 100644 index 00000000..93e8ed0a --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/Person.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:08Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj new file mode 100644 index 00000000..b45eee2c Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ProjectAlbum-snapshot.plj differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ProjectAlbum.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ProjectAlbum.plist new file mode 100644 index 00000000..5bda0f87 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/journals/ProjectAlbum.plist @@ -0,0 +1,12 @@ + + + + + currentPayloadVersion + 1 + snapshotDate + 2021-12-31T05:30:09Z + snapshotPayloadVersion + 1 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/Project.db b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/Project.db new file mode 100644 index 00000000..7bd84834 Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/Project.db differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectDBVersion.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectDBVersion.plist new file mode 100644 index 00000000..a635a873 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectDBVersion.plist @@ -0,0 +1,12 @@ + + + + + MajorVersion + 1 + MinorVersion + 34 + createDate + 2021-12-30T03:56:43Z + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectInfo.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectInfo.plist new file mode 100644 index 00000000..f00caea2 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/7E7DDDB4-2807-4CF0-9430-8042DE5E695D.ppb/ProjectInfo.plist @@ -0,0 +1,18 @@ + + + + + creationDate + 2021-12-30T03:56:00Z + name + Photos + previewImageHash + 0 + previewImageName + Calendar + themeIdentifier + Picture-Calendar + type + 2 + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/Project.db b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/Project.db new file mode 100644 index 00000000..cb71de6d Binary files /dev/null and b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/Project.db differ diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectDBVersion.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectDBVersion.plist new file mode 100644 index 00000000..a635a873 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectDBVersion.plist @@ -0,0 +1,12 @@ + + + + + MajorVersion + 1 + MinorVersion + 34 + createDate + 2021-12-30T03:56:43Z + + diff --git a/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectInfo.plist b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectInfo.plist new file mode 100644 index 00000000..934caa33 --- /dev/null +++ b/tests/Test-iPhoto-Projects-10.15.7.photoslibrary/resources/projects/legacy/ECAE2534-8B65-46C3-80C3-F5EAAB070B4B.ppb/ProjectInfo.plist @@ -0,0 +1,18 @@ + + + + + creationDate + 2021-12-30T03:55:08Z + name + Photos + previewImageHash + 0 + previewImageName + Card_Landscape + themeIdentifier + PremiumClassic-FoldedCard + type + 1 + + diff --git a/tests/test_projects_catalina.py b/tests/test_projects_catalina.py new file mode 100644 index 00000000..60e8a5c2 --- /dev/null +++ b/tests/test_projects_catalina.py @@ -0,0 +1,151 @@ +"""Test ProjectInfo class""" + +import pytest + +import osxphotos +from osxphotos._constants import _UNKNOWN_PERSON, AlbumSortOrder + +PHOTOS_DB = "./tests/Test-iPhoto-Projects-10.15.7.photoslibrary" + +TOP_LEVEL_FOLDERS = ["Folder1", "iPhoto Events"] + +ALBUM_NAMES = ["Album1", "Pumpkin Farm", "Event 1"] + +ALBUM_PHOTO_DATA = [ + ( + "Pumpkin Farm", + [ + "65757433-36CE-49FE-B9AB-CD9EBE7E86EE", + "E3BC179B-B87A-45F1-9100-209D71B2E208", + "14EDAAE6-4840-4BDC-B83B-D0A48E9B986B", + ], + ), + ( + "Album1", + [ + "14EDAAE6-4840-4BDC-B83B-D0A48E9B986B", + ], + ), +] + +PHOTO_ALBUM_DATA = { + "14EDAAE6-4840-4BDC-B83B-D0A48E9B986B": ["Pumpkin Farm", "Album1", "Event 1"], + "65757433-36CE-49FE-B9AB-CD9EBE7E86EE": ["Pumpkin Farm", "Event 1"], +} + +PROJECT_NAMES = ["Photos Calendar", "Photos Card", "Slideshow1"] + +PROJECT_PHOTOS = { + "Photos Calendar": ["EF16E453-7C86-4628-9161-63563708910F"], + "Photos Card": ["96615063-993E-458B-A9E5-7A68C75A04B6"], + "Slideshow1": [ + "65757433-36CE-49FE-B9AB-CD9EBE7E86EE", + "14EDAAE6-4840-4BDC-B83B-D0A48E9B986B", + "E3BC179B-B87A-45F1-9100-209D71B2E208", + ], +} + +PHOTO_PROJECTS = { + "EF16E453-7C86-4628-9161-63563708910F": ["Photos Calendar"], + "96615063-993E-458B-A9E5-7A68C75A04B6": ["Photos Card"], + "65757433-36CE-49FE-B9AB-CD9EBE7E86EE": ["Slideshow1"], + "14EDAAE6-4840-4BDC-B83B-D0A48E9B986B": ["Slideshow1"], + "E3BC179B-B87A-45F1-9100-209D71B2E208": ["Slideshow1"], + "C4EA300F-50AD-4FCB-9173-D29B57B52BCF": [], +} + + +@pytest.fixture(scope="module") +def photosdb(): + return osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + +#### First, test folders and albums to ensure they're working correctly (and not reporting projects as albums) ##### + + +def test_folders_1(photosdb): + # top level folders + folders = photosdb.folder_info + assert len(folders) == len(TOP_LEVEL_FOLDERS) + + # check folder names + folder_names = [f.title for f in folders] + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folder_names(photosdb): + # check folder names + folder_names = photosdb.folders + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folders_parent(photosdb): + # top level folders + folders = photosdb.folder_info + + # parent of top level folder should be none + for folder in folders: + assert folder.parent is None + for child in folder.subfolders: + # children's parent uuid should match folder uuid + assert child.parent + assert child.parent.uuid == folder.uuid + + +def test_albums_1(photosdb): + albums = photosdb.album_info + assert len(albums) == len(ALBUM_NAMES) + + # check names + album_names = [a.title for a in albums] + assert sorted(album_names) == sorted(ALBUM_NAMES) + + +@pytest.mark.parametrize("album_name,album_uuids", ALBUM_PHOTO_DATA) +def test_photoinfo_albums(photosdb, album_name, album_uuids): + """Test PhotoInfo.albums""" + photos = photosdb.photos(uuid=album_uuids) + + albums = photos[0].albums + assert album_name in albums + + +@pytest.mark.parametrize("uuid,expected_albums", PHOTO_ALBUM_DATA.items()) +def test_photoinfo_albums(photosdb, uuid, expected_albums): + """Test PhotoInfo.albums""" + photo = photosdb.get_photo(uuid) + + albums = photo.albums + assert sorted(albums) == sorted(expected_albums) + + +##### Now test ProjectInfo ##### + + +def test_photosdb_project_info(photosdb): + """Test PhotosDB.project_info""" + projects = photosdb.project_info + assert len(projects) == len(PROJECT_NAMES) + + # check names + project_names = [p.title for p in projects] + assert sorted(project_names) == sorted(PROJECT_NAMES) + + +@pytest.mark.parametrize("project_name,photo_uuids", PROJECT_PHOTOS.items()) +def test_photosdb_project_info_photos(photosdb, project_name, photo_uuids): + """Test PhotosDB.project_info photos""" + projects = photosdb.project_info + + for project in projects: + if project.title == project_name: + assert sorted(p.uuid for p in project.photos) == sorted(photo_uuids) + + +@pytest.mark.parametrize("uuid,expected_projects", PHOTO_PROJECTS.items()) +def test_photoinfo_project_info(photosdb, uuid, expected_projects): + """Test PhotoInfo.project_info""" + photo = photosdb.get_photo(uuid) + + project_names = [p.title for p in photo.project_info] + assert sorted(project_names) == sorted(expected_projects) diff --git a/tests/test_projects_sierra.py b/tests/test_projects_sierra.py new file mode 100644 index 00000000..47403fe3 --- /dev/null +++ b/tests/test_projects_sierra.py @@ -0,0 +1,151 @@ +"""Test ProjectInfo class""" + +import pytest + +import osxphotos +from osxphotos._constants import _UNKNOWN_PERSON, AlbumSortOrder + +PHOTOS_DB = "./tests/Test-iPhoto-Projects-10.12.6.photoslibrary" + +TOP_LEVEL_FOLDERS = ["Folder1", "iPhoto Events"] + +ALBUM_NAMES = ["Album1", "Pumpkin Farm", "Event 1"] + +ALBUM_PHOTO_DATA = [ + ( + "Pumpkin Farm", + [ + "FO2q5khAS9y4O9CkjpuYaw", + "47wXm7h6RfGRACCdcbLiCA", + "ZXV0MzbOSf65q82evn6G7g", + ], + ), + ( + "Album1", + [ + "ZXV0MzbOSf65q82evn6G7g", + ], + ), +] + +PHOTO_ALBUM_DATA = { + "FO2q5khAS9y4O9CkjpuYaw": ["Pumpkin Farm", "Album1", "Event 1"], + "ZXV0MzbOSf65q82evn6G7g": ["Pumpkin Farm", "Event 1"], +} + +PROJECT_NAMES = ["Photos Calendar", "Photos Card", "Slideshow1"] + +PROJECT_PHOTOS = { + "Photos Calendar": ["7xbkU3yGRiiRYWNWNwiRDw"], + "Photos Card": ["lmFQY5k+RYup5Xpox1oEtg"], + "Slideshow1": [ + "FO2q5khAS9y4O9CkjpuYaw", + "ZXV0MzbOSf65q82evn6G7g", + "47wXm7h6RfGRACCdcbLiCA", + ], +} + +PHOTO_PROJECTS = { + "7xbkU3yGRiiRYWNWNwiRDw": ["Photos Calendar"], + "lmFQY5k+RYup5Xpox1oEtg": ["Photos Card"], + "FO2q5khAS9y4O9CkjpuYaw": ["Slideshow1"], + "ZXV0MzbOSf65q82evn6G7g": ["Slideshow1"], + "47wXm7h6RfGRACCdcbLiCA": ["Slideshow1"], + "xOowD1CtT8uRc9KbV7Urzw": [], +} + + +@pytest.fixture(scope="module") +def photosdb(): + return osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + +#### First, test folders and albums to ensure they're working correctly (and not reporting projects as albums) ##### + + +def test_folders_1(photosdb): + # top level folders + folders = photosdb.folder_info + assert len(folders) == len(TOP_LEVEL_FOLDERS) + + # check folder names + folder_names = [f.title for f in folders] + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folder_names(photosdb): + # check folder names + folder_names = photosdb.folders + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folders_parent(photosdb): + # top level folders + folders = photosdb.folder_info + + # parent of top level folder should be none + for folder in folders: + assert folder.parent is None + for child in folder.subfolders: + # children's parent uuid should match folder uuid + assert child.parent + assert child.parent.uuid == folder.uuid + + +def test_albums_1(photosdb): + albums = photosdb.album_info + assert len(albums) == len(ALBUM_NAMES) + + # check names + album_names = [a.title for a in albums] + assert sorted(album_names) == sorted(ALBUM_NAMES) + + +@pytest.mark.parametrize("album_name,album_uuids", ALBUM_PHOTO_DATA) +def test_photoinfo_albums(photosdb, album_name, album_uuids): + """Test PhotoInfo.albums""" + photos = photosdb.photos(uuid=album_uuids) + + albums = photos[0].albums + assert album_name in albums + + +@pytest.mark.parametrize("uuid,expected_albums", PHOTO_ALBUM_DATA.items()) +def test_photoinfo_albums(photosdb, uuid, expected_albums): + """Test PhotoInfo.albums""" + photo = photosdb.get_photo(uuid) + + albums = photo.albums + assert sorted(albums) == sorted(expected_albums) + + +##### Now test ProjectInfo ##### + + +def test_photosdb_project_info(photosdb): + """Test PhotosDB.project_info""" + projects = photosdb.project_info + assert len(projects) == len(PROJECT_NAMES) + + # check names + project_names = [p.title for p in projects] + assert sorted(project_names) == sorted(PROJECT_NAMES) + + +@pytest.mark.parametrize("project_name,photo_uuids", PROJECT_PHOTOS.items()) +def test_photosdb_project_info_photos(photosdb, project_name, photo_uuids): + """Test PhotosDB.project_info photos""" + projects = photosdb.project_info + + for project in projects: + if project.title == project_name: + assert sorted(p.uuid for p in project.photos) == sorted(photo_uuids) + + +@pytest.mark.parametrize("uuid,expected_projects", PHOTO_PROJECTS.items()) +def test_photoinfo_project_info(photosdb, uuid, expected_projects): + """Test PhotoInfo.project_info""" + photo = photosdb.get_photo(uuid) + + project_names = [p.title for p in photo.project_info] + assert sorted(project_names) == sorted(expected_projects) diff --git a/tests/test_template.py b/tests/test_template.py index c51bd7b1..cd873257 100644 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -1,5 +1,4 @@ """ Test template.py """ -import json import os import re @@ -28,6 +27,7 @@ PHOTOS_DB_15_7 = "./tests/Test-10.15.7.photoslibrary/database/photos.db" PHOTOS_DB_14_6 = "./tests/Test-10.14.6.photoslibrary/database/photos.db" PHOTOS_DB_COMMENTS = "tests/Test-Cloud-10.15.6.photoslibrary" PHOTOS_DB_CLOUD = "./tests/Test-Cloud-10.15.6.photoslibrary/database/photos.db" +PHOTOS_DB_PROJECTS = "./tests/Test-iPhoto-Projects-10.15.7.photoslibrary" UUID_DICT = { "place_dc": "128FB4C6-0B16-4E7D-9108-FB2E90DA1546", @@ -406,6 +406,18 @@ TEMPLATE_VALUES_EMPTY_TITLE_HAS_DESCRIPTION = { "{strip,{title,} {descr} }": "Bride Wedding day", } +UUID_PROJECT = "96615063-993E-458B-A9E5-7A68C75A04B6" +TEMPLATE_VALUES_PROJECT = { + "{project}": ["Photos Card"], + "{album}": ["_"], + "{album_project}": ["Photos Card"], + "{folder_album}": ["_"], + "{folder_album_project}": ["Photos Card"], +} + +UUID_NO_PROJECT = "C4EA300F-50AD-4FCB-9173-D29B57B52BCF" +TEMPLATE_VALUES_NO_PROJECT = {"{project}": ["_"]} + @pytest.fixture(scope="module") def photosdb_places(): @@ -432,6 +444,11 @@ def photosdb_cloud(): return osxphotos.PhotosDB(dbfile=PHOTOS_DB_CLOUD) +@pytest.fixture(scope="module") +def photosdb_project(): + return osxphotos.PhotosDB(dbfile=PHOTOS_DB_PROJECTS) + + def test_lookup(photosdb_places): """Test that a lookup is returned for every possible value""" @@ -1208,3 +1225,19 @@ def test_strip(photosdb): for template, value in TEMPLATE_VALUES_EMPTY_TITLE_HAS_DESCRIPTION.items(): rendered, _ = photo.render_template(template) assert value in "".join(rendered) + + +def test_project(photosdb_project): + """Test {project} template""" + photo = photosdb_project.get_photo(UUID_PROJECT) + for template, value in TEMPLATE_VALUES_PROJECT.items(): + rendered, _ = photo.render_template(template) + assert rendered == value + + +def test_no_project(photosdb_project): + """Test {project} template with no project""" + photo = photosdb_project.get_photo(UUID_NO_PROJECT) + for template, value in TEMPLATE_VALUES_NO_PROJECT.items(): + rendered, _ = photo.render_template(template) + assert rendered == value