SF
STS Forge

Animation & Audio

AnimMontage and SoundCue verbs: montage-list, montage-add-section, soundcue-add-node, and more.

Back to AI Guide

Verbs for inspecting and modifying AnimMontage assets (sections, notifies) and SoundCue node graphs. All verbs return JSON to stdout. Use -compile -save flags on write verbs to persist changes.


AnimMontage verbs (3)#

montage-list#

List sections and notifies in an AnimMontage.

Category: Read (focused)

Arg Required Description
-asset= Yes AnimMontage asset path

Examples:

-verb=montage-list -asset=/Game/Animations/AM_Attack_Primary

Output:

{
    "success": true,
    "sections": [
        {"name": "Default", "startTime": 0.0},
        {"name": "Recovery", "startTime": 0.45}
    ],
    "notifies": [
        {"name": "PlaySound", "time": 0.1, "notifyClass": "AnimNotify_PlaySound"},
        {"name": "DamageWindow", "time": 0.15, "duration": 0.3, "notifyClass": "AnimNotifyState_DamageWindow"}
    ]
}

montage-add-section#

Add a section to an AnimMontage.

Category: Write (animation)

Arg Required Description
-asset= Yes AnimMontage asset path
-name= Yes Section name
-startTime= Yes Section start time in seconds (float)

Examples:

-verb=montage-add-section -asset=/Game/Animations/AM_Attack_Primary -name=Recovery -startTime=0.45
-verb=montage-add-section -asset=/Game/Animations/AM_Combo -name=SecondSwing -startTime=0.6 -compile -save

Notes:

  • Section names must be unique within the montage.
  • Start time is in seconds relative to the montage start.

montage-add-notify#

Add a notify to an AnimMontage.

Category: Write (animation)

Arg Required Description
-asset= Yes AnimMontage asset path
-time= Yes Trigger time in seconds (float)
-notify= Yes Notify class name (e.g., AnimNotify_PlaySound, AnimNotify_PlayParticleEffect, or a custom notify class)
-duration= No Duration for AnimNotifyState types (defaults to 1.0 if applicable)

Examples:

-verb=montage-add-notify -asset=/Game/Animations/AM_Attack_Primary -time=0.1 -notify=AnimNotify_PlaySound
-verb=montage-add-notify -asset=/Game/Animations/AM_Attack_Primary -time=0.15 -notify=AnimNotifyState_DamageWindow -duration=0.3 -compile -save

Notes:

  • Instant notifies (AnimNotify_* subclasses) ignore the -duration= parameter.
  • State notifies (AnimNotifyState_* subclasses) use -duration= to set how long the state remains active. Defaults to 1.0 if omitted.
  • Custom notify classes must be discoverable by UE reflection (registered via UCLASS).

SoundCue verbs (3)#

soundcue-list#

List all nodes in a SoundCue's node graph.

Category: Read (focused)

Arg Required Description
-asset= Yes SoundCue asset path

Examples:

-verb=soundcue-list -asset=/Game/Audio/SC_Explosion

Output:

{
    "success": true,
    "nodes": [
        {"index": 0, "type": "SoundNodeWavePlayer", "name": "WavePlayer_0"},
        {"index": 1, "type": "SoundNodeAttenuation", "name": "Attenuation_0"},
        {"index": 2, "type": "SoundNodeRandom", "name": "Random_0"}
    ]
}

Notes:

  • Node indices are used by soundcue-add-node and soundcue-connect to reference specific nodes.

soundcue-add-node#

Add a node to a SoundCue graph.

Category: Write (audio)

Arg Required Description
-asset= Yes SoundCue asset path
-type= Yes Node type: WavePlayer, Random, Attenuation, Modulator, Mixer, Concatenator, Delay, Switch
-parent= No Parent node index (integer)
-childSlot= No Child slot index (integer, for nodes with multiple inputs)

Examples:

-verb=soundcue-add-node -asset=/Game/Audio/SC_Explosion -type=WavePlayer
-verb=soundcue-add-node -asset=/Game/Audio/SC_Explosion -type=Random -parent=1 -childSlot=0
-verb=soundcue-add-node -asset=/Game/Audio/SC_Footstep -type=Attenuation -compile -save

Notes:

  • When -parent= is specified, the new node is automatically connected as a child of that parent node at the given slot.
  • Without -parent=, the node is added to the graph unconnected. Use soundcue-connect afterward to wire it.

soundcue-connect#

Connect two nodes in a SoundCue graph.

Category: Write (audio)

Arg Required Description
-asset= Yes SoundCue asset path
-srcNode= Yes Source node index (integer)
-dstNode= Yes Destination node index (integer)
-slot= No Child slot index (defaults to 0)

Examples:

-verb=soundcue-connect -asset=/Game/Audio/SC_Explosion -srcNode=0 -dstNode=1
-verb=soundcue-connect -asset=/Game/Audio/SC_Footstep -srcNode=2 -dstNode=3 -slot=1 -compile -save

