PinWright
← All text formats

Niagara graphs

NIR
Read as text

A Niagara system is a binary node graph: emitters, module stacks, renderers, parameters, simulation stages and script wiring. You normally read it by clicking through emitter after emitter in the Niagara editor. NIR writes the same asset out as line-based text: the system, its emitters, every module in stack order with its inputs, the renderers, and the script graphs node by node. NIR is for reading and review. Writing text back into the asset is planned.

What it gives you

Diffable in version control
An emitter tweak becomes a few readable lines you can compare between revisions. The same text is saved in asset dumps as nir.txt, so git log -p and grep both work on it.
Reviewable like code
Module stacks read top to bottom in execution order. Each input shows a value, a linked parameter like $User.Speed, or a nested dynamic input. You can check what an emitter does without tracing pins.
Readable for your assistant
Your assistant gets the whole system as text in one step: emitters, stacks, renderers and script graphs. It can answer questions and reason about the effect.
Faithful and consistent
The live read and the nir.txt file use the same reader, so for one asset state they match exactly. Node types the reader doesn't know show as # unknown-node with a warning, so nothing is silently dropped.

What the text looks like

A system block lists exposed param values, then one emitter block per emitter. Each module row shows its stack order and whether it is enabled. Each input is a value, a linked $-parameter or a nested dynamic input:

nir
system "NS_ThrusterExhaust" {
    param User.SpawnRate : Float = 12.0 @scope user
    emitter "Exhaust" {
        simTarget CPUSim
        stack ParticleSpawn {
            module InitializeParticle @0 enabled
                input Lifetime = 2.0
                input Color = $User.Color
            module AddVelocity @1 enabled
                input Velocity = dynamic NoiseClamp { input Range = 0.5 }
        }
        renderer Sprite
    }
}

Standalone scripts, simulation stages and event handlers also expand into a graph <Usage> { ... } block, with node lines and link From.Pin -> To.Pin wiring, so you can follow the data flow node by node.

How to ask for it

Ask what a system does. Your assistant reads the whole system as text and answers from it. Reading doesn't change the asset. More examples are on the Niagara VFX page.

exampleNiagara VFX
You: What does NS_ThrusterExhaust spawn, and at what rate?

One CPU sprite emitter at 12 per second, with a 2s lifetime and
noise-clamped velocity.

Read-only

NIR reads Niagara systems, emitters and scripts as text for review and for your assistant's context. Writing text back is planned. Positions are recorded as @(x, y) for reference. Referenced module scripts appear as paths and are not expanded inline.