diff --git a/lib/render_workers/blender_worker.py b/lib/render_workers/blender_worker.py index ba292e0..73d62c8 100644 --- a/lib/render_workers/blender_worker.py +++ b/lib/render_workers/blender_worker.py @@ -61,6 +61,11 @@ class BlenderRenderWorker(BaseRenderWorker): # all frames or single cmd.extend(['-a'] if self.render_all_frames else ['-f', str(self.frame_to_render)]) + # Convert raw args from string if available + raw_args = self.get_raw_args() + if raw_args: + cmd.extend(raw_args) + return cmd def _parse_stdout(self, line): diff --git a/lib/render_workers/ffmpeg_worker.py b/lib/render_workers/ffmpeg_worker.py index 36aa102..fee773f 100644 --- a/lib/render_workers/ffmpeg_worker.py +++ b/lib/render_workers/ffmpeg_worker.py @@ -44,9 +44,9 @@ class FFMPEGRenderWorker(BaseRenderWorker): cmd.extend(['-vf', f"scale={self.args['x_resolution']}:{self.args['y_resolution']}"]) # Convert raw args from string if available - raw_args = self.args.get('raw', None) + raw_args = self.get_raw_args() if raw_args: - cmd.extend(raw_args.split(' ')) + cmd.extend(raw_args) # Close with output path cmd.append(self.output_path) diff --git a/lib/render_workers/render_worker.py b/lib/render_workers/render_worker.py index c78241b..4ee6cb6 100644 --- a/lib/render_workers/render_worker.py +++ b/lib/render_workers/render_worker.py @@ -99,18 +99,22 @@ class BaseRenderWorker(object): 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: + generated_args = self.generate_worker_subprocess() + generated_args_flags = [x for x in generated_args if x.startswith('-')] + if len(generated_args_flags) != len(set(generated_args_flags)): + msg = "Cannot generate subprocess - Multiple arg conflicts detected" + logger.error(msg) + logger.debug(f"Generated args for subprocess: {generated_args}") + raise ValueError(msg) + return generated_args + + def get_raw_args(self): + raw_args_string = self.args.get('raw', None) + raw_args = None + if raw_args_string: 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 + raw_args = shlex.split(raw_args_string) + return raw_args def generate_worker_subprocess(self): raise NotImplementedError("generate_worker_subprocess not implemented")