Skip to content
K-692Public

About

Autonomous Procedural 3D Concert Stage Simulator & Neural Music Player

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Synwave Logo

SYNWAVE

Autonomous Procedural 3D Concert Stage Simulator & Neural Music Visualizer

License: MIT Vite React Three.js PyTorch MPS TypeScript FastAPI

A stadium-scale music festival concert simulator that orchestrates real-time, procedural 3D audiovisual performances. Powered by Meta Demucs v4 neural 4-stem source separation, Apple Silicon Metal Performance Shaders (MPS), Shazam acoustic recognition, synchronized YouTube 4K stage video playback, and intelligent concert lighting choreography.


🎬 Live Demo Preview

Note

🎵 Music & Visual Attribution

Audio & Visual Demo Showcase:


Important

💬 Note to Potential Contributors & Community

Synwave is an evolving open-source project, and I know it still has bugs and areas that need improvement. Contributions, bug reports, suggestions, and pull requests are very welcome. Help me fix the existing issues and turn Synwave into a polished, reliable product!


📑 Table of Contents


🌟 Project Overview

Synwave transforms any local audio file into a stadium-scale procedural concert experience. Rather than drawing simple 2D FFT spectrogram bars or unanchored wandering particles, Synwave acts as an autonomous concert lighting designer and stage director.

It places the user in the front-row audience facing a colossal festival stage modeled after real-world arena spectacles (Ultra Music Festival, Tomorrowland, EDC).

When an audio file is loaded, Synwave executes an acoustic intelligence pipeline:

  1. Acoustic Fingerprinting & Track Resolution: Resolves song identity, artist, and album via ShazamIO in < 1.5s and caches the match.
  2. Neural Source Separation (Meta Demucs v4): Isolates the audio into 4 discrete acoustic stems (drums, bass, instruments, vocals) accelerated by Apple Silicon MPS hardware.
  3. Tri-STEM Peak Drop Pinpointing: Identifies the precise climactic segments where drums, bass, and instruments simultaneously exceed their track averages.
  4. Synchronized 4K Stage Video: Resolves the official music video via YouTube Data API v3, hosting it inside an aperture screen driven by the lossless local audio clock.
  5. Procedural 3D Stage Choreography: Directs moving-head spotlights, an expansive 22-pattern 360° laser choreography rig, camera sub-bass FOV zooms, and vertical-sync full-window blinder washes.

🏗️ Architectural Block Diagram

Synwave is structured into a four-tier decoupled architecture separating acoustic intelligence, real-time audio analysis, stage choreography, and hardware-accelerated presentation.

System Flow Diagram (Mermaid)

