301 karma · joined January 12, 2023
The real problem with most scanning setups is actually getting accurate color out of color negatives. The common wisdom these days is to use high-CRI light, but I believe that approach is flawed. Film scanning is not an imaging challenge, but a rather a densitometric one. You don't actually want to take a photo of the negative in a broad spectrum because the dyes in photo negatives were never intended to be used in a broad-spectrum context. You actually need to sample the density of the dye layers at very specific wavelengths determined by a densitometric standard (status M) that was designed specifically for color negative film. Doing this with a standard digital camera with a bayer sensor is... non trivial and requires characterizing the sensor response in a variety of ways.
Basically the hardware is easy, the software is hard.
Just for instance, the LS-2000 features in the post has an advertised optical resolution of 2700DPI, which means the absolute maximum megapixel resolution you can get out of that thing is a little over 10MP. Film scanners are notorious for overstating their optical resolution, which has nothing to do with the resolution of sensor used to digitize the image data and everything to do with the lens in the scanner. You can have a 200MP sensor scanning your film but if your lens can only resolve 1000DPI you will have a very high resolution image of a low resolution lens projection. It's maybe a little better than a flatbed and it features dust removal, but in the year of our lord 2024 the LS-2000 is not a good choice for scanning film.
As for his macro scanning setup, he appears to be using the digitaliza for film holding, which is a notoriously bad product with many known flaws. Negative supply makes a line of lower cost version of their very good film holders, and Valoi also offers an affordable system of components that I highly recommend. There is a ton of good information out there about macro scanning, and had the OP sought it out he could avoided his little adventure in retro computing.
There are many ways to render pages on the server using a single JS builds, most template rendering engines have a node implementation, and most javascript frontend frameworks have a mechanism to render components statically to a string. If we're talking about a simple, mostly-static website, the content is going to be cached so the performance of the backend isn't a huge factor. So just use JS for the whole thing, and save yourself a build.
Maybe in 5 years this will be a practical approach, but there's a reason that old ways of doing thing hang around: they're well-documented and reliable.
• A large portion of the cost of maintaining a code repository goes toward maintaining the build.
• Multiple builds per repo create significant costs.
• Any web application with a UI _requires_ a frontend build for CSS/JS. Anyone around from the JQuery/pre-SASS days will recall the mess that lack of things like dependency management and ability to control import order caused.
• If the frontend build is already baked into the process, you can save costs by _only_ using a frontend build.
• SPA patterns are the easiest to use with a frontend build, have the most examples/comprehensive documentation.
Hell, CNC machines existed back then too.
Simply using the rental vacancy rate as a proxy for supply and demand does not work, since there are lots of factors that can affect vacancies. One of then, as outlined in the article, is landlords keep units off the market to drive up prices.
So the process would be, using the RAW scan of the image (the orange mask intact):
1) Invert the image.
2) White balance on any patch.
3) Sample the color balance of every other patch. They should have equal amounts of all colors.
• You can modify a sensor for IR, though this is often a costly and difficult modification. But even if you do so, the IR focal distance is different from the visible light focal distance. So for every shot you need to refocus for IR, but also ensure that the refocussed IR image is exactly the same size as the visible image.
• You can use another sensor that is sensitive to IR, but its probably not going to have the same resolution, you're going to struggle to somehow have both cameras see the target image, and then once you get both exposures, alignment becomes a problem.
So yeah, doable but non-trivial.
https://medium.com/@alexi.maschas/color-negative-film-color-...
There's also some proper academic research into this subject going on currently: https://www.researchgate.net/publication/352553983_A_multisp...
One thing that's important to note about this process is that the idea is not to _image_ the film, but rather to measure the density of each film layer and reconstruct the color image from that information. This is a critical realization, because one of the most important things to know about color negative film is that the "color" information in the negative actually only exists relative to the RA-4 printing system. Negatives themselves don't have an inherent color space.
Cool to see someone else working on this though. I actually considered those drivers for my build, but I ended up building a very high frequency, high resolution PWM (30khz/10bit) dimming solution with TI LM3409 drivers. It's very hard to get uniform light as well so I ended up getting some custom single chip RGB LEDs.
https://i.imgur.com/BVM9p6Q.jpeg
https://i.imgur.com/5oozHnN.jpeg
I've been working on this for a few years, and what I will say is that there's actually another level of complexity beyond just implementing the light. There's a lot of testing to ensure that you're getting proper linearization of each channel, and there's still a color crosstalk problem arising from the misalignment between the color sensitivity of most modern digital cameras and the bands that are used to scan color negatives. It requires some additional tweaking to get all of the color information in the correct channel. You can also very easily end up saturating a channel without realizing it as well. Oversaturated reds are a common occurrence in RGB scanning.
I'd also note that the wavelengths you should shoot for are more along the lines of 440nm 535nm 660nm, which correspond to the Status M densitometry standard. This standard was designed specifically for color negative film.
The sort of engineer who can define the requirements of a project and execute based on those requirements is much more valuable to me than a algorithmic prodigy. Seniority is not defined by the mathematical complexity of the problems you solve. Focus instead on design patterns and best practices, scalability and maintainability concerns, mentoring of more junior teammates and the buildout of tooling that helps ease the overhead of working with the codebases under your purview and the development, deployment and testing of that code.