Commit Graph

101 Commits

Author SHA1 Message Date
L'électron rare fac0f7e055 feat(launcher): data-only mode + mode picker
Add ModePickerWindow.swift for live vs data-only.
Update MenuBarContent and ProcessManager for modes.
Bump Info.plist version, update app entry point.
2026-05-13 09:33:47 +02:00
L'électron rare 8913393e4c feat(data-feeds): data-only profile + feeds
Add config.data-only.toml for headless bridge mode.
Update .gitignore to exclude .venv, __pycache__, *.pt.
Improve USGS, SWPC, RTE, GitHub, and pose feeds:
error handling, rate limiting, keypoint emission.
Refactor bridge.py to support -c config file flag.
2026-05-13 09:33:36 +02:00
L'électron rare 4d32e61bae chore: gitignore model weights + claude settings
Add *.pt and .playwright-mcp/ to root .gitignore.
Update .claude/settings.json with latest permissions.
2026-05-13 09:33:24 +02:00
L'électron rare 02de5302c9 feat: add realart web application with Hydra, WebGL, and OSC data feeds
- Implemented Hydra visualizations in `web_realart/public/hydra/app.js` and `index.html`.
- Created WebGL visualizer using Three.js and WebGPU in `web_realart/public/webgl/app.js` and `index.html`.
- Developed main landing page in `web_realart/public/index.html` to showcase different visualizations.
- Set up WebSocket server in `web_realart/server.js` to relay OSC messages to web clients.
- Added health check API endpoint for monitoring server status.
2026-05-11 07:21:04 +02:00
L'électron rare 0d189a2139 feat: add real-time data feeds for various sources
- Implemented new data feeds for Blitzortung, Bluesky, GCN, GitHub, Mempool, Netzfrequenz, OpenSky, RTE éCO2mix, SWPC, USGS.
- Introduced utility functions for rate limiting and hashing.
- Established OSC communication for data reception and processing.
- Created SuperCollider definitions for handling incoming data and generating audio output based on real-time data.
- Added configuration management for API credentials and polling intervals.
2026-05-11 06:59:44 +02:00
L'électron rare 02eaf654d5 ci: dmg tout-inclus avec SC + node + libusb
User : "pourquoi en brew ? pourquoi ne pas les inclures dans
le build ?".

Le DMG embarque maintenant TOUT — l'utilisateur n'a plus rien
à installer manuellement :

- SuperCollider.app 3.14 universel (~150 MB, téléchargé depuis
  github.com/supercollider releases puis copié depuis le .dmg
  monté + démonté)
- node-v20.18.0-darwin-arm64 binary (~70 MB) standalone dans
  payload/runtime/
- libusb-1.0.0.dylib bundled dans oscope-of.app/Contents/
  Frameworks/ avec install_name_tool -change pour le retrouver
  via @executable_path/../Frameworks/libusb-1.0.0.dylib

DMG attendu ~250 MB au lieu de 10 MB. Mais entièrement
autonome : drag & drop, premier lancement, ça tourne.

INSTALL.txt + release notes mis à jour pour indiquer
"tout-inclus, rien à installer en plus".
v0.1.0
2026-05-08 00:03:55 +02:00
L'électron rare 1a464a89db ci: dmg complet avec launcher + sound_algo
Le DMG ne contenait que oscope-of.app. Maintenant inclut :
- oscope-of.app (visualizer)
- AVLiveLauncher.app (build via xcodebuild dans CI)
- sound_algo/ (source SuperCollider complète)
- INSTALL.txt avec prérequis brew + marche à suivre
2026-05-07 23:59:09 +02:00
L'électron rare f3acd53118 ci: contents write permission for release 2026-05-07 23:54:38 +02:00
L'électron rare 373d28f08d ci: github actions release dmg
Deux workflows GitHub Actions :

.github/workflows/ci.yml :
- Sur chaque push main + PR
- macos-14 (Apple Silicon)
- Install libusb + openFrameworks 0.12.1 (cached)
- Symlink oscope-of dans of/apps/myApps
- make Release + verify binary

.github/workflows/release.yml :
- Sur tag v* + workflow_dispatch (bouton manuel)
- macos-14 + libusb + create-dmg
- Build oscope-of + launcher
- Copie data/ dans Contents/Resources/data du .app
- Crée AV-Live-vX.Y.Z.dmg avec icone Workbench
- Fallback tar.gz si create-dmg fail
- Upload artifact + crée GitHub Release sur tag
- Notice Gatekeeper dans release notes (non signé)
2026-05-07 23:49:22 +02:00
L'électron rare 32e68c0aca docs: README qui claque
Réécriture du README pour montrer la richesse réelle du
projet (avant : 3 visualizers ; maintenant 41 backgrounds,
35 modèles 3D, 14 logos OS, 15 démoparties, etc.).

Sections :
- Tagline + ASCII archi
- Features par composant (sound_algo / oscope-of / launcher)
- 15 démoparties listées avec touches AZERTY FR
- Live FX control complet (scenes, params, system)
- Pipeline audio reactivity Hantek → FFT → bandes
- Quick start macOS step-by-step
- Architecture détails + ports OSC
- Credits demoscene + greetings invitation
2026-05-07 23:46:06 +02:00
L'électron rare 19cb0c1ddc fix(of): track sprites/ for MBP deploy 2026-05-07 23:21:14 +02:00
L'électron rare 4803040ef1 feat(of): FFT 2048 + sphere live default 2026-05-07 23:12:27 +02:00
L'électron rare 771251a4c9 fix(of): SphereWave use downsampled audio
User : "SphereWave est bien audio reactive avec le hantek ?"
+ "et l'utiliser dans toutes les démos".

Verification + amélioration audio reactivity :

AudioAnalyzer expose désormais publicly :
- monoDown() : ring downsamplé 48 kHz audio (kFftSize floats)
- magDown()  : magnitudes FFT 1024 (bin width ~47 Hz)
- monoHead() : index courant dans le ring
- audioSr()  : 48000

