-
Notifications
You must be signed in to change notification settings - Fork 0
/
optimize.ps1
81 lines (71 loc) · 3.58 KB
/
optimize.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Variables you probably want to change
$starting_number = -1 # set to -1 if you want to start from 0
$prefix = "DesktopWallps-" # prefix for the file name
$upscale_model = "RealESRGAN_x4plus.pth" # model to use for upscaling
# Variables you probably don't want to change
$binary = "realesrgan/RealESRGAN-ncnn-vulkan.exe" # path to realesrgan-ncnn-vulkan the binary
$gpu = "0" # gpu id
$model_dir = "realesrgan/models" # path to the model directory
$model = "$modeldir/$upscale_model" # path to the model
$realesrgan_url = "https://github.com/xinntao/Real-ESRGAN-ncnn-vulkan/releases/download/v0.2.0/realesrgan-ncnn-vulkan-v0.2.0-$os.zip"
$model_generic_url = "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/"
$generalx4v3_url = "$model_generic_url/realesr-general-x4plus.pth"
$animevideov3_url = "$model_generic_url/realesrgan-anime-6B.pth"
$generalwdnx4v3_url = "$model_generic_url/realesr-general-wdn-x4plus.pth"
Write-Host "Processing files..." -ForegroundColor Black -BackgroundColor Cyan
# Rename files to random names beacuse reanming to same name will cause issues
Get-ChildItem -Path "files" | ForEach-Object {
$random_number = Get-Random -Minimum 10000 -Maximum 99999 # for 5 digit random number
Rename-Item $_.FullName -NewName ("temp-$random_number.png")
}
Get-ChildItem -Path "files" | ForEach-Object {
$starting_number++
$new_name = "$prefix $starting_number.png"
Rename-Item $_.FullName $new_name
}
$count = (Get-ChildItem -Path "files").Count
Write-Output "Processed $count files in 'files' directory"
# check resolution for each file add "lowres-" prefix to the file name if resolution is less than 1080p
Write-Output "Checking resolution..."
Get-ChildItem -Path "files" -File | ForEach-Object {
$image = [System.Drawing.Image]::FromFile($_.FullName)
if ($image.Width -lt 1920 -or $image.Height -lt 1080) {
Rename-Item $_.FullName -NewName ("lowres-" + $_.Name)
}
$image.Dispose()
}
$need_upscale = (Get-ChildItem -Path "files" -Filter "lowres-*").Count -gt 0
if ($need_upscale) {
Write-Host "Some images need upscaling. Proceeding with upscaling..." -BackgroundColor Red -ForegroundColor Black
}
$os = if ($env:OS -eq "Windows_NT") { "windows" } else { "ubuntu" }
# Check if the binary is already available
if (-not (Test-Path $binaryPath)) {
Write-Output "RealESRGAN binary is not available. Downloading..."
Invoke-WebRequest -Uri $realesrgan_url -OutFile "realesrgan.zip"
Expand-Archive -Path "realesrgan.zip" -DestinationPath "realesrgan" -Force
Remove-Item -Path "realesrgan.zip" -Force
New-Item -Path "realesrgan/models" -ItemType Directory -Force | Out-Null
Write-Output "RealESRGAN binary installed successfully"
}
# Download models if not present
$modelsToDownload = @(
@{ Name = "RealESRGAN_x4plus.pth"; Url = $generalx4v3_url },
@{ Name = "RealESRGAN_x4plus_anime_6B.pth"; Url = $animevideov3_url },
@{ Name = "RealESRGAN_x4plus_wdn.pth"; Url = $generalwdnx4v3_url }
)
foreach ($modelInfo in $modelsToDownload) {
$modelPath = Join-Path $model_dir $modelInfo.Name
if (-not (Test-Path $modelPath)) {
Write-Output "Downloading $($modelInfo.Name) model..."
Invoke-WebRequest -Uri $modelInfo.Url -OutFile $modelPath
}
}
# Upscale images
Get-ChildItem -Path "files" -Filter "lowres-*" | ForEach-Object {
$output = "upscaled-$($_.Name)"
Start-Process -FilePath $binary -ArgumentList "-i $($_.FullName) -o $output -m $model -g $gpu" -Wait -NoNewWindow
Remove-Item $_.FullName
Rename-Item $output $_.Name
}
Write-Host "Optimization complete!" -BackgroundColor Green -ForegroundColor Black