-
Notifications
You must be signed in to change notification settings - Fork 0
Personalizing FilmCalc
Most of this lives in the Settings tab, plus a one-time setup screen the first time you import
data. Everything here is stored per-browser (localStorage) unless you export it.
If you haven't saved any films or labs yet, a banner offers 📥 Import Presets… — pick from the
project's built-in film/lab data (grouped by country/city), or upload your own config.yaml. Right
after an import, a Set Up Your Favourites screen walks you through the two things below.
Settings → Default Lab & Service (or the ♥ Set Up Favourites… screen). Pick your usual lab and service tier here, and:
- The Film Lookup headline shows your cost with that lab, noting the actual cheapest option underneath if a different one would save you money.
- The Dev Cost → Per Film view pins your home lab to the top of the list regardless of price.
Leave it as "None" to have both of those always show the theoretical cheapest instead.
The same setup screen (also reachable via Settings → ♥ Set Up Favourites…) lists every saved film with two toggles:
- ✕ Ignore — hides the film everywhere the calculators look (same effect as the "Hide this film from the Calculator" checkbox in Film Setup). Use it for stocks you'll never shoot, without losing the saved data.
- ♥ Favourite — marks stocks you actually shoot. On the Dev Cost → Per Photo view (the one ranked film-first), a favourited film is pinned to the top of the list regardless of price — the same ♥ toggle is also right on each row there, not just in the setup screen.
Separately, tap the ★ star on any lab row in the Dev Cost tab. Starred labs are pinned to the top of every other Dev Cost view (Per Film, Per Lab, Per ISO — everywhere rows are grouped by lab rather than by film), ahead of price order — while the ⭐ "cheapest" marker keeps reflecting true price rank underneath. Handy for keeping "my usual place" visible without it needing to actually be the cheapest.
Settings → Recommended Pick Threshold. In "Labs For This Roll", if the cheapest Hi-Res + Next-Day option costs less than this percentage more than the absolute cheapest, its card is highlighted gold as the recommended pick — the idea being a small premium for both perks is usually worth it. The same threshold drives the equivalent "upgrade" flag on the Dev Cost → Per ISO view. Defaults to 4%; "Cheapest Total" always shows the true cheapest regardless of this setting.
Settings → Currency. Purely a display label in front of every cost shown in the app — it doesn't
convert any numbers. Pick from the list or choose Custom… to type your own (e.g. kr).
Settings → Theme. Custom colour themes shipped in the project's themes/ folder, each defining
both a light and a dark variant so the dark-mode toggle keeps working no matter which theme is active.
The dark/light toggle itself is the icon in the top corner of the app — it follows your system
preference until you change it.
A theme is a YAML file in themes/, listed in themes/index.json. The minimum is a page background,
card background, and accent color, each for light and dark:
label: Ocean
light:
pageBg: "#eff6ff"
cardBg: "#ffffff"
accent: "#0369a1"
dark:
pageBg: "#0b1220"
cardBg: "#111c2e"
accent: "#38bdf8"Beyond that, a theme can optionally recolour seven specific result meanings the app uses everywhere — the cheapest option, a recommended pick, a ★/♥ favourited row, your 🏠 default lab, warning banners (e.g. an aggressive push/pull), danger flags (e.g. over your film's push/pull limit), and the general grouping/input cards (e.g. Film Lookup's "Film" and "Shooting at" blocks, Library's Film/Lab Management panels, the Expired tab's info box):
light:
# ...pageBg/cardBg/accent as above, plus:
cheapestBg: "#e0f2fe" # background of cheapest-option cards
cheapestText: "#0369a1"
recommendedBg: "#fef9c3" # background of recommended-pick / ⭐ cheapest-marker cards
recommendedText: "#a16207"
favourite: "#0891b2" # ★/♥ fill color when something's favourited
defaultLab: "#0369a1" # 🏠 "this is your default lab" note text
warningBg: "#ffedd5" # push/pull warnings, "a cheaper option exists" callouts
warningText: "#9a3412"
dangerBg: "#fee2e2" # over your film's push/pull limit
dangerText: "#b91c1c"
sectionBg: "#f1f5f9" # generic grouping cards (Film/Shooting At/Expired info/Library panels)
sectionText: "#334155"
dark:
# same keys, dark-mode valuesEvery one of these is optional — leave any out and that piece keeps the app's normal green/gold/red/
indigo/slate colors, even while the rest of your theme is active. See themes/ocean.yaml for a theme
that sets all of them, and themes/sepia.yaml for one that only sets the original three (proving the
two styles mix freely).
Settings → Export Data:
-
Export Everything writes a single
config.yamlwith your films, labs, and settings — the exact format the app reads on load, so it can be dropped straight into a fresh browser or a self-hosted instance. - Export Films Only / Labs Only asks for a preset name, saved inside the file, so it shows up under that name when re-imported — handy for sharing just your own list with someone else, or for contributing it to the project's public presets.
Settings → Import Data offers the same two paths in reverse: pick from the project's built-in
presets, or upload/drag-and-drop your own config.yaml, films.yaml, or labs.yaml — multiple files
at once are fine.
If you're self-hosting and the server allows it, Write Live Config to Server appears automatically
and saves your current films/labs/settings straight to config.yaml on the box — no download/upload
round-trip. It only shows up when the app detects write support; the public GitHub Pages build never
shows it, since static hosting has nowhere to write to.
Settings → Delete All Data permanently clears every saved film, lab, and setting this app has
written to your browser — favourites, pins, home lab, currency, theme, everything. Built-in defaults
seeded via config.yaml on a self-hosted instance aren't affected, since those live on the server, not
in your browser. Export a backup first — this can't be undone.