export const REFINEMENT_DENOISE_MIN = 0.1 export const REFINEMENT_DENOISE_MAX = 0.25 export const REFINEMENT_DENOISE_DEFAULT = 0.18 export function clampRefinementDenoise(raw: unknown, fallback = REFINEMENT_DENOISE_DEFAULT) { const n = Number(raw) if (!Number.isFinite(n)) return fallback return Math.min(REFINEMENT_DENOISE_MAX, Math.max(REFINEMENT_DENOISE_MIN, Math.round(n * 100) / 100)) } export function parseRefineExtensionFrame(raw: unknown, fallback = true) { if (raw === undefined || raw === null || raw === '') return fallback if (typeof raw === 'boolean') return raw const value = String(raw).trim().toLowerCase() if (value === 'true' || value === '1' || value === 'yes') return true if (value === 'false' || value === '0' || value === 'no') return false return fallback } export function parseSaveLosslessAnchor(raw: unknown, fallback = false) { return parseRefineExtensionFrame(raw, fallback) }