Dance library: bundled clips bind to any rigged model + repertoire + manual BPM

- models/dance_library.glb: skeleton-only GLB with the 13 Mixamo dances,
  loaded at startup and bound BY BONE NAME to whatever rigged GLB the
  user loads — new models dance immediately, no baking needed.
- Repertoire UI (Media tab): checkbox chips of the available clips, the
  director only picks the ticked ones (none = all); persisted.
- 'Aggiungi animazioni': extra .glb clips load directly; .fbx are
  converted on the fly by Blender via a new anim:convert IPC and the
  bundled scripts/fbx2animglb.py (asarUnpacked for packaged builds).
- Manual BPM with TAP tempo: 0 = follow the detected beat, otherwise a
  pure metronome drives the dance clock.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
lucianoandClaude Fable 5 committed 2026-07-31 11:15:10 +02:00
1 parent 83fc655219
commit 97376b22c9
10 files changed
+340 -20

No files matched your search

+13
View File
@@ -141,6 +141,19 @@
<option value="wave">Fluido Onda</option>
<!-- tutte le altre famiglie vengono aggiunte da control.js -->
</select>
<label>Repertorio del ballerino</label>
<div id="glb-anims" class="av-fams"></div>
<button id="btn-anim-load" class="wide">💃 Aggiungi animazioni (.fbx / .glb)…</button>
<input type="file" id="anim-input" accept=".fbx,.glb" multiple hidden />
<label>BPM ballerino <span id="glb-bpm-val">auto</span></label>
<div class="row led-row">
<input type="number" class="led-num" id="glb-bpm" min="0" max="220" step="1" value="0"
title="0 = automatico dal beat rilevato" />
<button id="glb-tap">👏 TAP</button>
</div>
<div class="hint-mini">Spunta le mosse che il regista può usare (nessuna spuntata = tutte).
Le animazioni extra arrivano da Mixamo: .glb diretti, .fbx convertiti al volo (serve Blender).
BPM: 0 = segue il beat; oppure scrivilo o battilo col TAP.</div>
</section>
<section class="span2" id="effect-seq-section">