diff --git a/packages/flamenco-worker-python/flamenco_worker/merge-exr.blend b/packages/flamenco-worker-python/flamenco_worker/merge-exr.blend
new file mode 100644
index 0000000000000000000000000000000000000000..fc4dbb90713bc25107e5351c20f69fe852ff1c54
Binary files /dev/null and b/packages/flamenco-worker-python/flamenco_worker/merge-exr.blend differ
diff --git a/packages/flamenco-worker-python/flamenco_worker/runner.py b/packages/flamenco-worker-python/flamenco_worker/runner.py
index 5c5bd549343894d09f252ec66f40953f3400f880..526bd96b9bd8bef5bd10ec3324d36bf81c179f5d 100644
--- a/packages/flamenco-worker-python/flamenco_worker/runner.py
+++ b/packages/flamenco-worker-python/flamenco_worker/runner.py
@@ -201,6 +201,25 @@ class AbstractCommand(metaclass=abc.ABCMeta):
 
         return None
 
+    def _setting(self, settings: dict, key: str, is_required: bool, valtype=str) -> (
+            typing.Any, typing.Optional[str]):
+        """Parses a setting, returns either (value, None) or (None, errormsg)"""
+
+        try:
+            value = settings[key]
+        except KeyError:
+            if is_required:
+                return None, 'Missing "%s"' % key
+            return None, None
+
+        if value is None and not is_required:
+            return None, None
+
+        if not isinstance(value, valtype):
+            return None, '"%s" must be a %s, not a %s' % (key, valtype, type(value))
+
+        return value, None
+
 
 def command_executor(cmdname):
     """Class decorator, registers a command executor."""
@@ -414,25 +433,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
         self.re_status = re.compile(r'\| (?P<status>[^\|]+)\s*$')
         self.re_path_not_found = re.compile(r"Warning: Path '.*' not found")
 
-    def _setting(self, settings: dict, key: str, is_required: bool) -> (
-            typing.Any, typing.Optional[str]):
-        """Parses a setting, returns either (value, None) or (None, errormsg)"""
-
-        try:
-            value = settings[key]
-        except KeyError:
-            if is_required:
-                return None, 'Missing "%s"' % key
-            return None, None
-
-        if value is None and not is_required:
-            return None, None
-
-        if not isinstance(value, str):
-            return None, '"%s" must be a string, not a %s' % (key, type(value))
-
-        return value, None
-
     def validate(self, settings: dict):
         from pathlib import Path
         import shlex
@@ -545,3 +545,46 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
 
         # Not a render progress line; just log it for now.
         return '> %s' % line
+
+
+@command_executor('merge-exr')
+class MergeExrCommand(AbstractSubprocessCommand):
+    def validate(self, settings: dict):
+        from pathlib import Path
+        import shlex
+
+        blender_cmd, err = self._setting(settings, 'blender_cmd', True)
+        if err:
+            return err
+        cmd = shlex.split(blender_cmd)
+        if not Path(cmd[0]).exists():
+            return 'blender_cmd %r does not exist' % cmd[0]
+        settings['blender_cmd'] = cmd
+
+        _, err = self._setting(settings, 'input1', True, str)
+        if err: return err
+        _, err = self._setting(settings, 'input2', True, str)
+        if err: return err
+        _, err = self._setting(settings, 'weight1', True, int)
+        if err: return err
+        _, err = self._setting(settings, 'weight2', True, int)
+        if err: return err
+
+    async def execute(self, settings: dict):
+        import shlex
+        await self.subprocess(shlex.split(settings['cmd']))
+
+        cmd = settings['blender_cmd'][:]
+        cmd += [
+            '--factory-startup',
+            '--enable-autoexec',
+            '-noaudio',
+            '--background',
+        ]
+
+        # TODO: set up node properties and render settings.
+
+        await self.worker.register_task_update(activity='Starting Blender')
+        await self.subprocess(cmd)
+
+        # TODO: move output files into the correct spot.
diff --git a/packages/flamenco-worker-python/setup.py b/packages/flamenco-worker-python/setup.py
index d3f6e6470e632f4b61694366feacdce2b10eff45..8b401042bb600c7a6217bac50ac1bd230c3d6f07 100755
--- a/packages/flamenco-worker-python/setup.py
+++ b/packages/flamenco-worker-python/setup.py
@@ -16,6 +16,7 @@ if __name__ == '__main__':
             'Programming Language :: Python',
             'Programming Language :: Python :: 3.5',
         ],
+        package_data={'flamenco_worker': ['merge-exr.blend']},
         install_requires=[
             'attrs >=16.3.0',
             'requests>=2.12.4',
@@ -23,4 +24,5 @@ if __name__ == '__main__':
         entry_points={'console_scripts': [
             'flamenco-worker = flamenco_worker.cli:main',
         ]},
+        zip_safe=False,  # due to the bundled merge-exr.blend file.
     )