* 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
* Misc fixes
* Misc cleanup
* Add all_versions to blender_downloader.py
* More cleanup
* Fix issue with status not reporting engine info
* Misc fixes
* Misc cleanup
* Add all_versions to blender_downloader.py
* More cleanup
* Fix issue with status not reporting engine info
* Remove legacy client
* Misc cleanup
* Add message box after submission success / fail
* Use a new is_localhost method to handle localhost not including '.local'
* Code cleanup
* Fix issue where engine browser would think we're downloading forever
* Add message box after submission success / fail
* Use a new is_localhost method to handle localhost not including '.local'
* Code cleanup
* Fix issue where engine browser would think we're downloading forever
* Add pubsub messages to serverproxy_manager.py
* Add resolution, fps and renderer versions to add_job.py
* Add cameras to add_job.py
* Add message box after submission success / fail
* Use a new is_localhost method to handle localhost not including '.local'
* Code cleanup
* Fix issue where engine browser would think we're downloading forever
* Add message box after submission success / fail
* Code cleanup
* Add cameras to add_job.py
* Add dynamic engine options and output format
* Move UI work out of BG threads and add engine presubmission tasks
* Submit dynamic args when creating a new job
* Hide groups and show messagebox after submission
* Choose file when pressing New Job in main window now