feat: v1.1 — highlight-weighted metering, settings modal, photo viewer, shutter sound control, cleanup
This commit is contained in:
+23
-1
@@ -5,6 +5,24 @@ export type FrameId = 'none' | 'polaroid' | 'classic-white' | 'cinematic' | 'wal
|
||||
// 2:3 photo (w/h = 2/3). "full" = current fullscreen behaviour (no ratio crop).
|
||||
// Wall Frame ignores the ratio (frame + export keep fullscreen as before).
|
||||
export type AspectRatio = 'full' | '4:3' | '3:2';
|
||||
// Full-frame metering behaviour. Evaluative = the camera's default whole-scene
|
||||
// metering (offset 0). Highlight-weighted protects bright areas by underexposing
|
||||
// (~ -0.7EV) — the camera lib exposes no real metering-mode API, so this is the
|
||||
// closest honest approximation via the existing EV path.
|
||||
export type MeterMode = 'evaluative' | 'highlight';
|
||||
// Camera shutter sound. OS policy may force the click on in some regions;
|
||||
// there is no native volume control (OFF/ON only).
|
||||
export type ShutterSound = 'on' | 'off';
|
||||
// One photo in the in-app session history (recent captures + library exports).
|
||||
// uri = app-cache JPEG; assetId (when savedToLibrary) = the MediaLibrary asset
|
||||
// so the trash button can remove the gallery copy too.
|
||||
export interface PhotoEntry {
|
||||
id: string;
|
||||
uri: string;
|
||||
recipeName: string;
|
||||
savedToLibrary: boolean;
|
||||
assetId?: string | null;
|
||||
}
|
||||
// w/h of the final upright photo for each non-full choice.
|
||||
export const ASPECT_RATIO_W_H: Record<Exclude<AspectRatio, 'full'>, number> = {
|
||||
'4:3': 3 / 4,
|
||||
@@ -16,12 +34,16 @@ export const ASPECT_RATIO_W_H: Record<Exclude<AspectRatio, 'full'>, number> = {
|
||||
// cool tint in shade, plus a seasonal atmospheric haze/fog veil.
|
||||
export type CinemaSeason = 'spring' | 'summer' | 'autumn' | 'winter';
|
||||
|
||||
export type BaseFilter = 'classic-neg' | 'classic-chrome' | 'provia' | 'velvia' | 'astia' | 'eterna' | 'monochrome' | 'none';
|
||||
|
||||
export interface ColorAdjustments {
|
||||
exposure: number; // -10 to +10 (mapped to matrix multiplier or offset)
|
||||
contrast: number; // -10 to +10
|
||||
saturation: number; // -10 to +10
|
||||
temperature: number; // 2500 to 10000 (Kelvin)
|
||||
tint: number; // -10 to +10
|
||||
wbRed?: number; // Fuji WB fine-tune, Red axis (-9..9) — extra red-channel gain
|
||||
wbBlue?: number; // Fuji WB fine-tune, Blue axis (-9..9) — extra blue-channel gain
|
||||
highlight: number; // -10 to +10 (- pulls highlights down / roll, + brightens)
|
||||
shadow: number; // -10 to +10 (+ lifts shadows, - deepens)
|
||||
denoise: number; // 0 to 10 (mapped to blur sigma)
|
||||
@@ -38,7 +60,7 @@ export interface Recipe {
|
||||
id: string;
|
||||
name: string;
|
||||
isCustom?: boolean;
|
||||
baseFilter: 'classic-neg' | 'provia' | 'velvia' | 'monochrome' | 'none';
|
||||
baseFilter: BaseFilter;
|
||||
adjustments: ColorAdjustments;
|
||||
frameId?: FrameId; // e.g. 'none', 'polaroid', 'classic-white', 'cinematic', 'wallframe'
|
||||
cinema?: CinemaSeason | null; // seasonal atmosphere grade (optional)
|
||||
|
||||
Reference in New Issue
Block a user