Batch Operations
Chain multiple Blueprint operations in a single engine startup with batch mode.
Full verb reference: AI Guide
Each commandlet invocation costs 10-30 seconds of engine startup. Batching all operations into a single invocation eliminates that overhead.
Basic Structure#
{
"defaultAsset": "/Game/Blueprints/BP_Enemy",
"operations": [
{"verb": "add-var", "name": "Speed", "type": "Float"},
{"verb": "set-var-default", "name": "Speed", "value": "600.0"},
{"verb": "compile"},
{"verb": "save"}
]
}
Running a Batch#
-verb=batch -input=C:/path/to/operations.json
Or pipe from stdin: -verb=batch -input=-
Result Referencing ($N)#
Operations can reference results from earlier operations using $N (1-indexed):
{
"defaultAsset": "/Game/BP/BP_Player",
"operations": [
{"verb": "add-node", "type": "CustomEvent", "eventName": "OnDamaged", "posX": 0, "posY": 0},
{"verb": "add-node", "type": "CallFunction", "function": "PrintString", "class": "KismetSystemLibrary", "posX": 300, "posY": 0},
{"verb": "connect", "srcNode": "$1", "srcPin": "then", "dstNode": "$2", "dstPin": "execute"},
{"verb": "compile"},
{"verb": "save"}
]
}
What $N resolves to depends on the verb:
| Verb | $N resolves to |
|---|---|
| add-node | Node GUID |
| add-var | Variable name |
| add-function | Function name |
| add-component | Component name |
| add-event-dispatcher | Dispatcher name |
| create | Asset path |
| duplicate-asset | New asset path |
| dt-add-row | Row name |
| bb-add-key | Key name |
| Others | Stringified result summary |
Comments in Batch Files#
Objects without a verb field are treated as comments. They are skipped but preserve $N indexing:
{"_comment": "This is step 1"},
{"verb": "add-var", "name": "Health", "type": "Float"}
The add-var above is still $2 (the comment was $1).
Error Handling#
- Failed operations log an error in the results but don't stop the batch
- The batch result shows
succeededandfailedcounts - Check
results[N].successfor each operation
Multi-Asset Batches#
Override the default asset per operation:
{
"operations": [
{"verb": "export", "asset": "/Game/BP/BP_Player", "--format": "summary"},
{"verb": "export", "asset": "/Game/BP/BP_Enemy", "--format": "summary"},
{"verb": "export", "asset": "/Game/BP/BP_Pickup", "--format": "summary"}
]
}
Common Batch Patterns#
For complete examples of these patterns, see Example Workflows.
Add Variables with Metadata#
{"verb": "add-var", "name": "Health", "type": "Float"},
{"verb": "set-var-default", "name": "Health", "value": "100.0"},
{"verb": "set-var-flags", "name": "Health", "flags": "EditAnywhere,BlueprintReadWrite,Replicated", "category": "Stats", "repNotify": "OnRep_Health"},
{"verb": "set-var-meta", "name": "Health", "clampMin": "0", "clampMax": "999", "tooltip": "Current health points"}
Create a Complete Function#
{"verb": "add-function", "name": "CalculateDamage", "isPure": true},
{"verb": "add-function-param", "function": "CalculateDamage", "name": "BaseDamage", "type": "Float", "direction": "input"},
{"verb": "add-function-param", "function": "CalculateDamage", "name": "Result", "type": "Float", "direction": "output"}
Audit CDO Properties Across Multiple Blueprints#
{
"operations": [
{"verb": "read-cdo", "asset": "/Game/Characters/BP_Player"},
{"verb": "read-cdo", "asset": "/Game/Characters/BP_Enemy"},
{"verb": "read-cdo", "asset": "/Game/Characters/BP_Boss"}
]
}
Manipulate Array Elements#
{"verb": "array-count", "asset": "/Game/GAS/GE_Damage", "property": "Modifiers"},
{"verb": "array-add", "asset": "/Game/GAS/GE_Damage", "property": "Modifiers"},
{"verb": "array-set", "asset": "/Game/GAS/GE_Damage", "property": "Modifiers", "index": "0", "value": "(Attribute=...)"},
{"verb": "array-get", "asset": "/Game/GAS/GE_Damage", "property": "Modifiers", "all": "true"},
{"verb": "save", "asset": "/Game/GAS/GE_Damage"}
Set Up a Blueprint from Scratch#
{"verb": "create", "asset": "/Game/Blueprints/BP_Pickup", "parent": "Actor"},
{"verb": "add-component", "asset": "$1", "name": "Root", "class": "SceneComponent"},
{"verb": "add-component", "asset": "$1", "name": "Mesh", "class": "StaticMeshComponent", "parent": "Root"},
{"verb": "add-component", "asset": "$1", "name": "Trigger", "class": "SphereComponent", "parent": "Root"},
{"verb": "add-var", "asset": "$1", "name": "PickupValue", "type": "Int"},
{"verb": "set-var-default", "asset": "$1", "name": "PickupValue", "value": "10"},
{"verb": "compile", "asset": "$1"},
{"verb": "save", "asset": "$1"}