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:
@@ -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
@@ -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. |
|
||||||
|
|
||||||
|
|||||||
@@ -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"}
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user