Try Now

Darktable Culling Workflow: Rate Before You Import

By Ingo D · · Updated June 30, 2026

If you use darktable, you already know the drill. Import a shoot, wait for previews to generate on a thousand frames, then work through the lighttable assigning star ratings one by one. The first pass is the bottleneck. You are making keep-or-reject decisions that take two seconds each, but darktable’s interface is built for side-by-side comparison and editing, not for speed-triage through a large set.

There is a better way. You can cull and rate your photos before they ever touch darktable’s library, using a dedicated culling app that writes standard XMP sidecars. When you import the folder into darktable, it reads those sidecars automatically. Your star ratings, colour labels, and reject flags appear immediately. You never re-rate a single frame.

Why cull photos before importing into darktable?

Darktable is a capable RAW developer and digital asset manager, but its lighttable modes are designed for selection and review, not for high-speed triage. The built-in culling mode (X key for fixed view, Ctrl+X for dynamic) shows two to four images side by side for comparison. That is excellent for choosing between similar shots, but it is not built for the first-pass reject-or-keep rhythm of a 1,000-frame wedding or event shoot. The import step itself also adds overhead: darktable reads each file to generate thumbnails and build its database entries before you can start rating.

Culling before import solves both problems. You run the rating pass in a tool built for speed, writing decisions to XMP sidecars as you go. Darktable then reads those sidecars when you import the folder. The result is a clean library from the start, with your selects already marked, your rejects flagged, and no second pass needed. The time spent per frame is the same, but the import step becomes a handover instead of a speed bump.

Can I cull darktable photos directly on my NAS or local folder?

Yes, and this is a key advantage of the workflow. CullKit connects directly to your existing storage wherever your photos live, without importing or copying anything. If your library is on a Synology, QNAP, TrueNAS, or UGREEN NAS, CullKit reads the files over SMB or the Synology Photos API. If you store your working folders on an external SSD or a local directory, it opens that folder directly.

For a Synology NAS, the address looks like smb://DiskStation-IP/photo. For QNAP and TrueNAS, use the SMB path such as \\NAS-IP\Multimedia or smb://NAS-IP/volume1. For a local folder or external drive, select it through the file picker. CullKit browses the folder tree, shows your thumbnails, and lets you start rating immediately. Nothing is uploaded. No files are moved or duplicated. The XMP sidecars are written alongside your originals on the same storage, so darktable finds them naturally.

How does darktable read XMP sidecars from another app?

Darktable automatically checks for standard XMP sidecar files when you import images into its library. It looks for the Lightroom-style naming format <basename>.xmp next to each RAW file alongside its own native format. When it finds one, it reads the following metadata: star ratings (0 to 5), colour labels (red, yellow, green, blue, purple), reject flags, tags and hierarchical keywords, and GPS coordinates.

This is the same XMP standard that Adobe Lightroom and Capture One use. The sidecar format is open, documented as ISO 16684-1, and darktable’s import system treats it as a first-class metadata source. After import, darktable stores the metadata in its own library database and may generate an additional XMP sidecar using its own naming convention. Your original ratings survive and remain the source of truth for the triage decisions you already made.

Setting up a darktable culling workflow with CullKit

The workflow has three stages: connect, rate, and import. Here is how each stage works in practice.

Connect CullKit to your storage. After a shoot, your RAW files are on a NAS, an SMB share, or a local folder. Open CullKit and navigate to that location. CullKit scans the folder, generates thumbnails, and shows you a grid of your frames. No import, no copy, no catalogue creation.

Cull and rate your frames. On iPhone and iPad, swipe right to keep a frame and left to reject it. Tap the star icons to assign a rating from 1 to 5, or use the quick-access bar for colour labels matching darktable’s palette. On Mac, use keyboard shortcuts: number keys for star ratings, P to pick, X to reject, arrow keys to move between frames. The interface is full-screen with nothing else on screen.

For a typical 1,200-frame wedding or event, a first pass at two seconds per frame takes roughly 40 minutes. A second pass over the top-rated survivors, adding colour labels and refining star ratings, adds another 15 to 20 minutes. Total time is under an hour to go from a memory card to a fully rated set of selects, and it can happen anywhere you have your device and a network connection.

Import into darktable. Open darktable and import the folder using the normal import module. Darktable scans the directory, spots the XMP sidecars alongside each RAW, and reads your ratings, colour labels, and reject flags. The keepers are marked with their star ratings. The rejects are flagged. You go straight to the darkroom to edit, skipping the lighttable rating pass entirely.

How do my ratings and colour labels get into darktable?

Every star rating, colour label, and reject flag you assign in CullKit is written to a standard XMP sidecar file in the same folder as your RAW. The sidecar is named after the image: a file called DSC_4521.NEF gets a companion DSC_4521.NEF.xmp. Inside that sidecar, the rating is stored as xmp:Rating (an integer from 0 through 5), the colour label as xmp:Label (Red, Yellow, Green, Blue, Purple), and reject flags through the standard XMP reject mechanism.

