italink/unrealclientprotocol/unreal-niagara-editing

Claude Code and agent skill by italink/unrealclientprotocol

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Edit Niagara systems, emitters, and scripts via UCP. Use when the user asks to create/modify particle effects, manage emitters, configure modules, set module inputs, edit Niagara script graphs, or any Niagara VFX operation.

Install

npx vskill@latest install italink/unrealclientprotocol/unreal-niagara-editing

SKILL.md

Niagara Editing

Niagara editing uses three complementary paths: NiagaraOperationLibrary for structural operations, NodeCode for graph/property reading and writing, and ObjectOperationLibrary for detailed UObject property access.

Prerequisite: UE editor running with UCP plugin enabled.

API Overview

NiagaraOperationLibrary (structural operations)

CDO: /Script/UnrealClientProtocolEditor.Default__NiagaraOperationLibrary

UObject path parameters (System, Emitter, Script, etc.) are auto-resolved by UCP — pass the object path as a string and UCP converts it to the UObject pointer.

FunctionParamsDescription
AddEmitterSystem(path), SourceEmitter(path), NameAdd emitter to system
RemoveEmitterSystem(path), EmitterNameRemove emitter from system
ReorderEmitterSystem(path), EmitterName, NewIndexReorder emitter
AddUserParameterSystem(path), ParamName, TypeName, DefaultValueAdd User parameter
RemoveUserParameterSystem(path), ParamNameRemove User parameter
AddModuleSystemOrEmitter(path), ScriptUsage, ModuleScript(path), IndexAdd module to stack
RemoveModuleSystemOrEmitter(path), ScriptUsage, ModuleNodeGuidRemove module
MoveModuleSystemOrEmitter(path), ScriptUsage, ModuleNodeGuid, NewIndexReorder module
SetModuleEnabledSystemOrEmitter(path), ScriptUsage, ModuleNodeGuid, bEnabledEnable/disable module
GetModulesSystemOrEmitter(path), ScriptUsageList modules with name/guid/enabled/scriptPath
SetModuleInputValueSystemOrEmitter(path), ScriptUsage, ModuleNodeGuid, InputName, ValueSet input to literal (Rapid Iteration)
SetModuleInputBindingSystemOrEmitter(path), ScriptUsage, ModuleNodeGuid, InputName, LinkedParamNameBind input to parameter
SetModuleInputDynamicInputSystemOrEmitter(path), ScriptUsage, ModuleNodeGuid, InputName, DynamicInputScript(path)Set dynamic input
ResetModuleInputSystemOrEmitter(path), ScriptUsage, ModuleNodeGuid, InputNameReset to default
GetModuleInputsSystemOrEmitter(path), ScriptUsage, ModuleNodeGuidList inputs with name/type/mode/value
AddRendererEmitter(path), RendererClassNameAdd renderer
RemoveRendererEmitter(path), RendererIndexRemove renderer
MoveRendererEmitter(path), RendererIndex, NewIndexReorder renderer
AddEventHandlerEmitter(path)Add event handler
RemoveEventHandlerEmitter(path), UsageIdStringRemove event handler
AddSimulationStageEmitter(path)Add simulation stage
RemoveSimulationStageEmitter(path), StageIdStringRemove simulation stage
MoveSimulationStageEmitter(path), StageIdString, NewIndexReorder simulation stage
AddGraphParameterScript(path), ParamName, TypeNameAdd parameter to script graph
RemoveGraphParameterScript(path), ParamNameRemove parameter
RenameGraphParameterScript(path), OldName, NewNameRename parameter
CreateScratchPadScriptSystemOrEmitter(path), ScriptName, Usage, ModuleUsageBitmaskCreate a ScratchPad (Local Module) script
NodeCode (graph + properties reading/writing)

CDO: /Script/UnrealClientProtocolEditor.Default__NodeCodeEditingLibrary

FunctionParamsDescription
OutlineAssetPathList available sections
ReadGraphAssetPath, SectionRead section content as text
WriteGraphAssetPath, Section, GraphTextWrite section content back

Section Model

