上个月我把一卷过期两年的 Portra 400 装进了那台 1978 年的旁轴。三十六张,花了整整三周才拍完。同一段时间里,我用图像模型生成了大概两千张图。
这个对比让我意识到,颗粒和分辨率从来不是胶片真正的价值。它的价值在于约束:每一次按下快门都有成本,于是每一次按下之前都有一段犹豫。
一卷 36 张
三十六这个数字决定了拍摄的节奏。你会在街角停下,等光线移过墙面,等那个骑车的人进入画面。等待本身就是取景的一部分,模型没有这个过程,它只有结果。
巴特在《明室》里说,照片的「刺点」是那个刺痛观看者的偶然细节。偶然,恰恰是生成模型最难给出的东西,因为它从概率里采样,而偶然是概率之外的事。
模型看见了什么
但我并不打算拒绝 AI。过去十年我扫描了大约四万张底片,它们躺在硬盘里,几乎从不被翻开。问题不在于照片,而在于找不到。
档案的价值不在于保存了多少,而在于你能多快找到需要的那一张。
于是我做了 Contact Sheet,一个完全离线运行的小工具。它用本地视觉模型给每张扫描件写一句中文描述,存进 XMP 元数据里,系统自带的搜索就能直接用。
把底片交给机器
核心逻辑只有几行。重点是 describe() 不联网,照片不会离开这台电脑:
from pathlib import Path
import contact_sheet as cs
model = cs.load("local-vlm-7b-q4") # 本地运行,不上传
for scan in Path("~/scans/2026").expanduser().glob("*.tif"):
caption = model.describe(scan, lang="zh")
cs.write_xmp(scan, caption)
跑完一晚上,现在我可以搜「下雨天 公交站 红伞」,一秒之内找到 2017 年在杭州拍的那张。
犹豫的价值
所以我的结论有点矛盾:生成交给模型,整理也交给模型,但按下快门这件事,我想继续留给自己。那几秒钟的犹豫,是我在这个越来越快的世界里,少数还能主动放慢的时刻。
下一卷是 Tri-X 400。拍完我会在这里更新。