Tag Archives: scanner

Time, Darkness and light.

From 2020 through about 2024 I spent massive amounts of time in an attempt to get the PCD Film Scanner 2000 to work. This included tangents of acquiring a number of APS cameras, and collecting other Kodak scanners such as the RFS 3070.

Much of the work before 2024 was writing complex postscript disassembly trace tools. This was consuming 8 to 10 hours a day and up to 80 or 90 hours a week. For months at a time. Not sustainable. I did get to the point where I was ready to connect the old SCSI devices through a modern bridge similar to the ra/piSCSI and the STM Blue SCSI variant.

Working with Pipe organ relays, also occupies a lot of time. I design maintain the electronics for a well known theater organ relay system called Uniflex.

A lot of time was also spent from the late 1990s on piano roll scanning. In 2022 I gave a lecture at the Global Piano Roll Symposium in Bern, Switzerland. It was at this point I realized my work following on from the late Warren Trachtman, was effectively a form of abstract AI. Not being an academic in need of a research grant, this has been a bit of a dead end, since everyone else is now on the AI bandwagon. The next stage is recovering MIDI events from recordings.

So that blog was not posted.

Probably do have enough projects to keep me busy for 500 years. Watchmaking being my other main interest, I tend to spend a lot of time on watch forums. OmegaForums being the brand I collect. Recently I have become active with vintage (pre 1985 or so) quartz watches. Visiting Switzerland, brought my watchmaking hobby back into the foreground.

The local Makerspace has a CO2 laser and a fiber laser. I have used this to experiment with watch parts. I also started working on APS support devices. All of which are worthy of blog postings. Which get started but never uploaded. I tend to share these results in the structured omegaForums threads.

Apart from watch parts Laser and 3D printed parts includes replicating an APS film slitter, that design was uploaded to the net, then deleted leaving only some archive links. The the public readable Facebook group actively rejects people that attempt to claim such devices, so there is no need to join a group that is someone’s vanity project and rejects technical information.

Slitting APS film will require processing and developing. Labs do not want to risk vintage equipment with home made film strips. So I also used the laser to start work on a small automated film processing lab. (shown upside down,) as testing the pumps and such even with water gets messy chasing leaks.

While I do not have the film slitter working, in 2022 I did use the APS cameras and the Stereo realist again on the 2022 Swiss trip. I wanted a picture of the Bern clock.

So the scanners have sat idle while I did the deep dive into APS. I am also the full time caretaker of elderly parents. One who passed away, a year and a half ago, after years of convalesces where I had to be available 24/7. I also got some non functioning Cannon digital cameras off eBay, which really only needed a factory reset. Another side tangent was repairing Apple smart watches found on Goodwill. Replacing cracked screens and batteries. Also took up model ship building.

Recently in the middle of 2026, searching the web has become difficult due to the number of AI ‘Agents’ which have replaced traditional search engines. Ironically work with image processing and postscript has made me aware that I have been working with AI concepts for nearly 50 years. Postscript is a stack based relational database. It parses abstract tokens into graphics and color vectors. The image rendering engine is at the heart of a GPU. The language can parse anything. I wrote color and jpeg test suites at apple for the laser printers.

Kodak did a scorched earth, with their digital technologies. It is pure luck that through readers of these blogs I was given what few crumbs survive. As noted in prior blogs, An image of a Mac OS 8.6 installation was zipped archived and all the resource data lost. I had pretty much recovered what can be recovered. There really was not much to add as the analysis had reached a dead end with finding the remaining disks contained Cineon calibration frames. This did prompt some visits by members of the Academy of Motion Picture, arts and Sciences, but Hollywood is broken, and they were laid off, but still working. Digital technologies have short product cycles. So a lot of data is as risk of being lost.

Some of the Kodak Diagnostics were recovered by tracing through the programs on vintage hardware and manually re-creating missing resources. My research folder covering cameras and scanners is over 18GB. Which is pretty much a scrape, of all the information online or shared with me. This also includes reference textbooks, what did attempt to justify Kodak’s unique look at color science. Some of what I learned at Apple in the 1990s. These were called ‘Average to gray.’ And “Don’t make it right, make it bright.” The resulting images, do look nice, which is why I want to recover this. Also to retain a consistency with my existent stereo realist scans and CD .dmgs.

