Glyph
A touch-first drawing instrument. Sketch strokes into a 2D plane with your fingers; per-lane playheads sweep through the strokes and turn them into music — pitch from where you drew, timing from where the sweep crosses them, all snapped to scale. Internal Karplus-Strong pluck monitor convolved through a measured guitar body, plus reverb. Multi-touch parallel drawing, plane warps (mirror + rotation), per-stroke arm/ghost/mute, pinch-to-scale, multi-mode reading.
Overview
Glyph turns drawing into a musical performance. You ink strokes into a 2D plane with one or more fingers; up to four playheads sweep through them and trigger MIDI notes whose pitch comes from where on the plane each stroke was drawn. The visual stroke and the note that plays are perceptually one-to-one — the audience sees the playhead cross a stroke at the moment they hear the note.
What it is
- Four independent ink colors, each a separate lane with its own MIDI channel.
- Three reading modes per lane — DUAL (H + V sweeps, piano-roll feel), ORBIT (rotating clock-face ray with radial pitch), and global TRACE (continuous trace at quantize ticks across either DUAL or ORBIT).
- Per-lane polyrhythm. Each lane has its own sweep rate; the four sweeps drift apart visually and audibly.
- Plane warps — mirror-H, mirror-V, and continuous rotation. Non-destructive: original strokes stay; the warps are derived virtual copies.
- Per-stroke states via the ARM tool — tap any stroke to cycle Armed → Ghost (probabilistic) → Muted (silent) → Armed.
- Multi-touch parallel drawing — up to 4 fingers, each finger lands in a different lane.
- Pinch-to-scale the selected lane's strokes around the pinch midpoint.
- Built-in pluck-and-body sound engine — Karplus-Strong pluck convolved through a measured guitar IR + reverb tail. Live tone controls for body mix, decay, brightness, reverb. Plus per-lane MIDI out for routing to other instruments.
- MIDI CC output — each lane can also stream its scanned drawing data (contact X/Y position or playhead sweep) as continuous MIDI CC, so a drawn shape can modulate parameters on another instrument, not just trigger notes. Two independent CC mappings per lane.
- Scale-aware. 16 scales with root selection + bar-segmented scale sequencer for chord progressions.
- Pattern sequencer (SONG tab). Chain saved patterns into a song. Tap a pattern in the library to add a 1-bar step; tap again to extend it; build up a song one tap at a time. The engine loads each step on bar boundaries, in sync with host transport.
What it isn't
- Not a step sequencer — strokes are continuous, not bound to a fixed grid.
- Not a free-form synth — pitches snap to scale; the design enforces musical phrasing.
Quick Start
- Load Glyph in Liveset, your DAW, or open the standalone.
- Press PLAY — on the host transport in a DAW (Glyph follows host), or the PLAY chip in Glyph's own top bar in the standalone.
- Draw a stroke with one finger on the plane. The H + V sweep markers cross it; you hear a plucked-guitar note.
- Add 1–3 more fingers simultaneously — each finger draws into a different colored lane. Build a 4-color sketch in one gesture.
- Switch lanes via the side rail to dial settings. Each lane has its own MODE / LOOP / QNT chips in the top bar.
- Try the warps — tap WARP, turn on MIR-H + MIR-V, pick a rotation rate, and watch the plane spin and reflect.
- Tap ARM, then tap a stroke — it becomes dashed (Ghost) then ghosted (Muted) then back. Dial individual strokes in/out without redrawing.
- Save the patch — tap the preset chip in the top bar → + SAVE, name it.
The Interface
One main view with two pages (PLANE for performing, SCALE for picking key). A persistent top bar across both, and a side rail on the right for lane + tool selection.
Top Bar
Left to right (per-lane chips on the left, global toggles on the right). Subtle vertical hairlines separate the conceptual groups.
Controls come in two clear classes: toggles (single tap, lit = on) and value chips with a ▾ chevron that open a touch popup (LOOP, the preset chip, WARP).
- GLYPH
- Title. Tap to open the Settings dialog.
- PLAY / STOP
- Standalone transport. Tap to start the playheads sweeping; tap again to stop (stopping rewinds to bar 0). In a DAW this chip is a read-only indicator — the host transport drives Glyph.
- N BPM
- Standalone tempo. Drag vertically on the chip to adjust (up = faster, 20–300). In a DAW it displays the host tempo.
- L<N> ●
- Lane badge. Shows which lane the per-lane chips operate on. Switch lanes via side rail.
- DUAL · ORBIT
- Reading mode for the selected lane (per-lane).
- TRACE
ALL - Global toggle, grouped with the reading modes. When on, all lanes switch to continuous trace mode (overrides per-lane MODE for the read; per-lane LOOP + QNT still respected). The dim
ALLtag marks it as plane-wide, not per-lane like DUAL/ORBIT. - LOOP ▾
- Per-lane loop length (sweeps × bars). Tap to open the radial dial; reads
LOOP N BARS, value tinted in the lane color. - QNT ▾
- Onset quantize for the selected lane. Tap to open the quantize popover (
OFF·/16·/8·/4, each with a short label); the value is tinted in the lane color. - PATTERN NAME ▾
- Preset chip. Tap to open the pattern browser: every saved pattern organised into folders, tap to load, + SAVE / + FOLDER, drag to re-file, per-row rename / delete. Factory patterns are read-only. See § Presets.
- WARP ▾
- Opens the warp popover: MIR-H / MIR-V mirrors + rotation rate + direction, all in one place. The chip shows lit
H V Rbadges so you can see which warps are active at a glance. - PLANE · SCALE · SONG
- Page tabs. Folder-tab shape, attached to the panel below. Tap to switch which surface is showing.
- CLEAR ALL
- Resets the whole patch back to a blank slate (strokes + per-lane settings + warps + tone + scale). MIDI routing, theme, and the SONG are preserved.
PLANE Page
The performance surface.
- 8×8 hairline grid — decorative reference, always visible. Tinted to the active surface theme.
- Quantize overlay — when the selected lane's quantize is non-OFF, brighter accent-colored grid lines overlay the snap targets.
- Strokes — all four lanes' committed strokes. Armed strokes carry a soft luminous edge (the ink reads as emitted light, not flat lines) over a dim baseline, and brighten momentarily (250 ms) where the playhead crosses them. State affects render: Armed = solid + glow, Ghost = dashed, Muted = ghosted at 15% alpha. Effective-mute lanes' strokes also ghost out.
- Sweep markers (light beams) — one per lane, in lane color: a soft gradient shaft of light with a brighter core line. Selected lane is brighter and wider. DUAL lanes show vertical (H) and horizontal (V) beams; ORBIT lanes show a rotating ray from plane center (with a haloed center dot) plus (when selected) two faint reference circles for radial pitch zones.
- Mirror copies — when MIR-H or MIR-V is on, virtual stroke copies render at 0.55× alpha so you can see the symmetry.
- Rotation — when ROT is non-zero, the entire plane (strokes + mirror copies) rotates at the chosen rate.
- Pinch midpoint indicator — small
+cross with a ring while two fingers are pinching, showing the scaling anchor.
SCALE Page
Three stacked regions — root + scale picker + circle of fifths + lane pitch activity, a two-octave keyboard, and the scale-sequencer timeline. Same as fingerbang's scale page (shared core component).
SONG Page — Pattern Sequencer
Chain your saved patterns into a looping song. The page has three regions:
┌──────── TRANSPORT ────────────────────────────────────────────┐ │ PLAY SONG CLEAR tap a pattern -> +1 bar per tap │ │ NOW … STEP … BAR … │ ├──────────────────────────┬────────────────────────────────────┤ │ PATTERN LIBRARY │ SONG │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ ┌──┐ ┌──┐ ┌──┐ … │ │ │P1│ │P2│ │P3│ │P4│ │ │x3│ │x2│ │x1│ │ │ └──┘ └──┘ └──┘ └──┘ │ └──┘ └──┘ └──┘ │ └──────────────────────────┴────────────────────────────────────┘
Pattern Library (left). One thumbnail per saved preset. Each thumbnail renders the actual stroke geometry in lane colors so you can recognise patterns at a glance. Factory and user patterns both appear.
Song timeline (right). Each block is a step: a pattern + a bar count (x4 = play this pattern for 4 bars). The currently-playing step pulses cyan with a progress bar across its top edge.
Transport strip (top).
- PLAY SONG / STOP SONG
- Toggle. When you tap PLAY, the engine arms and waits for the next bar boundary so the song never starts mid-bar out of time. The readout shows
NOW: STARTING ON NEXT BARduring this pre-roll. - CLEAR
- Empties the song. (Does not touch the patterns themselves.)
- Readout
NOW <pattern>,STEP <i / total>,BAR <m / k>updating live.
Building a song
| Gesture | Effect |
|---|---|
| Tap a pattern in the library | Append a 1-bar step OR extend the last step by 1 bar if it's the same pattern. Tap-tap-tap = 3 bars of that pattern. |
| Tap a step in the timeline | Cycle its bar count 1 → 2 → … → 16 → 1. |
| Long-press (~650 ms) a step | Remove that step from the song. |
How playback works. When PLAY is on, the engine steps through the song in sync with the host transport. At every bar boundary it advances if the current step is done; on advance, it loads the next pattern's full state (strokes + warps + scale + tone) onto the plane. Stuck notes are auto-flushed on every step swap (pending noteOffs go out at sample 0, CC123 all-notes-off is emitted on every enabled lane channel).
Saving a song. The song is part of the plugin state, so it persists with DAW save / restore and gets included in plugin presets only if you getStateInformation (DAW); user presets you save via the preset menu capture the pattern alone, NOT the song. That separation is what lets you build a song out of multiple patterns without each pattern's save clobbering the song.
Side Rail
Right edge, top to bottom:
- 4 lane swatches — a solid chip in each lane's color (the exact stroke color, so you can map a swatch to its drawing at a glance), with an
L<N>label. Tap to select the lane (top-bar chips and badge follow). Selected swatch is brightest with corner-focus brackets; muted lanes desaturate. - M button under each swatch — toggle mute (warm red when active). Strokes ghost out and stop firing.
- S button under each swatch — toggle solo (warm yellow when active). Any solo'd lane mutes the others.
- Pen-thickness selector — three zones, Fat (top) / Med / Fine (bottom). Tap to set the active pen size for the next stroke you draw.
- BRUSH button — tap to open the brush popover: large tiles with a live preview of each brush (Pen / Calligraphy / Chord / Spray / Stipple) plus a SIZE strip, all in the selected lane's color. Picks the brush + size for the next stroke. Tap away (or the button stays lit showing the current brush). See § Brushes.
- ERASE button — toggle warm-red eraser tool. While on, plane touches sweep-erase rather than draw.
- ARM button — toggle warm-yellow arm tool. While on, taps cycle stroke state Armed → Ghost → Muted → Armed.
- TONE panel — four drag-to-set bars: BDY (body wet/dry), DEC (pluck decay), BRI (pluck brightness), RVB (reverb wet).
ERASE and ARM are mutually exclusive; activating one auto-disables the other. Default is DRAW (neither lit).
Drawing Strokes
The core gesture. Each stroke captures position + thickness + draw-speed; the playhead later turns it into musical events.
What gets captured
- Position — every drag point, normalized to 0..1.
- Pen thickness — captured at touch-down. Fine / Med / Fat. Sets note duration min and velocity baseline.
- Brush type — captured at touch-down (Pen / Calligraphy / Chord / Spray / Stipple). Determines how the stroke is drawn AND what a playhead crossing fires. See § Brushes.
- Per-point width (Calligraphy) — width tracks your draw speed moment-to-moment (fast = thin, slow = thick); the playhead reads the local width as velocity, so one gesture swells and fades.
- Draw speed — average px/sec captured on release. Modulates velocity ±0.15 around the thickness baseline (Pen).
- Lane color — whichever lane the finger landed in (see multi-touch below).
Each in-flight stroke renders at full saturation in its lane color. On release it joins the committed strokes at dim baseline alpha. Single-tap-with-no-drag is rejected (< 2 captured points).
Multi-Touch Parallel Drawing
Up to four fingers can draw simultaneously, one per lane. The first finger lands on the SELECTED lane (so single-finger drawing works as before); subsequent fingers fan out to the next free lanes in order. Each in-flight stroke renders in its own color. Lift any finger and that stroke commits; other fingers keep drawing independently.
Pinch-to-Scale
Two-finger pinch on the plane scales every stroke in the SELECTED lane around the pinch midpoint:
- Spread fingers → grow strokes outward
- Close fingers → shrink strokes toward midpoint
- Lift either finger → end pinch (transformed strokes stay where they ended)
A small accent-colored + cross + ring marks the scaling anchor while pinching. Pinch only triggers when exactly ONE in-flight stroke exists AND it has barely moved (< 8 px). If a stroke has been drawn for real (drag > 8 px), the second finger becomes a parallel-draw in another lane instead.
Erasing Strokes
- Double-tap any stroke (in DRAW mode) — instant one-shot erase. Hit-test threshold is 14 px; closest visible stroke wins regardless of lane.
- ERASE tool (side rail) — toggle warm-red ERASE. While on, any tap or drag through strokes erases them (4 px movement threshold for drag-erase). Pinch and draw paths are disabled. Tap ERASE again to return to DRAW.
Mirror copies are NOT separately tappable for erase — tap the original to remove all its mirrors.
Brushes — Pen · Calligraphy · Chord · Spray · Stipple
In Glyph the drawing is the score, so a brush isn't a paint style — it changes what a playhead plays when it crosses the stroke. Pick one from the BRUSH popover on the side rail (large tiles with a live preview + a SIZE strip). The brush is captured per-stroke at touch-down, so you can mix brushes freely across lanes and even within one lane. Brush + size persist with the patch.
| Brush | Looks like | A crossing plays | Reach for it when |
|---|---|---|---|
| Pen | even line | one note, fixed velocity | precise, predictable lines (the default) |
| Calligraphy | speed-tapered ribbon | one note; velocity from the LOCAL width | you want dynamics — a gesture that swells and fades |
| Chord | parallel 3-line band | a diatonic triad (root + 3rd + 5th) | instant harmony from a single line |
| Spray | scattered dot cloud | a short in-scale granular cluster | texture, clouds, shimmer |
| Stipple | evenly-spaced dots | a crisp staccato note | rhythmic, plucky runs (shines under TRACE) |
Calligraphy
Width tracks your draw speed — sweep fast and the line thins, slow down and it presses wide. Each playhead crossing reads the width at that point as velocity, so a single swooping stroke plays a crescendo or decrescendo. The SIZE setting is the base width the taper rides around. This is also how you get "thick vs thin" lines — there's no separate fixed line-size beyond the three SIZE steps.
Chord
A crossing fires a three-note triad instead of one note: the root plus the 3rd and 5th scale degrees above it, so the chord always lands in the active scale (and follows the scale sequencer). It renders as the main line flanked by two dim parallel echoes — the band you see is the chord you hear. Upper voices play a touch softer so the root leads. Great for turning a melodic contour into a chord progression in one gesture.
Spray
The stroke becomes a cloud of dots, and a crossing fires a short granular cluster — 3 / 4 / 5 grains (by SIZE) scattered across nearby scale degrees, soft and lightly varied so the burst reads as texture rather than a hard stack. The dot cloud is deterministic: it's stable across repaints and across save/reload, so a sprayed patch always looks the same.
Stipple
Renders as an evenly-spaced dotted line, and forces a short, staccato note regardless of how long the stroke is — so a stippled line plays as a crisp, plucky run. It's especially alive under TRACE, where the sweep reads along the dotted contour as a rhythmic sequence.
Reading Modes — DUAL · ORBIT · TRACE
Each lane reads its strokes via DUAL or ORBIT (per-lane MODE chip). The global TRACE toggle overrides both with continuous-trace fire.
DUAL (default)
Two sweep lines: vertical (H, moves left → right) and horizontal (V, moves top → bottom). Each crosses strokes independently.
- H sweep fires a stroke when the line passes the stroke's leftmost X. Pitch from Y at that point — top of plane = high, bottom = low (±12 semitones around middle C).
- V sweep fires when the line passes the topmost Y. Pitch from X at that point — right = high, left = low.
- A stroke fires from BOTH axes per pass at different pitches.
ORBIT
The sweep is a rotating ray from plane center, sweeping clockwise. One full rotation per "sweep at the lane's rate" (so rate 1× + ORBIT = one rotation per bar).
- Trigger angle = the angle of the FIRST POINT you drew (where you tapped down). Where you start = when in the rotation it fires.
- Pitch = radial distance of the first point (center = low −12 st, edge = high +12 st around middle C).
- Reference circles show at half- and full-radius for the selected ORBIT lane.
TRACE (global)
When the TRACE chip is on, every lane (regardless of its MODE chip) reads strokes continuously instead of one-fire-per-pass:
- At each quantize tick the sweep crosses, find every intersection of (sweep line / ray) with every stroke.
- Snap each intersection's pitch to scale.
- Fire only pitches NOT in the previous tick's cache (pitch-change gate prevents spam).
| Shape | TRACE plays |
|---|---|
| Horizontal line | one held note across its width (no retrigger while pitch holds) |
| Diagonal line | scale run, one note per scale-degree change |
| Circle | contrary-motion duet (top arc rises while bottom arc falls, converge on right) |
| Vertical line | chord stab on the tick that lands inside |
| Squiggle | dense in-key arpeggio |
Plane Warps — MIR-H · MIR-V · ROT
Three global non-destructive warps. Original strokes stay untouched; warps generate virtual copies at fire-time and render-time.
All three live in the WARP popover — tap the WARP ▾ chip in the top bar. The chip itself shows lit H V R badges so you can read the active warps without opening it. Inside the popover:
- MIR-H / MIR-V — large on/off toggles.
- ROTATION — a rate row (
OFF·1/16·1/8·1/4·1/2·1Xrevolutions per bar) plus a direction row (CW/CCW).OFFis a single tap.
MIR-H
Reflects the plane across the vertical centerline. A stroke at right also exists at left. In DUAL: pitch axis preserved (mirror in the X). In ORBIT: angle reflects (3 o'clock ↔ 9 o'clock; 12 + 6 fixed).
MIR-V
Reflects across the horizontal centerline. A stroke at top also at bottom. In DUAL: Y flips so the pitch axis flips (high becomes low). In ORBIT: angle reflects (12 ↔ 6; 3 + 9 fixed).
ROT (continuous rotation)
In the WARP popover, pick a rate (OFF · 1/16 · 1/8 · 1/4 · 1/2 · 1X revolutions per bar) and a direction (CW clockwise / CCW counter-clockwise). The entire plane (strokes + mirror copies) rotates at the chosen rate; both audio fires AND visual render rotate together. Tapping OFF stops it in one tap.
- ROT 1/16 — barely-perceptible drift over many bars
- ROT 1× — one full rotation per bar; dramatic
- CW vs CCW reverses the sweep of the rotation — pair opposing directions across lanes for counter-rotating motion
- Combine with MIR-H + MIR-V for kaleidoscopic patterns
Drawing during active rotation: strokes appear under your finger AND rotate with the rest of the plane (the captured points are inverse-rotated to the original frame; render forward-rotates with current offset). Pinch midpoint and double-tap erase work in screen coordinates so gestures land where you visually expect. All three warps persist with patch state.
Per-Stroke State — ARM Tool
Tap ARM on the side rail (warm yellow when active, mutually exclusive with ERASE). Then tap any stroke to cycle its state.
| State | Audio | Visual |
|---|---|---|
| ARMED (default) | fires every playhead crossing | solid stroke at normal alpha |
| GHOST (1st tap) | ~40% probability per fire opportunity | dashed stroke at slightly higher alpha |
| MUTED (2nd tap) | never fires | ghosted at 15% alpha |
| (3rd tap → back to ARMED) |
Difference from lane mute: lane mute (M button) silences a whole color. Stroke mute silences ONE drawn line. Build up dense planes, then dial individual strokes in/out for live arrangement. State persists with the patch.
Lanes & Polyrhythm
Four lanes, each with independent strokes (color-coded), reading mode (DUAL or ORBIT), loop length (sweeps × bars, via the LOOP dial), quantize (off · /16 · /8 · /4), mute and solo state, and MIDI channel (configured in Settings → MIDI tab).
Lane colors come from the selected Color Palette (Settings), so all four lanes recolor when you switch palettes. Default MIDI channels are 1–4.
Polyrhythmic example: give each lane a different LOOP length — Lane 1 = 1 bar, Lane 2 = 2 bars, Lane 3 = 3 bars, Lane 4 = 4 bars (or vary the sweeps-per-loop) — and the four sweep markers drift apart over time, four firing patterns interlocking musically. With TRACE on, the polyrhythm becomes polytemporal melodic ribbons.
Pen, Color, Mute & Solo
(See § Side Rail for layout.)
- Lane swatch — tap to select the lane
- M — per-lane mute (warm red when active)
- S — per-lane solo (warm yellow when active); any-soloed mutes non-soloed
- Pen thickness — Fat / Med / Fine, sets velocity baseline + duration min for the next stroke
| Pen | Visual | Min duration | Vel base |
|---|---|---|---|
| Fine | 1.5 px | ~1/32 | 0.55 |
| Med | 3.0 px | ~1/16 | 0.75 |
| Fat | 5.5 px | ~1/8 | 0.95 |
Pen thickness also sets the base SIZE for every brush — Calligraphy tapers around it, Spray scales its cloud density/spread, Stipple its dot spacing. Set it from the 3-zone rail selector or the SIZE strip in the BRUSH popover.
Quantization & Scales
Onset quantize
Tap the QNT chip to open the quantize popover and pick a grid for the selected lane. When non-OFF, each stroke's trigger position snaps to that grid (16 / 8 / 4 slots per sweep traversal). The stroke fires when the sweep crosses the SNAPPED position, not the raw geometry — sloppy drawing still lands on the beat.
- rate
1×+/16= 16ths per bar - rate
2×+/16= 32nds per bar
Scale snap
Every fire runs through ScaleManager::snapToScale before reaching the synth or MIDI output. Sixteen scales available: Chromatic, Major, Minor, the modes (Dorian etc.), Pentatonic, Blues, Harmonic Minor, Melodic Minor, Whole Tone, Diminished H-W / W-H, Arpeggio. Change the scale mid-performance and every subsequent fire transposes immediately.
Scale Sequencer
Same as fingerbang's scale sequencer (shared core component). On the SCALE page, tap SEQ in the timeline strip to enable. Add segments with +; tap any segment to edit (root, scale, length 1–16 bars). The active root + scale follow the segment under the bar position automatically.
Microtuning — Tuning Systems
Glyph can play in non-Western tuning systems — the real intonation of maqam, raga, and historical tunings, not just their notes approximated on 12 equal steps. A tuning system is global: it sets how many pitches divide the octave and their exact frequencies, applied to everything the playheads trigger. The scale/segment chooses which of those pitches form the current mode.
Choosing a system — tap the TUNING ▾ chip on the bottom scale strip or the SCALE tab. Eleven systems ship:
| System | Divisions / octave | Character |
|---|---|---|
| Western 12-TET | 12 (equal) | The default — standard tuning, no retuning |
| Pythagorean | 12 | Pure fifths (3-limit) |
| Just Intonation | 12 | Pure thirds + fifths (5-limit) |
| Arabic 12-tone | 12 | Neutral 2nd / 3rd approximation |
| Chinese pentatonic | 12 (5 used) | Just pentatonic |
| Indian raga (12) | 12 | Just raga scales |
| Arabic maqam (24) | 24 (quarter-tones) | Rast · Bayati · Hijaz · Saba |
| Turkish makam (53) | 53 (Holdrian comma) | Rast · Uşşak · Hicaz |
| Indian 22-shruti | 22 (just) | Yaman · Bhairav · Kafi |
| Persian dastgah | 24 approx | Shur · Homayun · Mahur |
| Chinese 12-lü | 12 (Pythagorean) | Gong · Shang · Jue · Zhi · Yu |
When a non-Western system is active the SCALE tab swaps the circle of fifths for a tuning wheel (the system's pitches placed around the octave by their true cents) and the keyboard strips become N-division strips.
How it sounds — the internal pluck monitor plays the exact tuned pitch, and in TRACE mode the glide bow slides to the tuned scale tone (QNT on). MIDI Out delivers it as nearest note + per-lane pitch bend (each lane has its own MIDI channel). The active system is saved with the patch; Western 12-TET (default) sends no bend.
Sound — Pluck + Body + Reverb
Glyph has a built-in mono Karplus-Strong pluck monitor convolved through a measured guitar body IR (CC0 from pe_mace's Freesound pack), then through a Freeverb-style reverb. You always hear the internal sound regardless of MIDI routing. External MIDI output is per-lane configurable (Settings → MIDI tab).
Stroke fire → Pluck voice (16-poly) → Body convolver (guitar IR) → Reverb → Output
TONE controls
Four drag-to-set bars on the side rail (0–99 readout):
| Control | Range | Effect |
|---|---|---|
| BDY | 0..99 | Body convolver wet/dry mix. 0 = pure dry pluck, 99 = pure body-convolved |
| DEC | 0..99 | Pluck decay (loop gain). Low = staccato, high = long sustained ringing |
| BRI | 0..99 | Pluck excitation HF content. Low = warm/dark, high = sharp/bright |
| RVB | 0..99 | Reverb wet mix. Auto-bypasses below 1% to save CPU |
Damping, stiffness, and reverb size/predelay/damping/width all use sensible defaults internally. All four tone params persist with the patch — a "warm and long" preset and a "tight and bright" preset save independently.
Presets
Glyph saves the patch state (strokes + lane settings + warps + tone + scale) as a preset. In the SONG tab a preset is also called a "pattern" — they're the same thing.
The preset chip in the top bar shows the currently-loaded pattern's name with a ▾ chevron. Tap it to open the pattern browser — factory patterns (read-only) on top, your patterns below, organised into folders:
| Gesture | Action |
|---|---|
| Tap a pattern | Load it instantly — the loaded one is marked LOADED |
| Tap a folder | Open / close it |
| + SAVE | Save the current patch into the selected folder (saving over an existing name overwrites it in place) |
| + FOLDER | Create a folder inside the selected folder (top level if none selected) |
| Pencil / trash (on the selected row) | Rename / delete — double-clicking a name also renames |
| Drag a pattern onto a folder | Move it there; drop onto another pattern to slot it at that position |
Deleting a folder never deletes its patterns — they move up to the parent. The browser opens with the loaded pattern revealed.
Renaming is song-safe — song steps reference patterns by name, and a rename made in the browser updates every song step that points at the old name automatically.
User presets live in %APPDATA%/Glyph/Presets/<name>.xml (Windows) or the equivalent on macOS; the folder organisation is stored alongside them.
Settings, Themes & MIDI Routing
Tap GLYPH in the top bar to open the Settings dialog (three tabs: Settings / MIDI / About).
- Settings — surface theme, color palette, per-lane color swatches, UI scale.
- Surface Theme — changes the whole instrument's atmosphere: Dark, Midnight (blue-black), High Contrast, Void (pure black / green accent), Warm (brown-black / amber accent). Canvas, panels, grid tint, text, and accent all shift; the SCALE tab and bottom strip follow too.
- Color Palette — recolors all four lanes (strokes + swatches). Alongside the originals (Cyberpunk, Neon, Pastel, etc.) there are three palettes tuned for drawing images on black — Aurora, Prism, Candy — whose four lane hues are spread far apart so simultaneous drawings stay distinct and glow on the dark canvas.
- Color swatches — override any individual lane color (marks the palette as "Custom").
- MIDI — per-lane note routing AND CC output: Enable / Channel (1-16) / Octave (-4..+4) per lane, plus a Route All master + shared channel. CC out has two sub-rows per lane (see § MIDI CC Output).
- About — version, link, quickstart, features.
First-run defaults: lanes 1–4 pre-enabled on MIDI channels 1–4. Drop Glyph in Liveset, route to a synth, and it routes immediately.
MIDI CC Output — Modulate Other Instruments
Beyond notes, each lane can stream its scanned drawing data as MIDI CC — so a shape doesn't just play pitches, it can modulate a parameter (filter cutoff, etc.) on another instrument. Configure it in Settings → MIDI, where every lane has two independent CC mappings ("CC out 1" / "CC out 2") — send two streams at once, e.g. X position on one controller and Y on another.
Each mapping has three controls:
- Enable
- Turns this CC stream on. Independent of the lane's note-output enable, so you can send modulation without notes, or both.
- CC number
- Tap to pick the controller. The picker lists common named CCs (Mod Wheel, Volume, Pan, Expression, Resonance, Cutoff, Reverb, Sustain…) at the top, plus the full 0–127 range under "All".
- Source
- Which scanned value drives the CC (see below).
| Source | What it sends |
|---|---|
| Contact X | The horizontal position where the playhead last crossed the ink (held between fires). Follows where you drew. |
| Contact Y | The vertical position of the last contact. |
| Sweep Pos | The playhead's 0→100% loop position — a per-lane ramp/LFO that streams continuously even with no strokes. |
Defaults: slot 1 → Contact X, slot 2 → Contact Y — so enabling both immediately sends the drawing's X and Y as two CCs. Behavior: the CC rides the same channel as that lane's notes (or the shared channel under Route All). It's sent continuously while the host transport plays, and only when the 7-bit value actually changes — so it never floods the MIDI stream. The value holds at the receiver when you stop.
Workflows & Recipes
Recipe 1 · Polyrhythmic four-finger sketch
- Hit play.
- Put four fingers on the plane simultaneously, draw four short strokes in different positions.
- Each finger went into a different lane. Now set per-lane LOOP length: tap each lane's swatch, then the LOOP chip, and dial different sweeps×bars per lane for instant polyrhythm.
- Open WARP, turn on MIR-H, and set rotation to 1/4 — the patterns evolve.
Recipe 2 · Trace-mode melodic phrase
- Lane 1 DUAL, LOOP 1 bar, QNT /16. Draw an upward diagonal line across the plane.
- Tap TRACE. Hit play.
- The diagonal becomes a clean scale run, one note per 16th. Switch scale to Pentatonic — instant pentatonic riff.
- Add a circle on lane 2, set lane 2 ORBIT, LOOP 2 bars, QNT /8. ORBIT-TRACE on a circle = contrary-motion arpeggio per rotation.
Recipe 3 · Live arrangement with ARM
- Build a dense plane: many strokes across all four lanes.
- Tap ARM on the side rail.
- Tap individual strokes to cycle: dashed (ghost) for "sometimes," ghosted (mute) for "off."
- As the song progresses, tap to dial strokes in/out. Untouched strokes stay armed.
- Drop ARM (or hit ERASE for a more aggressive cut).
Recipe 4 · Kaleidoscopic generative pad
- Draw a single long curve in lane 1.
- Open WARP, turn MIR-H + MIR-V on. Now the curve has 4-fold symmetry.
- In the same popover, set rotation to 1/4 (try CCW). Slow rotation.
- Tap TRACE. Switch scale to Pentatonic.
- Endless evolving generative pad from one drawn curve.
Recipe 5 · Pinch + tone for tension
- Draw a wide stroke in lane 1. Hit play; hear the note.
- Pinch it inward (two fingers, close). The stroke shrinks; pitch range and duration both compress = punchier note.
- Pinch back out for sustain release.
- Drag DEC up for ringing tail; pull RVB up for atmosphere.
Recipe 6 · Save patch banks for live use
- Build patch A. Tap the preset chip → + SAVE → "verse."
- Hit CLEAR ALL. Build patch B. Save as "drop."
- CLEAR ALL → patch C. Save as "outro."
- Put all three in one folder (+ FOLDER → "set one", drag them in) so the whole set sits together.
- Live: tap the preset chip and tap any patch to instantly load it.
Recipe 7 · Build a song from saved patterns
- Save 3–5 different patches as patterns (see Recipe 6) — give them recognisable names.
- Switch to the SONG tab. The library shows a thumbnail of every saved pattern.
- Tap a pattern → it appears in the song timeline as
x1. Tap it again →x2. Again →x3. (Each tap = +1 bar.) - Tap a different pattern → starts a new step. Build up the form:
INTRO x4 · VERSE x8 · CHORUS x4 · VERSE x8 · OUTRO x2. - To tweak a step's length, tap it in the timeline — cycles bars 1 → 2 → … → 16 → 1. Long-press to delete.
- Start your host transport, then tap PLAY SONG. The engine waits for the next bar boundary, then loads each step's pattern in sync. The currently-playing step pulses cyan with a progress bar across its top.
- The song loops forever. CLEAR empties it.
Recipe 8 · Layer brushes for a full texture
- Lane 1: tap BRUSH → Chord, draw a slow descending curve. Hit play — the curve plays a chord progression that follows your scale.
- Lane 2: BRUSH → Calligraphy, draw a fast-then-slow swoop. It plays a single melodic line that swells as you slowed down (velocity from the taper).
- Lane 3: BRUSH → Spray, SIZE Fat, scribble a small patch. It adds a granular shimmer cluster on every crossing.
- Lane 4: BRUSH → Stipple, draw a straight line, turn on TRACE with QNT /16. The dotted line plays a staccato rhythmic run along its length.
- Four brushes, four musical roles — harmony, melody+dynamics, texture, and rhythm — from four drawn gestures.
MIDI & Host Setup
Internal pluck monitor always plays (so you always hear what you drew). External MIDI is per-lane configurable in Settings → MIDI.
Stroke fire → ScaleManager.snapToScale → midiNote
├─→ Internal Pluck (always)
│ → Body convolver → Reverb → audio out
└─→ External MIDI on lane channel (if enabled)
→ downstream synth
Master MIDI input passes through to the pluck monitor too — you can audition the engine from an external controller. In Liveset, use the per-tab → chip to route Glyph's MIDI into another tab's plugin. Each lane's channel is preserved so the receiver can split per-channel.
Tips & Troubleshooting
Tips
- Use scale snap aggressively. Pentatonic or Blues = no wrong notes.
- Quantize tames sloppy drawing. /8 turns scribbles into clean phrases.
- Multi-touch is the killer feature. Four fingers = four-color sketch in one motion.
- TRACE turns shapes into melodies. Diagonals = scale runs, circles = contrary-motion duets, vertical lines = chord stabs.
- Warps are non-destructive. Toggle MIR/ROT freely; your strokes are never harmed.
- ARM is for arrangement. Build dense, then tap-tap-tap to dial in/out.
- CLEAR ALL is destructive. Save first. (It does NOT clear the SONG, though — that's separate.)
- One color per role. Lane 1 lead, 2 bass, 3 pad, 4 accent — readable for the audience.
- Build patterns first, song second. Save 4–6 patches as patterns on the PLANE, then assemble the SONG by tapping them in order. Trying to build patterns inside the SONG tab is harder than building them on the PLANE.
- Don't draw while a song is playing. The next bar boundary will reload the step's pattern and overwrite your edits. Stop the song to edit.
Troubleshooting
| Symptom | Fix |
|---|---|
| No sound | Internal monitor is always on; check audio device. If only external MIDI is silent, open Settings → MIDI and enable lanes / set channels. |
| Notes sound out of key | Check the active scale on the SCALE page. |
| Pinch keeps starting strokes | Pinch only triggers if the first finger has drawn < 8 px. Tap-and-hold both fingers near each other before drawing. |
| TRACE silent | Make sure that lane's QNT is not OFF. TRACE needs a grid clock. |
| ORBIT fires "wrong place" | Trigger is the FIRST point you drew (tap-down location). Start the stroke where you want the fire to happen. |
| Multi-touch fingers all going to same lane | By design: the FIRST finger uses the selected lane; subsequent fingers fan to other lanes. Lift one finger to free its slot. |
| Erase mode drag is missing strokes | 4 px threshold; sweep more aggressively or use double-tap. |
| Stroke is dashed and barely fires | It's GHOSTED (~40% probability). Tap ARM, tap the stroke once to mute (silent), or twice to re-arm. |
| Preset chip shows "(NONE)" | No saved patterns yet. Tap the chip → + SAVE to save your first. |
| SONG won't start playing | Make sure the host transport is running. PLAY SONG arms the engine but it needs bar advances from the host to actually step. In standalone, use the standalone transport. |
| Pattern in the song says "(MISSING)" | That pattern was deleted from the library after the song was built. Either restore the pattern (same name) or long-press the step to remove it. (Renames don't cause this — a rename in the browser updates song steps automatically.) |
| Edits to a pattern aren't showing in the song | Songs reference patterns by NAME. After editing, save the pattern (Overwrite) so the next time the song loads that step it pulls in your changes. |
Control Reference
Alphabetical.
| Control | Location | Values | Notes |
|---|---|---|---|
| ARM | Side rail | toggle | Tap-cycle stroke state on plane (mutually exclusive with ERASE) |
| BDY | Side rail TONE | drag 0..99 | Body convolver wet/dry |
| BRI | Side rail TONE | drag 0..99 | Pluck excitation brightness |
| BRUSH | Side rail | popover | Pick brush (Pen / Calligraphy / Chord / Spray / Stipple) + size for the next stroke |
| CC out 1 / 2 | Settings → MIDI | per-lane | Stream scanned data as MIDI CC: enable + CC number + source (Contact X / Contact Y / Sweep Pos) |
| CLEAR | Song transport | button | Empty the song (patterns themselves are not touched) |
| CLEAR ALL | Top bar | button | Reset whole patch (strokes + warps + tone + scale; NOT MIDI/theme/SONG) |
| Color Palette | Settings | dropdown | Recolor all lanes; image palettes Aurora / Prism / Candy |
| DEC | Side rail TONE | drag 0..99 | Pluck decay (loop gain) |
| DUAL · ORBIT | Top bar | toggle | Reading mode for selected lane |
| ERASE | Side rail | toggle | Sweep-erase strokes (mutually exclusive with ARM) |
| GLYPH (title) | Top bar | button | Open Settings dialog |
| L<N> badge | Top bar | display | Selected lane indicator |
| Lane swatches | Side rail | tap | Select active lane |
| Library thumbnail | SONG library | tap | Append a 1-bar step (or extend last step by 1 bar) |
| LOOP | Top bar | popup (dial) | Per-lane loop length (sweeps × bars) |
| M | Side rail (per lane) | toggle | Mute lane |
| MIR-H / MIR-V | WARP popover | toggle | Global plane mirrors |
| QNT | Top bar | popup | Onset quantize for selected lane (OFF / /16 / /8 / /4) |
| Pen thickness | Side rail | 3-zone | Fat / Med / Fine base size for next stroke (also in the BRUSH popover SIZE strip) |
| PLANE · SCALE · SONG | Top bar | tab | Page selector |
| Plane double-tap | Plane | gesture | One-shot erase nearest stroke |
| Plane drag (1 finger) | Plane | gesture | Draw stroke in selected lane (or in a free lane if multi-touch) |
| Plane pinch (2 fingers) | Plane | gesture | Scale selected lane's strokes around midpoint |
| PLAY SONG / STOP SONG | Song transport | toggle | Arm / disarm song playback (waits for next bar to start) |
| Preset chip | Top bar | browser (folders) | Tap = load, drag = move, + SAVE / + FOLDER, per-row rename/delete |
| ROT (rotation) | WARP popover | rate + dir | OFF / /16 / /8 / /4 / /2 / 1X rev/bar, direction CW or CCW |
| RVB | Side rail TONE | drag 0..99 | Reverb wet mix |
| ROOT grid | SCALE page | C–B | Tonic picker (dimmed under SEQ) |
| S | Side rail (per lane) | toggle | Solo lane |
| SCALE grid | SCALE page | 16 scales | Scale type picker |
| SEQ | SCALE timeline | toggle | Enable scale sequencer |
| Segment + | SCALE timeline | button | Add scale-sequencer segment |
| Step (timeline) | SONG timeline | tap / long-press | Tap to cycle bar count (1..16); long-press to remove |
| Surface Theme | Settings | dropdown | Whole-instrument theme: Dark / Midnight / High Contrast / Void / Warm |
| TRACE | Top bar (reading cluster) | toggle | Global continuous-trace mode; ALL tag marks its plane-wide scope |
| TUNING | SCALE tab / strip chip | 11 systems | Global microtuning; default Western 12-TET |
| WARP | Top bar | popup | Open warp popover: MIR-H / MIR-V + rotation (rate + CW/CCW). Chip shows lit H/V/R badges |