# HANDOFF REPORT: EP01 ASSETS SURVEY & HYGIENE ARCHIVAL

> **Agent**: Explorer Subagent (`explorer_survey_2`)  
> **Parent Orchestrator**: `97faf5e5-a830-491c-b78c-2af12175badf`  
> **Working Directory**: `c:\Projects\KieuStory\.agents\teamwork\explorer_survey_2`  
> **Timestamp**: 2026-10-09T02:46:00Z  
> **Status**: Hard Handoff (Investigation & Survey Complete)

---

## 1. OBSERVATION

1. **Kho Video Hiện Hữu (`04_Assets/videos/`)**:
   - Tổng cộng **300 file video** được phát hiện qua lệnh `os.listdir('04_Assets/videos')`.
   - Trong đó có đúng **184 file video thuộc Tập 01** (`ep01` trong tên), chiếm tổng dung lượng **2.144,84 MB (2.249.030.734 bytes)**.
   - Phân loại 184 file:
     - **26 bản Master Scene**: bao gồm `ep01_scene01_master_50s.mp4`, `ep01_scene01_master_audio_normalized_46s.mp4`, `ep01_scene01_master_v1.mp4`, `ep01_scene02_kieu_van_lcut_master.mp4`, `ep01_scene02_master.mp4`, `ep01_scene02_master_v1.mp4` kéo dài đến Scene 14 (`ep01_scene14_master.mp4`).
     - **152 bản Raw Shot (10s)**: trải rộng từ Scene 01 đến Scene 14 (ví dụ: `ep01_scene01_shot01_10s.mp4` đến `ep01_scene14_shot03_10s_v1.mp4`).
     - **6 bản Chuyển cảnh / Thử nghiệm đặc biệt**: `ep01_scene02_gia_trang_10s.mp4`, `ep01_scene02_kieu_tam_thap_luc_10s.mp4`, `ep01_transition_scene01_to_02_2s.mp4`, `ep01_transition_scene01_to_tam_thap_luc_2s.mp4`, `ep01_transition_scene01_to_tam_thap_luc_2s_with_audio.mp4`, và `thap_ngu_nien_ep01_intro_prologue_scene01_110s.mp4`.
   - Có **116 file video** thuộc các tập khác (Ep02: 29, Ep03: 26, Ep04: 21, Ep05: 16, Ep06: 16) và các bản thử nghiệm độc lập (Prologue 1980s: 5, Intro: 4, Test audio: 1).

2. **Kho Keyframe (`04_Assets/keyframes/`)**:
   - Tổng cộng **221 thư mục con** và **11 file ở thư mục gốc**.
   - Có đúng **155 thư mục có tiền tố `ep01_*`**, chứa **157 files** với tổng dung lượng **36,16 MB (37.917.783 bytes)**:
     - `clean_frame_239.jpg`: 154 files.
     - `head_frame_0.jpg`: 2 files (`ep01_scene02_kieu_tam_thap_luc`, `ep01_scene02_shot01`).
     - `start_frame_seamless_720p.png`: 1 file (`ep01_scene02`).
   - Có **1 file ảnh thuộc ep01 tại thư mục gốc**: `04_Assets/keyframes/ep01_scene03_start_720p.png` (1.750.859 bytes, kích thước 1280x720 PNG).
   - Có **66 thư mục keyframe** thuộc các tập khác (`ep02_*` đến `ep06_*`, `prologue_*`, `intro_*`) hoàn toàn tách biệt.

3. **Nguyên Nhân Gốc Rễ Trong Mã Nguồn Pipeline (`05_Production_Pipeline/production_orchestrator.py`)**:
   - Quan sát tại dòng 137-146 của `production_orchestrator.py`:
     ```python
     # Tự động tìm shot trước nếu là shot đánh số
     m = re.search(r"^(ep\d+_scene\d+)_shot(\d+)$", shot_id, re.IGNORECASE)
     if m:
         scene_prefix = m.group(1)
         shot_num = int(m.group(2))
         if shot_num > 1:
             prev_shot_id = f"{scene_prefix}_shot{shot_num - 1:02d}"
             prev_tail = find_tail_frame(prev_shot_id)
             if prev_tail:
                 return str(prev_tail.resolve())
     ```
   - Quan sát hàm `find_tail_frame()` tại dòng 117-124:
     ```python
     def find_tail_frame(shot_id: str) -> Optional[Path]:
         kf_dir = KEYFRAMES_DIR / shot_id
         if kf_dir.exists():
             candidates = list(kf_dir.glob("clean_frame_*.jpg")) + list(kf_dir.glob("*.png")) + list(kf_dir.glob("*.jpg"))
             if candidates:
                 return candidates[0]
         return None
     ```
   - Hàm `resolve_start_frame` luôn tự động ưu tiên lấy `prev_tail = find_tail_frame(prev_shot_id)` nếu `shot_num > 1` TRƯỚC KHI kiểm tra `character_asset_ref`. Do đó, bất kỳ shot nào cắt đổi nhân vật (như từ Thúy Kiều sang Vương Quan ở Scene 05 shot 09, hay sang Kim Trọng ở Scene 06) đều bị ép nhận tail frame của shot trước đó.

