【免费下载链接】SpektraLabSpektraLab — a macOS film and print simulator. SwiftUI app a Metal/C render engine, linked in, no Python at run time. A fork of andreavolpato/spektrafilm.项目地址https://gitcode.com/gh_mirrors/sp/SpektraLab点击查看免费下载SpektraLab 是一款运行在 macOS 上的胶片与冲印模拟器它不靠 LUT 滤镜而是让光线穿过 81 个波长的光谱还原胶片染料层与相纸的真实暗房过程——颗粒、光晕、成色剂、放大机滤色一样都不少。如果你用过 LUT大概都有过同一个困惑同一个 LUT套在天空一片绿、套在皮肤一片黄怎么都不对味。这不是你调得不好而是 LUT 从原理上就装不下胶片。SpektraLab 换了一条路不去调出胶片的样子而是按物理过程把一张底片冲印出来。这篇文章讲清楚 LUT 到底差在哪以及 SpektraLab 的光谱管线是怎么把暗房搬进电脑的。先说结论LUT 是滤镜不是胶片LUTLook-Up Table查找表做的事用一句话就能说完给每个像素的 RGB 三元组查出另一个 RGB 三元组。它是一个逐像素查表的函数没有波长、没有位置、没有过程。而真正的胶片有三样东西 LUT 从结构上就装不下LUT 装不下的东西为什么 LUT 做不到SpektraLab 怎么做光谱波长3 通道 RGB 已把 81 个波长压缩成 3 个数信息丢了全程携带 81 个波长做积分空间效应查表只看这一像素的值看不到邻居颗粒、光晕、成色剂扩散都是空间过程冲印过程结果被烤死进一张固定表放大机、相纸、显影都是可算的物理阶段这三点里最关键的是第一点和第二点。光谱丢了就没法区分胶片和相纸各自在不同波长上吸了多少光空间丢了就没法做出高亮边缘旁边那条标志性的红色光晕。81 波长SpektraLab 的光谱管线长什么样在 ARCHITECTURE.md 里SpektraLab 把整条管线画成一句链式反应场景光 → 相机胶片 → 潜影 → 显影 → 负片染料密度 → 放大机相纸 → 潜印 → 显影 → 相纸染料密度 → 扫描/观看 → 输出 RGB颜色不是按RGB算的而是380–780 nm、每 5 nm 一个采样点共 81 个波长。一个像素在引擎内部不是一组 RGB而是三条染料层在 81 个波长上的密度。整条管线分三步第 1 步 · 曝光RGB → 胶片看到的光谱引擎用 Hanatos 2025 的光谱上采样把输入 RGB 还原成如果这个颜色照到胶片上胶片会看到什么样的 81 波长光谱再乘以胶片自己的光谱敏感度。这一步在 engine/src/core/hanatos.cpp 里完成192×192×81 的大表在初始化时就折算成一张 192×192×3 的查找表所以逐像素时几乎零开销。第 2 步 · 显影曝光 → 染料密度曝光量查胶片的特性曲线得到青/品红/黄三条染料层的密度接着是DIR 成色剂耦合——染料之间互相抑制并做空间扩散最后叠上颗粒。这一整段是胶片化学的核心。第 3 步 · 冲印密度 → 光 → 响应两次光谱积分把负片的染料密度放进放大机。引擎把同一个积分跑两遍第一遍用放大机灯光 相纸敏感度得到相纸上的潜影显影成相纸染料密度后第二遍用CIE 标准观察者 观看光源得到最终 RGB。公式写出来是这样$$\text{out}m \sum{\lambda} I(\lambda),S_m(\lambda);10^{-\left(\sum_k c_k D_k(\lambda) D_{\text{base}}(\lambda)\right)}$$关键在于引擎内部根本没有 RGB 这个中间空间ProPhoto RGB 只是入口和出口的量色标准。这就是它和 LUT 最本质的区别——LUT 是RGB 进、RGB 出SpektraLab 是光谱进、光谱出。整条节点序列在 engine/src/pipeline/pipeline.cpp。物理尺度颗粒与光晕为什么真LUT 的第二个死穴是空间。SpektraLab 把颗粒和光晕做成真正的空间 随机过程而且按画幅以微米为单位缩放你告诉它这张底片是 120 还是 135颗粒、光晕、成色剂扩散就会自动按画幅变粗变细。同一张照片叫成 35 mm颗粒就正确地更粗。光晕halation是光谱模拟最炫也最难的例子。对于没有防光晕层的胶片比如 CineStill 800T强光会穿过乳剂层、在片基底面发生菲涅尔反射再折返回来重新曝光。引擎用一组受物理约束的高斯混合去拟合这个后反射光晕甚至还原出红色光晕比绿色远 1.5–2.7 倍的现象——这就是为什么真实扫描里一盏日光灯旁边总有一道橙红色的边。这套拟合见 engine/src/core/halation_psf.hpp。这种效果任何逐像素查表的 LUT 都做不出来——它需要这一像素的强光去影响它周围的像素。放大机与相纸真正的暗房胶片模拟里最容易被忽略的是放大机和相纸。SpektraLab 把它们当成一等公民放大机滤色用一套可调的双折射滤色片按 CC 色深单位去减放大机灯光相当于暗房里的色温/品红/黄滤片。引擎在 engine/src/core/spectral.cpp 里把滤色片建成 81 波长上的函数再乘到灯光上。相纸自己的染料层和胶片一样相纸也带 81 波长的敏感度与染料密度参与第二次光谱积分。物理档位内置 34 款实测胶片/相纸档案25 款负片 9 款相纸全部来自真实测量数据而非调出来的近似。引擎里唯一用 LUT 的地方恰好证明它的边界有意思的是SpektraLab 并非完全不用 LUT。它确实用了一张 LUT但只用在一个很窄的场景在不同相纸之间快速切换预览。这张表是 33×33×33、约 431 kB 的浮点表把负片密度 → 某个相纸的成品直接烘焙成查表4500 万像素下 2 毫秒就能翻一张相纸比重新冲印约 9–167 毫秒快得多。但代码里特意写了一句话恰好点破了 LUT 的天花板Glare is a spatial, stochastic veiling field and cannot live in a pointwise table. 眩光是空间性的、随机的遮蔽场装不进逐点的表里。也就是说连 SpektraLab 用 LUT 的那张表都主动丢掉了眩光——因为那是空间 随机的东西点表装不下。这张 LUT 的设计边界见 engine/src/core/print_lut.hpp。不到一秒的重印性能与导出很多人担心物理模拟 很慢。SpektraLab 用 C 把引擎直接编译进 App没有运行时 Python在 M3 Max 上测得预览尺寸长边 2560重印约0.01 秒全分辨率7800×5800渲染约0.87 秒整个安装包 32 MB其中代码约 3 MB。导出页会先在你的目标文件原始分辨率下软打样确认和画布逐像素一致后才落盘导出走的是 ImageIO色彩只做一次映射。数字中间片DI给后期留空间除了直接出成品SpektraLab 还能导出数字中间片按 Cineon 风格的对数编码代码 95 胶片底基黑685 参考白每十度 300 码负 gamma 0.6逐波长去掉胶片底基。这让文件打印密度化、灰度精确中性适合后续调色——而成品冲印本身不做任何印后编辑修图的活儿留给别的软件。详见 engine/src/core/digital_intermediate.cpp。快速上手三步打开你的第一张胶片打开 RAW把文件拖进窗口即可。引擎先把 RAW 解码成线性 ProPhoto 浮点。选胶片 选相纸左侧 Film 列表挑负片Print 列表挑相纸默认已配好一对。冲印并导出右侧 Pre-Dev / Post-Dev 调曝光、白平衡、曲线满意后进导出页选格式与色彩空间落盘。 小贴士Post-Dev印后曝光/曲线/色彩平衡是Layer 2只走一次绘制、几乎无延迟Film/Print 与 Pre-Dev 则会触发一次引擎渲染。把控制项放对层是滑块跟不跟手的关键。小结LUT 是逐像素查表没有波长、没有空间、没有过程所以它只能滤镜做不出真胶片。SpektraLab 按物理过程算81 波长光谱 × 胶片/相纸染料层 × 两次光谱积分颗粒、光晕、成色剂全部是真实的物理与空间过程。快且诚实C Metal 引擎编译进 App预览重印约 0.01 秒连它自己用的那张 LUT都诚实地丢掉了点表装不下的眩光。如果你想要的是调出一个胶片味LUT 够用如果你想要的是把这张底片真的冲印出来那是 SpektraLab 这条光谱管线在做的事。源码与文档导航想了解内部实现可以从这几处入手总览与色彩链ARCHITECTURE.md、README.zh-CN.md引擎 C 接口整条管线入口engine/include/spektrafilm/spk_engine.h光谱上采样RGB → 曝光engine/src/core/hanatos.cpp光谱常量与放大机滤色engine/src/core/spectral.cpp光晕后反射拟合engine/src/core/halation_psf.hpp胶片/相纸档案结构engine/src/core/profile.hpp冲印管线节点序列engine/src/pipeline/pipeline.cpp数字中间片Cineon logengine/src/core/digital_intermediate.cpp实测胶片/相纸档案示例engine/resources_product/profiles/前端参数模型modern_UI/Spektrafilm/Spektrafilm/Model/Params.swift赞分享【免费下载链接】SpektraLabSpektraLab — a macOS film and print simulator. SwiftUI app a Metal/C render engine, linked in, no Python at run time. A fork of andreavolpato/spektrafilm.项目地址https://gitcode.com/gh_mirrors/sp/SpektraLab点击查看免费下载相关推荐AI做了什么为什么做NetClaw的GAIT不可变审计轨迹完整解析AI做了什么为什么做NetClaw的GAIT不可变审计轨迹完整解析 NetClaw An AI agent that claws through yo给电视换装的风口真的来了开源社区在做什么、还能做什么给电视换装的风口真的来了开源社区在做什么、还能做什么 你有没有过这样的体验花大几千买的智能电视开个机要先等十几秒广告开机后扑面而来的不是你的App移动开发原生移动桌面应用NegPy能做什么这款开源胶片负片处理工具的完整介绍NegPy能做什么这款开源胶片负片处理工具的完整介绍 NegPy 是一款免费开源的胶片负片处理工具专为负片扫描而设计。它不只是简单地把负片反转成正片而是用上一篇OptiScaler Client 组件全解Fakenvapi、NukemFG、FSR4 INT8 与 OptiPatcher 一次讲透下一篇GDAL 的 ERS 栅格驱动深度解析读写 ERMapper .ERS 头文件格式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
一文读懂 Go 夜读:源码分享与参与路径全解 一文读懂 Go 夜读:源码分享与参与路径全解 【免费下载链接】night Weekly Go Online Meetup via Bilibili|Go 夜读|通过 bilibili 在线直播的方式分享 Go 相关的技术话题,每天大家在微信/telegram/Slack 上及时沟通交流编程技术话… · 2026/11/4 11:53:38
REA 实战指南:用静态分析把一份 iOS 应用解剖到底 REA 实战指南:用静态分析把一份 iOS 应用解剖到底 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
手里只有一个 IPA 文件,要… · 2026/11/4 11:53:38
NapCatQQ 群组管理:6 个场景接管群务 NapCatQQ 群组管理:6 个场景接管群务 【免费下载链接】NapCatQQ Modern protocol-side framework based on NTQQ 项目地址: https://gitcode.com/gh_mirrors/na/NapCatQQ
加群请求不断涌来、广告消息要撤回、每周公告要手动发,人肉操作容易掉链子… · 2026/11/4 11:53:38
链表局部反转算法:头插法实现与优化 1. 问题背景与核心挑战 链表局部反转是算法面试中的经典问题,LeetCode 92题要求我们在单链表中仅反转从位置left到right的部分。这个问题看似简单,但实际处理时存在几个关键难点: 边界处理复杂 :当left1时,意味着需要… · 2026/11/4 14:57:33
智能API生成技术:提升开发效率与接口性能 1. 接口设计的现状与挑战 最近在重构公司支付网关时,我对着十几个版本的API文档陷入了沉思。每次业务调整都要手动维护Swagger文档、修改参数校验逻辑、更新测试用例,这种重复劳动消耗了团队近30%的开发时间。更头疼的是,不同客户端开发者对同… · 2026/11/4 14:57:33
Ghidra 9.0.2逆向分析:JDK11环境、headless批处理与反编译判读 简介:Ghidra 9.0.2 是面向网络安全分析人员、漏洞研究者与恶意软件分析学习者的开源逆向工程平台,由 NSA 研究理事会设计维护,可用于对已编译二进制进行反汇编、控制流梳理与潜在漏洞定位。其图形界面支持浏览和修改控制流图,反汇… · 2026/11/4 14:57:33
小米MiMo-V2.6开源旗舰实测:多模态3D能力与API排队问题解析 1. 凌晨那场发布,我盯完了全程 小米选在凌晨发 MiMo-V2.6 系列,这个时间点本身就挺有意思。做模型发布的人都知道,凌晨发要么是抢一个时间窗口,要么是团队刚跑完最后一轮压测,来不及等白天。我第一时间把开源仓库拉下来… · 2026/11/4 14:57:33
HammerDB六库TPC-C横向对比:从跑分读数到选型决策 数据库选型这件事,最怕的就是拿一张跑分表当决策依据。我用 HammerDB 做过不少轮横向对比,六个主流关系型数据库放在同一套硬件上跑 TPC-C,结论经常和厂商宣传、社区口碑对不上:有的库单看峰值很漂亮,稳态却掉得厉害&a… · 2026/11/4 14:57:33
带外管理网建设指南:选型、布线、配置与隔离验证 1. 为什么要把管理口单独拉一张网很多机房里都存在这样的场景:机柜里十几台设备堆着,业务网段跑得好好的,某天核心设备配置出错断了网,人只能抱着笔记本冲到机房,插上串口线慢慢敲命令。或者更尴尬的是,业务… · 2026/11/4 14:56:32
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38