8a8c10248c
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>
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { resolve } from 'node:path'
|
|
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
|
|
import react from '@vitejs/plugin-react'
|
|
|
|
export default defineConfig({
|
|
main: {
|
|
plugins: [externalizeDepsPlugin()],
|
|
resolve: {
|
|
alias: { '@shared': resolve('src/shared') }
|
|
},
|
|
build: {
|
|
rollupOptions: {
|
|
input: { index: resolve('src/main/index.ts') }
|
|
}
|
|
}
|
|
},
|
|
preload: {
|
|
plugins: [externalizeDepsPlugin()],
|
|
build: {
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve('src/preload/index.ts'),
|
|
inference: resolve('src/preload/inference.ts')
|
|
}
|
|
}
|
|
}
|
|
},
|
|
renderer: {
|
|
root: '.',
|
|
resolve: {
|
|
alias: {
|
|
'@shared': resolve('src/shared'),
|
|
'@renderer': resolve('src/renderer')
|
|
}
|
|
},
|
|
plugins: [react()],
|
|
build: {
|
|
rollupOptions: {
|
|
input: {
|
|
// UI 창 + 숨김 추론 창, 두 개의 HTML 엔트리
|
|
main_window: resolve('src/renderer/index.html'),
|
|
inference_window: resolve('src/inference/index.html')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|