| name | render-blender-output |
| description | Configure render settings, compositing nodes, output formats, and execute renders via Cycles or EEVEE engines using Python API or command-line interface. Use when automating render execution for batch processing, configuring quality and performance trade-offs, setting up compositing pipelines for post-processing, generating multiple output formats from a single render, or producing final output for publication or presentation.
|
| license | MIT |
| allowed-tools | Read Write Edit Bash Grep Glob |
| metadata | {"author":"Philipp Thoss","version":"1.1","domain":"blender","complexity":"intermediate","language":"Python","tags":"blender, bpy, rendering, cycles, eevee, compositing, output"} |
Render Blender Output
Configure render engines (Cycles, EEVEE), set output parameters, build compositing node graphs, and execute renders via Python API or command-line interface. Covers render settings optimization, file format selection, and post-processing workflows.
When to Use
- Automating render execution for batch processing
- Configuring render quality and performance trade-offs
- Setting up compositing pipelines for post-processing
- Generating multiple output formats from single render
- Optimizing render settings for different hardware
- Creating command-line rendering workflows
- Producing final output for publication or presentation
Inputs
| Input | Type | Description | Example |
|---|
| Scene file | .blend file | Blender scene to render | scene.blend |
| Render engine | String | Cycles, EEVEE, or Workbench | CYCLES |
| Quality settings | Parameters | Samples, resolution, denoising | 128 samples, 1920x1080, OptiX denoiser |
| Output format | String | PNG, EXR, JPEG, TIFF | OPEN_EXR, 16-bit, ZIP compression |
| Compositing setup | Node graph | Post-processing effects | Color grading, glare, vignette |
| Output path | File path | Render destination | /renders/output_####.png |
Procedure
1. Configure Render Engine
Set render engine and basic parameters:
import bpy
def setup_cycles_engine():
"""Configure Cycles render engine."""
scene = bpy.context.scene
scene.render.engine = 'CYCLES'
scene.cycles.device = 'GPU'
scene.cycles.samples = 128
scene.cycles.use_adaptive_sampling = True
scene.cycles.adaptive_threshold = 0.01
scene.cycles.use_denoising = True
scene.cycles.denoiser = 'OPTIX'
scene.cycles.max_bounces = 12
scene.cycles.diffuse_bounces = 4
scene.cycles.glossy_bounces = 4
scene.cycles.transmission_bounces = 12
scene.cycles.volume_bounces = 0
def setup_eevee_engine():
"""Configure EEVEE render engine."""
scene = bpy.context.scene
scene.render.engine = 'BLENDER_EEVEE'
scene.eevee.taa_render_samples = 64
scene.eevee.use_bloom = True
scene.eevee.bloom_threshold = 0.8
scene.eevee.bloom_intensity = 0.1
scene.eevee.use_gtao = True
scene.eevee.gtao_distance = 0.2
scene.eevee.use_ssr = True
scene.eevee.ssr_quality = 0.5
scene.eevee.shadow_cube_size =
scene.eevee.shadow_cascade_size =
Expected: Render engine configured with appropriate quality settings
On failure: Check engine name spelling, verify GPU availability for GPU rendering
2. Set Resolution and Output Format
Configure output dimensions and file format:
def configure_output(width=1920, height=1080, file_format='PNG', color_depth='16'):
"""Set output resolution and format."""
scene = bpy.context.scene
scene.render.resolution_x = width
scene.render.resolution_y = height
scene.render.resolution_percentage = 100
scene.render.pixel_aspect_x = 1.0
scene.render.pixel_aspect_y = 1.0
scene.render.image_settings.file_format = file_format
if file_format == 'PNG':
scene.render.image_settings.color_mode = 'RGBA'
scene.render.image_settings.color_depth = color_depth
scene.render.image_settings.compression = 15
elif file_format == 'OPEN_EXR':
scene.render.image_settings.color_mode = 'RGBA'
scene.render.image_settings.color_depth = '32'
scene.render.image_settings.exr_codec = 'ZIP'
elif file_format == 'JPEG':
scene.render.image_settings.color_mode = 'RGB'
scene.render.image_settings.quality = 90
elif file_format == 'TIFF':
scene.render.image_settings.color_mode = 'RGBA'
scene.render.image_settings.color_depth = color_depth
scene.render.image_settings.tiff_codec = 'DEFLATE'
scene.frame_start = 1
scene.frame_end =
scene.frame_step =
Expected: Output format and resolution configured correctly
On failure: Check format names are valid, verify color depth compatible with format
3. Configure Compositing
Set up compositing node graph:
def setup_compositing():
"""Create compositing node setup."""
scene = bpy.context.scene
scene.use_nodes = True
tree = scene.node_tree
nodes = tree.nodes
links = tree.links
nodes.clear()
render_layers = nodes.new(type='CompositorNodeRLayers')
render_layers.location = (-400, 300)
color_correct = nodes.new(type='CompositorNodeColorCorrection')
color_correct.location = (0, 300)
color_correct.master_saturation = 1.1
color_correct.master_gain = 1.05
glare = nodes.new(type='CompositorNodeGlare')
glare.location = (200, 200)
glare.glare_type = 'FOG_GLOW'
glare.threshold = 0.9
glare.size = 8
lens_distortion = nodes.new(type='CompositorNodeLensdist')
lens_distortion.location = (200, 0)
lens_distortion.inputs['Dispersion'].default_value = 0.0
lens_distortion.inputs['Distortion'].default_value = -0.02
mix1 = nodes.new(type='CompositorNodeMixRGB')
mix1.location = (400, )
mix1.blend_type =
mix1.inputs[].default_value =
composite = nodes.new(=)
composite.location = (, )
viewer = nodes.new(=)
viewer.location = (, )
links.new(render_layers.outputs[], color_correct.inputs[])
links.new(color_correct.outputs[], mix1.inputs[])
links.new(color_correct.outputs[], glare.inputs[])
links.new(glare.outputs[], mix1.inputs[])
links.new(mix1.outputs[], composite.inputs[])
links.new(mix1.outputs[], viewer.inputs[])
Expected: Compositing nodes configured with post-processing effects
On failure: Check node type names, verify inputs exist, ensure link connections valid
4. Set Output File Paths
Configure output file naming with frame numbers:
import os
from pathlib import Path
def set_output_path(base_dir, project_name, use_frame_number=True):
"""Configure output file path."""
scene = bpy.context.scene
output_dir = Path(base_dir) / project_name / "renders"
output_dir.mkdir(parents=True, exist_ok=True)
if use_frame_number:
filename = f"{project_name}_####"
else:
filename = project_name
scene.render.filepath = str(output_dir / filename)
Expected: Output directory created, filepath configured with frame numbering
On failure: Check directory permissions, verify path syntax for OS
5. Configure View Layers and Passes
Set up render passes for compositing:
def configure_view_layers():
"""Enable render passes."""
scene = bpy.context.scene
view_layer = scene.view_layers['ViewLayer']
view_layer.use_pass_combined = True
view_layer.use_pass_z = True
view_layer.use_pass_mist = False
view_layer.use_pass_normal = True
view_layer.use_pass_vector = True
view_layer.use_pass_ambient_occlusion = True
cycles = view_layer.cycles
cycles.use_pass_diffuse_direct = True
cycles.use_pass_diffuse_indirect = True
cycles.use_pass_glossy_direct = True
cycles.use_pass_glossy_indirect = True
cycles.use_pass_emission = True
cycles.use_pass_environment = True
cycles.use_pass_crypto_object = True
cycles.use_pass_crypto_material = True
cycles.use_pass_crypto_asset = True
Expected: Render passes enabled for advanced compositing
On failure: Check if passes available for current engine, verify view layer name
6. Execute Render
Render via Python API or command line:
def render_still():
"""Render current frame."""
bpy.ops.render.render(write_still=True)
def render_animation():
"""Render animation frame range."""
bpy.ops.render.render(animation=True)
def render_frame(frame_number):
"""Render specific frame."""
scene = bpy.context.scene
scene.frame_set(frame_number)
bpy.ops.render.render(write_still=True)
Expected: Render executes, output files written to specified location
On failure: Check scene setup, verify scene.camera points at an active camera — a camera object merely existing in the scene does NOT make it the render camera — ensure output directory writable
7. Batch Render Multiple Cameras
Render from multiple camera angles:
def render_all_cameras(output_dir):
"""Render scene from all cameras."""
scene = bpy.context.scene
original_camera = scene.camera
cameras = [obj for obj in bpy.data.objects if obj.type == 'CAMERA']
for camera in cameras:
scene.camera = camera
camera_name = camera.name.replace(' ', '_')
scene.render.filepath = os.path.join(output_dir, f"{camera_name}_####")
bpy.ops.render.render(write_still=True)
print(f"Rendered from camera: {camera.name}")
scene.camera = original_camera
Expected: Renders generated for each camera in scene
On failure: Check cameras exist, verify each camera positioned correctly
8. Optimize Render Performance
Configure performance settings:
def optimize_performance():
"""Optimize render settings for speed."""
scene = bpy.context.scene
if scene.render.engine == 'CYCLES':
if scene.cycles.device == 'GPU':
scene.render.tile_x = 256
scene.render.tile_y = 256
else:
scene.render.tile_x = 32
scene.render.tile_y = 32
scene.cycles.use_adaptive_sampling = True
scene.render.use_persistent_data = True
scene.cycles.max_bounces = 4
scene.cycles.diffuse_bounces = 2
scene.cycles.glossy_bounces = 2
scene.cycles.use_progressive_refine = True
elif scene.render.engine == 'BLENDER_EEVEE':
scene.render.use_simplify = True
scene.render.simplify_subdivision = 2
scene.eevee.taa_render_samples = 32
Expected: Render settings optimized for target hardware
On failure: Test with lower quality first, monitor memory usage
Validation Checklist
Common Pitfalls
- Insufficient samples: Low sample counts cause noise in Cycles renders
- Wrong color space: Check color management settings for correct display
- Memory overflow: Large resolutions or complex scenes may exceed RAM
- GPU out of memory: Reduce tile size or switch to CPU for large scenes
- Background mode output: In background mode, must use --render-output flag or set filepath
- Compositing disabled: Enable
scene.use_nodes to use compositing
Related Skills