The last version of Adobe Lightroom (LR) with a perpetual license (i.e., not subscription-based) was version 6.14. On a Mac, installing LR 6.14 using the standard installer can only be done on macOS Mojave or earlier, as several components of the installer are 32-bit applications. While there are a few technical workarounds floating around to manually force an installation on pure 64-bit systems like macOS Catalina, they aren't flawless.
Furthermore, even if you install LR on Mojave and then upgrade your macOS in place, reports show it will only function semi-reliably up to macOS Monterey. On macOS Sonoma and newer, the application crashes immediately upon launch. Even on natively supported systems like Mojave, the Map module and automatic Face Tagging no longer work, and RAW files from cameras released after 2017 are not supported.
After staying on Mojave to keep LR officially supported, I finally decided to migrate my entire library to digiKam. Here is the documentation of how I went about it. Because I am on Mojave, the absolute last compatible version of digiKam I could use is 7.8.0 (7.9.0 and 7.10.0 were crashing upon launch). The process might have been even easier had I updated my Mac to macOS Catalina or later, which would have allowed me to use the latest digiKam 9.0.0—but we work with what we have!
Migrating an extensive media catalog from Adobe Lightroom 6.14 to digiKam 7.8.0 seems straightforward at first for photos. However, video files (such as .MOV and .MP4) pose a major obstacle. While LR allows you to add custom captions, ratings, and keywords, it natively refuses to write this metadata back into the video file headers or create standard external sidecars on your hard drive when you save metadata. Transferring metadata from LR to digiKam requires different methods for different file types.
| Asset Category | Lightroom 6 Metadata Target | digiKam 7.8.0 Parsing Requirement |
|---|---|---|
| RAW Files | Generates standard filename.xmp sidecars via Cmd+S |
Reads natively from standard companion files. |
| JPG / TIFF Files | Bakes metadata directly inside file headers via Cmd+S |
Reads directly out of the image headers natively. |
| Videos (.MOV / .MP4) | Trapped entirely inside internal database rows (.lrcat) |
Strictly requires unique dual-extension sidecars (filename.MOV.xmp) |
You do need to install open source exiftool. You can do this with MacPorts or Homebrew.
For example with MacPorts:
sudo port install exiftool
or Homebrew:
brew install exiftool
Current directory structure:
Lightroom contents are in:
/Volumes/Media/Lightroom
Inside of the directory, there is the catalogue (Lightroom Library.lrcat) which contains the metadata for video (and other things). This is a SQLite database.
Actual images/videos are stored in /Volumes/Media/Lightroom/Pictures
I am going to copy contents of /Volumes/Media/Lightroom/Pictures/ to /Volumes/Media/digiKam/fromLR/. I have been using digiKam for newer photos, so /Volumes/Media/digiKam is set up as the Local Collections (with digiKam > Preferences > Collection > Root Album Folders > Local Collections > Add Collection, I set "/Volumes/Media/digiKam")
Phase 1: Preparation & Extraction Inside Lightroom (Original Location)
All catalog file and setting modifications must be executed while Lightroom 6 still points directly to your original library files (/Volumes/Media/Lightroom). Moving the folder tree before this phase will disrupt your newly generated files.
Step 1.1: Push Photo Metadata to Files
At this step, metadata (e.g. captions etc), which are in Lightroom catalogue (SQLite database), get written to files. For JPEG, TIFF, PNG, PSD, and DNG files, the metadata get embedded into the original files (the original files are modified). For proprietary raw files (NEF, ORF etc), the original files are not modified, but sidecar files (.xmp), which contain metadata, are created in the directory same as the raw files. For video files, nothing is done (we will deal with this in Phase 3).
- Launch Lightroom 6 and make sure you are in Library (not Develop) module.
- Show all photos/videos
- Navigate to the left-hand Folders panel and select your master parent directory (e.g.,
Pictures). - Ensure that Library > Include Photos in Subfolders is enabled in the top application menu.
- Or, click Catalog > All Photographs
- Expand all stacks: Photo > Stacking > Expand All Stacks
- Select your entire photo and video library layout by pressing
Cmd + Ainside the grid (main area with thumbnails). - Go to the top menu bar and select Metadata > Save Metadata to Files (or use the system shortcut
Cmd + S).
Step 1.2: Isolate and Export Edited Visual Developments
Because digiKam cannot read Lightroom’s proprietary develop parameters (exposure, highlights, shadows), edits are trapped. You must export high-quality versions right next to the original files (JPEG will be created for both JPEG and RAW). In digiKam, we will group the original version and edited version. Note that Step 1.1 should be done before this step.
- With your master parent folder highlighted, reveal the Library Filter options by pressing the
\(backslash) key. - Select the Metadata tab. You see several columns like Camera, Lens, File Type etc. If you click one of them, you can get dropdown options and select "Develop Preset" (see below). Then you'll see several develop preset options. Select everything except "Default Settings" (i.e. select all edited items). Your view will instantly isolate your edited assets.
- Highlight all edited images by pressing
Cmd + A, then click the Export... button on the bottom left, and select following options in the pop-up window: - Export Location: Set the dropdown selection to "Same folder as original photo".
- File Naming: Click the checkbox of Rename to:, and select Edit... from the pull-down menu. Select Filename with Edited Suffix in Preset: pull-down menu at the top. In the box below it, there is a open box. You can select Filename, and type in "-Edited" after that (so it looks like the screen capture below). This is making sure the exported file doesn't replace the original. For example, edited file of P0014.jpg (or P0014.NEF) will be saved as P0014-Edited.jpg.
- File Settings: Set Image Format to JPEG and Color Space to sRGB. Adjust the **Quality slider between 85 and 90**.
⚠️ Storage Optimization RuleSetting the JPEG quality slider to 100 is highly inefficient. JPEG compression curves demonstrate steep diminishing returns above 90; pushing it to 100 exponentially inflates your file sizes without delivering any human-perceptible visual improvement. Sticking to 85–90 cleanly balances file optimization and visual quality.
- Image Sizing: Make sure Resize to Fit is NOT checked
- Metadata: Set the "Include" dropdown option explicitly to "All Metadata". Crucially, ensure that the checkboxes for "Remove Person Info" and "Remove Location Info" are completely UNCHECKED. Leaving these checked will permanently strip face tags and GPS coordinates from your exports.
- Output sharpening: Make sure Sharpen For: is NOT checked.
- Post Processing: Select "Do nothing" for the "After Export:" dropdown option.
- Click Export and let the background rendering engine finish.
Phase 2: Establish a Database Copy
To avoid database connection locks or corruption risks while executing terminal extractions, complete your database operations on a clone of your catalog file. It is unlike that the operation will screw anything, but just in case.
- Completely close Adobe Lightroom 6.
- Open macOS Finder, navigate to your Lightroom catalog directory, locate your master
.lrcatfile ( "/Volumes/Media/Lightroom/Lightroom Library.lrcat" in my case), right-click it, and choose Duplicate. - I renamed this duplicate catalog file to
lib-bu.lrcat.
Phase 3: The 2-Stage Video Metadata embedding
Wave 1: Extracting Core & GPS Coordinates in XML
This wave extracts the capture titles, copyright, creation and modification dates, GPS coordinates from the catalog copy, writing them into a csv with XML (/Volumes/Media/videometadata.csv). Note this file doesn't contain information like: Captions, keywords, tags, and star ratings, which we extract in Wave 2.
- Open your Mac's Terminal application and navigate to your catalog workspace:
cd /Volumes/Media/Lightroom/
- Initialize the file structure and run the SQLite query targeting the raw XML string block inside the catalog copy:
sqlite3 "lib-bu.lrcat" ".headers on" ".mode csv" "SELECT folder.pathFromRoot || f.idx_filename AS SourceFile, x.xmp AS XMP FROM Adobe_images a JOIN agLibraryFile f ON a.rootFile = f.id_local JOIN AgLibraryFolder folder ON f.folder = folder.id_local JOIN Adobe_AdditionalMetadata x ON a.id_local = x.image WHERE a.fileFormat = 'VIDEO';" > ../videometadata.csv
- Transfer Files: Use macOS Finder to copy your entire physical media root folder (
/Volumes/Media/Lightroom/Pictures) from its old location to its permanent home on your target storage drive (e.g.,/Volumes/Media/digiKam/fromLR). Verify byte configurations and totals match.
Or with Terminal.app,mkdir -p /Volumes/Media/digiKam/fromLR
cp -R /Volumes/Media/Ligtroom/Pictures/* /Volumes/Media/digiKam/fromLR/ - Navigate to the new copied location inside your Terminal window:
cd /Volumes/Media/digiKam/fromLR/
- Use ExifTool to interpret the raw XML file streams and stamp the base camera profiles and GPS track maps into your target video wrappers:
exiftool -csv=/Volumes/Media/videometadata.csv -tagsfromfile @ -srcfile %d%f.%e -xmp:all -r -overwrite_original -ext MOV -ext MP4 *
Wave 2: Extracting Custom Text, Ratings, & Sliced Titles
This step isolate custom captions, ratings, and keywords, and overlays them onto your video files. It also extracted ISO, Aperture, ShutterSpeed, and FocalLength. Most of the files didn't have these capture setting info like ISO, and some files had rather weird values. This info was also captured in wave 1, so I'm not sure it is worth extracting it in wave 2.
- Return to your catalog workspace in your Terminal application:
cd /Volumes/Media/Lightroom/
- Run the advanced text property string-slicing query to map out your custom entries:
sqlite3 "lib-bu.lrcat" ".headers on" ".mode csv" "SELECT './' || folder.pathFromRoot || f.idx_filename AS SourceFile, CASE WHEN instr(prop.propertiesString, 'title = \"') > 0 THEN substr(prop.propertiesString, instr(prop.propertiesString, 'title = \"') + 9, instr(substr(prop.propertiesString, instr(prop.propertiesString, 'title = \"') + 9), '\"') - 1) ELSE NULL END AS Title, c.caption AS Description, a.rating AS Rating, group_concat(k.name, ', ') AS Keywords, e.isoSpeedRating AS ISO, e.aperture AS Aperture, CASE WHEN e.shutterSpeed IS NOT NULL THEN '1/' || CAST(ROUND( CASE WHEN e.shutterSpeed = 0 THEN 1 WHEN e.shutterSpeed = 1 THEN 2 WHEN e.shutterSpeed = 2 THEN 4 WHEN e.shutterSpeed = 3 THEN 8 WHEN e.shutterSpeed = 4 THEN 16 WHEN e.shutterSpeed = 5 THEN 32 WHEN e.shutterSpeed = 6 THEN 64 WHEN e.shutterSpeed > 5.6 AND e.shutterSpeed < 5.7 THEN 50 WHEN e.shutterSpeed > 5.9 AND e.shutterSpeed < 6.0 THEN 60 WHEN e.shutterSpeed > 6.6 AND e.shutterSpeed < 6.7 THEN 100 WHEN e.shutterSpeed > 6.9 AND e.shutterSpeed < 7.0 THEN 120 WHEN e.shutterSpeed > 7.6 AND e.shutterSpeed < 7.7 THEN 200 WHEN e.shutterSpeed > 7.9 AND e.shutterSpeed < 8.0 THEN 240 ELSE e.shutterSpeed END ) AS INT) ELSE NULL END AS ShutterSpeed, e.focalLength AS FocalLength FROM Adobe_images a JOIN agLibraryFile f ON a.rootFile = f.id_local JOIN AgLibraryFolder folder ON f.folder = folder.id_local LEFT JOIN AgLibraryIPTC c ON a.id_local = c.image LEFT JOIN Adobe_imageProperties prop ON a.id_local = prop.image LEFT JOIN AgHarvestedExifMetadata e ON a.id_local = e.image LEFT JOIN AgLibraryKeywordImage ki ON a.id_local = ki.image LEFT JOIN AgLibraryKeyword k ON ki.tag = k.id_local WHERE a.fileFormat = 'VIDEO' GROUP BY a.id_local;" > /Volumes/Media/videometadata2.csv
- Change directories back to your target media storage location on your drive:
cd /Volumes/Media/digiKam/fromLR/
- Execute your secondary ExifTool injection. We redirect the engine's processing space to your internal Mac system drive (
TMPDIR=/tmp) to optimize processing speeds and sidestep write bottlenecks:exiftool -csv=/Volumes/Media/videometadata2.csv -sep ", " -overwrite_original -r -ext MOV -ext MP4 .
Wave 3: Generating digiKam Compliant Sidecars
Optional: if you want to check what metadata get embeded by Wave 1 & 2, you can read metadata off from the video file and create a CSV file (it creates /tmp/audit.csv):
cd /Volumes/Media/digiKam/fromLR/
exiftool -f -r -ext MOV -ext MP4 -csv -Title -Copyright -CreateDate -ModifyDate -GPSPosition -Description -Rating -Subject -ISO -Aperture -ShutterSpeed -FocalLength . > /tmp/audit.csv
Now that the video files have been injected with the unified results of both database extractions, instruct ExifTool to compile the standalone sidecars that digiKam can read:
exiftool -r -ext MOV -ext MP4 -o %d%f.xmp -xmp .
P5040006.MOV now has an external metadata companion named precisely P5040006.xmp containing your camera data, GPS coordinates, titles, keywords, star rating values, and descriptions/captions. NOTE: I don't use star rating, so I haven't tested it, but it should be there.Phase 4: Configure digiKam 7.8.0 Database Settings
Before allowing digiKam to run its initial directory scan over your newly built paths, adjust its application sidecar handling rules.
Step 1: Establish your Media collection
Open digiKam 7.8.0. I have been using digiKam with the local collection set to /Volumes/Media/digiKam. If you copied your files directly into an existing digiKam folder hierarchy (like /Volumes/Media/digiKam/fromLR/), digiKam's background engine will display fromLR as a sub-album in the Albums tree on the left sidebar, preserving all your internal folder organization. In this case, skip directly to Step 2.
However, if you moved your files to a fresh directory outside of your existing setup, you must manually point digiKam to the directtory:
Navigate to digiKam > Preferences (on macOS) or Settings > Configure digiKam (on Windows/Linux).
On the left sidebar, click Collections.
Under the Local Collections section, click Add Collection.
Browse to and select your target drive folder: e.g.,
/Volumes/Media/digiKam/fromLR/Give it a descriptive label (e.g., "Migrated Lightroom Archive").
Step 2: Configure the sidecar metadata handling
- Navigate to the top menu layout bar and select digiKam > Preferences if you have skipped Step 1, or remaining in the Preferences window.
- On the left-hand vertical menu column, click the Metadata options button (represented by </>).
- Select the Sidecars tab along the top edge of the expanded configuration window.
- Verify that the checkbox option for "Read from sidecar files" is securely CHECKED.
- Locate the option labeled "Sidecar file names are compatible with commercial programs" and ensure it is CHECKED.
❗ Why This Step is Non-NegotiableWhen handling RAW photo files, Lightroom natively creates single-extension sidecars (e.g., saving metadata for
P0001.NEFintoP0001.xmp). To maintain consistency across our library, our Wave 3 script matched this format, creatingP0002.xmpforP0002.MOVvideos.Checking this compatibility box forces digiKam to scan for these streamlined commercial-standard sidecars. Leaving it unchecked reverts digiKam to its native Linux/Unix behavior, causing it to look exclusively for double-extension sidecars (likeP0002.MOV.xmp), meaning your .xmp sidecar will be ignored! - Optional: Check the box for "Write to sidecarfiles", and select the sub-option "Write to XMP sidecar for read-only item only." By enabling this, any future metadata modifications you make inside digiKam will intelligently adapt based on file types:
- For JPEGs: Changes are safely baked directly inside the image binary, keeping your photography folders beautifully clean and sidecar-free.
- For RAWs and Videos: Changes are directed to your clean, single-extension .xmp sidecars, preventing any threat of media file corruption.
- Click Apply and then click OK to lock in the database structural rules.
Phase 5: Run the Targeted Album Sync to reread metadata
Now we must instruct digiKam to actively pull the metadata from our new .xmp sidecar files into its master database.🔍 Current Status Check: At this point, your JPEGs, RAWs, and Edited_Versions files should show their metadata cleanly. However, your videos will likely still look completely blank. Don't panic—this is what we are about to fix.
The global sync method
- Select your top-level folder of imported files (e.g.,
fromLR) in the left Albums tree. - Go to the top application menu bar and click View.
- Scroll down and look for Include Album Sub-tree. Ensure there is a checkmark next to it. (This instructs digiKam to look recursively down all sub-folders).
- You should now see all of your imported files in the main grid. Select everything by going to Edit > Select All or pressing Cmd + A (Mac) / Ctrl + A (Windows).
- Navigate to the top main menu bar and select: Item > Reread Metadata from file.
- Watch the progress bar finish in the bottom-right corner as digiKam refreshes your library.
The Leaf Folder Workaround
During initial testing in digiKam 7.8.0, a recursive folder interface glitch occasionally prevented global reread triggers from trickling all the way down to sub-folders. If you run the global sync method and your video files stubbornly remain blank, you will need to expand the directory tree and run the command directly on each individual "leaf" directory:
- Look at the Albums tree view on the far left side of your digiKam application workspace. Expand your primary
fromLRparent directory so all underlying leaf subfolders are displayed. - Click directly on the first leaf subfolder in the list to reveal its assets in the central grid view.
- Push Cmd + A (Mac) or Ctrl + A (Windows) to select all thumbnails in that specific directory.
- Navigate to the top main menu bar and select: Item > Reread Metadata from file.
- Watch the progress bar finish in the bottom-right corner. The current folder level will completely refresh, and all of your missing video titles, captions, ratings, and keywords will instantly jump to life!
- Move down to the next leaf subfolder on the left sidebar, select all, and choose Item > Reread Metadata from file again.
- Repeat this process down through your subfolder tree. Your total video collection is now officially migrated, fully tagged, and preserved forever!
Phase 6: Clean Up Version Stacks Automatically
- Select all files in your imported album (Cmd + A).
- Right-click any thumbnail and select Group > Group Selected by Filename.
- digiKam will instantly analyze the text patterns, pair your "-Edited.jpg" files with their original counterparts, and compress them into neat stacks.
- Expand a stack, right-click your edited version, and select **Group > Set As Group Pick** to ensure your final, edited masterpiece acts as the beautiful cover photo for that stack!
Links to other people with tips of migration from Lightroom to digiKam
Comments
Post a Comment