# Baking smoke on headless machine

I have a linux vps that has some spare resources left from main activity. I can not get the GUI working, but I was thinking if there is a way to use it for baking with python script.

I see that there is an operator:

bpy.ops.ptcache.bake(bake=True)


But what is the right context for it?

Also if anyone has ideas to get the GUI working under Ubuntu VPS, that would be much appreciated.

Baking smoke is very similar to baking fluid, so I will quote brecht's answer:

It's a bit more complicated than it could be because fluid simulating baking is only exposed as an operator. That means it expects an active object in the context, which is usually provided by the user interface that is not available in background mode.

However, it is possible to override context manually, see the api docs.

So for a smoke simulation:

import bpy

for scene in bpy.data.scenes:
for object in scene.objects:
for modifier in object.modifiers:
if modifier.type == 'SMOKE':
if modifier.smoke_type == 'DOMAIN':
override = {'scene': scene, 'active_object': object, 'point_cache': modifier.domain_settings.point_cache}
bpy.ops.ptcache.bake(override, bake=True)
break


This will bake the selected cache for all domain objects in the file.

You can then run this python script in blender with

blender --background /path/to/file.blend --python /path/to/script.py


Or the short way:

blender -b /path/to/file.blend -P /path/to/script.py

• Thanks a bunch, it works. I tried to fiddle with Brecht's script too, but got the override part wrong. – user2801402 Nov 19 '13 at 5:03
• At least on recent blenders, it seems that you need to explicitly specify an external cache for blender to work with, otherwise headless baking won’t work (although it would create a blendcache_* folder automatically if run with a gui, I think). I might have misinterpreted something here though. – Jonas Schäfer Jul 14 '14 at 18:47
• You may add bpy.ops.ptcache.free_bake(override) just before the bake. I came into a case where the bake wouldn't do anything (.blend copied from local computer without the cache) – Romuald Brunet May 11 '19 at 10:54