01 Purpose
원하는 모습과 목소리로 방송을 시작하도록.
가상 캐릭터로 콘텐츠를 만들려면 이미지 제작·리깅, 음성 변조, 얼굴 추적과 방송 도구를 각각 준비해야 합니다. 팀은 이 준비 과정을 하나의 앱에서 연결해, 얼굴을 직접 드러내지 않고도 자신이 원하는 캐릭터로 활동할 수 있는 환경을 기획했습니다.
프로젝트의 전체 흐름은 캐릭터 생성 → 모델 준비 → 실시간 제어 → 방송 연동입니다. 이 가운데 음성 경로는 사용자의 녹음 파일을 받아 원격 학습에 전달하고, 만들어진 모델을 다시 사용할 수 있게 연결하는 과제였습니다.
02 Responsibility
음성 변조와 서버 구현을 담당했습니다.
발표자료 32페이지에 기록된 제 역할은 음성 변조, 서버 구현입니다. 여기서는 해당 역할과 연결되는 음성 API, 저장소 입출력, 원격 학습 요청과 모델 블렌딩 구현을 중심으로 설명합니다.
- 여러 음성 형식을 WAV로 변환하고 S3에 저장하는 업로드 API
- 외부 학습 서버 알림과 Runpod 학습 요청,
.pth·.index산출물 조회·다운로드 - 기존 Applio/RVC 로직을 활용한 모델 가중치 블렌딩과 호환 조건 검사
아바타 생성·자동 리깅·표정 제어·UI는 팀 전체 기능입니다. 아래 전체 구조에는 음성 경로가 연결되는 위치를 이해하는 데 필요한 범위만 담았습니다.
03 Architecture
앱의 준비 흐름과 GPU 작업을 연결하는 구조.
팀의 Electron 앱은 캐릭터 생성과 음성 기능을 실행하는 진입점입니다. 이미지·캐릭터 모델은 Firebase 경로를, 음성 학습은 FastAPI와 S3 경로를 사용합니다. 파일의 저장 위치와 원격 작업 요청을 구분해 앱과 GPU 실행 환경 사이에서 입력·결과를 전달합니다.
이미지·캐릭터 모델 → Firebase 함수 호출 → 외부 GPU 작업 → 결과 경로 조회
음성 UI → FastAPI → WAV 변환 → S3 입력 저장 → 외부 학습 요청
S3 모델 산출물 → FastAPI 목록·다운로드 → 음성 모델 사용
음성 파일을 S3에 먼저 저장하면 학습 요청에는 입력·출력 경로를 전달할 수 있습니다. API는 파일 접수와 산출물 조회를 맡고, GPU 환경은 전달받은 경로의 입력으로 학습을 수행하는 구성입니다. 업로드 응답과 학습 결과를 분리해 다룰 수 있다는 점이 이 구조의 이유입니다.
04 Implementation
파일 접수부터 모델 재사용까지.
01 / AUDIO INPUT
학습 입력의 파일 형식을 WAV로 통일.
/upload와 /upload-multiple은 mp3·m4a·wav·webm을 받아 ffmpeg로 WAV를 만들고, 사용자별 voice_blend/{user_id}/uploads/에 저장합니다. 업로드 형식이 달라도 학습 측에는 WAV 입력을 전달하도록 구성했습니다.
변환에는 임시 파일을 사용하고 처리 후 정리합니다. 이 단계에서 통일하는 것은 파일 형식이며, 채널 수와 샘플레이트는 원본을 유지합니다.
02 / REMOTE TRAINING
업로드 접수, 학습 요청, 산출물 조회를 구분.
업로드 API는 S3 저장 뒤 FastAPI BackgroundTasks로 외부 학습 서버에 사용자 ID와 저장소 처리 플래그를 보냅니다. 별도의 /train은 입력·출력 S3 경로와 옵션을 Runpod Serverless에 제출하고 job_id를 반환하며, 선택적으로 상태를 폴링합니다.
결과는 /models/files에서 S3 객체를 .pth와 .index로 분류해 조회하고 개별 파일 또는 ZIP으로 내려받습니다. 파일 저장 완료, 작업 제출, 모델 파일 존재를 각기 다른 상태로 취급하는 구조입니다. 업로드 뒤의 백그라운드 알림에는 내구성 있는 큐나 재시도 보장이 구현되어 있지 않습니다.
03 / MODEL BLENDING
호환되는 모델의 가중치를 비율로 결합.
기존 Applio/RVC 블렌딩 로직을 활용해 두 .pth 체크포인트의 가중치를 α × W_A + (1 − α) × W_B로 선형 보간합니다. 결합 전에 샘플레이트와 가중치 키를 비교하고, 일반 가중치의 텐서 크기가 다르면 원인을 반환합니다.
emb_g.weight는 첫 차원 크기가 다를 때 공통 범위를 잘라 결합하는 예외가 있습니다. 결과에는 설정·샘플레이트·버전 등의 메타데이터를 함께 저장합니다. 이 기능은 기존 모델 가중치를 재조합하는 구현이며, 음원 믹싱이나 .index 병합과는 처리 대상이 다릅니다.
05 Evidence
역할 기록과 구현을 함께 확인합니다.
역할은 발표자료, 기술 설명은 bc7f74b6 시점의 소스와 README를 기준으로 정리했습니다. 각 구현의 링크는 같은 커밋에 고정되어 있습니다.
이 페이지는 담당 역할과 코드 구조를 설명합니다. 현재 외부 배포 환경을 포함한 전체 흐름의 실행 성공이나 지연·FPS·음질 개선 수치를 새로 검증한 결과는 포함하지 않습니다.