Drop the SxCP prefix from this pack's node names

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>
This commit is contained in:
2026-07-04 22:36:50 +02:00
co-authored by Claude Opus 4.8
parent 57b459b956
commit 98d3520775
6 changed files with 11 additions and 11 deletions
+4 -4
View File
@@ -15,7 +15,7 @@ until the generated image matches the reference.
| Component | What it is | | Component | What it is |
|---|---| |---|---|
| `Qwen3-VL Image Judge (Calibrator)` | scores generated vs reference, writes analysis to disk for the agent | | `Qwen3-VL Image Judge (Calibrator)` | scores generated vs reference, writes analysis to disk for the agent |
| `SxCP External Prompt (Receptor)` | stable injection point; the agent sets `prompt/negative/seed` here per queue | | `External Prompt (Receptor)` | stable injection point; the agent sets `prompt/negative/seed` here per queue |
| `agent_bridge.py` | one CLI call = one iteration (inject → `POST /prompt` → wait → print analysis JSON) | | `agent_bridge.py` | one CLI call = one iteration (inject → `POST /prompt` → wait → print analysis JSON) |
## The "vllm node": `Qwen3-VL Image Judge (Calibrator)` ## The "vllm node": `Qwen3-VL Image Judge (Calibrator)`
@@ -62,7 +62,7 @@ Set **`json_output=true`** for JSON-producing system prompts — it extracts the
from the reply (stripping any reasoning, prose, or ```fences) and returns it clean and from the reply (stripping any reasoning, prose, or ```fences) and returns it clean and
re-serialized (falls back to raw text if none parses). Works even with `enable_thinking` on. re-serialized (falls back to raw text if none parses). Works even with `enable_thinking` on.
## Audio-guided prompts (`SxCP Audio Prompt Guide`) ## Audio-guided prompts (`Audio Prompt Guide`)
For audio-driven video (e.g. LTX prompt-relay timed to music), the `AudioPromptGuide` node For audio-driven video (e.g. LTX prompt-relay timed to music), the `AudioPromptGuide` node
turns an audio clip + your free-text motion **notes** into inputs the vision model can use: turns an audio clip + your free-text motion **notes** into inputs the vision model can use:
@@ -78,7 +78,7 @@ subject image** and the **waveform**, use the two image slots (chat mode sees bo
``` ```
your subject image ───────────────────────────────────► Judge.reference_image (IMAGE 1) your subject image ───────────────────────────────────► Judge.reference_image (IMAGE 1)
LoadAudio ─► SxCP Audio Prompt Guide ─┬─ waveform_image ─► Judge.generated_image (IMAGE 2) LoadAudio ─► Audio Prompt Guide ─┬─ waveform_image ─► Judge.generated_image (IMAGE 2)
(notes: "seg3: fast on the drop") └─ audio_summary ─► Judge.user_prompt (notes: "seg3: fast on the drop") └─ audio_summary ─► Judge.user_prompt
(prompts/ltx_audio_relay_system_prompt.txt) ─────────► Judge.system_prompt (prompts/ltx_audio_relay_system_prompt.txt) ─────────► Judge.system_prompt
Judge (mode=chat, json_output=true) ─► LTX beats JSON Judge (mode=chat, json_output=true) ─► LTX beats JSON
@@ -101,7 +101,7 @@ seg1: slow dreamy intro # by segment number (also "1:" or "S1:")
cinematic, moody grade # no prefix = global (applies throughout) cinematic, moody grade # no prefix = global (applies throughout)
``` ```
### Interactive: `SxCP Audio Wave + Segments` ### Interactive: `Audio Wave + Segments`
Same outputs, but with an in-node waveform widget: **upload** an audio clip, **play** it, Same outputs, but with an in-node waveform widget: **upload** an audio clip, **play** it,
and **click the waveform** to place segment boundaries — click to add a split, drag to and **click the waveform** to place segment boundaries — click to add a split, drag to
+1 -1
View File
@@ -36,7 +36,7 @@ supports a `source_file` for file-first workflows if you ever want it.)
| Piece | Role | | Piece | Role |
|---|---| |---|---|
| `CalibratorPromptReceptor` (`SxCP External Prompt (Receptor)`) | Stable node the agent injects `prompt/negative/seed` into. Feeds the sampler. | | `CalibratorPromptReceptor` (`External Prompt (Receptor)`) | Stable node the agent injects `prompt/negative/seed` into. Feeds the sampler. |
| `QwenVLImageJudge` (`Qwen3-VL Image Judge (Calibrator)`) | `describe` (first pass) emits the canonical reference; `compare` judges generated vs reference per axis (verdict match/partial/mismatch). When given `reference_description`, compare anchors on that fixed text. Writes `calib_<run_tag>.json` + `latest.json` to `report_dir`. | | `QwenVLImageJudge` (`Qwen3-VL Image Judge (Calibrator)`) | `describe` (first pass) emits the canonical reference; `compare` judges generated vs reference per axis (verdict match/partial/mismatch). When given `reference_description`, compare anchors on that fixed text. Writes `calib_<run_tag>.json` + `latest.json` to `report_dir`. |
| `agent_bridge.py` | One CLI call = one iteration: inject prompt (+`--ref-desc-file` for the canonical anchor) → queue → wait → print the analysis JSON to stdout. Stdlib only. | | `agent_bridge.py` | One CLI call = one iteration: inject prompt (+`--ref-desc-file` for the canonical anchor) → queue → wait → print the analysis JSON to stdout. Stdlib only. |
+1 -1
View File
@@ -213,4 +213,4 @@ class AudioPromptGuide:
NODE_CLASS_MAPPINGS = {"AudioPromptGuide": AudioPromptGuide} NODE_CLASS_MAPPINGS = {"AudioPromptGuide": AudioPromptGuide}
NODE_DISPLAY_NAME_MAPPINGS = {"AudioPromptGuide": "SxCP Audio Prompt Guide"} NODE_DISPLAY_NAME_MAPPINGS = {"AudioPromptGuide": "Audio Prompt Guide"}
+2 -2
View File
@@ -4,7 +4,7 @@ Audio Wave Segments node for ComfyUI.
An audio node with its own upload that (via the JS widget in web/audio_wave.js) An audio node with its own upload that (via the JS widget in web/audio_wave.js)
displays the waveform, plays the clip, and lets you click segment boundaries on displays the waveform, plays the clip, and lets you click segment boundaries on
the waveform and give each a note. It outputs the same waveform IMAGE + timing the waveform and give each a note. It outputs the same waveform IMAGE + timing
`audio_summary` as SxCP Audio Prompt Guide (feed those to the judge in chat mode), `audio_summary` as Audio Prompt Guide (feed those to the judge in chat mode),
plus the AUDIO for downstream use. plus the AUDIO for downstream use.
Works without the JS too: leave `segments_json` as "[]" and it auto-splits, or type Works without the JS too: leave `segments_json` as "[]" and it auto-splits, or type
@@ -154,4 +154,4 @@ class AudioWaveSegments:
NODE_CLASS_MAPPINGS = {"AudioWaveSegments": AudioWaveSegments} NODE_CLASS_MAPPINGS = {"AudioWaveSegments": AudioWaveSegments}
NODE_DISPLAY_NAME_MAPPINGS = {"AudioWaveSegments": "SxCP Audio Wave + Segments"} NODE_DISPLAY_NAME_MAPPINGS = {"AudioWaveSegments": "Audio Wave + Segments"}
+1 -1
View File
@@ -61,5 +61,5 @@ class CalibratorPromptReceptor:
NODE_CLASS_MAPPINGS = {"CalibratorPromptReceptor": CalibratorPromptReceptor} NODE_CLASS_MAPPINGS = {"CalibratorPromptReceptor": CalibratorPromptReceptor}
NODE_DISPLAY_NAME_MAPPINGS = { NODE_DISPLAY_NAME_MAPPINGS = {
"CalibratorPromptReceptor": "SxCP External Prompt (Receptor)" "CalibratorPromptReceptor": "External Prompt (Receptor)"
} }
+2 -2
View File
@@ -1,4 +1,4 @@
// SxCP Audio Wave + Segments — waveform display + playback + click-to-segment. // Audio Wave + Segments — waveform display + playback + click-to-segment.
// Writes the segment boundaries/notes into the node's hidden `segments_json` widget. // Writes the segment boundaries/notes into the node's hidden `segments_json` widget.
// First cut: open the browser console for [audiowave] logs if something misbehaves. // First cut: open the browser console for [audiowave] logs if something misbehaves.
import { app } from "../../scripts/app.js"; import { app } from "../../scripts/app.js";
@@ -145,7 +145,7 @@ function setupWave(node) {
} }
app.registerExtension({ app.registerExtension({
name: "sxcp.audiowave", name: "promptcalib.audiowave",
async beforeRegisterNodeDef(nodeType, nodeData) { async beforeRegisterNodeDef(nodeType, nodeData) {
if (nodeData?.name !== "AudioWaveSegments") return; if (nodeData?.name !== "AudioWaveSegments") return;
const orig = nodeType.prototype.onNodeCreated; const orig = nodeType.prototype.onNodeCreated;