Manifests & Batch Assets
A manifest is a .mhajson file that captures the complete state of a batch queue —
global settings, every job and its options, and the artifact records written after processing.
Manifests auto-save on completion and can be exported, shared, and reloaded. The same state can
also be saved as a batch asset that lives in the project.
Auto-save location
After every batch run the active manifest is written automatically to:
YourProject/Saved/MHAManager/batch.mhajson This file is overwritten each run. Save a named copy via File... → Save Manifest As in the batch panel toolbar if you need to preserve a specific queue.
Top-level structure
{
"schema_version": 1,
"settings": { ... },
"jobs": [ ... ]
} schema_version Int Used by the loader to detect incompatible manifests from future versions. settings Object Snapshot of all Global Settings at the time the manifest was saved, including the per-category solve default templates. Restored on load. jobs Array Ordered list of job objects. Processed top to bottom. Settings block
"settings": {
"plugin_version": "2.6.1",
"use_custom_output_path": false,
"export_output_path": "/Game/MHA_Batch",
"ue_export_flat": true,
"skip_if_already_solved": true,
"max_concurrent_jobs": 1,
"export_anim_sequence": true,
"export_level_sequence": false,
"export_for_dcc": false,
"export_control_rig_fbx": false,
"dcc_export_directory": "",
"dcc_export_flat": true,
"overwrite_existing": true,
"force_export_animation": false,
"auto_open_after_export": false,
"use_metahuman_id_for_output_mesh": true,
"target_skeleton_or_skeletal_mesh": "",
"force_d3d12": false,
"add_skeleton_compatibility": true,
"retargeter_output_path": "/Game/CaptureManager/BodyTrackerTargets",
"default_control_rig_class": "",
"board_pattern_width": 11,
"board_pattern_height": 16,
"board_square_size": 0.75,
"auto_detect_board_pattern": true,
"export_calibration_json": false,
"auto_queue_ingested_takes": false,
"default_job_options_by_category": {
"mono": { ... },
"stereo": { ... },
"audio": { ... }
},
"default_job_options": { ... },
"column_layout": [
{ "id": "SolveType", "visible": true, "width": 96 },
...
]
} default_job_options_by_category holds the per-category solve default templates —
one sub-object per category (Mono / Stereo / Audio) using the same keys as a job's
options block. default_job_options is the legacy single-template key,
kept so older plugin builds can still read the manifest; a manifest that has only the legacy
key seeds all three categories from it on load.
column_layout stores which columns are visible, their order, and widths in the
queue view. Restoring a manifest on a different machine applies the same column layout.
Job object
{
"id": "A1B2C3D4-E5F6-...",
"name": "Scene_01_Take_03",
"input_type": "Mono",
"footage_capture_data": "/Game/Captures/Scene01/Take03.Take03",
"identity": "",
"status": "pending",
"processing_time_secs": 142.5,
"footage_framing": "FullBody",
"framing_detail": "frame 0001.png: face 0.82 / hips 0.71 / ...",
"body_coverage_pct": 0.97,
"options": { ... },
"depth_sequences": [ ... ],
"artifacts": [ ... ]
} id String (GUID) Unique identifier generated per job. Stable across re-saves — used to correlate artifact records. name String Display name shown in the queue row. Defaults to the Capture Data asset name. input_type "Mono" | "Stereo" | "Audio" | "CalibrateStereo" | "IdentityCreate" Determines the pipeline and which solve options are used. A legacy "Depth" value is remapped to "Mono" on load. footage_capture_data String (object path) Object path to the UFootageCaptureData asset. identity String Object path to the UMetaHumanIdentity. Used by Stereo jobs only; empty for Mono, Audio, and Calibration jobs. status "pending" | "done" | "failed" | "skipped" Job outcome from the last run. Running jobs are saved as pending. processing_time_secs Number Wall-clock solve time from the last run. Stereo jobs additionally record depth_generation_time_secs and depth_cleaning_time_secs. footage_framing "FullBody" | "UpperBody" | "Headshot" Framing probe verdict, with framing_detail holding the per-joint confidence summary. Omitted until the take has been probed — persisting it means re-loaded queues don't re-probe. body_coverage_pct Number (0–1) Post-solve body detection coverage for body-tracked jobs. Omitted until measured. Calibration jobs record calibration_rms_error and calibration_selected_frames instead. depth_sequences Array Per-depth-sequence metadata for Stereo jobs — sequence path, frame range, depth scale, generation source, and camera name. Empty or absent for other job types. artifacts Array Records of assets generated by this job. Written after processing completes. Artifact records
"artifacts": [
{
"asset_path": "/Game/MHA_Batch/Scene01_Take03_Performance.Scene01_Take03_Performance",
"type": "Performance",
"state": "Complete",
"stage_created_by": "ProcessPerformance",
"created_at": "2026-07-08T09:32:11Z",
"disk_path": ""
},
{
"asset_path": "/Game/MHA_Batch/Scene01_Take03_Anim.Scene01_Take03_Anim",
"type": "AnimSequence",
"state": "Complete",
"stage_created_by": "ExportOutputs",
"created_at": "2026-07-08T09:34:02Z",
"disk_path": ""
}
] type String "Performance", "AnimSequence", "LevelSequence", "Identity", "CaptureData", "CameraCalibration", "ControlRigFBX", "DCCFBX", or "Log". asset_path String Object path where the asset was written. FBX artifacts use disk_path for their filesystem location instead. state "Complete" | "Partial" | "Failed" Outcome of this specific artifact. A job can be Complete overall while an optional export is Partial. stage_created_by String Which pipeline stage produced the artifact. created_at ISO 8601 timestamp UTC time when the asset was written. Batch assets
A batch asset is the same data wearing a different coat: the recipe (global
settings plus every job definition) and whatever the last run produced, captured as an asset in
the content tree instead of a file under Saved/.
It does not replace the manifest. The .mhajson file stays the persistence layer —
crash-recovery autosave, worker subprocess IPC, and MCP polling all run on it. The asset is the
shareable face of the same state: it lives in /Game, so it commits to
source control, diffs, and travels with the project. That is what puts a job's provenance — a
Wwise sound id and its event, say — next to the Performance it produced, instead of in a
gitignored file on one machine.
Once a queue is linked to an asset, the toolbar button shows its name, with a trailing
* for unsaved changes — the same convention the rest of the editor uses. Batch
assets are editor-only and never cook into a build.
Sharing manifests across machines
All asset paths in a manifest are content-relative (/Game/...), not filesystem paths,
so manifests are portable between machines that share the same project structure. Before loading
a manifest on a different machine, verify that:
- All referenced Capture Data, Identity, and Calibration assets exist at the same content paths
- The output path in Settings points to a valid location for the receiving machine
- The same engine plugin versions are installed — the manifest records the MHA Manager version that wrote it, but not the engine plugins it depended on