跪拜 Guibai
← Back to the summary

SpektraLab Puts a Virtual Darkroom on Your Mac, and Agents Can Run the Enlarger

Recently I've been working on DocFlow, a full-stack hands-on project integrating Agent, RAG, and knowledge graphs, tested with real-time collaboration for a hundred people, supporting Word (DOCX) and PDF import; the Agent can search materials, rewrite documents, and manipulate tables. Under the hood it implements a main Agent coordinating, sub-Agents verifying in parallel and reviewing results, plus automatic context compression, long-term and short-term memory, and task recovery. RAG covers parent-child chunking, BM25 + vector hybrid retrieval, RRF fusion, reranking, and source citation with original text, suitable for those who want to dive into source code and build AI applications.

I've also compiled 80 articles on Agent development, 72 on RAG, and 70 on knowledge graphs, 222 learning resources in total, from foundational principles to engineering practice. You can learn while building alongside the source code. If interested, add me on WeChat yunmz777 to learn about the project and supporting materials, and to discuss AI development together.

Recently I came across a rather interesting open-source project called SpektraLab.

It's a photo processing tool with built-in configurations for various film stocks and photo papers. It can take digital photos from a camera and process them into images with film color and texture. The Mac version is free and open source.

For someone like me who likes taking photos but isn't very good at post-processing, this direction is very appealing. Open a photo, first look at the results from different film and paper combinations, then pick the direction you like and keep adjusting—much easier to get started than facing a bunch of curves and color parameters right off the bat.

It also supports MCP, allowing external Agents to invoke some photo processing capabilities. Photography, open source, and Agents—put these together, and I wanted to dig in.

SpektraLab 冲洗界面与海边照片效果

Choose the film first, then the print combination

Looking at the interface, the main operations in SpektraLab are fairly intuitive: on the left are the film stocks, papers, and adjustment items; in the middle is the current photo; on the right is the library.

What caught my eye first was the effect preview on the left. Each film option displays the current photo already processed through that film, so you can compare directly without guessing from the name.

The screenshot shows film options like Portra, Ektar, Gold, C200, and below them papers like Portra Endura and Crystal Archive II, as well as print materials like Vision 2383.

SpektraLab 中的胶片与相纸预览

The interesting thing here is that film and paper can be selected separately.

When we talk about a photo having film look, it's easy to only think of a specific film name. But in this project, after the negative there's still a printing process, and the response of the paper also participates in the final color and contrast. Reversal film, on the other hand, goes through a direct scanning workflow and doesn't need a paper selection.

So after selecting a film, you can also compare different print combinations to see which suits the current photo better.

It simulates a film development process

I also wanted to know how this effect is actually made.

SpektraLab's film model comes from another open-source project spektrafilm, which builds an imaging model with spectral calculations based on characteristic data of film stocks and papers.

You can think of it as letting a digital photo go through a virtual darkroom on your computer.

Photo input → Film exposure and development → Printing → Scan output

During simulation, the response of different light-sensitive layers, the dye density after development, and the changes when light passes through the negative and acts on the paper are all calculated. Grain and halation also participate.

This explains why adjusting film, exposure, or print settings affects color, tonal transitions, and texture at the same time. The final film look is the result of all these steps working together.

On top of the upstream model, SpektraLab implements a C++ and Metal rendering engine and builds the Mac app around it, no Python runtime needed. Its work includes native implementation of algorithms, GPU rendering, and the photo-processing interface—it goes beyond simply adding a UI.

Of course, this is still digital simulation. The original photo's exposure, white balance, and subsequent parameters all affect the result, and the same combination won't necessarily suit every photo.

If you're not good at post-processing, start by choosing effects visually

The approach I appreciate is to narrow down the choices you need to make.

You don't have to study every parameter as soon as you open the software. First pick a few familiar photos, compare different film and paper combinations, and see whether skin tones look comfortable, whether the colors of sky and plants appeal to you, and whether the shadows are crushed too hard. Then decide whether to keep adjusting.

The two images below show the same shell photo processed with different settings.

The first uses a combination of Ultramax 400 and Ultra Endura.

同一张贝壳照片使用 Ultramax 400 与 Ultra Endura 的效果

The second switches to 800T and Vision 2383.

同一张贝壳照片使用 800T 与 Vision 2383 的效果

Both are processed results. You can see the shell's brightness, background color, and the overall mood of the photo have changed.

I think this kind of comparison is good for beginners. First decide which one you like, then gradually understand which settings caused the change—no need to memorize all film characteristics at the start.

If I were to lay out a simple workflow, I'd do it like this:

  1. Import a photo, pick one with normal exposure and composition as a sample.
  2. Compare film and paper combinations, choose a direction you like.
  3. Adjust brightness, warmth, and grain based on the actual image, then export.

After finding a suitable setting, you can save a preset or copy the settings to other photos. The software supports RAW, JPEG, and other image inputs, and exports JPEG, PNG, TIFF, and other formats. Specific RAW compatibility still depends on camera model and system decoding support.

For a group of photos with similar lighting, I'd share one style first, then check each one individually for minor tweaks. Indoor, outdoor, and night conditions differ a lot, so it's worth comparing them separately.

I also don't assume that importing a photo will always make it look better than the original. It offers a more intuitive entry point for experimentation; which effect you keep still depends on the photo itself and your taste.

Supports MCP, so Agents can participate in processing

As a developer, I also pay attention to the tool interface it exposes.

According to the current MCP tool definitions, external Agents can call these capabilities:

This way, we can try to chain some repetitive operations together for an Agent. For example, first query photos in a specified directory, then apply the selected film and paper one by one, and finally export to a specified folder using an existing recipe.

What I'm looking forward to is selecting my preferred style myself, then letting an Agent handle the sorting, applying settings, and exporting.

It's also important to be clear: the currently exposed development parameters focus mainly on film, paper, and film exposure. Full color adjustment operations like white balance, curves, and HSL are not yet exposed through this tool. The existing interface also doesn't directly provide photo previews, so if an external Agent needs to see images to analyze, it must have its own image-reading capability.

So MCP already makes photo processing have callable operation entry points, but automatically judging how each photo should be edited still needs to be designed and validated on top of these interfaces.

The integration method is also straightforward: in the Mac version's settings, turn on Agent access, then copy the MCP configuration and hand it to a client that supports launching a local MCP server. Specific configuration can be found in the project's Chinese user guide.


Project address: JamesQiu2005/SpektraLab

I've shown the Mac interface here. If you'd like to try it, check the repository for installation instructions and corresponding release versions.

From now on, when processing photos from my camera, I plan to start with a few film and paper combinations I like, then gradually integrate the sorting and batch export into my own Agent workflow.

Comments

Top 1 from juejin.cn, machine-translated. The original thread is authoritative.

A1J30

Why doesn't it support macOS 14?