macOS 14.1+ Apple Silicon Sony mirrorless $99 · one-time

Your inversion is decided
before the shutter fires.

Loupe is a macOS tethering app built for one job: camera-scanning film. It measures in RAW where the film base clips under the light and the camera you actually have — then tells you the exposure that negative deserves. By the time you fire the shutter on frame one, the exposure is already decided.

EXPOSURE ✓ CAL
RAW −0.18 EV @calib
FOCUS 97 · AT PEAK
LIVE VIEW ISO 100 · 1/125 · f/6.3 · RAW
[ ASSET: main-window.png — 3-pane UI: capture rail / live view + heatmap / inspector · ≥2000px wide ]

Why your scans stop short of the negative

Convert a camera-scanned roll in Negative Lab Pro and the frames refuse to match: one lands, the next drifts warm, the one after is muddy in the shadows. Or they do match — and every one of them comes out thin in colour, with shadows that were grainy before you touched them. Chasing the conversion settings fixes neither. The cause sits in the scan exposure, not in what you apply afterwards. And it isn’t a matter of skill or care: it follows from how a sensor works and how a histogram is built. Here is the chain, in four steps:

01

Your sensor gets more accurate the brighter you expose

A digital sensor counts photons, and the precision of that count only improves with the square root of how many it collects. Expose a stop darker and you gather half the photons, so your signal-to-noise ratio comes out about 1.4× worse. The tonal levels in a 14-bit RAW lean the same way: half of the 16,384 live in the single brightest stop. But what decides the result is the photon count, not the level count. So scanning a stop below the optimum doesn’t cost “a little quality” — you pay that same penalty on every frame of the roll.

02

Film scanning has one right exposure

The physics above points one way: scan exposure is best pushed right up to the clip point. In ordinary photography the brightest thing in the frame changes with every shot, so aiming for “just short of clipping” remains a guess. On a copy stand it doesn’t: nothing on a negative transmits more light than its unexposed base. One exactly-right exposure exists — base, just short of clipping — and it is decided once for the whole roll instead of frame by frame. But that exposure moves a long way between stocks: a B&W base and a color negative’s orange mask pass very different amounts of light per channel, and even which channel clips first can swap. It moves again with your light source. Where it sits today is something you can only find by measuring.

03

And no histogram can show you where it is

Every histogram you can check before the shutter fires — the camera’s LCD, your tethering app’s live view — is drawn not from raw sensor data but from a JPEG preview whose brightness has been remapped for display. That remapping puts its right edge well below the sensor’s true clip point. The figure usually quoted for α1-class bodies is around 0.7 EV, and it moves with the body, the picture profile and the channel, so there is no constant to memorise. Stop at “just below clipping” on the JPEG and you donate the richest part of your sensor’s range. Push past it and you’re clipping blind.

04

So it costs you one of two ways

Shoot on auto-exposure and the camera re-meters every frame’s density, so the exposure wanders from frame to frame. Lock it manually and that doesn’t help if the one value you locked came from reading the histogram: you then shoot the whole roll off the mark. The first shows up as colour shifting between frames. The second shows up evenly across all of them — thinner colour, less dynamic range to work with. Either way, you see it when you convert.

If chasing the conversion never quite gets you there,
change the scan exposure.

Same rig. Same film. Same NLP settings.

The only difference is the capture. Inversion stays with Negative Lab Pro or Lightroom; what Loupe decides is two things — the scan exposure and the focus. Drag the handle.

[ ASSET: nlp-camera-auto.jpg — NLP inversion of a frame shot on camera auto-exposure ]
[ ASSET: nlp-metered-by-loupe.jpg — same frame, Loupe’s measured exposure, same NLP settings ]
CAMERA AUTO-EXPOSURE METERED BY LOUPE
Exposure — after inversion: color balance and noise, same NLP settings synced across the roll
[ ASSET: crop-peaking-only.jpg — 100% grain crop, focused by camera peaking ]
[ ASSET: crop-loupe-score.jpg — same frame, focus chased to score peak ]
CAMERA PEAKING SCORE · AT PEAK
Focus — 100% crop: grain resolved at the peak of Loupe’s focus score vs. “peaking said it was fine”
01 — THE CALIBRATION INSTRUMENT

Your camera’s histogram won’t show you the clip point. Loupe measures the gap.

