<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>I second the osxphotos suggestion. It works well and has great
      documentation.</p>
    <div class="moz-cite-prefix">On 10/16/25 7:15 PM, Carol C.
      Kankelborg wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:96AAE301-27CD-418A-A295-0CE815A4C085@kankelborg.net">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <span style="font-family: -webkit-standard; font-size: medium;">I
        forgot to reply to the whole group when I sent this directly to
        Thierry Merle. It may benefit someone else as well. I used
        osxphotos — it is amazingly powerful.</span>
      <div><br>
      </div>
      <div>Here is my notes for the process of exporting photos from
        iPhoto to DigiKam. I did this process back in May this year. I
        am still running Sonoma (14.7.8). iPhoto is a 32-bit app, so it
        doesn’t run on its own past Catalina (I think). There is an app
        called Retrospective that fixes the 32-bit libraries so that
        iPhoto will run (sort of) past that. But that app is not being
        updated to run on later MacOS than Sonoma. </div>
      <div>
        <div><br>
        </div>
        <div>If you have any questions, I’ll do my best to answer them.
          Skimming what I documented, I hope my notes are good enough
          for you to follow.</div>
        <div>One thing I didn’t mention was that on many imported photos
          that had faces recognized, the face box had shifted downward
          in the process. In DigiKam, the box is there, correctly
          labeled, but lower, such as at chest level. I haven’t explored
          an efficient process to fix that, whether by delete &
          re-recognize or move the box.</div>
        <div><br>
        </div>
        <div>Good luck.</div>
        <div><br>
        </div>
        <div>Here is my experience.</div>
        <div><br>
        </div>
        <div>
          <div>Useful information for exporting Photos to Digikam</div>
          <div><br>
          </div>
          <div>Tools:</div>
          <div>homebrew as package manager.</div>
          <div><br>
          </div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>brew
            update</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>brew
            upgrade</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span></div>
          <div># <a href="https://github.com/astral-sh/uv"
              moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/astral-sh/uv</a></div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>brew
            install uv <span class="Apple-tab-span"
            style="white-space: pre;">             </span># (a python package
            manager)</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span># <a
              href="https://exiftool.org/" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://exiftool.org</a></div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>brew
            install exiftool <span class="Apple-tab-span"
            style="white-space: pre;">     </span># (used by osxphotos to
            export metadata)</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span></div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span></div>
          <div><br>
          </div>
          <div># Install osxphotos:</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span># <a
              href="https://rhettbull.github.io/osxphotos/"
              moz-do-not-send="true" class="moz-txt-link-freetext">https://rhettbull.github.io/osxphotos/</a> (Documentation)</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>uv
            tool install --python 3.13 osxphotos</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>uv
            tool upgrade osxphotos</div>
          <div><br>
          </div>
          <div># Fix permissions in iPhoto library </div>
          <div># From osxphotos email list, Rhett Turnbull. (3/21/2025)</div>
          <div># "$(id -un)":"$(id -gn)" would automatically insert your
            user id and group. </div>
          <div># The photo library should have read/write access by you
            and be owned by you. </div>
          <div><br>
          </div>
          <div>sudo chown -R "$(id -un)":"$(id -gn)" <photolibrary
            filename></div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div># Create directory you will export images into</div>
          <div>mkdir <dirname></div>
          <div><br>
          </div>
          <div>Export Files:</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            Puts in directory based on year and merges exif info with
            file.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            Title, Caption, and keyword are visible in Digikam.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            osxphotos keeps track of what photos have been </div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
                    exported in a .db file in the export directory</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            The export directory has to exist. osxphotos will not create
            it.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            It preserves the original image format.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            Movies (.mov) and live images (.heic + .mov) are exported.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">          </span></div>
          <div>Dry Run option:</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>#
            Useful to test out what will be exported</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>osxphotos
            export /path/to/export --dry-run export.csv</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span></div>
          <div><br>
          </div>
          <div>***For Dad's iPhoto library***</div>
          <div><br>
          </div>
          <div>Reference Source: <a
