
자신의 컴퓨터에 듣고, 말하고, 입 모양을 움직이며 대화할 수 있는 AI 디지털 휴먼을 구축하는 데 AI 도구를 따로 사용하거나 비싼 구독료를 지불할 필요는 없습니다. 음성 인식, 로컬 대규모 언어 모델, 음성 합성, 입 모양 동기화를 연결하면 로컬 컴퓨터에서 실행되는 실시간 상호작용 시스템을 만들 수 있습니다.
이 글에서는 하드웨어 준비부터 시작해 Windows + WSL2 환경에서 전체 배포 과정을 안내합니다. 최종 결과는 웹페이지에 사용자 지정 디지털 휴먼이 표시되고, 마이크로 AI 디지털 휴먼과 대화하면 AI 디지털 휴먼이 복제한 음색으로 답변하는 것입니다.
1. 전체 시스템 작동 과정
이 구성은 하나의 모델이 단독으로 처리하는 것이 아니라 여러 구성 요소를 배포합니다.

llama.cpp는 로컬 언어 모델을 실행하고, faster-whisper는 사용자의 음성을 텍스트로 변환합니다. Qwen3-TTS는 참조 오디오를 바탕으로 답변 음성을 생성하며, LiveTalking과 Wav2Lip은 음성을 이에 맞는 입 움직임으로 변환합니다.
2. 하드웨어 요구 사항 및 VRAM 예산
최소 사양:
NVIDIA 그래픽 카드: VRAM 8GB
메모리: 16GB
사용 가능한 저장 공간: 최소 60GB
시스템: Windows 10/11 및 WSL2 지원
권장 사양:
NVIDIA 그래픽 카드: VRAM 16GB 이상
메모리: 32GB 이상
모델과 WSL 파일은 SSD에 저장하는 것을 권장합니다.
Qwen3 14B 양자화 모델을 예로 들면 VRAM은 대략 다음과 같이 할당됩니다.
구성 요소|예상 VRAM 사용량
Qwen3-14B Q4_K_M|약 9GB
faster-whisper large-v3|약 3GB
Qwen3-TTS 1.7B|약 4GB
Wav2Lip 256|약 1.3GB
합계|약 17GB
VRAM 24GB 그래픽 카드를 사용하면 이 조합을 더욱 여유롭게 실행할 수 있습니다. VRAM 16GB라면 8B 모델로 변경하고 컨텍스트 길이를 줄일 수 있으며, 약 8GB라면 4B 모델과 중형 음성 인식 모델부터 시작하는 것이 좋습니다.
3. WSL2 네트워크 및 메모리 구성
1. 먼저 Windows 사용자 디렉터리에 .wslconfig 파일을 생성합니다.
C:\Users\사용자 이름\.wslconfig2. 다음 내용을 입력합니다.
[wsl2]
memory=32GB
networkingMode=mirrored
[experimental]
hostAddressLoopback=truememory는 실제 메모리에 맞게 수정할 수 있으며, 일반적으로 물리 메모리의 절반에서 4분의 3 정도를 할당하면 됩니다. hostAddressLoopback=true는 로컬 Windows와 WSL 간 WebRTC 통신에 특히 중요합니다. 이 설정이 없으면 이후의 WebRTC 연결이 계속 실패하지만 오류 원인을 전혀 파악하기 어렵습니다. 브라우저에는 JSON 구문 분석 오류가 표시되고 ICE 후보 목록은 비어 있습니다.
3. 수정한 후 PowerShell에서 실행합니다.
wsl --shutdownWSL에 다시 들어가야 설정이 적용됩니다.
4. Windows에서 로컬 대규모 언어 모델 시작
1. llama.cpp 준비
Windows용 llama.cpp를 다운로드한 후 다음과 같은 고정 디렉터리에 압축을 풉니다.
E:\llama.cpp안정 버전 다운로드 주소:https://pan.quark.cn/s/0073852e4042
2. VRAM에 따라 모델 선택
VRAM 범위|권장 모델|다운로드 주소
16GB 이상|Qwen3-14B-Instruct Q4_K_M|https://pan.quark.cn/s/f48c2144ac71
8–16GB|Qwen3-8B GGUF Q4_K_M|https://pan.quark.cn/s/78b8643f1be3
8GB 이하|Qwen3-4B GGUF|https://pan.quark.cn/s/fd588898ccbf
다운로드한 .gguf 파일을 다음 위치에 넣습니다.
E:\llama.cpp\models3. 추론 서비스 시작
Windows 명령 프롬프트에서 실행합니다.
cd /d E:\llama.cpp
llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf ^
-np 1 -c 8192 -fa on --temp 1.0 --top-p 0.95 ^
--host 0.0.0.0 --port 8090각 매개변수의 역할은 다음과 같습니다.
host 0.0.0.0:WSL에서 Windows 측 모델 서비스에 접근할 수 있도록 합니다.
c 8192:컨텍스트 길이를 설정하며, 짧은 대화에는 충분합니다.
temp 1.0:답변이 지나치게 딱딱하지 않도록 합니다.
port 8090:서비스 포트를 지정합니다.
이 명령 프롬프트 창은 계속 실행 상태로 유지해야 합니다. 포트가 사용 중이라는 메시지가 표시되지만 일반적인 확인으로 프로세스가 보이지 않는다면 Hyper-V가 해당 포트를 예약했는지 확인할 수 있습니다.
netsh interface ipv4 show_excludedportrange protocol=tcp충돌이 발견되면 모델 서비스와 호출 스크립트의 포트를 동시에 변경하는 것이 가장 간단합니다.
5. 디지털 휴먼 배경 이미지와 디지털 휴먼 영상 제작
1. 먼저 마음에 드는 디지털 휴먼 이미지를 디자인합니다.
디지털 휴먼 이미지는 단순히 “보기 좋은” 것만 추구해서는 안 되며, 이후 웹페이지 레이아웃과 입 모양 생성에 필요한 공간도 확보해야 합니다. 비교적 안정적인 구도는 다음과 같습니다.
화면 비율은 16:9를 사용합니다.
인물은 오른쪽 3분의 1 지점에 배치합니다.
왼쪽에는 상호작용 광구와 자막을 배치할 수 있도록 넓은 어두운 여백을 남깁니다.
입술은 자연스럽게 다물고 치아가 보이지 않도록 합니다.
손이 입, 턱, 얼굴 윤곽을 가리지 않도록 합니다.
약간 어두운 측면광을 사용해 입 모양 영역의 미세한 흐림으로 인한 부자연스러움을 줄입니다.
다음 프롬프트의 방향을 참고해 인물, 의상, 장면을 직접 바꿔 사용할 수 있습니다.
영화 같은 저조도 측면 인물 사진, 화면 오른쪽에 앉아 있는 성인 여성, 부드러운 윤곽 조명,
왼쪽에는 넓은 어두운 네거티브 스페이스, 자연스러운 표정, 다문 입술, 고정된 카메라,
사실적인 피부 질감, 16:9 가로 구도.네거티브 프롬프트에는 벌어진 입, 치아 노출, 인물 중앙 배치, 밝고 복잡한 배경, 입을 가리는 손, 텍스트, 워터마크, 플라스틱 같은 피부, 만화풍 등을 추가할 수 있습니다.
2. ComfyUI + Wan2.2로 5초 디지털 휴먼 영상 생성
ComfyUI를 다운로드하고 설치한 후 실행합니다. Wan2.2의 이미지-투-비디오 워크플로를 선택하고 배경 이미지를 첫 프레임으로 사용합니다. 처음 사용할 때는 다음과 같은 보수적인 설정을 권장합니다.
매개변수|권장값
해상도|배경 이미지 비율에 따름. 원 튜토리얼 예시는 704 × 896
길이|5초
프레임 속도|25 fps
Prompt Enhance|끄기
ComfyUI 다운로드 주소:https://pan.quark.cn/s/bb9d21f1e724
프롬프트에는 동작만 설명하고 인물의 외모를 다시 설명하지 않습니다. 예시는 다음과 같습니다.
인물은 원래 위치를 유지하고, 미세하게 호흡하며, 천천히 한 번 눈을 깜빡이고, 머리를 아주 조금 자연스럽게 움직인 뒤 시작 자세로 돌아온다.
입술은 항상 다문 상태를 유지하고, 카메라는 고정하며 줌인·줌아웃·팬·틸트는 없다.파일을 내보내고 이름을 idle.mp4로 지정합니다.
실제 말하기 입 모양은 Wav2Lip이 실시간으로 생성하므로 “말하는 중”, “듣는 중”과 같은 여러 영상을 추가로 제작할 필요가 없습니다.