flowchart TD
    subgraph INGEST["1. INGEST & ACOUSTIC INTELLIGENCE LAYER"]
        A["Local Audio File\n(MP3, WAV, FLAC, M4A)"] --> B["SHA-256 Fingerprint Generator"]
        B --> C{"3-Tier STEM Cache"}
        C -->|"Hit (< 10ms)"| D["Decoded Stem Data Store"]
        C -->|"Miss"| E["FastAPI Daemon (:8765)"]
        
        subgraph DAEMON["Python Microservice (Apple Silicon MPS / CUDA)"]
            E --> F["ShazamIO Recognition Engine"]
            E --> G["Meta Demucs v4 (htdemucs)"]
            G --> H["4-Stem Isolation\n(Drums, Bass, Inst, Vocals)"]
            H --> I["25 FPS RMS Envelopes &\nStatic Track Averages"]
            H --> J["Kick Comb Filter & Transient Onsets"]
        end
        
        F --> K["Track Identity (Title, Artist, BPM)"]
        I --> D
        J --> D
    end

    subgraph ANALYSIS["2. REAL-TIME FEATURE & DROP PINPOINTING ENGINE"]
        A --> L["Web Audio API AudioContext"]
        L --> M["Master Hardware Audio Clock (t)"]
        L --> N["AnalyserNode (2048 FFT)"]
        
        D & N --> O["Tri-STEM Peak Drop Gate"]
        O -->|"D > D_avg && B > B_avg && I > I_avg"| P["isTriStemDropActive (Drops Only)"]
        
        N --> Q["Sub-Bass Filter\n(20 - 100 Hz)"]
        N --> R["Transient Kick Edge Detector\n(40 - 150 Hz, 180ms Lockout)"]
        N --> S["Mid-Range Spectral Engine\n(250 Hz - 4 kHz: Centroid, Flux, Dispersion)"]
        D --> T["BeatGrid & Phrase Engine"]
    end

    subgraph DIRECTOR["3. STAGE DIRECTOR & CHOREOGRAPHY PIPELINE"]
        K --> U["YouTube Data API v3"]
        U --> V["Official Stage Video ID & Thumbnail Palette"]
        V --> W["laserColorUtils: Direct Palette Normalization"]
        
        P & S & W --> X["22-Pattern 360° 3D Laser Engine\n(85m End-to-End Beams, Zenith to Pit)"]
        T & K --> Y["Symmetrical BPM Moving-Head Lights\n(2 to 12 Fixtures, Monotonic 70-160 BPM)"]
        Q --> Z["Audience Camera FOV Punch\n(60° to 63.5° Dynamic Zoom)"]
        R --> AA["YouTube Iframe Screen Shake\n(Isolated Kick Transform)"]
        R & P & W --> AB["Direct-DOM Full-Window Blinder\n(0.96 Peak Opacity, Compulsory White + Palette)"]
    end

    subgraph PRESENTATION["4. PRESENTATION & RENDERING LAYER"]
        M --> AC["Continuous 100ms Video Drift Alignment\n(|Δt| > 140ms ➔ seekTo)"]
        AC --> AD["YouTube 4K Stage Video Aperture\n(z-index: 1, pointer-events: auto, volume: 0)"]
        
        X & Y & Z --> AE["Three.js r186 WebGL2 Scene Graph\n(z-index: 2, pointer-events: none)"]
        AA --> AD
        AB --> AF["Festival Window Blinder Overlay\n(z-index: 15, Direct DOM Mutation)"]
        
        AD & AE & AF --> AG["Glassmorphic HUD & Control Dock\n(z-index: 25: Console [C], Telemetry [D], Info [i])"]
    end
Loading

Functional Block Topology (ASCII)

====================================================================================================
                                      SYNWAVE SYSTEM TOPOLOGY
====================================================================================================

 [ Local Audio File ] ─────────► [ SHA-256 Fingerprint Engine ]
                                            │
               ┌────────────────────────────┴───────────────────────────┐
               ▼ (Cache Hit < 10ms)                                     ▼ (Cache Miss)
    [ 3-Tier Stem Cache ]                                  [ FastAPI Daemon (:8765) ]
    • Tier 1: In-Memory Map                                • ShazamIO Song Recognition
    • Tier 2: Browser IndexedDB                            • Meta Demucs v4 (htdemucs on MPS)
    • Tier 3: Local Disk Cache                             • Static Averages (D_avg, B_avg, I_avg)
               │                                           • Kick Onsets & Comb Filtering
               └────────────────────────────┬───────────────────────────┘
                                            │
                                            ▼
                           [ Real-Time Audio Engine ]
                           • Web Audio API Master Clock (t)
                           • 2048-Point FFT Spectral Decomp
                           • Tri-STEM Peak Drop Activation:
                             (D > D_avg) ∧ (B > B_avg) ∧ (I > I_avg) ∧ (Joint ≥ Thresh)
                                            │
        ┌───────────────────────────────────┼───────────────────────────────────┐
        ▼                                   ▼                                   ▼
 [ Sub-Bass (20-100Hz) ]         [ Kick Transient (40-150Hz) ]       [ Mid-Range Spectral (250Hz-4kHz) ]
   FOV Camera Punch (60°-63.5°)    Screen Shake & Blinder Trigger      22-Pattern 360° 3D Laser Engine
        │                                   │                                   │
        └───────────────────────────────────┼───────────────────────────────────┘
                                            │
                                            ▼
                           [ Show Director & Visual Engine ]
                           • Authentic Multi-Color Laser Palette Mapping
                           • 22-Pattern 360° 3D Concert Laser Choreographies
                           • Symmetrical BPM-Synchronized Moving Heads (2-12)
                           • Full-Window Blinder Wash (0.96 Opacity, White + Song Colors)
                                            │
       ┌────────────────────────────────────┴───────────────────────────────────┐
       ▼                                                                        ▼
