Files
UFL/README.md

163 lines
4.7 KiB
Markdown
Raw Permalink Normal View History

2025-12-17 15:40:47 -07:00
# 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]