Workflow

The five workflow phases.

Every shoot in SpeedCull moves through the same five phases: Scan, Generate Previews, Cull, Sync to XMP, and Cleanup. The sidebar in the main window lets you jump between them at any time — the order is just the recommended path.

1. Scan

Scan walks the folder you opened, finds every supported RAW file, and records each one in the project database. It runs once initially and any time you want to pick up newly-added files.

What gets indexed

What gets skipped

Stable identity

SpeedCull identifies each image by a hash of projectId + relativePath, not by filename. That means duplicate filenames in different sub-folders (e.g. across multiple card backups) are kept distinct, and a database unique constraint enforces it.

File-changed-since-scan detection

On re-scan, SpeedCull compares each file’s file size and modified-at timestamp against the recorded values. Anything that moved gets the changed status, its existing previews are invalidated, and Generate Previews picks it up next time.

2. Generate Previews

This is the slow phase, and the only slow phase. SpeedCull renders JPEG previews in up to three sizes (Compare, Screen, optionally Native) so culling itself is fast. See Preview tiers for the sizing details.

How it works

Pause / resume / cancel

Long preview runs can be paused (cooperative — the current image finishes before pausing), resumed, or cancelled outright. The progress strip shows ETA based on the current rate.

Resuming after a crash

Progress is journaled to SQLite per-image, so if the app exits mid-run you can return to Generate Previews and click Start again — only the unfinished images get redone.

3. Cull

The main work surface. Cull is divided into five view modes — see View modes for the deep dive. Pick your filter, your sort order, and your mode, then make decisions.

The Pass workflow

Across the top of the Cull screen sits the Pass control bar — five chips for five passes. Each chip sets the appropriate filter and jumps to the first image:

PassFilterPromotes toUse it for
Pass 1All1★First quick-no-review pass — kill the obvious misses
Pass 2≥ 1★2★Survivors of pass 1 get a second look
Pass 3≥ 2★3★Pickers — frames worth showing the client
Pass 4≥ 3★4★Hero candidates — selects for delivery
Pass 5≥ 4★5★Portfolio frames — the final cut

The funnel strip along the bottom shows how many images are at each level. Numbers update live as you rate. Click any funnel item to filter to that bucket.

Filters and sort

The filter dropdown supports All / Unrated / =N★ / ≥N★ / Picked / Rejected / Unflagged. Sort options are Capture Time (default), Filename, Folder Path, Rating, and Culling Order (the order images were added to the project).

Folder filter

If your project has multiple top-level folders (e.g. one card backup per shoot day), a Folder dropdown appears that scopes the filter to one card at a time. Useful when culling a multi-card event.

4. Sync to XMP

When you’re happy with the ratings, Sync writes them to standard XMP sidecar files that Lightroom Classic, Bridge, and Capture One can read. See Lightroom sync for the full round-trip.

What gets written

Backup-then-update

If an XMP sidecar already exists, SpeedCull copies it to .SpeedCull/backups/xmp-before-sync/<timestamp>_<id>_<name>.xmp before writing. Only the xmp:Rating attribute is touched — every other namespace, attribute, and child element is preserved exactly.

Read-only handling

If the XMP file or its parent directory is read-only (common on archived shoots), the sync action is recorded as skipped with a separate count for read-only failures. Nothing is overwritten silently.

5. Cleanup

Once your ratings are synced and Lightroom has read the sidecars, you generally don’t need the preview cache any more. The Cleanup phase shows you exactly how much disk each preview tier is using and lets you reclaim it.

Targets

Compare previews1 920 px JPEGs (the small ones)
Screen previews3 840 px JPEGs (the loupe-fit ones)
Native previewsSource-resolution JPEGs (only if you opted in)
Focus cropsAF-aware 100% crops, regenerated on demand
Database & logsThe SQLite catalogue and sync logs
XMP backupsPre-sync sidecar copies — keep these until you’re sure the sync went well

Delete previews removes the JPEG cache (compare + full + native). The catalogue and backups stay. Delete everything nukes the entire .SpeedCull/ folder — your RAWs and XMP sidecars are untouched.

Offline-drive handling

SpeedCull projects often live on external drives. If the drive disconnects mid-session, an offline banner appears at the top of the workspace with a Reconnect button. All your records — ratings, previews already generated, sync logs — are preserved in the database. Re-mounting the drive and clicking Reconnect resumes work.