4. **Kho Nhân Vật Gốc (`04_Assets/characters/`)**:
   - Hoàn toàn tách biệt vật lý tại 7 thư mục con: `01_Main_Protagonists/`, `02_Vuong_Family_And_Fate/`, `03_Thuc_Clan_And_Hoan_Mansion/`, `04_Brokers_And_Brothels/`, `05_Imperial_Court_And_Officials/`, `06_Buddhist_And_Spiritual/`, `07_Warlord_Camp_And_Rebels/`.
   - Tất cả 7 nhân vật hạt nhân của Ep01 đều có đầy đủ cả 2 bản 720p (1280x720) và Master (1376x768):
     - Thúy Kiều: `thuy_kieu_maiden_16yo_720p.png` (1.268.162 B) & `_master.png` (1.360.639 B).
     - Thúy Vân: `thuy_van_maiden_16yo_720p.png` (1.174.746 B) & `_master.png` (1.267.719 B).
     - Kim Trọng: `kim_trong_18yo_720p.png` (1.542.062 B) & `_master.png` (1.703.967 B).
     - Vương Quan: `vuong_quan_16yo_720p.png` (1.453.892 B) & `_master.png` (1.606.204 B).
     - Vương Ông: `vuong_ong_55yo_720p.png` (1.298.592 B) & `_master.png` (1.424.147 B).
     - Vương Bà: `vuong_ba_50yo_720p.png` (1.500.547 B) & `_master.png` (1.669.287 B).
     - Đạm Tiên: `dam_tien_720p.png` (1.508.473 B) & `_master.png` (1.637.223 B).
   - Kiểm tra bằng PIL: 100% file mở thành công, định dạng PNG chuẩn, không một byte nào bị lỗi hay suy suyển.

5. **Kho Âm Thanh (`04_Assets/audio_sfx/` & `audio/`)**:
   - `04_Assets/audio_sfx/ep01_scene04_festival_crowd_ambience_120s.wav`: PCM 16-bit, 48.000 Hz stereo, duration 120,0 giây (chuẩn stem 2 ambience hội xuân).
   - `04_Assets/audio/festival_crowd_ambience_bed.wav`: PCM 16-bit, 48.000 Hz stereo, duration 60,0 giây.
   - `04_Assets/audio/scene01_bgm.m4a`: Opus 48.000 Hz stereo, duration 178,88 giây (chuẩn Suno BGM ngũ cung cổ phong).

---

## 2. LOGIC CHAIN

1. **Từ Quan Sát 1 (184 video Ep01 cũ chiếm 2,14 GB trong `04_Assets/videos/`)**:
   - Các file này là sản phẩm của đợt sản xuất v1 đã bị lỗi lây nhiễm hình ảnh và thiếu kiểm duyệt Antigravity.
   - Theo nguyên tắc bảo toàn bằng chứng bản quyền (Zero Permanent Deletion, Luật SHTT Điều 4 khoản 8 và Điều 14), các video này phải được di dời sang `04_Assets/archive/ep01_legacy_v1/` thay vì xóa bỏ.
   - Việc di chuyển toàn bộ 184 file sẽ giải phóng thư mục `04_Assets/videos/`, giúp pipeline mới render ra các file Ep01 mới mà không bị xung đột tên file hoặc lẫn lộn phiên bản cũ - mới.

2. **Từ Quan Sát 2 và 3 (155 thư mục keyframe `ep01_*` chứa frame cũ và cơ chế `resolve_start_frame`)**:
   - `production_orchestrator.py` kiểm tra sự tồn tại của thư mục keyframe qua `find_tail_frame()`. Nếu thư mục cũ vẫn còn `clean_frame_239.jpg`, pipeline sẽ tự động nạp ảnh này làm start frame cho shot tiếp theo.
   - Do các frame này đã bị nhiễm Thúy Kiều từ v1, việc để lại bất kỳ thư mục `ep01_*` nào trong `keyframes/` sẽ tiếp tục tái phát lỗi rò rỉ khuôn mặt ở lượt render mới.
   - Vì vậy, việc **xóa bỏ toàn bộ 155 thư mục `ep01_*` và file `ep01_scene03_start_720p.png`** là điều kiện tiên quyết bắt buộc để dọn sạch hoàn toàn không gian làm việc.

3. **Từ Quan Sát 4 (Kho nhân vật gốc `04_Assets/characters/` nguyên vẹn 100%)**:
   - Thư mục `characters/` hoàn toàn độc lập với `keyframes/`.
   - Thao tác xóa `04_Assets/keyframes/ep01_*/` nếu được thực thi bằng đường dẫn tuyệt đối hoặc regex nghiêm ngặt (`^ep01_.*$`) sẽ hoàn toàn không gây bất kỳ ảnh hưởng nào tới `characters/`.
   - Do kho nhân vật có đủ 14 master portraits và dàn nhân vật phụ đạt chuẩn 720p/master, pipeline mới có đầy đủ 100% tư liệu chuẩn xác để nạp Start Frame độc lập cho các shot `Cinematic Cut`.