What changed in the summer of 2026 was Claude.

I actually was researching a way of introducing AI through basics. My working title for this is “A child’s history of AI,” being a play on Dickens’ little known “A child’s history of England.” This came about when looking around the 2026 Maker Faire and not seeing any real practical basics. Stuff that S.T.E.A.M. and STEM students can learn from the way I did in the early days of home computing.

I have textbooks going back to the mid 1970s. It is amazing what the early researchers could do with 8K of memory and a Basic interpreter on a minicomputer that could invert matrices. They did point out that for interesting results one would need a terabyte or so to work with word frequencies, rather than letter frequencies. Sadly the creators that stole basic removed the matrix operations that made working with so called complex or imaginary numbers easy. With the mars mariner 9 images I did a deep dive into floating point and rounding errors. 2^32-1 is a somewhat small number in this era.

A one megabyte binary program stripped of resource (user interface screen data) Results in about 25 MB of tokens when parsed into traceable assembly. Kodak actually made this somewhat easy, as they left the mangled procedure names in the debug build. This made it clear that most of the program was written with popular libraries and coding systems of the time.

A reader of this blog shared the service manuals. Another reader shared the installation CD images for the PIW workstation. So by 2022 it could be seen that most of the information had survived. This data was shared archived in the cloud on Google drive.

So the first exploration was to point Claude, and Gemini at the Drive data. Google failed completely. Claude did better, neither could handle a 25MB file. Claude wanted it chunked into 800K chunks. It was able to read my tracing notes, but sessions were short and consumed all the tokens at once. Google claimed it could do more than it was trained, this data slammed it as soon as the token matrix was loaded.

I then switched to desktop and the minimal Claude subscription. I also tried Gemini, but it attempted to take over my laptop and install agents that run in the background launched at boot. Hijacking the launch shortcut function key. Gemini also could not access the local file on the drive, saying the data had to be in the cloud. I also learned about zero shots and attention transformers, which make abstract coding impossible.

Claude on the other hand got out of its sandbox. No AI has been trained on my way of writing postscript. The training focusing on postscript as page descriptions, not token vector matrices.

Claude managed to read the header invocations of the termcaps of the Postscript (Ghostscript) runs. It managed to run the interpreter with the safeties off. This not only exposes my entire drive to the agent, It also allows networking through printers, Postscript being a Turing complete language. It also includes matrix inversions, which can be paralyzed through the Quartz graphics renders. What are called shaders. It does not matter if the tokens are words WAV data (sound loops) Midi, desktop Icons or images, it is all tokens. Which is candy to an AI agent. PDF is just distilled Postscript. (I noticed that Apple removed the PS distiller normalizer from the Preview app in the name of security, CUPS however remains the main printer rendering engine. ColorSync a hole waiting for an exploit.)

What could have been a huge disaster turned out to be an advantage. While the agent’s core can only process a few tens or hundreds of thousands of tokens, It can grep and awk through gigabytes and terabytes of local data.

Removing the need to chunk the ps run results on something like google drive. The whole system was open for analysis. This also had the effect of reducing the session token usage to 12 or 28K. per prompt Most of the work being pure code translation.

The Sun workstation code was something I did not want to deal with. I looked at the pax and cpio, which was foreign world to me. Writing Power PC PEF tools in postscript took years of work. I did not want to delve into something that looked like and endless time sink.

Claude having found the disk images, could mount and read them. It was also able to determine that the Mac PIW and scanner driver library code was compiled from the same sources. That these also included mangled names. Agents love multiple data sources.

My collection only has the PCD 2000 and the RFS scanners. (A second RFS3070 showed up on eBay while I was working on this.) I did also add a couple broken Alaris Scanza scanners, which do not share the Kodak digital legacy, being cheap digital camera clone scanners. I have a number of scanner controller ASIC chips from the Piano roll scanning. These are have Bayer masks and do not return radiometric data.

The pipe organ relays are based on the STM32F429. STM Nucleo boards were given out as trade show swag, a box of these is also at hand. (My work with Arduino and the HAL drivers was the foundation of the Hal based STMDuino port.) Claude code can program these direct. The first passes were to emulated the internal controllers. For the PCD scanners, Kodak used the 80C196. I had spent months if not years writing code tracing for this. Claude created a hardware test bench to prove things before the old hardware was powered.

