PNDLM
Reference Manual — v1.4
Overview
PNDLM is a creative tool and platform designed for the observation of interference patterns, color relationships, and motion through geometry. Images are created from the interplay between three oscilloscopes (in XY mode) producing their own independent Lissajous figures (similar to Blackburn pendulums), each of which can also be independently rotated or scaled, with toggled animation ability. What is it for? Curiosity? Exploring relativity and change? A novel platform for visual art? Sure, why not.
Top Bar
Each of the oscilloscopes can be individually controlled with their slider stacks, or altered as a group using the meta buttons at the top. The meta buttons are preceded by Save and Load buttons, indicated by the Disk and Folder icons, which allow you to save and recall JSON files of your settings.
- 💾 Save — Saves the current state of all settings to a JSON file on your device.
- 📁 Load — Loads a previously saved JSON settings file.
The remaining meta buttons are as follows:
- ⚡ Lightning (Chaos) — Randomizes most settings across all three scopes.
- 🎨 Palette — Randomizes color elements (hue, saturation, brightness, opacity) across all unlocked scopes.
- 🌊 Wave — Randomizes waveform and frequency elements across all unlocked scopes.
- 🎚️ Slider — Randomizes amplitude/scale settings across all unlocked scopes.
- 🌪️ Tornado — Toggles rotation animation on or off. When toggled on, also randomizes rotation speeds. Button turns red when active.
- ❄️ Snowflake — Toggles amplitude modulation (scale animation) on or off. When toggled on, also randomizes modulation frequencies. Button turns red when active. Off by default.
- ? Help — Opens this manual. Congratulations, you've done it!
Global Sliders
Beneath the meta button row are two full-width sliders that apply globally across all scopes.
Color Probability
Controls the probability bias when the Lightning or Palette buttons randomize colors. Sliding left biases toward neutral/desaturated colors; sliding right biases toward saturated colors.
Layer Order
Allows manual reordering of the three oscilloscope layers. The slider snaps to one of six possible orderings (all permutations of the three scopes) and determines which scope is drawn on top, in the middle, and at the bottom.
Scope Slider Stacks
The three columns of sliders beneath the canvas each control one oscilloscope. The slider stacks are intentionally unlabeled to keep the interface minimal and to encourage experimentation. For reference, the controls run top to bottom as follows:
- Lock — Rounded square toggle at the top of each stack. When locked (red), that scope's settings are protected from all randomizer buttons.
- Frequency 1 — X-axis oscillator frequency. Range: 15 Hz to 10,000 Hz.
- Waveform 1 — X-axis waveform shape. Morphs continuously from sine (left) through triangle (center) to sawtooth (right).
- Frequency 2 — Y-axis oscillator frequency. Range: 15 Hz to 10,000 Hz.
- Waveform 2 — Y-axis waveform shape. Same morphing range as Waveform 1.
- Hue — Color hue of the scope's line. Range: 0–360°.
- Saturation — Color saturation. Range: 0% (grey) to 100% (full color).
- Brightness — Color brightness. Range: 0% (black) to 100% (white).
- Opacity — Line opacity/transparency. Range: 0 (invisible) to 1 (fully opaque).
- Amplitude / Scale — Overall size of the Lissajous figure. Range: 0 (point) to 1 (fills canvas).
- Amplitude Modulation Rate — Speed of the scale animation when the Snowflake toggle is active. Range: 0 to 10 Hz.
- Rotational Position — Static rotation angle of the figure. Useful for fine-tuning orientation when rotation animation is off. Range: 0 to 2π radians.
- Rotation Speed — Speed and direction of rotation animation when the Tornado toggle is active. Bipolar: negative values rotate counterclockwise, positive clockwise. Range: −30 to +30.
Notes
PNDLM will work on mobile but is not optimized for small screens. The controls are dense and are easiest to use on a larger display.
Save files are plain JSON. Older saves will always load correctly in newer versions of the app — any settings added in newer versions will simply use their defaults.