[ Three.js r186 Scene Graph ]                                 [ YouTube 4K Stage Screen ]
• Transparent WebGL2 Canvas (z: 2)                            • 16:9 Stage Aperture (z: 1)
• 85m End-to-End Laser Rays (360° 3D)                         • Muted Video Playback (vol: 0)
• Stage Truss & Jumbotron Bezels                              • Master Clock Continuous Sync Loop
• Billboard Dust & Atmosphere                                 • Zero Synwave Text Overlays
====================================================================================================

Deep Architectural Walkthrough

1. Acoustic Intelligence & Multi-Tier Caching Layer

  • Shazam-First Prerequisite Pipeline: Recognition executes before neural separation. Tracks are identified in < 1.5s and cached in persistent storage (synwave_shazam_cache_v2). The recognized song title and artist are instantly displayed in the loading interface.
  • Meta Demucs v4 HTDemucs (demucs_service.py): Isolates local audio into four discrete high-fidelity stems: drums, bass, instruments, and vocals. Running on Apple Silicon Metal Performance Shaders (MPS) or NVIDIA CUDA, it computes 25 FPS normalized RMS envelopes, static track-wide averages ($\bar{A}_D, \bar{A}_B, \bar{A}_I$), and transient kick onsets.
  • 3-Tier Persistent Stem Cache:
    • Tier 1 (Memory): Synchronous JS Map for zero-latency in-session lookups.
    • Tier 2 (IndexedDB): Browser-persistent object store (synwave_stems_db) allowing instant song switches and page reloads without re-computation or storage quotas.
    • Tier 3 (Server Disk): Cached JSON envelopes and recognition in .synwave_cache/stems/{sha256}.json and .synwave_cache/shazam/{hash}.json. The lightweight /api/check-stems-cache and /api/check-shazam-cache pre-flight endpoints bypass audio file re-uploads entirely.

2. Real-Time Feature & Drop Pinpointing Engine

  • Pinpointed Tri-STEM Peak Drop Gate (AudioEngine.ts): Lasers and climactic visuals are gated strictly by the song's true drop segment. A frame qualifies as a drop if and only if: $$D(t) &gt; \bar{A}_D ;\land; B(t) &gt; \bar{A}_B ;\land; I(t) &gt; \bar{A}_I ;\land; J(t) \ge \text{Threshold}$$ This mathematical gate completely eliminates false activations during vocal buildups, quiet intros, and acoustic breakdowns.
  • Isolated Sub-Bass Bandpass ($20-100\text{Hz}$): Directly drives camera FOV zoom punch ($60^\circ \to 63.5^\circ$), physically vibrating the audience perspective without harmonic distortion from vocals or guitars.
  • Transient Kick Detection ($40-150\text{Hz}$): Comb-filtered kick detector with a 180ms refractory lockout drives 2D pixel displacement strictly on the YouTube stage screen element.
  • Mid-Range Spectral Engine ($250\text{Hz}-4\text{kHz}$): Computes mid-range spectral centroid ($C_{\text{mid}}$), spectral flux ($F_{\text{mid}}$), and dispersion ($D_{\text{mid}}$) fused with Demucs instrumental data to steer intelligent concert laser choreographies without bass interference.

