Content/Skills/niagara-systems/SKILL.md
Create and manage Niagara particle systems - system lifecycle, adding/copying emitters, user parameters, system script settings, scratch-pad authoring
npx skillsauth add kevinpbuckley/vibeue niagara-systemsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
NiagaraService handles system-level operations:
For emitter-level module work (built-in modules, renderers, rapid iteration params) load
niagara-emitters. For building scratch-pad module graphs (Custom HLSL, Map Get/Set, Op,
typed pins, wiring), use NiagaraScratchPadService — also documented in the niagara-emitters skill.
When looking for a parameter (e.g., color), check in this order:
Use get_all_editable_settings() to discover ALL settings at once:
import unreal
path = "/Game/VFX/NS_TeslaCoil"
settings = unreal.NiagaraService.get_all_editable_settings(path)
print(f"Total settings: {settings.total_settings_count}")
# User Parameters (system-level)
for p in settings.user_parameters:
print(f"[User] {p.setting_path} ({p.value_type}): {p.current_value}")
# System & Emitter rapid iteration parameters
for p in settings.rapid_iteration_parameters:
print(f"[{p.emitter_name}/{p.script_stage}] {p.setting_path}: {p.current_value}")
import unreal
# ALWAYS search first
systems = unreal.NiagaraService.search_systems("/Game", "")
if len(systems) > 0:
for s in systems:
summary = unreal.NiagaraService.summarize(s)
print(f" - {summary.system_name}: {summary.emitter_names}")
# STOP - Ask user: "Found {N} systems. Use one as template?"
import unreal
# === LIFECYCLE ===
result = unreal.NiagaraService.create_system("NS_Fire", "/Game/VFX")
path = result.asset_path
unreal.NiagaraService.compile_system(path)
unreal.NiagaraService.save_system(path)
unreal.NiagaraService.open_in_editor(path)
# === EMITTER MANAGEMENT ===
# Add from template
templates = unreal.NiagaraService.list_emitter_templates("", "Fountain")
unreal.NiagaraService.add_emitter(path, templates[0], "Flames")
# Add minimal empty emitter
unreal.NiagaraService.add_emitter(path, "minimal", "Sparks")
# Copy from another system
unreal.NiagaraService.copy_emitter("/Game/VFX/NS_Source", "Flames", path, "Fire")
# Duplicate within system
unreal.NiagaraService.duplicate_emitter(path, "Fire", "Fire2")
# Enable/disable
unreal.NiagaraService.enable_emitter(path, "Flames", True)
# Rename/remove
unreal.NiagaraService.rename_emitter(path, "Flames", "BigFlames")
unreal.NiagaraService.remove_emitter(path, "BigFlames")
# List emitters
emitters = unreal.NiagaraService.list_emitters(path)
for e in emitters:
print(f"{e.emitter_name}: enabled={e.is_enabled}")
# === DISCOVER ALL SETTINGS (check this first!) ===
settings = unreal.NiagaraService.get_all_editable_settings(path)
# settings.user_parameters - User.Color, User.SpawnRate, etc.
# settings.rapid_iteration_parameters - System + Emitter script params
# Each param has: setting_path, value_type, current_value, emitter_name, script_stage
# === USER PARAMETERS (top priority) ===
params = unreal.NiagaraService.list_parameters(path)
unreal.NiagaraService.get_parameter(path, "User.SpawnRate")
unreal.NiagaraService.set_parameter(path, "User.SpawnRate", "100")
unreal.NiagaraService.add_user_parameter(path, "Color", "Color", "(R=1,G=0,B=0,A=1)")
unreal.NiagaraService.remove_user_parameter(path, "Color")
# === SYSTEM SCRIPT SETTINGS (check before emitters!) ===
# get_parameter and set_parameter now search: User → System scripts → Emitter scripts
param = unreal.NiagaraService.get_parameter(path, "System.Color") # SystemSpawn color
unreal.NiagaraService.set_parameter(path, "System.Color", "(R=0,G=5,B=0,A=1)")
# === INFO & DIAGNOSTICS ===
summary = unreal.NiagaraService.summarize(path)
info = unreal.NiagaraService.get_system_info(path)
exists = unreal.NiagaraService.system_exists(path)
testing
Procedurally design an AAA-style open-world FPS map blockout (roads, POIs, fields, forests/treelines, railway/bridges) from a VibeUE-generated landscape, validate it through gated checks, and materialize the plan into real engine geometry (splines, paint layers, foliage, actors).
development
Configure Niagara emitter internals - modules, renderers, rapid iteration parameters, graph positioning, and scratch-pad authoring (Custom HLSL + node graph)
tools
Create and modify Blueprint assets, variables, functions, and components
tools
Search, find, open, move, duplicate, save, delete, import, and export assets