81 个波长,贯穿始终
光线从 380 nm 到 780 nm、以 5 nm 为步长逐一追踪,先经过胶片的感光特性与染料密度,再经过相纸的,一如放大机和扫描仪的工作方式。引擎以光谱为工作空间。
SpektraLab 1.3.3 · macOS · Apple 芯片
打开 RAW 文件,选择胶片和相纸并得到物理建模的照片。
免费开源 · macOS 15 或更高版本 · Apple 芯片 · 30.7 MB DMG,已签名并公证

曼哈顿下城,Shot on Kodak Portra 400 with Kodak Portra Endura Paper
RAW 进,照片出。
左边是通用 RAW 解码。右边是 SpektraLab 编辑的同一张画面,经胶片显影、再印到相纸上。






是物理计算,不是预设
预设是一张改变颜色的表。SpektraLab 改变的是光——先穿过胶片的染料层,再穿过相纸的——无论底片是哪种画幅,画面的样子就是这些材料的真实表现。
光线从 380 nm 到 780 nm、以 5 nm 为步长逐一追踪,先经过胶片的感光特性与染料密度,再经过相纸的,一如放大机和扫描仪的工作方式。引擎以光谱为工作空间。
设定底片尺寸,颗粒、光晕和成色剂扩散就按画幅以微米为单位缩放。把同一张照片当成 35 mm,颗粒就更粗——理应如此。
C++ Metal 引擎直接编译进应用,没有解释器,也没有后备方案。相纸一侧的调整直接从缓存的底片重印;全分辨率渲染不到一秒。
从解码到导出,全程 ProPhoto RGB。每个文件只做一次色域映射,映射到你指定的色彩空间,并在写入前按自己的分辨率软打样。文件,是不动的那个基准。
读数告诉你胶片与相纸留住了场景的多少,以相对中灰的档数表示——只对画面测光,不计片边。留不住的部分,由“场景置位”通过引擎自身的拟合拉回来。

工作原理
每个控件有它所属的环节。胶片画幅、颗粒与光晕作用于显影之前;放大机滤色与相纸在显影之后;调色只作用于扫描结果。
胶片与相纸
每一款都来自实测:特性曲线、染料光谱、成色剂与光晕的表现,一项不少。选好胶片,相纸自动配好。正片不印相,直接扫描。






胶片与相纸的名称是各厂商的商标,在这里只用来说明实测的是哪种材料。SpektraLab 与 Kodak、Fujifilm、Ilford 没有关联,也未获其认可。
片边 · 日期后背
片边功能把画面放回它的片条上:片基、齿孔、片边字、格号,每款胶片各不相同,全部按真实胶片实测。日期后背把日期直接曝进底片,120 胶片还能加上拍摄数据。这些字和画面一样,带着颗粒与光晕。













半格拼接
把两张照片拼进一格 135 胶片,左右并排,或上下排列。两个片格各自测光,白平衡、印相和调色也各管各的。在胶片条里它们算一张,导出也是一张。


工作流
导出配方,写入前先打样。设置剪贴板,一次调好整个文件夹。命令行和 MCP 服务器,用的也是同一个会话。

格式、位深、色彩空间、尺寸、命名、文件夹,一份配方全部记下。可以是 Display P3 的 JPEG、ProPhoto 的 16 位 TIFF、sRGB 的 8 位 PNG,也可以是数字中间片(DI),留给其他软件调色。每个文件写入前,都按实际分辨率逐像素打样。批量导出一张一张来,4500 万像素的照片,也只占一次渲染的内存。

勾选想带走的设置:胶片与相纸、曝光、白平衡、胶片效果、相纸效果、场景置位。然后复制、粘贴,或者一键同步到所有选中的照片。裁剪、调色和片边不会跟着走,每张照片保留自己的。
$ spektralab edit beach.NEF --patch '{"params":{"filmStock":"kodak_portra_400",
"printStock":"kodak_supra_endura"}}'
$ spektralab process beach.NEF --preview beach.jpg
$ spektralab export beach.NEF --recipe "JPEG — Display P3"
$ spektralab mcp # 以 stdio 方式启动 MCP 服务器
窗口、spektralab 命令和 MCP 服务器,操作的是同一个会话。智能体可以替你选胶片、选相纸、定曝光、调色,但一个像素也不会画。每一张结果,都是你自己也冲印得出来的照片。此功能默认关闭,可在“设置 ▸ 智能体”中打开。