An empty combo ([],) can't be built by ComfyUI, so the node wouldn't add to the
canvas. _audio_files() now always returns at least a placeholder entry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The canvas Load expects the UI graph format (nodes[]+links[]+positions), not the
API format — so the _api.json came up empty. Added workflow_ltx_audio.json in UI
format (matched the schema from a real workflow: node dicts with pos/size/inputs/
outputs/widgets_values, link tuples, version 0.4), validated slots/links. Dropped
audio_upload from AudioWaveSegments so the widget layout is predictable (the JS
upload button stays). README points to the loadable file; _api.json kept for the bridge.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SxCP is the Prompt-Builder pack's brand; these are Calibrator nodes. Renamed the
display names (cosmetic only — class_types unchanged, so no workflows/bridge break):
'External Prompt (Receptor)', 'Audio Prompt Guide', 'Audio Wave + Segments'; renamed
the JS extension id too. Kept the genuine Prompt-Builder (SxCP) references in the docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New node with a JS widget (web/audio_wave.js): upload an audio clip, play it, and click
the waveform to place segment boundaries (click add / drag move / dblclick note /
shift|right-click delete). Boundaries+notes serialize to a hidden segments_json that
drives Python segmentation (falls back to auto-split / notes syntax). Python node
(nodes/audio_wave_segments.py) loads the file (torchaudio/soundfile/librosa), builds
segments from the boundaries, and outputs waveform_image + audio_summary + AUDIO — same
contract as Audio Prompt Guide, so it feeds chat mode the same way. _attach_notes now
merges (keeps clicked notes). WEB_DIRECTORY re-enabled. JS is a first cut — needs testing
in ComfyUI (console logs on error); the Python node works standalone via segments_json/notes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>