settings.json
Some settings are about the app; some are about the photographs. The second kind lives here, at the library root, so it travels with the library and stays readable — and editable — in a text editor with Winder nowhere in sight.
{
"version": 1,
"scan": {
"width": 3130,
"height": 2075,
"dividerFallbackPx": 140
},
"output": {
"quality": 95,
"trimRebate": true
},
"gear": {
"film": "kodak-gold-200",
"camera": "pentax-17"
}
}
Every library gets this file, on defaults, the moment it is created — it is the first thing a curious owner opens to see what Winder keeps, and a file that only appears once you change something is a file nobody knows about.
scan
How your lab or scanner delivers a full 35mm frame.
| Key | Default | Notes |
|---|---|---|
width | 3130 | Full-frame scan width in pixels. Must be positive |
height | 2075 | Full-frame scan height in pixels. Must be positive |
dividerFallbackPx | 140 | Bar width assumed when detection fails. ~1.6mm at the default size. Zero is allowed |
width also sets the pixels-per-millimetre Winder reasons in, against the
36mm frame. A zero or negative number is treated as absent rather than carried
through to a divide by zero, so a slip of the keyboard costs the default and
nothing more.
output
| Key | Default | Notes |
|---|---|---|
quality | 95 | JPEG quality. One of two presets: 95 (High) or 80 (Medium) |
trimRebate | true | Shave the dark border off each frame after the cut |
Quality is two presets rather than a number, because the difference between 91 and 94 is not something anyone can see on a scan, while the difference between "keep the grain" and "keep the file small" is. Any other number is read as whichever preset it is nearer, and the snapped value is what gets written back the next time anything is saved.
gear
The film and body the last new roll was given, as catalog ids. People shoot the same stock through the same camera for months, so the next new roll opens on that answer instead of on an empty form.
| Key | Notes |
|---|---|
film | Film catalog id, e.g. kodak-gold-200. Absent when the last roll used Other |
camera | Camera catalog id, e.g. pentax-17. Same |
Ids rather than names: a catalog entry that goes away simply stops being remembered. This is written when a roll is created, never when one is edited — editing an old roll is archaeology, not a statement about what is in the camera now.
Hand-editing
Encouraged. Winder reads what it recognises and defaults the rest, so a typo costs the key it is in and nothing else. A file that won't parse at all falls back to defaults across the board, and is rewritten cleanly on the next change in the app.
Winder re-reads this file on every scan, which happens each time the app resumes. A scanner size changed on the desktop is what the phone cuts with after the next time you open it.
What is not here
Anything about the app rather than the photographs stays on the device, in ordinary platform preferences:
- Theme and language
- App icon
- How many columns the library stream shows — a phone and a Mac reading one library should each keep their own
- Developer mode
- Where the library is, and the security-scoped bookmark that gets back into it. That one can't live in the library for the obvious reason: a note saying where the vault is has nowhere to live but outside it
Upgrading from an older version
Scan geometry, output quality and remembered gear used to live in device preferences. The first library opened after upgrading is seeded from them, so a scanner size somebody measured is carried across rather than quietly reset.
The old preferences are never cleared. If your library was unreachable at that moment — an iCloud Drive that hadn't mounted — the seed is still there for the next library that needs it.
Updated 2026-08-06