Add video sorting, reference thumbnails, theme/i18n, menu, DnD/paste, presets
Feature work on top of the initial organizer: - Videos: .mp4/.mov/.avi/.mkv/.webm/.m4v sorted into output/Movie/YYYY/MM - Profiles: reference-image thumbnail cards via a secure photoai-media:// protocol (serves only registered reference images); per-thumbnail delete; add via click, drag & drop, or paste (Ctrl+V) using webUtils.getPathForFile + a byte-based addReferenceData path for clipboard images - Presets: local person library (max 5) saved to userData; one-click apply into active profiles; reusing stored descriptors (no recompute) - Theme: dark/light with dark default (Tailwind class strategy) - i18n: ko/en table-based localization; first-run onboarding to pick language + theme; English-neutral "Unsorted" folder (was [미정]) - App menu: File/Edit/View/Window/Help, localized; Help opens a detailed, theme-aware user guide window - UI: History block scrolls internally (no whole-window scroll); threshold/concurrency tooltips; generic example name - Settings persisted to userData/settings.json; menu + renderer kept in sync - Docs: NextGen Photo AI feasibility review + Phase 0/1 roadmap All typecheck/tests (12) /build green; boot smoke verified. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+38
-2
@@ -3,8 +3,24 @@
|
||||
/** 처리 대상 이미지 확장자 (소문자, 점 포함) */
|
||||
export const SUPPORTED_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.webp'] as const
|
||||
|
||||
/** 미검출/인식실패 사진이 들어가는 폴더명 */
|
||||
export const UNMATCHED_FOLDER = '[미정]'
|
||||
/** 처리 대상 영상 확장자 (소문자, 점 포함) */
|
||||
export const SUPPORTED_VIDEO_EXTENSIONS = [
|
||||
'.mp4',
|
||||
'.mov',
|
||||
'.avi',
|
||||
'.mkv',
|
||||
'.webm',
|
||||
'.m4v'
|
||||
] as const
|
||||
|
||||
/** 미검출/인식실패 사진이 들어가는 폴더명 (언어 중립 — 영어 모드에서 한글 노출 방지) */
|
||||
export const UNMATCHED_FOLDER = 'Unsorted'
|
||||
|
||||
/** 영상 파일이 들어가는 폴더명 (얼굴인식 없이 날짜 기준 이동) */
|
||||
export const MOVIE_FOLDER = 'Movie'
|
||||
|
||||
/** 로컬 참조 이미지를 UI 창에 안전하게 표시하기 위한 커스텀 프로토콜 스킴 */
|
||||
export const MEDIA_SCHEME = 'photoai-media'
|
||||
|
||||
/** 로그 폴더명 (출력 루트 하위) */
|
||||
export const LOG_FOLDER = '_PhotoAI_logs'
|
||||
@@ -12,9 +28,18 @@ export const LOG_FOLDER = '_PhotoAI_logs'
|
||||
/** 프로필 영속화 파일명 (userData 하위) */
|
||||
export const PROFILE_STORE_FILE = 'profiles.json'
|
||||
|
||||
/** 앱 설정 영속화 파일명 (userData 하위) */
|
||||
export const SETTINGS_FILE = 'settings.json'
|
||||
|
||||
/** 프리셋(인물 라이브러리) 영속화 파일명 (userData 하위, 로컬 전용) */
|
||||
export const PRESET_STORE_FILE = 'presets.json'
|
||||
|
||||
/** 최대 프로필 인원 (PRD) */
|
||||
export const MAX_PROFILES = 3
|
||||
|
||||
/** 최대 프리셋(저장 인물) 수 */
|
||||
export const MAX_PRESETS = 5
|
||||
|
||||
/** 기본 잡 옵션 */
|
||||
export const DEFAULT_JOB_OPTIONS = {
|
||||
matchThreshold: 0.5,
|
||||
@@ -32,11 +57,22 @@ export const IPC = {
|
||||
PROFILES_UPSERT: 'profiles:upsert',
|
||||
PROFILES_REMOVE: 'profiles:remove',
|
||||
PROFILES_ADD_REFERENCE: 'profiles:addReference',
|
||||
PROFILES_ADD_REFERENCE_DATA: 'profiles:addReferenceData',
|
||||
PROFILES_REMOVE_REFERENCE: 'profiles:removeReference',
|
||||
PROFILES_APPLY_PRESET: 'profiles:applyPreset',
|
||||
// 프리셋(인물 라이브러리)
|
||||
PRESETS_LIST: 'presets:list',
|
||||
PRESETS_SAVE_FROM: 'presets:saveFrom',
|
||||
PRESETS_REMOVE: 'presets:remove',
|
||||
DIALOG_PICK_SOURCE: 'dialog:pickSource',
|
||||
DIALOG_PICK_OUTPUT: 'dialog:pickOutput',
|
||||
DIALOG_PICK_IMAGES: 'dialog:pickImages',
|
||||
JOB_RUN: 'job:run',
|
||||
JOB_CANCEL: 'job:cancel',
|
||||
// 설정
|
||||
SETTINGS_GET: 'settings:get',
|
||||
SETTINGS_SET: 'settings:set',
|
||||
SETTINGS_CHANGED: 'settings:changed',
|
||||
// Main → UI (send)
|
||||
JOB_PROGRESS: 'job:progress',
|
||||
JOB_FILE_PROCESSED: 'job:fileProcessed',
|
||||
|
||||
Reference in New Issue
Block a user