Files
Leonid PershinandClaude Opus 5 7f441defcc feat: add start.sh for Linux/macOS, harden both launchers
start.sh mirrors start.bat: finds Python 3.10+, creates the venv,
installs PyTorch (CUDA index on Linux, the MPS build on macOS, or the CPU
index with --cpu), installs ACE-Step, reports the device and launches the
UI. Same flags, and the defaults can also come from the environment
(PORT=7870 ./start.sh). On macOS it passes --bf16 false, which the README
already calls for. Dropped start.sh from .gitignore, where it sat among
the upstream author's local scratch files.

Both launchers also gain two fixes found while testing on WSL:

- A venv is only accepted if pip works in it, not merely if the
  interpreter exists. A directory left by an interrupted install looked
  ready and then failed several steps later with a misleading "check your
  internet connection". Such a venv is now recreated, and if creation
  fails on Debian/Ubuntu the error points at python3-venv, which is the
  actual cause there.
- The launch banner announced the URL as if the server were already up,
  while model loading still had a minute to go. It now says the interface
  will be available once "Running on local URL" appears.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 20:31:18 +03:00

267 lines
11 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@echo off
chcp 65001 >nul 2>&1
setlocal
title ACE-Step
pushd "%~dp0"
REM ============================ НАСТРОЙКИ ============================
REM Каталог виртуального окружения
set "VENV_DIR=venv"
REM Порт веб-интерфейса
set "PORT=7865"
REM Адрес, на котором слушает сервер (0.0.0.0 - доступ из локальной сети)
set "SERVER_NAME=127.0.0.1"
REM Номер видеокарты
set "DEVICE_ID=0"
REM Путь к весам модели. Пусто - скачать в ~/.cache/ace-step/checkpoints
set "CHECKPOINT_PATH="
REM Сборка PyTorch (cu126 / cu124 / cu121 - под вашу версию CUDA)
set "TORCH_INDEX=https://download.pytorch.org/whl/cu126"
REM ==================================================================
REM Имя скрипта надо запомнить до shift: shift сдвигает и %0
set "SCRIPT_NAME=%~nx0"
set "OPT_LOWVRAM=0"
set "OPT_CPU=0"
set "OPT_SHARE=0"
set "DO_SETUP_ONLY=0"
set "DO_REINSTALL=0"
set "DO_UPDATE=0"
set "FROM_EXPLORER=0"
echo %cmdcmdline% | find /i "%~nx0" >nul 2>&1 && set "FROM_EXPLORER=1"
REM ------------------------- разбор аргументов -------------------------
:parse_args
if "%~1"=="" goto args_done
if /i "%~1"=="--help" goto usage
if /i "%~1"=="-h" goto usage
if /i "%~1"=="/?" goto usage
if /i "%~1"=="--lowvram" ( set "OPT_LOWVRAM=1" & shift & goto parse_args )
if /i "%~1"=="--cpu" ( set "OPT_CPU=1" & shift & goto parse_args )
if /i "%~1"=="--share" ( set "OPT_SHARE=1" & shift & goto parse_args )
if /i "%~1"=="--setup" ( set "DO_SETUP_ONLY=1" & shift & goto parse_args )
if /i "%~1"=="--reinstall" ( set "DO_REINSTALL=1" & shift & goto parse_args )
if /i "%~1"=="--update" ( set "DO_UPDATE=1" & shift & goto parse_args )
if /i "%~1"=="--listen" ( set "SERVER_NAME=0.0.0.0" & shift & goto parse_args )
if /i "%~1"=="--port" ( set "PORT=%~2" & shift & shift & goto parse_args )
if /i "%~1"=="--device" ( set "DEVICE_ID=%~2" & shift & shift & goto parse_args )
echo [ОШИБКА] Неизвестный аргумент: %~1
echo Запустите "%SCRIPT_NAME% --help" для справки.
goto fail
:args_done
echo.
echo ==========================================
echo ACE-Step - генерация музыки
echo ==========================================
echo.
set "VENV_PY=%CD%\%VENV_DIR%\Scripts\python.exe"
if "%DO_REINSTALL%"=="1" (
if exist "%VENV_DIR%\" (
echo [1/4] Удаляю старое окружение "%VENV_DIR%"...
rmdir /s /q "%VENV_DIR%"
)
)
REM ------------------------- поиск Python -------------------------
REM Рабочим считаем окружение, в котором есть и python, и pip: каталог от
REM прерванной установки выглядит как готовый, но валится дальше с невнятной
REM ошибкой про интернет.
if not exist "%VENV_PY%" goto venv_create
"%VENV_PY%" -m pip --version >nul 2>&1 && goto venv_ready
echo [1/4] Окружение "%VENV_DIR%" неработоспособно, пересоздаю...
rmdir /s /q "%VENV_DIR%"
:venv_create
echo [1/4] Ищу подходящий Python...
set "SYS_PY="
for %%V in (3.12 3.11 3.10 3.13) do (
if not defined SYS_PY (
py -%%V -c "import sys" >nul 2>&1 && set "SYS_PY=py -%%V"
)
)
if not defined SYS_PY (
python -c "import sys; sys.exit(0 if sys.version_info >= (3,10) else 1)" >nul 2>&1 && set "SYS_PY=python"
)
if not defined SYS_PY (
echo.
echo [ОШИБКА] Не найден Python 3.10 или новее.
echo Установите его с https://www.python.org/downloads/
echo и обязательно отметьте галочку "Add Python to PATH".
goto fail
)
for /f "delims=" %%O in ('%SYS_PY% -c "import sys;print(sys.version.split()[0])" 2^>nul') do set "PYVER=%%O"
echo Найден Python %PYVER% (%SYS_PY%)
echo [1/4] Создаю виртуальное окружение в "%VENV_DIR%"...
%SYS_PY% -m venv "%VENV_DIR%"
if errorlevel 1 goto venv_failed
if not exist "%VENV_PY%" goto venv_failed
"%VENV_PY%" -m pip --version >nul 2>&1 || goto venv_failed
set "FRESH_VENV=1"
:venv_ready
if not defined FRESH_VENV echo [1/4] Виртуальное окружение найдено: %VENV_DIR%
REM ------------------------- зависимости -------------------------
echo [2/4] Проверяю зависимости...
set "NEED_TORCH=0"
"%VENV_PY%" -c "import importlib.util,sys; sys.exit(0 if importlib.util.find_spec('torch') else 1)" >nul 2>&1 || set "NEED_TORCH=1"
REM Проверяем именно установку пакета: сам каталог acestep лежит рядом со скриптом,
REM поэтому find_spec('acestep') сработал бы даже без установленных зависимостей.
set "NEED_ACESTEP=0"
"%VENV_PY%" -c "import importlib.metadata as md, importlib.util as u, sys; md.version('ace_step'); sys.exit(0 if u.find_spec('click') and u.find_spec('gradio') else 1)" >nul 2>&1 || set "NEED_ACESTEP=1"
if "%DO_UPDATE%"=="1" set "NEED_TORCH=1"
if "%DO_UPDATE%"=="1" set "NEED_ACESTEP=1"
if "%NEED_TORCH%%NEED_ACESTEP%"=="00" goto deps_ready
echo Обновляю pip...
"%VENV_PY%" -m pip install --upgrade pip setuptools wheel --quiet
if errorlevel 1 (
echo [ОШИБКА] Не удалось обновить pip. Проверьте подключение к интернету.
goto fail
)
if "%NEED_TORCH%"=="1" (
if "%OPT_CPU%"=="1" (
echo Устанавливаю PyTorch для CPU. Это займёт несколько минут...
"%VENV_PY%" -m pip install --upgrade torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
) else (
echo Устанавливаю PyTorch с поддержкой CUDA. Это займёт несколько минут...
"%VENV_PY%" -m pip install --upgrade torch torchvision torchaudio --index-url %TORCH_INDEX%
)
if errorlevel 1 (
echo [ОШИБКА] Не удалось установить PyTorch.
echo Если у вас другая версия CUDA, поменяйте TORCH_INDEX в начале этого файла.
goto fail
)
)
if "%NEED_ACESTEP%"=="1" (
echo Устанавливаю ACE-Step и зависимости...
"%VENV_PY%" -m pip install -e .
if errorlevel 1 (
echo [ОШИБКА] Не удалось установить ACE-Step.
goto fail
)
)
:deps_ready
if "%OPT_LOWVRAM%"=="1" (
"%VENV_PY%" -c "import importlib.util,sys; sys.exit(0 if importlib.util.find_spec('triton') else 1)" >nul 2>&1 || (
echo Режим экономии VRAM: устанавливаю triton-windows...
"%VENV_PY%" -m pip install triton-windows --quiet
if errorlevel 1 echo [ВНИМАНИЕ] triton-windows не установился, --torch_compile может не заработать.
)
)
REM ------------------------- проверка GPU -------------------------
echo [3/4] Проверяю видеокарту...
if "%OPT_CPU%"=="1" goto gpu_cpu_mode
set "BF16=true"
set "GPUINFO="
set "GPUTMP=%TEMP%\acestep_gpu_%RANDOM%.txt"
"%VENV_PY%" -c "import torch; print((torch.cuda.get_device_name(0) + ' - ' + str(round(torch.cuda.get_device_properties(0).total_memory/1073741824, 1)) + ' GB VRAM') if torch.cuda.is_available() else 'NO_CUDA')" > "%GPUTMP%" 2>nul
if exist "%GPUTMP%" set /p GPUINFO=<"%GPUTMP%"
del "%GPUTMP%" >nul 2>&1
if not defined GPUINFO set "GPUINFO=NO_CUDA"
if not "%GPUINFO%"=="NO_CUDA" goto gpu_ok
echo.
echo [ВНИМАНИЕ] CUDA недоступна - модель будет работать на процессоре ^(очень медленно^).
echo Если у вас есть видеокарта NVIDIA, обновите драйвер и переустановите PyTorch:
echo "%SCRIPT_NAME%" --update
echo.
goto gpu_done
:gpu_ok
echo %GPUINFO%
goto gpu_done
:gpu_cpu_mode
echo Принудительный режим CPU. Генерация будет очень медленной.
set "DEVICE_ID=-1"
set "BF16=false"
:gpu_done
if "%DO_SETUP_ONLY%"=="1" (
echo.
echo Установка завершена. Для запуска выполните "%SCRIPT_NAME%".
goto success
)
REM ------------------------- запуск -------------------------
set "ARGS=--port %PORT% --server_name %SERVER_NAME% --device_id=%DEVICE_ID% --bf16 %BF16%"
if not "%CHECKPOINT_PATH%"=="" set ARGS=%ARGS% --checkpoint_path "%CHECKPOINT_PATH%"
if "%OPT_SHARE%"=="1" set "ARGS=%ARGS% --share true"
if "%OPT_LOWVRAM%"=="1" set "ARGS=%ARGS% --cpu_offload true --overlapped_decode true --torch_compile true"
echo [4/4] Запускаю веб-интерфейс...
echo.
if "%OPT_LOWVRAM%"=="1" echo Режим: экономия видеопамяти
echo Идёт загрузка моделей, это занимает время.
echo При первом запуске дополнительно скачиваются веса (~8 ГБ).
echo.
echo Интерфейс будет доступен на http://%SERVER_NAME%:%PORT%
echo когда ниже появится строка "Running on local URL".
echo Остановить: Ctrl+C в этом окне.
echo.
"%VENV_PY%" -m acestep.gui %ARGS%
if errorlevel 1 (
echo.
echo [ОШИБКА] ACE-Step завершился с ошибкой. Текст ошибки - выше.
goto fail
)
goto success
REM ------------------------- справка -------------------------
:usage
echo.
echo Использование: %SCRIPT_NAME% [флаги]
echo.
echo --lowvram Режим экономии видеопамяти (~8 ГБ VRAM)
echo --cpu Запуск на процессоре, без CUDA (очень медленно)
echo --share Публичная ссылка Gradio
echo --port ^<N^> Порт веб-интерфейса (по умолчанию %PORT%)
echo --device ^<N^> Номер видеокарты (по умолчанию %DEVICE_ID%)
echo --listen Слушать 0.0.0.0 (доступ из локальной сети)
echo --reinstall Пересоздать виртуальное окружение с нуля
echo --update Обновить зависимости
echo --setup Только установка, без запуска
echo --help Эта справка
echo.
echo Настройки по умолчанию - в блоке НАСТРОЙКИ в начале файла.
echo.
goto success
REM ------------------------- завершение -------------------------
:venv_failed
echo.
echo [ОШИБКА] Не удалось создать рабочее виртуальное окружение в "%VENV_DIR%".
echo Переустановите Python с https://www.python.org/downloads/,
echo отметив "Add Python to PATH", и запустите "%SCRIPT_NAME% --reinstall".
goto fail
:fail
echo.
pause
popd
endlocal
exit /b 1
:success
if "%FROM_EXPLORER%"=="1" pause
popd
endlocal
exit /b 0