Keyframing Perlin Settings
Bundle 8-axis Perlin noise into one keyframing settings dict
- opac_perlin_settings
This one doesn't touch an image, a mask, or even a list - it's a pure configuration node. Keyframing Perlin Settings exists to solve a UI problem: if you want independent organic noise on eight different motion axes (zoom, angle, three translation axes, three rotation axes), that's 32 separate parameters to wire up. This node bundles all 32 into one settings package so a downstream keyframing node only needs one input plug instead of thirty-two.
How it works
Each of the eight axes - zoom, angle, trx/try/trz (translation X/Y/Z), rotx/roty/rotz (rotation X/Y/Z) - gets its own complete Perlin fractal-noise stack: octaves, persistence, lacunarity, and repeat, the same four parameters you'd see on any Perlin-based node in this pack. Having a separate stack per axis is the point: it means the zoom can wobble on a different rhythm than the rotation, which is what actually reads as natural camera movement rather than everything jittering in perfect sync (which reads as fake, or worse, motion-sick).
The inputs and outputs that matter
All 32 fields are required, all follow the same pattern per axis - {axis}_octaves (default 1, 1–10), {axis}_persistence (default 0.5, 0.01–1), {axis}_lacunarity (default 2, 1–4), {axis}_repeat (default 1024, 256–4096). Realistically, you're not tuning all 32 on your first pass. Get a working camera motion first, then come back and nudge one axis group at a time - say, just angle_* for a subtle rotational tremor - rather than trying to reason about all eight simultaneously.
Output is a single opac_perlin_settings (DICT). This only does anything wired into whatever downstream node in the OPAC family actually consumes per-axis Perlin noise for camera motion - a node outside the batch covered here, so if your graph doesn't have one, this node has nothing to attach to and won't affect your render on its own.
How to install it
Via ComfyUI Manager, search SaltAI-Open-Resources or SaltAI, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/get-salt-AI/SaltAI
then restart. No external model, no heavy dependency - it's a settings object, nothing more.
Common issues & troubleshooting
You changed values and nothing happened. Check that the DICT output is actually wired to a compatible downstream node - this is the single most common mistake with a pure settings node like this one. It has no effect standalone.
You edited the wrong axis. With 32 nearly-identical widget groups stacked in the node UI, it's easy to scroll to the wrong block and tweak rotx_octaves when you meant roty_octaves. Double-check the prefix before you go hunting for why a change didn't do what you expected.
Overkill for a simple shot. If you only need noise on one or two axes, wiring this whole 32-field node in is more setup than the job needs - check whether the downstream node you're feeding also accepts simpler per-axis inputs directly before reaching for the full settings bundle.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| zoom_octaves | INT | 11–10 | — |
| zoom_persistence | FLOAT | 0.500.01–1 | — |
| zoom_lacunarity | FLOAT | 2.001–4 | — |
| zoom_repeat | INT | 1024256–4096 | — |
| angle_octaves | INT | 11–10 | — |
| angle_persistence | FLOAT | 0.500.01–1 | — |
| angle_lacunarity | FLOAT | 2.001–4 | — |
| angle_repeat | INT | 1024256–4096 | — |
| trx_octaves | INT | 11–10 | — |
| trx_persistence | FLOAT | 0.500.01–1 | — |
| trx_lacunarity | FLOAT | 2.001–4 | — |
| trx_repeat | INT | 1024256–4096 | — |
| try_octaves | INT | 11–10 | — |
| try_persistence | FLOAT | 0.500.01–1 | — |
| try_lacunarity | FLOAT | 2.001–4 | — |
| try_repeat | INT | 1024256–4096 | — |
| trz_octaves | INT | 11–10 | — |
| trz_persistence | FLOAT | 0.500.01–1 | — |
| trz_lacunarity | FLOAT | 2.001–4 | — |
| trz_repeat | INT | 1024256–4096 | — |
| rotx_octaves | INT | 11–10 | — |
| rotx_persistence | FLOAT | 0.500.01–1 | — |
| rotx_lacunarity | FLOAT | 2.001–4 | — |
| rotx_repeat | INT | 1024256–4096 | — |
| roty_octaves | INT | 11–10 | — |
| roty_persistence | FLOAT | 0.500.01–1 | — |
| roty_lacunarity | FLOAT | 2.001–4 | — |
| roty_repeat | INT | 1024256–4096 | — |
| rotz_octaves | INT | 11–10 | — |
| rotz_persistence | FLOAT | 0.500.01–1 | — |
| rotz_lacunarity | FLOAT | 2.001–4 | — |
| rotz_repeat | INT | 1024256–4096 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| opac_perlin_settings | DICT | — |