VisionAIDocs
GitHub
VISIONAI GUIDE

Windows 실행

RTX 3090 Windows 11에서 WSL 없이 CUDA로 설치·실행하고 WebRTC 립싱크와 녹화까지 확인한 기록입니다.

로컬 소스와 실제 테스트 기준2026.09.17 업데이트

2026-09-18에 Windows 11 PC에 VisionAI을 설치하고 실제로 실행했습니다. WSL 없이 Windows에서 바로 설치했고, CUDA 추론·WebRTC 전송·한국어 TTS 립싱크·녹화가 모두 동작했습니다. Mac 환경은 개발 환경을 참고하세요.

검증한 환경

항목
장비 junowin11, Windows 11 Pro
GPU NVIDIA GeForce RTX 3090 24GB, 드라이버 596.21
메모리 32GB
설치 위치 C:\Developments\LiveTalking
Python 3.12.13 (uv 가상 환경 .venv)
PyTorch 2.9.1+cu128, torchvision 0.24.1, torchaudio 2.9.1
추론 장치 CUDA 12.8 (Using cuda for inference)
소스 upstream b3e7490 + Mac 로컬 변경 동일 적용
ffmpeg WinGet 설치본 (PATH 등록)

WSL2 Ubuntu도 설치되어 있지만 이번 실행에는 사용하지 않았습니다.

설치 순서

실제로 진행한 순서입니다. 명령은 Windows cmd 기준입니다.

1. 소스 준비

upstream 커밋 b3e7490의 소스를 C:\Developments\LiveTalking에 둡니다. 그다음 Mac에서 만든 로컬 변경을 같은 내용으로 적용합니다.

cd /d C:\Developments\LiveTalking
git apply mac-local.patch

mac-local.patch는 Mac 저장소의 git diff 결과입니다. --listenhost 옵션, /disconnect API, 빈 STUN 처리, 페이지 종료 시 세션 해제가 들어 있습니다. 내용은 개발 환경의 로컬 변경과 같습니다.

이 PC에서 git clone https://github.com/lipku/LiveTalking은 5분 넘게 거의 진행되지 않았습니다. 그래서 Mac 저장소에서 git archive b3e7490으로 묶어 복사했습니다. 네트워크 상태에 따라 클론이 정상적으로 될 수도 있습니다.

2. 모델과 아바타 복사

모델 가중치와 아바타는 git에 없으므로 Mac에서 복사합니다. 이번에 옮긴 파일은 약 650MB입니다.

경로 크기
models\wav2lip.pth 약 205MB
data\avatars\wav2lip256_avatar1 약 362MB
data\avatars\person_camera_20260917 약 51MB

wav2lip_avatar_glass_man은 옮기지 않았습니다. 필요하면 같은 방식으로 data\avatars 아래에 복사합니다.

3. 가상 환경과 패키지

Mac의 .venv는 macOS용이라 복사할 수 없습니다. Windows에서 새로 만듭니다. PyTorch는 CUDA용 인덱스에서 먼저 설치하고, 나머지는 Mac lock 파일에서 torch 세 줄을 뺀 목록으로 설치합니다.

uv venv --python 3.12 .venv
uv pip install --python .venv\Scripts\python.exe torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu128
uv pip install --python .venv\Scripts\python.exe -r req-win-base.txt

req-win-base.txtrequirements-mac-lock.txt에서 torch로 시작하는 줄을 지운 파일입니다. 나머지 패키지는 모두 Windows용 휠이 있어 같은 버전으로 설치됐습니다.

순서를 바꿔 lock 파일 전체를 먼저 설치하면 PyPI의 CPU 버전 torch가 들어옵니다. 그러면 CUDA를 쓰지 않고 CPU로 추론합니다.

두 번째 설치 명령이 출력 없이 10분 넘게 멈춘 것처럼 보였습니다. 중단하고 -v 옵션과 UV_HTTP_TIMEOUT=60으로 다시 실행하자 정상적으로 내려받아 끝났습니다. 진행 상황이 보이지 않으면 -v로 실행하세요.

설치가 끝나면 CUDA 인식을 확인합니다.

.venv\Scripts\python.exe -c "import torch; print(torch.__version__, torch.cuda.is_available(), torch.cuda.get_device_name(0))"

결과는 2.9.1+cu128 True NVIDIA GeForce RTX 3090이었습니다.

4. 설정과 실행 파일

config-win.yaml은 Mac 설정과 거의 같습니다. RTX 3090에 맞춰 batch_size만 2에서 16으로 올렸습니다.

model: wav2lip
avatar_id: wav2lip256_avatar1
batch_size: 16
fps: 25
tts: edgetts
REF_FILE: ko-KR-SunHiNeural
transport: webrtc
max_session: 1
listenhost: 127.0.0.1
listenport: 8010
stun: ""

실행 파일 run-win.batrun-mac.command와 같은 역할입니다. 탐색기에서 더블클릭하거나 명령 프롬프트에서 실행합니다.