href="https://www.herzbube.ch/blog/2018/11/migrating-iphoto-digikam/"
              moz-do-not-send="true" class="moz-txt-link-freetext">https://www.herzbube.ch/blog/2018/11/migrating-iphoto-digikam/</a> (by
            PatPatrick Näf Moser)</div>
          <div>However, this is rather old and now that osxphotos
            exists, there is no need to write an apple script. Also,
            iPhotos was still fully functional for the author, whereas
            today iPhoto running on Retroactive on MacOS Sonoma, 14.7.4
            is severely hamstrung and will freeze with annoying
            frequency.</div>
          <div><br>
          </div>
          <div>His third point under Migration Step 1 seems to be
            something I have encountered. In the dry-run, there are 2050
            images that could not be exported. The one I investigated
            more closely was pre-2011. The edited version could not be
            found, but the original existed. Interestingly, in the
            iPhoto library, the one osxphotos could not find was under
            the "Preview" file structure while the one it did find was
            under "Masters."</div>
          <div><br>
          </div>
          <div>His process was to use an AppleScript to export images,
            with metadata in a separate file, organized by album name
            and keeping both original and modified files. The script
            exhausted system resources so he had to process subsets of
            albums at one time over several iterations. He then had to
            configure DigiKam to read sidecar files.</div>
          <div><br>
          </div>
          <div>Problems encountered that required post-processing:
            Converting his metadata files to .xmp format and adding file
            extensions to files that lacked them. He also decided to
            only keep the latest version of each image. </div>
          <div><br>
          </div>
          <div>After importing, he had more clean-up to do. </div>
          <div>+ There were "useless technical JPEG comments" such as
            "AppleMark," camera names, GIMP, and empty spaces. He did
            this via the SQL database. </div>
          <div>+ Titles and comments needed encoding fixed. He did this
            manually, but used DQL to find a list of all image comments
            so he could find them easily. NOTE: I tried the caption "
            très ça c’est bon. güt." and it was imported correctly into
            DigiKam.</div>
          <div>+ Final step: Write metadata to image file, not leave it
            solely in the database. </div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>-
            In Preferences, change Metadata-> Behavior so that tags,
            captions, title, and rating are checked. Also, consider not
            updating file timestamp when files are modified.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>-
            In the Menu Tools -> Maintenance, select "Sync Metadata
            and Database." Choose Database -> Image metadata.</div>
          <div><br>
          </div>
          <div>My Experience:</div>
          <div>Running osxphotos on 17,560 images (up through Dec. 31,
            2010) took 8m47s. 17,462 photos were imported and 978 photos
            were missing. osxphotos-dad directory was 43.96GB. Importing
            them into DigiKam took under 2 mins. However after that, the
            computer is getting pretty warm as DigiKam is presumably
            analyzing and categorizing the photos.</div>
          <div>It handles nested photo albums but not smart albums.</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>Add this in for a dry run: --dry-run --verbose </div>
          <div><br>
          </div>
          <div># For limited date range</div>
          <div>*** {/Users/cckborg/Pictures} ***</div>
          <div>Shalom-cckborg $ osxphotos export osxphotos-dad/
            --from-date "2009-09-19" --to-date "2009-09-21" --jpeg-ext
            jpg --exiftool --keyword-template "osxphotos-{today}"
            --keyword-template "iPhotoALB-{folder_album_project(>),No
            Album}" --keyword-template "TYPE-{media_type}"
            --keyword-template "LOC-{place.name.country}"
            --keyword-template "CAM-{exif.camera_model,NoCamera}"
            --strip --touch-file --report "export_{today}.csv"
            --directory "{created.year}" --library ./Dad\ iPhoto\
            Library.photolibrary</div>
          <div><br>
          </div>
          <div># For specific photo</div>
          <div><br>
          </div>
          <div>*** {/Users/cckborg/Pictures} ***</div>
          <div>Shalom-cckborg $ osxphotos export osxphotos-dad-iPhoto/
            --name P8270121.JPG --jpeg-ext jpg --exiftool
            --keyword-template "osxphotos-{today}" --keyword-template
            "iPhotoALB-{folder_album_project(>),No Album}"
            --keyword-template "TYPE-{media_type}" --keyword-template
            "LOC-{place.name.country}" --keyword-template
            "CAM-{exif.camera_model,NoCamera}" --strip --touch-file
            --report "export_{today}.csv" --directory "{created.year}"
            --library ./Archived\ Photo\ Collections/Dad\ iPhoto\
            Library.photolibrary</div>
          <div><br>
          </div>
          <div># To clear out db in export folder.</div>
          <div><br>
          </div>
          <div># For the whole library (except some added by Mom)</div>
          <div># Results:</div>
          <div>### Processed: 26368 photos, exported: 25849, missing:
            2050, error: 0, touched date: 0</div>
          <div>### Elapsed time: 0:13:20</div>
          <div>### 540 missing that were not edited (original not
            preserved by iPhoto)</div>
          <div><br>
          </div>
          <div>*** {/Users/cckborg/Pictures} ***</div>
          <div>Shalom-cckborg $ osxphotos export osxphotos-dad/
            --to-date "2015-01-23" --jpeg-ext jpg --exiftool
            --keyword-template "osxphotos-{today}" --keyword-template
            "iPhotoALB-{folder_album_project(>),No Album}"
            --keyword-template "TYPE-{media_type}" --keyword-template
            "LOC-{place.name.country}" --keyword-template
            "CAM-{exif.camera_model,NoCamera}" --strip --touch-file
            --report "export_{today}.csv" --directory "{created.year}"
            --library ./Dad\ iPhoto\ Library.photolibrary --dry-run</div>
          <div><br>
          </div>
          <div>#  (Mom's Photos) in the iPhoto library</div>
          <div># Results:</div>
          <div>### Processed: 144 photos, exported: 144, missing: 0,
            error: 32, touched date: 144</div>
          <div>### Elapsed time: 0:00:04</div>
          <div><br>
          </div>
          <div>*** {/Users/cckborg/Pictures} ***</div>
          <div>Shalom-cckborg $ osxphotos export osxphotos-mom-2/
            --from-date "2015-01-24" --jpeg-ext jpg --exiftool
            --keyword-template "osxphotos-{today}" --keyword-template
            "iPhotoALB-{folder_album_project(>),No Album}"
            --keyword-template "TYPE-{media_type}" --keyword-template
            "LOC-{place.name.country}" --keyword-template
            "CAM-{exif.camera_model,NoCamera}" --strip --touch-file
            --report "export_{today}.csv" --directory "{created.year}"
            --library ./Dad\ iPhoto\ Library.photolibrary --dry-run </div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>***For Carol's iPhoto library***</div>
          <div># For the whole library</div>
          <div># Results:</div>
          <div>### Processed: 60054 photos, exported: 60438, missing:
            81, error: 770, touched date: 60436</div>
          <div>### Elapsed time: 0:36:41</div>
          <div>### Destination size = 44.41GB. iphotolibrary size =
            264.25 GB</div>
          <div>### 60,511 items minus 73 folders = 60,438 photos</div>
          <div>### 60,519 entries in report. Includes 8 .mov files that
            froze osxphotos. </div>
          <div>### 81 missing: 8 .mov problems; 1 add'l .mov; 1 not
            edited; the rest edited.</div>
          <div>### 14,319 exiftool warnings</div>
          <div>### 769 osxphotos errors</div>
          <div>### 771 exiftool errors</div>
          <div><br>
          </div>
          <div>### 249 Unsupported file type for exiftool: pict, pct,
            bmp, AVI. 3 with no extension.</div>
          <div>### 1   Extension HEIC, but jpg file --> renamed.
            2020/IMG_4023 (1).jpg</div>
          <div>### 14,075 errors and warnings. Took about 2 hours to
            fix.</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>*** {/Users/cckborg/Pictures} ***</div>
          <div>Shalom-cckborg $ osxphotos export osxphotos-carol-iPhoto/
            --jpeg-ext jpg --exiftool --keyword-template
            "osxphotos-{today}" --keyword-template
            "iPhotoALB-{folder_album_project(>),No Album}"
            --keyword-template "TYPE-{media_type}" --keyword-template
            "LOC-{place.name.country}" --keyword-template
            "CAM-{exif.camera_model,NoCamera}" --keyword-template
            "PROJ-{project}" --strip --touch-file --report
            "osxphotos-carol-{today}.csv" --directory "{created.year}"
            --library ./My\ iPhoto\ Library.photolibrary --dry-run</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>==> For errors where file extension did not match file
            type, fix those.</div>
          <div><br>
          </div>
          <div>==> Then run fix-exifdata-dadiphoto (pipe output to
            log file)</div>
          <div><br>
          </div>
          <div>1. Set up filters to select any error, exif-error or
            exif-warning. Eliminate the "unsupported type" (e.g. PICT,
            AVI, BMP) and "not valid" (mismatch between extension and
            file type).</div>
          <div>2. Copy column of file names with paths into text
            document (e.g. in BBEdit).</div>
          <div>3. Put double quotation marks around each file name. Use
            Find/Replace (Grep, Show matches)</div>
          <div>^/Users => "/Users"</div>
          <div>\.(\w*)$ => .\1"</div>
          <div>4. Add in the other code to run fix-exifdata script.</div>
          <div>4a. I recommend testing out the script on a few files in
            a test area first to convince yourself it is working
            correctly before running it on several thousand files.</div>
          <div>5. Run Script, sending output to a log file.</div>
          <div>bash fix-exifdata-caroliphoto 2>&1 | tee -a
            fix-exifdata-caroliphoto.log</div>
          <div>6. Examine the log to ensure problems have been fixed to
            your satisfaction.</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>Examine warnings and errors. They all turned out to be
            inconsequential (for my purposes).</div>
          <div>Import each year folder into DigiKam. If you select the
            parent album in the left sidebar, then you don't have to
            keep selecting the right one. If there are a lot of files in
            a given year, it may take a while for the folder to show up
            in the sidebar. DigiKam will warn you if you try to import a
            given year twice.</div>
          <div>Make sure you have enough disk space to have 3+ copies of
            your images: iPhoto library, osxphoto export, original
            versions of files exiftool changed, DigiKam library.</div>
          <div><br>
          </div>
          <div>Note, the "check mark" keyword is not correctly rendered.
            You will get an error that there are non-Latin characters.</div>
          <div><br>
          </div>
          <div>To avoid memory usage issues, I imported each folder
            separately.</div>
          <div><br>
          </div>
          <div>==> Manually evaluate errors from log file. (For Dad's
            iPhoto album, I found all of them to have been resolved
            satisfactorily.)</div>
          <div>Hint: Search for ^>.*minor or ^>.*Warn or
            ^>.*error for errors or warnings in updated files.</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>==> Evaluate missing photos from osxphotos report
            file. (For Dad's iPhoto album, I found most of them were
            missing originals in the database. Only 2 actually existed.
            For those missing originals, it seems like they were copies
            from Dad's iPod or used in projects such as slide shows.
            There do seem to be a number of missing captions in the 2010
            photos. I still need to investigate that.) For Carol’s
            iPhoto album, there were a few that I had to manually export
            from iPhoto. Most, though were either missing or a problem
            related to edited vs. original.</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>==> Next stage</div>
          <div>Generate fingerprints, under Similarity. Eliminate
            duplicates.</div>
          <div>Scan for faces. Recognize faces.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>Some
            photos were imported with Confirmed face of _UNKNOWN_. I had
            to select all, then move into the true "unknown" category
            and re-recognized them. </div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span>People
            can be combined by selecting photos under one name and
            dragging into the correct name.</div>
          <div><span class="Apple-tab-span" style="white-space: pre;">  </span></div>
          <div>Auto-tag. Save this for last, after you've culled your
            collection. This is a time consuming step.</div>
        </div>
        <div><br>
        </div>
      </div>
      <br class="Apple-interchange-newline">
      <div><br>
        <blockquote type="cite">
          <div>On Oct 15, 2025, at 09:32, Bill Allen
            <a class="moz-txt-link-rfc2396E" href="mailto:ballen@fastmail.fm"><ballen@fastmail.fm></a> wrote:</div>
          <br class="Apple-interchange-newline">
          <div>
            <div>But, you explicitly say it's no longer supported and
              recommend: <a class="moz-txt-link-freetext" href="https://github.com/RhetTbull/osxphotos">https://github.com/RhetTbull/osxphotos</a>.<br>
              <br>
              On 10/15/25 10:18 AM, Jens Benecke wrote:<br>
              <blockquote type="cite">Hello,<br>
                <br>
                you can try this tool:
                <a class="moz-txt-link-freetext" href="https://github.com/jensb/iphoto2xmp">https://github.com/jensb/iphoto2xmp</a><br>
                Disclaimer: I wrote it.  🙂<br>
                <br>
                Jens<br>
                <br>
                <br>
                Am 15.10.25 um 11:22 schrieb Thierry Merle:<br>
                <blockquote type="cite">I have "inherited" a MacBook and
                  CDs with iPhoto albums, with apparently metadata in
                  separate database folders (iPhotoMain, iPhotoAux,
                  Library.data and Library.iPhoto) I can't read from
                  windows.<br>
                  <br>
                  I'm not familiar with apple tools.<br>
                  <br>
                  Is there a way, on my PC or on the macbook to transfer
                  the photos to my digiKam folder without losing the
                  metadata ?<br>
                  <br>
                  Thanks<br>
                  <br>
                </blockquote>
                <br>
              </blockquote>
            </div>
          </div>
        </blockquote>
      </div>
      <br>
    </blockquote>
  </body>
</html>