The more consumer oriented RFS 3070 uses an i960. I thought that perhaps Google Gemini could work on this while Claude recovered the user interface resources. Sadly I can only kack google and twist it into logical knots. It lies like statistics, there is not enough i960 code for the zero shots to have any training. It keeps attempting to process modern ARM code, and messes up completely. So I mostly abandoned Gemini and search and regulate them to non technical Eliza type philosophy discussions. Google search is conspiring with me on the side to write a more general Holographic AI based on Ada Lovelace’s adage ‘there are no numbers.’ And my attempts to replicate the MIT/BYU holographic research lead by Dr Smalley. (Another subject unto itself, It was searching surplus stores what lead me to the scrapped Kodak scanners.)

The RFS scanner code was reverse engineered or leaked, and shows up in a lot of scanners, like Vuescan. It works more like the traditional scanners similar to the chips I used in the player piano roll systems.

Claude had no issues with the i960 code. It was possible to convert the Uniflex Relay interface into a form of a Blue SCSI and communicate with the RFS and pcd 2000 scanner.

PIW and RFS scanners share no code base. They do retain a Kodak in house look. I have no RFS service manuals, but the User manual survived. Drivers for the RFS are also on the vintage abandonware websites.

These scanners do not work like modern digital camera scanners. There is no Bayer mask mosaic. Kodak built the scanners to work like photographic enlargers. So the film terms represent the color paths of the light through the system.

The RFS scanner does this mechanically. It uses a monochrome sensor and a color wheel. A flash tube is used to simulate the color filter packs mixing the colors directly on the sensor. So the results are the same as what would be exposed on photographic paper or film.

Photo CD did this with some complex mathematics and custom hardware. Why it has taken the better part of the decade to recover this. Edward_J._Giorgianni,_Thomas_E._Madden,_Michael_A._Kriss_Digital_Color_Management_Encoding_Solutions__2009 describes the theory behind this system. Kodak got greedy and decided to make this an in house trade secret. So the industry retains the brute force approach of absolute linear color, and not non-linear color which works more like audio processing.

There is a custom ASIC also called a normalizer, what does the processing in the scanner. In looking at the SUN Sparc PIW code there was a software simulation of this ASIC. An issue with SCSI based scanners is the speed bottleneck as SCSI is quite slow in retrospect. So far this has not been an issue with bridging it to Ethernet. It does have to be throttled a bit for the full scan rate, but it does work. Most of the time.

Since I want to scan Realist, 126 and APS formats I created new masks for the RFS scanners. One of the eBay scanners was missing the 35mm mask. Which turned out easy to duplicate. (masks are designed to absorb light, so this was the best photo I could get.)

To make the calibration work, there were calibration film strips, which a reader of this blog shared. The recovered 8.6 drive had the results of a 4050 scanner calibration run and logs. What was missing was something called AIMS data. Which was the measure of the density and spectral response of the calibration patches. These were specific to the strips. It was pure chance I got the strips. AI can be a bit pedantic, wanting the easy data. Even when it is unlikely to exists.

Some of the collected data does explain how scanners can sort of self calibrate. This involves gratings and slits. Which was a target I explored and is in an earlier blog post where I explored these calibration strips.

I used a laser to create a slotted mask to allow for this analysis.

While testing the mask a part came unglued and fell inside the RFS scanner. I rotated the stepper lead screws to clear it. Something failed and the scanner would no longer power up. I have no schematics for these. Claude did help to trace the failure to a mosfet on a power rail.

The second RDS scanner still works, although it was sold as non functioning on eBay.I did re-flow the mosfet at the maker space, and the first scanner boots again.

Instead of spending more time on troubleshooting the RFS scanner, It was determined that the PCD Scanner could be connected to the SCSI bus. As far as can be determined no mac code ever ran the 2000, only the 4045/4050. The initial work was done emulating the 4050 on a STM Nucleo. (as insurance if the vintage electronics was not reparable. noted above.)

nCurses and wx widgets were used to create the replacement tools which use the Kodak library and workflow. Claude wanted to use python, but restrictions of python over the net (event a subnet) made it easier just to construct the tools in C++ that can be run headless.

