6adf0b5933
Sims: PROVIA->PROVIPES, VELVIA->VELVIPES, CLASSIC CHROME->CLASSIC CHRIPES, CLASSIC NEG->CLASSIC NEGIPES, ASTIA->ASTIPES, ETERNA->ETERNIPES, ACROS->ACRIPES, LEICA->LEITZ STREETLIFE. Bundled recipes follow: PROVIPES STD, VELVIPES VIVID, ACRIPES MONO, CLASSIC NEGIPES. Ids and baseFilters untouched, so saved sessions keep resolving.
289 lines
7.2 KiB
TypeScript
289 lines
7.2 KiB
TypeScript
import { Recipe, ColorAdjustments } from '../types';
|
|
|
|
// Fallback values for every adjustable knob. Old recipes/sessions persisted in
|
|
// AsyncStorage lack the newer fields — merge this under stored JSON to keep
|
|
// every adjustment well-defined (see storageUtils.getAllRecipes / App session).
|
|
export const DEFAULT_ADJUSTMENTS: ColorAdjustments = {
|
|
exposure: 0,
|
|
contrast: 0,
|
|
saturation: 0,
|
|
temperature: 5500,
|
|
tint: 0,
|
|
wbRed: 0,
|
|
wbBlue: 0,
|
|
highlight: 0,
|
|
shadow: 0,
|
|
denoise: 0,
|
|
clarity: 0,
|
|
grain: 0,
|
|
colorChrome: 'none',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
};
|
|
|
|
// Standard Fuji film simulations. These are the fixed "look" presets shown at
|
|
// the front of the PRESETS chip row: tapping one applies the simulation via
|
|
// its baseFilter colour matrix ONLY — every other knob resets to its neutral
|
|
// default (0 / auto) so the sim is a clean starting point, never a baked
|
|
// recipe. Any look beyond the matrix (grain, DR, CC, contrast…) is added by
|
|
// the user afterwards.
|
|
export interface FilmSim {
|
|
id: string; // Recipe-like id used only while the sim is the current selection
|
|
name: string;
|
|
baseFilter: Recipe['baseFilter'];
|
|
adjustments: ColorAdjustments;
|
|
}
|
|
|
|
export const FILM_SIMS: FilmSim[] = [
|
|
{ id: 'sim-provia', name: 'PROVIPES', baseFilter: 'provia', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
{ id: 'sim-velvia', name: 'VELVIPES', baseFilter: 'velvia', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
{ id: 'sim-classic-chrome', name: 'CLASSIC CHRIPES', baseFilter: 'classic-chrome', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
{ id: 'sim-classic-neg', name: 'CLASSIC NEGIPES', baseFilter: 'classic-neg', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
{ id: 'sim-astia', name: 'ASTIPES', baseFilter: 'astia', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
{ id: 'sim-eterna', name: 'ETERNIPES', baseFilter: 'eterna', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
{ id: 'sim-acros', name: 'ACRIPES', baseFilter: 'monochrome', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
// Leica digital look (M/Q/SL) is NOT a film stock: neutral-but-warm colour
|
|
// with restrained saturation, deep open shadows and gentle highlight rolloff.
|
|
// Matrix-only here (like every sim) — the tonal half lives in the leica
|
|
// matrix (mild contrast + warm neutrality); users stack DR/tone on top.
|
|
{ id: 'sim-leica', name: 'LEITZ STREETLIFE', baseFilter: 'leica', adjustments: { ...DEFAULT_ADJUSTMENTS } },
|
|
];
|
|
|
|
// Film sim → full Recipe (never persisted; sims are applied on the fly).
|
|
export function filmSimToRecipe(sim: FilmSim): Recipe {
|
|
return {
|
|
id: sim.id,
|
|
name: sim.name,
|
|
baseFilter: sim.baseFilter,
|
|
adjustments: { ...sim.adjustments },
|
|
frameId: 'none',
|
|
useGeotag: true,
|
|
};
|
|
}
|
|
|
|
export const DEFAULT_RECIPES: Recipe[] = [
|
|
{
|
|
id: 'classic-neg-default',
|
|
name: 'CLASSIC NEGIPES.',
|
|
baseFilter: 'classic-neg',
|
|
adjustments: {
|
|
exposure: 2,
|
|
contrast: 1,
|
|
saturation: -1,
|
|
temperature: 6300,
|
|
tint: 2,
|
|
highlight: -2,
|
|
shadow: 1,
|
|
denoise: 1,
|
|
clarity: 2,
|
|
grain: 4,
|
|
colorChrome: 'weak',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'velvia-default',
|
|
name: 'VELVIPES VIVID',
|
|
baseFilter: 'velvia',
|
|
adjustments: {
|
|
exposure: 0,
|
|
contrast: 2,
|
|
saturation: 3,
|
|
temperature: 5500,
|
|
tint: 0,
|
|
highlight: 1,
|
|
shadow: -1,
|
|
denoise: 2,
|
|
clarity: 4,
|
|
grain: 1,
|
|
colorChrome: 'strong',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'provia-default',
|
|
name: 'PROVIPES STD',
|
|
baseFilter: 'provia',
|
|
adjustments: {
|
|
exposure: 1,
|
|
contrast: 0,
|
|
saturation: 0,
|
|
temperature: 5000,
|
|
tint: 0,
|
|
highlight: 0,
|
|
shadow: 0,
|
|
denoise: 2,
|
|
clarity: 1,
|
|
grain: 2,
|
|
colorChrome: 'none',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'acros-default',
|
|
name: 'ACRIPES MONO',
|
|
baseFilter: 'monochrome',
|
|
adjustments: {
|
|
exposure: 0,
|
|
contrast: 4,
|
|
saturation: 0,
|
|
temperature: 5000,
|
|
tint: 0,
|
|
highlight: 3,
|
|
shadow: -2,
|
|
denoise: 0,
|
|
clarity: 3,
|
|
grain: 6,
|
|
colorChrome: 'none',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'retro-amber-default',
|
|
name: 'RETRO AMBER 🏮',
|
|
baseFilter: 'classic-neg',
|
|
adjustments: {
|
|
exposure: 3,
|
|
contrast: 2,
|
|
saturation: 1,
|
|
temperature: 7500,
|
|
tint: -2,
|
|
highlight: -3,
|
|
shadow: 2,
|
|
denoise: 3,
|
|
clarity: -2,
|
|
grain: 5,
|
|
colorChrome: 'strong',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'classic-white',
|
|
useGeotag: true,
|
|
},
|
|
|
|
{
|
|
id: 'cinema-spring-default',
|
|
name: 'CINEMA SPRING',
|
|
baseFilter: 'none',
|
|
adjustments: {
|
|
exposure: 0,
|
|
contrast: 1,
|
|
saturation: 1,
|
|
temperature: 5800,
|
|
tint: 0,
|
|
highlight: -1,
|
|
shadow: 1,
|
|
denoise: 2,
|
|
clarity: 1,
|
|
grain: 3,
|
|
colorChrome: 'none',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
cinema: 'spring',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'cinema-summer-default',
|
|
name: 'CINEMA SUMMER',
|
|
baseFilter: 'none',
|
|
adjustments: {
|
|
exposure: 0,
|
|
contrast: 2,
|
|
saturation: 2,
|
|
temperature: 6000,
|
|
tint: -1,
|
|
highlight: 1,
|
|
shadow: -1,
|
|
denoise: 1,
|
|
clarity: 2,
|
|
grain: 2,
|
|
colorChrome: 'weak',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
cinema: 'summer',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'cinema-autumn-default',
|
|
name: 'CINEMA AUTUMN',
|
|
baseFilter: 'none',
|
|
adjustments: {
|
|
exposure: 0,
|
|
contrast: 1,
|
|
saturation: 2,
|
|
temperature: 7200,
|
|
tint: -2,
|
|
highlight: -2,
|
|
shadow: 1,
|
|
denoise: 2,
|
|
clarity: 0,
|
|
grain: 4,
|
|
colorChrome: 'weak',
|
|
colorChromeBlue: 'none',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
cinema: 'autumn',
|
|
useGeotag: true,
|
|
},
|
|
{
|
|
id: 'cinema-winter-default',
|
|
name: 'CINEMA WINTER',
|
|
baseFilter: 'none',
|
|
adjustments: {
|
|
exposure: 1,
|
|
contrast: -1,
|
|
saturation: -2,
|
|
temperature: 4500,
|
|
tint: 2,
|
|
highlight: -2,
|
|
shadow: 2,
|
|
denoise: 3,
|
|
clarity: -2,
|
|
grain: 3,
|
|
colorChrome: 'none',
|
|
colorChromeBlue: 'weak',
|
|
dynamicRange: 'auto',
|
|
sharpening: 0,
|
|
exposureCompensation: 0,
|
|
},
|
|
frameId: 'none',
|
|
cinema: 'winter',
|
|
useGeotag: true,
|
|
},
|
|
];
|