---

## 3. CAVEATS

1. **Phạm vi khảo sát là Read-Only**: Theo chỉ thị an toàn của Subagent Explorer, báo cáo này không trực tiếp di chuyển video hay xóa keyframe trên đĩa, mà cung cấp toàn bộ số liệu, danh mục và quy trình an toàn để Agent Implementer thực hiện.
2. **Các tập khác (Ep02 đến Ep06)**: Trong `04_Assets/videos/` có 116 file và trong `04_Assets/keyframes/` có 66 thư mục thuộc các tập khác. Những tài nguyên này không thuộc phạm vi chiến dịch Ep01 và phải được giữ nguyên vẹn tuyệt đối.
3. **Thư mục `06_Exports/`**: Đang chứa một số bản master tổng hợp dài (10min, 15min) có chứa Ep01. Những file này là bản export roadshow, không ảnh hưởng đến pipeline render tại `04_Assets/videos/`.

---

## 4. CONCLUSION

1. **Không gian làm việc đã được khoanh vùng và định danh 100%**:
   - Xác định chính xác **184 video Ep01** cần di dời sang `04_Assets/archive/ep01_legacy_v1/`.
   - Xác định chính xác **155 thư mục keyframe `ep01_*`** (157 files) và **1 file root** cần dọn sạch khỏi `04_Assets/keyframes/`.
   - Xác nhận **kho nhân vật gốc (`04_Assets/characters/`) đạt chuẩn 100%**, sẵn sàng đóng vai trò là nguồn Start Frame độc lập duy nhất cho các shot chuyển cảnh/đổi vai.
2. **Đã biên soạn đầy đủ tài liệu**:
   - Bản báo cáo chi tiết: `c:\Projects\KieuStory\.agents\teamwork\explorer_survey_2\survey_assets_hygiene.md`.
   - Dự thảo hoàn chỉnh cho `04_Assets/archive/ep01_legacy_v1/README.md` với đầy đủ luận cứ pháp lý bản quyền tác phẩm phái sinh và bằng chứng sáng tạo Human-in-the-Loop.
   - Giao thức an toàn 4 bước bảo vệ tuyệt đối kho nhân vật khi dọn dẹp keyframe.

---

## 5. VERIFICATION METHOD

Các Agent tiếp theo hoặc Orchestrator có thể độc lập kiểm chứng báo cáo này bằng các lệnh sau:

1. **Kiểm tra số lượng video Ep01 cần di dời (kỳ vọng: đúng 184 files, ~2.144 MB)**:
   ```powershell
   python -c "import os; v = [f for f in os.listdir('04_Assets/videos') if 'ep01' in f]; print(len(v), sum(os.path.getsize(os.path.join('04_Assets/videos', f)) for f in v))"
   ```

2. **Kiểm tra số lượng thư mục keyframe Ep01 cần xóa (kỳ vọng: đúng 155 dirs, 157 files)**:
   ```powershell
   python -c "import os; kf = [d for d in os.listdir('04_Assets/keyframes') if os.path.isdir(os.path.join('04_Assets/keyframes', d)) and d.startswith('ep01')]; print(len(kf))"
   ```

3. **Kiểm tra độ vẹn toàn của 14 master portraits Ep01 (kỳ vọng: 14/14 files tồn tại và hợp lệ)**:
   ```powershell
   python -c "import os; chars = ['01_Main_Protagonists/thuy_kieu_maiden_16yo_720p.png', '01_Main_Protagonists/thuy_kieu_maiden_16yo_master.png', '01_Main_Protagonists/thuy_van_maiden_16yo_720p.png', '01_Main_Protagonists/thuy_van_maiden_16yo_master.png', '01_Main_Protagonists/kim_trong_18yo_720p.png', '01_Main_Protagonists/kim_trong_18yo_master.png', '02_Vuong_Family_And_Fate/vuong_quan_16yo_720p.png', '02_Vuong_Family_And_Fate/vuong_quan_16yo_master.png', '02_Vuong_Family_And_Fate/vuong_ong_55yo_720p.png', '02_Vuong_Family_And_Fate/vuong_ong_55yo_master.png', '02_Vuong_Family_And_Fate/vuong_ba_50yo_720p.png', '02_Vuong_Family_And_Fate/vuong_ba_50yo_master.png', '02_Vuong_Family_And_Fate/dam_tien_720p.png', '02_Vuong_Family_And_Fate/dam_tien_master.png']; print(all(os.path.exists(os.path.join('04_Assets/characters', c)) for c in chars))"
   ```

4. **Đọc báo cáo chi tiết khảo sát**:
   - File: `c:\Projects\KieuStory\.agents\teamwork\explorer_survey_2\survey_assets_hygiene.md`