VisFrame ajout pointeurs optionnels monoDown / magDown +
monoHead populated par ofApp::update.

SphereWaveVis::update : préfère désormais magDown/monoDown du
frame (FFT downsamplée 47Hz/bin → vraie résolution audio
20Hz-16kHz) au lieu de la FFT raw Hantek interne (7800Hz/bin
qui collait toute la bande audio dans 3 bins).
Fallback sur l'ancienne FFT interne si downsamples non dispos.

Ajout SphereWave dans 2 démos supplémentaires :
- Demo 7 AMBIENT VOID  : nouvelle scène SPHERE
- Demo 14 GRAND FINAL  : nouvelle scène SPHERE
2026-05-07 23:07:58 +02:00
L'électron rare 21b5e5bb32 feat(of): images dans toutes demos + sphere 3D
User : "pour les effects d'image etc tu mets à jour toutes les
démos. puis la wave tu la fait vraiment en sphère 3D".

SphereWaveVis enrichi :
- 3 sphères concentriques au lieu d'une seule :
  * solide centrale modulée par FFT (bins par lon)
  * coque externe wireframe scaled 1.4x rotation inversée bass
  * coque interne wireframe scaled 0.6x pulsée par kick
- 2 sphères pôles haut/bas (treble) pour repère 3D
- Camera orbitale plus dramatique (rayon - kick, hauteur treble,
  vitesse modulée bpm)
- Render solid + wireframes superposés
- Couleurs vert / bleu / magenta selon couche

Toutes les démos ont maintenant au moins 1 acte avec image OS :
  AMIGA       → ImgWB ✓
  C64         → ImgC64 ✓
  ACID        → ImgAtari (NEW)
  TUNNEL      → ImgNeXT (NEW)
  FREQUENCIES → ImgLotus + SphereWave (NEW)
  GLITCH      → ImgOS2 (NEW)
  AMBIENT     → ImgApple (NEW)
  RAVE        → ImgWin95 (NEW)
  MEMORY      → ImgNeXT + ImgBeOS ✓
  GREETINGS   → 7 logos parade ✓
  ESCHER      → ImgWin1 (NEW)
  INFERNO     → ImgDos ✓
  OUTRUN      → ImgWin311 (NEW)
  CUBE STORM  → ImgZX + ImgIrix (NEW)
2026-05-07 23:05:14 +02:00
L'électron rare 574acfbba4 feat(of): mac AZERTY FR keyboard support
User : "tu m'adapte pour un clavier mac azerty fr".

Sur Mac AZERTY FR, la rangée du haut sans shift donne
& é " ' ( § è ! ç à au lieu de 1234567890. Et les symboles
US ! @ # $ % (shift+1..5 QWERTY) sont injouables.

