- GeminiScriptService: 트렌딩 제목/시나리오 생성
- VeoVideoService: Veo 3.1 영상 클립 생성
- TtsService: Google TTS 나레이션 생성
- BgmService: 분위기별 BGM 선택
- VideoAssemblyService: FFmpeg 영상 합성
- VideoGenerationJob: 백그라운드 처리
- Veo3Controller: API 엔드포인트
- React 프론트엔드 (5단계 위저드)
- GoogleCloudService.getAccessToken() public 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- V2: 리전별 엔드포인트 사용 ({location}-speech.googleapis.com)
- V2 폴링도 리전별 엔드포인트 사용
- Google 화자분리가 1명만 인식 시 Gemini AI가 대화 패턴 분석하여 화자 재분배
- Gemini 프롬프트: 맥락/호칭/질문-답변/어투 변화 기반 화자 분리
- 사용량 로깅에 engine 구분 (v1+gemini, v2+gemini 등)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
V2 에러: configMask → 제거 (V2 REST API 자동 추론), 전체 snake_case 적용
V1 에러: audioChannelCount=2 추가 (원본 스트림이 스테레오 WebM)
V2 파싱: speaker_tag/start_offset 등 snake_case 필드명도 처리
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 프론트엔드: Web Audio API 전처리 파이프라인 (GainNode + DynamicsCompressor + AnalyserNode)
- 프론트엔드: VU 미터 실시간 레벨 표시 + 마이크 감도 슬라이더 (0.5x~3.0x)
- 프론트엔드: getUserMedia constraints 강화 + MediaRecorder 128kbps Opus
- 백엔드: Google STT V2 API + Chirp 2 모델 batchRecognize 메서드 추가
- 백엔드: V2→V1 자동 폴백 래퍼 (speechToTextWithDiarizationAuto)
- 백엔드: Speech Adaptation 도메인 용어 힌트 (블라인드/스크린 등 22개)
- 백엔드: V2 SentencePiece 토큰 자동 감지 분기 처리
- 설정: config/services.php에 google.location 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- ▁(U+2581) 문자를 _(U+005F)와 별도로 처리
- SentencePiece 토큰 결합 로직 추가 (joinSentencePieceTokens)
- ▁로 시작하는 토큰: 새 단어 → 공백 추가
- ▁없는 토큰: 이전 단어에 직접 붙임
- cleanSttText에서 ▁→공백 변환 추가
- 프론트엔드에서도 ▁ 문자 정제 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GoogleCloudService: 단어 내부/앞뒤 _ 모두 제거 + cleanSttText 헬퍼
- MeetingMinuteService: 세그먼트 저장 시 _ 제거
- 프론트엔드: 대화기록/스크립트 탭 표시 시에도 _ 제거
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GoogleCloudService에 speechToTextWithDiarization 메서드 추가
- Google STT V1 diarizationConfig 활성화로 자동 화자 구분
- MeetingMinuteService에 processDiarization 메서드 추가
- POST /{id}/diarize 엔드포인트 및 라우트 추가
- 프론트엔드에 '화자 분리' 버튼 추가 (RecordingControlBar)
- saveSegments 컨트롤러에 try-catch 에러 핸들링 추가
- 빈 텍스트 세그먼트 필터링 로직 추가 (서버/클라이언트 양쪽)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GoogleCloudService에 downloadFromStorage 메서드 추가 (GCS REST API 사용)
- AiVoiceRecordingController에 download 메서드 추가 (스트림 응답)
- 다운로드 라우트 추가 (GET /{id}/download)
- 파일명은 제목 기반으로 생성, Content-Disposition 헤더 설정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- AiTokenHelper: saveGcsStorageUsage(), saveSttUsage() 메서드 추가
- GoogleCloudService: uploadToStorage 반환값 배열로 변경 (uri + size)
- AiVoiceRecordingService: GCS/STT 각각 토큰 사용량 기록
- MeetingLogService: uploadToStorage 반환값 변경 대응
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MeetingLog 모델 (BelongsToTenant, SoftDeletes)
- GoogleCloudService (GCS 업로드, STT API)
- MeetingLogService (Claude API 요약)
- MeetingLogController (HTMX/JSON 듀얼 응답)
- 순수 Tailwind CSS UI 구현
- API 라우트 8개 엔드포인트 등록