边车文件
在磁盘上,一张照片恰好是两个文件:图片本身(WDR-260504-0001-A.jpg),以及紧挨着它、同名的边车文件(WDR-260504-0001-A.json),装着所有扫描仪不可能知道的事。
{
"version": 1,
"id": "9d3a7c2e-8b41-4f0a-b6d5-2e7c9a1f4b30",
"addedAt": "2026-05-04T10:22:31.004",
"capturedAt": "2026-04-28T00:00:00.000",
"favorite": true,
"albums": ["7c1e…", "b204…"],
"camera": "Pentax 17",
"lens": "HD Pentax 25mm f/3.5",
"film": "Kodak Gold 200",
"notes": "推了一档。",
"location": { "lat": 41.9028, "lng": 12.4964, "name": "Rome" },
"source": {
"originalName": "scan_0047.jpg",
"half": "left",
"splitAt": 1565,
"rotation": 0
},
"width": 1490,
"height": 2075
}
字段
| 字段 | 类型 | 说明 |
|---|---|---|
version | int | 恒为 1 |
id | string | UUID v4。缺失时退回文件名 |
addedAt | string | ISO 8601。Winder 归档它的时刻。缺失时退回文件修改时间 |
capturedAt | string | ISO 8601。按下快门的时刻。未设置时不存在 |
favorite | bool | 仅在为 true 时写出 |
albums | string[] | 相册 id。仅在非空时写出 |
camera | string | 当这一帧写明自己的器材时,覆盖胶卷的 |
lens | string | 同上 |
film | string | 同上 |
notes | string | 自由文本 |
location | object | { lat, lng, name? }。lat 或 lng 解析失败则整体丢弃 |
source | object | 裁切的来历。见下文 |
width / height | int | 像素尺寸,导入时记录,好让图库流在解码前就能排版 |
缺失的就保持缺失——Winder 从不写出空字符串、false 的收藏或空的相册列表。
排序优先用 capturedAt,没有则用 addedAt。
有两样东西刻意不在这里
胶卷。 一帧属于哪一卷,取决于它待在哪个文件夹里。什么都不写,所以把这两个文件一起移进另一卷的文件夹,就是移动这一帧的全部操作。
路径。 加载时解析,从不存储。
source——一刀的来历
每一帧裁切出来的照片都记得自己从哪来,所以任何一刀日后都不会成为谜。
| 字段 | 类型 | 说明 |
|---|---|---|
originalName | string | 它出自哪张冲扫件 |
half | string | left、right 或 full——对应文件名里的 A / B / F |
splitAt | int | 分隔条中心在原图上、沿裁切轴的像素偏移。整格导入时不存在 |
rotation | int | 导入时施加的顺时针角度:0、90、180 或 270。仅在非零时写出 |
相册成员关系
成员关系记在这里,用的是 id 而不是名字,所以重命名一个相册只需往 albums.json 写一次,而不必扫过图库里的每一个边车文件——而且两个相册可以同名而不会悄悄合并。
指向本图库并不存在的相册 id 会被原样保留。它们匹配不到任何东西,所以毫无代价;一次把定义同步回来的操作,也会把成员关系一并带回来。
写进文件本身的 EXIF
边车文件不是唯一的一份。Winder 会把一段真实的 EXIF 烙进 JPEG,所以照片离开图库之后,依然说得清是什么拍的。
| EXIF 标签 | 来自 |
|---|---|
Make | 由目录从相机名里拆出的厂商 |
Model | 相机名,原样 |
LensModel | 镜头 |
DateTimeOriginal | capturedAt |
| GPS 经纬度,带半球标记 | location |
UserComment | 胶片——EXIF 没有胶片标签,就放在人能找到的地方 |
ImageDescription | notes |
Software | Winder |
有三件事会触发写入:归档一张新照片(免费——字节本就在内存里)、以会改变该段内容的方式编辑一帧,以及改动一卷的相机、镜头或胶片,那会重写这一卷上的每一帧。
像素永不被触碰。 Winder 就地替换元数据段,而不是解码再编码——每次改信息都重新压缩,会悄悄把一座图库磨损掉。收藏一帧、或把它加进某个相册,什么都不会重写。
每一次 EXIF 失败都是可承受的,而且没有哪一次值得赔上一张照片:不是可改写 JPEG 的字节、或是已经消失的文件,都原样保留它们本来的样子。
手动编辑
尽管改。解析不了的边车文件绝不会藏起它的照片——这一帧会带着从文件自身日期得来的默认值加载,而应用里的下一次编辑会写回一份干净的文件。
更新于 2026-08-06