From 49cd08494b5f870fbb690aaa7e5d250a126df810 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Tue, 2 Jun 2026 23:08:33 +0200 Subject: [PATCH] fix(render): cache settings at batch start so they apply consistently to all scenes --- operators.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/operators.py b/operators.py index 3687d5b..691b37c 100644 --- a/operators.py +++ b/operators.py @@ -82,7 +82,7 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator): bpy.app.handlers.render_cancel.remove(on_render_cancel) def _render_scene(self, context, scene_name): - settings = context.scene.scene_renderer + settings = SCENERENDERER_OT_render_all._cached_settings scene = bpy.data.scenes.get(scene_name) if not scene: print(f" [SKIP] Scene not found: {scene_name}") @@ -110,26 +110,26 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator): r.film_transparent = True c = scene.cycles - c.samples = 1 if settings.test_mode else settings.samples + c.samples = 1 if settings["test_mode"] else settings["samples"] - if settings.exposure != 0.0: - scene.view_settings.exposure = settings.exposure - scene.cycles.film_exposure = 2.0 ** settings.exposure - if settings.look != 'None': - scene.view_settings.look = settings.look + if settings["exposure"] != 0.0: + scene.view_settings.exposure = settings["exposure"] + scene.cycles.film_exposure = 2.0 ** settings["exposure"] + if settings["look"] != 'None': + scene.view_settings.look = settings["look"] - if settings.test_mode: + if settings["test_mode"]: r.resolution_percentage = 10 render_dir = bpy.path.abspath("//renders") - if settings.test_mode: + if settings["test_mode"]: render_dir = os.path.join(render_dir, "test") os.makedirs(render_dir, exist_ok=True) safe_name = scene.name.replace("/", "_").replace("\\", "_").replace(":", "_").strip() output_path = os.path.join(render_dir, safe_name) - if settings.skip_existing and os.path.exists(output_path + ".png"): + if settings["skip_existing"] and os.path.exists(output_path + ".png"): print(f" [SKIP] Already exists: {safe_name}.png") SCENERENDERER_OT_render_all._is_rendering = False return @@ -161,6 +161,17 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator): def execute(self, context): settings = context.scene.scene_renderer + + # Cache the settings exactly as they were when the user pressed "Render All Scenes". + # This prevents the settings from reverting to defaults when Blender switches the active scene context. + SCENERENDERER_OT_render_all._cached_settings = { + "test_mode": settings.test_mode, + "skip_existing": settings.skip_existing, + "use_cpu": settings.use_cpu, + "samples": settings.samples, + "exposure": settings.exposure, + "look": settings.look, + } if on_render_complete not in bpy.app.handlers.render_complete: bpy.app.handlers.render_complete.append(on_render_complete)