分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

andreavolpato/spektrafilm

多媒体与设计

把相机 RAW 或线性图像模拟成有光谱依据的底片、相纸与扫描流程,带交互界面和 LUT 导出。

1,467
194
Python
GPL-3.0
创建于 1 年前

项目介绍

spektrafilm 是一套基于光谱的模拟彩色摄影流程仿真工具。它从相机 RAW 文件或准备好的线性图像出发,按厂商数据表提取的感光数据把画面曝光到虚拟负片上,再依据特性曲线和成色剂效应生成染料密度,随后通过虚拟彩色放大机投射到相纸上,最后扫描虚拟照片。目标不是套一个通用的"胶片滤镜",而是用测量数据支撑的模型预测胶片、成色剂、颗粒、光晕和放大机设置如何影响最终画面。

它面向希望试验胶片渲染效果或基于模型做二次开发的摄影师、色彩科学从业者和工具开发者。Python 仓库是参考实现,README 还列出了 Vulkan、Rust、OFX 及 ART 等更快的衍生版本。代码分为三个包:运行时管线(线性进、线性出)、基于 Qt 与 napari 的桌面界面,以及可烘焙 .cube / .3dl / Hald-CLUT 并可选输出 OCIO 配置的 LUT 生成器。

快速使用

项目要求 Python 3.13,更新的版本尚不兼容。最省事的方式是通过 uv 一次性安装并启动界面:

uvx --python 3.13 --from git+https://github.com/andreavolpato/spektrafilm.git spektrafilm

也可以永久安装,获得 spektrafilm 命令:

uv tool install --python 3.13 git+https://github.com/andreavolpato/spektrafilm.git
spektrafilm

pip 加虚拟环境的流程同样可用,默认安装已包含界面和 LUT 生成器:

conda create -n spektrafilm python=3.13
conda activate spektrafilm
git clone https://github.com/andreavolpato/spektrafilm.git
cd spektrafilm
pip install -e .
spektrafilm

napari 窗口打开后,在 import raw 区选择白平衡方式并点击 select file 导入 RAW,选择 kodak_portra_400、kodak_portra_endura 这类胶片和相纸配置,调整曝光后按 scan_film 再按 PREVIEW 查看虚拟扫描。需要全分辨率结果时用 SCAN 代替预览。控件自带提示,也可参考 界面演示视频。

直接在 Python 里调用时:

from spektrafilm import create_params, simulate

params = create_params(
    film_profile="kodak_portra_400",
    print_profile="kodak_portra_endura",
)
result = simulate(image, params)

烘焙 LUT 时,spektrafilm-lut 命令行接受规范的色彩空间名或短标签:

spektrafilm-lut build \
    --film kodak_portra_400 \
    --print kodak_portra_endura \
    --input vlog --output srgb \
    --topology 1lut --resolution 33 \
    --qa --ocio-config \
    --out ./build/lut_bundles/

用 spektrafilm-lut list film|print|input|output|target 可以列出已注册的配置和色彩空间。

使用约束

  • 全分辨率渲染很慢。 作者给出的数据是在其笔记本上处理 6 MP 图像约需 10 秒;调参时用 PREVIEW,出图时用 SCAN。
  • 色彩管理有前提。 napari 不做色彩管理,推荐把屏幕和系统配置设为 sRGB,并把仿真输出也设为 sRGB;Windows 上界面会尝试读取显示器配置并在状态栏提示结果。
  • 输入格式。 界面文件加载器支持 16 位和 32 位图像(已知 PNG、TIFF、EXR 可用),期望场景参考的线性数据,最好使用线性 Rec2020 或线性 ProPhoto RGB 等广色域空间。手动流程可用 darktable 导出,但需关闭 filmic、sigmoid 等非线性映射。
  • 实验阶段。 项目处于快速开发中,界面中不少控件几乎没有文档说明;作者也指出富士数据的一致性不如柯达数据。
  • 许可。 源码采用 GPL-3.0,衍生作品也须以同一许可开源;JSON 配置和 LUT 为 CC BY-SA 4.0,LUT 文件另有"可商用、可免费分享、不得转售"的单独许可。
  • 仓库体积。 2026/05/28 的历史清理把仓库从约 140 MB 降到 45 MB,旧的克隆应重新拉取。

HotRepo 点评

在 2026-11-01 的 Python 日榜记录中,spektrafilm 单日新增 142 Star,排名第 11,对一个细分色彩科学工具来说是相当显眼的单日表现;该快照同时显示仓库为 1451 Star、188 Fork。2026-04-14 的 HN 讨论帖 热度有限(15 分、1 条评论),其中一条评论提示可关注 dev 分支。README 提到的 Vulkan、Rust、OFX、ART 等第三方集成,加上 188 次 Fork,说明模型更多是被当作参考实现去移植和复用,而不仅作为应用来运行,这与它自称"参考实现"的定位一致。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

Spektrafilm – Open-source Film Simulation
▲ 15 · 1 条评论 · 2026年4月14日