diff --git a/apps/web/src/components/tools/restore-photo-settings.tsx b/apps/web/src/components/tools/restore-photo-settings.tsx index 172c8860..48af25bc 100644 --- a/apps/web/src/components/tools/restore-photo-settings.tsx +++ b/apps/web/src/components/tools/restore-photo-settings.tsx @@ -4,14 +4,6 @@ import { ProgressCard } from "@/components/common/progress-card"; import { useToolProcessor } from "@/hooks/use-tool-processor"; import { useFileStore } from "@/stores/file-store"; -type Mode = "auto" | "light" | "heavy"; - -const MODES: { id: Mode; label: string; desc: string }[] = [ - { id: "light", label: "Light", desc: "Gentle touch, preserves details" }, - { id: "auto", label: "Auto", desc: "Balanced restoration" }, - { id: "heavy", label: "Heavy", desc: "Aggressive repair for severe damage" }, -]; - export interface RestorePhotoControlsProps { settings?: Record; onChange?: (settings: Record) => void; @@ -21,20 +13,19 @@ export function RestorePhotoControls({ settings: initialSettings, onChange, }: RestorePhotoControlsProps) { - const [mode, setMode] = useState("auto"); const [scratchRemoval, setScratchRemoval] = useState(true); const [faceEnhancement, setFaceEnhancement] = useState(true); const [fidelity, setFidelity] = useState(70); const [denoise, setDenoise] = useState(true); - const [denoiseStrength, setDenoiseStrength] = useState(40); + const [denoiseStrength, setDenoiseStrength] = useState(25); const [colorize, setColorize] = useState(false); + const [colorizeStrength, setColorizeStrength] = useState(85); // One-time init from pipeline settings const initializedRef = useRef(false); useEffect(() => { if (!initialSettings || initializedRef.current) return; initializedRef.current = true; - if (initialSettings.mode != null) setMode(initialSettings.mode as Mode); if (initialSettings.scratchRemoval != null) setScratchRemoval(Boolean(initialSettings.scratchRemoval)); if (initialSettings.faceEnhancement != null) @@ -44,6 +35,8 @@ export function RestorePhotoControls({ if (initialSettings.denoiseStrength != null) setDenoiseStrength(Number(initialSettings.denoiseStrength)); if (initialSettings.colorize != null) setColorize(Boolean(initialSettings.colorize)); + if (initialSettings.colorizeStrength != null) + setColorizeStrength(Number(initialSettings.colorizeStrength)); }, [initialSettings]); // Emit settings on change @@ -54,44 +47,26 @@ export function RestorePhotoControls({ useEffect(() => { onChangeRef.current?.({ - mode, scratchRemoval, faceEnhancement, fidelity: fidelity / 100, denoise, denoiseStrength, colorize, + colorizeStrength, }); - }, [mode, scratchRemoval, faceEnhancement, fidelity, denoise, denoiseStrength, colorize]); - - const activeMode = MODES.find((m) => m.id === mode); + }, [ + scratchRemoval, + faceEnhancement, + fidelity, + denoise, + denoiseStrength, + colorize, + colorizeStrength, + ]); return (
- {/* Mode selector */} -
-

Restoration Mode

-
- {MODES.map((m) => ( - - ))} -
- {activeMode &&

{activeMode.desc}

} -
- -
- {/* Feature toggles */}
{/* Scratch Removal */} @@ -205,6 +180,29 @@ export function RestorePhotoControls({ className="h-4 w-4 rounded border-muted-foreground accent-primary" /> + + {/* Colorize strength slider */} + {colorize && ( +
+
+

Colorize Strength

+ {colorizeStrength}% +
+ setColorizeStrength(Number(e.target.value))} + className="w-full h-1.5 rounded-full appearance-none bg-muted accent-primary" + /> +
+ Subtle + Vivid +
+
+ )}
); diff --git a/packages/shared/src/i18n/en.ts b/packages/shared/src/i18n/en.ts index af0a390c..cb895f03 100644 --- a/packages/shared/src/i18n/en.ts +++ b/packages/shared/src/i18n/en.ts @@ -201,6 +201,7 @@ export const en = { }, pipeline: { name: "Pipeline Builder", description: "Chain multiple tools into a workflow" }, }, + colorizeStrength: "Colorize Strength", imageEnhancement: { deepEnhance: "Deep Enhance (AI)", deepEnhanceDescription: "Removes noise and artifacts using AI",