Commit Graph
45 Commits
Author SHA1 Message Date
lucianoandClaude Fable 5 c40f804740 Cinematic audio-light families: Onda Luminosa and Spettro Neon
The live waveform (uWave) drawn as a horizontal beam of light with a
white-hot crest, lens flare, vertical light pillars on loud columns,
twinkling cross sparkles, rays converging on the vanishing point and two
bokeh layers; Spettro Neon puts the 32-band spectrum on the same stage as
mirrored neon bars with hot tips. Shader family indices 55-56 (44-54 are
the interactive families, which never reach the shader). Both added to the
Auto VJ pools.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 10:16:36 +02:00
lucianoandClaude Fable 5 134af5775c Output window can no longer be closed by accident
Cmd+W / the red button on the output window are ignored while the control
panel is open: the audio engine and all visual state live in that window,
so an accidental close killed the whole show with no way to reopen it.
If the window dies anyway (renderer crash) it is recreated automatically.
Quitting normally (closing the control panel or Cmd+Q) still works.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 23:40:01 +02:00
lucianoandClaude Fable 5 7e745743c5 Ten more interactive camera families: bubbles, balloons, particle mirror, cloth, light painting, touch fluid, electric silhouette, swarm, tile wall, firewall
interactive.js becomes a multi-mode engine sharing camera, motion grid,
gradient/centroid tracking and the mouse fallback. New renderers: point/line
sprites (mirror/swarm/cloth/pops) and a ping-pong trail FBO (painting).
fluid.js gains a 'touch' emitter mode fed by motion splats from the camera.
Mirror mode reforms the custom SVG/image if loaded, else a DJ LUZA wordmark.
UNPACK_ALIGNMENT set to 1 for non-multiple-of-4 single-channel uploads.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 23:26:34 +02:00
lucianoandClaude Fable 5 ea31d68350 Interactive camera family: webcam motion pushes physical balls on screen
New 'Interattivo Palle' family (interactive.js): frame-differencing motion map
from the webcam, ball physics (push-away forces, collisions, beat kicks),
palette-tinted rendering with motion mist. Camera is requested lazily and
released when switching preset; mouse/touch fallback when unavailable.
Excluded from Auto VJ so the camera never turns on by itself.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 21:35:38 +02:00
lucianoandClaude Fable 5 f2121c0fc5 Bump Electron 31.7.7 -> 33.4.11: macOS XProtect kills Electron 31 as malware
XProtect (macOS 26) matches a malware rule on Electron 31.x ad-hoc binaries
(false positive: it also killed a checksum-verified official download) and
moves them to the Trash. Electron 33.4.11 is not matched and the app runs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 17:51:07 +02:00
lucianoandClaude Fable 5 4aad50b362 Scenic family "Supernova": cosmic burst with electric tendrils
From the reference video: bright crackling core, organic branching
lightning filaments (ridged fbm in mirrored polar space, slowly rotating
to hide the seam), two layers of radial particle streaks flowing outward,
nebula haze. Bass pumps filaments and outflow speed, beat punches the
core, treble twinkles the particles. Family index 43 (fieldRGB path).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 16:48:47 +02:00
b26b07e37f Two cinematic RGB families: Tunnel Neon (square neon fly-through) and Tempesta Plasma (erupting plasma column) (#1)
Co-authored-by: luciano <info@zappacosta.eu>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 14:31:10 +02:00
lucianoandClaude Fable 5 19aab4e61e Reels: timed recording with auto-stop
recStart now carries the format and an optional maxMs; the output stops
itself when the time is up (15/30/60/90s picker in the control UI), so a
reel doesn't depend on a manual stop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:51:51 +02:00
lucianoandClaude Fable 5 48ac3dfa85 Auto VJ: selectable family pool (smart / all / custom checklist)
Three modes for where the director draws presets from: 'smart' keeps the
curated per-mood pools, 'all' removes the family restriction, 'custom'
limits picks to a user checklist (mood still shapes the speed variant,
with a fallback when the checklist exhausts it). Config persists in
localStorage and is re-pushed live while the director runs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:37:25 +02:00
lucianoandClaude Fable 5 46afd5d318 Auto VJ: a director that adapts the visuals to the playing track in real time
The audio engine now tracks musical features: fast/slow energy EMAs, BPM
(median of beat intervals), a quiet/groove/peak mood with hysteresis, and
drop detection (fast energy diverging from slow right after a lull). An
output-side director, toggled from the control UI, switches presets every
16 beats (or ~14s without beats) and immediately on a drop, drawing from
mood-matched family pools (scenic for quiet, fluid/geometry for groove,
fractals/tunnels/fire for peak) while avoiding recent repeats. A manual
effect pick takes over and turns the director off.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:32:18 +02:00
lucianoandClaude Fable 5 d5b48477ad Seven scenic RGB families: Cielo, Aurora, Mare, Montagne, Galassia, Solidi 3D, Griglia Neon
New fieldRGB path in the uber-shader (families 34+): scenes return full
colour instead of a palette-mapped scalar, with the palette tinting the
scene (hue/sat/contrast still applied via colorizeRGB). Sky with drifting
fbm clouds and sun; aurora curtains over twinkling star dots (stars light
a dot inside the grid cell, not the whole cell); perspective ocean with
crests and sun glitter; parallax mountain ridgelines at sunset; spiral
nebula; raymarched morphing solid (box/octahedron/sphere, palette-lit,
beat-pumped); synthwave grid with striped retro sun. Audio: bass drives
sun glow/waves/grid speed, treble twinkles, beat pumps. Scenic families
get a gentler bass-zoom so the horizon doesn't pump. Append-only family
indices (saved presets don't shift). 714 new presets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:20:58 +02:00
lucianoandClaude Fable 5 8645838e1a Fluid: adaptive quality scaling (steps down when the GPU can't hold ~45fps)
Pi V3D ran the sim at 26fps at full res; with the 3-notch auto-downscale
(dye 1024/768/512) it settles at ~52fps. Never steps back up to avoid
oscillation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:09:15 +02:00
lucianoandClaude Fable 5 2181c4bc97 Fluid: four new emitter choreographies (Fuoco, Anello, Vortici, Onda)
Same solver, different figures via e.fluidMode: 'fire' bottom jets with
buoyancy — implemented as relaxation toward a target updraft (an additive
force integrates to the velocity clamp and turns flames into a wall) plus
height-scaled dye dissipation so flames die as they rise; 'ring' emitters
on a spinning circle with radial beat shockwaves; 'vortex' two counter-
rotating stirrers; 'wave' a travelling sine curtain. Stationary emitters
inject a fraction of the stir force (repeated adds at one spot saturate).
408 new presets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:03:46 +02:00
lucianoandClaude Fable 5 14afe0b98c New effect family "Fluido": real-time GPU fluid simulation (ink-in-water)
Stable-fluids solver (fluid.js) on ping-pong half-float framebuffers:
semi-Lagrangian advection, vorticity confinement (clamped — unbounded
confinement overflows half-float and kills the field), 22 Jacobi pressure
iterations, audio-driven dye/force splats. Three wandering emitters inject
palette-coloured dye (brightness-normalized so dark palette entries stay
vivid); bass drives injection and stirring, beats fire directional bursts,
treble adds swirl. Universal modifiers map onto the sim: warp = vorticity,
speed = sim speed (brightness is speed-normalized), sym = kaleidoscope with
a wedge that rotates via rotSpeed, contrast/invert on display.

The Visualizer delegates to FluidSim when the preset has isFluid (flag is
always present so Object.assign merges can't leave it stale). 102 new
presets (17 palettes x 6 variants).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 14:48:38 +02:00
luciano 7a79ade428 Bump to 1.4.1 2026-06-22 18:06:00 +02:00
lucianoandClaude Opus 4.8 0c2f2b8190 Waveform: decode peaks in-renderer via Web Audio (no external ffmpeg needed)
The packaged app doesn't bundle ffmpeg, so on Macs without a system ffmpeg the
waveform stayed blank. Compute peaks by reading the file bytes (new file:read
IPC) and decoding with Web Audio's decodeAudioData in a low-rate AudioContext;
ffmpeg in main remains only as a fallback.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 18:03:29 +02:00
luciano c98ebda03f Bump to 1.4.0 2026-06-22 16:45:53 +02:00
lucianoandClaude Opus 4.8 26a5000b04 Playlist: scrub/seek playback by clicking-dragging the waveform
Pointer on the waveform now seeks: scrub the playhead on the playing track
(new 'seek' output message setting currentTime) or start a stopped track from
the clicked point (playIndex(i, fromTime)). Grabbing within ~10px of the green/
red handles still adjusts the trim in/out instead of seeking.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 16:45:00 +02:00
lucianoandClaude Opus 4.8 882dd4643a Playlist: per-track start/end trim, total/elapsed/remaining times, waveform cards
- Per-track start/end points (mm:ss inputs, 'set to current' buttons, draggable
  handles on the waveform). Trim applied via audio.setTrim (seek to start, stop
  at end) and pushed live to the playing track.
- Wider cards showing elapsed / total / remaining for the trimmed range.
- Waveform rendered per track: peaks computed in main via ffmpeg (mono 8kHz PCM
  -> 400 normalized buckets, cached), drawn on a canvas with trim region +
  playhead. New audio:peaks IPC + djv.peaks preload binding.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 16:36:54 +02:00
luciano a8973619e6 Bump to 1.3.0 2026-06-22 15:31:33 +02:00
lucianoandClaude Opus 4.8 4afaac08dd Playlist: visual-only 'Intermezzo' items (effects/text/image between tracks)
Add interlude playlist entries with no audio that run their own scene for a set
duration, then auto-advance. Shares a unified timed-segment runner with the
inter-track gap (pause/resume via the Play button). New 'playSilence' output
message + audio.silence() to stop audio while keeping meters/recording alive.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:16:32 +02:00
lucianoandClaude Opus 4.8 ed73c016f3 Playlist: auto-blend video under active scene effect; inter-track pause/intermission with continuing scene
- When a playlist video has an active scene effect, auto-apply 'screen' blend so
  the effect shows through (only if the user left blend at default 'normal';
  manual choices are respected). Restores on effect-off / next track.
- Per-track 'Pausa dopo' (seconds): after a track ends, keep its scene timeline
  running for N seconds as an intermission (scene elements placed past the song
  length appear during the pause), then advance. Countdown + badge in the row.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:10:33 +02:00
lucianoandClaude Opus 4.8 57a6bea3b4 Scenes: clear stale text/image when a track (re)starts
On restart, lastScene was reset to null and a channel with nothing active at
t=0 also evaluated to null, so the diff saw 'no change' and never sent the hide
command — leftover scene text stayed on screen. Use an undefined sentinel so
advanceCues applies (and thus clears) every channel once at scene start.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:56:40 +02:00
lucianoandClaude Opus 4.8 56230cb3b0 Scenes: independent per-element timing (effect/text/image) with full inline options + duration; dedicated Playlist tab
Each scene element (effect, text, image) now has its own appearance time and
optional duration, with all styling options inline (no more capture-from-panel).
Live preview applies edits immediately on the playing track. Moved the playlist
and its video-render controls into a new Playlist tab.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:53:05 +02:00
lucianoandClaude Opus 4.8 dc37e4ab3f Playlist: fix video track restart; per-cue full effect picker (family + preset dropdowns)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:42:29 +02:00
lucianoandClaude Opus 4.8 96a8f3104c Bump to 1.2.0 for new release
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 01:57:47 +02:00
lucianoandClaude Opus 4.8 4dc873bc27 Make effects react to audio much more visibly (brightness pulse, beat flash, bass zoom)
The visuals received the audio correctly but modulated only small terms, so the
reaction was subtle versus the clearly-moving meters. Strengthen the universal
audio response in the shader without touching meter calibration.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:29:25 +02:00
lucianoandClaude Opus 4.8 35f7addb03 Scrolling text: 'side edges' mode with characters stacked vertically on both borders
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:18:19 +02:00
lucianoandClaude Opus 4.8 8db2578eba Richer scene cues: full text styling (direction/effect/font/size/color) and
image size/position, plus a redesigned scene editor UI

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:11:05 +02:00
lucianoandClaude Opus 4.8 144aaaa233 Docs: comprehensive README of all features; bump to 1.1.0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:03:43 +02:00
lucianoandClaude Opus 4.8 4604b42f8f Scrolling text: vertical direction option (up / down) in addition to horizontal
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:01:40 +02:00
lucianoandClaude Opus 4.8 50b4223100 Playlist-video blend/opacity/fit controls + export/import playlist to file
- Blend mode, opacity and fit for videos played from the playlist (mix with visuals).
- Save/Load buttons to export/import a playlist (with scenes/cues) to a JSON file
  via native dialogs; the playlist already auto-persists between sessions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:52:55 +02:00
lucianoandClaude Opus 4.8 0f0accc67d Playlist supports video tracks (full-screen video + audio through the analyser)
Audio and video files can both be added to the playlist; video tracks play
full-screen with their audio routed through the analyser (visuals/waveform
react), have duration/progress, and are included in recordings. Persisted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:46:44 +02:00
lucianoandClaude Opus 4.8 1ae8fa81a7 Add video layer: load VJ video loops that blend with the visuals
Loads a muted looping video as a layer above the WebGL canvas with opacity,
blend mode and fit controls; included in MP4 recordings and droppable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:37:59 +02:00
lucianoandClaude Opus 4.8 5c60a38ff1 Release packaging: unsigned mac DMG build + install/security-bypass docs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:28:06 +02:00
lucianoandClaude Opus 4.8 e0856866d2 Timed scene cues per track + persistent playlist/scenes
- Each playlist track holds a timeline of cues (@time → effect/text/image);
  cues fire automatically as the track plays, driven by progress reports.
- Playlist (tracks, hotkeys, cues) is saved to userData and restored on startup,
  like the pad bank.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:15:40 +02:00
lucianoandClaude Opus 4.8 8925fa50f9 Per-track scenes: auto-apply effect + text + image when a playlist track starts
Each playlist track gets an optional scene (🎬) bound to it: pick the current
effect, a ticker text and an overlay image. When the track plays, the scene is
applied automatically — a cue/queue per song. Scene image is a dedicated output
layer (also captured in recordings).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:08:50 +02:00
lucianoandClaude Opus 4.8 67a4a32dea Waveform: scrolling amplitude envelope (song-style) tied to the speed slider
Replaces the fast instantaneous oscilloscope with a mirrored filled waveform
that scrolls over time like DJ-software waveforms; scroll rate follows the
visual speed control.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:58:46 +02:00
lucianoandClaude Opus 4.8 eee3c63133 Smoother waveform: 256 samples + interpolated segment-distance line
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:53:51 +02:00
lucianoandClaude Opus 4.8 5f9e33b7dd Add waveform (oscilloscope) and band-reactive effect families
- Time-domain waveform uniform (uWave) fed to the shader.
- New families: Waveform, Waveform Radiale, Tri-Banda (concentric per-band zones),
  and Reattivo Bassi/Medi/Alti (single-band reactive).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:50:20 +02:00
lucianoandClaude Opus 4.8 19085e9c16 Playlist: click a track name to (re)start it from the beginning
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:46:54 +02:00
lucianoandClaude Opus 4.8 9653306a68 Text effects, pad crossfade, playback progress + per-track durations
- Scrolling text: font, size, weight, colour and movement effects (up/down, wave,
  zoom, flash, rotate) rendered per-letter (and captured in recordings).
- Larger multiline text input.
- Pad bank: crossfade between pads (per-source gain ramps in the audio engine).
- Duration + remaining-time and progress bars for the playlist and the active pad,
  via metadata probing and live progress reports from the output window.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:44:28 +02:00
lucianoandClaude Opus 4.8 0a04df32de Pad bank: assignable per-pad hotkeys (persisted)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:28:49 +02:00
lucianoandClaude Opus 4.8 47728d0d2a Effects engine, SVG/VU/silhouette categories, pad bank, MP4 recording, dual-window UI
- Parametric effect engine: 23 shader families × palettes × variants (~2300 presets)
  with a filterable library and an effect sequence (auto-cycle by time or beat).
- Effect categories: fractals/abstract, dancing silhouettes, SVG/Image source
  (loads any SVG/image as a recolourable audio-reactive effect; 50+ bundled CC0 SVGs),
  and VU-Meter (32-band spectrum bars, analogue needle, stereo LEDs).
- Dual-window architecture: control panel + fullscreen output on an external display
  (reliable via simple-fullscreen); tabbed control UI (Audio, Effetti, Pad, Immagini,
  Testo, Registra, Schermo).
- Audio: file playback + live input + output device selection, per-band visual EQ,
  audio playlist (reorder, hotkeys, per-track play/pause, repeat).
- Pad bank: 5×4 launchpad with persistent assignments; pressing a pad stops the current.
- Overlays: slideshow images (resizable), two freely positioned/resizable logos,
  scrolling ticker text.
- MP4 recording of the composited output (visual + overlays + audio) via MediaRecorder
  + ffmpeg, with selectable aspect ratios (16:9, 9:16, 1:1, 4:3, 3:4, 21:9).
- App icon (.icns) and dock icon; author Dj LuZa.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:25:39 +02:00
lucianoandClaude Opus 4.8 b32ea47ae5 Initial commit: DJ Visualizer
Electron app with audio-reactive fractal/abstract visuals on an external
display. Dual-window setup (control panel + fullscreen output), 8 WebGL
scenes, audio from file/live input/system audio, image and scrolling-text
overlays.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 12:44:17 +02:00