Go to file
Skyler Lehmkuhl b14972f657 P6a: mobile music surface (keyboard-primary instrument pane)
The mobile Piano Roll becomes a unified, keyboard-primary instrument surface
(wireframe Plate 04/08): a playable keyboard as the base, revealing a
Synthesia-style falling-notes roll above it when the pane is tall enough.

- Shared keyboard geometry (panes/keyboard_layout.rs): width-driven, pan-aware
  pitch->x, so the roll's note columns stay aligned with the Virtual Piano keys.
  Shared keyboard_octave + keyboard_pan_x in SharedPaneState.
- Piano Roll vertical mode (is_mobile): notes as columns falling toward an amber
  now-line by the keys, tempo-map converted (beats->seconds) so onsets cross the
  line exactly when they sound. Vertical drag scrubs the timeline; horizontal
  drag smoothly scrolls the keys (snaps to nearest key on release). Long-press
  creates a note (drag to size) or resizes an existing one; pan suppresses it.
  The keyboard is embedded (reuses Virtual Piano render + MIDI); the standalone
  VirtualPiano stack slot is removed. show_roll is driven by the snapped pane
  size-class so the keyboard<->roll reveal lands on a stack snap point.
- Virtual Piano: renders via the shared layout on mobile, colors playback_notes
  like pressed keys, gates note-on/glissando to presses that start on the keys
  (never gating release), and hides QWERTY hints on mobile.
- Transport formats by document.timeline_mode (Measures->bar.beat.tick,
  Frames->MM:SS:FF, Seconds->MM:SS.mmm) — per project type, like desktop.