When darktable imports the folder, it reads these sidecar files. The star rating appears on the thumbnail in the lighttable. The colour label badge is applied. Rejected frames are flagged. You see your rating decisions before you open a single image in the darkroom.

If the folder is already in darktable’s library and you want to update ratings from a fresh culling pass, use the collections and film rolls module to re-import the folder or synchronise the existing film roll. Darktable re-reads the sidecars and updates its database. You do not need to delete and re-import anything.

Why use a dedicated culling app instead of darktable’s culling mode?

Darktable’s built-in culling mode is designed for comparison. Press X to enter fixed culling mode, and you see two to four images side by side. You can zoom in, pan, and compare details across frames. That is a powerful tool for the second pass, when you are choosing between two strong images, but it is not optimised for the first pass, when you need to move through hundreds of frames and make instant keep-or-reject decisions.

A dedicated culling app like CullKit approaches the problem differently. The interface shows one frame at a time, full-screen, with no thumbnails or panels competing for attention. On iPhone and iPad, you swipe to advance. On Mac, you use the arrow keys. The decision is binary or scalar: keep or reject, or assign a star rating in a single tap or keystroke. The result is a faster rhythm for large shoots.

There is another difference worth noting: darktable is a desktop application. CullKit runs on iPhone, iPad, and Mac. That means you can cull a shoot on the train, on the sofa, or while waiting for a client, import the folder on your desktop later, and find every rating already in place. The culling pass and the editing pass do not need to happen at the same desk.

What about free and open-source alternatives?

Darktable itself is free and open-source software, released under the GNU General Public Licence. If you chose darktable over Lightroom, you likely value open standards, data portability, and freedom from vendor lock-in. A culling workflow based on XMP sidecars respects all three.

CullKit writes standard XMP sidecars that any XMP-compliant editor reads. The sidecar format is an open ISO standard, not a proprietary database. Your ratings are stored as plain-text XML files in your own folders, on your own storage. You are never locked into CullKit’s format. If you stop using the app, the sidecars remain on disk and darktable continues to read them. The sidecar workflow is editor-agnostic because the sidecar is editor-agnostic.

CullKit itself is a paid app with a free browsing tier and a Pro subscription for culling and XMP writing. The Pro tier includes a 7-day free trial, so you can verify the workflow with your own photos before committing. The value is speed, mobile culling, and a streamlined handover to your existing editor. There is no cloud, no upload, and no lock-in. Your photos and your ratings stay on your devices.

Troubleshooting darktable XMP import

Darktable does not see my ratings after import. Confirm that the XMP sidecar files are present in the same folder as your RAW files. Each sidecar should have the same base filename as the image, with a .xmp extension. Darktable looks for the <basename>.xmp format on import. If the sidecars are in a subfolder or were moved separately, darktable will not find them.

The star ratings appear but colour labels are missing. Darktable reads colour labels from standard XMP sidecars, but the label must use the capitalised colour names that darktable expects: Red, Yellow, Green, Blue, Purple. If the sidecar writes a hex code or a lowercase name, darktable may skip it. CullKit writes the standard capitalised values that match darktable’s palette.

Darktable generated a second sidecar after import. Darktable creates its own XMP sidecars using <basename>.<extension>.xmp as its naming convention. This is expected behaviour and does not overwrite or conflict with the original <basename>.xmp sidecar. Your ratings from both sources are merged in darktable’s database. You can safely keep both files.

My ratings show in the lighttable but not in the darkroom after edits. The star rating is a metadata field, independent of the edit history. If you change the rating in the darkroom or the metadata editor, darktable updates its database and writes the change to its sidecar. The original CullKit sidecar remains unchanged, which is useful if you ever re-import the folder and want to start from your original triage decisions.

I culled on an iPhone and darktable on my Linux desktop cannot see the ratings. Ensure both devices can reach the same folder, whether over a local SMB share or a synchronised copy. The sidecars are written to the storage, not to a cloud service. If you copy the folder to a different machine, include the xmp files. On macOS, Finder may hide dotfiles and sidecars by default; use . in the file-open dialog to reveal them.

Try the darktable culling workflow

CullKit is available on iPhone, iPad, and Mac. The free tier lets you browse any connected library, whether on a Synology NAS, a QNAP or TrueNAS share, an external SSD, or a local folder. The Pro tier (7-day free trial, then monthly or yearly) unlocks culling, star ratings, colour labels, tags, and XMP sidecar writing. There is also a built-in demo mode with sample data, so you can see the full workflow before pointing it at your own photos.

Cull your shoot wherever you are. Your darktable library picks up the ratings when you sit down to edit.

Download CullKit on the App Store


CullKit is an independent product. It is not affiliated with or endorsed by the darktable project or its contributors. CullKit writes standard XMP sidecars that any XMP-compliant editor reads. Compatibility claims only.

← Back to all posts