@echo off
cd /d "%~dp0"
.venv\Scripts\python.exe app.py --config config-win.yaml

서버가 뜨면 start http server; http://<serverip>:8010이 출력됩니다. 해당 PC의 브라우저에서 http://127.0.0.1:8010/index-en.html을 엽니다. 사용법은 빠른 시작과 같습니다.

테스트 방법

해당 PC에 원격 화면이 없어서 브라우저 대신 헤드리스 WebRTC 클라이언트를 만들어 확인했습니다. 설치 폴더의 e2e_client.py입니다. aiortc로 브라우저와 같은 방식으로 접속하고, 받은 영상·음성을 측정합니다.

  1. /offer로 WebRTC 연결을 만들고 첫 영상 프레임을 기다립니다.
  2. 4초 동안 대기 화면을 받습니다.
  3. /human에 Echo 모드로 한국어 문장을 보냅니다.
  4. /is_speaking으로 말하기 시작과 끝을 확인합니다.
  5. /disconnect로 세션을 해제합니다.
  6. 구간별 FPS, 음성 크기, 프레임 모음 이미지와 수신 음성 WAV를 e2e-out\에 저장합니다.
.venv\Scripts\python.exe e2e_client.py
.venv\Scripts\python.exe e2e_client.py person_camera_20260917 ko-KR-InJoonNeural
set RECORD=1&& .venv\Scripts\python.exe e2e_client.py

인자는 아바타 ID와 음성 ID입니다. RECORD=1이면 녹화를 시작·종료하고 /record/<sessionid>에서 MP4를 내려받습니다.

결과

보낸 문장은 안녕하세요. 윈도우에서 실시간으로 한국어를 말하는 아바타입니다.입니다.

항목 기본 아바타 사용자 영상 아바타
아바타 ID wav2lip256_avatar1 person_camera_20260917
음성 ko-KR-SunHiNeural ko-KR-InJoonNeural
해상도 576×768 1280×720
/offer 응답 0.50초 0.53초
첫 영상 프레임 1.66초 1.23초
대기 중 FPS 25.1 25.1
말하는 중 FPS 25.0 25.1
전송 후 말하기 시작 2.33초 1.34초
말하기 길이 6.17초 7.22초
음성 RMS (대기 / 말하기) 0 / 2957.9 0 / 2008.8

대기 중에는 무음이고 말하는 동안에만 소리가 들어왔습니다. 말하는 구간의 프레임을 확인했으며, 두 아바타 모두 문장에 맞춰 입 모양이 바뀌었습니다.

기본 아바타의 첫 테스트는 Edge TTS의 첫 호출 시간을 포함합니다. 말하기 시작 시간은 네트워크 상태에 따라 달라집니다.

그 밖의 확인 항목

항목 결과
단위 테스트 Ran 2 tests ... OK
연속 접속 max_session: 1에서 세 번 연속 접속 성공. /disconnect가 세션 슬롯을 정상 해제합니다.
녹화 /record 시작·종료와 다운로드 성공. H.264 576×768 영상 + AAC 16kHz 음성, 13.5초
서버 로그 오류·예외 없음
GPU 메모리 실행 중 약 2.4GB 추가 사용, 종료 후 원래대로

녹화는 ffmpeg 명령줄 도구를 호출합니다. Windows에서도 PATH에 ffmpeg가 있으면 코드 수정 없이 동작합니다.

확인하지 않은 범위

  • Windows 브라우저 화면: 서버 입장에서는 브라우저와 같은 WebRTC 연결이지만, 브라우저의 자동 재생 정책과 화면 표시는 직접 보지 않았습니다.
  • 다른 PC에서 접속: listenhost: 127.0.0.1이므로 해당 PC 안에서만 접속됩니다. 원격 접속 조건은 연결과 설정을 참고하세요.
  • 장시간 실행, 동시 접속, Chat 모드(LLM), MuseTalk, STT: 이번 테스트에 포함하지 않았습니다.
  • wav2lip_avatar_glass_man: Windows로 옮기지 않았습니다.

Mac과 다른 점

항목 Mac Windows
추론 장치 MPS CUDA 12.8
PyTorch 설치 PyPI 기본 download.pytorch.org/whl/cu128 인덱스
Python 경로 .venv/bin/python .venv\Scripts\python.exe
실행 파일 run-mac.command run-win.bat
설정 파일 config-mac.yaml (batch_size: 2) config-win.yaml (batch_size: 16)
ffmpeg Homebrew WinGet

코드는 두 환경이 같습니다. utils/device.py가 CUDA → MPS → CPU 순서로 장치를 고르므로 장치 설정을 바꿀 필요가 없습니다.

서버 종료

run-win.bat을 실행한 창에서 Ctrl+C를 누르거나 창을 닫습니다. 이번 테스트 후에는 서버를 종료했으며, 같은 PC에서 실행 중인 다른 서비스는 건드리지 않았습니다.

VisionAI 사용자 가이드실시간 아바타를 위한 작은 안내서.
문서 제목과 본문을 검색합니다.Enter로 첫 결과 열기