Synthesizer Panel
Description
An analog monophonic synthesizer control panel in the tradition of the Roland SH-101 and Moog Minimoog Model D. Three functional sections — VCO (oscillator), VCF (filter), and ENVELOPE — are laid out left-to-right as on physical hardware. A VCA output level and LFO sync control sit at the far right. Panel color is the Roland SH-101's characteristic warm gray with amber indicators.
Reference Devices
Roland SH-101 (1982), Moog Minimoog Model D (1970/2016 reissue), Korg MS-20 (1978), Arturia Minibrute 2 (2018).
Layout
┌─ VCO ─────────────────┐ ┌─ VCF ─────────────────┐ ┌─ ENV ──────────────────────┐
│ WAVE OCT │ │ CUTOFF RESO ENV MOD │ │ A ──●─ D ──●─ S ──●─ │
│ ╔════════╗ [-1·0·+1] │ │ (○) (○) (○) │ │ R ──●─ │
│ ║ ◢ ◻ ║ │ │ │ └────────────────────────────┘
│ ║ ∿ ⊓ ║ │ │ KBD ┌═══┐ LFO │
│ ╚════════╝ │ │ SYNC │OFF│ SYNC │ ┌─ VCA ───┐ ● MIDI
│ │ │ └═══┘ [──] │ │ LVL ┃━┃ │ ● PWR
└────────────────────────┘ └───────────────────────────┘ └─────────┘ ● GATE
Assembly Rules
Container: Use
.panelwith default material. Landscape:min-width: 580px.padding: 16px 20px.background: linear-gradient(180deg, var(--bg-raised), var(--bg-surface)). The SH-101's face is a warm off-white in the original, but for dark-mode-first pudge-ui, use the standard dark surface. A thinborder-top: 3px solid var(--amber)at the very top edge evokes the Roland brand stripe.Section layout: Three side-by-side
chassis-panelcontainers withdisplay: flex; gap: 16px. Each section has a.cpanel-headerwith title in 9px mono uppercase. Sections:VCO,VCF, andENVELOPE.VCO section (
chassis-panelleft):- Waveform selector:
mode-dialcomponent. The SH-101 has 4 waveforms: SAW (◢), SQUARE (□), SINE (∿), PULSE (⊓). Setmode-dial-labelto cycle:◢(SAW) /□(SQR) /∿(SIN) /⊓(PLS). Default selected:◢SAW. Size: 96px effective (the mode-dial default is 120px; applytransform: scale(0.8)to reduce to 96x96px). LabelWAVEat 7px mono above. - Octave selector:
segmented-controlbelow the dial. Three segments:-1/0/+1. Active:0. LabelOCTat 7px mono above.margin-top: 12px.
- Waveform selector:
VCF section (
chassis-panelcenter):- Three
radial-knobcomponents in a horizontal row: CUTOFF (largest functional role, standard 80px), RESO (80px), ENV MOD (80px). Labels at 7px mono below:CUTOFF/RESO/ENV MOD. - KBD SYNC toggle:
toggle-switchin the OFF position, labelKBDabove andSYNCbelow at 7px mono. Toggles keyboard tracking of the filter. - LFO SYNC toggle: A second
toggle-switchbeside the KBD SYNC, labelLFOabove andSYNCbelow. - Both toggles sit in a horizontal row below the knobs,
gap: 16px; margin-top: 10px.
- Three
ENVELOPE section (
chassis-panelright):- Four
range-fadercomponents in a horizontal row: A (Attack), D (Decay), S (Sustain), R (Release). Each fader width:36px(compact — setwidth: 36pxon the.fader-h-wrap, which compresses the track). Labels at 7px mono above:A/D/S/R. Default positions: A=20% (fast attack), D=40% (medium decay), S=70% (sustained hold), R=30% (moderate release). - The SH-101 ADSR uses vertical faders, not horizontal sliders. Render these as vertical by rotating the range-fader: wrap each in a container with
transform: rotate(-90deg); transform-origin: center. Container height becomes the original width. This produces the characteristic vertical ADSR sliders of analog synthesizers.
- Four
VCA + status section: A narrow fourth
chassis-panelto the right of ENVELOPE. Contains:vertical-faderlabeledLVLat 7px mono above. Thumb at 80% (output level nearly open). Height: 80px.- Three
led-dotsstacked vertically to the right of the fader:.blueMIDI IN,.greenPWR,.amberGATE. Labels at 6px mono.
ADSR vertical variant note: Because
range-faderis natively horizontal, wrapping intransform: rotate(-90deg)requires careful sizing. The fader track becomes the vertical axis. Set eachrange-fadertrack towidth: 80px(this becomes the vertical height after rotation). The container div must bewidth: 16px; height: 80pxpost-rotation. Position:display: flex; align-items: center; justify-content: center. If the fader track appears horizontal after applying the rotation, add explicitheight: 80px; width: 16pxto the wrapper div and verify thattransform-origin: centeris set.Section panel spacing:
gap: 12pxbetween all chassis-panel sections. Each section background:var(--bg-raised)withborder: 1px solid var(--border-subtle).
Component Configuration
| Component | Section | Config |
|---|---|---|
| mode-dial | VCO | 4 modes: SAW SQR SIN PLS, default SAW, scale 0.8 |
| segmented-control | VCO | 3 segments: -1 / 0 / +1, active: 0, label: OCT |
| radial-knob (×3) | VCF | CUTOFF / RESO / ENV MOD, 80px, labels at 7px mono |
| toggle-switch (×2) | VCF | KBD SYNC (OFF) + LFO SYNC (OFF), side-by-side |
| range-fader (×4) | ENVELOPE | A D S R, rotated vertical, width 80px (height post-rotate) |
| vertical-fader | VCA | LVL, 80px height, thumb at 80% |
| led-dots (×3) | VCA | .blue MIDI, .green PWR, .amber GATE |
Constraints
- MUST render in landscape and be wider than it is tall — a portrait synthesizer panel is physically impossible; the ADSR section alone requires horizontal space.
- ADSR sliders MUST be rendered vertically (rotated
range-fader) — horizontal ADSR is not how any hardware synthesizer is built and immediately reads as wrong to musicians. - MUST render sections in order: VCO → VCF → ENVELOPE → VCA — this is the signal flow (oscillator → filter → amp) which is universal across all analog synthesizers. Reversing it is a non-starter.
- VCF cutoff knob MUST be visually prominent — on real hardware it is the largest or most central control; demoting it reads as a misunderstanding of synthesis.
- MUST NOT combine ADSR into a single stepper or selector — the four independent ADSR controls are the mechanical identity of envelope shaping; collapsing them defeats the hardware metaphor.
- Waveform selector (mode-dial) MUST show waveform symbols, not names — SAW / SQR / SIN / PLS as symbols (◢ □ ∿ ⊓) match the engravings on physical hardware panels.
Interactivity
- Mode dial (WAVE): Click to cycle through the 4 waveforms: SAW (◢) → SQR (□) → SIN (∿) → PLS (⊓). The center symbol updates and the notch rotates to indicate the current selection (0°, 90°, 180°, 270°).
- OCT segmented control: Click any segment (-1 / 0 / +1) to activate it.
- VCF radial knobs (CUTOFF, RESO, ENV MOD): Drag vertically to rotate — indicator dot angle updates in real-time. Range: −135° to +135°.
- KBD SYNC / LFO SYNC toggles: Click to toggle on/off. When ON, the toggle thumb slides and turns amber.
- ADSR faders: Drag vertically to move — updates fill height and thumb position for each of A, D, S, R.
- VCA LVL fader: Drag vertically to set output level.
- Gate LED: Pulses amber when VCA is above 50% — use a CSS animation conditioned on the fader position.
Components Used
Hand it to your agent
This is a multi-component assembly spec — pass it to your coding agent along with the foundation specs to build the complete interface in any framework.
— —