@echo off setlocal set "ROOT=%~dp0" cd /d "%ROOT%" echo [1/6] Checking Docker... set "DOCKER_EXE=" set "DOCKER_DESKTOP_EXE=" call :resolve_docker if not defined DOCKER_EXE ( echo Docker CLI was not found. echo Install Docker Desktop, or add docker.exe to PATH, then rerun this script. pause exit /b 1 ) call :ensure_docker_ready if errorlevel 1 exit /b 1 echo [2/6] Starting mysql, redis and minio... call "%DOCKER_EXE%" compose up -d mysql redis minio if errorlevel 1 ( echo Failed to start docker services. pause exit /b 1 ) if not exist "%ROOT%backend\.env" ( echo Missing backend\.env pause exit /b 1 ) set "PYTHON_CMD=" where py >nul 2>nul if not errorlevel 1 set "PYTHON_CMD=py -3" if not defined PYTHON_CMD ( where python >nul 2>nul if not errorlevel 1 set "PYTHON_CMD=python" ) if not defined PYTHON_CMD ( echo Python was not found in PATH. pause exit /b 1 ) if not exist "%ROOT%backend\.venv\Scripts\python.exe" ( echo [3/6] Creating backend virtual environment... call %PYTHON_CMD% -m venv "%ROOT%backend\.venv" if errorlevel 1 ( echo Failed to create backend virtual environment. pause exit /b 1 ) echo [4/6] Installing backend dependencies... call "%ROOT%backend\.venv\Scripts\python.exe" -m pip install --disable-pip-version-check -r "%ROOT%backend\requirements.txt" if errorlevel 1 ( echo Failed to install backend dependencies. pause exit /b 1 ) ) else ( echo [3/6] Backend virtual environment already exists. ) if not exist "%ROOT%node_modules" ( echo [5/6] Installing frontend dependencies... call npm install if errorlevel 1 ( echo Failed to install frontend dependencies. pause exit /b 1 ) ) else ( echo [5/6] Frontend dependencies already exist. ) echo [6/6] Starting backend and unified frontend... start "AIVideo Backend" cmd /k "cd /d ""%ROOT%backend"" && ""%ROOT%backend\.venv\Scripts\python.exe"" -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000" start "AIVideo Frontend" cmd /k "cd /d ""%ROOT%"" && npm run dev" echo. echo User UI: http://localhost:3000 echo Admin UI: http://localhost:3000/admin/login echo API: http://localhost:8000 echo. echo Two windows have been opened for backend and frontend. pause goto :eof :resolve_docker for /f "delims=" %%I in ('where docker 2^>nul') do ( if not defined DOCKER_EXE set "DOCKER_EXE=%%~fI" ) if defined DOCKER_EXE goto resolve_desktop for %%I in ( "%ProgramFiles%\Docker\Docker\resources\bin\docker.exe" "%ProgramFiles%\Docker\Docker\resources\bin\com.docker.cli.exe" "%ProgramW6432%\Docker\Docker\resources\bin\docker.exe" "%ProgramW6432%\Docker\Docker\resources\bin\com.docker.cli.exe" "%LocalAppData%\Programs\Docker\Docker\resources\bin\docker.exe" "%LocalAppData%\Programs\Docker\Docker\resources\bin\com.docker.cli.exe" ) do ( if exist "%%~fI" ( set "DOCKER_EXE=%%~fI" goto resolve_desktop ) ) :resolve_desktop for %%I in ( "%ProgramFiles%\Docker\Docker\Docker Desktop.exe" "%ProgramW6432%\Docker\Docker\Docker Desktop.exe" "%LocalAppData%\Programs\Docker\Docker\Docker Desktop.exe" ) do ( if exist "%%~fI" ( set "DOCKER_DESKTOP_EXE=%%~fI" goto :eof ) ) goto :eof :ensure_docker_ready call "%DOCKER_EXE%" info >nul 2>nul if not errorlevel 1 exit /b 0 if defined DOCKER_DESKTOP_EXE ( echo Docker Desktop is installed but not ready. Starting it now... start "" "%DOCKER_DESKTOP_EXE%" call :wait_for_docker 60 if not errorlevel 1 exit /b 0 echo Docker Desktop did not become ready in time. echo Wait for Docker Desktop to finish starting, then rerun this script. pause exit /b 1 ) echo Docker CLI was found, but the Docker engine is not ready. echo Start Docker Desktop or Docker Engine, then rerun this script. pause exit /b 1 :wait_for_docker set "DOCKER_WAIT_REMAINING=%~1" if not defined DOCKER_WAIT_REMAINING set "DOCKER_WAIT_REMAINING=60" :wait_for_docker_loop call "%DOCKER_EXE%" info >nul 2>nul if not errorlevel 1 exit /b 0 if %DOCKER_WAIT_REMAINING% LEQ 0 exit /b 1 timeout /t 2 /nobreak >nul set /a DOCKER_WAIT_REMAINING-=2 goto wait_for_docker_loop