| Server IP : 217.154.3.148 / Your IP : 216.73.216.90 Web Server : Apache System : Linux blissful-wright.217-154-3-148.plesk.page 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64 User : gracious-boyd_hfhh1h8vo9n ( 10000) PHP Version : 8.3.31 Disable Function : opcache_get_status MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/vhosts/gracious-boyd.217-154-3-148.plesk.page/nextjs/lib/occluder/ |
Upload File : |
import fs from 'node:fs'
import path from 'node:path'
export type OccluderDefaultsSlot = 'baseline' | 'tuned'
type OccluderDefaults = {
params: Record<string, number>
occluderEnv: Record<string, number>
}
const PARAMS_FILE = path.resolve(process.cwd(), 'models', 'occluder', 'params.json')
const FALLBACK_DEFAULTS: Record<OccluderDefaultsSlot, OccluderDefaults> = {
baseline: {
params: {
maskGrowPx: 8,
maskPreBlur: 1,
maskThresh: 0.4,
maskFinalBlur: 2,
occluderShrinkPx: 2,
occluderEdgeTrimPx: 4,
occluderLeakGuardPx: 2,
tileFeatherPx: 0,
occluderFeatherPx: 1,
},
occluderEnv: {
OCCLUDER_SAM_MAX_LEAK: 0.2,
OCCLUDER_SAM_LEAK_WEIGHT: 1.5,
OCCLUDER_SAM_BAND_RADIUS: 8,
OCCLUDER_SAM_NEG_ERODE: 1,
OCCLUDER_SAM_POS_BAND_ONLY: 1,
OCCLUDER_SAM_MIN_OVERLAP: 0.05,
OCCLUDER_SAM_NEG_Q: 0.6,
OCCLUDER_SAM_POS_GRAD_Q: 0.85,
OCCLUDER_SAM_MIN_OUTSIDE: 0.005,
OCCLUDER_SAM_BOX_MARGIN: 40,
OCCLUDER_SAM_MAX_TILE_RATIO: 0.9,
OCCLUDER_SAM_TOP_K: 1,
OCCLUDER_SAM_EDGE_WEIGHT: 0.25,
OCCLUDER_SAM_EDGE_RADIUS: 1,
OCCLUDER_SAM_PATCH_FNS: 0,
},
},
tuned: {
params: {
maskGrowPx: 8,
maskPreBlur: 1,
maskThresh: 0.4,
maskFinalBlur: 2,
occluderShrinkPx: 2,
occluderEdgeTrimPx: 4,
occluderLeakGuardPx: 2,
tileFeatherPx: 0,
occluderFeatherPx: 1,
},
occluderEnv: {
OCCLUDER_SAM_MAX_LEAK: 0.2,
OCCLUDER_SAM_LEAK_WEIGHT: 1.5,
OCCLUDER_SAM_BAND_RADIUS: 8,
OCCLUDER_SAM_NEG_ERODE: 1,
OCCLUDER_SAM_POS_BAND_ONLY: 1,
OCCLUDER_SAM_MIN_OVERLAP: 0.05,
OCCLUDER_SAM_NEG_Q: 0.6,
OCCLUDER_SAM_POS_GRAD_Q: 0.85,
OCCLUDER_SAM_MIN_OUTSIDE: 0.005,
OCCLUDER_SAM_BOX_MARGIN: 40,
OCCLUDER_SAM_MAX_TILE_RATIO: 0.9,
OCCLUDER_SAM_TOP_K: 1,
OCCLUDER_SAM_EDGE_WEIGHT: 0.25,
OCCLUDER_SAM_EDGE_RADIUS: 1,
OCCLUDER_SAM_PATCH_FNS: 1,
},
},
}
let cached: Record<OccluderDefaultsSlot, OccluderDefaults> | null = null
function loadDefaultsFile(): Record<OccluderDefaultsSlot, OccluderDefaults> {
if (cached) return cached
try {
const contents = fs.readFileSync(PARAMS_FILE, 'utf8')
const parsed = JSON.parse(contents) as Partial<Record<OccluderDefaultsSlot, OccluderDefaults>>
cached = {
baseline: parsed.baseline ?? FALLBACK_DEFAULTS.baseline,
tuned: parsed.tuned ?? FALLBACK_DEFAULTS.tuned,
}
} catch {
cached = FALLBACK_DEFAULTS
}
return cached
}
export function resolveOccluderSlot(slot?: string): OccluderDefaultsSlot {
return slot?.toLowerCase() === 'tuned' ? 'tuned' : 'baseline'
}
export function getOccluderDefaults(slot?: string): OccluderDefaults {
const chosen = resolveOccluderSlot(slot)
const defaults = loadDefaultsFile()
return defaults[chosen] ?? defaults.baseline
}