# 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]