Repository navigation
Releases: twlatl/PixelLoupe
Release list
PixelLoupe 1.2.0
What and why
1.1 made PixelLoupe workable away from the originals and gave it a proper import window. 1.2 covers the next things Lightroom Classic users reach for: finding photos fast, putting them on a map, culling a shoot, and getting finished photos out to Flickr or a folder that stays in sync. Along the way it adds a contact sheet, a Before/After view, an Aperture-style Gray appearance and a batch of fixes.
Publishing: Hard Drive and Flickr (#62–#70)
- Window ▸ Publishing Manager… sets up publish services, laid out like Lightroom's. There are two kinds:
- Hard Drive: publishes to a folder (and optional subfolder). Re-publishing overwrites the photo's own file.
- Flickr: sign in with Authorize, which opens flickr.com. The sign-in is kept in your Keychain, never in the catalog. You can also set the title source, privacy (Public, or Private with Family/Friends), safety level, content type and "Hide from public site areas".
- Every service has the Export dialog's settings: File Naming, File Settings, Image Sizing, Output Sharpening, Metadata and Watermarking. Flickr always uploads JPEG.
- A Publishing section in the sidebar lists your services. Drag photos onto one to add them. Select a service and the grid groups its photos as New Photos to Publish, Modified Photos to Re-Publish, Published Photos and Deleted Photos to Remove.
- Publish (in the bar above the grid, or Publish Now in the sidebar) uploads new photos and re-publishes edited ones:
- On Flickr, a photo whose pixels changed is replaced in place, so it keeps its page, comments and favourites.
- A photo whose title, caption, keywords, rating or location changed only gets its details updated, with no new upload.
- Photos you take out of a service are removed at the next Publish, after you confirm. Hard Drive files go to the Trash.
- Progress and Cancel show in the bottom bar. Photos that fail get a red badge that tells you why, and the next Publish tries them again.
- If Flickr revokes PixelLoupe's access, Publish stops once and tells you to sign in again, instead of failing every photo.
- Flickr albums and smart albums. Use Create Album…, Create Smart Album… and Import Smart Collection Settings… (which reads Lightroom
.lrsmcolfiles). Albums appear under the service. Publish only ever adds or removes the photos this catalog put in an album. It never deletes an album on Flickr, and it leaves photos you added on flickr.com alone. - Lightroom's publish service menu in the sidebar has Set as Target Collection (so B adds photos to a service), Reset Export Status…, Mark to Republish, Auto Stack…, a color label, and Show in Flickr / Show in Finder.
- Write Keywords as PixelLoupe Hierarchy, in both Export and Publish, writes nested keywords as
Places|Ireland|Dublin. Lightroom reads that and rebuilds the tree. It's off by default.
Assisted Culling and Auto Stack (#57–#61)
- A new Assisted Culling section in the Library inspector splits the current folder or collection into Selects and Rejects.
- Click Analyze to measure subject focus, eye focus, open eyes, exposure problems, misfires and documents. It runs in the background and works from the Smart Preview when the original is offline.
- Choose what counts: Subject Focus and Eye Focus sliders, Eyes Open (with an option for ambiguous cases, such as one blink in a group shot), Exposure Issues, Misfires and Documents.
- Review filters the grid to Selects, Rejects or All. Moving a slider re-filters at once, with nothing re-analyzed.
- Apply Flags marks unflagged Selects as Picks and unflagged Rejects as Rejected, in one undoable step. Photos you've already flagged keep their flag.
- The Assisted Culling Info section shows why the selected photo is a Select or a Reject, with its scores out of 100.
- Auto Stack… groups bursts and brackets into collapsed stacks, either By Capture Time (a gap from 1 second to 1 hour) or By Visual Similarity (Loose to Strict). A live count shows what you'll get before you commit. The best-scoring Select goes on top of each stack.
Map module and locations (#52–#55)
- View ▸ Map (⌘3, or ⌥⌘3 as in Lightroom) shows the photos in the current source as pins on Apple Maps.
- Nearby pins cluster.
- Hover a pin to see its thumbnail. Click a pin to select its photo; with a cluster, the arrows step through its photos. Double-click a pin to open it in Loupe.
- A floating bar has Standard / Satellite / Hybrid, a photo count and a zoom slider.
- The Library Filter and the Library inspector work in Map too.
- A Location panel in the Library inspector searches for addresses and places as you type. It shows the spot on a small map with a pin you can drag. Apply gives the location to photos that have none, Replace overwrites (asking first if that would replace a location the camera recorded) and Remove clears it. You can also type
lat, lon, which works offline. - Export now writes the catalog's location to EXIF and XMP. A location you typed or removed in PixelLoupe reaches the exported file, including files sent with Edit In.
Library Filter (#38–#42)
The old filter row above the grid is now Lightroom's Library Filter bar. Show and hide it with \ in Library, or View ▸ Show/Hide Filter Bar, and use ⌘F to jump to its search field.
- Text: search any field or a chosen one (file name, title, caption, keywords, camera and lens, creator and copyright…). Rules include Contains, Contains All, Contains Words, Doesn't Contain, Starts With and Ends With. Lightroom's
!word,+wordandword+work too. - Attribute: Flag, Edited/Unedited, Rating, Color label (including custom Lightroom labels), Kind (originals, virtual copies, videos) and Stacked.
- Metadata: Lightroom's column browser. Choose from 18 kinds (Date, Camera, Lens, Keyword, ISO, Aspect Ratio, Folder…). Each column narrows the ones to its right. You can have up to 8 columns and drag the bar to the height you want.
- Presets: the built-in Filters Off, Default Columns, Exposure Info, Flagged and Rated, plus your own. Your presets are shared by every catalog.
- The filter stays on as you move between folders and collections, and is saved with the catalog. When it hides photos, the filmstrip says "42 of 310 photos".
Contact Sheet (#31)
Window ▸ Contact Sheet (⌃⌥⌘C) lays the selected photos (or the whole grid) out on pages with a headline, description, page numbers, borders, shadows and a caption you choose. Generate… saves a 300 ppi PDF. The page size, orientation and the rest of the layout are remembered.
Develop
- Before/After (#34): View ▸ Before/After offers Left/Right (
Y), Top/Bottom (⌥Y), Before Only (\) and Split Screen (⇧Y), with Lightroom's keys. Press the same key again to go back. Side by side, both photos zoom and pan together. - White balance preview (#49): scrubbing through the White Balance pop-up previews each choice on the photo, as the Profile menu already did.
- Spot Removal (#46):
- Zoomed in, you can drag to pan.
- Spots show resize handles when you hover over them.
- Each row has a delete button.
- New spots are the same size on screen at any zoom.
- Masking (#32): each mask's row has its own red delete button, replacing the one at the bottom of the panel.
- HDR with Previous Settings (⌃⇧H) (#51) merges the selection with your last HDR settings, skipping the preview sheet, like Panorama's ⌃⇧M. If the photos can't be merged (a JPEG in the mix, or different cameras), it says why up front.
Appearance
- Gray (#50): a fourth choice in Settings ▸ Appearance, after Aperture: mid-gray chrome, dark text and a black matte behind photos.
- Matte Color (#47) now goes back to the theme's default (10% in Light, 85% in Dark, black in Gray) whenever the appearance switches. The defaults are a little lighter in Light and a little darker in Dark than in 1.1.
- The right sidebar button (#48) no longer lights up with the accent color, matching the left.
- The filmstrip's header (folder, count, path, filters) now sits on the window's chrome, not the matte, in every appearance.
Import
- Sort direction (#37): a button beside the Sort pop-up flips between ascending and descending. It's remembered.
About window (#71)
About PixelLoupe shows just the version (Version 1.2.0). Hold ⌥⌘ when you choose it to see the build number along with the credits. The Welcome window still shows both.
Fixes
- Virtual copies (#56): a new virtual copy no longer shows up as an empty JPG that can't be opened, rated or removed. Removing only virtual copies no longer offers Delete from Disk.
- Third-party profiles (#35): a third-party profile chosen in the Profile menu, or applied by a preset, now stays applied. Before, it reverted when the menu closed. Photos imported from Lightroom with a third-party profile keep it too. Photos edited before 1.2 never saved the profile, so choose it again once.
- Masks (#32): moving or resizing a linear or radial mask, then touching one of its sliders, no longer snaps the mask back to where it started.
- Folders (#36): copying an import into a folder that's already in the catalog now nests the new folders inside it, instead of at the top level. Update Folder Location… also accepts the folder a moved folder now sits in, and moves it to the right place in the sidebar. To repair a folder that 1.1 put at the top level, use Update Folder Location… on it.
- Stacks (#61): clicking a stack's badge expands and collapses it again. This was broken for every stack.
- Merges (#51): with Create Stack on, the merged photo is now selected afterwards.
- Import window (#33): the All / New / Destination fi...
PixelLoupe 1.1
What and why
1.0 shipped without two things Lightroom Classic users depend on every day: editing while the originals' drive is unplugged, and a full import window. 1.1 adds both, along with the fixes that came out of testing them.
Smart Previews: keep editing with the originals offline (#10–#17, #26)
- Library ▸ Previews ▸ Build Smart Previews / Discard Smart Previews…, as in Lightroom. They build in the background, with progress under the grid.
- When a photo's original can't be read, PixelLoupe uses its Smart Preview in Develop (edits work as usual), the Library's enlarged view, full screen, slideshow, Compare, Survey and thumbnails. When the drive comes back, thumbnails are redrawn from the original.
- A status line under the histogram in Develop and the Library says which file you're looking at: Original, Original + Smart Preview, Smart Preview, or Original Missing.
- Export works from the Smart Preview when the original is missing, at up to 2,560 px. Afterwards a summary lists the photos it affected.
- Export this Folder as a Catalog ▸ Build / Include Smart Previews, so the exported catalog can be edited away from its originals.
- Import ▸ File Handling ▸ Build Smart Previews.
- Smart Previews are 2,560 px on the long edge:
- camera RAW files become a Linear DNG with JPEG XL tiles, so Temperature, Tint and highlight recovery still work;
- iPhone ProRAW and other linear DNGs become a downsized copy of the DNG that keeps its own tone curve and gain map;
- other photos become a HEIC.
Import workflow (#18–#25, #27)
The import window gets Lightroom's right-hand panel and more sources:
- File Handling: Don't Import Suspected Duplicates, Don't Import Rejected Images, Make a Second Copy, Add to Collection (new or existing), Build Smart Previews.
- File Renaming: six templates (Date - Filename, Filename, Shoot Name - Sequence, Custom Text - Sequence, Custom Text - Filename, Date - Sequence), a start number, extension case, and a live example. Sidecars follow their photo's new name, and second copies keep the card's names.
- Apply During Import: a develop preset, a metadata preset and keywords.
- Metadata presets get Lightroom's preset editor: every field PixelLoupe can store, by section, each with its own checkbox. The import window and the Library's Metadata panel now share the same list.
- Import Presets in the footer: save, update, rename and delete. They're shared by every catalog.
- Destination: Organize By Original Folders, By Date or Into One Folder. Date Format applies when you organize By Date.
- iPhones, iPads and cameras over USB appear under Devices. Their photos are copied in, and Eject After Import works for them.
- Progress: the window stays open but locked while importing, with a progress bar and Cancel. The Library switches to Previous Import at once and fills as photos land. Afterwards you get a summary pill, or a sheet listing any failures.
- Ratings come in: a file's own star rating, and a Rejected rating as the Rejected flag, are imported with it.
About window (#28)
PixelLoupe ▸ About PixelLoupe now looks like the Welcome window, with the credits where the Welcome window has its buttons. Try opening it while holding ⌥⌘.
Fixes
- Importing from an iPhone no longer crashes, either when the first file finishes downloading or when a connected phone or camera sends a PTP event.
- An unlocked, trusted iPhone is read straight away, instead of always asking to be unlocked.
- A memory card in a reader is listed once under Devices, not twice.
- Ejecting the card the import window is showing now empties its grid.
- The destination's example path uses the photos' year, not today's.
- In the import grid:
- Shift-clicking a checkbox gives the whole range the state of the last box clicked;
- checking one of several selected photos checks them all.
- Settings ▸ Import ▸ "Treat JPEG files next to RAW files as separate photos" can be turned off again.
- Metadata presets saved in the import window and the Library's Metadata panel no longer overwrite each other. They had shared one preferences key in different formats.
- Exporting to "Same folder as original" for a photo on a disconnected drive now fails with a message. It no longer creates the folder under
/Volumeson the startup disk. - Reading a file's size and date no longer reads its extended attributes. That read could stall for minutes in the missing-files check, relinking and Lightroom import.
- "RAW" is capitalized throughout the interface.
How it works
- Smart Previews
- Storage: they live in
Catalog.pixelloupe/Smart Previews/<photo UUID>.dng(or.heic). The folder is the record of which photos have one, so there's no Core Data change. Virtual copies share their master's. - Building:
SmartPreviewBuilderwrites one photo at a time at.utilitypriority and starts and stops with the catalog window. Six seconds after a catalog opens, it rebuilds any whose original has changed. - Rendering:
DevelopSource.opentries the original first and falls back to the Smart Preview. The Smart Preview reports the original's size, so crops, export sizes and zoom ratios stay right. - JPEG XL: encoding uses libjxl v0.12.0, bundled as a static XCFramework (
Packages/JXLEncoder, built byScripts/build-libjxl.sh). It adds 2.8 MB to the app. - White balance: for camera RAW files, a brightness correction is measured once per camera model, on that model's first Smart Preview. It's stored with the catalog and inside each Smart Preview. It fixes the up-to-1-stop brightness error that appears when Temperature is moved far from As Shot.
- Storage: they live in
- Import
- Choices:
ImportExtrascarries them intoImportService. Every photo in one import shares animportIDand an import date. - Remembered settings: choices are remembered per catalog and decoded field by field, so settings saved by older builds still load. Import presets live in preferences.
- Devices: found with ImageCaptureCore (
ImportDevices,CameraImportDevice). Their files are downloaded to a temporary folder, then imported as ordinary copies. - Metadata presets: one
MetadataPresettype under a new preferences key,MetadataPresetList. It's migrated from the oldMetadataPresetskey, which is left in place. - History: #18–#27 were ported from twlatl/PixelLoupe-archive (#71–#89) after
mainwas restarted. They're cherry-picked with-xand renamed from LightLoupe to PixelLoupe, and each PR lists its adaptations.
- Choices:
- About:
AboutWindowControllerreuses the Welcome window's frame, icon and version label, and showsCredits.html. Opened with ⌥⌘, it swaps in the secret photo and rolls the credits from aCADisplayLink, at 2× speed while ⌥⌘ stay held.
Decisions and trade-offs
- When Smart Previews are used: only when the original can't be read. There's no "prefer Smart Previews" option, since they're for editing away from the originals, not for speed. Develop at 100% looks soft on a Smart Preview.
- Exports from Smart Previews are capped at 2,560 px rather than refused. The summary names the photos.
- Photos that get no Smart Preview yet: videos; DNGs with opcode lists or black-level deltas; DNGs whose tiles are already JPEG XL or lossy JPEG. These are RAW-85 follow-ups.
- No "Has Smart Preview" Library filter. It would need a new Core Data model version, so it's a follow-up.
- What a Smart Preview can't do:
- the RAW engine can't reduce noise on one, so Core Image's noise reduction stands in;
- the built-in lens profile is either baked in or not, and the Lens panel says so.
- The white-balance correction was measured only on Sony (ILCE-7CR) files.
- Add isn't offered for cards and devices, only copy, as in Lightroom.
- Keywords aren't remembered or saved in import presets, since they're usually for one shoot.
- Discard Smart Previews… asks first and can't be undone, as in Lightroom.
- A locked iPhone shows the unlock message after 3 s, and is read again as soon as it unlocks.
- Not in the README's shortcut table: the ⌥⌘ About easter egg. This is still an open question.
- Compatibility with 1.0:
- catalogs gain a
Smart Previewsfolder, which 1.0 ignores; - metadata presets move to a new key, so 1.0 still finds its old presets but not ones made in 1.1;
- the app is 2.8 MB bigger.
- catalogs gain a
How tested
- The full test suite passes, with no build warnings. That's 956 unit tests in 184 suites, run with warnings as errors on a tree identical to the
release/1.1tip (f6ab82b). The UI test target wasn't run, and CI hasn't run on any of these PRs, becauseci.ymlonly runs formain. - Tests added for new behavior:
JXLTileEncoderTests,SmartPreviewWriterTests,SmartPreviewCopyTests,SmartPreviewStoreTests,SmartPreviewSourceTests,SmartPreviewWhiteBalanceTests,SmartPreviewExportTests,ImportOptionsTests,ImportRenamingTests,ImportPresetTests,ImportProgressTests,ImportDeviceTests,ImportSmartPreviewTests,MetadataPresetTestsandAboutWindowTests, plus updates to existing suites. - README updated for any new shortcut or user-facing behavior: Smart Previews, File Handling, File Renaming, Import Presets, devices, Previous Import and metadata presets. There are no new keyboard shortcuts; the Smart Preview commands have none, as in Lightroom. The exception is the About easter egg, which isn't listed (see above).
Checked against real files and hardware along the way:
- Smart Preview accuracy: a Sony ARW's Smart Preview renders within mean ΔE00 2.94 of the original, and an iPhone ProRAW's within 2.03 (measured before a later speed rewrite).
- White-balance correction: at 3000 K, error dropped from ΔE00 12.6–14.6 to 2.8–4.6 across five Sony frames.
- Slider speed: on a 61 MP ARW in Develop, each slider step took 2–3 ms on the Smart Prev...
Welcome to PixelLoupe
For the working photographer who lives and breathes the craft, your muscle memory is sacred. You’ve spent years building your Lightroom Classic catalogs and perfecting your presets—and now, you don't have to leave any of it behind. Welcome to PixelLoupe.
- Seamless Migration: Bring your Lightroom Catalogs and Presets over instantly.
- Familiar Library Module: Import and cull at lightning speed using the exact rating, flag, and label shortcuts you already know by heart.
- Next-Level Develop Module: Experience full feature parity with LR, supercharged by Apple's Camera Raw, Core Image, and blazing-fast Metal GPU acceleration.
- The Loupe: Fall in love with your photos all over again with a Loupe that channels the very best of Aperture.
- Everything You Need: Watermarks, Export, Dual Monitor Support, Lens Profiles, Adobe Profile & Preset support, Clone/Heal, and Linear/Radial Masks.
- Photo Merge - HDR and Panorama.
- Watermarks
- Export parity with LR
- Dual Monitor Support
PixelLoupe 1.0-RC02
What's Changed
- RAW-100: Community files, issue templates and GitHub Issues intake by @twlatl in #1
- RAW-101: Build and test every pull request with GitHub Actions by @twlatl in #2
- RAW-95: Photo Merge ▸ Panorama by @twlatl in #3
- RAW-108: Previous Import in the sidebar's Catalog section by @twlatl in #4
- RAW-109: Build, notarize and draft a release for each version tag by @twlatl in #5
Full Changelog: https://github.com/twlatl/PixelLoupe/commits/v1.0-RC02