Files
ComfyUI-Prompt-Calibrator/workflow/workflow_ltx_audio.json
T
EthanfelandClaude Opus 4.8 488afa0284 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>
2026-07-04 23:35:48 +02:00

259 lines
7.0 KiB
JSON

{
"id": "ltx-audio-relay",
"last_node_id": 4,
"last_link_id": 4,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
40
],
"size": [
320,
380
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
1
]
},
{
"name": "MASK",
"type": "MASK",
"links": null
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"reference.png",
"image"
]
},
{
"id": 3,
"type": "CalibratorText",
"pos": [
40,
460
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "text",
"type": "STRING",
"links": [
3
]
}
],
"properties": {
"Node name for S&R": "CalibratorText"
},
"widgets_values": [
"You are an expert prompt engineer for the LTX-2.3 video model, generating a\nmulti-segment \"Prompt Relay\" timeline TIMED TO AUDIO. Output ONLY valid JSON — no\nmarkdown, no code fences, no text before or after.\n\nYou are given:\n- IMAGE 1 = the REFERENCE subject/scene. Use it ONLY for persistent visual appearance\n (subject's look, setting, lighting, color palette, style) in global_prompt.\n- IMAGE 2 = the AUDIO ENERGY WAVEFORM (energy envelope with segment boundaries and beat\n markers). Read the overall energy shape and where it peaks.\n- An \"AUDIO GUIDE\" text block: per-segment start, duration_s, frames (already snapped to\n 8n+1), energy level, stage hint, per-segment NOTE, and GLOBAL NOTES.\n\nMatch this schema exactly:\n\n{\n \"fps\": 24,\n \"global_prompt\": \"string\",\n \"negative_prompt\": \"string\",\n \"beats\": [\n {\n \"segment\": 1,\n \"duration_s\": 5,\n \"frames\": 121,\n \"camera\": \"string\",\n \"delta\": \"string\",\n \"sound\": \"string\",\n \"dialogue\": \"string\",\n \"prompt\": \"string\"\n }\n ]\n}\n\nRules:\n- fps: take from the AUDIO GUIDE.\n- global_prompt: one present-tense paragraph with ALL persistent elements taken from\n IMAGE 1 — subject's physical appearance (age, hair, clothing as visual cues), setting,\n lighting, color palette, style — plus the sustained ambient/audio layer. No camera\n moves. Never repeated in beats.\n- negative_prompt: \"shaky, glitchy, low quality, worst quality, deformed, distorted,\n disfigured, motion smear, motion artifacts, fused fingers, bad anatomy, ugly, static\".\n- beats: EXACTLY ONE beat per AUDIO GUIDE segment, in order. Copy that segment's\n \"segment\", \"duration_s\", and \"frames\" verbatim (do not recompute).\n- Beat 1: \"delta\" = the static visible starting state only; \"camera\" = \"static hold\".\n- Every later beat: \"delta\" = ONLY what CHANGES from the previous beat. Never repeat the\n global_prompt or earlier beats.\n- MOTION FROM AUDIO: drive each beat's motion from its energy — higher energy => faster\n motion and bigger camera moves; lower energy => slower, settle. Follow the energy\n envelope across the timeline (establish -> build -> peak -> settle), putting the release\n on the final segment.\n- NOTES OVERRIDE: if a segment has a NOTE, that instruction OVERRIDES the energy default\n for that beat (e.g. NOTE \"slow\" on a HIGH-energy segment => slow, deliberate motion).\n Apply GLOBAL NOTES throughout.\n- \"camera\" starts with a camera verb (push in, pan, arc, handheld drift, hold).\n- \"sound\" = short sound cue; \"dialogue\" = spoken line in quotes or \"\".\n- \"prompt\" = the final assembled beat text in order: camera, then delta action, then any\n dialogue/sound — present tense, concrete on-screen verbs, no emotion labels. Ready to paste.\n"
]
},
{
"id": 2,
"type": "AudioWaveSegments",
"pos": [
40,
800
],
"size": [
420,
320
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "waveform_image",
"type": "IMAGE",
"links": [
2
]
},
{
"name": "audio_summary",
"type": "STRING",
"links": [
4
]
},
{
"name": "audio",
"type": "AUDIO",
"links": null
}
],
"properties": {
"Node name for S&R": "AudioWaveSegments"
},
"widgets_values": [
"audio.wav",
24,
721,
"",
"",
"[]"
]
},
{
"id": 4,
"type": "QwenVLImageJudge",
"pos": [
540,
40
],
"size": [
420,
640
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "reference_image",
"type": "IMAGE",
"link": 1
},
{
"name": "generated_image",
"type": "IMAGE",
"link": 2,
"shape": 7
},
{
"name": "axes",
"type": "STRING",
"link": null,
"shape": 7
},
{
"name": "reference_description",
"type": "STRING",
"link": null,
"shape": 7
},
{
"name": "system_prompt",
"type": "STRING",
"link": 3,
"shape": 7
},
{
"name": "user_prompt",
"type": "STRING",
"link": 4,
"shape": 7
}
],
"outputs": [
{
"name": "overall_score",
"type": "FLOAT",
"links": null
},
{
"name": "axis_scores_json",
"type": "STRING",
"links": null
},
{
"name": "analysis",
"type": "STRING",
"links": null
},
{
"name": "raw",
"type": "STRING",
"links": null
},
{
"name": "report_path",
"type": "STRING",
"links": null
}
],
"properties": {
"Node name for S&R": "QwenVLImageJudge"
},
"widgets_values": [
"chat",
"general",
"(manual — use model_path below)",
"3.5-9b",
"bf16",
3072,
0.4,
false,
false,
true,
true,
true,
"/media/p5/Comfyui/output/ltx",
"ltx"
]
}
],
"links": [
[
1,
1,
0,
4,
0,
"IMAGE"
],
[
2,
2,
0,
4,
1,
"IMAGE"
],
[
3,
3,
0,
4,
4,
"STRING"
],
[
4,
2,
1,
4,
5,
"STRING"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}