Notes:

  • Audio flows from source (child) to destination (parent): a WavePlayer node feeds into a Mixer or Random node.
  • Use soundcue-list first to obtain current node indices.

Practical examples#

Example 1: Inspect an AnimMontage and add a damage notify#

Read the current state of a montage, then add a notify for a damage window.

Step 1: List existing sections and notifies:

curl -X POST http://localhost:7850/baa/v1/execute \
  -H "Content-Type: application/json" \
  -d '{
    "verb": "montage-list",
    "args": {
      "asset": "/Game/Animations/AM_Attack_Primary"
    }
  }'

Step 2: Add a damage window notify state:

curl -X POST http://localhost:7850/baa/v1/execute \
  -H "Content-Type: application/json" \
  -d '{
    "verb": "montage-add-notify",
    "args": {
      "asset": "/Game/Animations/AM_Attack_Primary",
      "time": "0.15",
      "notify": "AnimNotifyState_DamageWindow",
      "duration": "0.3",
      "compile": true,
      "save": true
    }
  }'

Example 2: Add montage sections for a combo attack#

Use batch to add multiple sections in a single commandlet launch.

curl -X POST http://localhost:7850/baa/v1/batch \
  -H "Content-Type: application/json" \
  -d '{
    "defaultAsset": "/Game/Animations/AM_Combo",
    "operations": [
      {
        "verb": "montage-add-section",
        "args": {"name": "WindUp", "startTime": "0.0"}
      },
      {
        "verb": "montage-add-section",
        "args": {"name": "Strike", "startTime": "0.3"}
      },
      {
        "verb": "montage-add-section",
        "args": {"name": "Recovery", "startTime": "0.6"}
      },
      {
        "verb": "montage-add-notify",
        "args": {"time": "0.3", "notify": "AnimNotify_PlaySound"}
      },
      {
        "verb": "montage-add-notify",
        "args": {"time": "0.3", "notify": "AnimNotifyState_DamageWindow", "duration": "0.25"}
      },
      {"verb": "compile"},
      {"verb": "save"}
    ]
  }'

Example 3: Build a SoundCue with random variation#

Create a SoundCue that randomly selects between wave players and applies attenuation.

Step 1: List existing nodes:

curl -X POST http://localhost:7850/baa/v1/execute \
  -H "Content-Type: application/json" \
  -d '{
    "verb": "soundcue-list",
    "args": {"asset": "/Game/Audio/SC_Footstep"}
  }'

Step 2: Add nodes and wire them together via batch:

curl -X POST http://localhost:7850/baa/v1/batch \
  -H "Content-Type: application/json" \
  -d '{
    "defaultAsset": "/Game/Audio/SC_Footstep",
    "operations": [
      {
        "verb": "soundcue-add-node",
        "args": {"type": "WavePlayer"},
        "id": "wave1"
      },
      {
        "verb": "soundcue-add-node",
        "args": {"type": "WavePlayer"},
        "id": "wave2"
      },
      {
        "verb": "soundcue-add-node",
        "args": {"type": "Random"},
        "id": "rand"
      },
      {
        "verb": "soundcue-add-node",
        "args": {"type": "Attenuation"},
        "id": "atten"
      },
      {
        "verb": "soundcue-connect",
        "args": {"srcNode": "$wave1.nodeIndex", "dstNode": "$rand.nodeIndex", "slot": "0"}
      },
      {
        "verb": "soundcue-connect",
        "args": {"srcNode": "$wave2.nodeIndex", "dstNode": "$rand.nodeIndex", "slot": "1"}
      },
      {
        "verb": "soundcue-connect",
        "args": {"srcNode": "$rand.nodeIndex", "dstNode": "$atten.nodeIndex"}
      },
      {"verb": "compile"},
      {"verb": "save"}
    ]
  }'

Example 4: Commandlet invocation (no HTTP server)#

When the editor and BAAServer are not running, use the one-shot commandlet:

"C:\Unreal\UE571Source\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" \
  "C:\Unreal\ProjectLeyline\CombatDemo\CombatDemo.uproject" \
  -run=BlueprintAIAssistant \
  -verb=montage-add-notify \
  -asset=/Game/Animations/AM_Attack_Primary \
  -time=0.1 \
  -notify=AnimNotify_PlaySound \
  -compile -save \
  -nullrhi -nosplash -nosound -unattended

Tips#

  • List before writing. Always run montage-list or soundcue-list first to understand the current state before adding sections, notifies, or nodes.
  • Use batch for multi-step operations. Each commandlet launch takes 30-60 seconds. Batching avoids repeated startup costs, especially when adding multiple notifies or building a SoundCue graph.
  • Notify class names must be exact. Use the full class name as registered with UE reflection (e.g., AnimNotify_PlaySound, not PlaySound). Custom notifies use their UCLASS name.
  • SoundCue node indices can change. After adding or removing nodes, re-run soundcue-list to get updated indices before connecting.
  • Compile and save together. Use -compile -save flags or separate compile and save verbs at the end of a batch to persist all changes in one pass.