Points node
Notes to Points
Turns a pitch array (Pitch Detection Notes/Onsets/Chroma/Contour -- any float array) into a point cloud for Plexus, Point Animation and particles. Layout: Line (pitch → X · Width/Height), Circle (pitch class → angle · Radius/Amplitude), Spiral (octave per turn · Inner Radius/Radius/Amplitude · Depth > 0 = 3D helix), Noise Field (one point per bin drifting through a shared fBm field -- note activity ACCELERATES its point; Field Size/Amount/Noise Scale/Octaves/Speed/Acceleration/Seed · Depth > 0 = 3D cloud) -- each layout shows only its own controls. Threshold > 0 emits only sounding notes (not in Noise Field, which always keeps every point). Activities and Ages ride along per point -- Ages retrigger on the Onsets cable's rising edge through Onset Level (or on activity rising through Threshold when Onsets is unwired). Pulse turns every note into a pulse: the point lives Pulse Time milliseconds from the note's attack at its peak activity, then disappears even while the key is held -- play the same notes as taps instead of states. Trigger fires on every note attack (1 frame, or held Trigger Time ms).
Inputs
| Port | Type | Default |
|---|---|---|
| Pitch ArrayThe float array that becomes points — Pitch Detection's Notes, Chroma, Onsets or Contour, or any float stream. One point per bin; an empty array outputs nothing. | float | — |
| OnsetsOptional per-bin trigger array, the same length as the pitch array, used to restart the Ages output precisely. Leave it unwired and activity crossing Threshold retriggers instead. | float | — |
| Onset LevelHow high an onset value must rise to count as a fresh hit. Clamped to 0.01…1. | float | 0.3 |
| LayoutHow the bins are arranged — Line, Circle, Spiral or Noise Field. Values outside those four fall back to Line. | int | 0 |
| ThresholdMinimum activity a bin needs to emit a point. Clamped to 0…1; 0 emits every bin as a steady row, higher gives a sparse cloud that follows the melody. Noise Field ignores it. | float | 0.15 |
| Stable SlotsA sounding note keeps its index while it sounds (and Hold seconds after); a new note takes the lowest free slot — Merge, Point Animation and Plexus never see a point jump to another slot because a note appeared. Off = the compact list, re-packed every frame. | bool | true |
| HoldSeconds a released note keeps its slot before it becomes a frozen ghost (activity 0). Clamped to ≥ 0. | float | 1.5 |
| PulseOff: a point follows its note — held key, held point. On: every note is a pulse — from its attack (or an Onsets hit) the point lives Pulse Time at the note's peak activity, then vanishes even while the key is held; a short tap still lives the whole window. Retrigger = release and press again. | bool | false |
| Pulse TimeLifetime of a pulsed point, in milliseconds (Pulse on). Clamped to ≥ 1 ms; 100–500 feels percussive, seconds gives long tails. Hold still applies after the pulse when Stable Slots is on. | float | 250 |
| Trigger TimeShape of the Trigger output. 0 = a clean one-frame pulse whenever any note attacks (rising edge through Threshold, or an Onsets hit). Above 0 = held that many milliseconds after the last attack, restarted by every new attack. Clamped to ≥ 0. | float | 0 |
| WidthLine layout: how far the bins spread across X, in Grafit units. Not clamped; negative simply mirrors the order. | float | 1.6 |
| HeightLine layout: how far full activity lifts a point upward. Not clamped; negative pushes it down instead. | float | 0.6 |
| RadiusCircle layout: the resting ring radius. Spiral layout: the outer radius. Not clamped, but about 0…2 keeps the cloud on screen. | float | 0.8 |
| Inner RadiusSpiral layout: the radius the lowest octave starts at. Not clamped; setting it above Radius winds the spiral inward instead of outward. | float | 0.15 |
| AmplitudeCircle and Spiral: how far activity pushes a point out from its resting radius. Not clamped; negative pulls it inward on every hit. | float | 0.3 |
| DepthSpiral: how far the helix rises through Z from low to high octaves. Noise Field: the cloud's Z extent. Not clamped; 0 keeps everything flat and 2D. | float | 0.5 |
| Field SizeNoise Field: how wide the anchor points are spread before they start drifting. Not clamped; roughly 0…3 fills the view. | float | 1.2 |
| AmountNoise Field: how far each point may wander from its anchor. Not clamped; 0 freezes the arrangement and around 1 is a lively drift. | float | 1.0 |
| Noise ScaleNoise Field: spatial frequency of the drift field — low values move neighbours together, high values scatter them apart. Clamped to 0.01 and up. | float | 2.0 |
| OctavesNoise Field: how many layers of detail the drift has. Clamped to 1…6, where 1 is a pure smooth wave and higher adds fine turbulence. | int | 1 |
| SpeedNoise Field: the calm base drift rate the whole cloud shares. Clamped to 0 and up; 0 holds the field still until a note pushes a point. | float | 0.2 |
| AccelerationNoise Field: how far ahead note activity surges its own point through the field. Clamped to 0 and up; 0 means notes move nothing. | float | 5.0 |
| SeedNoise Field: changes the fixed anchor arrangement of the points. Any whole number gives a different but repeatable layout. | int | 0 |
| Position XMoves the whole cloud horizontally, in Grafit units. Any value works. | float | 0 |
| Position YMoves the whole cloud vertically, in Grafit units. Any value works. | float | 0 |
Outputs
| Port | Type |
|---|---|
| Points | structure |
| Activities | float |
| Ages | float |
| Count | int |
| Trigger | bool |
Live Anatomy
How It Works
Notes to Points converts any pitch-shaped float array — Pitch Detection's Notes [88], Chroma [12], Onsets, Contour, or any array you slice yourself — into a live point cloud on the standard Points port. The point count always equals the array length, and 88-entry arrays are pitch-aligned to the piano (A0 = MIDI 21), so every point IS a note with a stable identity.
Four layouts, each with its own adaptive controls (the inspector shows only what the active layout uses):
| Layout | Geometry | Controls |
|---|---|---|
| Line | Pitch left→right, activity lifts the point up — a breathing equalizer row. | Width, Height |
| Circle | The chromatic clock: pitch class = angle (C at 12 o'clock), activity pushes outward. | Radius, Amplitude |
| Spiral | Octave per turn; with Depth > 0 it becomes a 3D helix — bass far, treble near. | Inner Radius, Radius, Amplitude, Depth |
| Noise Field | One organism: every note owns a fixed, seeded home and drifts through a SHARED flowing noise field — one clock for the whole flock (murmuration, not chaos), a traveling wave giving it one direction. A sounding note's activity is acceleration: it surges ahead along the collective flow, then rejoins the flock as it fades. | Field Size, Amount, Noise Scale, Octaves, Speed, Acceleration, Seed, Depth |
Alongside positions the node emits per-point Activities (for size/color mapping) and Ages — seconds since each note last retriggered (rising edge on the Onsets cable through Onset Level, or on activity through Threshold when Onsets is unwired) — the raw material for fade-out trails.
Parameters in Depth
| Parameter | Meaning |
|---|---|
| Pitch Array | The activation array. Notes for full detail, Chroma for 12 clean points, Onsets for attack-only clouds. |
| Onsets + Onset Level | Optional retrigger feed for Ages: an onset crossing Onset Level (default 0.3) resets that note's age to zero. |
| Threshold | Above 0, only sounding notes emit points (a sparse cloud that dances with the melody); at 0 every bin always has its point. Hidden in Noise Field — the flock never loses members. |
| Depth | Z extent (0 = flat). Spiral → helix; Noise Field → true 3D cloud. Downstream needs nothing: Point Animation auto-detects 3D, Plexus has Z-Depth coloring, Points Visualize applies perspective. |
| Speed / Acceleration (Noise Field) | Speed is the calm collective drift; Acceleration is how hard a sounding note surges (activity × Acceleration adds phase lead). Low Speed + high Acceleration = dramatic music contrast. |
| Noise Scale / Octaves / Amount (Noise Field) | Spatial frequency of the field, fBm detail (1 = purest wave), and wander radius around each anchor. |
Use Cases
- The melody organism — Pitch Detection Notes → Notes to Points (Noise Field, Depth 0.6) → Plexus (Color Mode: Z-Depth): a 3D web that swims like a school of fish and erupts along the melody.
- Chromatic clock — Chroma → Circle layout → Points Visualize: twelve points around a clock face, the current key glowing outward.
- 3D helix of the harmony — Notes → Spiral (Depth 0.8) → Plexus: bass notes ignite in the distance, leads at your nose.
- Fading trails — Ages → Array Map/Remap → per-point opacity via Points Visualize: notes bloom and evaporate.
- Anything array-shaped — Audio Beat Detection Probs [4], EEG band arrays, Array Slice cuts — if it's a float array, it becomes a cloud.
Tips
- The Points output is the standard cloud currency — Plexus, Point Animation, Point Trail, Find Neighbors and the particle system all consume it directly.
- In Noise Field, keep Octaves at 1–2 for smooth flock motion; higher octaves add jitter.
- Stack a Point Animation (Curl, small Amount) after it for a second independent motion layer.
- Feed Onsets (not Notes) into Pitch Array for a strobe-like cloud that exists only at attacks.
Open Notes to Points in the interactive catalog →
Notes to Points 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.