Questions
If your question isn't here, the support page has a way to reach a human.
Getting started
What is RecipeLab, exactly?
A reference app for Fujifilm's custom image-quality settings, the ones you save to a numbered slot in camera. Instead of trial and error, RecipeLab gives you 47 built-in starting points, each engineered against a real film stock or a rangefinder-inspired look, and checked against your specific camera's hardware limits.
Do I need a specific Fujifilm camera?
No, but which recipes are fully usable depends on your sensor generation: older X-Trans sensors can't do everything newer ones can (Acros, Clarity and Colour Chrome Blue are progressively newer additions). Select your camera in the app and Smart Sort reorders the library: what's fully compatible, what needs a substitution, and what genuinely can't be done on your body, with the reason stated for each.
Do I need an account?
No. There's no sign-up and no login. If you turn on iCloud Sync, it works through your own iCloud account; nothing else is needed.
Does it work offline?
Yes. The recipe library is bundled with the app, your own variations and collections are stored on the device, and Vibe Builder's generation runs entirely on-device. Only iCloud Sync needs a connection, and that's opt-in.
Recipes
What's the difference between Inspired and Film Stock?
Inspired recipes reference a rangefinder body or shooting era: the tonal character, not a literal reproduction. Film Stock recipes are matched to the character of a specific film emulation, like Tri-X or Portra 400, using Fujifilm's own film simulations as the base.
What do the badges on a setting mean?
Tap any badge on a loaded recipe to read the reasoning behind that specific value: why the shadows are lifted, why that grain level, why that film simulation. It's not a repeat of the value; it's the "why."
What is "the −4 Rule"?
Every recipe sets Noise Reduction to −4. Fujifilm ships cameras at 0, which is far cleaner than film ever looked. Pulling it down lets the sensor's own noise read as organic grain instead of digital smoothing.
Can I make a recipe my own?
Yes. Tweak any recipe into a saved Variation. Fields your camera can't support are disabled rather than silently accepted. Variations, Collections and edit history are all yours to manage from there.
Vibe Builder
What is Vibe Builder, and where does my prompt go?
Describe a mood ("moody street portraits at dusk") and Vibe Builder generates a recipe for you. It runs entirely on Apple's on-device Foundation Models framework. Nothing about your prompt, your camera, or the result is sent anywhere. There is currently no cloud option at all in the app.
Why is Vibe Builder unavailable on my device?
On-device generation needs Apple Intelligence, which needs specific hardware and an explicit setting turned on. If it's unavailable, the app tells you which of those is the reason (unsupported hardware, Apple Intelligence off, or the on-device model still downloading) rather than a single unhelpful "not available."
Your data
Where is my data stored?
On your device. If you turn on iCloud Sync, your variations, collections, notes, camera-slot assignments and history also sync to the private database of your own iCloud account, but never the bundled recipe library, which stays a read-only part of the app itself. See the privacy policy for the full detail.
Can I get my variations out, or move them to another device by hand?
Yes. Export your variations locally, in plain or passphrase-encrypted form, from Settings. You can also import a backup, or a single recipe file someone shares with you.
What format does an import file need to be in?
Plain JSON, in one of two shapes depending on which button you use. There's no way to hand-author an encrypted backup (that path only accepts a file this app produced itself), but both of the plain formats below can be written by hand if you're building your own tooling.
"Import Variations" expects a JSON array, one or more entries:
[
{
"id": "var__1735689600000_a1b2",
"parentKey": "m10-rich",
"name": "My Rainy Day Look",
"createdAt": 1735689600000,
"data": {
"title": "My Rainy Day Look",
"film": "Classic Chrome",
"dr": "DR200",
"wb": "R: -1, B: +2",
"high": "-1",
"shad": "+2",
"color": "-1",
"sharp": "+1",
"nr": "-4",
"grain": "Weak",
"chrome_blue": "Off",
"tip": "A custom tweak for overcast city streets.",
"category": "variation",
"compatibility": ["x-trans-3", "x-trans-4", "x-trans-5"],
"tags": ["custom", "overcast"]
}
}
]
"Import .rlr" expects a single object, the same data shape wrapped differently:
{
"version": 1,
"exported_at": 1735689600000,
"id": "var__1735689600000_a1b2",
"name": "My Rainy Day Look",
"parentKey": "m10-rich",
"createdAt": 1735689600000,
"data": {
"title": "My Rainy Day Look",
"film": "Classic Chrome",
"dr": "DR200",
"wb": "R: -1, B: +2",
"high": "-1",
"shad": "+2",
"color": "-1",
"sharp": "+1",
"nr": "-4",
"grain": "Weak",
"chrome_blue": "Off",
"tip": "A custom tweak for overcast city streets.",
"category": "variation",
"compatibility": ["x-trans-3", "x-trans-4", "x-trans-5"],
"tags": ["custom", "overcast"]
}
}
Field notes:
- id
- Non-empty, ≤80 characters. The convention is
var__<epoch-ms>_<4 random chars>, but any unique string works. - name
- Non-empty, ≤80 characters, shown in the app's UI.
- parentKey
- Optional. The bundled recipe key this was forked from (e.g.
m10-rich), or omit it if standalone. - createdAt / exported_at
- Epoch milliseconds, not seconds and not an ISO date string.
- dr
"DR100","DR200", or"DR400".- high / shad / nr
- Signed strings,
"-4"to"+4". - sharp
- Signed string,
"-2"to"+4"(a narrower range than the others). - color
- Signed string,
"-4"to"+4", or"N/A"for a monochrome film. - wb
"R: <signed>, B: <signed>", or"N/A"for monochrome.- grain
"None","Weak", or"Strong".- chrome_blue
- Note the underscore:
"Off","Weak", or"Strong". - compatibility
- Array of sensor-generation ids:
x-trans-2,x-trans-3,x-trans-4,x-trans-5,gfx-50,gfx-100,gfx-100-ii. - tags
- Free-form strings, capped at 50 entries of 200 characters each.
- title, tip, category
- Free-form strings, capped at 200 characters each.
One asymmetry worth knowing: .rlr requires title, film, dr, high, shad and nr to be present in data, and names the specific missing field if one isn't. "Import Variations" enforces no such requirement: only id/name are checked, so a variation missing a field still imports, just blank in the app.
Is RecipeLab affiliated with Fujifilm, or with any camera or film brand?
No. RecipeLab names real Fujifilm sensor generations because compatibility is calibrated against them, and Film Stock recipes name real film stocks (Tri-X, Portra, Velvia and so on) because that's the look each one is matched to. It does not name any other camera brand or body: Inspired recipes describe a rangefinder era or shooting style, not a specific model. RecipeLab isn't affiliated with, endorsed by, or sponsored by Fujifilm or any film manufacturer named in the app.