LJV - Lissajous Visualizer
A beautiful real-time music visualizer that creates mesmerizing Lissajous curves from your audio files. Built with modern web technologies and packaged as a native desktop application.
output.mov
Note that the demo audio is scuffed because I'm recording the playback. Also, if the video doesn't work, try YouTube
Music in the demo is Razihel - Love U provided by NoCopyrightSounds
What are Lissajous Curves?
Lissajous curves are mathematical figures created by plotting two sinusoidal oscillations against each other. In LJV, the left and right audio channels are mapped to the X and Y axes respectively, creating stunning visual patterns that dance to your music.
Features
- Real-time Visualization: Hardware-accelerated WebGL2 rendering for smooth 60fps performance
- Beautiful Trail Effects: Additive blending creates natural glowing trails
- Audio File Support: Load and visualize any audio file supported by your browser
- Customizable Parameters:
- Point size and count
- Trail length
- Color customization
- Rotation and zoom controls
- Render modes (points/lines)
- Native Desktop Experience: Built with Tauri for a lightweight, secure application
Getting Started
Prerequisites
- Bun (JavaScript runtime)
- Rust (latest stable)
- System dependencies for Tauri (see Tauri Prerequisites)
Installation
# Clone the repository git clone https://github.com/ThatXliner/ljv/tree/main?tab=readme-ov-file cd ljv # Install dependencies bun install
Web Build & GitHub Pages
This project can run both as a Tauri desktop app and as a static web app. The frontend detects whether it's running inside Tauri at runtime and uses platform-appropriate APIs (Tauri file dialog + fs) or standard Web APIs (file input, fetch).
To build a web-friendly static site and deploy to GitHub Pages:
-
Set the GH_PAGES_BASE environment variable if your site will be served from a subpath (for example, "/my-repo/"). If your repository is named
ljvand you host athttps://<user>.github.io/ljv, set GH_PAGES_BASE to/ljv/. -
Build the site:
GH_PAGES_BASE=/ljv/ bun run build:web
-
Commit the generated
distorbuildoutput (SvelteKit will output tobuild/by default) and push to thegh-pagesbranch, or use GitHub Actions to deploy thebuild/folder to GitHub Pages.
Preview the static build locally:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. See contributing guidelines for more details.
License
AGPL v3.0+
Acknowledgments
- Inspired by the classic Lissajous curve oscilloscope visualizations
- Built with the amazing Tauri and Svelte ecosystems
Made with ❤️ using Tauri + SvelteKit
