Generator node
Magic Storm
Cinematic raymarched storm clouds: a billowing Perlin-Worley volume with curl churn and wind, lit by a gradient palette with moon self-shadowing, plus stars, aurora, film grain and scheduled lightning. Connect an image to the Image port and the cloud takes that silhouette's shape — a logo, a person, or a text block inflates into a real 3D cloud body. Reach for it for skies, atmospheres, mood backdrops, and any shot that needs weather.
Inputs
| Port | Type | Default |
|---|---|---|
| EnableTurns the storm off and clears its image. Off costs nothing — the volume raymarch stops entirely. | bool | true |
| SeedWhich storm you get. Changing it rebakes the noise volumes into a completely different cloudscape; any whole number works. | int | 0 |
| SpeedHow fast the storm evolves. 0 freezes it mid-boil; negative values are treated as 0. Above about 3 the clouds churn faster than they read. | float | 1.0 |
| TimeDrive the storm from your own clock in seconds — scrub, loop or sync it to music. Anything below 0 hands time back to the internal clock. | float | -1 |
| QualityRaymarch budget: 0 is quarter resolution with 24 steps, 1 half with 36, 2 half with 48. Clamped to 0…2; higher costs frame rate, not new detail. | int | 1 |
| CoverageHow much of the sky is filled with cloud. Clamped to 0…1 — 0 is clear, 1 is a solid overcast ceiling. | float | 0.5 |
| ClumpingWhether the volume reads as flat fog or as separate cloud bodies with gaps between them. Clamped to 0…1. | float | 0.55 |
| FormHow sculpted the cloud cores are — low values are hazy blobs, high values carve hard cauliflower masses. Clamped to 0.1…6. | float | 1.7 |
| BillowCarves the classic cauliflower lobes into the cloud edges. Clamped to 0…1. | float | 0.65 |
| DensityHow thick the cloud material is — thin veils versus light-blocking mass. Not clamped above 0; useful roughly 0…3, beyond that everything reads as a solid wall. | float | 1.0 |
| SoftnessFeathers the cloud boundary from a crisp edge into haze. Clamped to 0…1. | float | 0.35 |
| DetailFine erosion noise on the lobe rims — wispy crispness rather than bulk shape. Clamped to 0…1. | float | 0.5 |
| ScaleZoom of the noise: small values give a few huge cloud masses, large values a fine boiling texture. At least 0.05, no upper limit; useful roughly 0.2…4. | float | 1.0 |
| Cloud BaseHeight of the cloud layer's underside in Grafit units. Not clamped; around -0.35 puts the deck just below frame centre, positive values lift it out of view. | float | -0.35 |
| Cloud HeightThickness of the cloud deck from base to top. At least 0.05, no upper limit; useful roughly 0.3…3. | float | 1.3 |
| ChurnCurl warping that makes the volume boil in place instead of sliding past. Not clamped above 0; useful roughly 0…2. | float | 0.6 |
| Churn SpeedHow fast that boiling motion runs. Negative values are treated as 0; the timescale is heavily damped, so even 2 stays like smoke. | float | 0.35 |
| Wind XHorizontal drift of the whole cloud field; sign picks the direction. Not clamped, but the scroll is damped — a few hundredths is already visible drift. | float | 0.03 |
| Wind YVertical drift of the cloud field; sign picks up or down. Not clamped, and the same damped scale as Wind X. | float | 0.0 |
| TiltTips the cloud deck away from the camera, in degrees, for a sky that recedes to a horizon. Any value works; it simply keeps rotating. | float | 12.0 |
| ImageCable any generator here and its bright silhouette becomes the cloud body itself — the shape inflates into 3D and moves with it. Unconnected gives a plain procedural sky. | image | — |
| Body DepthHow far the connected silhouette inflates toward and away from the camera. Clamped to 0.05…3; small is a flat cutout, large is a fat volumetric body. | float | 0.6 |
| Mask BlurSoftens the silhouette before it becomes cloud, so hard edges turn into vapour. Clamped to 0…0.3. | float | 0.06 |
| Mask InvertSwaps which side of the silhouette becomes cloud — the shape itself, or everything around it. | bool | false |
| GradientCable a Gradient node to colour the cloud from shadowed base to lit top. Only the first 16 stops are used; unconnected keeps the built-in palette. | structure | — |
| AmbientSkylight filling the shadowed undersides. Negative values are treated as 0; useful roughly 0…2, higher just flattens the clouds into grey. | float | 0.45 |
| MoonStrength of the key light that carves the lit faces and self-shadows. Negative values are treated as 0; useful roughly 0…3. | float | 0.85 |
| Light AzimuthWhich way the moon sits around the sky, in degrees. Any value works — it wraps around the horizon. | float | 40 |
| Light ElevationHow high the moon sits, in degrees. Clamped to -80…89; near 0 gives long raking rim light, near 89 lights the tops flat. | float | 35 |
| Light ContrastDepth of the self-shadowing — soft and milky versus deep black cores. At least 0.05, no upper limit; useful roughly 0.2…4. | float | 1.0 |
| SilverForward-scatter silver lining on the rims that face the moon. Clamped to 0…1. | float | 0.6 |
| ReliefCarves the folds — surface shading plus darkened cavities, so the cloud reads sculpted rather than smooth. Clamped to 0…1. | float | 0.7 |
| FibersStretches the noise into vertical strands for a muscle-fibre or storm-shear look. Clamped to 0…1; at 1 the strands carve clean through. | float | 0.45 |
| SharpnessUnsharp crispening plus a tighter temporal blend — detail snaps into focus but flickers more. Clamped to 0…1. | float | 0.5 |
| GrainFilm grain over the finished frame. Clamped to 0…2, where 0 is clean and 1 is a natural stock. | float | 0.5 |
| Grain SizeHow coarse each grain speck is, in pixels. Clamped to 0.5…16; large values read as noise blocks rather than film. | float | 1.0 |
| ExposureOverall brightness of the graded frame. Negative values are treated as 0; useful roughly 0.2…3, higher clips the highlights to white. | float | 1.0 |
| StarsBrightness of the twinkling star field behind the clouds; it only appears in the upper part of the frame. Clamped to 0…1. | float | 0.5 |
| Glow PowerBloom added to the brightest areas. 0 is off; negative values are treated as 0. Useful roughly 0…3. | float | 0 |
| Glow CutoffHow bright a pixel must be before it blooms. Negative values are treated as 0; around 0…1 is the useful band, higher restricts the glow to lightning alone. | float | 0.3 |
| Glow SpreadHow far the bloom reaches, from tight to very wide. Clamped to 1…5. | int | 3 |
| Auto LightningLets the storm fire its own strikes on a timer. Off means only the Trigger port can make lightning. | bool | true |
| Flash RateAverage automatic strikes per second. Negative values are treated as 0, which leaves Trigger as the only source. Above about 3 it becomes a continuous flicker. | float | 0.35 |
| Flash IntensityHow much light each strike dumps into the clouds. Negative values are treated as 0; useful roughly 0…3. | float | 1.0 |
| Flash DecayHow long a flash takes to fade, in seconds. At least 0.05; short values are a hard snap, a second or more is a slow rolling glow. | float | 0.35 |
| Flash ColorColour of the lightning light. Cold whites and blues read as distant storm, warm tints as heat lightning. | color | — |
| TriggerA rising edge fires a strike immediately. Cable it to a beat detector or any pulse to make the storm play in time. | bool | false |
| Flash PointsCable a point cloud to say where strikes happen, in screen coordinates. Only the first 256 points are used; unconnected lets the storm choose. | structure | — |
| AuroraBrightness of the aurora curtains behind the clouds. Clamped to 0…1. | float | 0.55 |
| Aurora SpeedHow fast the curtains ripple. Negative values are treated as 0; useful roughly 0…3. | float | 0.4 |
| Aurora HeightHow tall the curtains stand in the sky. Clamped to 0.05…1. | float | 0.35 |
| Aurora GradientCable a Gradient node to recolour the curtains. Only the first 16 stops are used; unconnected keeps the default teal to green to violet. | structure | — |
Outputs
| Port | Type |
|---|---|
| ImageCable any generator here and its bright silhouette becomes the cloud body itself — the shape inflates into 3D and moves with it. Unconnected gives a plain procedural sky. | image |
| Width | float |
| Height | float |
| Flash | float |
| Strike | bool |
Live Preview
How It Works
Magic Storm is a volumetric raymarcher running entirely on the GPU, in three phases per frame:
- Noise bake (only when Seed changes): a 128³ Perlin-Worley base volume and a 32³ Worley erosion volume are computed into 3D textures.
- Temporal march: a half- or quarter-resolution raymarch pass accumulates into a ping-pong
rgba16Floatpair, blending each frame with the previous one. The history blend is0.85 - 0.35 × Sharpness, so a crisper look uses a shorter history. The accumulation buffers reset whenever the viewport size, quality tier or seed changes. - Display grade: a full-resolution pass applies exposure, grain, stars and the filmic grade into the node's texture, with premultiplied-alpha blending.
Quality picks both the ray step count and the march resolution divisor:
| Quality | Value | Raymarch steps | March resolution |
|---|---|---|---|
| 0 | 0 | 28 | Quarter resolution |
| 1 (default) | 1 | 40 | Half resolution |
| 2 | 2 | 56 | Full resolution |
The cloud volume itself is shaped by a chain of controls: Coverage sets how much sky is filled, Clumping morphs between continuous fog (0) and distinct cloud bodies (1), Form is the remap steepness that sculpts hard cores, and Billow carves the cauliflower lobes. Density and Softness control opacity and edge feathering, Detail adds the high-frequency Worley erosion, and Scale zooms the whole noise field. Cloud Base and Cloud Height define the slab the volume occupies vertically, Wind X / Wind Y translate it, Churn and Churn Speed drive the curl-noise evolution that makes the clouds boil, and Tilt rotates the slab in degrees.
Shape source: when a generator texture is cabled into Image, the storm stops rendering a sky slab. The image's white/opaque silhouette becomes the cloud body, inflated to Body Depth thickness and moving with the shape. The source is downscaled into a 256² mipmapped pyramid, so Mask Blur is a single trilinear LOD read — cheap softening of the silhouette. Mask Invert flips which side of the silhouette becomes cloud.
Lighting and grade: the cloud color comes from a connected Gradient node (base → lit top). Without a gradient cable, the palette is deliberately pure neutral gray (0.10 → 0.92) — all color mood is yours. Light Azimuth and Light Elevation place the key light in degrees, Light Contrast deepens the self-shadow, Ambient lifts the shadows, Moon sets the key intensity, and Silver adds forward-scatter rims (silver lining). Relief carves folds via N·L plus cavity darkening, Fibers adds anisotropic ridged strands for a muscle-fiber look, Sharpness applies an unsharp mask (and tightens the temporal blend), Grain / Grain Size overlay film grain, Exposure scales the final brightness, and Stars adds a starfield behind the volume.
Lightning is a CPU-side scheduler feeding up to 8 simultaneous flashes to the shader as positions plus energies. Each flash uses an exponential decay envelope multiplied by a stuttered restrike flicker (0.72 + 0.28·sin(age·80 + …)) — real lightning pulses rather than fades. Auto Lightning with Flash Rate > 0 spawns flashes at seeded stochastic intervals; with Auto Lightning off, the storm strikes only on a rising edge of the Trigger port. Flash Points accepts a point cloud (up to 256 points) that constrains where strikes originate; otherwise strikes are placed inside the cloud slab (or over the mask body). Two outputs close the loop: Flash is the current total flash energy (0…1) and Strike is a one-frame true pulse per new flash.
Aurora overlays animated auroral curtains over the sky: Aurora is intensity, Aurora Speed the drift rate, Aurora Height the vertical extent, and Aurora Gradient re-colors the curtains (default teal → green → violet when no gradient is cabled).
Time comes from an internal clock advanced by dt × Speed (frame delta clamped to 1/15 s, so a stall never jumps the storm) — set Speed to 0 to freeze it, or drive the Time port with any value ≥ 0 to scrub deterministically. Width and Height report the full viewport fit size in Grafit units (origin at center, shorter edge mapping to [-1, 1]), so a Canvas covers exactly the visible frame. Setting Enable to false clears the texture.
Parameters in Depth
Core
| Port | Default | Meaning |
|---|---|---|
| Enable | true | Off clears the output texture |
| Seed | 0 | Rebakes the noise volumes and seeds the lightning scheduler |
| Speed | 1.0 | Time scale of the internal clock; 0 = freeze |
| Time | -1 | External clock in seconds; < 0 = internal clock |
| Quality | 1 | 0 = 28 steps / quarter-res, 1 = 40 / half-res, 2 = 56 / full-res |
Clouds
| Port | Default | Meaning |
|---|---|---|
| Coverage | 0.5 | 0–1 how much of the sky is filled |
| Clumping | 0.55 | 0 = continuous fog · 1 = distinct cloud bodies |
| Form | 1.7 | 0.1–6 remap steepness; higher sculpts harder cores |
| Billow | 0.65 | 0–1 cauliflower lobe carving |
| Density | 1.0 | Optical density of the volume |
| Softness | 0.35 | 0–1 edge feathering |
| Detail | 0.5 | 0–1 high-frequency Worley erosion |
| Scale | 1.0 | Noise field zoom (min 0.05); smaller = larger cloud features |
| Cloud Base | -0.35 | Bottom of the cloud slab, Grafit units |
| Cloud Height | 1.3 | Slab thickness, Grafit units (min 0.05) |
| Churn | 0.6 | Curl-noise boiling amplitude |
| Churn Speed | 0.35 | Curl-noise evolution rate |
| Wind X | 0.03 | Horizontal drift |
| Wind Y | 0.0 | Vertical drift |
| Tilt | 12.0 | Slab tilt, degrees |
Shape source
| Port | Default | Meaning |
|---|---|---|
| Image | — | Generator texture whose silhouette becomes the cloud body; unconnected = procedural sky |
| Body Depth | 0.6 | 0.05–3 inflation thickness of the silhouette body |
| Mask Blur | 0.06 | 0–0.3 silhouette softening (mip LOD selection) |
| Mask Invert | false | Swaps inside/outside of the silhouette |
Grade & lighting
| Port | Default | Meaning |
|---|---|---|
| Gradient | — | Cloud palette, base → lit top (max 16 stops). Unconnected = neutral gray |
| Ambient | 0.45 | Shadow fill light |
| Moon | 0.85 | Key light intensity |
| Light Azimuth | 40 | Key light direction around the scene, degrees |
| Light Elevation | 35 | Key light height, degrees (clamped -80…89) |
| Light Contrast | 1.0 | Self-shadow depth (min 0.05) |
| Silver | 0.6 | 0–1 forward-scatter rim / silver lining |
| Relief | 0.7 | 0–1 fold carving via N·L plus cavity darkening |
| Fibers | 0.45 | 0–1 anisotropic ridged strands |
| Sharpness | 0.5 | 0–1 unsharp mask; also shortens the temporal history |
| Grain | 0.5 | 0–2 film-grain overlay (0 = off) |
| Grain Size | 1.0 | 0.5–16 grain clump size in pixels |
| Exposure | 1.0 | Final brightness multiplier |
| Stars | 0.5 | 0–1 starfield intensity behind the volume |
| Glow Power | 0 | Post-process bloom intensity |
| Glow Cutoff | 0.3 | Brightness threshold for bloom |
| Glow Spread | 3 | Bloom radius, 1–5 |
Lightning & aurora
| Port | Default | Meaning |
|---|---|---|
| Auto Lightning | true | Off = the storm strikes only on Trigger |
| Flash Rate | 0.35 | Flashes per second (0 = Trigger only) |
| Flash Intensity | 1.0 | Brightness of each flash inside the volume |
| Flash Decay | 0.35 | Envelope decay time in seconds (min 0.05) |
| Flash Color | (1.0, 1.0, 1.0, 1.0) | Flash tint |
| Trigger | false | Rising edge = strike now |
| Flash Points | — | Point cloud constraining strike positions (max 256) |
| Aurora | 0.55 | 0–1 auroral curtain intensity |
| Aurora Speed | 0.4 | Curtain drift rate |
| Aurora Height | 0.35 | 0.05–1 vertical extent of the curtains |
| Aurora Gradient | — | Curtain palette (max 16 stops); default teal → green → violet |
Use Cases
- Logo in the clouds: Text or Image generator → Magic Storm
Image, Body Depth 1.2, Mask Blur 0.1 — the wordmark inflates into a real cloud body that churns in place - Beat-synced lightning: Audio Beat/onset → Trigger with Auto Lightning off, and the
Strikeoutput → a Canvas flash layer or a Do Once-gated cue for the rest of the patch - Reactive exposure: the
Flashoutput → Remap → another node's brightness, so the whole scene lights up when the storm fires - Aurora night sky: Coverage 0.25, Stars 0.9, Aurora 0.8 with a Gradient node feeding Aurora Gradient — a calm polar backdrop under a Canvas
- Deterministic render pass: Time driven by a Time node or a counter so the storm scrubs frame-exactly instead of running on the wall clock
- Directed strikes: Geometry to Points or L-System
Tips→ Flash Points, so lightning only fires from chosen positions in the frame
Tips
- Magic Storm renders every frame by design (living volume) and is the most expensive generator in the library — drop Quality to 0 while designing and raise it for the final look
- The default palette is deliberately neutral gray; cable a Gradient node to set the mood, and remember an unconnected structure input is ignored on purpose
- Sharpness does double duty — it sharpens and shortens the temporal history, so pushing it high can reintroduce raymarch noise; balance it with Quality
- Resizing the output window or changing Quality resets the temporal accumulation, so expect a brief re-converge
- Speed = 0 freezes the volume without freezing the rest of the patch; use the Time port instead when you need exact, repeatable playback
- Like every generator, the Image output only appears on screen through a Canvas node, and layer ordering is a Canvas property, not a Magic Storm one
Open Magic Storm in the interactive catalog →
Magic Storm is one of 381 nodes in Grafit Pro.
Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.