# Recipe format

> Human Generator for Blender documentation. Web version: https://humgen3d.com/docs/process/recipe-format

> **Early access**
> The process system is new and only in the early access version of Human Generator. It replaces the process tab of version 4.0, which is deprecated. Details can still change; if something doesn't work or looks wrong, [let us know](https://humgen3d.com/feedback/process).

A [recipe](https://humgen3d.com/docs/process/recipes) is a JSON file with the state of the whole Process tab. The sections and options are the same as those of [ExportSettings](https://humgen3d.com/docs/api/exportsettings) in Python, with the same names and values. Every option can be left out: it then gets the default in the tables below, so a recipe only needs what it changes. Options the add-on doesn't know are ignored, and so are files that can't be read: those are left out of the recipe list.

> **Where recipes live**
> Your recipes are in the `process_templates` folder of your content folder, in a subfolder per group; the subfolder is the group name in the list, and recipes directly in `process_templates` are listed under *Saved*.

```json
{
    "version": 2,
    "output": {"format": "fbx", "naming": "plain", "textures": "folder"},
    "lods": [{"body": "original", "clothing": "high", "eyes": "high", "teeth": "medium", "haircards": "high"}],
    "skeleton": {"names": "humanoid", "rest_pose": "t_pose"},
    "textures": {"workflow": "metallic_smoothness", "resolution": {"body": 4096}}
}
```

## Top level

| Key | Default | Values |
| --- | --- | --- |
| `version` | `2` | The version of the format. Recipes of the process tab of 4.0 (no version) are converted when they are loaded. |
| `label` | | The name in the recipe list, only read for the built-in recipes. Yours are listed by file name. |
| `output` | | See [output](https://humgen3d.com/docs/process/recipe-format#output) |
| `lods` | one level | A list with one entry per LOD level, the first is the full character. See [lods](https://humgen3d.com/docs/process/recipe-format#lods) |
| `meshes`, `haircards`, `skeleton`, `shape_keys`, `textures`, `scripts` | | One object per section of the tab, see below |

## output

See [Output](https://humgen3d.com/docs/process/output).

| Key | Default | Values |
| --- | --- | --- |
| `format` | `"fbx"` | `"in_file"`, `"fbx"`, `"glb"`, `"gltf"`, `"obj"`, `"abc"` |
| `folder` | `""` | Where the files go. Empty for `export_results` in the content folder, `//` at the start for a folder relative to the blend file |
| `name` | `"{name}"` | Name of the files and prefix of the datablocks, `{name}` is the name of the human |
| `naming` | `"plain"` | `"plain"`, `"unreal"`, `"custom"` |
| `naming_templates` | | For `"custom"` naming: `rig`, `mesh`, `material` and `texture`, with the tokens `{name}`, `{part}` and `{pass}`. Defaults `"{name}"`, `"{name}_{part}"`, `"{name}_{part}"`, `"{name}_{part}_{pass}"` |
| `textures` | `"folder"` | `"folder"`, `"next_to_file"`, `"embedded"` |
| `keep_copy` | `false` | Keep the processed copy in the file after writing it |
| `fbx` | | `axis_forward` (`"-Z"`), `axis_up` (`"Y"`), `primary_bone_axis` (`"Y"`), `secondary_bone_axis` (`"X"`), each one of `"X"`, `"Y"`, `"Z"`, `"-X"`, `"-Y"`, `"-Z"`; `leaf_bones` (`false`), `custom_properties` (`false`), `triangulate` (`false`), `smoothing` (`"FACE"`, `"EDGE"` or `"OFF"`) |
| `gltf` | | `tangents` (`false`), `image_format` (`"AUTO"` or `"JPEG"`), `draco` (`false`) |

## lods

See [Optimize Meshes](https://humgen3d.com/docs/process/optimize-meshes). Each entry of the list:

| Key | Default | Values |
| --- | --- | --- |
| `body` | `"original"` | `"original"`, `"lower_face"`, `"quarter"` |
| `clothing` | `"high"` | `"original"`, `"high"`, `"medium"`, `"low"` |
| `eyes` | `"high"` | `"original"` (the layered eyes, not for engines), `"high"`, `"medium"`, `"low"` |
| `teeth` | `"medium"` | `"original"`, `"medium"`, `"low"` |
| `haircards` | `"high"` | `"ultra"`, `"high"`, `"medium"`, `"low"`, `"haircap_only"` |
| `bones_per_vertex` | `4` | `2`, `4`, `8`, or `0` for no limit |

## meshes

| Key | Default | Values |
| --- | --- | --- |
| `enabled` | `true` | Off keeps every mesh as it is, the quality of the levels then only changes the hair cards |
| `remove_hidden_skin` | `true` | Remove the skin under the clothing |
| `remove_clothing_subdiv` | `true` | Remove the subdivision modifiers of the clothing |
| `remove_clothing_solidify` | `true` | Remove the solidify modifiers of the clothing |

## haircards

| Key | Default | Values |
| --- | --- | --- |
| `enabled` | `true` | Turn the particle hair into hair cards. The quality is per LOD level, the haircap is under `textures` |

## skeleton

See [Skeleton](https://humgen3d.com/docs/process/skeleton).

| Key | Default | Values |
| --- | --- | --- |
| `enabled` | `true` | |
| `names` | `"humanoid"` | `"humgen"`, `"humanoid"`, `"unreal"`, `"mixamo"`, `"custom"` |
| `names_file` | `""` | Path of the JSON file with the bone names, for `"custom"` |
| `rest_pose` | `"t_pose"` | `"a_pose"`, `"t_pose"` |
| `root_bone` | `true` | Add a root bone at the origin |
| `root_bone_name` | `"Root"` | |
| `keep_eyes`, `keep_jaw`, `keep_breasts` | `true` | Keep these bones, otherwise their weights go to the parent bone |
| `keep_metacarpals` | `false` | Keep the palm bones |
| `units` | `"meters"` | `"meters"`, `"centimeters"`. FBX only |

## shape_keys

See [Shape Keys](https://humgen3d.com/docs/process/shape-keys).

| Key | Default | Values |
| --- | --- | --- |
| `enabled` | `true` | Off removes the driven keys and bakes the sliders |
| `face_rig`, `expressions`, `correctives` | `"keep"` | `"keep"`, `"remove"` |
| `body`, `face`, `age` | `"bake"` | `"keep"`, `"bake"`, `"remove"` |
| `keep` | `{}` | Per group the names of the keys to keep, as the tab lists them, for example `{"expressions": ["Smile", "Angry"]}`. A group that is left out keeps all its keys |
| `lod0_only` | `true` | Only the first LOD level gets the blend shapes |

## textures

See [Bake Textures](https://humgen3d.com/docs/process/bake-textures).

| Key | Default | Values |
| --- | --- | --- |
| `enabled` | `true` | Only a choice for the *In this file* output; files always get textures |
| `resolution` | `{"body": 2048, "clothing": 2048, "eyes": 512, "teeth": 512, "hair": 1024}` | Pixels per texture set: `128` to `4096` |
| `passes` | per set, see [Bake Textures](https://humgen3d.com/docs/process/bake-textures) | Per texture set the maps to bake: `"base_color"`, `"normal"`, `"roughness"`, `"metallic"`, `"alpha"`, `"flow"`. The sets are `body`, `clothing`, `eyes`, `teeth` and `hair` |
| `workflow` | `"separate"` | `"separate"`, `"metallic_roughness"`, `"orm"`, `"metallic_smoothness"` |
| `normal_map` | `"opengl"` | `"opengl"`, `"directx"` |
| `file_format` | `"png"` | `"png"`, `"jpeg"` |
| `pack_hair_alpha` | `true` | Put the alpha of the hair in the alpha channel of its base color, instead of a map of its own |
| `haircap_in_skin` | `true` | Paint the haircaps into the skin textures (*On skin*); `false` exports them as meshes (*As meshes*) |
| `samples` | `4` | Render samples per pixel. The tab offers 4, 16 and 64 |

## scripts

See [Scripts](https://humgen3d.com/docs/process/scripts).

| Key | Default | Values |
| --- | --- | --- |
| `enabled` | `false` | |
| `items` | `[]` | A list of scripts, each with `path`, `stage`, `args` (an object with the arguments of its `main` function) and `on_error` (`"stop"` or `"skip"`) |

The stages are `"start"`, `"before_haircards"`, `"before_baking"`, `"before_meshes"`, `"before_skeleton"`, `"after_processing"`, `"before_export"` and `"after_export"`.
