feat: StationOverlay 렌더링 최적화 및 스무딩 적용 close #1

- 텍스트(측점/POI) 전 프레임 사전 계산 Map (requestIdleCallback 백그라운드)
- 드론 데이터 이동 평균 스무딩 (smoothFrame ±N프레임)
- 30fps→60fps 프레임 간 선형 보간 (performance.now() 기반)
- EMA(지수이동평균) 표시 위치 스무딩 (α=0.01 기본값)
- 글씨 2배 크기, bold, strokeText 테두리, 배경 박스 제거
- 카메라 파라미터 패널에 smooth/EMA α 슬라이더 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-01 15:11:39 +09:00
commit 2aae3d1c0d
89 changed files with 15739 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
---
name: ffmpeg-cmd
description: 자연어 설명을 FFmpeg/FFprobe 명령으로 변환하고 실행합니다.
argument-hint: "<설명>"
disable-model-invocation: true
---
## FFmpeg 명령 생성 및 실행
요청: **$ARGUMENTS**
### 실행 규칙
1. **CLAUDE.md**의 FFmpeg 관련 규칙을 먼저 확인하세요:
- HLS 변환: 세그먼트 6초, 키프레임 2초, H.264 소스는 `-c copy`
- 프레임 추출: `-accurate_seek -ss {time} -i {file} -frames:v 1`
- 코덱 감지: `ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name`
2. 요청 내용을 FFmpeg/FFprobe 명령으로 변환
3. 실행 전 다음을 표시:
- 생성된 명령
- 각 플래그의 의미 (한줄 설명)
- 예상 결과
4. 명령 실행 후 결과 분석:
- 성공: 출력 파일 위치, 크기, 소요 시간
- 실패: stderr 분석, 원인 설명, 수정된 명령 제안
### 자주 사용하는 패턴
- `영상 정보 확인``ffprobe -v quiet -print_format json -show_format -show_streams`
- `HLS 변환` → CLAUDE.md의 HLS 변환 명령 패턴 사용
- `프레임 추출``-accurate_seek -ss {time} -i {file} -frames:v 1`
- `코덱 확인``ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name -of csv=p=0`
- `썸네일 스프라이트` → 10초 간격 프레임 추출 후 타일링

View File

@@ -0,0 +1,40 @@
---
name: review
description: 최근 코드 변경사항을 CLAUDE.md 규칙 기준으로 리뷰합니다.
disable-model-invocation: true
context: fork
agent: code-reviewer
---
## 코드 리뷰
최근 변경사항을 CLAUDE.md의 핵심 구현 규칙 기준으로 리뷰하세요.
### 리뷰 범위
변경된 파일 확인:
!`git diff --name-only HEAD~1 2>/dev/null || echo "git diff 불가 - 전체 파일 리뷰"`
### 리뷰 기준 (CLAUDE.md에서 발췌)
**보안:**
- Path traversal 방어 (path.resolve + 허용 디렉토리 검증)
- 업로드 MIME + FFprobe 검증
- CORS 설정
**메모리:**
- URL.createObjectURL → revokeObjectURL 쌍
- Canvas 재사용
- hls.js backBufferLength: 30
**성능:**
- timeupdate 직접 DOM 조작 금지
- requestAnimationFrame/requestVideoFrameCallback 사용
- 이진 탐색 O(log n)
**패턴 준수:**
- Range Request: createReadStream + pipeline
- FFmpeg: child_process.spawn 래퍼
- Video.js: ref + useEffect 패턴
피드백을 Critical / Warning / Suggestion 으로 분류하세요.

View File