System Asset (UNiagaraSystem)
SectionTypeDescription
[SystemProperties]PropertiesWarmup, bounds, determinism, scalability, LWC, render defaults
[Emitters]PropertiesEmitter list with names, enabled state, ObjectPath
[UserParameters]PropertiesUser. namespace exposed parameters
[ScratchPadScripts]PropertiesLocal Module scripts with name, Usage, ModuleUsageBitmask, ObjectPath
[SystemSpawn]GraphSystem spawn stage module chain
[SystemUpdate]GraphSystem update stage module chain
Emitter Object (UNiagaraEmitter, accessed via ObjectPath from [Emitters])
SectionTypeDescription
[EmitterProperties]PropertiesSimTarget, bLocalSpace, bounds, allocation, inheritance
[ParticleAttributes]Properties (read-only)Compiled particle attributes list
[Renderers]PropertiesRenderer list with class, ObjectPath
[EventHandlers]PropertiesEvent handler configs
[SimulationStages]PropertiesSimulation stage list
[EmitterSpawn]GraphEmitter spawn stage
[EmitterUpdate]GraphEmitter update stage
[ParticleSpawn]GraphParticle spawn stage
[ParticleUpdate]GraphParticle update stage
[ParticleEvent:EventId]GraphEvent handler graph
[SimulationStage:StageId]GraphCustom simulation stage graph
Standalone Script (UNiagaraScript)
SectionTypeDescription
[Module]GraphModule script graph
[Function]GraphFunction script graph
[DynamicInput]GraphDynamic input script graph

ScriptUsage Values

Use these strings for ScriptUsage parameter:

SystemSpawn, SystemUpdate, EmitterSpawn, EmitterUpdate, ParticleSpawn, ParticleUpdate, ParticleEvent, SimulationStage, Module, Function, DynamicInput

Parameter Namespaces

NamespaceScopeWritable In
System.System-level attributesSystem stages
Emitter.Emitter-level attributesEmitter stages
Particles.Particle attributesParticle stages
Module.Module input parametersModule internal
User.User-exposed parametersRuntime settable
Engine.Engine values (DeltaTime, etc.)Read-only
Local.Module.Module-local temporariesModule internal
Transient.Cross-module temporariesCurrent stage
Constants.Rapid iteration parametersEditor-set values

Module Input Setting Methods

Modules can have their inputs set in four ways:

  1. Literal Value (SetModuleInputValue) — stored as Rapid Iteration Parameter in Constants.EmitterName.ModuleName.InputName, no graph nodes
  2. Binding (SetModuleInputBinding) — ParameterMapGet reads another parameter (e.g. User.MyParam, Emitter.SpawnRate)
  3. Dynamic Input (SetModuleInputDynamicInput) — a DynamicInput script computes the value
  4. Data Interface — a NiagaraNodeInput provides a data interface object
  5. Default — module's built-in default, no override

Workflow

Exploring a System
json
// 1. Get system structure
{"object":"...NodeCodeEditingLibrary","function":"Outline","params":{"AssetPath":"/Game/FX/NS_Fountain"}}
// 2. Read emitter list
{"object":"...NodeCodeEditingLibrary","function":"ReadGraph","params":{"AssetPath":"/Game/FX/NS_Fountain","Section":"Emitters"}}
// 3. Deep-dive into an emitter (use ObjectPath from step 2)
{"object":"...NodeCodeEditingLibrary","function":"Outline","params":{"AssetPath":"/Game/FX/NS_Fountain.NS_Fountain:Fountain"}}
Modifying Module Stack
json
// Add a module
{"object":"...NiagaraOperationLibrary","function":"AddModule","params":{"EmitterPath":"...Fountain","ScriptUsage":"ParticleSpawn","ModuleAssetPath":"/Niagara/Modules/AddVelocity","Index":1}}
// Set module input to a value
{"object":"...NiagaraOperationLibrary","function":"SetModuleInputValue","params":{"EmitterPath":"...Fountain","ScriptUsage":"ParticleSpawn","ModuleGuid":"...","InputName":"Velocity","Value":"(X=0,Y=0,Z=100)"}}
// Bind module input to User parameter
{"object":"...NiagaraOperationLibrary","function":"SetModuleInputBinding","params":{"EmitterPath":"...Fountain","ScriptUsage":"ParticleSpawn","ModuleGuid":"...","InputName":"Velocity","LinkedParamName":"User.InitialVelocity"}}
Editing a Module Script's Internal Graph
ReadGraph("/Game/FX/Modules/MyModule", "Module")
→ Text representation of the node graph
WriteGraph("/Game/FX/Modules/MyModule", "Module", <modified text>)
→ Diff result
Modifying Renderer Properties
json
// Get renderer list
{"object":"...NodeCodeEditingLibrary","function":"ReadGraph","params":{"AssetPath":"...Fountain","Section":"Renderers"}}
// Read detailed renderer properties via reflection
{"object":"...ObjectOperationLibrary","function":"DescribeObject","params":{"ObjectPath":"...SpriteRenderer_0"}}
// Set renderer property
{"object":"...ObjectOperationLibrary","function":"SetObjectProperty","params":{"ObjectPath":"...SpriteRenderer_0","PropertyName":"Material","JsonValue":"\"/Game/Materials/M_Particle\""}}

