Nikon Coolscan IV ED
Nikon Coolscan IV ED.
- Model: LS-40 ED
- 35 mm film, positive or negative, color and monochrome
- optical resolution: max 2900 pixels per inch
- scan range
- in MA-20: 2870 x 4203 pixels
- in FH-3 : 2870 x 4203 pixels
- in SA-21: 2870 x 4332 pixels
- effective aperture
- in MA-20: 25.1 x 36.8 mm
- in FH-3 : 24.0 x 36.0 mm
- in SA-21: 23.3 x 36.0 mm
- effective scan range
- in MA-20: 2870 x 4203 pixels
- in FH-3 : 2736 x 4104 pixels
- in SA-21: 2657 x 4104 pixels
- light source: Red, green and blue (RGB) LEDs
- sensor: 2870-pixel linear CCD image sensor
- ADC: 12 bits per color (RGB)
- Output: full color (8 or 16 bits per color [RGB])
- focus: autofocus, manual
- interface: USB 1.1
- power supply: AC 100 - 240 V, 50 - 60 Hz
- power consumption: idle 10 W max, scanning 20 W max
operating range
- temperature: +10 - + 35 degrees Celsius
- humdity 20 - 60 %
adapters
- MA-20 slide mount adapter
- SA-21 strip film adapter
- FH-3 strip film holder
back to scanners page.
Links
Gleb Schtengel Service and Repair of Nikon Coolscan Scanners, VueScan, coolscanpy, digital fauxice, NegPy, Nikon Coolscan modification project, coolirr, Helmut Stöpfgeshoff modify SA-21 to SA-30 (only for Super Coolscan 4000 / 5000 ED), Coolscan PSU Replacement, nikon-coolscan-kiosk,
local links
c2,
History
2026-07-24: VueScan (trial) on a Mac works better, it produces good and consistent results- But after a while, it stop the color wheel and stops responding.
2026-07-24: c2 - scanimage produces inconsistent results. When I run with the same options, I very often get back a picture that looks like the --negative=yes option wasn't specified.
tingo@kg-core2:~/work/coolscan/2026/0724_testing $ scanimage -d coolscan3:usb:libusb:001:008 --format=png --negative=yes --frame 2 > f2_1.png tingo@kg-core2:~/work/coolscan/2026/0724_testing $ scanimage -d coolscan3:usb:libusb:001:008 --format=png --negative=yes --frame 3 > f3_1.png tingo@kg-core2:~/work/coolscan/2026/0724_testing $ scanimage -d coolscan3:usb:libusb:001:008 --format=png --negative=yes --frame 4 > f4_1.png tingo@kg-core2:~/work/coolscan/2026/0724_testing $ scanimage -d coolscan3:usb:libusb:001:008 --format=jpeg --negative=yes --frame 1 > f1_1.jpg tingo@kg-core2:~/work/coolscan/2026/0724_testing $ scanimage -d coolscan3:usb:libusb:001:008 --eject
I don'y know why.
2026-07-24: c2 - now when I run scanimage with the help option
tingo@kg-core2:~ $ scanimage --help -d coolscan3:usb:libusb:001:008 Usage: scanimage [OPTION]... Start image acquisition on a scanner device and write image data to standard output. Parameters are separated by a blank from single-character options (e.g. -d epson) and by a "=" from multi-character options (e.g. --device-name=epson). -d, --device-name=DEVICE use a given scanner device (e.g. hp:/dev/scanner) --format=pnm|tiff|png|jpeg|pdf file format of output file -i, --icc-profile=PROFILE include this ICC profile into TIFF file -L, --list-devices show available scanner devices -f, --formatted-device-list=FORMAT similar to -L, but the FORMAT of the output can be specified: %d (device name), %v (vendor), %m (model), %t (type), %i (index number), and %n (newline) -b, --batch[=FORMAT] working in batch mode, FORMAT is `out%d.pnm' `out%d.tif' `out%d.png' or `out%d.jpg' by default depending on --format This option is incompatible with --output-file. --batch-start=# page number to start naming files with --batch-count=# how many pages to scan in batch mode --batch-increment=# increase page number in filename by # --batch-double increment page number by two, same as --batch-increment=2 --batch-print print image filenames to stdout --batch-prompt ask for pressing a key before scanning a page --accept-md5-only only accept authorization requests using md5 -p, --progress print progress messages -o, --output-file=PATH save output to the given file instead of stdout. This option is incompatible with --batch. -n, --dont-scan only set options, don't actually scan -T, --test test backend thoroughly -A, --all-options list all available backend options -h, --help display this help message and exit -v, --verbose give even more status messages -B, --buffer-size=# change input buffer size (in kB, default 32) -V, --version print version information Output format is not set, using pnm as a default. Options specific to device `coolscan3:usb:libusb:001:008': --preview[=(yes|no)] [no] [advanced] Preview mode --negative[=(yes|no)] [no] Negative film: make scanner invert colors --infrared[=(yes|no)] [inactive] Read infrared channel in addition to scan colors --samples-per-scan 1..16 (in steps of 1) [inactive] Number of samples per scan --depth 8|12 [8] Number of bits output by scanner for each channel --exposure 0..10 (in steps of 0.0999908) [1] Exposure multiplier for all channels --red-exposure 50..20000us (in steps of 10) [1200] Exposure time for red channel --green-exposure 50..20000us (in steps of 10) [1200] Exposure time for green channel --blue-exposure 50..20000us (in steps of 10) [1000] Exposure time for blue channel --ae[=(yes|no)] [no] Perform auto-exposure before scan --ae-wb[=(yes|no)] [no] Perform auto-exposure with white balance before scan --red-gamma-table 0..4095,... (in steps of 1) LUT for red channel --green-gamma-table 0..4095,... (in steps of 1) LUT for green channel --blue-gamma-table 0..4095,... (in steps of 1) LUT for blue channel --resolution 2900|1450|966|725|580|483|414|362|322|290|263|241|223|207|193|181|170|161|152|145|138|131|126|120|116|111|107|103|100|96|93|90dpi [2900] Scanning resolution in dpi, affecting both x and y directions --x-resolution 2900|1450|966|725|580|483|414|362|322|290|263|241|223|207|193|181|170|161|152|145|138|131|126|120|116|111|107|103|100|96|93|90dpi [inactive] Scanning resolution in dpi, affecting x direction only --y-resolution 2900|1450|966|725|580|483|414|362|322|290|263|241|223|207|193|181|170|161|152|145|138|131|126|120|116|111|107|103|100|96|93|90dpi [inactive] Scanning resolution in dpi, affecting y direction only --independent-res[=(yes|no)] [inactive] Enable independent controls for scanning resolution in x and y direction --preview-resolution 2900|1450|966|725|580|483|414|362|322|290|263|241|223|207|193|181|170|161|152|145|138|131|126|120|116|111|107|103|100|96|93|90dpi [290] [advanced] Scanning resolution for preview mode in dpi, affecting both x and y directions --frame 1..0 (in steps of 1) [inactive] Number of frame to be scanned, starting with 1 --frame-count 1..1 (in steps of 1) [inactive] Amount of frames to scan --subframe 0..37.9336mm [0] Fine position within the selected frame -l 0..2869pel (in steps of 1) [0] Left x value of scan area -x 0..2869pel (in steps of 1) [2869] Width of scan-area. -t 0..4331pel (in steps of 1) [0] Top y value of scan area -y 0..4331pel (in steps of 1) [4331] Height of scan-area. --load Load next slide --autoload[=(yes|no)] [no] Autoload slide before each scan --eject Eject loaded medium --reset Initialize scanner --focus-on-centre[=(yes|no)] [yes] Use centre of scan area as AF point instead of manual AF point selection --focus 0..323 (in steps of 1) [0] Focus position for manual focus --autofocus[=(yes|no)] [no] Perform autofocus before scan --focusx 0..2869pel (in steps of 1) [inactive] X coordinate of AF point --focusy 0..4331pel (in steps of 1) [inactive] Y coordinate of AF point Type ``scanimage --help -d DEVICE'' to get list of all options for DEVICE. List of available devices:
2026-07-24: I inserted the SA-21 strip film adapter, the LED on the scanner blinked a few times, then went steady.
2026-07-24: c2 - create a devd file for it
root@kg-core2:~ # cat /usr/local/etc/devd/nikoncoolscaniv.conf # allow non root users access to the Nikon Coolscan IV film scanner # notify 100 { match "system" "USB"; match "subsystem" "DEVICE"; match "type" "ATTACH"; match "vendor" "0x04b0"; match "product" "0x4000"; # Please change the group name to suit your own needs. action "chgrp operator /dev/$cdev && chmod 660 /dev/$cdev"; };
restart devd, unplug and replug the scanner, and now scanimage works as a normal user too
tingo@kg-core2:~ $ scanimage -L device `coolscan3:usb:libusb:001:008' is a Nikon LS-40 ED film scanner
2026-07-24: c2 - scanimage -L reports
root@kg-core2:~ # scanimage -L device `coolscan3:usb:libusb:001:008' is a Nikon LS-40 ED film scanner
2026-07-24: testing - I powered on the LS-40 ED, it blinked with the power LED and made som noise, before the power LED is steady on. I connected the usb cable to my c2 workstation. usbconfig reports
root@kg-core2:~ # usbconfig -d ugen1.8 ugen1.8: <Coolscan LS 40 ED Nikon Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (0mA)
device description
root@kg-core2:~ # usbconfig -d ugen1.8 dump_device_desc ugen1.8: <Coolscan LS 40 ED Nikon Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (0mA) bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0110 bDeviceClass = 0x00ff <Vendor specific> bDeviceSubClass = 0x00ff bDeviceProtocol = 0x00ff bMaxPacketSize0 = 0x0008 idVendor = 0x04b0 idProduct = 0x4000 bcdDevice = 0x0110 iManufacturer = 0x0001 <Nikon> iProduct = 0x0002 <LS-40 ED> iSerialNumber = 0x0003 <16777215> bNumConfigurations = 0x0001
current config descriptor
root@kg-core2:~ # usbconfig -d ugen1.8 dump_curr_config_desc ugen1.8: <Coolscan LS 40 ED Nikon Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (0mA) Configuration index 0 bLength = 0x0009 bDescriptorType = 0x0002 wTotalLength = 0x0027 bNumInterfaces = 0x0001 bConfigurationValue = 0x0001 iConfiguration = 0x0000 <no string> bmAttributes = 0x00c0 bMaxPower = 0x0000 Interface 0 bLength = 0x0009 bDescriptorType = 0x0004 bInterfaceNumber = 0x0000 bAlternateSetting = 0x0000 bNumEndpoints = 0x0003 bInterfaceClass = 0x00ff <Vendor specific> bInterfaceSubClass = 0x00ff bInterfaceProtocol = 0x00ff iInterface = 0x0000 <no string> Endpoint 0 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0001 <OUT> bmAttributes = 0x0002 <BULK> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000 Endpoint 1 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0082 <IN> bmAttributes = 0x0002 <BULK> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000 Endpoint 2 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0083 <IN> bmAttributes = 0x0003 <INTERRUPT> wMaxPacketSize = 0x0008 bInterval = 0x00c8 bRefresh = 0x0000 bSynchAddress = 0x0000
2026-07-23: coolscan-mods modifies the firmware on LS-40 and LS-50 to support using SA-30 and SF-210 adapters.
2026-07-23: VueScan supports the Coolscan IV ED on Linux and macOS (and Windows).
2026-07-23: I bought a used Nikon Coolscan IV ED on FINN.no for NOK 4000.-
2026-07-23: I created this page.