mirror of
https://github.com/RVC-Boss/GPT-SoVITS.git
synced 2025-06-28 16:55:08 +08:00
Add Windows Install Powershell Scripts (#2487)
This commit is contained in:
parent
37f5abfcb4
commit
4839e82148
@ -64,6 +64,14 @@ If you are a Windows user (tested with win>=10), you can [download the integrate
|
|||||||
|
|
||||||
**Users in China can [download the package here](https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/dkxgpiy9zb96hob4#KTvnO).**
|
**Users in China can [download the package here](https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/dkxgpiy9zb96hob4#KTvnO).**
|
||||||
|
|
||||||
|
Install the program by running the following commands:
|
||||||
|
|
||||||
|
```pwsh
|
||||||
|
conda create -n GPTSoVits python=3.10
|
||||||
|
conda activate GPTSoVits
|
||||||
|
pwsh -F install.ps1 --Device <CU126|CU128|CPU> --Source <HF|HF-Mirror|ModelScope> [--DownloadUVR5]
|
||||||
|
```
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -62,6 +62,12 @@
|
|||||||
|
|
||||||
**中国地区的用户可以[在此处下载整合包](https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/dkxgpiy9zb96hob4#KTvnO).**
|
**中国地区的用户可以[在此处下载整合包](https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/dkxgpiy9zb96hob4#KTvnO).**
|
||||||
|
|
||||||
|
```pwsh
|
||||||
|
conda create -n GPTSoVits python=3.10
|
||||||
|
conda activate GPTSoVits
|
||||||
|
pwsh -F install.ps1 --Device <CU126|CU128|CPU> --Source <HF|HF-Mirror|ModelScope> [--DownloadUVR5]
|
||||||
|
```
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -58,6 +58,12 @@ https://github.com/RVC-Boss/GPT-SoVITS/assets/129054828/05bee1fa-bdd8-4d85-9350-
|
|||||||
|
|
||||||
Windows 사용자라면 (win>=10에서 테스트됨), [통합 패키지를 다운로드](https://huggingface.co/lj1995/GPT-SoVITS-windows-package/resolve/main/GPT-SoVITS-v3lora-20250228.7z?download=true)한 후 압축을 풀고 _go-webui.bat_ 파일을 더블 클릭하면 GPT-SoVITS-WebUI를 시작할 수 있습니다.
|
Windows 사용자라면 (win>=10에서 테스트됨), [통합 패키지를 다운로드](https://huggingface.co/lj1995/GPT-SoVITS-windows-package/resolve/main/GPT-SoVITS-v3lora-20250228.7z?download=true)한 후 압축을 풀고 _go-webui.bat_ 파일을 더블 클릭하면 GPT-SoVITS-WebUI를 시작할 수 있습니다.
|
||||||
|
|
||||||
|
```pwsh
|
||||||
|
conda create -n GPTSoVits python=3.10
|
||||||
|
conda activate GPTSoVits
|
||||||
|
pwsh -F install.ps1 --Device <CU126|CU128|CPU> --Source <HF|HF-Mirror|ModelScope> [--DownloadUVR5]
|
||||||
|
```
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -58,6 +58,12 @@ https://github.com/RVC-Boss/GPT-SoVITS/assets/129054828/05bee1fa-bdd8-4d85-9350-
|
|||||||
|
|
||||||
Eğer bir Windows kullanıcısıysanız (win>=10 ile test edilmiştir), [entegre paketi indirin](https://huggingface.co/lj1995/GPT-SoVITS-windows-package/resolve/main/GPT-SoVITS-v3lora-20250228.7z?download=true) ve _go-webui.bat_ dosyasına çift tıklayarak GPT-SoVITS-WebUI'yi başlatın.
|
Eğer bir Windows kullanıcısıysanız (win>=10 ile test edilmiştir), [entegre paketi indirin](https://huggingface.co/lj1995/GPT-SoVITS-windows-package/resolve/main/GPT-SoVITS-v3lora-20250228.7z?download=true) ve _go-webui.bat_ dosyasına çift tıklayarak GPT-SoVITS-WebUI'yi başlatın.
|
||||||
|
|
||||||
|
```pwsh
|
||||||
|
conda create -n GPTSoVits python=3.10
|
||||||
|
conda activate GPTSoVits
|
||||||
|
pwsh -F install.ps1 --Device <CU126|CU128|CPU> --Source <HF|HF-Mirror|ModelScope> [--DownloadUVR5]
|
||||||
|
```
|
||||||
|
|
||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
241
install.ps1
Normal file
241
install.ps1
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
Param (
|
||||||
|
[Parameter(Mandatory=$true)][ValidateSet("CU126", "CU128", "CPU")][string]$Device,
|
||||||
|
[Parameter(Mandatory=$true)][ValidateSet("HF", "HF-Mirror", "ModelScope")][string]$Source,
|
||||||
|
[switch]$DownloadUVR5
|
||||||
|
)
|
||||||
|
|
||||||
|
$global:ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
trap {
|
||||||
|
Write-ErrorLog $_
|
||||||
|
}
|
||||||
|
|
||||||
|
function Write-ErrorLog {
|
||||||
|
param (
|
||||||
|
[System.Management.Automation.ErrorRecord]$ErrorRecord
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Host "`n[ERROR] Command failed:" -ForegroundColor Red
|
||||||
|
if (-not $ErrorRecord.Exception.Message){
|
||||||
|
} else {
|
||||||
|
Write-Host "Message:" -ForegroundColor Red
|
||||||
|
$ErrorRecord.Exception.Message -split "`n" | ForEach-Object {
|
||||||
|
Write-Host " $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Command:" -ForegroundColor Red -NoNewline
|
||||||
|
Write-Host " $($ErrorRecord.InvocationInfo.Line)".Replace("`r", "").Replace("`n", "")
|
||||||
|
Write-Host "Location:" -ForegroundColor Red -NoNewline
|
||||||
|
Write-Host " $($ErrorRecord.InvocationInfo.ScriptName):$($ErrorRecord.InvocationInfo.ScriptLineNumber)"
|
||||||
|
Write-Host "Call Stack:" -ForegroundColor DarkRed
|
||||||
|
$ErrorRecord.ScriptStackTrace -split "`n" | ForEach-Object {
|
||||||
|
Write-Host " $_" -ForegroundColor DarkRed
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function Write-Info($msg) {
|
||||||
|
Write-Host "[INFO]:" -ForegroundColor Green -NoNewline
|
||||||
|
Write-Host " $msg"
|
||||||
|
}
|
||||||
|
function Write-Success($msg) {
|
||||||
|
Write-Host "[SUCCESS]:" -ForegroundColor Blue -NoNewline
|
||||||
|
Write-Host " $msg"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Invoke-Conda {
|
||||||
|
param (
|
||||||
|
[Parameter(ValueFromRemainingArguments = $true)]
|
||||||
|
[string[]]$Args
|
||||||
|
)
|
||||||
|
|
||||||
|
$output = & conda install -y -q -c conda-forge @Args 2>&1
|
||||||
|
$exitCode = $LASTEXITCODE
|
||||||
|
|
||||||
|
if ($exitCode -ne 0) {
|
||||||
|
Write-Host "Conda Install $Args Failed" -ForegroundColor Red
|
||||||
|
$errorMessages = @()
|
||||||
|
foreach ($item in $output) {
|
||||||
|
if ($item -is [System.Management.Automation.ErrorRecord]) {
|
||||||
|
$msg = $item.Exception.Message
|
||||||
|
Write-Host "$msg" -ForegroundColor Red
|
||||||
|
$errorMessages += $msg
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host $item
|
||||||
|
$errorMessages += $item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw [System.Exception]::new(($errorMessages -join "`n"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Invoke-Pip {
|
||||||
|
param (
|
||||||
|
[Parameter(ValueFromRemainingArguments = $true)]
|
||||||
|
[string[]]$Args
|
||||||
|
)
|
||||||
|
|
||||||
|
$output = & pip install @Args 2>&1
|
||||||
|
$exitCode = $LASTEXITCODE
|
||||||
|
|
||||||
|
if ($exitCode -ne 0) {
|
||||||
|
$errorMessages = @()
|
||||||
|
Write-Host "Pip Install $Args Failed" -ForegroundColor Red
|
||||||
|
foreach ($item in $output) {
|
||||||
|
if ($item -is [System.Management.Automation.ErrorRecord]) {
|
||||||
|
$msg = $item.Exception.Message
|
||||||
|
Write-Host "$msg" -ForegroundColor Red
|
||||||
|
$errorMessages += $msg
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host $item
|
||||||
|
$errorMessages += $item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw [System.Exception]::new(($errorMessages -join "`n"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Invoke-Download {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$Uri,
|
||||||
|
|
||||||
|
[Parameter()]
|
||||||
|
[string]$OutFile
|
||||||
|
)
|
||||||
|
|
||||||
|
try {
|
||||||
|
$params = @{
|
||||||
|
Uri = $Uri
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($OutFile) {
|
||||||
|
$params["OutFile"] = $OutFile
|
||||||
|
}
|
||||||
|
|
||||||
|
$null = Invoke-WebRequest @params -ErrorAction Stop
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
Write-Host "Failed to download:" -ForegroundColor Red
|
||||||
|
Write-Host " $Uri"
|
||||||
|
throw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Invoke-Unzip {
|
||||||
|
param($ZipPath, $DestPath)
|
||||||
|
Expand-Archive -Path $ZipPath -DestinationPath $DestPath -Force
|
||||||
|
Remove-Item $ZipPath -Force
|
||||||
|
}
|
||||||
|
|
||||||
|
chcp 65001
|
||||||
|
Set-Location $PSScriptRoot
|
||||||
|
|
||||||
|
Write-Info "Installing FFmpeg & CMake..."
|
||||||
|
Invoke-Conda ffmpeg cmake
|
||||||
|
Write-Success "FFmpeg & CMake Installed"
|
||||||
|
|
||||||
|
$PretrainedURL = ""
|
||||||
|
$G2PWURL = ""
|
||||||
|
$UVR5URL = ""
|
||||||
|
$NLTKURL = ""
|
||||||
|
$OpenJTalkURL = ""
|
||||||
|
|
||||||
|
switch ($Source) {
|
||||||
|
"HF" {
|
||||||
|
Write-Info "Download Model From HuggingFace"
|
||||||
|
$PretrainedURL = "https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/pretrained_models.zip"
|
||||||
|
$G2PWURL = "https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/G2PWModel.zip"
|
||||||
|
$UVR5URL = "https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/uvr5_weights.zip"
|
||||||
|
$NLTKURL = "https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/nltk_data.zip"
|
||||||
|
$OpenJTalkURL = "https://huggingface.co/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/open_jtalk_dic_utf_8-1.11.tar.gz"
|
||||||
|
}
|
||||||
|
"HF-Mirror" {
|
||||||
|
Write-Info "Download Model From HuggingFace-Mirror"
|
||||||
|
$PretrainedURL = "https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/pretrained_models.zip"
|
||||||
|
$G2PWURL = "https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/G2PWModel.zip"
|
||||||
|
$UVR5URL = "https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/uvr5_weights.zip"
|
||||||
|
$NLTKURL = "https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/nltk_data.zip"
|
||||||
|
$OpenJTalkURL = "https://hf-mirror.com/XXXXRT/GPT-SoVITS-Pretrained/resolve/main/open_jtalk_dic_utf_8-1.11.tar.gz"
|
||||||
|
}
|
||||||
|
"ModelScope" {
|
||||||
|
Write-Info "Download Model From ModelScope"
|
||||||
|
$PretrainedURL = "https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/pretrained_models.zip"
|
||||||
|
$G2PWURL = "https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/G2PWModel.zip"
|
||||||
|
$UVR5URL = "https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/uvr5_weights.zip"
|
||||||
|
$NLTKURL = "https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/nltk_data.zip"
|
||||||
|
$OpenJTalkURL = "https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/open_jtalk_dic_utf_8-1.11.tar.gz"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path "GPT_SoVITS/pretrained_models/sv")) {
|
||||||
|
Write-Info "Downloading Pretrained Models..."
|
||||||
|
Invoke-Download -Uri $PretrainedURL -OutFile "pretrained_models.zip"
|
||||||
|
Invoke-Unzip "pretrained_models.zip" "GPT_SoVITS"
|
||||||
|
Write-Success "Pretrained Models Downloaded"
|
||||||
|
} else {
|
||||||
|
Write-Info "Pretrained Model Exists"
|
||||||
|
Write-Info "Skip Downloading Pretrained Models"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (-not (Test-Path "GPT_SoVITS/text/G2PWModel")) {
|
||||||
|
Write-Info "Downloading G2PWModel..."
|
||||||
|
Invoke-Download -Uri $G2PWURL -OutFile "G2PWModel.zip"
|
||||||
|
Invoke-Unzip "G2PWModel.zip" "GPT_SoVITS/text"
|
||||||
|
Write-Success "G2PWModel Downloaded"
|
||||||
|
} else {
|
||||||
|
Write-Info "G2PWModel Exists"
|
||||||
|
Write-Info "Skip Downloading G2PWModel"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($DownloadUVR5) {
|
||||||
|
if (-not (Test-Path "tools/uvr5/uvr5_weights")) {
|
||||||
|
Write-Info "Downloading UVR5 Models..."
|
||||||
|
Invoke-Download -Uri $UVR5URL -OutFile "uvr5_weights.zip"
|
||||||
|
Invoke-Unzip "uvr5_weights.zip" "tools/uvr5"
|
||||||
|
Write-Success "UVR5 Models Downloaded"
|
||||||
|
} else {
|
||||||
|
Write-Info "UVR5 Models Exists"
|
||||||
|
Write-Info "Skip Downloading UVR5 Models"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($Device) {
|
||||||
|
"CU128" {
|
||||||
|
Write-Info "Installing PyTorch For CUDA 12.8..."
|
||||||
|
Invoke-Pip torch torchaudio --index-url "https://download.pytorch.org/whl/cu128"
|
||||||
|
}
|
||||||
|
"CU126" {
|
||||||
|
Write-Info "Installing PyTorch For CUDA 12.6..."
|
||||||
|
Invoke-Pip torch torchaudio --index-url "https://download.pytorch.org/whl/cu126"
|
||||||
|
}
|
||||||
|
"CPU" {
|
||||||
|
Write-Info "Installing PyTorch For CPU..."
|
||||||
|
Invoke-Pip torch torchaudio --index-url "https://download.pytorch.org/whl/cpu"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Success "PyTorch Installed"
|
||||||
|
|
||||||
|
Write-Info "Installing Python Dependencies From requirements.txt..."
|
||||||
|
Invoke-Pip -r extra-req.txt --no-deps
|
||||||
|
Invoke-Pip -r requirements.txt
|
||||||
|
Write-Success "Python Dependencies Installed"
|
||||||
|
|
||||||
|
Write-Info "Downloading NLTK Data..."
|
||||||
|
Invoke-Download -Uri $NLTKURL -OutFile "nltk_data.zip"
|
||||||
|
Invoke-Unzip "nltk_data.zip" (python -c "import sys; print(sys.prefix)").Trim()
|
||||||
|
|
||||||
|
Write-Info "Downloading Open JTalk Dict..."
|
||||||
|
Invoke-Download -Uri $OpenJTalkURL -OutFile "open_jtalk_dic_utf_8-1.11.tar.gz"
|
||||||
|
$target = (python -c "import os, pyopenjtalk; print(os.path.dirname(pyopenjtalk.__file__))").Trim()
|
||||||
|
tar -xzf open_jtalk_dic_utf_8-1.11.tar.gz -C $target
|
||||||
|
Remove-Item "open_jtalk_dic_utf_8-1.11.tar.gz" -Force
|
||||||
|
Write-Success "Open JTalk Dic Downloaded"
|
||||||
|
|
||||||
|
Write-Success "Installation Completed"
|
22
install.sh
22
install.sh
@ -48,11 +48,12 @@ run_pip_quiet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_wget_quiet() {
|
run_wget_quiet() {
|
||||||
local output
|
if wget --tries=25 --wait=5 --read-timeout=40 -q --show-progress "$@" 2>&1; then
|
||||||
output=$(wget --tries=25 --wait=5 --read-timeout=40 --retry-on-http-error=404 "$@" 2>&1) || {
|
tput cuu1 && tput el
|
||||||
echo -e "${ERROR} Wget failed:\n$output"
|
else
|
||||||
|
echo -e "${ERROR} Wget failed"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! command -v conda &>/dev/null; then
|
if ! command -v conda &>/dev/null; then
|
||||||
@ -174,7 +175,10 @@ case "$(uname -m)" in
|
|||||||
x86_64 | amd64) SYSROOT_PKG="sysroot_linux-64>=2.28" ;;
|
x86_64 | amd64) SYSROOT_PKG="sysroot_linux-64>=2.28" ;;
|
||||||
aarch64 | arm64) SYSROOT_PKG="sysroot_linux-aarch64>=2.28" ;;
|
aarch64 | arm64) SYSROOT_PKG="sysroot_linux-aarch64>=2.28" ;;
|
||||||
ppc64le) SYSROOT_PKG="sysroot_linux-ppc64le>=2.28" ;;
|
ppc64le) SYSROOT_PKG="sysroot_linux-ppc64le>=2.28" ;;
|
||||||
*) echo "Unsupported architecture: $(uname -m)"; exit 1 ;;
|
*)
|
||||||
|
echo "Unsupported architecture: $(uname -m)"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Install build tools
|
# Install build tools
|
||||||
@ -248,10 +252,7 @@ elif [ "$USE_MODELSCOPE" = "true" ]; then
|
|||||||
PYOPENJTALK_URL="https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/open_jtalk_dic_utf_8-1.11.tar.gz"
|
PYOPENJTALK_URL="https://www.modelscope.cn/models/XXXXRT/GPT-SoVITS-Pretrained/resolve/master/open_jtalk_dic_utf_8-1.11.tar.gz"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if find -L "GPT_SoVITS/pretrained_models" -mindepth 1 ! -name '.gitignore' | grep -q .; then
|
if [ ! -d "GPT_SoVITS/pretrained_models/sv" ]; then
|
||||||
echo -e "${INFO}Pretrained Model Exists"
|
|
||||||
echo -e "${INFO}Skip Downloading Pretrained Models"
|
|
||||||
else
|
|
||||||
echo -e "${INFO}Downloading Pretrained Models..."
|
echo -e "${INFO}Downloading Pretrained Models..."
|
||||||
rm -rf pretrained_models.zip
|
rm -rf pretrained_models.zip
|
||||||
run_wget_quiet "$PRETRINED_URL"
|
run_wget_quiet "$PRETRINED_URL"
|
||||||
@ -259,6 +260,9 @@ else
|
|||||||
unzip -q -o pretrained_models.zip -d GPT_SoVITS
|
unzip -q -o pretrained_models.zip -d GPT_SoVITS
|
||||||
rm -rf pretrained_models.zip
|
rm -rf pretrained_models.zip
|
||||||
echo -e "${SUCCESS}Pretrained Models Downloaded"
|
echo -e "${SUCCESS}Pretrained Models Downloaded"
|
||||||
|
else
|
||||||
|
echo -e "${INFO}Pretrained Model Exists"
|
||||||
|
echo -e "${INFO}Skip Downloading Pretrained Models"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d "GPT_SoVITS/text/G2PWModel" ]; then
|
if [ ! -d "GPT_SoVITS/text/G2PWModel" ]; then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user