이미지·음성 에셋
캐릭터 일관성과 비공개 전달, Gemini 고정 음원 검수를 위한 제작 기준입니다.
이미지 일관성
장면 배경과 캐릭터는 같은 일러스트 세계 안에서 제작한다. 실사 배경 위에 2D 캐릭터를 합성하지 않는다. 캐릭터의 얼굴·헤어·체형 정체성은 유지하되, 장면의 행동과 감정에 맞춰 포즈를 새로 그린다.
의상은 캐릭터의 국적·연령·성격과 현재 상황을 반영한다. 전 인물을 같은 색이나 시대감 있는 복장으로 통일하지 않는다.
모바일 최적화
원본은 품질을 보존하되 실제 앱 전달본은 휴대폰과 태블릿 해상도에 맞게 리사이즈하고 압축한다. 투명 이미지와 흰 배경 이미지 모두 불필요한 캔버스 여백을 제거한다.
비공개 에셋
학습 이미지와 음원은 비공개 객체 저장소에 저장한다. 앱은 원본 공개 URL을 갖지 않고, 인증된 요청을 통해 필요한 에셋을 전달받는다.
음성 제작
수업 대화와 자모 음성은 Gemini 기반 고정 파일로 제작한다. 런타임 TTS를 기본 발화로 사용하지 않는다.
모든 음원은 화자 ID, 대본 hash, 정상·느린 속도, 생성 모델과 버전, 생성 시각, 원어민 발음 QA를 기록한다. 음성과 transcript가 일치하지 않으면 게시하지 않는다.
K0·K1-01 라이브 게시
K0-01~K0-12와 K1-01의 자모 이름·음가·음절·어휘·받침·대화·표현·문법 예문 155개를 NORMAL, LEARNING_SLOW로 각각 제작해 310개 고정 파일을 게시했다.
- 24kHz mono MP3, 발화 단위 버전 자산
- 비공개 R2 업로드 후 재다운로드 SHA-256 검증
- MSSQL에서 단원·원천 ID·화자·속도·게시 버전 관리
- Firebase Auth·App Check를 통과한 앱 요청에만 API proxy 전달
- Flutter는 SHA-256 확인 후 사용자별 캐시에 저장
- K1-01 전체 대화는 turn 파일을 화자 순서로 연속 재생
- K0 자모 이름과 실제 결합 음가를 서로 다른 재생 항목으로 제공
최종 수량은 발화 155개, 파일 310개, 적용 단원 13개이며 필수 누락·길이 이상치·R2 해시 불일치는 모두 0건이다. 기기 TTS와 공개 R2 URL은 사용하지 않는다.
운영 키는 앱이나 공개 문서에 포함하지 않는다. 화면 공유 등으로 노출 이력이 생긴 API token·S3 access key는 폐기·재발급하고 Firebase Secret을 교체한 뒤 기존 키의 접근 불가를 확인해야 한다.
