# InsuRo 이미지 편집기 — 고급 AI 배경 제거 + 워터마크 삭제 (서버 측)

## 작업 레벨: Lv.3

## 프로젝트
- InsuRo 서버: `/home/jay/projects/InsuRo/server`
- InsuRo 프론트: `/home/jay/projects/InsuRo`

## 배경
현재 이미지 편집기의 배경 제거는 브라우저 ONNX(@imgly/background-removal)로 동작하며 품질이 중급 수준.
워터마크 삭제는 자연스럽지 않음. 서버 측 전용 AI 모델로 고품질 버전을 추가한다.

## 수정 사항

### Phase 1: 서버 — Python 패키지 설치 + API 엔드포인트

#### 1-1. 패키지 설치
```bash
pip install rembg[gpu]  # 또는 rembg (CPU 전용)
pip install iopaint     # 워터마크/객체 제거 (LaMa 모델)
```
★ GPU 없으면 `rembg` (CPU)로 설치. onnxruntime은 이미 설치됨(1.24.4).

#### 1-2. 배경 제거 엔드포인트
파일: `server/main.py` (또는 별도 `server/image_ai.py` 모듈)

```python
@app.post("/api/insuro/image/remove-bg")
async def remove_background_premium(
    file: UploadFile,
    plan_info: dict = Depends(require_feature("ai_image_premium")),
):
    """고급 AI 배경 제거 (rembg BiRefNet 모델)"""
    from rembg import remove, new_session
    
    input_bytes = await file.read()
    session = new_session("birefnet-general")  # 최고 품질 모델
    output_bytes = remove(input_bytes, session=session)
    
    return Response(content=output_bytes, media_type="image/png")
```

#### 1-3. 워터마크 삭제 엔드포인트
```python
@app.post("/api/insuro/image/remove-watermark")
async def remove_watermark_premium(
    file: UploadFile,
    mask: UploadFile,  # 워터마크 영역 마스크
    plan_info: dict = Depends(require_feature("ai_image_premium")),
):
    """AI 워터마크 삭제 (IOPaint LaMa 모델)"""
    # IOPaint API 또는 직접 LaMa 모델 호출
    # 마스크: 사용자가 프론트에서 워터마크 영역을 표시한 이미지
```

★ 워터마크 삭제는 "사용자가 워터마크 영역을 마스킹" → "서버가 해당 영역을 자연스럽게 채움" 방식.
★ IOPaint 설치가 복잡하면, 대안으로 `simple-lama-inpainting` 패키지 사용 (더 가벼움).

#### 1-4. feature_access에 ai_image_premium 추가
기존 FEATURE_ACCESS 딕셔너리에 추가:
```python
"ai_image_premium": "프로",  # 프로 플랜 이상
```

### Phase 2: 프론트 — UI 버튼 + FeatureGate

#### 2-1. 이미지 편집기 도구 패널에 "고급 AI" 섹션 추가
파일: `src/pages/ImageEditor.tsx`

기존 도구 목록(크롭, 리사이즈, ..., 배경제거) 아래에 구분선 + 고급 AI 섹션:
```tsx
// 구분선
<div className="border-t my-2" />
// 고급 AI 도구
{ id: "ai-remove-bg-premium", icon: <Sparkles />, label: "AI 배경제거" }
{ id: "ai-remove-wm-premium", icon: <Sparkles />, label: "AI WM삭제" }
```

#### 2-2. FeatureGate 적용
```tsx
<FeatureGate feature="aiImagePremium" fallback={<PlanUpgradeDialog />}>
  {/* 실제 AI 기능 */}
</FeatureGate>
```

#### 2-3. 배경 제거 실행 로직
- "AI 배경제거" 클릭 → 현재 캔버스 이미지를 PNG로 → 서버 API 호출 → 결과 이미지를 캔버스에 교체

#### 2-4. 워터마크 삭제 실행 로직  
- "AI WM삭제" 클릭 → 사용자가 캔버스에서 워터마크 영역을 브러시로 마스킹 → 원본+마스크를 서버로 → 결과 이미지를 캔버스에 교체

### Phase 3: 모델 다운로드 + 초기화
rembg는 첫 실행 시 모델을 자동 다운로드(~170MB). 서버 시작 시 미리 다운로드하는 스크립트 추가 권장.

## affected_files
- `server/main.py` 또는 `server/image_ai.py` (신규 — AI 이미지 처리 모듈)
- `server/requirements.txt` (수정 — rembg, iopaint/simple-lama-inpainting 추가)
- `src/pages/ImageEditor.tsx` (수정 — 고급 AI 버튼 추가)
- `src/hooks/useImageAI.ts` (수정 — 서버 API 호출 로직 추가)
- `src/config/features.ts` 또는 서버 FEATURE_ACCESS (수정 — ai_image_premium 추가)

## 검증 시나리오
1. 프로 플랜 이상 → "AI 배경제거" 클릭 → 이미지 배경이 투명하게 제거됨
2. 프로 플랜 이상 → "AI WM삭제" → 워터마크 영역 마스킹 → 자연스럽게 채워짐
3. 무료/베이직 → "AI 배경제거" 클릭 → 업그레이드 유도 다이얼로그
4. 기존 브라우저 배경 제거/WM삭제 기능은 그대로 유지 (변경 없음)
5. npm run build 성공
6. 서버 pip install + 서버 재시작 성공
