Audio Wave: correct model — 721 groups are hard splits, segments inside; range select; mirrored render; fix reload explosion

Rebuilt around the real model: group_frames (721) are HARD splits; segments = user
splits UNION the group lines, so a segment never crosses a group boundary (last segment
in a group ends exactly on frame 721). segment_select is now a RANGE string ('A-B' /
'N' / '' = all) that crops waveform_image + audio + summary to segments A..B. Render
rewritten: mirrored waveform (uses top+bottom), bold group grid, thin segment lines,
labels along the top and notes along the bottom, selected range shaded. JS: guards
frame values (0 -> default, fixing the 400+-segments-on-reload explosion), writes only
USER splits to segments_json, dblclick=add split / shift-click=remove / click=seek.
group number fixed (boundary rounding). Workflows + README updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 23:35:48 +02:00
co-authored by Claude Opus 4.8
parent 29c48a9115
commit 488afa0284
6 changed files with 205 additions and 181 deletions
+11 -10
View File
@@ -111,17 +111,18 @@ adds to feed the judge's `system_prompt`/`user_prompt`/`axes` sockets.)
### Interactive: `Audio Wave + Segments`
Same outputs, but with an in-node waveform widget: **upload** an audio clip, **play** it,
click to **seek**. The audio is split into a **fixed grid of `subsegment_frames` frames**
(default **721 @ 24fps ≈ 30.04s** — the LTX clip length), drawn as the green grid; each chunk
is one beat. The `notes` box **auto-fills with one `segN:` line per chunk** — type your motion
note after each (or double-click a chunk on the waveform to set its note). The `waveform_image`
carries per-chunk labels (energy, start time, frame count).
An in-node **mirrored waveform** widget: **upload** an audio clip, **play** it, **click to seek**.
- **`subsegment_frames`** — the fixed chunk size (0 = fall back to manual boundaries in `segments_json`).
- **`segment_select`** — `0` = whole clip; `N` = output **only subsegment N**: the `waveform_image`
is cropped to that chunk, the `audio` output is cropped to it, and the summary is just that beat —
so you can generate/skip **one beat at a time**.
- **`group_frames`** (default **721 @ 24fps ≈ 30.04s** = one LTX clip) is the **hard split** —
bold grid lines every `group_frames`. Segments never cross a group line, so the last segment
in a group ends exactly on the boundary (e.g. frame 721).
- **Segments live inside groups.** By default each group is one segment; **double-click the
waveform to add a finer split** inside a group (shift-click a split to remove it). The `notes`
box **auto-fills with one `segN:` line per segment** — type your motion note after each.
- **`segment_select`** — `""`/`0` = whole clip; `"N"` = only segment N; **`"A-B"` = segments A..B**.
The `waveform_image`, the `audio` output, and the summary are all **cropped to that range**, so
you can generate/skip beats a range at a time (e.g. `6-12`). Labels sit along the top, per-segment
notes along the bottom; the selected range is shaded.
Outputs `waveform_image`, `audio_summary`, `audio`. Needs `torchaudio`/`soundfile`/`librosa`
to load the file (torchaudio usually ships with torch).