다음은 몇 가지 흔한 실수입니다.
프롬프트 향상 기능을 켜지 마세요. prompt_enhance 를 끄지 않으면 모델이 인물이나 장면을 다시 설계할 수 있습니다.
출력 비율은 입력 이미지의 비율과 일치해야 합니다. 16:9 가로 배경 이미지를 사용하는 경우 워크플로에서 지원하는 가로 크기로 변경해 늘어나거나 인물이 잘리는 것을 방지하세요.
프롬프트에는 동작만 작성하세요. 외모를 반복해서 설명하면 오히려 인물이 흔들리기 쉽습니다.
5초 영상이면 반복 대기 화면을 만들기에 충분합니다. 무작정 영상을 늘리면 반복이나 변형이 발생하기 쉽습니다.
6. 참조 음성 녹음(음성 복제)
Qwen3-TTS는 참조 오디오를 바탕으로 음색과 말하는 상태를 모방합니다. 5–15초 분량의 음성을 녹음하는 것이 좋으며, 조건은 다음과 같습니다.
한 사람만 말할 것
조용한 환경에서 녹음하고 음악과 뚜렷한 잔향이 없을 것
말하는 속도는 자연스럽게 하고, 복제하려는 스타일과 감정을 일치시킬 것
정확한 전체 대본을 함께 저장할 것
녹음한 파일을 내보내고( wav 또는 mp3 형식) 바탕 화면의 AI 폴더에 넣은 뒤 파일 이름을 ref.wav로 지정합니다. 녹음에서 말한 내용을 한 글자도 빠짐없이 기록해야 하며, 나중에 설정에 입력해야 합니다. 감정도 함께 복제되므로 녹음할 때 원하는 말투를 사용할 수 있습니다.
참조 오디오는 “원클릭 배포 패키지”를 다운로드하세요. 이 스크립트는 음성 대화 환경을 설치하고 각 서비스를 시작하며 음성과 영상의 동기화를 처리합니다. 스크립트는 프로젝트 버전에 따라 변경될 수 있으므로 사용하기 전에 다운로드 주소, 포트, 모델 이름을 간단히 확인하는 것이 좋습니다. 포함된 파일은 다음과 같습니다.
파일|용도
install-voice.sh|음성 대화 부분 원클릭 설치
start-voice.sh|음성 서비스 시작 / 중지 / 로그
start-livetalking.sh|입 모양 서비스 시작 / 중지
avatar-sync.js|오디오 전달 + 디지털 휴먼 배경 레이어
wav2lip256.pth|입 모양 모델 가중치
wav2lip256_avatar1.tar.gz|공식 예시 아바타(연결 과정 확인용)
원클릭 배포 패키지 다운로드 주소:https://pan.quark.cn/s/d4fc5bfc88eb
7. 파일 정리
마지막으로 5초 디지털 휴먼 영상 파일 idle.mp4와 오디오 파일 ref.wav`를 바탕 화면의 AI 폴더에 함께 넣습니다. 최종 디렉터리 구조는 다음과 같습니다.
C:\Users\사용자 이름\Desktop\AI\
├── install-voice.sh
├── start-voice.sh
├── start-livetalking.sh
├── avatar-sync.js
├── wav2lip256.pth
├── wav2lip256_avatar1.tar.gz
├── idle.mp4
└── ref.wav8. WSL2 설치(Ubuntu 24.04 및 GPU 지원)
PowerShell을 관리자 권한으로 엽니다.
wsl --update
wsl --install -d Ubuntu-24.04설치가 완료되면 컴퓨터를 다시 시작해 첫 단계의 .wslconfig 가 적용되도록 합니다. 재시작 후 Ubuntu 터미널을 열고 사용자 이름과 비밀번호를 설정한 다음 GPU 패스스루를 확인합니다.
nvidia-smi그래픽 카드 모델과 드라이버 정보가 표시되면 GPU 패스스루가 정상적으로 작동하는 것입니다.
WSL 내부에 그래픽 카드 드라이버를 다시 설치하지 마세요. 그래픽 카드 드라이버는 Windows에만 설치하며, WSL은 호스트에서 제공하는 CUDA 패스스루를 사용합니다. WSL 내부에 그래픽 카드 드라이버를 다시 설치하면 libcuda.so를 덮어써 GPU를 사용할 수 없게 됩니다.
9. 설치 패키지를 WSL로 복사
Ubuntu 터미널에서 경로의 Windows 사용자 이름을 자신의 이름으로 바꿉니다.
#복사(경로를 자신의 사용자 이름으로 변경):
mkdir -p ~/setup
cp -r "/mnt/c/Users/사용자 이름/Desktop/AI/." ~/setup/
cd ~/setup
ls -la
#줄 끝 변환:
sudo apt update
sudo apt install -y dos2unix
dos2unix *.sh
#실행 권한 추가:
chmod +x *.sh왜 줄바꿈을 변환해야 할까요: Windows 텍스트 파일은 보통 CRLF 줄바꿈을 사용하므로 변환하지 않으면 bash^M 또는 bad interpreter 오류가 발생할 수 있습니다. 많은 사용자가 여기서 막힙니다.
/mnt/c에서 많은 Python 파일을 직접 실행하면 일반적으로 더 느리고 권한 문제도 발생하기 쉽습니다. Linux 홈 디렉터리로 복사하면 더 안정적입니다.
10. 음성 대화 모듈 설치 및 테스트
1. 설치 스크립트 실행
cd ~/setup
./install-voice.sh설치 과정에서 Python 환경을 만들고 음성 활동 감지, faster-whisper, Qwen3-TTS 및 프런트엔드 구성 요소를 준비합니다. 네트워크와 디스크 속도에 따라 10여 분이 걸릴 수 있습니다.
2. 참조 오디오 형식 통일
ffmpeg -i ~/setup/ref.wav -ac 1 -ar 16000 -c:a pcm_s16le ~/s2s/ref.wav
# 형식 확인: 반드시 pcm_s16le / 16000 / 1채널이어야 합니다:
ffprobe -v error \
-show_entries stream=sample_rate,channels,codec_name \
-show_entries format=duration \
-of default=nw=1 ~/s2s/ref.wav확인 결과는 다음 조건을 충족해야 합니다:
코덱: pcm_s16le
샘플링 레이트: 16000
채널: 모노
3. 참조 오디오의 스크립트 입력
아래 문장을 녹음에서 실제로 말한 내용으로 바꾸세요:
sed -i 's|^REF_TEXT=.*|REF_TEXT="여기에 녹음과 완전히 일치하는 스크립트를 입력"|' ~/setup/start-voice.sh
grep -n "^REF_TEXT=" ~/setup/start-voice.sh스크립트에 글자가 빠지거나 오타가 있거나 구두점 차이가 너무 크면 클론 품질이 저하됩니다.
4. 최초 실행
cd ~/setup
./start-voice.sh그다음 Windows 브라우저에서 엽니다:
http://localhost:7860/브라우저의 마이크 사용을 허용하고 페이지의 상호작용 버튼을 클릭하여 테스트합니다. 처음에는 설정에 들어가 NOISE GATE를 가장 왼쪽으로 옮기거나 아예 끄는 것이 좋습니다. 그렇지 않으면 정상적인 말소리도 배경 소음으로 필터링될 수 있습니다.

11. LiveTalking(립싱크) 및 Wav2Lip 설치
새 Ubuntu 터미널을 열고 WSL에 진입한 다음 순서대로 실행합니다:
mkdir -p ~/livetalking
cd ~/livetalking
git clone https://github.com/lipku/LiveTalking.git
cd LiveTalking
uv venv --python 3.10 .venv-lt
source .venv-lt/bin/activate
uv pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 \
--index-url https://download.pytorch.org/whl/cu124
uv pip install -r requirements.txt
sudo apt install -y ffmpeg libgl1 libglib2.0-0시스템에 아직 uv가 없다면 먼저 uv 공식 설치 안내에 따라 설치한 후 위 명령을 다시 실행하세요.
립싱크 모델과 기본 디지털 휴먼 배치:
cd ~/livetalking/LiveTalking
# 이름을 반드시 wav2lip.pth로 변경해야 합니다
cp ~/setup/wav2lip256.pth models/wav2lip.pth
# 공식 예시 캐릭터
tar -xzf ~/setup/wav2lip256_avatar1.tar.gz -C data/avatars/
# 확인
ls -lh models/ && ls data/avatars/주의: 원본 파일 이름은 wav2lip256.pth이지만, 복사한 후에는 반드시 wav2lip.pth로 지정해야 합니다. 프로젝트가 기본적으로 이 파일 이름으로 가중치를 찾기 때문입니다.
먼저 공식 예시 디지털 휴먼을 테스트합니다:
cd ~/livetalking/LiveTalking
source .venv-lt/bin/activate
python app.py --transport webrtc --model wav2lip \
--avatar_id wav2lip256_avatar1 \
--stun 'stun:stun.l.google.com:19302'브라우저에서 엽니다:
http://localhost:8010/index.html연결에 성공한 후 중국어 텍스트를 한 단락 보내세요. 소리, 인물 동작, 일치하는 입 모양이 동시에 나타나야 이 단계가 제대로 완료된 것입니다.
터미널 로그의 inferfps와 finalfps를 통해 실시간성을 확인할 수 있습니다. 일반적으로 두 값 모두 25 정도 이상이 되기를 기대합니다. inferfps가明显하게 부족하면 모델 부하를 낮추거나 더 가벼운 설정으로 변경해야 합니다.
온라인 튜토리얼에서는 MuseTalk을 많이 추천합니다. 화질은 더 좋지만 이번 AI 디지털 휴먼은 화면 품질 요구가 높지 않고, Wav2Lip의 VRAM 사용량은 약 1.3GB에 불과합니다. 어두운 조명, 측면 얼굴, 화면에서 인물 비중이 크지 않은 경우에도 낮은 비용으로 수용 가능한 결과를 얻을 수 있습니다. 반면 MuseTalk은 12G의 VRAM을 사용합니다. 또한 완전한 로컬 배포에서는 stun도 필요하지 않지만, 빈 문자열을 전달하면 안 됩니다. STUN 주소 형식 오류로 인해 WebRTC가 시작되지 않을 수 있습니다.
12. 동영상을 나만의 디지털 휴먼 캐릭터로 변환
LiveTalking 실행 중 다음 주소를 엽니다:
http://localhost:8010/avatar.html다음과 같이 생성 작업을 제출합니다:
알고리즘: Wav2Lip
Avatar ID: wav2lip256_myavatar( wav2lip256_ 접두사 유지)
동영상 파일: 앞에서 생성한 idle.mp4
상태가 COMPLETED로 바뀌면 나만의 디지털 휴먼을 시작합니다:
cd ~/setup
AVATAR_ID=wav2lip256_myavatar ./start-livetalking.sh앞으로 기본적으로 이 캐릭터를 실행하려면 스크립트의 Avatar ID를 수정할 수 있습니다:
sed -i 's/wav2lip256_lingdu/wav2lip256_myavatar/' ~/setup/start-livetalking.sh생성 후 입 주변에明显한 찢어짐이 나타난다면 서둘러 모델을 바꾸기보다 먼저 대기 동영상에서 손, 머리카락 또는 옷깃이 입과 턱을 자주 가리고 있는지 확인하세요.
13. 올바른 순서로 전체 시스템 시작
전체 서비스에는 터미널 창 3개가 필요합니다.

첫 번째 창: Windows 로컬 대형 언어 모델
cd /d E:\llama.cpp
llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf ^
-np 1 -c 8192 -fa on --temp 1.0 --top-p 0.95 ^
--host 0.0.0.0 --port 8090두 번째 창: WSL 립싱크 서비스
cd ~/setup
./start-livetalking.sh세 번째 창: WSL 음성 서비스
cd ~/setup
./start-voice.sh마지막으로 http://localhost:7860/을 열고, 필요하면 Ctrl + F5를 눌러 강제로 새로 고침합니다. 먼저 페이지를 클릭하여 디지털 휴먼을 연결한 다음 음성 상호작용 버튼을 클릭하여 말하기를 시작합니다.
서비스를 종료할 때는 다음을 실행합니다:
./start-voice.sh stop
./start-livetalking.sh stopWindows의 llama.cpp 창에서는 Ctrl + C를 바로 눌러 중지할 수 있습니다.
14. 자연스럽고 지연 시간이 짧은 페르소나 설정
웹 페이지의 Settings → INSTRUCTIONS에 페르소나를 입력합니다. 단순히 “상냥함, 활발함, 사려 깊음” 같은 형용사만 나열하지 말고, 모델이 응답 리듬을 익힐 수 있도록 짧은 대화 예시도 몇 가지 제공하는 것이 좋습니다.
다음과 같은 제약을 사용할 수 있습니다:
당신은 자연스럽고 친절한 가상 동반자입니다. 구어체로 말하고, 매번 두세 문장으로만 답변하세요.
Markdown, 목록, 번호 매기기, 이모티콘 및 무대 동작 묘사를 사용하지 마세요.
사용자의 질문을 되풀이하지 말고 바로 답변하세요. 확실하지 않은 정보는 솔직하게 밝히세요.
예시:
사용자: 오늘 조금 피곤해.
어시스턴트: 그럼 먼저 무리해서 온 힘을 다하려 하지 마세요. 물을 조금 마시고 10분 쉬었다가, 천천히 다시 처리해 봐요.짧은 답변은 실제 대화처럼 느껴질 뿐 아니라 전체 음성 합성이 끝날 때까지 기다리는 시간도 크게 줄여 줍니다. Markdown과 이모티콘을 사용하지 않는 이유는 TTS가 기호나 서식 표시를 읽는 것을 방지하기 위해서입니다. /no_think는 불필요하게 긴 추론 출력을 끄는 기능으로, 첫 문장 지연 시간을 더욱 줄일 수 있습니다.
15. 끼어들기와 오인 중단 줄이기
실시간 음성 시스템에서 가장 조정하기 어려운 부분은 모델이 아니라 “사용자가 언제 말을 끝냈다고 판단할 것인가”입니다. 중국어로 말할 때는 중간에 멈춤이 자주 발생하므로, 무음 판정 시간이 너무 짧으면 대화 상대가 자주 말을 가로채게 됩니다.
~/setup/start-voice.sh에서 다음 매개변수를 시험해 볼 수 있습니다:
MIN_SILENCE_MS=1200
VAD_THRESH=0.6
MIN_SPEECH_MS=500
SPEECH_PAD_MS=300매개변수 의미:
MIN_SILENCE_MS: 얼마나 침묵해야 한 문장이 끝났다고 판단할지 지정합니다. 먼저 1200ms를 사용하고 반응이 느리다고 느껴지면 900ms로 낮추세요.
VAD_THRESH: 음성 활동 임계값입니다. 시끄러운 환경에서는 0.7까지 높일 수 있습니다.
MIN_SPEECH_MS: 너무 짧은 소리를 필터링합니다.
SPEECH_PAD_MS: 음성 앞뒤에 약간의 버퍼를 남겨 단어가 잘리는 것을 줄입니다.
로그 확인:
tail -f ~/s2s/logs/s2s.log | grep -E "soft-ended|discard"매개변수를 수정한 후에도 로그 동작이 완전히 동일하다면, 대개 매개변수가 잘못된 것이 아니라 서비스가 실제로 재시작되지 않은 것입니다.
16. VRAM이 부족할 때 부하 줄이기
효과가 큰 순서대로 다음 방법을 시도할 수 있습니다:
Qwen3-14B를 Qwen3-8B로 변경하면 약 3GB를 절약할 수 있습니다.
Qwen3-4B로 변경하면 약 6GB를 절약할 수 있습니다.
음성 인식 모델을 `medium`으로 변경하면 약 1.5GB를 절약할 수 있습니다.
llama.cpp의 컨텍스트를 `-c 8192`에서 `-c 4096`으로 낮추면 약 1GB를 더 절약할 수 있습니다.
Wav2Lip을 유지하고, VRAM이 부족할 때 더 무거운 립싱크 모델로 바꾸지 마세요.
음성 대화는 한 라운드에 보통 두세 문장뿐이므로, 14B와 8B의 “청취 품질” 차이가 대기 시간으로 인한 사용 경험의 차이보다 반드시 큰 것은 아닙니다. VRAM이 부족할 때는 안정성과 낮은 지연 시간을 우선하세요.
17. 일반적인 문제 빠른 확인
현상|원인 및 해결 방법
bad interpreter 또는 ^M 표시|스크립트가 Windows 줄바꿈 형식이므로 `dos2unix *.sh`를 실행합니다.
WebRTC가 계속 연결되지 않음|`.wslconfig`에서 `hostAddressLoopback=true`를 확인한 다음 `wsl --shutdown`을 실행합니다.
웹 페이지에 JSON 파싱 실패가 표시됨|대개 백엔드에서 500 오류를 반환한 경우입니다. 시작 터미널에서 실제 오류를 확인합니다.
malformed/uri:invalid scheme|STUN 주소가 비어 있거나 형식이 잘못된 경우입니다. 유효한 `stun:` 주소를 전달합니다.
웹 페이지는 열리지만 말해도 반응이 없음|NOISE GATE를 끄거나 낮추고, 브라우저에 마이크 권한이 부여되었는지 확인합니다.
디지털 휴먼이 자주 말을 가로챔|`MIN_SILENCE_MS`를 높이고, 1200ms부터 시작하는 것을 권장합니다.
답변이 질문과 맞지 않음|먼저 잘못된 문장 분할을 처리하고, 서로 충돌하는 실시간 전사 프로세스가 동시에 실행되고 있지 않은지 확인합니다.
매번 음성이 크게 달라짐|TTS Base 모델을 사용하고 있는지 확인하고, 참조 오디오와 스크립트를 대조합니다.
음성이 변조된 것처럼 들림|`avatar-sync.js`의 샘플링 레이트 설정을 확인합니다. 일반적으로 16000Hz 오디오와 일치해야 합니다.
포트 바인딩에 실패했지만 프로세스를 찾을 수 없음|Hyper-V 예약 포트 범위를 확인하고, 예약되지 않은 포트로 변경합니다.
GPU 사용률이 가득 찼지만 오랫동안 진행되지 않음|비디오 메모리가 시스템 메모리로 폴백되었을 수 있습니다. 모델을 낮추거나 NVIDIA 제어판에서 CUDA 시스템 메모리 폴백 정책을 확인합니다.
LAN IP를 사용할 때 마이크가 작동하지 않음|브라우저는 일반적으로 마이크 접근을 허용하려면 localhost 또는 HTTPS를 요구합니다.
컴퓨터가 절전 모드에서 깨어난 후 서비스가 작동하지 않음|`wsl --shutdown`을 실행한 후 세 서비스를 다시 시작합니다.
다시 시작할 때 포트가 사용 중이라고 표시됨|먼저 두 개의 `stop` 명령을 실행하고, 기존 프로세스가 종료된 것을 확인한 뒤 다시 시작합니다.
十八、선택 사항: 원클릭 시작 스크립트 만들기
세 서비스가 모두 독립적으로 안정적으로 실행되는 것을 확인한 후, Windows에서 start-ai-avatar.bat 파일을 새로 만들 수 있습니다.
@echo off
start "llama-server" cmd /k "cd /d E:\llama.cpp && llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf -np 1 -c 8192 -fa on --temp 1.0 --host 0.0.0.0 --port 8090"
timeout /t 25
start "livetalking" wsl -d Ubuntu-24.04 -- bash -lc "cd ~/setup && ./start-livetalking.sh"
timeout /t 30
start "voice" wsl -d Ubuntu-24.04 -- bash -lc "cd ~/setup && ./start-voice.sh"
timeout /t 10
start http://localhost:7860/대기 시간은 자신의 컴퓨터에 맞게 조정해야 합니다. 처음 배포할 때는 배치 스크립트에 바로 의존하지 마세요. 어느 단계에서 실패했을 때 어떤 서비스에 문제가 있는지 판단하기 어려워집니다.
十九、휴대폰 접속 및 외부 인터넷 공개 시 보안 문제
브라우저의 마이크는 민감한 권한에 해당합니다. 일반 LAN IP로 웹 페이지를 열면 페이지가 보안 컨텍스트가 아니기 때문에 브라우저가 권한 부여를 거부할 수 있습니다. 기술적으로는 Cloudflare Tunnel과 같은 도구를 사용해 로컬 페이지를 HTTPS 주소에 매핑할 수 있습니다. 예:
cloudflared tunnel --url http://localhost:7860그러나 이는 로컬 서비스가 인터넷을 통해 접근될 수 있다는 의미이기도 합니다. 인증되지 않은 임시 주소를 공개적으로 공유하지 말고, 개인 음성·대화 기록·영상 자료가 포함된 서비스를 인터넷에 직접 노출하지 마세요. 원격으로 사용해야 한다면 최소한 접근 제어를 추가하고, 사용 후에는 즉시 터널을 종료해야 합니다.
二十、배포가 정말 성공했는지 판단하는 방법
“웹 페이지가 열린다”는 것을 완료 기준으로 삼지 마세요. 다음 순서로 검수하는 것을 권장합니다.
1. llama.cpp의 8090 포트에서 중국어 답변이 정상적으로 생성된다.
2. 음성 웹 페이지가 마이크 입력을 인식하고 합성 음성을 반환한다.
3. LiveTalking 예제 캐릭터가 음성을 내고 일치하는 입 모양을 생성한다.
4. 사용자 지정 대기 영상을 Avatar로 성공적으로 변환할 수 있다.
5. 세 서비스를 연결한 후 첫 문장까지의 대기 시간이 약 1–2초이고, 연속 대화에서 말을 자주 가로채지 않는다.
6. 장시간 실행해도 비디오 메모리가 계속 증가하지 않으며, 서비스 재시작 및 중지 명령이 정상적으로 작동한다.
한 번의 답변에 걸리는 지연 시간은 일반적으로 여러 구간이 누적된 결과입니다. 음성 인식, 언어 모델의 첫 번째 token, 음성 합성, 입 모양 추론, 완전한 음성을 기다리는 버퍼링 등이 포함됩니다. 사용 환경을 최적화하려면 모든 모델을 무작정 교체하기보다 먼저 로그를 통해 어느 구간이 가장 느린지 확인해야 합니다.
맺음말:
이 구성의 진정한 재미는 단순히 “사진 한 장이 말하게 하는 것”에 있지 않습니다. 여러 로컬 AI 모듈을 완전한 실시간 상호작용 체인으로 연결한다는 데 있습니다. 가상 동반자로 사용할 수도 있고, 전시관 안내원, 데스크톱 음성 비서, 라이브 방송 디지털 휴먼 또는 캐릭터 프로토타입으로 개조할 수도 있습니다.
처음 배포할 때 가장 안정적인 전략은 단계별로 검증하는 것입니다. 먼저 언어 모델을 실행하고, 그다음 음성을 테스트한 뒤, 입 모양을 확인하고, 마지막으로 사용자 지정 캐릭터를 적용하세요. 각 단계에 명확한 성공 기준이 있다면 복잡한 시스템도 원인을 찾고 재현할 수 있는 작은 문제들의 집합으로 나눌 수 있습니다.
마지막으로 다시 한 번 강조합니다. 디지털 휴먼의 이미지와 음성에는 개인의 권리가 관련될 수 있습니다. 공개 전시나 상업적 용도로 사용하기 전에 반드시 자료 권리자의 허가를 받고, 해당 자료가 AI 시스템에서 인물과 상호작용하는 대화에 사용된다는 점을 명확히 알려야 합니다.