@@ -0,0 +1,25 @@
---
name: status
description: 프로젝트 진행 상태를 확인하고 다음 작업을 제안합니다.
disable-model-invocation: true
---
## 프로젝트 진행 상태 확인
아래 파일들을 읽고 현재 상태를 요약하세요:
1. **PROGRESS.md** 읽기 — 현재 상태 요약, 단계별 진행 기록
2. **PLAN.md** 읽기 — 미완료 태스크 (`- [ ]`) 개수 파악
3. 다음 내용을 표 형태로 보고:
| 단계 | 상태 | 완료 태스크 | 남은 태스크 |
|------|------|------------|------------|
4. **다음에 할 작업** 제안:
- 의존성이 충족된 다음 단계 식별
- 블로커가 있으면 강조
- 병렬 진행 가능한 단계가 있으면 알림
5. 블로커/이슈가 있으면 빨간색으로 강조

View File

@@ -0,0 +1,34 @@
---
name: step
description: PLAN.md의 특정 단계를 실행합니다. 단계 번호를 인자로 전달합니다.
argument-hint: "<단계번호>"
disable-model-invocation: true
---
## 단계 $ARGUMENTS 실행
step-worker 에이전트를 사용하여 PLAN.md의 **단계 $ARGUMENTS**를 수행합니다.
### 실행 프로토콜
1. 먼저 아래 3개 파일을 순서대로 읽으세요:
- `CLAUDE.md` — 프로젝트 규칙/아키텍처
- `PLAN.md` — 단계 $ARGUMENTS의 세부 태스크 확인
- `PROGRESS.md` — 이전 단계 완료 여부, 블로커, 인계사항
2. PROGRESS.md에서 단계 $ARGUMENTS의 상태를 "🔄 진행 중"으로 업데이트
3. PLAN.md의 단계 $ARGUMENTS 태스크를 위에서 아래로 순서대로 수행:
- 각 태스크 완료 시 PLAN.md에서 `- [ ]``- [x]`로 변경
- 의미 있는 마일스톤마다 PROGRESS.md 업데이트
4. 모든 태스크 완료 후:
- PLAN.md의 **산출물(완료 기준)**을 직접 검증
- PROGRESS.md에 최종 결과 기록 (완료 항목, 미완료/이슈, 다음 단계 참고)
- 산출물 충족 시 상태를 "✅ 완료"로 변경
### 주의사항
- 이전 단계가 완료되지 않았으면 사용자에게 알리고 중단
- 블로커 발견 시 PROGRESS.md에 기록 후 사용자에게 보고
- 이전 에이전트가 작성한 코드를 이유 없이 변경하지 않음

View File

@@ -0,0 +1,34 @@
---
name: verify
description: 특정 단계의 산출물(완료 기준)을 검증합니다. 단계 번호를 인자로 전달합니다.
argument-hint: "<단계번호>"
disable-model-invocation: true
---
## 단계 $ARGUMENTS 검증
PLAN.md의 **단계 $ARGUMENTS**에 정의된 산출물(완료 기준)을 하나씩 검증합니다.
### 검증 프로토콜
1. **PLAN.md** 읽기 → 단계 $ARGUMENTS의 "산출물 (완료 기준)" 섹션 확인
2. **PROGRESS.md** 읽기 → 현재 상태, 알려진 이슈 확인
3. 각 산출물 항목을 실제로 실행하여 검증:
- 빌드 확인: `npx tsc --noEmit`, `npm run build`
- 서버 기동: 서버 시작 후 API 엔드포인트 curl 테스트
- 클라이언트: 개발 서버 기동 확인, 빌드 성공 확인
- 기능 테스트: 해당 단계의 핵심 기능 동작 확인
4. 각 항목에 대해 결과 보고:
- ✅ 통과: 확인 방법 + 결과
- ❌ 실패: 에러 내용 + 원인 분석 + 수정 제안
- ⚠️ 부분 통과: 동작하지만 이슈 있음
5. 종합 결과를 PROGRESS.md에 기록
### 주의사항
- 실행 중인 프로세스는 검증 후 반드시 종료
- 서버 포트 충돌 시 기존 프로세스 확인 후 처리
- 검증만 수행하고 코드 수정은 하지 않음 (수정이 필요하면 보고)