Headless / CI Mode

The -run=MHAManager commandlet lets you run a full batch from the command line without opening the Unreal Editor UI. Feed it a manifest, collect the exit code, and integrate into any CI or automated pipeline.

Basic syntax

UnrealEditor-Cmd YourProject.uproject ^
  -run=MHAManager ^
  -manifest="C:/path/to/batch.mhajson" ^
  -log

The commandlet requires UnrealEditor-Cmd (Win64) - the plugin is editor-only on Windows. It loads the manifest, runs the batch to completion, saves the updated manifest (statuses, timings, error messages) back to the same path, and exits. Jobs run serially; for more throughput, start several commandlets from your own scheduler, one manifest each.

Identity Create jobs are not supported headless — they need an interactive editor session for the MetaHuman cloud auto-rig login. Run those in the editor first, then batch the solves in CI.

Arguments

Argument Required Description
-manifest="<path>" Yes Absolute filesystem path to the .mhajson manifest to run.
-log Recommended Writes engine and plugin log output to stdout. Required for CI to capture progress and errors.
-logfile="<path>" No Redirect log output to a file instead of (or in addition to) stdout.
-nosplash No Suppresses the engine splash screen. Useful for cleaner CI output.
-nullrhi No Disables the GPU render backend. Do not use — the MetaHuman solver requires a real GPU. Included here only to document that it is not compatible.

Exit codes

Code Meaning
0 All jobs completed successfully. Artifacts are written and the manifest is updated.
1 At least one job finished Failed, or was still blocked at the end of the run (MissingCalibration, MissingIdentity or PoorCalibrationQuality). The manifest records which. Partial artifacts on an otherwise Done job do not affect the exit code.
2 Startup error — the commandlet could not initialize. Check that the manifest path is correct, required plugins are enabled in the host project, and the engine version matches the plugin build.

Log output

With -log active, the commandlet emits a progress summary every 10 seconds while the batch runs:

Progress - Pending: 3  Running: 1  Done: 2  Failed: 0  Blocked: 0

Failed jobs log the stage at which they failed and the error message from the solver. All output is also written to the engine's default log at YourProject/Saved/Logs/UnrealEditor-Cmd.log.

Example: GitHub Actions step

- name: Run MHA Manager batch
  run: |
    "C:/Epic Games/UE_5.8/Engine/Binaries/Win64/UnrealEditor-Cmd" \
      "${{ github.workspace }}/MyProject.uproject" \
      -run=MHAManager \
      -manifest="${{ github.workspace }}/Saved/MHAManager/batch.mhajson" \
      -log -nosplash
  shell: cmd

Retry failed jobs

A batch only runs jobs that are pending. Failed jobs reload from the manifest still marked Failed, so re-running the same manifest does nothing until you requeue them - only Done jobs whose options changed (Stale) requeue themselves.

  1. Load the manifest, or the queue's batch asset.
  2. Requeue the failures: retry_jobs(job_ids) over the MCP toolset, or right-click the rows in the queue and pick Retry.
  3. Leave Reprocess Solved Takes off (the default) so the Done jobs around them stay skipped.
  4. Start the batch, in the editor or by re-running the commandlet against the saved manifest.