From 0b9b2dea8b4b3e3df09c32f2a27f92059cee0822 Mon Sep 17 00:00:00 2001 From: jisangs Date: Fri, 22 May 2026 16:13:36 +0900 Subject: [PATCH] =?UTF-8?q?README.md=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ca4d914 --- /dev/null +++ b/README.md @@ -0,0 +1,87 @@ +# Photo Renamer + +macOS용 Electron 데스크톱 앱입니다. 폴더 안의 이미지 파일을 그리드로 확인하면서 순서를 조정하고, 일괄 이름 변경, 폴더 이동, 삭제를 수행할 수 있습니다. + +## 주요 기능 + +- 이미지 폴더 열기 및 사이드바 폴더 탐색 +- 썸네일 그리드 표시와 지연 로딩 +- 드래그 앤 드롭으로 카드 순서 변경 +- 선택 파일 또는 전체 파일의 순차 이름 변경 +- 사이드바 폴더로 파일 이동, 파일명 충돌 시 새 이름으로 이동 +- 삭제 파일 staging 및 Undo/Redo +- Hover 이미지 미리보기 토글 +- Ctrl+스크롤 썸네일 크기 조절 +- Finder 스타일 카드 선택 + - Click, Shift+Click, Cmd+Click + - Rubber-band drag + - Arrow, Home, End 키보드 네비게이션 + - Shift+Arrow/Home/End 범위 추가 선택 + +## 설치 및 실행 + +```bash +npm install +npm start +``` + +처음 설정부터 실행하려면: + +```bash +./setup.sh +``` + +## 빌드 + +macOS 앱 번들만 빌드: + +```bash +npm run build +``` + +DMG 패키지까지 생성: + +```bash +npm run dist +``` + +빌드 결과는 `dist/` 아래에 생성됩니다. 로컬에 유효한 Apple Developer 코드서명 인증서가 없으면 electron-builder가 코드서명을 건너뛰며 경고를 출력할 수 있습니다. + +## 키보드 단축키 + +| 키 | 동작 | +|---|---| +| `Cmd+O` | 폴더 열기 | +| `Cmd+S` | 이름 변경 실행 | +| `A` | 전체 선택 | +| `Cmd+Z` | Undo | +| `Cmd+Shift+Z` | Redo | +| `Space` | Hover 미리보기 on/off | +| `Backspace` / `Delete` | 선택 파일 삭제 | +| `ArrowLeft` / `ArrowRight` / `ArrowUp` / `ArrowDown` | 해당 방향 카드로 이동 및 단독 선택 | +| `Home` / `End` | 첫 카드 / 마지막 카드로 이동 및 그리드 최상단 / 최하단 스크롤 | +| `Shift+Arrow*` / `Shift+Home` / `Shift+End` | 기존 선택을 유지하면서 anchor부터 타겟까지 범위 추가 선택 | + +입력 모드와 관계없이 동작하도록 키보드 처리는 `e.code` 기준입니다. 모달이 열려 있을 때는 전역 단축키가 동작하지 않습니다. + +## 프로젝트 구조 + +```text +assets/ +├── icon.png +└── icon.icns + +src/ +├── main/ # Electron main process, filesystem IPC +├── preload/ # contextBridge API +└── renderer/ # UI, selection, grid, rename/move/delete flows +``` + +Electron 보안 설정은 `contextIsolation: true`, `nodeIntegration: false`를 사용합니다. 파일 시스템 접근은 `src/main/`에만 두고, renderer는 `window.api`를 통해 IPC만 호출합니다. + +## 개발 메모 + +- 테스트와 린트 스크립트는 현재 구성되어 있지 않습니다. +- 설정값은 `app.getPath('userData')/config.json`에 저장됩니다. +- 삭제 Undo를 위해 삭제된 파일은 `userData/deleted_staging/` 아래에 임시 보관됩니다. +- 자세한 코드 작업 규칙과 아키텍처 메모는 `AGENTS.md`를 참고하세요.