# Is there some way I can update the viewer node during background rendering to output the correct results?

I'm rendering several images from one blender file and I would like to manipulate the pixels of the render output directly. I implemented the workaround from https://blender.stackexchange.com/a/71264/245. Here the pixel values get extracted from the viewer node.

My problem is, that the viewer node does not get updated when running blender with the -b "background" command line argument.

Considering the following code to print the max value and the size of the viewer node pixels:

import bpy
import numpy as np
from mathutils import *
from math import *

bpy.context.scene.render.use_compositing = True
bpy.context.scene.use_nodes = True
tree = bpy.context.scene.node_tree
for n in tree.nodes:
tree.nodes.remove(n)
rl = tree.nodes.new('CompositorNodeRLayers')
vl = tree.nodes.new('CompositorNodeViewer')
vl.use_alpha = True

bpy.ops.render.render()
rl.update()
vl.update()
print(max(np.array(bpy.data.images['Viewer Node'].pixels[:][::4])))
print(len(np.array(bpy.data.images['Viewer Node'].pixels[:][::4])))


when running in background it will print

0 #print(max(np.array(bpy.data.images['Viewer Node'].pixels[:][::4])))
65536 #print(len(np.array(bpy.data.images['Viewer Node'].pixels[:][::4])))