Once per roll, Loupe calibrates. You drag a box over the unexposed film base in the live view — on a lab-cut sleeve, the gap between frames is the usual choice. Loupe then steps your shutter speed through seven exposures at 1/3 EV and reads what’s inside that box in RAW, the sensor values before any JPEG is made. From that it fits where clipping really begins, and recommends the exposure that uses the headroom up to it.

  • EXPOSURE GAIN+0.3–0.55 EV, measured on your own rig. That is how much further you can push than a JPEG-safe exposure: the gap between the JPEG’s right edge and the point where RAW really clips runs around 0.7 EV, and Loupe keeps 0.15–0.4 EV of it back as a margin for the uncertainty in the boundary itself. Those extra photons lift signal-to-noise across the whole scan, and they count for most where the scan collects the fewest of them — the densest part of the negative.
  • PHYSICSWherever an image sits on a negative, it is denser than the unexposed base beside it — nothing on the strip passes more light than that base. Calibrate on base and, as long as the light, the settings and the film stay the same, no frame will clip. The exception is a scratch or a pinhole, where the emulsion is simply gone: that behaves like “no film” and it does clip. The post-capture check catches those. B&W included: it’s a negative too.
  • HONESTThe wizard grades its own data: shots whose readings don’t fit the sweep get flagged and excluded — dust, a light leak, a knock to the stand, the cause doesn’t matter — an uneven patch of base gets called out, and when the numbers can’t support a recommendation, it says so instead of guessing.
  • NO PRESETSThere are no film-stock presets, on purpose. All a preset holds is the light you had the day you saved it. Loupe re-measures your actual film on your actual light, every time.
[ ASSET: calibration-wizard.png — sweep review step, recommendation card visible ]
SWEEP 7 × 1/3 EV · BASE PEAKRAW headroom +0.42 EV
02 — THE EXPOSURE INSTRUMENT

Then the guessing stops.

With the baseline measured, Loupe no longer needs to trust the JPEG. From here the live verdict watches one thing: whether your camera settings have drifted from the measurement. Shutter speed, aperture, ISO and white balance are checked against the values recorded at calibration. What it can’t see is the light itself — dim your RGB channels and the camera reports nothing — so that job goes to the two rows below, the light guard and the post-capture RAW check.

  • THE VERDICTCAL ✓ for as long as your settings match what was measured. The moment they don’t, you get the deviation in EV, with a sign. When that deviation eats into the margin, it becomes CLIP RISK. The whole judgment comes from comparing your settings against the measurement, so a saturated preview can’t corrupt it.
  • LIGHT DRIFTAn LED panel’s output wobbles with its temperature, and the longer you leave it the further it wanders: about 0.1 EV within minutes, on the order of 0.3 EV across a day. So Loupe compares each captured frame’s RAW against the base density recorded at calibration. When your settings still match but the reading stays more than 1/3 EV off, it reads that as the light having moved, and says so. A one-off won’t trigger it. Line the base up in the same box, take one frame, and you know whether your light is back where it was.
  • UNCALIBRATEDYou still get a verdict without calibrating — it just works off the same JPEG your camera’s histogram does, so it stays deliberately conservative. The brightest channel of the live-view JPEG is held to 92–97% of full scale, and the four calls are Under / OK / Over / Clip. Clipping is counted in pixels rather than percentages: 5 for a warning, 50 to call it Clip, judged over the last second rather than on any single frame.
  • HISTOGRAMYou can leave the histogram up the whole time. It’s per-channel, drawn across 1024 levels, and smoothed over the last second so it doesn’t twitch. The screen also says, in as many words, that it’s a JPEG histogram. Every number Loupe shows you comes with where it came from — measured, or derived from a measurement.
  • AFTER CAPTUREEvery captured frame gets its RAW checked in the background. A quiet ⚠ appears on the one thumbnail that clipped. Nothing appears on the ones that didn’t.
[ ASSET: exposure-check.png — Exposure Check tile + histogram detail, verdict visible ]
R 0 · G 3 · B 0 px✓ CAL · −0.18 EV RAW
03 — THE FOCUS INSTRUMENT

Peaking shows the slope. Loupe finds the summit.

Your camera already has peaking, and it tells you an edge is lit. What it can’t tell you is whether this is the sharpest that edge will get, or whether another half-turn of the rail does better. That’s the part that decides a scan. So Loupe scores the same frame it lights up: turn the rail, watch the number climb, and stop where it stops climbing. “Probably here” becomes “this is the maximum”.

  • PEAKINGSensitivity is a continuous slider, not three coarse steps — you can push it until the edges only just begin to light. Opacity is yours too. The colour is yellow, red, white, cyan or automatic, and on automatic it tracks the frame, moving to whatever stands out against it, so the lit edges never sink into an orange mask or a dense B&W base. All of it on the Mac display, at a size where grain is actually legible.
  • SCORE 0–100Laplacian variance over Sobel energy — invariant to brightness, so a dense frame doesn’t score low just for being dark. Auto-calibrates on the frame in front of it, then locks the scale. The number is relative to that frame: it tells you whether you’re climbing or plateaued, not how one frame compares to another.
  • VERDICTAT PEAK / NEAR / SEARCHING, with peak-hold — you always know the best score this position has seen.
  • MAGNIFIERDrive the camera’s own ×4.2 / ×8.5 focus magnifier from your keyboard — M to cycle, arrows to pan. Hands stay on the focus rail.
  • HEATMAPWhen you want to see how sharpness is distributed rather than where the edges are, switch the overlay to the heatmap: 48, 192 or 768 zones across the frame. Film bowing out of the holder shows up as a cold corner — before you shoot the roll, not after.
  • AUTO ROILoupe detects the film frame on its own and scores only what’s inside it — validated on 134 real scans, 133 detected at high confidence. When it misses, it tells you it missed, and you place the box by hand.