Adaptations :
- Démos 0-9 : digits 1-0 + alias chars AZERTY FR direct
    1 / &      → demo 0  AMIGA
    2 / é (0xe9) → demo 1 C64
    3 / "      → demo 2  ACID
    4 / '      → demo 3  TUNNEL
    5 / (      → demo 4  FREQ
    6 / § (0xa7) → demo 5 GLITCH
    7 / è (0xe8) → demo 6 AMBIENT
    8 / !      → demo 7  RAVE
    9 / ç (0xe7) → demo 8 MEMORY
    0 / à (0xe0) → demo 9 GREETINGS

- Démos 10-14 : F6-F10 (universels, layout-indépendants)
  remplace les anciens ! @ # $ % qui étaient inaccessibles
  ou conflictuels sur AZERTY FR Mac.

- Beat-sync toggle : * (US) ou \ (universel).

Hint clavier mis à jour pour refléter le double mapping.
2026-05-07 22:59:38 +02:00
L'électron rare c0c0d541cf feat(of): ImageVis fx + 14 OS logos demos
ImageVis : charge un PNG et l'anime avec effets demoscene :
- Mirror reflection bas (flip Y alpha gradient)
- Ghost trail 3 couches en arrière (RGB shifted)
- Chromatic aberration RGB (rouge gauche / bleu droite, kick boost)
- Twister wobble : 12 bandes horizontales avec offset X sin(t,y)
- Scanlines CRT 3px
- Glitch tear horizontal sur kick > 0.5
- Boost luminance global sur kick

14 nouveaux BgKind (ImgWin1/311/95, ImgLotus, ImgDos, ImgAtari,
ImgApple, ImgWB, ImgNeXT, ImgBeOS, ImgOS2, ImgIrix, ImgZX,
ImgC64) qui chargent leurs PNG respectifs depuis sprites/.

Intégrations dans démos :
- AMIGA : ajout WORKBENCH (ImgWB) avec narration DH0
- C64   : BOOT acte utilise maintenant ImgC64
- INFERNO : ajout DOS PROMPT acte (ImgDos)
- MEMORY LANE : ajout NEXTSTEP + BEOS actes
- GREETINGS : 7 nouveaux actes 12s parade des logos OS
  WIN 1.0 / LOTUS 123 / ATARI / APPLE 6 / OS/2 WARP /
  IRIX SGI / ZX SPECTRUM

GREETINGS demo passe de 11 à 18 actes (parade complète).
2026-05-07 22:56:11 +02:00
L'électron rare 582a839895 feat(of): SphereWaveVis 3D + Win 1.0/3.11/etc PNG
User : "la WAVE faut me faire un version sphérique 3D
spectrogramme et waveforme" + "tu mets aussi windows 1.0
windows 3.11 etc... lotus 123 tout les OS possibles".

SphereWaveVis 3D :
- Mesh sphère paramétrique 64x32 (longitude x latitude)
- Pour chaque vertex : rayon = base + FFT[bin proportionnel
  à longitude] + waveform[sample_idx]
- FFT 1024 sur (CH1+CH2)/2 Hantek raw, log mapping
- Camera orbitale autour de la sphère, light point pulsé
  sur kick avec couleur audio-modulée
- Render solid + wireframe overlay phosphor
- Couleur cycle hue + saturation modulée par mid+treble

Nouveau BgKind::SphereWave (35 backgrounds total).

13 logos OS/software PNG dans bin/data/sprites/ :
- windows_1_0, windows_311, windows_95
- lotus_123, msdos
- atari_fuji, apple_rainbow
- amiga_wb, nextstep, beos, os2_warp, irix
- zx_spectrum, c64_basic
+ 5 SVG vectoriels source dans le même dossier.
2026-05-07 22:50:27 +02:00
L'électron rare c9fba24eaa feat(of): 5 OS shaders + 13 logos PNG
Shaders pixel art OS classiques (homages, pas marques) :
- workbench.frag : Amiga Workbench 1.x checker bleu/orange
  + barre de titre + fenêtre flottante avec icône
- macos_classic.frag : Mac OS Classic UI gris hatch + happy
  Mac face stylisée avec yeux + bouche
- atari_fuji.frag : 3 barres convergentes Fuji 1972 + texte
- ocean_loader.frag : bandes horizontales rainbow scrollantes
  type C64/Spectrum loader 1986-1990
- win95.frag : ciel bleu nuageux FBM + 4 quadrants colorés
  ondulant comme le drapeau Win95

5 nouveaux BgKind : Workbench MacOSClassic AtariFuji OceanLoader Win95

13 logos PNG via PIL pixel art dans bin/data/sprites/ :
- windows_1_0, windows_311, windows_95
- lotus_123, msdos
- atari_fuji, apple_rainbow
- amiga_wb, nextstep, beos, os2_warp, irix
- zx_spectrum, c64_basic

Plus 5 SVG vectoriels (workbench_icon, atari_fuji, happy_mac,
ocean_diamond, apple_bitten) pour usage futur.

ImageVis loader prévu en suivante itération.
2026-05-07 22:48:12 +02:00
L'électron rare 3d5a7eb72a feat(of): diversify INFERNO OUTRUN GLITCH
Audit : 3 démos répétaient le même background plusieurs fois :
- INFERNO : Fire x3 → diversifié avec Vortex, Gear, Caustics
- OUTRUN : GridPersp x3 → diversifié avec Mode7, Octahedron,
  Rotozoom, PlasmaFbm
- GLITCH : Voronoi x3 → diversifié avec DotTunnel, TunnelCubes,
  PlasmaC64, Vortex

Toutes les démos ont maintenant 5-11 actes (médiane 6) avec
backgrounds majoritairement uniques au sein de la démo, et
narrations distinctes par acte.

INFERNO 6 actes : SPARK / WILDFIRE / FORGE / PHOENIX /
                  BURNOUT / ASHES
OUTRUN 6 actes : DRIVE OFF / NEON HIGHWAY / DASHBOARD /
                 OVERDRIVE / VAPOR ROAD / HORIZON
GLITCH 6 actes : PROBE / HOPF LINK / DATA / FRACTALS /
                 CRASH / REBOOT
2026-05-07 22:39:19 +02:00
L'électron rare 32be18087a fix(of): unique album per demo + ui overlaps
User : "la demo sur la touche 1 et la touche 2 ont toujours
la même tracks audio" + "tu vérifie les chevauchement de texte".

Audit : 3 démos commençaient avec J (6/9/10), 2 avec T (7/11),
2 avec M (0/1). Maintenant 15 albums premiers actes uniques :
  M-N-A-P-I-V-J-T-U-W-O-E-R-Q-L

Overlaps UI corrigés :
- Barre progression narrative y=70 chevauchait le titre 2.5x
  qui s'étend à y~80. Déplacée à y=92.
- Hint narratif H-48 chevauchait hint FX H-50. Déplacé à H-78.
- Hint narratif élargi pour mentionner ! @ # $ % et q.
2026-05-07 22:36:18 +02:00
L'électron rare eea9d8d32c feat(of): AZERTY layout - 10 scenes + 17 fx params
User : "azertyuiop = type de scene et qsdfghjklmwxcvbn,;:= pour
les paramètres".

Refonte complete du clavier en layout AZERTY :

[Top row AZERTYUIOP] : 10 backgrounds live override
  a = BoingBall   z = Tunnel      e = Metaballs
  r = Voronoi     t = Twister     y = KIFS
  u = Fire        i = Mode7       o = Octahedron
  p = PlasmaC64

[Middle/bottom rows] : 17 paramètres FX
  s = SPD speed       d = KCK kick       f = ROL roll
  g = PAN pan         h = CRV curve      j = TLX tileX
  k = TLZ tileZ       l = DIR direction  m = BLM bloom
  w = CHR chroma      x = KAL kaleido    c = SCN scanlines
  v = PIX pixelate    b = HUE hue        n = GRN grain
  , = VIG vignette    ; = SAT saturation
  : = reset all (shift+. AZERTY)

[F-keys] : system toggles déplacés
  F1 fullscreen   F2 GUI       F3 postFx
  F4 autoglitch   F5 reload shaders

[Flèches up/down] : ajuste valeur du paramètre selectionné
[Espace] glitch pulse   [q/esc] sortie narrative + bg override

liveBgOverride_ ajouté dans ofApp : permet override du
background scope4 hors mode narratif via touche scène.
drawScope4 priorité : narrative > liveBgOverride > toggles.
2026-05-07 22:18:48 +02:00
L'électron rare e62a8275f9 feat(of): live UX - lettre selecteur + flèches
User : "le mode live on améliore l'interface UX. les contrôles
s'appellent pour une touche de a à z et flèches up down pour
changer la valeur".

Refonte du contrôle FX live :

Avant : 19 lettres en pairs (a/z s/x d/c e/v t/n u/m i/l o/h
        + j/y combo + w reset)
Après : 1 lettre = sélectionne 1 paramètre, flèches haut/bas
        ajustent la valeur du paramètre sélectionné, w reset.

Mappings mnémoniques (évite f g p k r b déjà bindés) :
  s : Speed (tunnel)         d : pan amplitude (Drift)
  c : Crushing kick boost    v : curVe amplitude
  l : roLL amplitude         x : tile X (angulaire)
  z : tile Z (profondeur)    n : directioN lerp

UP / DOWN : ×1.20 / ×0.83 sur le param sélectionné, clamp [0.05;12].
W : reset tous les multipliers à 1.0.

Overlay FX bas écran : encadré magenta autour du slot actif,
couleur saturée pour le selected, hint clavier ligne au-dessus
"[s c l d v x z n] select   [UP DOWN] adjust   [w] reset all".
2026-05-07 22:14:11 +02:00
L'électron rare d13498ae62 fix(of): disable FBO transition (mirror bug)
Le pipeline FBO de transition causait un flip Y persistant
des textes (FBO rendu top-left vs gl_FragCoord bottom-left
en GL). Le flip Y dans les shaders corrigeait la transition
mais pas le rendu courant. Solution simple : on bypass le FBO
et on rend directement à l'écran via postfx comme avant. Les
transitions visuelles sont assurées par le flash blanc 0.45s
+ le glitch RGB postfx 0.45s déclenchés sur enterScene().

Les 3 shaders transitions/*.frag restent dans le repo pour
un futur fix architectural propre.

3 nouveaux modèles 3D intégrés aux narrations :
- Demo 1 AMIGA : ajout PYRAMIDE acte 6
- Demo 3 ACID  : ajout DNA HELIX + ROSACE après VORTEX
2026-05-07 22:08:20 +02:00
L'électron rare 94d00286f0 feat(of): rebalance albums + 6 wireframe models
User : "1 et 2 ont la même tracks par exemple" + "ajoute encore
plus de gfx et de modèle 3D wireframe".

Audit album usage : M utilisé 12 fois (très redondant), 8
albums (B C D E K N O W) jamais utilisés.

Rebalance albums dans 5 démos :
- Demo 1 AMIGA : M/M/M/M/G/G → M/R/G/B/C
- Demo 2 C64   : M/M/M/M/V → M/C/D/K/V
- Demo 3 ACID  : A/A/A/H/H/J → A/H/D/H/A/J
- Demo 4 TUNL  : P/P/P/F → P/S/E/F
- Demo 5 FREQ  : I/I/I/Q/Q/Q → I/W/C/Q/B/Q
- Demo 7 VOID  : J/J/S/S → J/O/S/S/W/J

Maintenant 23/23 albums utilisés au moins une fois.

6 nouveaux modèles 3D wireframe-friendly :
- gear.ply : pignon 12 dents
- cone.ply : cône simple
- pyramid.ply : pyramide 4 cotés
- rose3d.ply : rosace polaire k=5 tessellation tube
- geosphere.ply : icosphere subdivisée niveau 2
- dna.ply : double helix tube avec 2 brins

35 modèles 3D au total. ModelVis affiche déjà les wireframes
en overlay (ofSetColor 255,230,180,120 + drawWireframe).
2026-05-07 22:04:47 +02:00
L'électron rare 3fd376c3d2 fix(of): mirror text + boing first
Bug critique : tous les textes apparaissaient en miroir
vertical depuis l'introduction des transitions FBO. Cause :
gl_FragCoord est bottom-left en GL alors que les FBO oF
sont rendus top-left. Solution : flip Y dans les 3 shaders
de transition (crossfade/dissolve/wipe).

  vec2 px = vec2(gl_FragCoord.x, uRes.y - gl_FragCoord.y);

AMIGA TRIBUTE demo : BOING BALL maintenant en premier acte
au lieu d'INSERT DISK, pour que l'utilisateur voie tout de
suite la boule rouge/blanche emblematique du 1984 Amiga.
2026-05-07 22:00:05 +02:00
L'électron rare 6467ec5e86 feat(of): boing ball + 5 models + enrich demos 0-9
Nouveaux fx demoscene classiques :
- boing.frag : BOING BALL Amiga 1984 (RJ Mical/Dale Luck), sphere
  damier rouge/blanc 8x8, lambert + spec, ombre allongee, bounce
  vertical sync BPM. Premiere demo Amiga jamais ecrite.
- mode7.frag : sol perspective SNES/outrun + sky retro + soleil
- plasma_c64.frag : sin layers + palette indexee 8 couleurs
  authentique C64 1985
- dot_tunnel.frag : grille de dots scrollant en perspective,
  tunnel demoscene classique

5 nouveaux modeles 3D parametriques :
- supershape.ply : Gielis super formula (forme vivante)
- lorenz.ply : attracteur de Lorenz tessellation tube (chaos)
- hopf.ply : sphere avec Hopf fibration twist
- enneper.ply : surface minimale d'Enneper
- hopf_link.ply : 2 anneaux entrelaces (link Hopf)

29 BgKind au total maintenant (29 backgrounds différents).

Demos 0-9 enrichies (tous a 5-7 actes maintenant) :
- AMIGA TRIBUTE : ajout BOING BALL + VECTOR DEMO
- C64 LOWLIFE : ajout PLASMA C64 + DOT TUNNEL
- ACID JOURNEY : ajout SUPERSHAPE + VORTEX + CAUSTICS
- FREQUENCIES : ajout LORENZ attractor + HOPF fibration
- GLITCH WORLD : ajout HOPF LINK
- AMBIENT VOID : ajout OCTAHEDRON + CAUSTICS + ENNEPER
- RAVE : ajout MODE7 + INFERNO fire
- GREETINGS : 11 actes parcourant tous les classiques
  (BOING/PLASMA/DOT/TWISTER/COPPER/FRACTAL/MOBIUS/etc)
2026-05-07 21:57:25 +02:00
L'électron rare 2213223e37 fix(of): ofMesh::load is void in oF 0.12 2026-05-07 21:49:25 +02:00
L'électron rare b539e7121f feat(of): wave 6 - 3D models + ESCHER demo
VectorCubesVis : grille 5x3x5 cubes ofBoxPrimitive +
material/light/camera, rotation per cube + camera orbitale.

15 modèles 3D PLY genérés :
- Möbius strip (one side one edge)
- Klein bottle (Lawson immersion)
- Trefoil knot tube (real tessellation)
- Twisted torus (Escher-like)
- Lucy 50k points (Stanford Lucy CC0)
- Helix (4 turns spiral)
- Catenoid (cosh revolution)
- Hyperboloid (one sheet)
- Boys surface (non-orientable)
- Lemniscate (Bernoulli figure 8)
- Penrose triangle (impossible)
- Sphere icosahedral
- Icosahedron + dodecahedron
- Torus standard

ModelVis class : charge un .ply, fit auto bounding box,
orbital camera, light pulsée audio, material+wireframe overlay,
rotation continue, scale audio.

15 nouveaux BgKind : Mobius, Klein, TrefoilTube, TwistedTorus,
Lucy, Helix, Catenoid, Hyperboloid, Boys, Lemniscate, Penrose,
Sphere3D, IcoMesh, DodMesh, TorusMesh.

Démos enrichies avec les modèles 3D :
- Demo 4 TUNNEL VISION : ajout TREFOIL + TORUS actes
- Demo 9 MEMORY LANE : ajout LUCY (Stanford), HELIX, CATENOID
- Demo 11 ESCHER DREAMS (renommée FRACTAL DREAMS) :
  GENESIS / MOBIUS / KLEIN / PENROSE / BOYS / INFINITE /
  COLLAPSE - 7 actes avec greetings M.C. ESCHER
- Demo 14 CUBE STORM : ajout VECTOR cubes 3D + ICO + DOD

bin/data/models/ tracké dans le repo.
2026-05-07 21:47:43 +02:00
L'électron rare d020f5fc4b feat(of): wave 5 - transitions FBO + beat-sync
Transitions FBO entre scenes des demoparties :
- 2 ofFbo ping-pong (sceneFbo_[0/1]) capturent la scene rendue
  complete (post FX inclus) avant affichage
- Sur enterScene() : swap idx + reset transitionT a 0, choisit
  une transition aleatoire parmi 3 (crossfade/dissolve/wipe)
- transitionDur 0.7s, progression smoothee
- Composite final via shader transition qui blend sceneFbo[prev]
  vers sceneFbo[cur] selon progression uT

3 transition shaders :
- crossfade.frag : mix lineaire prev/cur
- dissolve.frag : noise hashe en blocs 6x6, smoothstep autour
  du seuil pour un fade doux
- wipe.frag : wipe radial depuis le centre + anneau lumineux
  a la frontiere

Beat-sync mode :
- Touche '*' toggle beatSyncEnabled
- Quand actif, launchDemo queue dans pendingDemoIdx au lieu
  de fire immediatement
- update() check kick rising edge (>0.55, prev<=0.55) → fire
  la demo en attente
- Permet de synchroniser les transitions au prochain kick
  pour fluidifier la performance live
2026-05-07 21:40:10 +02:00
L'électron rare 0445255a39 feat(of): wave 4 - 3 fx + 4 styles + greetings v3
3 nouveaux shaders fullscreen :
- caustics : surface liquide vue d'au-dessus, 5 couches sin
  croisees, gradient eau bleu-vert + reflets dores
- vortex : spirale hypnotique, twist 1/r + spiral arms
  cos(a*N) + halo central, modulee BPM
- octahedron : SDF octahedre central raymarche, palette IQ
  via reflection + fresnel + specular highlight chrome

4 nouveaux scroller styles :
- Cascade : chaque char tombe du haut, easing parabolique
- Chrome : 3 couches superposees offset Y, look metallique
- Bouncy : bond avec gravite, phases decalees
- Squashy : squash & stretch X/Y inverse, pulse audio

10 ScrollerStyle au total (Classic Wavy3D Rainbow Mirror Glitch
Neon Cascade Chrome Bouncy Squashy).

3 nouveaux BgKind : Caustics, Vortex, Octahedron. 16 backgrounds
disponibles au total.

greetings.txt v3 : structure narrative en sections
- Greetings groupes demoscene 50+
- POETRY SECTION
- TECH STACK details
- FESTIVAL SAILLANS 70+ artistes
- DEMOPARTIES list elargie
- LEGENDS individus IQ Gargaj Smash etc
- TOOLS Bonzomatic 4klang Sointu etc
- KEYWORDS metaballs SDF KIFS etc
- CONTROLS reference clavier complete
- AUDIO infrastructure SC details
- INFRASTRUCTURE ports OSC
- HOMAGE narrative scene history
- THANK YOU 1985 - 2026 - INFINITY
2026-05-07 21:35:15 +02:00
L'électron rare 84ed99a9aa feat(of): wave 3 - 4 fx + 5 demos = 15 total
4 nouveaux shaders fullscreen frag-only :
- kifs.frag : Kaleidoscopic IFS 2D, 6 itérations fold + scale
  + rotation, pattern fractal. (Knighty/IQ technique)
- fire.frag : feu Amiga/DOOM-style, FBM scrollant vertical +
  gradient noir-rouge-orange-jaune-blanc, hauteur falloff
- grid_persp.frag : grille perspective infinie outrun, soleil
  vintage avec bandes horizontales, fade horizon
- tunnel_cubes.frag : SDF cubes répétés grille 3D + raymarch,
  tunnel hollow (cubes seulement en couronne)

5 nouvelles demos (slots 11-15) accessibles via shift+1..5
(symboles ! @ # $ %) :

  11 FRACTAL DREAMS  4 actes - KIFS background
                    GENESIS / FOLD / INFINITE / COLLAPSE
                    Greetings IQ et Knighty
  12 INFERNO         4 actes - FIRE background
                    SPARK / FLAME / BURNOUT / ASHES
                    Greetings HARDCODE et TITAN
  13 OUTRUN          4 actes - GRID PERSP background
                    DRIVE OFF / NEON HIGHWAY / OVERDRIVE / HORIZON
                    Greetings STILL et RGBA
  14 CUBE STORM      4 actes - TUNNEL CUBES background
                    INCOMING / CASCADE / GEOMETRY / ZERO
                    Greetings FARBRAUSCH et ANDROMEDA
  15 GRAND FINAL     7 actes - TOUS les bg parcourus
                    OPEN / AMIGA / FRACTAL / FIRE / OUTRUN
                    / CUBES / FAREWELL
                    Mix complet de tous les FX

Display "DEMO N / TOTAL" auto-adapté à demos_.size() pour
gérer les 15 entrées sans regression.
2026-05-07 21:30:43 +02:00
L'électron rare 7837968f6b feat(of): wave 2 - 4 nouveaux fx + narration
4 nouveaux shaders fullscreen frag-only :
- plasma_fbm.frag : 5 octaves FBM + domain warping (IQ),
  modulé bass/mid/treble/bpm
- rotozoom.frag : rotation 2D + zoom + damier procédural,
  classique Amiga revisité
- truchet.frag : pavage Truchet quart-de-cercle + kaleido
  6-12 axes (mid-driven), couleur per cell hash
- sdf_tunnel.frag : raymarching torus repeat-Z, 48 steps,
  fresnel + diffuse + fog, vrai 3D

Narration enrichie : presque toutes les démos sont passées
à 4 actes (au lieu de 3). Plus de greetings demoscene
intégrés au fil des actes (Boozedesign, Mercury, ASD,
TPOLM, Plastic, Razor 1911, Fairlight, etc.).

Backgrounds par scène variés :
- AMIGA/C64 : Twister + Rotozoom
- ACID : PlasmaFbm + Truchet + Metaballs
- TUNNEL VISION : SdfTunnel (vrai raymarched)
- FREQUENCIES : PlasmaFbm + Truchet + Voronoi
- AMBIENT : Starfield + PlasmaFbm
- RAVE : Twister + Voronoi + Truchet
- MEMORY LANE : Rotozoom + Truchet + PlasmaFbm
- GREETINGS : Starfield + Twister + Truchet
2026-05-07 21:25:28 +02:00
L'électron rare 2ac6c50a09 feat(of): aces tonemap + 3 demoscene shaders
Vague 1 :
- postfx.frag : Reinhard -> ACES filmic (Narkowicz). Courbe S
  filmique, contraste hautes lumieres.
- 3 nouveaux shaders fullscreen frag-only :
  * metaballs : 7 balls inverse-square potential, threshold
    module par kick, halo extra
  * voronoi : F1/F2 cells animees + bordure F2-F1 phosphor
  * twister : 4 colonnes Amiga-style rotation Y, faceting,
    palette IQ + scanlines
- ShaderVis.h : wrapper Visualizer mince qui charge n'importe
  quel shader/uniforms standards (uTime/uRes/uBass/uMid/
  uTreble/uKick/uBpm).
- DemoScene::background = BgKind enum (Tunnel/Starfield/
  Metaballs/Voronoi/Twister), choisi par scene narrative.
- Demo 1 AMIGA -> Twister bg, demo 6 GLITCH -> Voronoi bg.
2026-05-07 21:20:46 +02:00
L'électron rare a7bbb9af02 feat(of): scene transition flash + glitch
Pour ponctuer les changements d'acte des demoparties, ajout
d'une transition punchy a chaque enterScene() :

- transitionFlash_ = 1.0 au debut, decay lineaire 0.45s
- Flash blanc plein ecran, alpha = 180 * t^2 (ease-out cubique)
- postfx_.triggerGlitch(0.7, 0.45) en parallele = block
  displacement RGB sur la meme duree
- Drawn entre la waveform circulaire et l'overlay narratif
  pour ne pas masquer le titre d'acte qui suit immediatement
2026-05-07 21:14:38 +02:00
L'électron rare d60dc11309 feat(sc): album signatures + osc humanity
15 albums utilises par les demoparties recoivent une SIGNATURE
distinctive plutot que reecrire 225 .scd individuellement :

palette/album_signatures.scd defines per-album :
- humanize tunables specifiques (timing/vel/detune)
- rotation pool restreint (ex: T = kicks gabber only)
- rotationEvery rate adapte (V=2 glitch fast, S=64 drone slow)
- auto_layer config (timbres + amp + octaves)

Signatures (A H M G L P J I Q T V U R S F) :
  A acid 303+sub  H acid trance saw  M chiptune square
  G detroit rhodes warmpad  L garage vocalpad
  P industrial growl hardlead  J ambient choir drone
  I liquid pluck  Q neurofunk reese  T gabber hoover growl
  V glitch fmbell stab fast rotation
  U vocal trance choir vocalpad  R synthwave rhodes warmpad
  S drone doom drone subboom -2oct  F trance supersaw pad

~playAlbum est wrappe pour appliquer ~applyAlbumSig.(letter)
avant le lancement original. Conservation de ~playAlbum_orig.

OSC handlers added in web_bridge.scd :
- /control/setHumanize <0|1>     toggle humanize global
- /control/setRotation <0|1>     toggle synth rotation
- /control/setLayer <0|1>        toggle auto layer
- /control/humanizeTiming <f>    fine-tune timing 0..0.05s
- /control/humanizeVelocity <f>  fine-tune vel 0..0.5
- /control/humanizeDetune <f>    fine-tune detune 0..0.5
- /control/layerSet <inst...>    full layer config update

Permet de piloter humanity depuis oscope-of par demo.
2026-05-07 21:10:02 +02:00
L'électron rare 985d3708d1 feat(sc): humanize + synth rotation + auto layer
User : "tu refait aussi les tracks avec toutes les possibilité
de synth disponible pour plus de variation et d'humanité dans
ces créations". Niveau choisi : subtil.

3 axes implémentés en helpers globaux qui s'appliquent à TOUS
les 345 tracks existants sans les réécrire :

1) HUMANIZE (engine.scd, opt-in via ~humanizeOn défaut true)
   - Timing offset Pwhite ±3.5ms par note (1.4% sur dur 0.25)
   - Velocity Pwhite ±10% par note
   - Micro-detune ±3 cents sur acid/melody/harmony midinote
   - Appliqué aux 7 Pdef (kickSeq/hatSeq/snareSeq/clapSeq/percSeq/
     acidSeq/melodySeq/harmonySeq) via Pfunc factories ~hTime
     ~hVel ~hDet déclarées dans ~reload
   - Désactivable : ~humanizeOn = false; ~reload.value
   - Tunables : ~humanizeTiming, ~humanizeVelocity, ~humanizeDetune

2) SYNTH ROTATION (palette/synth_rotation.scd, opt-in défaut OFF)
   - 8 rotators (acid/bass/lead/pad/pluck/kick/hat/snare/melody)
   - Pool de 19 versions par catégorie (acid_v1..v19 etc.)
   - Cycle toutes les ~rotationEvery=8 notes (configurable)
   - Vérifie SynthDescLib avant de switcher pour éviter crash
   - Activation : ~setRotationOn.(true)

3) AUTO LAYER (palette/auto_layer.scd, opt-in défaut OFF)
   - 3 layers parallèles à melody/harmony/acid
   - Mirror Pdef qui rejouent le même score avec instrument
     différent (warmPad/choir/sub_boom par défaut)
   - Octave offset configurable, amp réduit (0.20-0.30)
   - Pan opposé, attack/release plus mou, cutoff moins ouvert
   - Activation : ~setAutoLayer.(true)

Hook chargement dans live/_load.scd après scales/melodies/
harmonics. Les modules sont silencieux jusqu'à activation.
2026-05-07 21:05:24 +02:00
L'électron rare 747d7b1e2a feat(of): greetings demoscene + festival 2026-05-07 20:58:15 +02:00
L'électron rare 7784508b69 feat(of): 10 narrative demoparties (1-9 + 0)
Remplacement des 10 single-presets par 10 démoparties multi-actes
narratives complètes. Chaque touche 1..9 + 0 lance une démo
scénarisée qui boucle sur ses propres scènes.

10 démos (3-4 scènes chacune, 1.5-2.5 min) :

  1 AMIGA TRIBUTE     INSERT DISK / SCROLLZ / COPPER STORM
  2 C64 LOWLIFE       BOOT / PIXEL / CLIMAX
  3 ACID JOURNEY      DROP IN / 303 LOOP / PEAK / COMEDOWN
  4 TUNNEL VISION     DARK / WALLS / OPENING
  5 FREQUENCIES       SILENCE / BANDS / FULL
  6 GLITCH WORLD      PROBE / CORRUPT / CRASH
  7 AMBIENT VOID      DRIFT / DEEPNESS / RETURN
  8 RAVE              BUILD / FULL POWER / AFTER
  9 MEMORY LANE       REWIND / VAPOR / FOG
  0 GREETINGS         OPENING / ROLL CALL / FINALE

Chaque acte change : toggles visuels, scroller style, narration
texte, track SC associée. Auto-advance à la durée écoulée + loop
sur acte 0 quand la démo finit.

Bindings :
  1..9 + 0   lance la démo correspondante
  Enter      next act
  Esc / q    sortie en mode live (pas de scénario)

Overlay : ligne 1 "DEMO N / 10 NAME" petit, ligne 2 "ACT N / M
TITLE" gros + barre de progression.
2026-05-07 20:51:25 +02:00
L'électron rare 185266f768 feat(of): narrative mode 6 acts demoparty
User : "tu me fait un vrais démo partie avec une narration et
des évolutions".

Mode narratif scripté — touche 'b' lance une démoparty de
~3.5 min en 6 actes qui évoluent visuellement et musicalement :

  ACT 1 INTRO       25s  starfield + neon scroll  + ambient
  ACT 2 FIRST PULSE 35s  tunnel only + classic    + industrial
  ACT 3 FREQUENCIES 45s  polar+spectro + wavy3D   + detroit
  ACT 4 FULL POWER  55s  everything + rainbow     + gabber
  ACT 5 GLITCH      40s  everything + glitch fx   + glitch idm
  ACT 6 OUTRO       30s  starfield + mirror       + vocal trance

Chaque acte :
- Applique un preset toggles (visuels)
- Change le style scroller
- Override le texte du scroller avec une narration scénarisée
- Lance l'album SC associé via OSC /control/playAlbum
- Avance auto au temps écoulé, fade in/out du titre

DemoFx::setText override le texte du scroller avec restauration
auto vers greetings.txt en sortie de mode narratif.

Bindings :
  b      lance la démo party narrative (ACT 1)
  Enter  skip à la scène suivante
  Esc    sortie du mode narratif

Overlay : titre "ACT N / 6   NAME" en gros + barre de progression
en haut, hint clavier en bas.
2026-05-07 20:46:09 +02:00
L'électron rare 9e17e95732 feat(of): 10 demoparty presets + scroller styles
User : "les touches 0 à 10 lanceront une démo party avec la
track supercollider associée + plus de styles de scroller +
q reste le mode live".

DemoFx::ScrollerStyle (6 variants) :
- Classic   sine wave wobble par défaut
- Wavy3D    sine + scale per char (effet respiration 3D)
- Rainbow   hue cycle large par char
- Mirror    classic + reflet vertical en bas (alpha gradient)
- Glitch    jitter horizontal + couleurs cassées (rouge/bleu)
- Neon      outline cyan large + cœur magenta fin

ofApp::DemoPreset (10 presets) :
  1 AMIGA      classic     -> album A (acid_journey)
  2 C64        wavy3d      -> album M (chiptune_madness)
  3 OLDSKOOL   mirror      -> album G (detroit_soulful)
  4 NEWSKOOL   rainbow     -> album L (future_garage)
  5 TUNNEL     classic     -> album P (industrial)
  6 STARFIELD  neon        -> album J (ambient_cinematic)
  7 SCOPE      classic     -> album I (liquid_dnb)
  8 CYBER      glitch      -> album V (glitch_idm)
  9 VAPOR      mirror      -> album U (vocal_trance)
  0 RAVE       rainbow     -> album T (hardcore_gabber)

Chaque preset = état toggles ScopeToggles + style scroller +
lettre album SC (envoyée via /control/playAlbum à sclang).

Touches 1..9 + 0 lancent les presets (au lieu de toggles
individuels). 'q' reste libre pour le mode live (contrôle
manuel des éléments via les autres touches a-z).

Overlay bas droite affiche le preset actif en gros (magenta).
2026-05-07 20:42:43 +02:00
L'électron rare 51fecc72b4 fix(of): default_mode=scope4 in settings.json 2026-05-07 20:38:12 +02:00
L'électron rare f95cedeb5f feat(of): scope4 only + 0-9 demoscene toggles
User : "scope4 uniquement et les touches 0 à 9 sont différents
effets type demoscene".

- Touches 1..9 toggle chacune un effet du Scope4 :
    1 tunnel 3D
    2 starfield (remplace tunnel)
    3 sine scroller (greetings.txt)
    4 copper bars
    5 logo bobs
    6 HUD aléatoire sub-10Hz
    7 spectro circular ring
    8 polar central
    9 waveform circulaire CRT
  0 = reset all toggles aux défauts.
- Suppression des bindings 1-9/0/-/q qui changeaient de mode_,
  Scope4 est désormais le seul rendu actif.
- Suppression des toggles symboles redondants ' ; , .
- Synchro DemoFx::*Enabled() avec scope4_ flags dans drawScope4.
2026-05-07 20:35:57 +02:00
L'électron rare 720d116f2b feat(of): greetings saillans festival 2026 2026-05-07 20:30:58 +02:00
L'électron rare 3ecc33c5d5 chore(of): track greetings.txt for demo 2026-05-07 20:21:48 +02:00
L'électron rare f037cd1b32 feat(of): demoscene FX layer
Nouveau module DemoFx avec 4 effets demoscene classiques :

- Sine scroller : texte depuis bin/data/greetings.txt, scale 3x,
  bobbing sin par char (amp 14px), couleurs phosphor cyclant.
  ~150 px/s, wrap automatique. Affiché en bas d'écran par-dessus
  tout dans Scope4.
- Starfield 3D : 220 étoiles z-projetées, motion blur en streak
  radial, peut REMPLACER le tunnel quand toggle actif.
- Copper bars : 6 bandes horizontales en haut, gradient sin
  vertical, hue cyclant, blend additif, follow sin de la phase.
- Logo bobs : "AV-LIVE" 4x scale qui rebondit en arc de cercle,
  scale wobble, hue cycle. En haut centré.

Toggles clavier (touches symboles hors zone FX a-z) :
  '   scroller on/off
  ;   copper bars on/off
  ,   bobs on/off
  .   starfield on/off (remplace le tunnel quand on)

bin/data/greetings.txt fourni avec contenu par défaut, éditable
à la volée — DemoFx::setup le lit au boot.
2026-05-07 20:20:18 +02:00
L'électron rare 27063206ae feat(of): wave rings counter-rotate ch1/ch2 2026-05-07 20:13:55 +02:00
L'électron rare f1250d2137 feat(of): scope4 FX mults overlay bas écran
Overlay phosphor vert toujours visible dans Scope4, sans
dépendre du GUI (touche g). 8 slots horizontaux en bas :
label / touches a→z / valeur multiplicateur / barre log.

Couleurs des slots : vert calme à 1.0, vire ambre quand >1.0
(boost), vire bleu quand <1.0 (atténuation). Barre log
centrée sur 1.0, marqueur central tick. "[w] reset" à droite.

Blend additif pour s'intégrer au look CRT rétro de la wave
circulaire au-dessus.
2026-05-07 20:08:40 +02:00
L'électron rare ad8f42379e feat(of): kick violent + speed /10 + FX keys
User : "rendre le bias kick plus violent. ajuster la vitesse du
tunnel en /10 et ajouter des fx qui modifie les multiplicateur
avec le clavier (a→z)".

Approach:
- Vitesse base /10 : (0.6 + bpm*0.012) → (0.06 + bpm*0.0012).
  Le flow général est lent, le kick frappe d'autant plus fort.
- Kick punch ×4 (vs ×1.5) sur travel, ×1.4 (vs 0.6) sur panY,
  ×0.6 (vs 0.25) sur la composante roll. Sensation d'impact.
- TunnelVis::Mults — struct de 8 multiplicateurs (speed,
  kickBoost, rollAmp, panAmp, curveAmp, tileX, tileZ, dirLerp).
  Appliqués in-place dans update/draw.
- Bindings clavier ofApp::keyPressed : 9 paires down/up
    a/z  : speed
    s/x  : kickBoost
    d/c  : rollAmp
    e/v  : panAmp
    t/n  : curveAmp
    u/m  : tileX
    i/l  : tileZ
    o/h  : dirLerp
    j/y  : speed + kickBoost combinés (tout ralentir/accélérer)
    w    : reset all to 1.0
  Chaque pression × 0.83 (down) ou × 1.20 (up), clamp 0.05..12.
2026-05-07 20:05:53 +02:00
L'électron rare 0dd90e3f3c feat(of): scope4 default mode at boot 2026-05-07 20:00:36 +02:00
L'électron rare 69b902539e feat(of): tunnel HUD random sub-10Hz
User : "sur les carraud du tunnel tu me fait un HUD aléatoire
sur les fréquence sous les 10Hz".

Approach:
- ofApp::drawTunnelHud — pool jusqu'à 14 items, refresh 1-2 par
  frame toutes les 0.15-0.40s, life 0.8-2.5s par item.
- Chaque item = mini-cadre rectangulaire phosphor + label texte
  (LFO/DC/DRIFT/SUB/MOD/Δf/PHASE/GAIN/BIAS/TRIG/PWM/ENV) +
  valeur Hz aléatoire 0.2..9.9 Hz à 1 décimale.
- Position : périphérique (rad 0.34-0.49 du centre) → tombe sur
  les "carreaux" visibles du tunnel, évite le polar central.
- Fade in 0.2s + fade out 0.4s + flicker scintillant phosphor.
- Blend additif → s'intègre au look CRT sans masquer les couches.
- Appelé dans drawScope4 juste après le tunnel.
2026-05-07 19:59:32 +02:00