Getting Nikon Coolscan 5000 RGB+IR scans into NegPy, with aligned frame previews and dust removal #472
Replies: 3 comments 5 replies
-
|
Measurements behind the opening post: Practical-parity captureThe frame 03 baseline used 4000 dpi, 16-bit RGB 4x with IR off followed by Three later positions used the same sequence with preview-derived geometry:
The fixed-geometry negative controls used 6.35 mm and The detector evaluates the central 90 percent of sampled columns. A candidate NegPy and PhotoshopFor the dust montage, both repairs used the same crop and starting
NegPy used its local IR-guided repair. In Photoshop, I put the mask in a The amplified difference also includes small TIFF and color-profile Nikon registrationThe Nikon Scan TIFF is a separate capture. SIFT matching and full affine The Nikon TIFF reports:
Links
The backend currently uses a 38.106 mm frame-pitch constant. I have a local I am also leaving out the experimental per-pass READ patch. Later tests did |
Beta Was this translation helpful? Give feedback.
-
|
nice,I see on screenshots it plays well with inpainting improvements I pushed today |
Beta Was this translation helpful? Give feedback.
-
I'm just bidding on that...
|
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
-
I've been working on direct NegPy capture from a Nikon Super Coolscan 5000 ED.
SANE lists this model as untested in
coolscan3, and the stock backend did notexpose a usable infrared scan on my LS-5000 ED with firmware 1.03.
My feeder started as an SA-21 and has the solderless SA-30 conversion. The
scanner reports 40 addressable positions, which is transport capacity. The
roll was sold as a 24-exposure roll, so I initially registered positions 1
through 24. I later matched those previews against an earlier sweep and found
image content at positions 25 through 27. Nominal roll length was not enough
to count the content-bearing positions, so automatic preview census is still
missing.
My local NegPy/SANE capture path works at 4000 dpi and 16-bit. NegPy first
captures RGB at 4x with infrared off, then captures RGBI at 1x through the same
SANE device open without moving the frame. It registers the 1x capture's IR
plane to the 4x RGB and writes an RGB TIFF plus an IR sidecar as one paired
commit.
Synchronous failures roll both files back; like any two-file scheme, this is
not power-loss atomic.
I also made a reference export with Nikon Scan 4.0.3 W in a Windows VM. That
file is only a Digital ICE reference. Nikon Scan is not part of the open
capture path.
The six-pane crop shows the open RGB capture, IR defect signal, NegPy repair,
Photoshop Content-Aware Fill from the same starting mask, Nikon Digital ICE
from a separate scan, and an amplified NegPy versus Photoshop difference. The
montage uses an earlier 1x RGBI capture. I captured the final 4x RGB plus 1x
RGBI validation master later from the same frame.
What works on this scanner
sanedat 1000 and 4000 dpibroad black strip or stopped-transport tail
I checked 24 aligned previews from positions 1 through 24. This was not a
complete exposure census: positions 25 through 27 still need current
registered previews. I then ran the full capture sequence on frames 03, 07,
14, and 16. Each frame used one SANE open and kept the same transport geometry
for both internal captures.
Frame 03's RGB capture was 3946 x 5004 before registration. The common-overlap
crop produced a 3946 x 5003 RGB and IR pair. The later registered pairs were
3945 x 5022, 3945 x 5039, and 3945 x 5049 after the same overlap step. These
dimensions are width x height. The other 20 positions in the registered set
from 1 through 24 have previews only. Positions 25 through 27 have historical
1x scans but no current registration, so this is not a full-resolution
validation or a complete preview census of the entire roll.
The first full scans of frames 07, 14, and 16 exposed another failure mode.
They reused frame 03's geometry and looked close at a glance, but the detector
found stopped-transport suffixes of 78, 254, and 304 rows. Running the same
frames with their own preview registration reduced all three suffixes to zero
rows.
The public proof image uses only frames 07 and 16. The attached JSON records
all six fixed-geometry and corrected captures for frames 07, 14, and 16. It
contains source hashes, dimensions, geometry, RGB and IR alignment values,
the detector contract, suffix starts and lengths, and acceptance verdicts.
I am keeping the raw reports, source TIFFs, and 24-position contact sheet
private and will not upload them.
alignment-evidence.json
On this feeder, the tested frames needed their own preview-derived positions.
A fixed leader offset can drift as the film advances, and a window that extends
beyond usable travel can finish with repeated rows instead of an obvious read
error.
Upstream plan
The local NegPy work is too large for one useful review. I am splitting it into
focused PRs:
writing, and DPI metadata
The first NegPy PR is open as a draft. The SANE parameter-block fix has merged
into
master, and the LS-5000 RGBI and multisample work remains a draft MR:NegPy RGBI draft PR, SANE
parameter-block fix (merged),
and SANE LS-5000 RGBI and multisample draft MR.
The LS-5000 MR is rebased on the
mastercommit that includes !936 andcontains only its own RGBI and multisample changes. It remains a draft because
its first maintainer question is whether four interleaved samples should
continue to be reported under
SANE_FRAME_RGB, following the existingpieusbprecedent, or whether IR should be returned as a separate grayscaleframe. I opened the draft to collect maintainer feedback on that design
question.
Dust repair comparison
NegPy and Photoshop started with the same earlier 4000 dpi, 16-bit 1x RGBI
capture and the same IR mask. At 1:1, I found the finished crops hard to tell
apart, although Photoshop looked slightly more natural on a few larger
repairs.
The Nikon pane is a separate scan of the same frame with Nikon Scan 4.0.3 W,
MultiSample 4x, and Digital ICE Normal. Feature matching confirmed the scene,
but the capture, crop, color, and repair all differ, so I did not calculate a
Nikon pixel-error score.
A seeded synthetic test used a known clean image with 30 dust spots and two
hair scratches. Both methods substantially improved all 32 defects:
Photoshop had the lower error on this synthetic image. I have not run a blind
perceptual test.
These are workflow timings, not a pure algorithm benchmark. On an Apple M4
Mac mini, NegPy's in-process repair took 0.9 seconds for a 5730 x 3600, 16-bit
frame. The Photoshop script took 10.7 seconds with Photoshop open and 14.7
seconds from a cold start, including file I/O and app automation.
One warning about multisampling and IR
A single RGBI scan with multisampling is unsafe on this scanner. When I tested
that combination earlier, the scanner became unresponsive until I
power-cycled it. The SANE draft rejects it in either option order and again
before scan start.
The working path uses two captures in one SANE open: RGB Nx with IR off, then
RGBI 1x without moving the frame. The second capture's RGB channels register
its IR map to the multisampled RGB. The four 4000 dpi runs passed the capture,
alignment, TIFF, smear, and scanner-response checks.
Offline clipping telemetry found small, fragmented red-channel saturation in
frames 03 and 07. Green, blue, and IR did not clip at the high end, and no
channel clipped at the low end. I am treating the red values as a review
warning until I have a same-frame lower-exposure comparison, not as a silent
pass or a reason to discard the masters.
Nikon's TIFF reports
MultiSample 4xandDigital ICE, but it does not showwhether Nikon Scan sampled IR more than once or used multiple internal passes.
Here, practical parity means aligned 4000 dpi, 16-bit capture, autofocus,
auto-exposure, multisampled RGB, and a registered IR map. NegPy can then use
its own inversion, color controls, and deterministic IR-guided repair.
Hardware IR works with compatible color film, but not reliably with
IR-opaque media such as traditional silver black-and-white film or
Kodachrome.
I would be interested in results from an LS-50, another LS-5000 firmware
revision, or anyone familiar with SANE's preferred fourth-plane
Beta Was this translation helpful? Give feedback.
All reactions