fb3a0cb77b2b80f931cbef57222dfc595d092220
Only two paths now: libav via dlopen, or demo signal. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
terminal-oscilloscope
A terminal-based oscilloscope with CRT phosphor physics, written in Nim using illwill.
Features
- CRT boot/shutdown animations — phosphor ramp, beam sweep, vertical collapse, dot fade
- Y-T and X-Y modes — time-domain waveform or Lissajous figures
- Phosphor persistence — beam bloom, decay trails, intensity-based shading
- Half-block rendering — 2x vertical resolution using Unicode
▀▄█characters - Live audio capture — visualises system audio via ffmpeg/PulseAudio monitor
- Demo mode — built-in synthesised waveforms when no audio source is available
Install
Requires Nim 2.x.
git clone https://github.com/rolandnsharp/terminal-oscilloscope.git
cd terminal-oscilloscope
nimble build
./osc
Controls
| Key | Action |
|---|---|
m |
Toggle Y-T / X-Y mode |
+ / - |
Increase / decrease gain (amplitude) |
] / [ |
Zoom in / out time axis |
g |
Cycle grid: full → crosshair → off |
space |
Freeze display |
d |
Cycle demo frequency presets |
q |
Quit (with CRT shutdown effect) |
Audio
Captures system audio automatically using ffmpeg with the PulseAudio/PipeWire monitor of your default output sink. Falls back to parec if available, or a built-in demo signal.
No extra packages needed — just ffmpeg (pre-installed on most Linux systems).
Credits
CRT turn-on/off animations inspired by AetherTune.
Languages
Nim
92.4%
Nix
7.6%