- In-pane instrument header (name + Presets + REC). Recording is driven from the
  app each frame (not the Timeline pane's render) so REC works regardless of
  visible panes, and stopping playback stops recording.
- Compose/Record intent opens Timeline + instrument pane; mobile central panel is
  full-bleed (no inner margin) so panes sit flush.
- phone-ui-sketches.html: inst-bar moved to the top of the music surface.
2026-07-02 07:50:37 -04:00
.github/workflows ci: enable VAAPI in the from-source ffmpeg build 2026-06-25 21:27:06 -04:00
daw-backend Fix oscillator/synth phase wraparound drift 2026-07-02 01:15:45 -04:00
docs note nam build requirements 2026-03-01 10:47:13 -05:00
ffmpeg-blob-io Pack video into .beam and stream frames + audio from the blob 2026-06-22 09:17:10 -04:00
lightningbeam-core improve detection 2025-01-31 07:12:12 -05:00
lightningbeam-ui P6a: mobile music surface (keyboard-primary instrument pane) 2026-07-02 07:50:37 -04:00
nam-ffi Fix NAM runtime errors on linux 2026-03-06 06:37:25 -05:00
packaging ci: enable VAAPI in the from-source ffmpeg build 2026-06-25 21:27:06 -04:00
screenshots Update readme 2025-11-23 21:58:34 -05:00
scripts release scripts: push the release branch to both forges 2026-06-21 18:38:33 -04:00
src Add automatable volume and pan control to default instruments 2026-03-23 23:27:05 -04:00
tests work on tests 2025-11-12 08:52:16 -05:00
vendor deduplicate node list 2026-02-21 09:42:05 -05:00
.gitignore Remove the legacy Tauri backend (src-tauri) 2026-06-21 18:25:39 -04:00
.gitmodules deduplicate node list 2026-02-21 09:42:05 -05:00
ARCHITECTURE.md docs: correct branch references to main (not master) 2026-06-21 21:19:53 -04:00
BEAM_FILE_FORMAT.md Pack video into .beam and stream frames + audio from the blob 2026-06-22 09:17:10 -04:00
CONTRIBUTING.md docs: correct branch references to main (not master) 2026-06-21 21:19:53 -04:00
Changelog.md Bump version to 1.0.7-alpha 2026-06-26 21:54:50 -04:00
LICENSE License under GPLv3 2026-02-25 00:52:06 -05:00
README.md docs: correct branch references to main (not master) 2026-06-21 21:19:53 -04:00
STREAMING_TO_DISK_PLAN.md Pack video into .beam and stream frames + audio from the blob 2026-06-22 09:17:10 -04:00
TODO.md docs: mark Phase 3/3.5/4 done in plan checklist; flag stale JS-era TODO entries 2026-06-21 01:22:17 -04:00
beam_inspector.py Document the .beam SQLite format and port the inspector 2026-06-21 23:08:15 -04:00
beam_inspector_README.md Document the .beam SQLite format and port the inspector 2026-06-21 23:08:15 -04:00
create_release.sh release scripts: push the release branch to both forges 2026-06-21 18:38:33 -04:00
package.json Remove the legacy Tauri backend (src-tauri) 2026-06-21 18:25:39 -04:00
phone-ui-sketches.html P6a: mobile music surface (keyboard-primary instrument pane) 2026-07-02 07:50:37 -04:00
pnpm-lock.yaml Record audio tracks 2025-10-23 01:08:45 -04:00

README.md

Lightningbeam

A free and open-source 2D multimedia editor combining vector animation, audio production, and video editing in a single application.

Screenshots

Animation View

Music Editing View

Video Editing View

Features

Vector Animation

  • GPU-accelerated vector rendering with Vello
  • Draw and animate vector shapes with keyframe-based timeline
  • Non-destructive editing workflow
  • Paint bucket tool for automatic fill detection

Audio Production

  • Real-time multi-track audio recording and playback
  • Node graph-based effects processing
  • MIDI sequencing with synthesizers and samplers
  • Comprehensive effects library (reverb, delay, EQ, compression, distortion, etc.)
  • Custom audio engine with lock-free design for glitch-free playback

Video Editing

  • Video timeline and editing with FFmpeg-based decoding
  • GPU-accelerated waveform rendering with mipmaps
  • Audio integration from video soundtracks

Technical Stack

Current Implementation (Rust UI)

  • UI Framework: egui (immediate-mode GUI)
  • GPU Rendering: Vello + wgpu (Vulkan/Metal/DirectX 12)
  • Audio Engine: Custom real-time engine (daw-backend)
    • cpal for cross-platform audio I/O
    • symphonia for audio decoding
    • dasp for node graph processing
  • Video: FFmpeg 8 for encode/decode
  • Platform: Cross-platform (Linux, macOS, Windows)

Legacy Implementation (Deprecated)

  • Frontend: Vanilla JavaScript
  • Backend: Rust (Tauri framework)

Project Status

Lightningbeam is developed on the main branch. The project has been rewritten from a Tauri/JavaScript prototype to a pure Rust application to eliminate IPC bottlenecks and achieve better performance for real-time video and audio processing.

Current Status:

  • Core UI panes (Stage, Timeline, Asset Library, Info Panel, Toolbar)
  • Drawing tools (Select, Draw, Rectangle, Ellipse, Paint Bucket, Transform)
  • Undo/redo system
  • GPU-accelerated vector rendering
  • Audio engine with node graph processing
  • GPU waveform rendering with mipmaps
  • Video decoding integration
  • 🚧 Export system (in progress)
  • 🚧 Node editor UI (planned)
  • 🚧 Piano roll editor (planned)

Getting Started

Prerequisites

  • Rust (stable toolchain via rustup)
  • System dependencies:
    • Linux: ALSA development files, FFmpeg 8
    • macOS: FFmpeg (via Homebrew)
    • Windows: FFmpeg 8, Visual Studio with C++ tools

See docs/BUILDING.md for detailed setup instructions.

Building and Running

# Clone the repository
git clone https://github.com/skykooler/lightningbeam.git
# Or from Gitea
git clone https://git.skyler.io/skyler/lightningbeam.git

cd lightningbeam/lightningbeam-ui

# Build and run
cargo run

# Or build optimized release version
cargo build --release

Documentation

Project History

Lightningbeam evolved from earlier multimedia editing projects I've worked on since 2010, including the FreeJam DAW. The JavaScript/Tauri prototype began in November 2023, and the Rust UI rewrite started in late 2024 to eliminate performance bottlenecks and provide a more integrated native experience.

Goals

Create a comprehensive FOSS alternative for 2D-focused multimedia work, integrating animation, audio, and video editing in a unified workflow. Lightningbeam aims to be:

  • Fast: GPU-accelerated rendering and real-time audio processing
  • Flexible: Node graph-based audio routing and modular synthesis
  • Integrated: Seamless workflow across animation, audio, and video
  • Open: Free and open-source, built on open standards

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

[License information to be added]