Package: blenderless
BlenderlessBlenderless is the Python package for easy headless rendering using Blender.While Blender is a fantastic open-source 3D modeling software which can be run from the command line, there are still some inconveniences when rendering from a headless server:the blender python interfacebpycan only be imported a single time,and, there is no framebuffer for blender to write to.Furthermore, thebpyinterface has a steep learning curve.This package is meant to overcome these issues in a easy-to-use manner. It does so by first defining the entire scene and only interacting with thebpyat render time in a separate thread using a virtual framebuffer.Example use cases:Generating thumbnails or previews from 3D files.Batch generation of views from 3D files.Automatic generation of compositions of a set of meshes into a single sceneConverting meshes and labels into .blend filesExport GIF animations of a camera looping around an object.How to use thisResources:You can find basic examples in theunit tests.Notebook examples(point clouds, mesh face colors, ...)Python moduleThe blenderless package can be loaded as a module. The main functionality is exposed using the Blenderless class. There is support for Jupyter Notebooks as the images/gifs will be shown as IPython Image objects automatically.fromblenderlessimportBlenderless# Set the following property if you want to export the generated blender workspace.Blenderless.export_blend_path='export.blend'# Render single STL filepath_to_foo_png=Blenderless.render('meshpath.stl',dest_path=None,azimuth=45,elevation=30,theta=0)# Render from config, note that objects and cameras are defined within the YAML config.path_to_foo_png=Blenderless.render_from_config('config.yml',dest_path=None)# Render GIF animation, note that azimuth is defined by number of frames.path_to_foo_gif=Blenderless.gif(cls,mesh_path,dest_path=None,elevation=30,theta=0,frames=60,duration=2)Command-line interfaceRender geometry file to image$blenderlessimagefoo.stloutput.png
$blenderless--export-blend-pathexport.blendimagefoo.stloutput.png# If .blend needs to be exportedRender geometry to gif with a camera looping around an object.$blenderlessgiffoo.stloutput.gifThe following command rendera a YAML config to an image$blenderlessconfigscene.ymloutput.pngYAML configuration filesMore advanced scenes can be defined using a YAML configuration file. In this file objects, cameras, labels, materials and presets can be defined.Example:scene:# See options in blenderless.scene.Scenepreset_path:../../preset.blendcameras:# See options in blenderless.camera-_target_:blenderless.camera.SphericalCoordinateCamera# Instantiate one camera with following argumentsazimuth:45elevation:30theta:0distance:1objects:# See blenderless.geometry and blenderless.material-_target_:blenderless.geometry.Mesh# Refers to classes within the blenderless packagemesh_path:../../mesh/3DBenchy.stl# Constructor argumentmaterial:# Constructor argument pointing towards another class within the blenderless package_target_:blenderless.material.MaterialFromNamematerial_name:test_material# Link to material name known in present.blend-_target_:blenderless.geometry.BlenderLabellabel_value:'42'Export blender fileInstallsudo apt-get install xvfb
pipx install poetry==1.1.5
make .venvTestingmaketest