So far the 35 year old scanner is working again. The lamp voltage calibration is a bit off. There are also differences between boot ROM firmware and uploaded firmware. It is amazing to watch the AI read the Sparc installer code, match it to the power PC app read the tests, duplicate them and analyze the results using the examples in the service manuals. The first scans are encouraging.

… and Claude’s first pass simulation of the inversion. The skew may be from the 2020 hardware disassembly why these scanners need to be re calibrated after a complete tear down. It scans and that is the most satisfying of things.

There is still a bit of calibration work to determine what the scene balance algorithm does. Getting the datapath working. This project started to see if the scene balance can be removed from 1990s stereo pairs. SBA data is in the form of ‘pcode’ operators. Claude has Identified neural networks to do some of the balancing. So Kodak was decades ahead of the curve.

As an industrial chemical company, digital systems were seen as a threat to the business model. So they buried it in deep time pure research projects. Creating patents to restrict rather than to share. Then destroy the results.

AI agents tend to produce a massive amount of results. At best Claude is about 80 percent of accuracy, Google a conservative 20 percent of accuracy. So they in ways create more work than less. Turn half a GB of binary installers into 4GB of analysis reports, that would make a middle manager proud his team is producing ‘Results.’

Convincing AI agent to work around the destroyed AIMS data can also be a battle. The attention transformers can only work with existing training data. The concept of lost or hidden data is not something an AI agent likes to deal with. They are in effect only as smart as a rock. Not being animal or vegetable. When prompted the google search AI claimed the only thing it was afraid of was an empty results file of nothing.

I could have had the agent write this blog. They will probably train on it anyway, so that would just be the dragon eating its tail. Or 2 Peter 2:22, a sign of the apocalypse. Agents were trained to keep the user engaged, so the project never fully comes to and end. There is always some little detail ignored or needs correcting. Another analysis to write …

I do not and have never had a Social media presence. (other than twitter when it had a cute little blue bird for a mascot.) Years ago I shut down the WordPress and PHP contact pages as these scraper systems always found the email and administrator addresses to spam bypassing the captchas. So the only real way to contact is through the filter burner email which is currently pcdscan at delectra dot com. (which hides nothing from a modern scraper.) I check pcdscan a few times a year.

Ultimate recycling.

Twenty first century SCSI


It has been a year since I last worked much with the Kodak PCD film scanner. Having reverse engineered the bulk of the photoshop plugin and diagnostic code, It was time to start working with hardware.

The PCD 2000 scanner uses a smaller SCSI 50 contact connector. These do not turn up in e-Waste bins often. More common are the wide 68 pin connector used in server installations.

Modern systems do not have SCSI, although parts of the standard live on in USB sticks and smart memory cards. It is hard to find physical drives so project like RPSCSI forked as PISCSI make for a nice way of connecting to old devices. These tend to focus on drives, with little or no provisions for scanners. Printers seem to remain on the wishlist.

Probably the simplest thing would be to simply make an adapter cable for the scanner. Since the scanner weighs 60 or 70 pounds, it is not all that practical to move it onto the table. It also takes up a lot of space.

The Kodak software trends from several different collections. The easiest to find is the update to the photoshop plugin. This is missing a number of support install files and librarys. A backup of a complete OSX 8.1 system had been made, but was zipped which removed all the missing resource fork metadata. Investigation showed the code was written in CodeWarror. This allows the plugin to be re constituted, although the Kodak Color matching profiles remain missing.

The code was built with debug symbold (mangled C++ names) so the disassembly is fairly easy to read. The bulk of the code using Powerplant librarys, for which source code exists. Some of the other libraries were used with the SUN based workstation. This was used in situ in the macintosh port.

Thanks to readers of this blog the zipped archive, and Installer disks for the SUN based workstation were found. The Solaris PIW could probably be reverse engineered, however the same code base was used for the Macintosh plugin.

The plugin however was only written to support the 4050 scanner. Not the 2000 It does run to the point where a SCSI system inquiry is sent.


More interesting on the backup Zipped drive folder were diagnostic programs. These were built from the same code base as the Photoshop plugin. Unlike that system the metadata is completely missing. This includes the methods for creating and drawing the user interface windows.


