# /// script # dependencies = [ # "bpy==4.2.0", # "marimo", # "numpy==2.1.2", # ] # /// import marimo __generated_with = "0.9.9" app = marimo.App(width="medium") @app.cell def __(): import numpy import bpy import time import random import marimo as mo import sys import tempfile print(sys.version) return bpy, mo, numpy, random, sys, tempfile, time @app.cell def __(mo): w = mo.ui.file(kind="area") w return (w,) @app.cell def __(tempfile, w): file_content = w.contents() # Create a temporary file to save the content if file_content: with tempfile.NamedTemporaryFile(suffix=".blend", delete=False) as temp_file: temp_file.write(file_content) temp_file_path = temp_file.name return file_content, temp_file, temp_file_path @app.cell def __(mo): dropdown = mo.ui.dropdown( options={ "workbench": "BLENDER_WORKBENCH", "eevee": "BLENDER_EEVEE_NEXT", "cycles": "CYCLES"}, value="workbench", label="choose renderer", ) dropdown return (dropdown,) @app.cell def __(bpy, dropdown, file_content, mo, temp_file_path, time): start_time = time.time() # Ensure Cycles is selected as the render engine for all view layers for layer in bpy.context.scene.view_layers: layer.cycles.use_denoising = False # Set render samples to 10 for all view layers and the scene bpy.context.scene.cycles.samples = 10 # Ensure to sync all settings bpy.context.view_layer.update() # Load the temporary .blend file into Blender if file_content: bpy.ops.wm.open_mainfile(filepath=temp_file_path) # Set render engine and resolution bpy.context.scene.render.engine = dropdown.value bpy.context.scene.render.resolution_x = 500 bpy.context.scene.render.resolution_y = 400 bpy.context.scene.cycles.samples = 5 # Render and save the image without any rotation bpy.ops.render.render() bpy.data.images["Render Result"].save_render(filepath="test.png") end_time = time.time() print(f"Script execution time: {end_time - start_time:.4f} seconds") mo.image(src="test.png") return end_time, layer, start_time @app.cell def __(): return if __name__ == "__main__": app.run()