|
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
|
|
set "ROOT=%CD%"
|
|
set "PYTHON=%ROOT%\ComfyUI_windows_portable\python_embeded\python.exe"
|
|
set "COMFY_DIR=%ROOT%\ComfyUI_windows_portable\ComfyUI"
|
|
set "UPDATE_DIR=%ROOT%\ComfyUI_windows_portable\update"
|
|
|
|
|
|
if not exist "%PYTHON%" (
|
|
echo [ERROR] Python not found at: %PYTHON%
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
|
|
echo.
|
|
echo ======== ComfyUI Nightly Installer (Interactive) ========
|
|
echo.
|
|
|
|
|
|
for /f "delims=" %%i in ('%PYTHON% -c "import platform; print(platform.python_version())"') do set PYVER=%%i
|
|
echo [INFO] Python Version: %PYVER%
|
|
|
|
|
|
for /f "delims=" %%i in ('%PYTHON% -s -m pip --version') do set PIPVER=%%i
|
|
echo [INFO] Pip Version: %PIPVER%
|
|
|
|
|
|
for /f %%i in ('powershell -NoProfile -Command "[Environment]::ProcessorCount"') do set "CPU_CORES=%%i"
|
|
if not defined CPU_CORES set "CPU_CORES=16"
|
|
echo [INFO] Detected CPU cores: %CPU_CORES%
|
|
|
|
|
|
for /f "tokens=5 delims= " %%A in ('nvcc --version ^| findstr /C:"release"') do (
|
|
for /f "tokens=1 delims=," %%B in ("%%A") do set cuda_version=%%B
|
|
)
|
|
for /f "tokens=1 delims=." %%a in ("%cuda_version%") do set cuda_major=%%a
|
|
for /f "tokens=2 delims=." %%b in ("%cuda_version%") do set cuda_minor=%%b
|
|
set cuda_version=!cuda_major!.!cuda_minor!
|
|
set "CLEAN_CUDA=%cuda_version:.=%"
|
|
echo [INFO] Detected CUDA version: %cuda_version%
|
|
|
|
echo.
|
|
pause
|
|
|
|
|
|
|
|
|
|
set UPDATE_PIP=false
|
|
echo.
|
|
set /p "inp=Do you want to update pip and set setuptools to 70.2.0? (y/n): "
|
|
if /i "!inp!"=="y" set UPDATE_PIP=true
|
|
|
|
|
|
set UPDATE_COMFY=false
|
|
echo.
|
|
set /p "inp=Do you want to update ComfyUI via Git? (y/n): "
|
|
if /i "!inp!"=="y" set UPDATE_COMFY=true
|
|
|
|
|
|
set MAKE_LAUNCHER=false
|
|
echo.
|
|
set /p "inp=Do you want to generate a launcher batch file for FP16+Sage? (y/n): "
|
|
if /i "!inp!"=="y" set MAKE_LAUNCHER=true
|
|
|
|
|
|
set INSTALL_TORCH=false
|
|
set TORCH_NIGHTLY=false
|
|
set TORCH_MANUAL=false
|
|
echo.
|
|
echo [1] Install PyTorch Nightly Latest (auto)
|
|
echo [2] Install PyTorch Nightly manually (specify version)
|
|
echo [3] Install PyTorch Stable
|
|
echo [0] Skip PyTorch installation
|
|
set /p "torch_choice=Choose PyTorch install option: "
|
|
|
|
if "%torch_choice%"=="1" (
|
|
set INSTALL_TORCH=true
|
|
set TORCH_NIGHTLY=true
|
|
set TORCH_MANUAL=false
|
|
) else if "%torch_choice%"=="2" (
|
|
set INSTALL_TORCH=true
|
|
set TORCH_NIGHTLY=true
|
|
set TORCH_MANUAL=true
|
|
) else if "%torch_choice%"=="3" (
|
|
set INSTALL_TORCH=true
|
|
set TORCH_NIGHTLY=false
|
|
set TORCH_MANUAL=false
|
|
)
|
|
|
|
|
|
set INSTALL_TRITON=false
|
|
echo.
|
|
echo [1] Install Nightly Triton
|
|
echo [2] Install Stable Triton
|
|
echo [3] Install LeoMaxwell Triton
|
|
echo [0] Skip Triton
|
|
set /p "triton_choice=Choose Triton version: "
|
|
if not "!triton_choice!"=="0" set INSTALL_TRITON=true
|
|
|
|
|
|
set INSTALL_SAGE=false
|
|
echo.
|
|
echo [1] Install SageAttention v1 (PyPI)
|
|
echo [2] Install SageAttention v2 (Build from GitHub)
|
|
echo [0] Skip SageAttention
|
|
set /p "sage_choice=Choose SageAttention version: "
|
|
if not "!sage_choice!"=="0" set INSTALL_SAGE=true
|
|
|
|
|
|
|
|
cd /d "%UPDATE_DIR%"
|
|
|
|
if "%UPDATE_PIP%"=="true" (
|
|
echo [INFO] Updating pip and installing setuptools==70.2.0
|
|
%PYTHON% -s -m pip install --upgrade pip setuptools==70.2.0
|
|
)
|
|
|
|
if "%INSTALL_TORCH%"=="true" (
|
|
echo [INFO] Uninstalling old Torch versions
|
|
%PYTHON% -s -m pip uninstall -y torch torchvision torchaudio
|
|
|
|
if "%TORCH_NIGHTLY%"=="true" (
|
|
if "%TORCH_MANUAL%"=="true" (
|
|
echo.
|
|
echo [INFO] Manual Nightly Installation
|
|
echo Visit the following URLs to find the latest compatible versions:
|
|
echo Torch: https://download.pytorch.org/whl/nightly/cu!CLEAN_CUDA!/torch/
|
|
echo Torchaudio: https://download.pytorch.org/whl/nightly/cu!CLEAN_CUDA!/torchaudio/
|
|
echo Torchvision:https://download.pytorch.org/whl/nightly/cu!CLEAN_CUDA!/torchvision/
|
|
echo.
|
|
|
|
set /p "TORCH_VER=Enter base torch version (e.g. torch-2.9.0.dev20250715): "
|
|
set /p "AUDIO_VER=Enter base torchaudio version (e.g. torchaudio-2.8.0.dev20250716): "
|
|
set /p "VISION_VER=Enter base torchvision version (e.g. torchvision-0.24.0.dev20250716): "
|
|
|
|
for /f "tokens=1,2 delims=." %%a in ("%PYVER%") do (
|
|
set "TMP_PY_MAJ=%%a"
|
|
set "TMP_PY_MIN=%%b"
|
|
)
|
|
|
|
set "PY_MAJ=!TMP_PY_MAJ!"
|
|
set "PY_MIN=!TMP_PY_MIN!"
|
|
set "PY_TAG=cp!PY_MAJ!!PY_MIN!-cp!PY_MAJ!!PY_MIN!"
|
|
set "WHEEL_SUFFIX=%%2Bcu!CLEAN_CUDA!-!PY_TAG!-win_amd64.whl"
|
|
|
|
set "TORCH_URL=https://download.pytorch.org/whl/nightly/cu!CLEAN_CUDA!/!TORCH_VER!!WHEEL_SUFFIX!"
|
|
set "AUDIO_URL=https://download.pytorch.org/whl/nightly/cu!CLEAN_CUDA!/!AUDIO_VER!!WHEEL_SUFFIX!"
|
|
set "VISION_URL=https://download.pytorch.org/whl/nightly/cu!CLEAN_CUDA!/!VISION_VER!!WHEEL_SUFFIX!"
|
|
|
|
echo.
|
|
echo [INFO] Installing manually specified wheels...
|
|
echo Torch: !TORCH_URL!
|
|
echo Torchaudio: !AUDIO_URL!
|
|
echo Torchvision:!VISION_URL!
|
|
|
|
%PYTHON% -s -m pip install "!TORCH_URL!" "!AUDIO_URL!" "!VISION_URL!"
|
|
) else (
|
|
echo [INFO] Installing PyTorch Nightly for CUDA %CLEAN_CUDA%
|
|
%PYTHON% -s -m pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu%CLEAN_CUDA%
|
|
)
|
|
) else (
|
|
echo [INFO] Installing PyTorch Stable for CUDA %CLEAN_CUDA%
|
|
%PYTHON% -s -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu%CLEAN_CUDA%
|
|
)
|
|
)
|
|
|
|
if "%INSTALL_TRITON%"=="true" (
|
|
echo [INFO] Uninstalling old Triton versions
|
|
%PYTHON% -s -m pip uninstall -y triton triton-windows
|
|
|
|
if "%triton_choice%"=="1" (
|
|
echo Installing Triton Nightly
|
|
%PYTHON% -s -m pip install -U --pre triton-windows
|
|
) else if "%triton_choice%"=="2" (
|
|
echo Installing Triton Stable
|
|
%PYTHON% -s -m pip install triton-windows
|
|
) else if "%triton_choice%"=="3" (
|
|
echo Installing LeoMaxwell Triton
|
|
%PYTHON% -s -m pip install https://github.com/leomaxwell973/Triton-3.3.0-UPDATE_FROM_3.2.0_and_FIXED-Windows-Nvidia-Prebuilt/releases/download/3.3.0_cu128_Py312/triton-3.3.0-cp312-cp312-win_amd64.whl
|
|
)
|
|
)
|
|
|
|
if "%INSTALL_SAGE%"=="true" (
|
|
echo [INFO] Uninstalling old SageAttention versions
|
|
%PYTHON% -s -m pip uninstall -y sageattention
|
|
|
|
if "%sage_choice%"=="1" (
|
|
echo Installing SageAttention v1
|
|
%PYTHON% -s -m pip install sageattention==1.0.6
|
|
) else (
|
|
echo Installing SageAttention v2 from source
|
|
cd "%UPDATE_DIR%"
|
|
git clone https://github.com/thu-ml/SageAttention
|
|
cd SageAttention
|
|
set MAX_JOBS=%CPU_CORES%
|
|
%PYTHON% -s -m pip install .
|
|
|
|
cd ..
|
|
rmdir /s /q SageAttention
|
|
)
|
|
)
|
|
|
|
|
|
if "%UPDATE_COMFY%"=="true" (
|
|
echo Updating ComfyUI
|
|
pushd "%COMFY_DIR%"
|
|
git pull
|
|
popd
|
|
)
|
|
|
|
echo Installing ComfyUI Manager if not exists
|
|
cd /d "%COMFY_DIR%\custom_nodes"
|
|
if not exist ComfyUI-Manager (
|
|
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
|
|
)
|
|
|
|
cd /d "%UPDATE_DIR%"
|
|
%PYTHON% update.py ..\ComfyUI\
|
|
if exist update_new.py (
|
|
move /y update_new.py update.py
|
|
%PYTHON% update.py ..\ComfyUI\ --skip_self_update
|
|
)
|
|
|
|
if "%MAKE_LAUNCHER%"=="true" (
|
|
echo Creating run_comfyui_fp16fast_sage.bat
|
|
set "LAUNCHER=%ROOT%\ComfyUI_windows_portable\run_comfyui_fp16fast_sage.bat"
|
|
(
|
|
echo call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
|
|
echo .\python_embeded\python.exe -s ComfyUI\main.py --use-sage-attention --windows-standalone-build --fast fp16_accumulation --listen 0.0.0.0
|
|
echo pause
|
|
) > "%LAUNCHER%"
|
|
)
|
|
|
|
echo.
|
|
echo All selected components installed. You may now run ComfyUI.
|
|
pause
|
|
exit /b
|
|
|