import pathlib import sys import bpy def main(output_path): bpy.ops.wm.read_factory_settings(use_empty=True) scene = bpy.context.scene scene.name = "CompositorScene" tree = bpy.data.node_groups.new("WebCompositorTree", "CompositorNodeTree") scene.compositing_node_group = tree tree.interface.new_socket(name="Image", in_out="OUTPUT", socket_type="NodeSocketColor") color = tree.nodes.new("CompositorNodeRGB") color.name = "WebConstantColor" color.outputs["Color"].default_value = (0.125, 0.25, 0.5, 0.75) viewer = tree.nodes.new("CompositorNodeViewer") viewer.name = "WebViewer" composite = tree.nodes.new("NodeGroupOutput") composite.name = "WebComposite" glare = tree.nodes.new("CompositorNodeGlare") glare.name = "PreservedUnsupportedGlare" tree.links.new(color.outputs["Color"], viewer.inputs["Image"]) tree.links.new(color.outputs["Color"], composite.inputs["Image"]) path = pathlib.Path(output_path).resolve() path.parent.mkdir(parents=True, exist_ok=True) bpy.ops.wm.save_as_mainfile(filepath=str(path), compress=False) print(f"compositor-fixture-generated path={path} nodes={len(tree.nodes)} links={len(tree.links)}") if __name__ == "__main__": arguments = sys.argv[sys.argv.index("--") + 1:] if len(arguments) != 1: raise SystemExit("usage: blender -b --python generate-compositor-fixture.py -- output.blend") main(arguments[0])