* Initial commit of job submission cli tool, with minor fixes in API code
* Refactored and further decoupled server / client code
* Clean up ServerProxy to not use hardcoded loopback addresses
* Add basic GPU info reporting to UI
* Update GPU display to showcase multiple GPUs, if available
* Add fallback for Windows for fetching GPU info
* Improve Windows GPU lookup. Add GPUtil to requirements.txt
* Clean up GPU and CPU naming in UI
* Update Linux GPU fetching
* Update misc_helper.py
Fix getting GPU names on Linux
* Update .gitignore
* Add api_version to status api and server_proxy.py
* Add api_version to Zeroconf and filter out incompatible versions when finding available servers
* Filter incompatible versions from the UI
* Add subprocess.CREATE_NO_WINDOW to blender_engine.py
* Convert ffmpeg_engine.py to use CREATE_NO_WINDOW
* Cleanup Blender implementation
* Cleanup subprocesses in base_worker.py
* Cleanup subprocesses in base_engine.py
* Fix main.spec for Windows (optimize=2 broke it)
* Fix processes not ending when stopped
* Fix error when removing a job
* Better error handling
* Refactored killprocess code and fixed windows support
* Improved error handling
* Add try to code that deletes project files
* Wait for the thread to finish after killing the process
* Don't try to stop process multiple times
* Misc cleanup
* Parent worker now creates subjob on local host and waits for it
* Improve wait_for_subjobs logic
* Fix setting end_time for base_worker
* API cleanup
* Code refactoring
* Cleanup
* Add main.spec
* Fix issue where fetching supported extensions would crash with no default installation
* Engines return version as 'error' if cannot determine version
* EngineManager will now filter out corrupted engine installs by default
* Zeroconf logging improvements
* Ignore RuntimeErrors in background threads - Prevents issues during shutdown
* Migrate start up code from api_server.py to init.py
* Add error handlers to the API server to handle detached instances
* Integrate RenderQueue eval loop into RenderQueue object
* Silently catch RuntimeErrors on evaluate_queue
* Stop background queue updates in prepare_for_shutdown
* Add a watchdog to base_worker
* Logging cleanup
* Prevent multiple watchdogs from running if render process restarts
* Add process timeout parameter to Config
* Refactor
* Add error handling to process output parsing
* Fix issue where start_time was not getting set consistently