|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$InstallPath = (Split-Path -Path $PSScriptRoot -Parent)
|
|
|
|
$comfyPath = Join-Path $InstallPath "ComfyUI"
|
|
$customNodesPath = Join-Path $InstallPath "custom_nodes"
|
|
$workflowPath = Join-Path $InstallPath "user\default\workflows\UmeAiRT-Workflow"
|
|
$venvPython = Join-Path $comfyPath "venv\Scripts\python.exe"
|
|
$logPath = Join-Path $InstallPath "logs"
|
|
$logFile = Join-Path $logPath "update_log.txt"
|
|
|
|
if (-not (Test-Path $logPath)) { New-Item -ItemType Directory -Force -Path $logPath | Out-Null }
|
|
|
|
function Write-Log {
|
|
param([string]$Message, [string]$Color = "White")
|
|
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
|
$formattedMessage = "[$timestamp] $Message"
|
|
Write-Host $Message -ForegroundColor $Color
|
|
Add-Content -Path $logFile -Value $formattedMessage
|
|
}
|
|
|
|
function Invoke-Git-Pull {
|
|
param([string]$DirectoryPath)
|
|
if (Test-Path (Join-Path $DirectoryPath ".git")) {
|
|
|
|
$commandToRun = "git -C `"$DirectoryPath`" pull"
|
|
$cmdArguments = "/C `"$commandToRun >> `"`"$logFile`"`" 2>&1`""
|
|
try {
|
|
Start-Process -FilePath "cmd.exe" -ArgumentList $cmdArguments -Wait -WindowStyle Hidden
|
|
} catch {
|
|
Write-Log " - FAILED to run git pull in '$DirectoryPath'" -Color Red
|
|
}
|
|
} else {
|
|
Write-Log " - Skipping: Not a git repository." -Color Gray
|
|
}
|
|
}
|
|
|
|
function Invoke-Pip-Install {
|
|
param([string]$RequirementsPath)
|
|
if (Test-Path $RequirementsPath) {
|
|
Write-Log " - Found requirements: $RequirementsPath. Updating..." -Color Cyan
|
|
$tempLogFile = Join-Path $env:TEMP ([System.Guid]::NewGuid().ToString() + ".tmp")
|
|
try {
|
|
$commandToRun = "`"$venvPython`" -m pip install -r `"$RequirementsPath`""
|
|
$cmdArguments = "/C `"$commandToRun > `"`"$tempLogFile`"`" 2>&1`""
|
|
Start-Process -FilePath "cmd.exe" -ArgumentList $cmdArguments -Wait -WindowStyle Hidden
|
|
if (Test-Path $tempLogFile) { $output = Get-Content $tempLogFile; if($output){ Add-Content -Path $logFile -Value $output } }
|
|
} finally {
|
|
if (Test-Path $tempLogFile) { Remove-Item $tempLogFile }
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
Clear-Host
|
|
Write-Log "==============================================================================="
|
|
Write-Log " Starting UmeAiRT ComfyUI Update Process" -Color Yellow
|
|
Write-Log "==============================================================================="
|
|
|
|
|
|
Write-Log "`n[1/4] Updating ComfyUI Core..." -Color Green
|
|
Invoke-Git-Pull -DirectoryPath $comfyPath
|
|
|
|
|
|
Write-Log "`n[2/4] Updating and Installing Custom Nodes..." -Color Green
|
|
|
|
$csvUrl = "https://huggingface.co/UmeAiRT/ComfyUI-Auto_installer/resolve/main/scripts/Nodes_installer/custom_nodes.csv"
|
|
$scriptsFolder = Join-Path $InstallPath "scripts"
|
|
$csvPath = Join-Path $scriptsFolder "custom_nodes.csv"
|
|
|
|
|
|
try {
|
|
Invoke-WebRequest -Uri $csvUrl -OutFile $csvPath
|
|
} catch {
|
|
Write-Log " - ERREUR: Impossible de télécharger la liste des custom nodes. Mise à jour des nodes ignorée." -Color Red
|
|
return
|
|
}
|
|
|
|
$customNodesList = Import-Csv -Path $csvPath
|
|
$existingNodeDirs = Get-ChildItem -Path $customNodesPath -Directory
|
|
|
|
|
|
Write-Log " - Updating existing nodes..."
|
|
foreach ($dir in $existingNodeDirs) {
|
|
Write-Log " - Checking node: $($dir.Name)"
|
|
Invoke-Git-Pull -DirectoryPath $dir.FullName
|
|
}
|
|
|
|
|
|
Write-Log " - Checking for new nodes to install..."
|
|
foreach ($node in $customNodesList) {
|
|
$nodeName = $node.Name
|
|
$nodePath = if ($node.Subfolder) { Join-Path $customNodesPath $node.Subfolder } else { Join-Path $customNodesPath $nodeName }
|
|
|
|
if (-not (Test-Path $nodePath)) {
|
|
Write-Log " - New node found: $nodeName. Installing..." -Color Yellow
|
|
|
|
$repoUrl = $node.RepoUrl
|
|
$cloneTargetPath = if ($node.Subfolder) { (Split-Path $nodePath -Parent) } else { $nodePath }
|
|
if ($nodeName -eq 'ComfyUI-Impact-Subpack') { $clonePath = Join-Path $cloneTargetPath "impact_subpack" } else { $clonePath = $cloneTargetPath }
|
|
|
|
$tempLogFile = Join-Path $env:TEMP ([System.Guid]::NewGuid().ToString() + ".tmp")
|
|
try {
|
|
$commandToRun = "git clone $repoUrl `"$clonePath`""
|
|
$cmdArguments = "/C `"$commandToRun > `"`"$tempLogFile`"`" 2>&1`""
|
|
Start-Process -FilePath "cmd.exe" -ArgumentList $cmdArguments -Wait -WindowStyle Hidden
|
|
if (Test-Path $tempLogFile) { Add-Content -Path $logFile -Value (Get-Content $tempLogFile) }
|
|
} finally {
|
|
if (Test-Path $tempLogFile) { Remove-Item $tempLogFile }
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
Write-Log "`n[3/4] Updating UmeAiRT Workflows..." -Color Green
|
|
if (Test-Path $workflowPath) {
|
|
Invoke-Git-Pull -DirectoryPath $workflowPath
|
|
} else {
|
|
Write-Log " - Workflow directory not found, skipping." -Color Gray
|
|
}
|
|
|
|
|
|
Write-Log "`n[4/4] Updating all Python dependencies..." -Color Green
|
|
Write-Log " - Checking main ComfyUI requirements..."
|
|
Invoke-Pip-Install -RequirementsPath (Join-Path $comfyPath "requirements.txt")
|
|
|
|
Write-Log " - Checking custom node requirements..."
|
|
if (Test-Path $customNodesPath) {
|
|
foreach ($dir in (Get-ChildItem -Path $customNodesPath -Directory)) {
|
|
Invoke-Pip-Install -RequirementsPath (Join-Path $dir.FullName "requirements.txt")
|
|
}
|
|
}
|
|
|
|
Write-Log "==============================================================================="
|
|
Write-Log "Update process complete!" -Color Yellow
|
|
Write-Log "==============================================================================="
|
|
Read-Host "Press Enter to exit." |