add readme and changelog

This commit is contained in:
Nathan
2025-12-17 15:40:47 -07:00
parent 610cdb62a8
commit d0ac16e53a
3 changed files with 928 additions and 0 deletions

View File

@@ -0,0 +1,645 @@
<!-- Generated by SpecStory, Markdown v2.1.0 -->
<!-- cursor Session 2a506942-5bcd-4a99-9e1e-a3cf55d5af92 (2025-12-17 22:32Z) -->
# Readme for sheepit worker incompatibility fix (2025-12-17 22:32Z)
_**User (2025-12-17 22:32Z)**_
context:@.specstory/history/2025-11-21_16-43Z-fixing-sheepit-worker-incompatibility.md
add a readme.
---
_**Agent (model default, mode Agent)**_
---
Reviewing the context file and codebase to draft the README.
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/history/2025-11-21_16-43Z-fixing-sheepit-worker-incompatibility.md</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: UnifiedFarmLauncher.csproj</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: Program.cs</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: ViewModels/MainWindowViewModel.cs</summary>
</details>
</tool-use>
---
---
Reading a portion of the context file and reviewing additional files:
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/history/2025-11-21_16-43Z-fixing-sheepit-worker-incompatibility.md</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: Models/ConfigRoot.cs</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: Services/WorkerControllerService.cs</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: Views/MainWindow.axaml</summary>
</details>
</tool-use>
---
---
Checking a few more files to understand the project structure:
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: Models/WorkerConfig.cs</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: Services/ConfigService.cs</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="search" data-tool-name="codebase_search">
<details>
<summary>Tool use: **codebase_search** • Searched codebase "What is the purpose of this application and what does it do?" • **8** results</summary>
| File | Lines |
|------|-------|
| `App.axaml.cs` | L30 |
| `Views/MainWindow.axaml` | L32 |
| `Program.cs` | L19 |
| `Services/ConfigService.cs` | L62 |
| `app.manifest` | L12 |
| `ViewModels/MainWindowViewModel.cs` | L60 |
| `UnifiedFarmLauncher.csproj` | L30 |
| `Views/MainWindow.axaml.cs` | L46 |
</details>
</tool-use>
---
---
Creating the README:
---
<tool-use data-tool-type="write" data-tool-name="write">
<details><summary>Tool use: **write** • Edit file: README.md</summary>
**Chunk 1**
Lines added: 162, lines removed: 1
```diff
@@ -1,1 +1,162 @@
-
+ # Unified Farm Launcher
+
+ A desktop application for managing remote render farm workers across multiple systems. Supports both **SheepIt** and **Flamenco** worker types with a unified interface for starting, stopping, and monitoring workers via SSH.
+
+ ## Features
+
+ - **Multi-Worker Support**: Manage multiple remote workers from a single interface
+ - **Worker Types**:
+ - **SheepIt**: Distributed rendering for Blender projects
+ - **Flamenco**: Blender Foundation's render farm manager
+ - **Remote Management**: Control workers on remote machines via SSH
+ - **Worker Lifecycle**: Start, stop, and attach to worker processes
+ - **Filtering**: Filter workers by type (All, SheepIt, Flamenco)
+ - **Configuration Management**: Add, edit, and delete worker configurations
+ - **Real-time Logging**: Attach to worker logs for real-time monitoring
+
+ ## Requirements
+
+ - **.NET 8.0** or later
+ - **Windows** (PowerShell required on remote machines)
+ - **SSH access** to remote worker machines
+ - **Java** (Temurin 21 recommended) on remote machines for SheepIt workers
+ - **Flamenco worker executable** on remote machines for Flamenco workers
+
+ ## Building
+
+ &#96;&#96;&#96;bash
+ dotnet build
+ &#96;&#96;&#96;
+
+ ## Running
+
+ &#96;&#96;&#96;bash
+ dotnet run
+ &#96;&#96;&#96;
+
+ Or build and run the executable from the output directory.
+
+ ## Configuration
+
+ Configuration is stored in &#96;%LocalAppData%\UnifiedFarmLauncher\workers.json&#96;. The application will create this file automatically on first run.
+
+ ### Configuration Structure
+
+ &#96;&#96;&#96;json
+ {
+ "workers": [
+ {
+ "id": 1,
+ "name": "worker-name",
+ "enabled": true,
+ "ssh": {
+ "host": "192.168.1.100",
+ "port": 22,
+ "username": "user",
+ "password": "password"
+ },
+ "workerTypes": {
+ "sheepIt": {
+ "username": "sheepit-username",
+ "renderKey": "render-key",
+ "gpu": "CPU"
+ },
+ "flamenco": {
+ "workerPath": "C:\\path\\to\\flamenco-worker",
+ "networkDrives": ["Z:", "Y:"],
+ "networkPaths": ["\\\\server\\share"]
+ }
+ }
+ }
+ ],
+ "globalSettings": {
+ "sheepItJarUrls": [
+ "https://sheepit-renderfarm.com/media/applet/client-latest.php"
+ ]
+ }
+ }
+ &#96;&#96;&#96;
+
+ ## Usage
+
+ ### Adding a Worker
+
+ 1. Click **Add Worker** button
+ 2. Fill in the worker details:
+ - **Name**: Unique identifier for the worker
+ - **SSH Configuration**: Host, port, username, and password
+ - **Worker Type Configuration**: Configure either SheepIt or Flamenco (or both)
+ 3. Click **Save**
+
+ ### Starting a Worker
+
+ 1. Select a worker from the list
+ 2. Click **Start** button
+ 3. The application will:
+ - Deploy the controller script to the remote machine
+ - Start the worker process
+ - Monitor the worker status
+
+ ### Stopping a Worker
+
+ 1. Select a running worker
+ 2. Click **Stop** button
+ 3. The worker process will be gracefully terminated
+
+ ### Attaching to Worker Logs
+
+ 1. Select a worker
+ 2. Click **Attach** button
+ 3. A terminal session will open showing real-time worker logs
+ 4. Type &#96;detach&#96; to exit the session
+
+ ### Filtering Workers
+
+ Use the tabs at the top to filter workers:
+ - **All Workers**: Shows all configured workers
+ - **SheepIt**: Shows only SheepIt workers
+ - **Flamenco**: Shows only Flamenco workers
+
+ ## Architecture
+
+ ### Project Structure
+
+ &#96;&#96;&#96;
+ UFL/
+ ├── Models/ # Data models (ConfigRoot, WorkerConfig, etc.)
+ ├── Services/ # Business logic services
+ │ ├── ConfigService.cs # Configuration management
+ │ ├── SshService.cs # SSH communication
+ │ ├── WorkerControllerService.cs # Worker lifecycle management
+ │ └── AttachService.cs # Log attachment service
+ ├── ViewModels/ # MVVM view models
+ ├── Views/ # Avalonia UI views
+ └── Scripts/ # PowerShell scripts (embedded resources)
+ ├── remote_worker_controller.ps1
+ └── remote_worker_attach.ps1
+ &#96;&#96;&#96;
+
+ ### Remote Worker Architecture
+
+ Workers run on remote machines under a controller process:
+
+ 1. **Controller Script**: Deployed to &#96;%LocalAppData%\UnifiedWorkers\controller.ps1&#96;
+ 2. **Worker Data**: Stored in &#96;%LocalAppData%\UnifiedWorkers\{workerType}\{workerName}\&#96;
+ - &#96;logs\worker.log&#96;: Worker output logs
+ - &#96;state\worker-info.json&#96;: Worker metadata and status
+ - &#96;state\commands.txt&#96;: Command queue for worker control
+ - &#96;state\payload.ps1&#96;: Worker execution script
+
+ 3. **Worker Process**: The controller manages the worker process lifecycle, handles restarts, and monitors status.
+
+ ## Technologies
+
+ - **Avalonia UI**: Cross-platform .NET UI framework
+ - **ReactiveUI**: MVVM framework
+ - **System.Text.Json**: JSON serialization
+ - **PowerShell**: Remote script execution
+
+ ## License
+
+ [Specify your license here]
+
```
</details>
</tool-use>
---
---
Created a README for the Unified Farm Launcher. It includes:
- **Overview**: Description of the application and its purpose
- **Features**: List of capabilities
- **Requirements**: Prerequisites for running the application
- **Building & Running**: Instructions for building and running
- **Configuration**: Structure and location of the config file
- **Usage**: Step-by-step instructions for common tasks
- **Architecture**: Project structure and remote worker architecture
- **Technologies**: Technologies used
The README provides an overview of the application and how to use it. If you want any sections expanded or additional details, say what to add.
---
_**User (2025-12-17 22:32Z)**_
add a changelog.
---
_**Agent (model default, mode Agent)**_
---
Reviewing the history file to identify changes for the changelog.
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/history/2025-11-21_16-43Z-fixing-sheepit-worker-incompatibility.md</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="generic" data-tool-name="glob_file_search">
<details>
<summary>Tool use: **glob_file_search** • Searched codebase "*.md" • **20** results in **1** directory</summary>
Directory: **c:\Users\Nathan\Desktop\UFL\.specstory** (20 files)
| File |
|------|
| `history\2025-11-21_16-43Z-fixing-sheepit-worker-incompatibility.md` |
| `history\2025-11-21_01-14Z-workers-failing-and-ssh-connection-issues.md` |
| `history\2025-11-19_17-03Z-why-is-git-frozen.md` |
| `history\2025-11-06_17-28Z-update-path-structure-for-renders.md` |
| `history\2025-11-03_19-27Z-create-sister-script-for-sheepit.md` |
| `history\2025-08-13_18-59Z-remove-seq-from-jobname-format.md` |
| `.what-is-this.md` |
| `history\2025-07-15_18-30Z-configure-launch-standard-worker-for-flamenco-3-7.md` |
| `history\2025-06-03_00-04Z-change-retry-function-to-infinite-retries.md` |
| `history\2025-05-23_23-12Z-replace-remotecmd-with-remotesimplified.md` |
| `history\2025-05-14_15-49Z-cmd-worker-error-handling-and-retry-logic.md` |
| `history\2025-05-13_23-13Z-bypassing-password-prompts-in-script.md` |
| `history\2025-05-12_16-04Z-technical-scripting-and-troubleshooting-discussion.md` |
| `history\2025-05-07_22-05Z-script-modification-for-masterbox.md` |
| `history\2025-05-06_21-34Z-identifying-mistakes-and-seeking-guidance.md` |
| `history\2025-05-06_20-07Z-switching-to-optix-gpu-rendering.md` |
| `history\2025-05-05_16-17Z-flamenco-job-status-troubleshooting.md` |
| `history\2025-04-25_19-30Z-i9-13ks-setup-troubleshooting.md` |
| `history\2025-04-23_20-48Z-network-drive-mapping-and-file-copying-script.md` |
| `history\2025-04-04_17-25Z-creating-worker2-scripts-for-flamenco.md` |
</details>
</tool-use>
---
<tool-use data-tool-type="search" data-tool-name="codebase_search">
<details>
<summary>Tool use: **codebase_search** • Searched codebase "What are the main features and changes that have been implemented in this project?" • **8** results</summary>
| File | Lines |
|------|-------|
| `Views/MainWindow.axaml.cs` | L46 |
| `Views/MainWindow.axaml` | L32 |
| `ViewModels/MainWindowViewModel.cs` | L60 |
| `UnifiedFarmLauncher.csproj` | L30 |
| `ViewModels/ViewModelBase.cs` | L26 |
| `Services/ConfigService.cs` | L62 |
| `App.axaml.cs` | L30 |
| `Services/ConfigService.cs` | L59-121 |
</details>
</tool-use>
---
---
Reviewing a few more history files to understand the project's evolution:
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/history/2025-11-21_01-14Z-workers-failing-and-ssh-connection-issues.md</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/history/2025-11-03_19-27Z-create-sister-script-for-sheepit.md</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/history/2025-07-15_18-30Z-configure-launch-standard-worker-for-flamenco-3-7.md</summary>
</details>
</tool-use>
---
<tool-use data-tool-type="read" data-tool-name="read_file">
<details><summary>Tool use: **read_file** • Read file: .specstory/.what-is-this.md</summary>
</details>
</tool-use>
---
---
Creating the changelog based on the project history and codebase:
---
<tool-use data-tool-type="write" data-tool-name="write">
<details><summary>Tool use: **write** • Edit file: CHANGELOG.md</summary>
**Chunk 1**
Lines added: 121, lines removed: 1
```diff
@@ -1,1 +1,121 @@
-
+ # Changelog
+
+ All notable changes to the Unified Farm Launcher project will be documented in this file.
+
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+ ## [Unreleased]
+
+ ### Added
+ - README documentation
+ - CHANGELOG file
+
+ ## [1.0.0] - 2025-11-21
+
+ ### Added
+ - **Avalonia Desktop Application**: Complete migration from PowerShell scripts to a cross-platform desktop application
+ - **Worker Management UI**: Graphical interface for managing multiple remote workers
+ - **Multi-Worker Type Support**: Unified interface supporting both SheepIt and Flamenco worker types
+ - **Worker Configuration Management**: Add, edit, and delete worker configurations through the UI
+ - **Worker Filtering**: Filter workers by type (All, SheepIt, Flamenco) using tab controls
+ - **Remote Worker Controller**: PowerShell-based controller script deployed to remote machines for process management
+ - **Worker Lifecycle Management**: Start, stop, and monitor worker processes remotely
+ - **Log Attachment Service**: Real-time log viewing by attaching to remote worker processes
+ - **SSH Service**: Secure remote communication with worker machines
+ - **Configuration Persistence**: JSON-based configuration stored in &#96;%LocalAppData%\UnifiedFarmLauncher\workers.json&#96;
+ - **Worker Status Tracking**: Metadata tracking for worker state, PIDs, restart counts, and exit codes
+ - **Automatic Restart Logic**: Configurable restart attempts with delay for failed workers
+ - **Command Queue System**: File-based command queue for remote worker control
+ - **Embedded PowerShell Scripts**: Controller and attach helper scripts embedded as resources
+
+ ### Changed
+ - **Architecture**: Migrated from standalone PowerShell scripts to structured C# application with MVVM pattern
+ - **Payload Handling**: Switched from command-line argument passing to file-based payload storage to avoid Windows command-line length limits
+ - **Worker Process Management**: Implemented controller-based architecture for better process lifecycle management
+ - **Logging System**: Enhanced logging with timestamped, prefixed log entries (CTRL, OUT, ERR)
+ - **SheepIt Integration**: Updated to use JAR file downloads with fallback URLs instead of executable-based approach
+
+ ### Fixed
+ - **Command-Line Length Limits**: Resolved issues with large payloads exceeding Windows command-line argument limits by using file-based payload storage
+ - **Worker Process Startup**: Fixed issues with worker processes not starting properly on remote machines
+ - **SSH Connection Failures**: Improved SSH connection handling and error reporting
+ - **Log Output Capture**: Fixed missing worker output in logs by properly redirecting stdout/stderr
+ - **Controller Deployment**: Ensured controller script is properly deployed and executed on remote machines
+ - **Process Monitoring**: Improved worker process status tracking and metadata updates
+
+ ### Technical Details
+ - **Framework**: .NET 8.0 with Avalonia UI 11.0.0
+ - **Architecture**: MVVM pattern with ReactiveUI
+ - **Remote Execution**: PowerShell scripts executed via SSH
+ - **Data Storage**: JSON configuration with file-based state management on remote machines
+ - **Logging**: File-based logging with real-time streaming support
+
+ ## [Pre-1.0.0] - Historical Development
+
+ ### 2025-11-21
+ - Fixed SheepIt worker incompatibility issues
+ - Resolved command-line argument size limitations
+ - Improved payload resolution and file-based storage
+
+ ### 2025-11-21
+ - Fixed SSH connection issues and worker failures
+ - Improved error handling for remote command execution
+
+ ### 2025-11-06
+ - Updated path structure for renders
+
+ ### 2025-11-03
+ - Created unified SheepIt launcher script
+ - Added support for SheepIt worker type alongside Flamenco
+
+ ### 2025-08-13
+ - Removed sequence numbers from job name format
+
+ ### 2025-07-15
+ - Configured launch standard worker for Flamenco 3.7
+ - Updated worker paths to use &#96;F:\software\Flamenco 3.7&#96;
+
+ ### 2025-06-03
+ - Changed retry function to infinite retries
+
+ ### 2025-05-23
+ - Replaced RemoteCmd with RemoteSimplified
+
+ ### 2025-05-14
+ - Added CMD worker error handling and retry logic
+
+ ### 2025-05-13
+ - Implemented password prompt bypassing in scripts
+
+ ### 2025-05-12
+ - Technical scripting and troubleshooting improvements
+
+ ### 2025-05-07
+ - Script modifications for masterbox system
+
+ ### 2025-05-06
+ - Switched to OptiX GPU rendering
+ - Identified and fixed various mistakes
+
+ ### 2025-05-05
+ - Flamenco job status troubleshooting
+
+ ### 2025-04-25
+ - i9-13ks setup troubleshooting
+
+ ### 2025-04-23
+ - Network drive mapping and file copying script improvements
+
+ ### 2025-04-04
+ - Created worker2 scripts for Flamenco
+
+ ---
+
+ ## Notes
+
+ - This project evolved from PowerShell-based scripts to a full desktop application
+ - Early development focused on Flamenco worker management
+ - SheepIt support was added later as a second worker type
+ - The migration to Avalonia UI provided a unified interface for managing both worker types
+
```
</details>
</tool-use>
---
---
Created a CHANGELOG.md that includes:
- **Current Version (1.0.0)**: Major features and changes from the migration to the Avalonia desktop application
- **Historical Development Timeline**: Chronological entries based on the project history files
- **Technical Details**: Framework versions, architecture patterns, and implementation details
- **Project Evolution Notes**: Summary of the transition from PowerShell scripts to a desktop application
The changelog follows the [Keep a Changelog](https://keepachangelog.com/) format with sections for Added, Changed, and Fixed. It documents the project's evolution from early Flamenco worker scripts through the addition of SheepIt support to the current unified desktop application.
The changelog is ready to use and can be updated as new features and fixes are added.
---

121
CHANGELOG.md Normal file
View File

@@ -0,0 +1,121 @@
# Changelog
All notable changes to the Unified Farm Launcher project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- README documentation
- CHANGELOG file
## [0.0.1] - 2025-11-21
### Added
- **Avalonia Desktop Application**: Complete migration from PowerShell scripts to a cross-platform desktop application
- **Worker Management UI**: Graphical interface for managing multiple remote workers
- **Multi-Worker Type Support**: Unified interface supporting both SheepIt and Flamenco worker types
- **Worker Configuration Management**: Add, edit, and delete worker configurations through the UI
- **Worker Filtering**: Filter workers by type (All, SheepIt, Flamenco) using tab controls
- **Remote Worker Controller**: PowerShell-based controller script deployed to remote machines for process management
- **Worker Lifecycle Management**: Start, stop, and monitor worker processes remotely
- **Log Attachment Service**: Real-time log viewing by attaching to remote worker processes
- **SSH Service**: Secure remote communication with worker machines
- **Configuration Persistence**: JSON-based configuration stored in `%LocalAppData%\UnifiedFarmLauncher\workers.json`
- **Worker Status Tracking**: Metadata tracking for worker state, PIDs, restart counts, and exit codes
- **Automatic Restart Logic**: Configurable restart attempts with delay for failed workers
- **Command Queue System**: File-based command queue for remote worker control
- **Embedded PowerShell Scripts**: Controller and attach helper scripts embedded as resources
### Changed
- **Architecture**: Migrated from standalone PowerShell scripts to structured C# application with MVVM pattern
- **Payload Handling**: Switched from command-line argument passing to file-based payload storage to avoid Windows command-line length limits
- **Worker Process Management**: Implemented controller-based architecture for better process lifecycle management
- **Logging System**: Enhanced logging with timestamped, prefixed log entries (CTRL, OUT, ERR)
- **SheepIt Integration**: Updated to use JAR file downloads with fallback URLs instead of executable-based approach
### Fixed
- **Command-Line Length Limits**: Resolved issues with large payloads exceeding Windows command-line argument limits by using file-based payload storage
- **Worker Process Startup**: Fixed issues with worker processes not starting properly on remote machines
- **SSH Connection Failures**: Improved SSH connection handling and error reporting
- **Log Output Capture**: Fixed missing worker output in logs by properly redirecting stdout/stderr
- **Controller Deployment**: Ensured controller script is properly deployed and executed on remote machines
- **Process Monitoring**: Improved worker process status tracking and metadata updates
### Technical Details
- **Framework**: .NET 8.0 with Avalonia UI 11.0.0
- **Architecture**: MVVM pattern with ReactiveUI
- **Remote Execution**: PowerShell scripts executed via SSH
- **Data Storage**: JSON configuration with file-based state management on remote machines
- **Logging**: File-based logging with real-time streaming support
## [Pre-1.0.0] - Historical Development
### 2025-11-21
- Fixed SheepIt worker incompatibility issues
- Resolved command-line argument size limitations
- Improved payload resolution and file-based storage
### 2025-11-21
- Fixed SSH connection issues and worker failures
- Improved error handling for remote command execution
### 2025-11-06
- Updated path structure for renders
### 2025-11-03
- Created unified SheepIt launcher script
- Added support for SheepIt worker type alongside Flamenco
### 2025-08-13
- Removed sequence numbers from job name format
### 2025-07-15
- Configured launch standard worker for Flamenco 3.7
- Updated worker paths to use `F:\software\Flamenco 3.7`
### 2025-06-03
- Changed retry function to infinite retries
### 2025-05-23
- Replaced RemoteCmd with RemoteSimplified
### 2025-05-14
- Added CMD worker error handling and retry logic
### 2025-05-13
- Implemented password prompt bypassing in scripts
### 2025-05-12
- Technical scripting and troubleshooting improvements
### 2025-05-07
- Script modifications for masterbox system
### 2025-05-06
- Switched to OptiX GPU rendering
- Identified and fixed various mistakes
### 2025-05-05
- Flamenco job status troubleshooting
### 2025-04-25
- i9-13ks setup troubleshooting
### 2025-04-23
- Network drive mapping and file copying script improvements
### 2025-04-04
- Created worker2 scripts for Flamenco
---
## Notes
- This project evolved from PowerShell-based scripts to a full desktop application
- Early development focused on Flamenco worker management
- SheepIt support was added later as a second worker type
- The migration to Avalonia UI provided a unified interface for managing both worker types

162
README.md Normal file
View File

@@ -0,0 +1,162 @@
# Unified Farm Launcher
A desktop application for managing remote render farm workers across multiple systems. Supports both **SheepIt** and **Flamenco** worker types with a unified interface for starting, stopping, and monitoring workers via SSH.
## Features
- **Multi-Worker Support**: Manage multiple remote workers from a single interface
- **Worker Types**:
- **[SheepIt](https://www.sheepit-renderfarm.com/)**: Distributed rendering for Blender projects
- **[Flamenco](https://flamenco.blender.org/)**: Blender Foundation's render farm manager
- **Remote Management**: Control workers on remote machines via SSH
- **Worker Lifecycle**: Start, stop, and attach to worker processes
- **Filtering**: Filter workers by type (All, SheepIt, Flamenco)
- **Configuration Management**: Add, edit, and delete worker configurations
- **Real-time Logging**: Attach to worker logs for real-time monitoring
## Requirements
- **.NET 8.0** or later
- **Windows** (PowerShell required on remote machines)
- **SSH access** to remote worker machines
- **Java** (Temurin 21 recommended) on remote machines for SheepIt workers
- **Flamenco worker executable** on remote machines for Flamenco workers
## Building
```bash
dotnet build
```
## Running
```bash
dotnet run
```
Or build and run the executable from the output directory.
## Configuration
Configuration is stored in `%LocalAppData%\UnifiedFarmLauncher\workers.json`. The application will create this file automatically on first run.
### Configuration Structure
```json
{
"workers": [
{
"id": 1,
"name": "worker-name",
"enabled": true,
"ssh": {
"host": "192.168.1.100",
"port": 22,
"username": "user",
"password": "password"
},
"workerTypes": {
"sheepIt": {
"username": "sheepit-username",
"renderKey": "render-key",
"gpu": "CPU"
},
"flamenco": {
"workerPath": "C:\\path\\to\\flamenco-worker",
"networkDrives": ["Z:", "Y:"],
"networkPaths": ["\\\\server\\share"]
}
}
}
],
"globalSettings": {
"sheepItJarUrls": [
"https://sheepit-renderfarm.com/media/applet/client-latest.php"
]
}
}
```
## Usage
### Adding a Worker
1. Click **Add Worker** button
2. Fill in the worker details:
- **Name**: Unique identifier for the worker
- **SSH Configuration**: Host, port, username, and password
- **Worker Type Configuration**: Configure either SheepIt or Flamenco (or both)
3. Click **Save**
### Starting a Worker
1. Select a worker from the list
2. Click **Start** button
3. The application will:
- Deploy the controller script to the remote machine
- Start the worker process
- Monitor the worker status
### Stopping a Worker
1. Select a running worker
2. Click **Stop** button
3. The worker process will be gracefully terminated
### Attaching to Worker Logs
1. Select a worker
2. Click **Attach** button
3. A terminal session will open showing real-time worker logs
4. Type `detach` to exit the session
### Filtering Workers
Use the tabs at the top to filter workers:
- **All Workers**: Shows all configured workers
- **SheepIt**: Shows only SheepIt workers
- **Flamenco**: Shows only Flamenco workers
## Architecture
### Project Structure
```
UFL/
├── Models/ # Data models (ConfigRoot, WorkerConfig, etc.)
├── Services/ # Business logic services
│ ├── ConfigService.cs # Configuration management
│ ├── SshService.cs # SSH communication
│ ├── WorkerControllerService.cs # Worker lifecycle management
│ └── AttachService.cs # Log attachment service
├── ViewModels/ # MVVM view models
├── Views/ # Avalonia UI views
└── Scripts/ # PowerShell scripts (embedded resources)
├── remote_worker_controller.ps1
└── remote_worker_attach.ps1
```
### Remote Worker Architecture
Workers run on remote machines under a controller process:
1. **Controller Script**: Deployed to `%LocalAppData%\UnifiedWorkers\controller.ps1`
2. **Worker Data**: Stored in `%LocalAppData%\UnifiedWorkers\{workerType}\{workerName}\`
- `logs\worker.log`: Worker output logs
- `state\worker-info.json`: Worker metadata and status
- `state\commands.txt`: Command queue for worker control
- `state\payload.ps1`: Worker execution script
3. **Worker Process**: The controller manages the worker process lifecycle, handles restarts, and monitors status.
## Technologies
- **Avalonia UI**: Cross-platform .NET UI framework
- **ReactiveUI**: MVVM framework
- **System.Text.Json**: JSON serialization
- **PowerShell**: Remote script execution
## License
[Specify your license here]