[ ASSET: focus-peaking.png — live view with peaking overlay + focus tile showing the score ]
PEAK HOLD — SCORE — CALIBRATING

“Is that the most the negative had?”

You’ve scanned this way for years and your scans look fine. That much is true. Whether they’re the most those negatives had to give is a separate question — the shadow grain you stopped noticing, the per-channel clipping you never saw, the half-stop of headroom you left behind every time. Loupe doesn’t say your scans are bad. It shows you, in numbers, how much more the same negatives will give.

Loupe
Generic tethering
Built for
Film scanning
Portrait sessions
Exposure judgment
RAW-measured verdict + signed EV deviation
A JPEG histogram; read it yourself
Focus
Live 0–100 score + 192-zone map
Your own eyes
After capture
Automatic per-frame RAW clip check
Open each file and look
When another app grabs the camera
Names the app holding it, recovers in ~0.5 s
Unplug, replug, see what happens

Measured: recovery from a Lightroom Classic-held USB connection in 535 ms (was a 285-second hang before we fixed it); a normal connect in 440 ms. Teardown on quit: 47 ms — quit with ⌘Q and your camera never stays stuck in PC-remote. Force-quit skips teardown, and then you do need to replug.

General-purpose tethering apps are excellent at what they’re for. What they’re for just isn’t film scanning.

Four things change on your first roll

①

Conversions land on the first try

The conversion you settle on one frame carries over to the rest, because the exposure NLP sees is the same across the roll. The frame-by-frame re-grading goes away.

②

You stop thinking about exposure

Calibrate, match the verdict, shoot. You decide the scan exposure once per roll instead of 36 times.

③

Rolls match across weeks

Scan half a roll today and the rest next month — calibration puts both sessions on the same measured baseline.

④

You scan faster

No chimping, no reshoots, no “was that clipped?” pauses. The rail badge tells you if anything needs a second look.

One-time. Like your film gear.

$99one-time purchase

Camera, macro lens, stand, light. You can assemble all of it and still lose the difference the moment you convert, because the scan exposure missed the mark. The $99 is for closing that gap.

  • ✓7-day full trial — email + 6-digit code, no credit card
  • ✓30-day money-back guarantee, no questions asked — once per customer
  • ✓All future updates included — no upgrade fees
  • ✓Works offline for 30 days between checks — a session never stops for a license
  • ✓Developer ID signed & notarized by Apple · direct download

— or: less than lab-scanning ten rolls.

Questions

Which cameras work?

Loupe drives Sony mirrorless bodies through the official Sony Camera Remote SDK. Every feature is verified in-house on the α1. Other bodies on Sony’s supported-model list are expected to work, but we won’t say “guaranteed” about hardware we haven’t run ourselves — which is exactly why there’s a 7-day trial to check your own rig before paying.

Does it run on Intel Macs?

No. The per-frame analysis — focus scoring, histograms, overlays — runs on the GPU (Metal) every frame, so Loupe requires Apple Silicon (M1 or later) and macOS 14.1+.

How does the trial work?

Enter your email, type the 6-digit code we send you, and you have every feature for 7 days. No credit card. One trial per Mac and email address.

Does it invert negatives?

No — by design. Loupe’s whole job is capturing the best possible negative. Inversion and color belong to the tools that do them best: Negative Lab Pro, Lightroom, whatever you already use. Loupe makes their input consistent.

What about slides and B&W?

B&W is a negative — fully covered, calibration and all. Slides invert the physics: on reversal film the unexposed area develops to maximum density, so there is no surface that’s reliably the brightest thing in every frame. The brightest thing is a scene highlight that changes shot to shot, which puts you back in ordinary-photography guesswork. So in positive mode the exposure verdict drops from a calibrated call to an estimate, and the shadow zebra switches itself off (check your results frame by frame). The focus score, the zone map and the post-capture RAW check all work as usual. We’d rather tell you that here than let you find out later.

Why isn’t it on the App Store?

Loupe is sold directly from this site, via Stripe. Builds are Developer ID signed and notarized by Apple — macOS verifies every copy before it runs.

I bought during my trial — it still says trial?

Your purchase is registered immediately; the app’s label switches over automatically when the trial period ends. Want it to say “licensed” right now? Sign out and back in once.

How does the refund work?

Write to us within 30 days of purchase and you get the full price back. We won’t ask why. Two things worth knowing: the refund releases the licence, so Loupe stops opening on your Mac, and the guarantee is good for one refund per customer. The 7-day trial is there so you can settle the question before paying at all.

Does it support Pixel Shift Multi Shooting?

No. Pixel Shift Multi Shooting fires the shutter once, but the camera sends back several RAW files for that one press. Loupe only recognizes the first file as that frame — the rest land in your save folder without a frame number. There’s no way to composite them into one frame over the remote SDK, so leave Pixel Shift Multi Shooting off and shoot single frames.

Measure first, then shoot — the same settings for all 36 frames.

You solve the scan exposure once per roll, not once per frame.

Developer ID signed · Notarized by Apple · Stripe checkout · 30-day money-back