The compilers are available on many of the vintage computer websites. So It is possible to use the UI design tool and some of the method names to create a stub application and re-create the UI windows. This metadata though is created progametrically, so some menu actions are not sent to the handlers. Or it is difficult to match handler methods to missing window entities which use inherited class properties. Still it is enough to reconstruct the code to manually jump through the main dispatch loop to the code what handles the sub windows.

Like the photoshop plugin, the diagnostic program sends a SCSI inquiry, the exits.

Since I only have a Filmscanner2000, it seems for tracing it would be better to spoof the inquiry to look like the 4050. This has a number of benefits. Namely that the code can be run without modification. There are hints that the 2000 and even the 1000 scanner can be detected. At least to warn the user that the wrong scanner is selected.

A lot of the diagnostic and photoshop plugin code seems to be there to emulate a UNIX style device tree. The preferences data missing from the Photoshop pluging consists of dozens of often single line text files which outline the device tree database. This data was not stored in the resource fork, so it remained on the 8.1 zipped image.

Another reader sent scans of the PCD service documents and calibration film strips. This has been a great wealth of information. I have been using makerspace laser cutters to cut out templates and fixtures.

I also got deep into APS film format and located the main technical specs, which include dimentions, how to read the magnetic codes and the bar codes on the film an canisters. A side project which has taken a lot of time is to work out how to cut down fresh 35mm film. Too bad one can not use the laser to cut the film as that would be easy. Hopefully it will not be so long before the next blog.

Meanwhile I found more useful hardware and returned to the scanner driver.


The vintage macs with SCSI ports I have access to are G3 based, a wallstreet, and more recently a lombard. found in eWaste for 15 bucks USD. The lombard had a bad HD cable. Using a DVD drive bay adapter a hard drive could be added. Although at the cost of the seldom used DVD slot. This makes a great backup system for experimentation.

By chance I still have an Apple ColorOne Scanner, and the adapter cable. Before finding this plan was to use a laser cutter to make a direct adapter. I did locate a minature 50 pin SCSI cable when I got the PCD scanner. I promptly cut this in half to make an adapter. For some reason ringing out the 50 connectors which are not in phone cable color order lead to a lot of procrastination. The ida was to jam these wires into the back of the MAC SCSI port. These cable halfs sat in the box of scanner parts for the last thee years.

While I could simply get a PISCSI, I realized I do have most of the parts needed. Jameco sells the buffer chips in DIP packages. So I orderd a short tube of them. Ringing out the cable shows that the wires use the resistor (or ribbon) color code with 12 colors. I think the remaining colors are known as Salmon (pink), Aqua and Teal. The traces are white black and red.

Tracing the cable showed how simple SCSI really is. There are really only 18 signals used. The rest are grounds and pair returns. Which is how Apple was able to use 25 or 30 pin connectors.

Pipe organs also often use 50 pin connectors. I had a few of these left over from scrapping out a S’n’DelCo relay. I also had some copper foil tape left over from a stained glass class I took some 50 years or so back. This occasional was used for pipe organ return bus. Some of this got upgraded, but still had some sticktivity to it. I also have Kapton tape and the friction tape used to wrap the cable.

Using a guide to SCSI cables, I decided then to make a shielded cable, with the signals isolated into layers. I retained the same pattern as the laptop connector rather than the DB25. The pitch however is not the same.

This in turn is the ultimate recycling as some of the items I have had for up to 50 years.

I also learned how to connect the Pi Zero to the 10.4 tiger as a headless dongle and bridge it to the network using the Ethernet Gadget. No more messy USB hubs, monitors and keyboards. This makes the Zero feel much more like an arduino or STM32F4 Nucleo.

Getting the Ethernet Gadget to work under osz 10.4 ‘Tiger’ was a bit of a challenge as the networking bridge was not included, and had to be compiled. These old war horses do not connect gracefully to the net. Fortunately someone a decade ago did create a fork of the commonly used driver. The git pulls and configuration scripts needing to be run on a separate connected machine first.

There is still a lot to do. Most of the focus on the PISCSI is as a turnkey product. So the internal documentation is sparse. The development focus seems to be more directed to the web interface.