mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Add custom args to GUI and add arg conflict validation to workers
This commit is contained in:
@@ -33,6 +33,7 @@ class RenderJob:
|
|||||||
|
|
||||||
self.worker = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
self.worker = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
||||||
self.worker.log_path = os.path.join(os.path.dirname(input_path), self.name + '.log')
|
self.worker.log_path = os.path.join(os.path.dirname(input_path), self.name + '.log')
|
||||||
|
self.worker.validate()
|
||||||
|
|
||||||
self.file_hash = None
|
self.file_hash = None
|
||||||
threading.Thread(target=self.__get_file_hash).start() # get file hash on bg thread
|
threading.Thread(target=self.__get_file_hash).start() # get file hash on bg thread
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class AERenderWorker(BaseRenderWorker):
|
|||||||
logging.error(f'Failed to get {cls.renderer} version: {e}')
|
logging.error(f'Failed to get {cls.renderer} version: {e}')
|
||||||
return version
|
return version
|
||||||
|
|
||||||
def _generate_subprocess(self):
|
def generate_worker_subprocess(self):
|
||||||
|
|
||||||
if os.path.exists('nexrender-cli-macos'):
|
if os.path.exists('nexrender-cli-macos'):
|
||||||
logging.info('nexrender found')
|
logging.info('nexrender found')
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ class BlenderRenderWorker(BaseRenderWorker):
|
|||||||
self.engine = self.args.get('engine', 'BLENDER_EEVEE').upper()
|
self.engine = self.args.get('engine', 'BLENDER_EEVEE').upper()
|
||||||
self.export_format = self.args.get('export_format', None) or 'JPEG'
|
self.export_format = self.args.get('export_format', None) or 'JPEG'
|
||||||
self.camera = self.args.get('camera', None)
|
self.camera = self.args.get('camera', None)
|
||||||
self.render_all_frames = self.args.get('render_all_frames', False)
|
self.render_all_frames = self.args.get('render_all_frames', False) or \
|
||||||
|
'-a' in (self.args.get('raw', None) or "").split(' ')
|
||||||
self.frame_to_render = 0
|
self.frame_to_render = 0
|
||||||
|
|
||||||
# Stats
|
# Stats
|
||||||
@@ -45,7 +46,7 @@ class BlenderRenderWorker(BaseRenderWorker):
|
|||||||
logging.error(f'Failed to get {cls.renderer} version: {e}')
|
logging.error(f'Failed to get {cls.renderer} version: {e}')
|
||||||
return version
|
return version
|
||||||
|
|
||||||
def _generate_subprocess(self):
|
def generate_worker_subprocess(self):
|
||||||
|
|
||||||
cmd = [self.renderer_path()]
|
cmd = [self.renderer_path()]
|
||||||
if self.args.get('background', True): # optionally run render not in background
|
if self.args.get('background', True): # optionally run render not in background
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class FFMPEGRenderWorker(BaseRenderWorker):
|
|||||||
logger.error("Failed to get FFMPEG version: {}".format(e))
|
logger.error("Failed to get FFMPEG version: {}".format(e))
|
||||||
return version
|
return version
|
||||||
|
|
||||||
def _generate_subprocess(self):
|
def generate_worker_subprocess(self):
|
||||||
|
|
||||||
cmd = [self.renderer_path(), '-y', '-stats', '-i', self.input_path]
|
cmd = [self.renderer_path(), '-y', '-stats', '-i', self.input_path]
|
||||||
|
|
||||||
|
|||||||
@@ -92,8 +92,28 @@ class BaseRenderWorker(object):
|
|||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def _generate_subprocess(self):
|
def validate(self):
|
||||||
raise NotImplementedError("_generate_subprocess not implemented")
|
if not os.path.exists(self.input_path):
|
||||||
|
raise FileNotFoundError(f"Cannot find input path: {self.input_path}")
|
||||||
|
self.generate_subprocess()
|
||||||
|
|
||||||
|
def generate_subprocess(self):
|
||||||
|
# Convert raw args from string if available and catch conflicts
|
||||||
|
cmd = self.generate_worker_subprocess()
|
||||||
|
raw_args = self.args.get('raw', None)
|
||||||
|
if raw_args:
|
||||||
|
import shlex
|
||||||
|
args_split = shlex.split(raw_args)
|
||||||
|
flags = [x for x in args_split if x.startswith('-')]
|
||||||
|
conflict = any(element in flags for element in args_split)
|
||||||
|
if conflict:
|
||||||
|
raise ValueError("Custom args conflicts set parameters")
|
||||||
|
else:
|
||||||
|
cmd.extend(args_split)
|
||||||
|
return cmd
|
||||||
|
|
||||||
|
def generate_worker_subprocess(self):
|
||||||
|
raise NotImplementedError("generate_worker_subprocess not implemented")
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from lib.utilities.server_helper import post_job_to_server
|
|||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
prefs_name = 'config/.scheduler_prefs'
|
prefs_name = 'config/.scheduler_prefs'
|
||||||
label_width = 7
|
label_width = 9
|
||||||
header_padding = 6
|
header_padding = 6
|
||||||
server_setup_timeout = 5
|
server_setup_timeout = 5
|
||||||
|
|
||||||
@@ -137,6 +137,13 @@ class ScheduleJob(Frame):
|
|||||||
self.blender_multiple_cameras = BooleanVar(value=False)
|
self.blender_multiple_cameras = BooleanVar(value=False)
|
||||||
self.blender_cameras_list = None
|
self.blender_cameras_list = None
|
||||||
|
|
||||||
|
# custom args frame
|
||||||
|
custom_args_frame = Frame(self)
|
||||||
|
custom_args_frame.pack(fill=X)
|
||||||
|
Label(custom_args_frame, text="Custom Args", width=label_width).pack(side=LEFT, padx=5, pady=5)
|
||||||
|
self.custom_args_entry = Entry(custom_args_frame)
|
||||||
|
self.custom_args_entry.pack(side=LEFT, padx=5, expand=True, fill=X)
|
||||||
|
|
||||||
# Submit Button
|
# Submit Button
|
||||||
self.submit_frame = None
|
self.submit_frame = None
|
||||||
|
|
||||||
@@ -311,7 +318,7 @@ class ScheduleJob(Frame):
|
|||||||
'renderer': renderer,
|
'renderer': renderer,
|
||||||
'client': client,
|
'client': client,
|
||||||
'output_path': os.path.join(os.path.dirname(self.chosen_file), self.output_entry.get()),
|
'output_path': os.path.join(os.path.dirname(self.chosen_file), self.output_entry.get()),
|
||||||
'args': {},
|
'args': {'raw': self.custom_args_entry.get()},
|
||||||
'name': None}
|
'name': None}
|
||||||
job_list = []
|
job_list = []
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user