Initial commit: AI Photo Organizer (Electron + face-api)
Local-first photo organizer that auto-sorts images by face recognition and EXIF capture date. - Electron app with 3-process split: Main (Node) / UI Renderer (React) / hidden Inference Renderer (face-api + WebGL) - Core pipeline: scan -> face match + EXIF -> path build -> atomic move/copy - Move = copy -> verify -> delete; auto-rename on filename collision - 1st-registered profile = move, others = copy; unmatched -> [미정]/YYYY/MM - EXIF date with mtime fallback - Vitest unit tests (pathBuilder / fileOps / concurrency) all green - electron-builder config for Windows (nsis) + macOS (dmg) - Docs: PRD / DECISIONS / ARCHITECTURE Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
// 전 프로세스 공유 상수
|
||||
|
||||
/** 처리 대상 이미지 확장자 (소문자, 점 포함) */
|
||||
export const SUPPORTED_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.webp'] as const
|
||||
|
||||
/** 미검출/인식실패 사진이 들어가는 폴더명 */
|
||||
export const UNMATCHED_FOLDER = '[미정]'
|
||||
|
||||
/** 로그 폴더명 (출력 루트 하위) */
|
||||
export const LOG_FOLDER = '_PhotoAI_logs'
|
||||
|
||||
/** 프로필 영속화 파일명 (userData 하위) */
|
||||
export const PROFILE_STORE_FILE = 'profiles.json'
|
||||
|
||||
/** 최대 프로필 인원 (PRD) */
|
||||
export const MAX_PROFILES = 3
|
||||
|
||||
/** 기본 잡 옵션 */
|
||||
export const DEFAULT_JOB_OPTIONS = {
|
||||
matchThreshold: 0.5,
|
||||
concurrency: 3,
|
||||
detector: 'ssd' as const
|
||||
}
|
||||
|
||||
/** 추론 시 이미지 장변 최대 픽셀 (다운스케일 기준) */
|
||||
export const MAX_IMAGE_DIMENSION = 1024
|
||||
|
||||
/** IPC 채널명 */
|
||||
export const IPC = {
|
||||
// UI → Main (invoke)
|
||||
PROFILES_LIST: 'profiles:list',
|
||||
PROFILES_UPSERT: 'profiles:upsert',
|
||||
PROFILES_REMOVE: 'profiles:remove',
|
||||
PROFILES_ADD_REFERENCE: 'profiles:addReference',
|
||||
DIALOG_PICK_SOURCE: 'dialog:pickSource',
|
||||
DIALOG_PICK_OUTPUT: 'dialog:pickOutput',
|
||||
DIALOG_PICK_IMAGES: 'dialog:pickImages',
|
||||
JOB_RUN: 'job:run',
|
||||
JOB_CANCEL: 'job:cancel',
|
||||
// Main → UI (send)
|
||||
JOB_PROGRESS: 'job:progress',
|
||||
JOB_FILE_PROCESSED: 'job:fileProcessed',
|
||||
JOB_DONE: 'job:done',
|
||||
JOB_ERROR: 'job:error',
|
||||
// Main ↔ Inference
|
||||
INFER_READY: 'infer:ready',
|
||||
INFER_DETECT: 'infer:detect',
|
||||
INFER_DESCRIBE: 'infer:describe',
|
||||
INFER_INIT: 'infer:init'
|
||||
} as const
|
||||
Reference in New Issue
Block a user