diff --git a/.specstory/history/2025-11-03_19-27Z-create-sister-script-for-sheepit.md b/.specstory/history/2025-11-03_19-27Z-create-sister-script-for-sheepit.md
index 0507193..58e905a 100644
--- a/.specstory/history/2025-11-03_19-27Z-create-sister-script-for-sheepit.md
+++ b/.specstory/history/2025-11-03_19-27Z-create-sister-script-for-sheepit.md
@@ -1838,3 +1838,1139 @@ Run the launcher again—no credential prompts will appear.
---
+_**User (2025-11-05 22:17Z)**_
+
+Downloading SheepIt client...
+
+1.Exception.Message : The term '1.Exception.Message' is not recognized as the name of a cmdlet, function, script file, or operable
+
+program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
+
+At line:21 char:26
+
++ Write-Host "Error: $(1.Exception.Message)" -ForegroundColor Red
+
++ ~~~~~~~~~~~~~~~~~~~
+
+ + CategoryInfo : ObjectNotFound: (1.Exception.Message:String) [], ParentContainsErrorRecordException
+
+ + FullyQualifiedErrorId : CommandNotFoundException
+
+
+
+Connection to i9kf closed.
+
+
+
+SSH session ended.
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+
+Tool use: **read_file** • Read file: unified_sheepit_launcher.ps1
+
+
+
+
+---
+
+Thought Process
+**Fixing remote error message handling**
+
+---
+
+
+
+ Tool use: **apply_patch** • Apply patch for undefined
+
+
+```diff
+*** Begin Patch
+*** Update File: C:\Users\Nathan\Desktop\flamenco\unified_sheepit_launcher.ps1
+@@
+- & java -jar `$jarPath --ui text --stdout --verbose -gpu optix 0 --renderkey '${safeKey}'
++ & java -jar `$jarPath --ui text --stdout --verbose -gpu optix 0 --renderkey '${safeKey}'
+ }
+ catch {
+- Write-Host "Error: `$($_.Exception.Message)" -ForegroundColor Red
++ Write-Host ('Error: {0}' -f `$_.Exception.Message) -ForegroundColor Red
+ }
+"@
+}
+*** End Patch
+```
+
+
+
+
+---
+
+
+
+ Tool use: **read_lints** • Read lints for 1 file
+
+Lint paths:
+
+- `unified_sheepit_launcher.ps1`
+
+Lint results
+
+
+**No lint errors found**
+
+
+
+---
+
+Thought Process
+**Finalizing response about remote command**
+
+---
+
+- Corrected the remote catch block to format exception messages without the malformed `$(1.Exception.Message)` syntax. Remote failures now log cleanly as `Error: `.
+
+```56:66:unified_sheepit_launcher.ps1
+ & java -jar `$jarPath --ui text --stdout --verbose -gpu optix 0 --renderkey '${safeKey}'
+}
+catch {
+ Write-Host ('Error: {0}' -f `$_.Exception.Message) -ForegroundColor Red
+}
+```
+
+Give `i9kf` another go—the download error should now print properly if it recurs.
+
+---
+
+_**User (2025-11-05 22:17Z)**_
+
+Downloading SheepIt client...
+
+Error: The remote server returned an error: (404) Not Found.
+
+Connection to i9kf closed.
+
+
+
+SSH session ended.
+
+Press Enter to close:
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+Thought Process
+**Improving URL fallback for downloading**
+
+---
+
+
+
+ Tool use: **apply_patch** • Apply patch for undefined
+
+
+```diff
+*** Begin Patch
+*** Update File: C:\Users\Nathan\Desktop\flamenco\unified_sheepit_launcher.ps1
+@@
+-$SheepItJarUrl = 'https://www.sheepit-renderfarm.com/media/applet/client-latest.jar'
++$SheepItJarUrls = @(
++ 'https://www.sheepit-renderfarm.com/media/applet/client-latest.php',
++ 'https://www.sheepit-renderfarm.com/media/applet/client-latest.jar'
++)
+@@
+- $safeKey = $RenderKey -replace "'", "''"
+- $safeUser = $Username -replace "'", "''"
++ $safeKey = $RenderKey -replace "'", "''"
++ $safeUser = $Username -replace "'", "''"
+ $userLine = if ([string]::IsNullOrWhiteSpace($Username)) {
+ ''
+ } else {
+ " Write-Host 'Authenticating as ${safeUser} via render key.' -ForegroundColor Yellow`n"
+ }
++
++ $urlLiteral = '@(' + (($SheepItJarUrls | ForEach-Object { "'$_'" }) -join ', ') + ')'
+
+ @"
+ `$ErrorActionPreference = 'Stop'
+
+ try {
+@@
+- `$jarPath = Join-Path `$sheepDir 'sheepit-client.jar'
+- Write-Host "Downloading SheepIt client..." -ForegroundColor Cyan
+- Invoke-WebRequest -Uri '$SheepItJarUrl' -OutFile `$jarPath -UseBasicParsing
+- Write-Host "Download complete." -ForegroundColor Green
++ `$jarPath = Join-Path `$sheepDir 'sheepit-client.jar'
++ `$urls = $urlLiteral
++ `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
++ `$downloaded = $false
++
++ foreach (`$url in `$urls) {
++ Write-Host "Downloading SheepIt client from `$url..." -ForegroundColor Cyan
++ try {
++ Invoke-WebRequest -Uri `$url -OutFile `$jarPath -UseBasicParsing -Headers `$headers
++ `$downloaded = $true
++ Write-Host "Download complete." -ForegroundColor Green
++ break
++ }
++ catch {
++ Write-Host ("Download failed from {0}: {1}" -f `$url, `$_.Exception.Message) -ForegroundColor Yellow
++ }
++ }
++
++ if (-not `$downloaded) {
++ throw 'Unable to download SheepIt client from any known URL.'
++ }
+*** End Patch
+```
+
+
+
+
+---
+
+Thought Process
+**Analyzing string interpolation and script updates**
+
+---
+
+
+
+ Tool use: **read_lints** • Read lints for 1 file
+
+Lint paths:
+
+- `unified_sheepit_launcher.ps1`
+
+Lint results
+
+
+**No lint errors found**
+
+
+
+---
+
+Thought Process
+**Checking PowerShell variable escaping**
+
+---
+
+- Added a list of SheepIt client URLs (primary `.php` endpoint plus the direct `.jar`) so the remote script retries alternate download sources.
+- Remote command now cycles through the list, sets a browser-like user agent, and reports per-URL failures; it raises an error only if every attempt fails.
+- Everything else—download location, Java launch flags, interactive SSH session—stays the same.
+
+```32:67:unified_sheepit_launcher.ps1
+try {
+ $appData = [Environment]::GetFolderPath('ApplicationData')
+ $sheepDir = Join-Path $appData 'sheepit'
+ ...
+ $urls = @('https://www.sheepit-renderfarm.com/media/applet/client-latest.php', 'https://www.sheepit-renderfarm.com/media/applet/client-latest.jar')
+ $headers = @{ 'User-Agent' = 'Mozilla/5.0' }
+ foreach ($url in $urls) {
+ Write-Host "Downloading SheepIt client from $url..." -ForegroundColor Cyan
+ try {
+ Invoke-WebRequest -Uri $url -OutFile $jarPath -UseBasicParsing -Headers $headers
+ $downloaded = $true
+ Write-Host "Download complete." -ForegroundColor Green
+ break
+ } catch {
+ Write-Host ("Download failed from {0}: {1}" -f $url, $_.Exception.Message) -ForegroundColor Yellow
+ }
+ }
+ if (-not $downloaded) { throw 'Unable to download SheepIt client from any known URL.' }
+ & java -jar $jarPath --ui text --stdout --verbose -gpu optix 0 --renderkey 'IfCOWBHFQpceG0601DmyrwOOJOAp2UJAQ0O0X0jF'
+} catch {
+ Write-Host ('Error: {0}' -f $_.Exception.Message) -ForegroundColor Red
+}
+```
+
+Try i9kf again; it should now fetch from the PHP endpoint and continue.
+
+---
+
+_**User (2025-11-05 22:17Z)**_
+
+Error: The term 'False' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
+
+Connection to i9kf closed.
+
+
+
+SSH session ended.
+
+Press Enter to close:
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+Thought Process
+**Analyzing remote script boolean embedding issue**
+
+---
+
+
+Tool use: **read_file** • Read file: unified_sheepit_launcher.ps1
+
+
+
+
+---
+
+Thought Process
+**Diagnosing PowerShell variable interpolation issues**
+
+---
+
+
+
+ Tool use: **apply_patch** • Apply patch for undefined
+
+
+```diff
+*** Begin Patch
+*** Update File: C:\Users\Nathan\Desktop\flamenco\unified_sheepit_launcher.ps1
+@@
+- `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
+- `$downloaded = $false
++ `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
++ `$downloaded = `$false
+@@
+- `$downloaded = $true
++ `$downloaded = `$true
+*** End Patch
+```
+
+
+
+
+---
+
+Thought Process
+**Verifying script details**
+
+---
+
+
+
+ Tool use: **read_lints** • Read lints for 1 file
+
+Lint paths:
+
+- `unified_sheepit_launcher.ps1`
+
+Lint results
+
+
+**No lint errors found**
+
+
+
+---
+
+- Escaped the `$false`/`$true` literals inside the embedded remote script so they stay as PowerShell booleans rather than being string-expanded to the bare words `False`/`True`, which caused the remote “term not recognized” error during download retries.
+
+```59:74:unified_sheepit_launcher.ps1
+ `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
+ `$downloaded = `$false
+
+ foreach (`$url in `$urls) {
+ Write-Host "Downloading SheepIt client from `$url..." -ForegroundColor Cyan
+ try {
+ Invoke-WebRequest -Uri `$url -OutFile `$jarPath -UseBasicParsing -Headers `$headers
+ `$downloaded = `$true
+ Write-Host "Download complete." -ForegroundColor Green
+```
+
+Give the `i9kf` run another shot—the download loop will now behave correctly.
+
+---
+
+_**User (2025-11-05 22:17Z)**_
+
+oh lol forgot to install java 21. what's the proper choco package?
+
+
+
+Downloading SheepIt client from https://www.sheepit-renderfarm.com/media/applet/client-latest.php...
+
+
+
+Download complete.
+
+Starting SheepIt client...
+
+Authenticating as RaincloudTheDragon via render key.
+
+Error: The term 'java' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
+
+Connection to i9kf closed.
+
+SSH session ended.
+
+Press Enter to close:
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+Thought Process
+**Determining Chocolatey package name for Java 21**
+
+---
+
+Use Adoptium’s Temurin build from Chocolatey:
+
+- Package: `temurin21`
+- Install: `choco install temurin21 -y`
+- Then verify: `java -version`
+
+That drops the JDK 21 bin directory on PATH so the SheepIt script can find `java`.
+
+---
+
+_**User (2025-11-05 22:17Z)**_
+
+Let's have it skip the jar download if it's already present.
+
+Connecting to i9kf...
+
+Downloading SheepIt client from https://www.sheepit-renderfarm.com/media/applet/client-latest.php...
+
+Download complete.
+
+Starting SheepIt client...
+
+Authenticating as RaincloudTheDragon via render key.
+
+"--ui" is not a valid option
+
+Usage:
+
+ --disable-large-downloads : Disable download of larger projects
+
+ to preserve internet traffic
+
+ (default: false)
+
+ --headless : Mark your client manually as headless
+
+ to block Eevee projects (default:
+
+ false)
+
+ --log-stdout : Display full log (default: false)
+
+ --no-gpu : Don't detect GPUs (default: false)
+
+ --no-systray : Don't use SysTray (default: false)
+
+ --show-gpu : Print available GPU devices and exit
+
+ --verbose : Log DEBUG (default: false)
+
+ --version : Display application version
+
+ -cache-dir /tmp/cache : Cache/Working directory. Caution,
+
+ everything in it not related to the
+
+ render-farm will be removed
+
+ -compute-method CPU : CPU: only use cpu, GPU: only use gpu,
+
+ CPU_GPU: can use cpu and gpu (not at
+
+ the same time) if -gpu is not use it
+
+ will not use the gpu
+
+ -config VAL : Specify the configuration file
+
+ -cores 3 : Number of cores/threads to use for
+
+ the render. The minimum is two cores
+
+ unless your system only has one
+
+ (default: -1)
+
+ -extras VAL : Extras data push on the
+
+ authentication request
+
+ -gpu OPTIX_0 : Name of the GPU used for the render,
+
+ for example OPTIX_0 for Nvidia cards.
+
+ -hostname VAL : Set a custom hostname name (name
+
+ change will be lost when client is
+
+ closed)
+
+ -incompatible-process VAL : Specify a process to stop the current
+
+ render job and pause while the said
+
+ process is running. For example, if
+
+ we take Firefox the formatting is
+
+ firefox.exe on Windows and firefox on
+
+ Linux.
+
+ -logdir VAL : Specify the log directory
+
+ -login LOGIN : User's login (default: )
+
+ -memory VAL : Maximum memory allow to be used by
+
+ renderer, number with unit (800M, 2G,
+
+ ...)
+
+ -password PASSWORD : User's password or public key
+
+ (accessible under the Keys tab of the
+
+ profile page) (default: )
+
+ -priority N : Set render process priority (19
+
+ lowest to -19 highest) (default: 19)
+
+ -proxy http://login:password@host:port : URL of the proxy
+
+ -rendertime N : Maximum time allow for each frame (in
+
+ minutes) (default: -1)
+
+ -request-time 2:00-8:30,17:00-23:00 : H1:M1-H2:M2,H3:M3-H4:M4 Use the 24h
+
+ format. For example to request job
+
+ between 2am-8.30am and 5pm-11pm you
+
+ should do -request-time
+
+ 2:00-8:30,17:00-23:00 Caution, it's
+
+ the requesting job time to get a
+
+ project, not the working time
+
+ -server URL : Render-farm server, default
+
+ https://client.sheepit-renderfarm.com
+
+ (default: https://client.sheepit-rende
+
+ rfarm.com)
+
+ -shared-zip VAL : Shared directory for downloaded
+
+ binaries and scenes. Useful when
+
+ running two or more clients in the
+
+ same computer/network to download
+
+ once and render many times.
+
+ IMPORTANT: This option and value must
+
+ be identical in ALL clients sharing
+
+ the directory.
+
+ -shutdown DATETIME or +N : Specify when the client will close
+
+ and the host computer will shut down
+
+ in a proper way. The time argument
+
+ can have two different formats: an
+
+ absolute date and time in the format
+
+ yyyy-mm-ddThh:mm:ss (24h format) or a
+
+ relative time in the format +m where
+
+ m is the number of minutes from now.
+
+ -shutdown-mode MODE : Indicates if the shutdown process
+
+ waits for the upload queue to finish
+
+ (wait) or interrupt all the pending
+
+ tasks immediately (hard). The default
+
+ shutdown mode is wait.
+
+ -theme VAL : Specify the theme to use for the
+
+ graphical client, default 'light',
+
+ available 'light', 'dark'
+
+ -title VAL : Custom title for the GUI Client
+
+ (default: SheepIt Render Farm)
+
+ -ui VAL : Specify the user interface to use,
+
+ default 'swing', available 'oneLine',
+
+ 'text', 'swing' (graphical)
+
+Example: java com.sheepit.client.main.Worker
+
+Connection to i9kf closed.
+
+SSH session ended.
+
+Press Enter to close:
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+Thought Process
+**Adjusting remote script and command options**
+
+I'm updating the remote script to skip downloading the jar if it already exists, adding a clear message when skipping, and fixing the GPU argument to use uppercase. I'll also switch the UI option to use a single dash with "text," add the `--log-stdout` flag for full output, and make sure the script handles these changes cleanly with proper escaping and indentation. This will keep the process efficient and user-friendly without losing update flexibility.
+
+---
+
+
+
+ Tool use: **apply_patch** • Apply patch for undefined
+
+
+```diff
+*** Begin Patch
+*** Update File: C:\Users\Nathan\Desktop\flamenco\unified_sheepit_launcher.ps1
+@@
+- `$jarPath = Join-Path `$sheepDir 'sheepit-client.jar'
+- `$urls = $urlLiteral
+- `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
+- `$downloaded = `$false
+-
+- foreach (`$url in `$urls) {
+- Write-Host "Downloading SheepIt client from `$url..." -ForegroundColor Cyan
+- try {
+- Invoke-WebRequest -Uri `$url -OutFile `$jarPath -UseBasicParsing -Headers `$headers
+- `$downloaded = `$true
+- Write-Host "Download complete." -ForegroundColor Green
+- break
+- }
+- catch {
+- Write-Host ("Download failed from {0}: {1}" -f `$url, `$_.Exception.Message) -ForegroundColor Yellow
+- }
+- }
+-
+- if (-not `$downloaded) {
+- throw 'Unable to download SheepIt client from any known URL.'
+- }
++ `$jarPath = Join-Path `$sheepDir 'sheepit-client.jar'
++ `$urls = $urlLiteral
++ `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
++
++ if (Test-Path `$jarPath) {
++ Write-Host "SheepIt client already present at `$jarPath. Skipping download." -ForegroundColor Green
++ }
++ else {
++ `$downloaded = `$false
++
++ foreach (`$url in `$urls) {
++ Write-Host "Downloading SheepIt client from `$url..." -ForegroundColor Cyan
++ try {
++ Invoke-WebRequest -Uri `$url -OutFile `$jarPath -UseBasicParsing -Headers `$headers
++ `$downloaded = `$true
++ Write-Host "Download complete." -ForegroundColor Green
++ break
++ }
++ catch {
++ Write-Host ("Download failed from {0}: {1}" -f `$url, `$_.Exception.Message) -ForegroundColor Yellow
++ }
++ }
++
++ if (-not `$downloaded) {
++ throw 'Unable to download SheepIt client from any known URL.'
++ }
++ }
+@@
+- & java -jar `$jarPath --ui text --stdout --verbose -gpu optix 0 --renderkey '${safeKey}'
++ & java -jar `$jarPath -ui text --log-stdout --verbose -gpu OPTIX_0 --renderkey '${safeKey}'
+ }
+ catch {
+*** End Patch
+```
+
+
+
+
+---
+
+
+
+ Tool use: **read_lints** • Read lints for 1 file
+
+Lint paths:
+
+- `unified_sheepit_launcher.ps1`
+
+Lint results
+
+
+**No lint errors found**
+
+
+
+---
+
+- Remote script now skips re-downloading the SheepIt jar when `%APPDATA%\sheepit\sheepit-client.jar` already exists; otherwise it loops over the known URLs with retry logging.
+- Java launch command updated to match SheepIt’s CLI options: `-ui text --log-stdout --verbose -gpu OPTIX_0 --renderkey ...` (note the single-dash `-ui` and `OPTIX_0` syntax).
+
+```56:86:unified_sheepit_launcher.ps1
+ if (Test-Path `$jarPath) {
+ Write-Host "SheepIt client already present at `$jarPath. Skipping download." -ForegroundColor Green
+ }
+ else {
+ `$downloaded = `$false
+ foreach (`$url in `$urls) {
+ Write-Host "Downloading SheepIt client from `$url..." -ForegroundColor Cyan
+ ...
+ }
+ if (-not `$downloaded) { throw 'Unable to download SheepIt client from any known URL.' }
+ }
+
+ Write-Host "Starting SheepIt client..." -ForegroundColor Cyan
+ Set-Location `$sheepDir
+ & java -jar `$jarPath -ui text --log-stdout --verbose -gpu OPTIX_0 --renderkey '${safeKey}'
+```
+
+Give it another run on `i9kf`—it should reuse the jar and launch with the corrected arguments.
+
+---
+
+_**User (2025-11-05 22:17Z)**_
+
+Connecting to i9kf...
+
+SheepIt client already present at C:\Users\Nathan\AppData\Roaming\sheepit\sheepit-client.jar. Skipping download.
+
+Starting SheepIt client...
+
+Authenticating as RaincloudTheDragon via render key.
+
+"--renderkey" is not a valid option
+
+Usage:
+
+ --disable-large-downloads : Disable download of larger projects
+
+ to preserve internet traffic
+
+ (default: false)
+
+ --headless : Mark your client manually as headless
+
+ to block Eevee projects (default:
+
+ false)
+
+ --log-stdout : Display full log (default: true)
+
+ --no-gpu : Don't detect GPUs (default: false)
+
+ --no-systray : Don't use SysTray (default: false)
+
+ --show-gpu : Print available GPU devices and exit
+
+ --verbose : Log DEBUG (default: true)
+
+ --version : Display application version
+
+ -cache-dir /tmp/cache : Cache/Working directory. Caution,
+
+ everything in it not related to the
+
+ render-farm will be removed
+
+ -compute-method CPU : CPU: only use cpu, GPU: only use gpu,
+
+ CPU_GPU: can use cpu and gpu (not at
+
+ the same time) if -gpu is not use it
+
+ will not use the gpu
+
+ -config VAL : Specify the configuration file
+
+ -cores 3 : Number of cores/threads to use for
+
+ the render. The minimum is two cores
+
+ unless your system only has one
+
+ (default: -1)
+
+ -extras VAL : Extras data push on the
+
+ authentication request
+
+ -gpu OPTIX_0 : Name of the GPU used for the render,
+
+ for example OPTIX_0 for Nvidia cards.
+
+ (default: OPTIX_0)
+
+ -hostname VAL : Set a custom hostname name (name
+
+ change will be lost when client is
+
+ closed)
+
+ -incompatible-process VAL : Specify a process to stop the current
+
+ render job and pause while the said
+
+ process is running. For example, if
+
+ we take Firefox the formatting is
+
+ firefox.exe on Windows and firefox on
+
+ Linux.
+
+ -logdir VAL : Specify the log directory
+
+ -login LOGIN : User's login (default: )
+
+ -memory VAL : Maximum memory allow to be used by
+
+ renderer, number with unit (800M, 2G,
+
+ ...)
+
+ -password PASSWORD : User's password or public key
+
+ (accessible under the Keys tab of the
+
+ profile page) (default: )
+
+ -priority N : Set render process priority (19
+
+ lowest to -19 highest) (default: 19)
+
+ -proxy http://login:password@host:port : URL of the proxy
+
+ -rendertime N : Maximum time allow for each frame (in
+
+ minutes) (default: -1)
+
+ -request-time 2:00-8:30,17:00-23:00 : H1:M1-H2:M2,H3:M3-H4:M4 Use the 24h
+
+ format. For example to request job
+
+ between 2am-8.30am and 5pm-11pm you
+
+ should do -request-time
+
+ 2:00-8:30,17:00-23:00 Caution, it's
+
+ the requesting job time to get a
+
+ project, not the working time
+
+ -server URL : Render-farm server, default
+
+ https://client.sheepit-renderfarm.com
+
+ (default: https://client.sheepit-rende
+
+ rfarm.com)
+
+ -shared-zip VAL : Shared directory for downloaded
+
+ binaries and scenes. Useful when
+
+ running two or more clients in the
+
+ same computer/network to download
+
+ once and render many times.
+
+ IMPORTANT: This option and value must
+
+ be identical in ALL clients sharing
+
+ the directory.
+
+ -shutdown DATETIME or +N : Specify when the client will close
+
+ and the host computer will shut down
+
+ in a proper way. The time argument
+
+ can have two different formats: an
+
+ absolute date and time in the format
+
+ yyyy-mm-ddThh:mm:ss (24h format) or a
+
+ relative time in the format +m where
+
+ m is the number of minutes from now.
+
+ -shutdown-mode MODE : Indicates if the shutdown process
+
+ waits for the upload queue to finish
+
+ (wait) or interrupt all the pending
+
+ tasks immediately (hard). The default
+
+ shutdown mode is wait.
+
+ -theme VAL : Specify the theme to use for the
+
+ graphical client, default 'light',
+
+ available 'light', 'dark'
+
+ -title VAL : Custom title for the GUI Client
+
+ (default: SheepIt Render Farm)
+
+ -ui VAL : Specify the user interface to use,
+
+ default 'swing', available 'oneLine',
+
+ 'text', 'swing' (graphical) (default:
+
+ text)
+
+
+
+Example: java com.sheepit.client.main.Worker
+
+Connection to i9kf closed.
+
+
+
+SSH session ended.
+
+Press Enter to close:
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+
+
+ Tool use: **apply_patch** • Apply patch for undefined
+
+
+```diff
+*** Begin Patch
+*** Update File: C:\Users\Nathan\Desktop\flamenco\unified_sheepit_launcher.ps1
+@@
+- & java -jar `$jarPath -ui text --log-stdout --verbose -gpu OPTIX_0 --renderkey '${safeKey}'
++ & java -jar `$jarPath -ui text --log-stdout --verbose -gpu OPTIX_0 -login '${safeUser}' -password '${safeKey}'
+*** End Patch
+```
+
+
+
+
+---
+
+
+
+ Tool use: **read_lints** • Read lints for 1 file
+
+Lint paths:
+
+- `unified_sheepit_launcher.ps1`
+
+Lint results
+
+
+**No lint errors found**
+
+
+
+---
+
+- Swapped the SheepIt CLI flags: it now authenticates with `-login` using your username and passes the render key with `-password`, matching the client’s supported options.
+
+```82:86:unified_sheepit_launcher.ps1
+ Write-Host "Starting SheepIt client..." -ForegroundColor Cyan
+ Set-Location `$sheepDir
+ & java -jar `$jarPath -ui text --log-stdout --verbose -gpu OPTIX_0 -login '${safeUser}' -password '${safeKey}'
+```
+
+Run the launcher again; the client should accept the credentials now.
+
+---
+
+_**User (2025-11-05 22:17Z)**_
+
+Connecting to i9kf...
+
+SheepIt client already present at C:\Users\Nathan\AppData\Roaming\sheepit\sheepit-client.jar. Skipping download.
+
+Starting SheepIt client...
+
+Authenticating as RaincloudTheDragon via render key.
+
+05-11 16:44:04 (debug) client version 7.25209.0
+
+05-11 16:44:04 (debug) GUI Starting
+
+Nov 05 16:44:04 Starting
+
+05-11 16:44:05 (debug) Server::getConfiguration url https://client.sheepit-renderfarm.com/server/config.php
+
+05-11 16:44:05 (debug) Server::HTTPRequest url(https://client.sheepit-renderfarm.com/server/config.php)
+
+05-11 16:44:06 (info) OS: windows 11 build 26100 amd64
+
+05-11 16:44:06 (info) CFG: version: 7.25209.0
+
+ CFG: configFilePath: null
+
+ CFG: logDir: C:\Users\Nathan
+
+ CFG: workingDirectory: C:\Users\Nathan\AppData\Local\Temp\farm_8397192207645974626
+
+ CFG: sharedDownloadsDirectory: null
+
+ CFG: woolCacheDirectory: C:\Users\Nathan\AppData\Local\Temp\sheepit_wool_cache
+
+ CFG: userHasSpecifiedACacheDir: false
+
+ CFG: login: RaincloudTheDragon
+
+ CFG: proxy:
+
+ CFG: maxUploadingJob: 3
+
+ CFG: nbCores: 32
+
+ CFG: maxAllowedMemory: 134001424
+
+ CFG: maxRenderTime: -1
+
+ CFG: priority: 19
+
+ CFG: computeMethod: GPU
+
+ CFG: GPUDevice: GPUDevice [type=OPTIX, model='NVIDIA GeForce RTX 4080 SUPER', memory=17170956288, id=CUDA_NVIDIA GeForce RTX 4080 SUPER_0000:01:00_OptiX, driverVersion=581.57, computeCapability=8.9]
+
+ CFG: detectGPUs: true
+
+ CFG: printLog: true
+
+ CFG: debugLog: true
+
+ CFG: requestTime: null
+
+ CFG: shutdownTime: -1
+
+ CFG: shutdownMode: soft
+
+ CFG: extras:
+
+ CFG: autoSignIn: true
+
+ CFG: useSysTray: true
+
+ CFG: headless: false
+
+ CFG: UIType: text
+
+ CFG: hostname: i9kf
+
+ CFG: theme: dark
+
+ CFG: incompatibleProcess:
+
+ CFG: disableLargeDownloads: false
+
+05-11 16:44:06 (info) FSHealth: FilesystemHealthCheck started
+
+05-11 16:44:06 (debug) Sending error to server (type: OK)
+
+05-11 16:44:06 (debug) Server::HTTPSendFile(https://client.sheepit-renderfarm.com/server/error.php?type=0,C:\Users\Nathan\AppData\Local\Temp\farm_13482851346990915122.txt)
+
+Nov 05 16:44:07 Session downloads: 0MB @ 0.0MB/s / Uploads: 0MB @ 0.0MB/s
+
+05-11 16:44:07 (debug) File uploaded at 0.0MB/s, uploaded 2339 bytes
+
+05-11 16:44:17 (debug) GUI Requesting Job
+
+Nov 05 16:44:17 Requesting Job
+
+05-11 16:44:17 (debug) Server::requestJob
+
+05-11 16:44:17 (debug) Server::HTTPRequest url(https://client.sheepit-renderfarm.com/server/request_job.php?computemethod=2&network_dl=0&network_up=31186&cpu_cores=32&ram_max=111883660&rendertime_max=-1&gpu_model=NVIDIA%20GeForce%20RTX%204080%20SUPER&gpu_ram=17170956288&gpu_type=OPTIX&gpu_cuda_compute_capability=8.9&gpu_driver_version=581.57)
+
+Nov 05 16:44:17 Frames remaining: 37305
+
+Nov 05 16:44:17 Points earned: 0
+
+05-11 16:44:17 (debug) Got work to do id: 1 frame: 0340
+
+Nov 05 16:44:17 Rendering project "Can Blender be launched?"
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+Nov 05 16:44:17 Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Reusing cached
+
+05-11 16:44:17 (debug) GUI Extracting renderer
+
+Nov 05 16:44:17 Extracting renderer
+
+05-11 16:44:17 (debug) Client::prepareWorkingDirectory Extracting renderer into C:\Users\Nathan\AppData\Local\Temp\farm_8397192207645974626\8925f92f4f648b29b5524bd5e582836a
+
+---
+
+_**Agent (model gpt-5-codex, mode Agent)**_
+
+Thought Process
+**Acknowledging successful operation**
+
+---
+
+Great—looks like the CLI launch is working: it reused the cached jar, authenticated with your render key, detected the RTX 4080 SUPER via OptiX, and is already chewing through a project (“Can Blender be launched?”). You’re good to keep an eye on the session in that tab or kick off launches on the other nodes.
+
+---
+
diff --git a/unified_sheepit_launcher.ps1 b/unified_sheepit_launcher.ps1
index 302fdcc..d238d3b 100644
--- a/unified_sheepit_launcher.ps1
+++ b/unified_sheepit_launcher.ps1
@@ -6,7 +6,10 @@ function Show-Header {
Write-Host
}
-$SheepItJarUrl = 'https://www.sheepit-renderfarm.com/media/applet/client-latest.jar'
+$SheepItJarUrls = @(
+ 'https://www.sheepit-renderfarm.com/media/applet/client-latest.php',
+ 'https://www.sheepit-renderfarm.com/media/applet/client-latest.jar'
+)
$script:SheepItUsername = $null
$script:SheepItRenderKey = $null
@@ -43,6 +46,8 @@ function Get-RemoteSheepItCommand {
" Write-Host 'Authenticating as ${safeUser} via render key.' -ForegroundColor Yellow`n"
}
+ $urlLiteral = '@(' + (($SheepItJarUrls | ForEach-Object { "'$_'" }) -join ', ') + ')'
+
@"
`$ErrorActionPreference = 'Stop'
@@ -54,16 +59,39 @@ try {
}
`$jarPath = Join-Path `$sheepDir 'sheepit-client.jar'
- Write-Host "Downloading SheepIt client..." -ForegroundColor Cyan
- Invoke-WebRequest -Uri '$SheepItJarUrl' -OutFile `$jarPath -UseBasicParsing
- Write-Host "Download complete." -ForegroundColor Green
+ `$urls = $urlLiteral
+ `$headers = @{ 'User-Agent' = 'Mozilla/5.0' }
+
+ if (Test-Path `$jarPath) {
+ Write-Host "SheepIt client already present at `$jarPath. Skipping download." -ForegroundColor Green
+ }
+ else {
+ `$downloaded = `$false
+
+ foreach (`$url in `$urls) {
+ Write-Host "Downloading SheepIt client from `$url..." -ForegroundColor Cyan
+ try {
+ Invoke-WebRequest -Uri `$url -OutFile `$jarPath -UseBasicParsing -Headers `$headers
+ `$downloaded = `$true
+ Write-Host "Download complete." -ForegroundColor Green
+ break
+ }
+ catch {
+ Write-Host ("Download failed from {0}: {1}" -f `$url, `$_.Exception.Message) -ForegroundColor Yellow
+ }
+ }
+
+ if (-not `$downloaded) {
+ throw 'Unable to download SheepIt client from any known URL.'
+ }
+ }
Write-Host "Starting SheepIt client..." -ForegroundColor Cyan
${userLine} Set-Location `$sheepDir
- & java -jar `$jarPath --ui text --stdout --verbose -gpu optix 0 --renderkey '${safeKey}'
+ & java -jar `$jarPath -ui text --log-stdout --verbose -gpu OPTIX_0 -login '${safeUser}' -password '${safeKey}'
}
catch {
- Write-Host "Error: `$($_.Exception.Message)" -ForegroundColor Red
+ Write-Host ('Error: {0}' -f `$_.Exception.Message) -ForegroundColor Red
}
"@
}