## 1. Environment Setup - [x] 1.1 Create `environment.yml` with Python 3.10, PyQt6, edge-tts, pandas, openpyxl - [x] 1.2 Test conda environment creation and activation ## 2. Excel Input Module - [x] 2.1 Implement Excel file loading with openpyxl/pandas - [x] 2.2 Implement column parsing (Filename, Text, Lang) - [x] 2.3 Add data validation for required fields - [x] 2.4 Implement default language fallback (zh) ## 3. TTS Engine Module - [x] 3.1 Define voice registry with all available voices and bilingual support annotations - [x] 3.2 Implement default voice mapping dictionary (zh/vi/en -> Voice ID) - [x] 3.3 Implement edge-tts wrapper for voice synthesis with configurable voice - [x] 3.4 Add rate limit delay (0.5s between requests) - [x] 3.5 Implement network error handling with retry - [x] 3.6 Add output directory creation logic ## 4. Threading Model - [x] 4.1 Create TTS Worker class extending QThread - [x] 4.2 Implement asyncio event loop within worker thread - [x] 4.3 Define pyqtSignal for progress, log, completion events - [x] 4.4 Implement stop flag for graceful cancellation ## 5. GUI Implementation - [x] 5.1 Create main window with PyQt6 - [x] 5.2 Add file browser widget with .xlsx filter - [x] 5.3 Add voice selection dropdown (grouped by language, with bilingual annotations) - [x] 5.4 Add Start/Stop buttons with state management - [x] 5.5 Add progress bar widget - [x] 5.6 Add log console (QTextEdit) with auto-scroll - [x] 5.7 Connect signals to UI update slots - [x] 5.8 Implement completion notification dialog ## 6. Integration - [x] 6.1 Wire Excel parser to TTS worker - [x] 6.2 Pass selected voice from GUI to TTS worker - [x] 6.3 Connect worker signals to GUI updates - [x] 6.4 Implement start/stop button handlers ## 7. Testing & Documentation - [x] 7.1 Create `template.xlsx` with sample data - [x] 7.2 Test batch processing with 10+ items - [x] 7.3 Test voice selection (verify different voices produce correct output) - [x] 7.4 Test UI responsiveness during processing - [x] 7.5 Test stop functionality mid-batch - [x] 7.6 Test error handling (invalid file, network error) - [x] 7.7 Write README.md with usage instructions (including voice selection guide)