163 lines
4.7 KiB
Markdown
163 lines
4.7 KiB
Markdown
|
|
# 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]
|
||
|
|
|