3. Stage Director & Visual Choreography Pipeline

  • 22-Pattern 360° 3D Laser Choreography Engine (laserChoreography.ts):
    • Generates 3-dimensional spherical vectors projecting upward to the stadium zenith ($Y \in [14, 26]$), downward to the stage pit ($Y \in [-10, 0]$), across wide peripheral horizons ($X \in [-35, +35]$), and directly forward past the audience camera ($Z \in [0, 25]$).
    • Normalizes rays to an 85-meter length (FULL_WINDOW_BEAM_LENGTH = 85.0), guaranteeing beams pierce from nozzle origins through and beyond the browser window boundaries.
    • Features 22 distinct geometric choreographies (Audience Scan Wave, Cathedral Scissor, Double-Helix Spiral, Stadium Fan, Rotating Pinwheel, Tunnel Perspective, etc.) smoothly blended via Hermite cubic smoothstep curves ($0.50\text{s}$).
  • Authentic Multi-Color Laser Palette Mapping (laserColorUtils.ts):
    • Songs featuring multiple vibrant colors map those exact hues directly to alternating laser stations (Tone 1 = Primary, Tone 2 = Secondary).
    • Eliminates forced 180° opposite hue inversion, preserving authentic visual harmony with the song's album artwork and music video.
  • Symmetrical BPM Spotlights (StageLightsEffect.ts): Symmetrically frames the YouTube screen across Top, Left, and Right fixtures, scaling dynamically from 2 to 12 fixtures based on detected BPM ($70-160\text{ BPM}$).
  • Full-Window Screen Flash Blinder (VisualEngine.ts):
    • Full-window elliptical radial gradient wash covering $100\text{vw} \times 100\text{vh}$ at z-index: 15.
    • Driven by direct DOM mutation on #festival-window-blinder, delivering vertical-sync accuracy without React component re-renders.
    • Synchronized with kick transients; compulsory pure white (#FFFFFF) on downbeats, cycling through song palette colors with white-hot filament cores.

4. Presentation & Hardware-Accelerated Rendering Layer

  • Three.js r186 WebGL2 Canvas (z-index: 2): Transparent canvas overlaying the stage video with additive volumetric laser blending, stage trusses, moving heads, and atmosphere dust.
  • Synchronized 4K YouTube Stage Aperture (z-index: 1):
    • Muted video playback (volume = 0) complying with browser autoplay policies while local lossless audio serves as the master clock.
    • Continuous 100ms drift monitor: if video drifts $&gt; 140\text{ms}$ from master audio, micro-seeks snap the playhead back into phase.
    • Clean video aperture: zero Synwave-generated text overlays, badges, or titles over the video; captions disabled by default (cc_load_policy: 0, controls: 0).
  • Responsive Glassmorphic HUD (z-index: 25): Floating docks, Audio-to-Visual Routing Console (C), Real-Time Telemetry HUD (D), and YouTube metadata modal (i).

✨ Key Features

  • 22-Pattern 360° 3D Concert Laser Choreography: Three laser stations mounted above the stage fire 85-meter end-to-end beams across all 3 dimensions—zenith skyward sweeps, deck sweeps, wide stadium fans, and audience fly-throughs.
  • Authentic Multi-Color Laser Palette Mapping: Multi-color songs directly use their authentic album colors across laser stations without forced 180° complementary inversion.
  • Pinpointed Tri-STEM Peak Drop Activation: Lasers activate exclusively during true musical drops where Drums, Bass, and Instruments simultaneously exceed track averages, staying cleanly off during intros, verses, and breakdowns.
  • Full-Window Screen Flash Blinder: High-intensity $100\text{vw} \times 100\text{vh}$ blinder wash with 0.96 peak opacity, direct DOM mutation, and compulsory pure white downbeats cycling through song palette colors.
  • High-Precision Audio-Video Drift Synchronization: A 100ms continuous monitoring loop locks the YouTube stage video to the master Web Audio clock, snapping buffered video into lip-sync and percussive phase.
  • 3-Tier Persistent STEM Cache: Subsequent plays of analyzed songs load in < 10ms from Memory, IndexedDB, or local disk, eliminating redundant neural compute.
  • Shazam-First Track Recognition: Acoustic fingerprinting resolves track title and artist in < 1.5s before neural separation, displaying verified metadata throughout the loading experience.
  • Clean Stage Video Aperture: The YouTube concert screen is completely free of text overlays, status badges, or forced closed captions (cc_load_policy: 0).
  • Dual-Layer Audio Impact: Deep sub-bass ($20-100\text{Hz}$) drives camera FOV zoom punch ($60^\circ \to 63.5^\circ$), while percussive kicks shake the YouTube stage screen in 2D space.
  • Symmetrical BPM-Scaled Moving Heads: Moving-head spotlights scale dynamically from 2 to 12 fixtures framing the screen based on verified track tempo.
  • Freeze-on-Pause Engine: Pausing playback instantly halts visual time accumulators (deltaSeconds = 0). Moving heads, beams, and lasers freeze in place without snapping.
  • Interactive Routing Console & Telemetry HUD: Press C for real-time calibration of shake, blinders, decay, and photosensitive safety mode. Press D for live FFT, stem energy, and MPS hardware telemetry.

⌨️ Controls & Keyboard Shortcuts

Key / Shortcut Action Description
Space Play / Pause Toggle playback (with input focus protection and iframe focus recovery).
F Toggle Fullscreen Enter or exit native edge-to-edge fullscreen mode.
Double-Click Toggle Fullscreen Double-clicking anywhere on the 3D stage toggles fullscreen.
C Routing Console Open or close the Audio-to-Visual Routing Console.
D Telemetry HUD Toggle the Real-Time Synchronization & Diagnostics Overlay.
M Reduced Flash Mode Toggle photosensitive safety blinder strobe reduction.
Arrow Left Seek -5 Seconds Scrub playback backward by 5 seconds.
Arrow Right Seek +5 Seconds Scrub playback forward by 5 seconds.
Digit 1 Festival Profile Re-engage the Festival Mainstage choreography profile.

🚀 Installation & Development Setup

Prerequisites

Ensure you have the following installed on your machine:

  • Node.js: v18.0.0 or later (v20+ recommended)
  • npm: v9.0.0 or later
  • Python: v3.10, v3.11, or v3.12 (with venv support)
  • macOS / Linux / Windows:
    • macOS (Apple Silicon M1/M2/M3/M4): Supported with native Metal Performance Shaders (MPS) hardware acceleration.
    • Windows / Linux: Supported with NVIDIA CUDA or CPU fallback.
  • ffmpeg (recommended): For broader local audio format decoding.

Step 1: Clone the Repository

git clone https://github.com/K-692/Synwave.git
cd Synwave

Step 2: Install Frontend Dependencies

npm install

Step 3: Set Up Python Microservice Virtual Environment

Synwave uses a local FastAPI microservice for Shazam acoustic fingerprinting and Meta Demucs neural stem separation.

# 1. Create a dedicated Python virtual environment
python3 -m venv .venv

# 2. Activate the virtual environment
# On macOS / Linux:
source .venv/bin/activate
# On Windows (cmd.exe):
# .venv\Scripts\activate.bat
# On Windows (PowerShell):
# .venv\Scripts\Activate.ps1

# 3. Upgrade pip and install required dependencies
pip install --upgrade pip
pip install -r requirements.txt

Step 4: Configure Your YouTube Data API v3 Key

Synwave requires a Google Cloud YouTube Data API v3 key to search and synchronize official stage videos.

You can configure the key in either of two ways:

  1. Via Environment File (Recommended for Development):
    cp .env.example .env
    Open .env in your text editor and paste your key:
    VITE_YOUTUBE_API_KEY=AIzaSy...
  2. Via In-App Startup Gate: Launch the app without a key, and Synwave will present the interactive startup gate modal where you can paste and validate your key directly.

(See YouTube Data API v3 Configuration below for a 2-minute setup guide).


Step 5: Start the Development Servers

Option A: Unified Launcher (Recommended — Single Command)

Run the unified startup script that launches both the Python audio intelligence microservice and the Vite frontend dev server with one command and automatic graceful shutdown (Ctrl+C):

# Using the executable shell script
./start.sh

# Or via npm
npm start
# (or npm run dev)
  • Frontend: http://localhost:5173
  • Python Audio Microservice: http://127.0.0.1:8765

Open http://localhost:5173 in your browser.


Option B: Separate Terminal Windows (Manual Alternative)

If you prefer running services in separate terminals:

Terminal 1 — Python Microservice:

source .venv/bin/activate
python3 shazam_server.py

Microservice starts on http://127.0.0.1:8765.

Terminal 2 — Vite Frontend Server:

npm run dev:frontend

Frontend starts on http://localhost:5173.


Step 6: Verify Build & Code Correctness

To check TypeScript types and build the production bundle:

npm run build

To run the fast linter:

npm run lint

🔑 YouTube Data API v3 Configuration

How to Get a Free YouTube API Key (2 Minutes)

Google Cloud provides 10,000 free quota units per day for YouTube Data API v3 per project without requiring billing:

  1. Visit the Google Cloud Console.
  2. Create a new project (e.g., Synwave-Visualizer).
  3. Navigate to APIs & Services > Library, search for YouTube Data API v3, and click Enable.
  4. Navigate to APIs & Services > Credentials, click Create Credentials > API key.
  5. Copy the generated API key (format starts with AIzaSy...).
  6. Paste the key into Synwave's startup modal or your .env file.

Quota Consumption & Limitations

  • Lightweight Key Validation: Synwave verifies keys via videoCategories.list, which costs only 1 unit.
  • Track Video Search: Resolving a song name to its official YouTube video costs 100 units per unique track query (search.list).
  • Embed Restrictions: Some official music videos may have third-party embedding disabled by rights holders or may be geo-restricted. If an iframe fails to embed, Synwave maintains full 3D procedural lighting and local audio playback.
  • Browser Autoplay Policies: Browsers prevent unmuted audio autoplay. Synwave complies by setting YouTube video volume strictly to 0 and driving audio exclusively through Web Audio API.

🛠️ Technologies & Official Repositories

Technology Role in Synwave Official Repository / Website
React 19 Modern UI components, hooks, reactive state management facebook/react
Three.js (r186) 3D scene graph, procedural geometry, lighting shaders, WebGL2 mrdoob/three.js
Meta Demucs v4 Neural music source separation (Hybrid Transformer HTDemucs) adefossez/demucs
PyTorch Deep learning runtime with Apple Silicon MPS acceleration pytorch/pytorch
ShazamIO Asynchronous song recognition & acoustic fingerprinting shazamio/ShazamIO
FastAPI High-performance Python microservice handling AI tasks fastapi/fastapi
Uvicorn Lightning-fast ASGI web server implementation encode/uvicorn
TypeScript Type safety, rigorous interfaces, and compile-time correctness microsoft/TypeScript
Vite Next-generation frontend tooling and HMR dev server vitejs/vite
Lucide Icons Minimalist modern icon set for controls and navigation lucide-icons/lucide
Web Audio API Hardware-synchronized audio clock, multi-band FFT analyser W3C Web Audio API Spec
YouTube Data API v3 Official music video search, thumbnail color palettes, metadata Google YouTube Data API

📜 Third-Party Libraries, Licenses & Attribution

All third-party libraries incorporated into Synwave are free and open-source software. We gratefully acknowledge and credit the original authors and maintainers:

Frontend Dependencies

Library Version License Authors / Maintainers Repository Link
react ^19.2.8 MIT Meta Platforms, Inc. & React Contributors facebook/react
react-dom ^19.2.8 MIT Meta Platforms, Inc. & React Contributors facebook/react
three ^0.186.1 MIT Ricardo Cabello (Mr.doob) & Three.js Authors mrdoob/three.js
@types/three ^0.186.0 MIT DefinitelyTyped Contributors DefinitelyTyped
lucide-react ^1.59.0 ISC Lucide Contributors & Feather Icons Authors lucide-icons/lucide
vite ^8.3.0 MIT Evan You & Vite Contributors vitejs/vite
@vitejs/plugin-react ^6.1.1 MIT Vite Contributors vite-plugin-react
typescript ~6.0.2 Apache-2.0 Microsoft Corporation microsoft/TypeScript
oxlint ^1.81.0 MIT Boshen & Oxc Project Contributors oxc-project/oxc

Python Microservice Dependencies

Package Version License Authors / Maintainers Repository Link
demucs ^4.1.0 MIT Alexandre Défossez (Meta AI Research) adefossez/demucs
torch ^2.2.0 BSD-3-Clause Meta Platforms, Inc. & PyTorch Contributors pytorch/pytorch
shazamio ^0.8.1 MIT DotX12 & ShazamIO Contributors shazamio/ShazamIO
fastapi ^0.115.0 MIT Sebastián Ramírez (tiangolo) fastapi/fastapi
uvicorn ^0.30.0 BSD-3-Clause Encode & Uvicorn Contributors encode/uvicorn
numpy ^1.26.0 BSD-3-Clause Travis Oliphant & NumPy Developers numpy/numpy
certifi ^2024.0.0 MPL-2.0 Kenneth Reitz & Mozilla certifi/python-certifi
aiofiles ^23.2.0 Apache-2.0 Tin Tvrtković & aiofiles Contributors Tinche/aiofiles
python-multipart ^0.0.12 Apache-2.0 Andrew Chen Wang & Kludex Kludex/python-multipart

🎬 Demonstration Media & Audio Attribution

Asset / File Title & Description Creator / Channel Attribution & Links
demo/demo.mp4 Destroyer Of Worlds (Oppenheimer Remix) [Music Video] Abandoned Official YouTube Channel: @AbandonedOfficial
Music composition and official music video rights belong to Abandoned. Used with credit for non-commercial open-source visualization demonstration.

🐛 Known Issues & Roadmap

Here are the currently known bugs and areas under active improvement:

  1. First-Run Demucs Weights Download Latency: On the very first track analyzed, Demucs downloads the htdemucs neural weights (~80MB) from GitHub releases. This may take 20–45 seconds depending on network bandwidth. Subsequent tracks with the same model run much faster, and cached songs load in < 10ms.
  2. YouTube Video Embed Restrictions: Certain record labels disable third-party iframe embeds for select official music videos on YouTube (resulting in error 150 or 101). When this occurs, Synwave maintains local audio playback and procedural 3D stage effects while logging a descriptive fallback notice.
  3. Daily YouTube API Quota Ceiling (10,000 units/day): Heavy multi-song testing can consume the daily quota (100 units per new track search). Quotas reset at midnight PST. We plan to add a local metadata search fallback for offline sessions.
  4. WebGL Context Loss on Display Sleep: On some operating systems, waking a machine from deep sleep or switching external display adapters can trigger a WebGL context loss. Reloading the page restores normal operation.
  5. Multi-Window High-DPI Canvas Resizing: Dragging the browser window across displays with different device pixel ratios (e.g., Retina Mac to standard 1080p monitor) occasionally requires a canvas refresh.

🤝 How to Contribute

Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

Contribution Workflow

  1. Fork the Project: Click the Fork button on the top right of the Synwave Repository.
  2. Create your Feature Branch:
    git checkout -b feature/AmazingChoreography
  3. Set Up Development Environment: Follow the Installation & Development Setup guide above.
  4. Commit your Changes:
    git commit -m 'feat: add moving-head gobos to stage lights'
  5. Verify Types and Build:
    npm run build
    npm run lint
    Make sure npm run build exits with code 0 before submitting.
  6. Push to the Branch:
    git push origin feature/AmazingChoreography
  7. Open a Pull Request: Submit your pull request detailing the changes made, screenshots/recordings of visual modifications, and any testing performed.

Coding Guidelines

  • Modularity: Keep 3D visual effects isolated in src/visualizer/effects/ and audio processors in src/audio/.
  • Comments & Cleanliness: Add clear comments explaining non-trivial trigonometric sweeps or shader parameters.
  • WebGL Hygiene: Always dispose of unused geometries, materials, and textures when destroying or reloading visual effects to avoid GPU memory leaks.
  • Security: Never commit real API keys, credentials, or personal audio files to git.

📄 License

Distributed under the MIT License. See LICENSE for full legal text.


Built with ❤️ for concertgoers, electronic music producers, and 3D visual artists.

About

Autonomous Procedural 3D Concert Stage Simulator & Neural Music Player

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages