* 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
* Add a frame complete notification to BaseWorker and distributed_job_manager.py
* Add API to download individual files to API server and ServerProxy
* Rename subjob notification API and add download_missing_frames_from_subjob
* Subjobs will now notify parent when a frame is complete
* Fix missed rename
* Add some misc logging
* Better error handling
* Fix frame download file path issue
* Download missing frames at job completion and misc cleanup
* Misc cleanup
* Code cleanup
* Add script to get GPU information from Blender
* Change run_python_script to allow it to run without a project file
* Simplify run_python_script code
* Fix mistake
* Add system_info to engine classes and api_server. /api/renderer_info now supports standard and full response modes.
* Get full renderer_info response for add job UI
* Enable setting specific Blender render_device using args
* Add Blender render device options to UI
* Streamline fetching renderer_info from API - use threading for performance improvements
* Use concurrent.futures instead of Threading
* Fix timeout issue with server proxy
* Minor fixes to code that handles proxy server online / offline status
* Force start in render queue only starts NOT_STARTED and SCHEDULED jobs
* Refactor adding jobs / subjobs
* Remove dead code
* Fixed issue with bulk job submission
* Cancel job now cancels all subjobs
* Misc fixes
* JSON now returns job hostname
* Add hostname as optional column in DB
* Misc fixes
* Error handling for removing zip file after download
* Clean up imports
* Fixed issue where worker child information would not be saved
* Add benchmark.py
* Add cpu / disk benchmark APIs
* Add cpu_benchmark method to distributed_job_manager.py
* Do a better job of storing hostnames =
* Remove hostname from Zeroconf cache if server goes offline
* Add cpu / disk benchmark APIs
* Add cpu_benchmark method to distributed_job_manager.py
* Do a better job of storing hostnames =
* Remove hostname from Zeroconf cache if server goes offline
* Wrap main code in try finally block to always stop zeroconf
* Add missing import