Node Types in Graph Sections

Encoded NameUClassDescription
FunctionCall:<ScriptPath>UNiagaraNodeFunctionCallModule/function call (asset module)
FunctionCall:ScratchPad:<Name>UNiagaraNodeFunctionCallScratchPad (Local Module) reference
AssignmentUNiagaraNodeAssignmentInline assignment
CustomHlslUNiagaraNodeCustomHlslCustom HLSL code
ParameterMapGetUNiagaraNodeParameterMapGetRead from parameter map
ParameterMapSetUNiagaraNodeParameterMapSetWrite to parameter map
NiagaraOpUNiagaraNodeOpMath operation (OpName property)
NiagaraNodeInputUNiagaraNodeInputInput node
NiagaraNodeOutputUNiagaraNodeOutputOutput node
Working with ScratchPad (Local Module) Scripts

ScratchPad scripts are inline module/function/dynamic-input scripts embedded within a System or Emitter. They appear in [ScratchPadScripts] and are referenced in graphs as FunctionCall:ScratchPad:<Name>.

json
// 1. Read ScratchPad list from source system
{"object":"...NodeCodeEditingLibrary","function":"ReadGraph","params":{"AssetPath":"/Game/FX/NS_Source","Section":"ScratchPadScripts"}}
// 2. Create matching ScratchPad scripts in target system
{"object":"...NiagaraOperationLibrary","function":"CreateScratchPadScript","params":{"SystemOrEmitter":"/Game/FX/NS_Target","ScriptName":"MyModule","Usage":"Module","ModuleUsageBitmask":56}}
// 3. Read source ScratchPad internal graph (use ObjectPath from step 1)
{"object":"...NodeCodeEditingLibrary","function":"ReadGraph","params":{"AssetPath":"/Game/FX/NS_Source.NS_Source:MyModule","Section":"Module"}}
// 4. Write to target ScratchPad (use ObjectPath from step 2)
{"object":"...NodeCodeEditingLibrary","function":"WriteGraph","params":{"AssetPath":"/Game/FX/NS_Target.NS_Target:MyModule","Section":"Module","GraphText":"..."}}
// 5. Now write stage graphs — FunctionCall:ScratchPad:MyModule auto-resolves to target system's script

Important Notes

  • GUID Preservation: When editing graphs with WriteGraph, preserve existing node #guid values to ensure correct diff matching.
  • Emitters are embedded: Emitters inside a System are copies, not references. Access them via ObjectPath from the [Emitters] section.
  • ParticleAttributes are read-only: They are derived from compiled scripts. To add/remove particle attributes, add/remove modules that write to Particles. namespace.
  • Prefer OperationLibrary for module stack changes: Use AddModule/RemoveModule/SetModuleInput instead of WriteGraph for System/Emitter stage graphs, as these APIs correctly handle Rapid Iteration parameters and Override node management.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
114
Repository forks
14
7-day trend score
24

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/italink/unrealclientprotocol/unreal-niagara-editing/badge)](https://verified-skill.com/skills/italink/unrealclientprotocol/unreal-niagara-editing)

Something wrong with this skill or its page? Tell us.