joeygambino commited on
Commit
f746644
·
verified ·
1 Parent(s): 93b6496

audio memory default ON: cross-shot voice consistency is the point of multishot; sync/voice tradeoff documented in tooltip

Browse files
nodes.py CHANGED
@@ -1105,13 +1105,13 @@ class JoyEcho_Generate:
1105
  "memory_max_size": ("INT", {"default": 7, "min": 0, "max": 20}),
1106
  "num_fix_frames": ("INT", {"default": 3, "min": 0, "max": 10}),
1107
  "enable_audio_memory": ("BOOLEAN", {
1108
- "default": False,
1109
  "tooltip": "Feed previous shots' audio latents as cross-shot conditioning. "
1110
- "OFF is the production-proven setting: every perfect-lip-sync "
1111
- "render (incl. THE WITNESS) ran without it, and voice identity "
1112
- "holds fine through the text anchors + video memory. ON has "
1113
- "coincided with a 90-95% sync ceiling - suspected of letting "
1114
- "prior shots' audio timing bleed into the current shot.",
1115
  }),
1116
  "audio_memory_window_size": ("INT", {"default": 96, "min": 16, "max": 256}),
1117
  "sequential_offload": ("BOOLEAN", {
@@ -2108,13 +2108,13 @@ class JoyEcho_SingleShotGenerate:
2108
  "memory_max_size": ("INT", {"default": 7, "min": 0, "max": 20}),
2109
  "num_fix_frames": ("INT", {"default": 3, "min": 0, "max": 10}),
2110
  "enable_audio_memory": ("BOOLEAN", {
2111
- "default": False,
2112
  "tooltip": "Feed previous shots' audio latents as cross-shot conditioning. "
2113
- "OFF is the production-proven setting: every perfect-lip-sync "
2114
- "render (incl. THE WITNESS) ran without it, and voice identity "
2115
- "holds fine through the text anchors + video memory. ON has "
2116
- "coincided with a 90-95% sync ceiling - suspected of letting "
2117
- "prior shots' audio timing bleed into the current shot.",
2118
  }),
2119
  "audio_memory_window_size": ("INT", {"default": 96, "min": 16, "max": 256}),
2120
  "sequential_offload": ("BOOLEAN", {
 
1105
  "memory_max_size": ("INT", {"default": 7, "min": 0, "max": 20}),
1106
  "num_fix_frames": ("INT", {"default": 3, "min": 0, "max": 10}),
1107
  "enable_audio_memory": ("BOOLEAN", {
1108
+ "default": True,
1109
  "tooltip": "Feed previous shots' audio latents as cross-shot conditioning. "
1110
+ "ON keeps the same voice across every shot - the point of "
1111
+ "multishot - at a small lip-sync cost on long dialogue. OFF "
1112
+ "gives the tightest sync but the voice can drift between "
1113
+ "shots; use only for sync-critical single-voice pieces with "
1114
+ "a strong voice description repeated in every shot.",
1115
  }),
1116
  "audio_memory_window_size": ("INT", {"default": 96, "min": 16, "max": 256}),
1117
  "sequential_offload": ("BOOLEAN", {
 
2108
  "memory_max_size": ("INT", {"default": 7, "min": 0, "max": 20}),
2109
  "num_fix_frames": ("INT", {"default": 3, "min": 0, "max": 10}),
2110
  "enable_audio_memory": ("BOOLEAN", {
2111
+ "default": True,
2112
  "tooltip": "Feed previous shots' audio latents as cross-shot conditioning. "
2113
+ "ON keeps the same voice across every shot - the point of "
2114
+ "multishot - at a small lip-sync cost on long dialogue. OFF "
2115
+ "gives the tightest sync but the voice can drift between "
2116
+ "shots; use only for sync-critical single-voice pieces with "
2117
+ "a strong voice description repeated in every shot.",
2118
  }),
2119
  "audio_memory_window_size": ("INT", {"default": 96, "min": 16, "max": 256}),
2120
  "sequential_offload": ("BOOLEAN", {
workflow/JoyEcho_Multishot_Workflow_PUBLIC.json CHANGED
@@ -273,112 +273,6 @@
273
  8
274
  ]
275
  },
276
- {
277
- "id": 58,
278
- "type": "JoyEcho_AutoFinish",
279
- "pos": [
280
- 4328.590366291457,
281
- 99.91012828201144
282
- ],
283
- "size": [
284
- 328.24765625,
285
- 178
286
- ],
287
- "flags": {},
288
- "order": 13,
289
- "mode": 0,
290
- "inputs": [
291
- {
292
- "localized_name": "images",
293
- "name": "images",
294
- "type": "IMAGE",
295
- "link": 110
296
- },
297
- {
298
- "localized_name": "enabled",
299
- "name": "enabled",
300
- "type": "BOOLEAN",
301
- "widget": {
302
- "name": "enabled"
303
- },
304
- "link": null
305
- },
306
- {
307
- "localized_name": "master_name",
308
- "name": "master_name",
309
- "type": "STRING",
310
- "widget": {
311
- "name": "master_name"
312
- },
313
- "link": null
314
- },
315
- {
316
- "localized_name": "scale_factor",
317
- "name": "scale_factor",
318
- "type": "FLOAT",
319
- "widget": {
320
- "name": "scale_factor"
321
- },
322
- "link": null
323
- },
324
- {
325
- "localized_name": "quality",
326
- "name": "quality",
327
- "type": "COMBO",
328
- "widget": {
329
- "name": "quality"
330
- },
331
- "link": null
332
- },
333
- {
334
- "localized_name": "batch_size",
335
- "name": "batch_size",
336
- "type": "INT",
337
- "widget": {
338
- "name": "batch_size"
339
- },
340
- "link": null
341
- },
342
- {
343
- "localized_name": "shots_subdir",
344
- "name": "shots_subdir",
345
- "shape": 7,
346
- "type": "STRING",
347
- "widget": {
348
- "name": "shots_subdir"
349
- },
350
- "link": null
351
- }
352
- ],
353
- "outputs": [
354
- {
355
- "localized_name": "images",
356
- "name": "images",
357
- "type": "IMAGE",
358
- "links": [
359
- 113
360
- ]
361
- }
362
- ],
363
- "properties": {
364
- "aux_id": "RealRebelAI/ComfyUI_JoyAI_Echo_GGUF_Nodes",
365
- "ver": "0d9e32fcd2d255a16604368fcaa1875c380c7f3b",
366
- "Node name for S&R": "JoyEcho_AutoFinish",
367
- "ue_properties": {
368
- "widget_ue_connectable": {},
369
- "input_ue_unconnectable": {},
370
- "version": "7.8"
371
- }
372
- },
373
- "widgets_values": [
374
- true,
375
- " multishot",
376
- 1.25,
377
- "ULTRA",
378
- 8,
379
- "joyecho"
380
- ]
381
- },
382
  {
383
  "id": 59,
384
  "type": "JoyEcho_LLMEnhance",
@@ -829,7 +723,7 @@
829
  },
830
  "widgets_values": [
831
  "by_seed",
832
- 404956706,
833
  "randomize",
834
  "joyecho_refs",
835
  "no_reference",
@@ -867,152 +761,40 @@
867
  "bgcolor": "#653"
868
  },
869
  {
870
- "id": 64,
871
- "type": "JoyEcho_ModelLoader",
872
  "pos": [
873
- 3195.206611570208,
874
- 63.911845730031445
875
  ],
876
  "size": [
877
- 633.88812640109,
878
- 328
879
  ],
880
  "flags": {},
881
- "order": 6,
882
  "mode": 0,
883
  "inputs": [
884
  {
885
- "localized_name": "lora_stack",
886
- "name": "lora_stack",
887
- "shape": 7,
888
- "type": "JOYECHO_LORA_STACK",
889
- "link": 119
890
- },
891
- {
892
- "localized_name": "model_file",
893
- "name": "model_file",
894
- "shape": 7,
895
- "type": "COMBO",
896
- "widget": {
897
- "name": "model_file"
898
- },
899
- "link": null
900
- },
901
- {
902
- "localized_name": "checkpoint_path",
903
- "name": "checkpoint_path",
904
- "shape": 7,
905
- "type": "STRING",
906
- "widget": {
907
- "name": "checkpoint_path"
908
- },
909
- "link": null
910
- },
911
- {
912
- "localized_name": "gemma_file",
913
- "name": "gemma_file",
914
- "shape": 7,
915
- "type": "COMBO",
916
- "widget": {
917
- "name": "gemma_file"
918
- },
919
- "link": null
920
- },
921
- {
922
- "localized_name": "gemma_path",
923
- "name": "gemma_path",
924
- "shape": 7,
925
- "type": "STRING",
926
- "widget": {
927
- "name": "gemma_path"
928
- },
929
- "link": null
930
- },
931
- {
932
- "localized_name": "lora_file",
933
- "name": "lora_file",
934
- "shape": 7,
935
- "type": "COMBO",
936
- "widget": {
937
- "name": "lora_file"
938
- },
939
- "link": null
940
- },
941
- {
942
- "localized_name": "lora_path",
943
- "name": "lora_path",
944
- "shape": 7,
945
  "type": "STRING",
946
- "widget": {
947
- "name": "lora_path"
948
- },
949
- "link": null
950
- },
951
- {
952
- "localized_name": "lora_strength",
953
- "name": "lora_strength",
954
- "shape": 7,
955
- "type": "FLOAT",
956
- "widget": {
957
- "name": "lora_strength"
958
- },
959
- "link": null
960
- },
961
- {
962
- "localized_name": "fp8_transformer",
963
- "name": "fp8_transformer",
964
- "shape": 7,
965
- "type": "BOOLEAN",
966
- "widget": {
967
- "name": "fp8_transformer"
968
- },
969
- "link": null
970
- },
971
- {
972
- "localized_name": "fp8_scaled_mm",
973
- "name": "fp8_scaled_mm",
974
- "shape": 7,
975
- "type": "BOOLEAN",
976
- "widget": {
977
- "name": "fp8_scaled_mm"
978
- },
979
- "link": null
980
- },
981
- {
982
- "localized_name": "encoder_fp8",
983
- "name": "encoder_fp8",
984
- "shape": 7,
985
- "type": "BOOLEAN",
986
- "widget": {
987
- "name": "encoder_fp8"
988
- },
989
- "link": null
990
- },
991
- {
992
- "localized_name": "low_vram",
993
- "name": "low_vram",
994
- "shape": 7,
995
- "type": "BOOLEAN",
996
- "widget": {
997
- "name": "low_vram"
998
- },
999
- "link": null
1000
  }
1001
  ],
1002
  "outputs": [
1003
  {
1004
- "localized_name": "model",
1005
- "name": "model",
1006
- "type": "JOYECHO_MODEL",
1007
- "links": [
1008
- 118
1009
- ]
1010
  }
1011
  ],
1012
  "properties": {
1013
- "aux_id": "RealRebelAI/ComfyUI_JoyAI_Echo_GGUF_Nodes",
1014
- "ver": "0d9e32fcd2d255a16604368fcaa1875c380c7f3b",
1015
- "Node name for S&R": "JoyEcho_ModelLoader",
1016
  "ue_properties": {
1017
  "widget_ue_connectable": {},
1018
  "input_ue_unconnectable": {},
@@ -1020,63 +802,66 @@
1020
  }
1021
  },
1022
  "widgets_values": [
1023
- "diffusion_models: ltx23_echoVid-ltxAud_surgical_bf16.safetensors",
1024
- "",
1025
- "text_encoders: gemma3-12b-BASE-clean-Q8_0.gguf",
1026
- "",
1027
- "(use lora_path / none)",
1028
- "",
1029
- 0,
1030
- false,
1031
- false,
1032
- false,
1033
- true
1034
  ]
1035
  },
1036
  {
1037
- "id": 42,
1038
- "type": "ShowText|pysssss",
1039
  "pos": [
1040
- 900,
1041
- 917
1042
  ],
1043
  "size": [
1044
- 1157.2399195128025,
1045
- 1168.0000000000002
1046
  ],
1047
  "flags": {},
1048
- "order": 11,
1049
  "mode": 0,
1050
- "inputs": [
1051
- {
1052
- "localized_name": "text",
1053
- "name": "text",
1054
- "type": "STRING",
1055
- "link": 116
 
1056
  }
 
 
 
1057
  ],
1058
- "outputs": [
1059
- {
1060
- "localized_name": "STRING",
1061
- "name": "STRING",
1062
- "shape": 6,
1063
- "type": "STRING",
1064
- "links": null
1065
- }
 
 
 
 
 
1066
  ],
 
 
 
 
 
1067
  "properties": {
1068
- "cnr_id": "comfyui-custom-scripts",
1069
- "ver": "609f3afaa74b2f88ef9ce8d939626065e3247469",
1070
- "Node name for S&R": "ShowText|pysssss",
1071
  "ue_properties": {
1072
  "widget_ue_connectable": {},
1073
- "input_ue_unconnectable": {},
1074
- "version": "7.8"
1075
  }
1076
  },
1077
  "widgets_values": [
1078
- "{\n \"prompts\": [\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a locked static medium close-up at her eye level on the small corner stage of an empty dive bar, hot magenta and blue stage lights raking across her from the rig above, a scuffed drum kit and a taped-up amp behind her, black walls layered with faded gig flyers, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: the low buzz of the stage lighting rig, a beer cooler humming off in the dark, and her voice close and dry on the camcorder mic. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee, and her voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue, captured naturally by the camcorder microphone. One continuous, relaxed line with natural breaths and brief pauses. ID_A's lips, jaw, cheeks, and tongue move with natural conversational articulation in tight sync with the audible speech; the first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. She stands still at the mic stand without touching it, looking into the lens, and says, \\\"Alright, watch close. Five places, one me. Nothing carries this face around but one sentence, repeated like a chorus. That's the whole gig. Count the costume changes - there aren't any.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a slow steady push-in to a medium close-up at her eye level in a late-night diner booth, teal and pink neon tubing burning in the window beside her and doubling in soft color across the chrome napkin holder and the red vinyl seat, her head and shoulders filling most of the frame and her mouth fully visible, a thick white coffee mug already on the table in front of her, untouched. Quiet diegetic sound only: the neon transformer buzzing in the window, a milkshake machine whirring somewhere behind the counter, and the vinyl seat creaking once as she settles. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee, and her voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue, captured naturally by the camcorder microphone. One continuous, relaxed line with natural breaths and brief pauses. ID_A's lips, jaw, cheeks, and tongue move with natural conversational articulation in tight sync with the audible speech; the first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. She sits still in the booth, looking into the lens, and says, \\\"New room, new light, same everything else. Same jacket, same pins, same voice with the same attitude. If I drift even a little, you'd clock it instantly. So clock it.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a locked static medium close-up at her eye level in a fluorescent-lit laundromat, a wall of mustard-yellow washing machines behind her with one drum tumbling mid-cycle, chipped mint-green floor tile, a rolling wire basket parked beside her, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: the tumbling dryer thumping in rhythm, coins rattling in a metal tray, and the fluorescent fixtures humming overhead. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee, and her voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue, captured naturally by the camcorder microphone. One continuous, relaxed line with natural breaths and brief pauses. ID_A's lips, jaw, cheeks, and tongue move with natural conversational articulation in tight sync with the audible speech; the first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. She leans one shoulder against a washer, standing still, looking into the lens, and says, \\\"Third spot. Half a minute in. My voice hasn't moved an inch - same speed, same edge, same accent. The machines are louder than my identity crisis. Which is zero.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a slow lateral drift to a medium close-up at her eye level in a cramped record store aisle, wooden crates of vinyl records packed tight on both sides, hand-written orange dividers poking up from the rows, a wall of album sleeves behind her in reds and yellows, warm tube amp light from the listening corner, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: a record crackling quietly on the shop turntable, sleeves flipping somewhere in another aisle, and the floorboards creaking under her weight shift. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee, and her voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue, captured naturally by the camcorder microphone. One continuous, relaxed line with natural breaths and brief pauses. ID_A's lips, jaw, cheeks, and tongue move with natural conversational articulation in tight sync with the audible speech; the first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. She stands still between the crates, hands in her jacket pockets, looking into the lens, and says, \\\"Every one of these shots rendered separately. Different room, different seed, zero shared pixels. One sentence holds me together. Honestly? Most bands can't stay this consistent.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a locked static medium close-up at her eye level on a flat gravel rooftop at dusk, the sky behind her banded deep orange to violet, strings of cafe bulbs slung between two vent stacks catching the edge of her jacket pins, the city below reduced to warm scattered windows, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: wind moving over the parapet, distant traffic far below, and one of the bulb strings ticking against its wire in the breeze. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee, and her voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue, captured naturally by the camcorder microphone. One continuous, relaxed line with natural breaths and brief pauses. ID_A's lips, jaw, cheeks, and tongue move with natural conversational articulation in tight sync with the audible speech; the first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. She stands still against the skyline, looking into the lens, and says, \\\"So that's the trick - there isn't one. Same face, same voice, five rooms deep. If I'm a file, I'm at least a catchy one. See you around.\\\"\"\n ]\n}"
1079
- ]
 
 
1080
  },
1081
  {
1082
  "id": 11,
@@ -1090,7 +875,7 @@
1090
  106
1091
  ],
1092
  "flags": {},
1093
- "order": 3,
1094
  "mode": 0,
1095
  "inputs": [
1096
  {
@@ -1124,7 +909,7 @@
1124
  }
1125
  },
1126
  "widgets_values": [
1127
- 1,
1128
  "increment",
1129
  null
1130
  ]
@@ -1240,62 +1025,171 @@
1240
  ]
1241
  },
1242
  {
1243
- "id": 61,
1244
- "type": "Note",
1245
  "pos": [
1246
- 3850.584695322545,
1247
- 806.7942672160794
1248
  ],
1249
  "size": [
1250
- 424.8819100287956,
1251
- 398.47368009603724
1252
  ],
1253
  "flags": {},
1254
- "order": 4,
1255
  "mode": 0,
1256
- "inputs": [],
1257
- "outputs": [],
1258
- "properties": {
1259
- "ue_properties": {
1260
- "widget_ue_connectable": {},
1261
- "version": "7.8",
1262
- "input_ue_unconnectable": {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1263
  }
1264
- },
1265
- "widgets_values": [
1266
- "GENERATE - the knobs that matter\n------------------------------------------------\nRESOLUTION & FRAMES (hard rules):\n* width/height must be divisible by 32; num_frames must be 8n+1 (121, 241, 313...).\n* Talking characters: keep speaking shots at medium close-up or tighter, and use ~864+ native height. The VAE packs 32 px into one latent token - in a wide shot the mouth is smaller than one token and lip sync cannot resolve. 544 is a fast-preview size, not a dialogue size.\n\nIDENTITY (the point of this workflow):\n* memory_max_size - how many past shots feed the memory bank (5-7 works well). 0 disables cross-shot identity.\n* enable_audio_memory - holds VOICE identity across shots. Leave ON for a recurring speaker.\n* Repeat the character's identity sentence byte-identical in every shot's prompt - the bank keys on it.\n\nVRAM:\n* sequential_offload ON for 24 GB cards. resident_blocks: 12 on 24 GB, ~24 on 32 GB (higher = faster, more VRAM).\n* decode_tiling auto is fine.\n\nLEAVE AT DEFAULTS: num_fix_frames and audio_memory_window_size are tuned values; changing them degrades sync or identity. v2a_grad_scale is training-only and has NO effect at inference - leave it at default (correction to the v1.2 note).\n* hires_factor 1.0 = off. Prefer the AutoFinish upscaler (next group) over in-loop hires."
1267
- ],
1268
- "color": "#432",
1269
- "bgcolor": "#653"
1270
- },
1271
- {
1272
- "id": 60,
1273
- "type": "Note",
1274
- "pos": [
1275
- 2780.2351442980976,
1276
- 806.7950609883953
1277
  ],
1278
- "size": [
1279
- 1057.751230034948,
1280
- 248.99507986020944
 
 
 
 
 
 
1281
  ],
1282
- "flags": {},
1283
- "order": 5,
1284
- "mode": 0,
1285
- "inputs": [],
1286
- "outputs": [],
1287
  "properties": {
 
 
 
1288
  "ue_properties": {
1289
  "widget_ue_connectable": {},
1290
- "version": "7.8",
1291
- "input_ue_unconnectable": {}
1292
  }
1293
  },
1294
  "widgets_values": [
1295
- "MODEL LOADER - what to set, what to leave\n------------------------------------------------\nSET THESE TWO:\n* model_file - the DiT checkpoint. fp8 build (23 GB) for 24 GB cards; bf16 (43 GB) for 32 GB+ (needs sequential offload).\n* gemma_file - your Gemma-3-12B text encoder, picked from models/text_encoders or models/clip. Single-file .safetensors or .gguf. A GGUF encoder is the light option (fits 24 GB systems easily).\n\nLEAVE ALONE UNLESS YOU KNOW WHY:\n* checkpoint_path - only needed when model_file is a .gguf (GGUF = DiT only; this must then point at a full safetensors to supply the VAEs + vocoder).\n* gemma_path - only for an HF gemma-3-12b-it DIRECTORY (dropdowns list files, not folders).\n* lora_file / lora_path - optional style LoRA. Ignored for GGUF DiTs.\n\nVRAM GUIDE:\n* 24 GB: fp8 model_file + low_vram ON (encoder runs on CPU; the encode is cached per prompt, so it only costs once).\n* 32 GB: bf16 model_file if downloaded; low_vram still recommended (the bf16 encoder alone is ~23 GB).\n* RTX 40/50-series: turn fp8_scaled_mm ON - native fp8 matmul, real speedup, and at moderate resolutions the DiT can run with sequential_offload OFF. Older GPUs: leave it off.\n* encoder_fp8 - halves encoder memory at a slight embedding shift (voice quality is the canary). Try it if RAM-starved."
1296
- ],
1297
- "color": "#432",
1298
- "bgcolor": "#653"
 
 
 
 
 
 
 
 
1299
  },
1300
  {
1301
  "id": 57,
@@ -1584,17 +1478,17 @@
1584
  }
1585
  },
1586
  "widgets_values": [
1587
- 1872533430,
1588
  "randomize",
1589
  321,
1590
- 864,
1591
- 1536,
1592
  25,
1593
  2,
1594
  5,
1595
  3,
1596
- false,
1597
- 96,
1598
  true,
1599
  "joyecho/shot",
1600
  "vhs_glitch",
@@ -1608,6 +1502,112 @@
1608
  1,
1609
  "subtle (1 step)"
1610
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1611
  }
1612
  ],
1613
  "links": [
@@ -1805,10 +1805,10 @@
1805
  "config": {},
1806
  "extra": {
1807
  "ds": {
1808
- "scale": 0.9663060000001101,
1809
  "offset": [
1810
- -2563.297915989854,
1811
- 133.69922358659016
1812
  ]
1813
  },
1814
  "frontendVersion": "1.45.21",
 
273
  8
274
  ]
275
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  {
277
  "id": 59,
278
  "type": "JoyEcho_LLMEnhance",
 
723
  },
724
  "widgets_values": [
725
  "by_seed",
726
+ 1696602241,
727
  "randomize",
728
  "joyecho_refs",
729
  "no_reference",
 
761
  "bgcolor": "#653"
762
  },
763
  {
764
+ "id": 42,
765
+ "type": "ShowText|pysssss",
766
  "pos": [
767
+ 900,
768
+ 917
769
  ],
770
  "size": [
771
+ 1157.2399195128025,
772
+ 1168.0000000000002
773
  ],
774
  "flags": {},
775
+ "order": 11,
776
  "mode": 0,
777
  "inputs": [
778
  {
779
+ "localized_name": "text",
780
+ "name": "text",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
781
  "type": "STRING",
782
+ "link": 116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  }
784
  ],
785
  "outputs": [
786
  {
787
+ "localized_name": "STRING",
788
+ "name": "STRING",
789
+ "shape": 6,
790
+ "type": "STRING",
791
+ "links": null
 
792
  }
793
  ],
794
  "properties": {
795
+ "cnr_id": "comfyui-custom-scripts",
796
+ "ver": "609f3afaa74b2f88ef9ce8d939626065e3247469",
797
+ "Node name for S&R": "ShowText|pysssss",
798
  "ue_properties": {
799
  "widget_ue_connectable": {},
800
  "input_ue_unconnectable": {},
 
802
  }
803
  },
804
  "widgets_values": [
805
+ "{\n \"prompts\": [\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a locked static medium close-up at her eye level on the small corner stage of an empty dive bar, hot magenta and blue stage lights raking across her from the rig above, a scuffed drum kit and a taped-up amp behind her, black walls layered with faded gig flyers, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: the low buzz of the stage lighting rig, a beer cooler humming off in the dark, and her voice close and dry on the camcorder mic. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee. ID_A's voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions, captured with close camcorder-microphone proximity. ID_A's mouth stays clearly visible in the frame, and the mouth movement stays naturally synchronized with every spoken line. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue. One continuous line with natural breaths and brief pauses; ID_A's first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. At a quick, natural speed, she stands still at the mic stand without touching it, looking into the lens, the lip movement aligning closely with the audio throughout the line. In a bright, quick voice with a playful edge, ID_A says, \\\"Alright, watch close. Five places, one me. Nothing carries this face around but one sentence, repeated like a chorus. That's the whole gig. Count the costume changes - there aren't any.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a slow steady push-in to a medium close-up at her eye level in a late-night diner booth, teal and pink neon tubing burning in the window beside her and doubling in soft color across the chrome napkin holder and the red vinyl seat, her head and shoulders filling most of the frame and her mouth fully visible, a thick white coffee mug already on the table in front of her, untouched. Quiet diegetic sound only: the neon transformer buzzing in the window, a milkshake machine whirring somewhere behind the counter, and the vinyl seat creaking once as she settles. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee. ID_A's voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions, captured with close camcorder-microphone proximity. ID_A's mouth stays clearly visible in the frame, and the mouth movement stays naturally synchronized with every spoken line. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue. One continuous line with natural breaths and brief pauses; ID_A's first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. At a quick, natural speed, she sits still in the booth, looking into the lens, the lip movement aligning closely with the audio throughout the line. In a bright, quick voice with a playful edge, ID_A says, \\\"New room, new light, same everything else. Same jacket, same pins, same voice with the same attitude. If I drift even a little, you'd clock it instantly. So clock it.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a locked static medium close-up at her eye level in a fluorescent-lit laundromat, a wall of mustard-yellow washing machines behind her with one drum tumbling mid-cycle, chipped mint-green floor tile, a rolling wire basket parked beside her, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: the tumbling dryer thumping in rhythm, coins rattling in a metal tray, and the fluorescent fixtures humming overhead. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee. ID_A's voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions, captured with close camcorder-microphone proximity. ID_A's mouth stays clearly visible in the frame, and the mouth movement stays naturally synchronized with every spoken line. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue. One continuous line with natural breaths and brief pauses; ID_A's first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. At a quick, natural speed, she leans one shoulder against a washer, standing still, looking into the lens, the lip movement aligning closely with the audio throughout the line. In a bright, quick voice with a playful edge, ID_A says, \\\"Third spot. Half a minute in. My voice hasn't moved an inch - same speed, same edge, same accent. The machines are louder than my identity crisis. Which is zero.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a slow lateral drift to a medium close-up at her eye level in a cramped record store aisle, wooden crates of vinyl records packed tight on both sides, hand-written orange dividers poking up from the rows, a wall of album sleeves behind her in reds and yellows, warm tube amp light from the listening corner, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: a record crackling quietly on the shop turntable, sleeves flipping somewhere in another aisle, and the floorboards creaking under her weight shift. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee. ID_A's voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions, captured with close camcorder-microphone proximity. ID_A's mouth stays clearly visible in the frame, and the mouth movement stays naturally synchronized with every spoken line. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue. One continuous line with natural breaths and brief pauses; ID_A's first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. At a quick, natural speed, she stands still between the crates, hands in her jacket pockets, looking into the lens, the lip movement aligning closely with the audio throughout the line. In a bright, quick voice with a playful edge, ID_A says, \\\"Every one of these shots rendered separately. Different room, different seed, zero shared pixels. One sentence holds me together. Honestly? Most bands can't stay this consistent.\\\"\",\n \"Consumer camcorder video, 1080p, modest dynamic range, saturated color, slight edge softness: a locked static medium close-up at her eye level on a flat gravel rooftop at dusk, the sky behind her banded deep orange to violet, strings of cafe bulbs slung between two vent stacks catching the edge of her jacket pins, the city below reduced to warm scattered windows, her head and shoulders filling most of the frame and her mouth fully visible. Quiet diegetic sound only: wind moving over the parapet, distant traffic far below, and one of the bulb strings ticking against its wire in the breeze. ID_A is a woman in her early twenties with a bleached platinum pixie cut with choppy short bangs, a small silver septum ring, a row of small silver hoops up one ear, sharp winged black eyeliner, wearing a battered black leather jacket covered in enamel band pins and safety pins over a ripped neon-pink band tee. ID_A's voice is a bright, quick young American voice with a playful edge, casual American accent, casual contractions, captured with close camcorder-microphone proximity. ID_A's mouth stays clearly visible in the frame, and the mouth movement stays naturally synchronized with every spoken line. ID_A is the only person speaking in this shot, the source of the live camcorder dialogue. One continuous line with natural breaths and brief pauses; ID_A's first mouth movement begins with the first audible word, and the mouth settles naturally after the final word. At a quick, natural speed, she stands still against the skyline, looking into the lens, the lip movement aligning closely with the audio throughout the line. In a bright, quick voice with a playful edge, ID_A says, \\\"So that's the trick - there isn't one. Same face, same voice, five rooms deep. If I'm a file, I'm at least a catchy one. See you around.\\\"\"\n ]\n}"
 
 
 
 
 
 
 
 
 
 
806
  ]
807
  },
808
  {
809
+ "id": 61,
810
+ "type": "Note",
811
  "pos": [
812
+ 3850.584695322545,
813
+ 806.7942672160794
814
  ],
815
  "size": [
816
+ 424.8819100287956,
817
+ 398.47368009603724
818
  ],
819
  "flags": {},
820
+ "order": 3,
821
  "mode": 0,
822
+ "inputs": [],
823
+ "outputs": [],
824
+ "properties": {
825
+ "ue_properties": {
826
+ "widget_ue_connectable": {},
827
+ "version": "7.8",
828
+ "input_ue_unconnectable": {}
829
  }
830
+ },
831
+ "widgets_values": [
832
+ "GENERATE - the knobs that matter\n------------------------------------------------\nRESOLUTION & FRAMES (hard rules):\n* width/height must be divisible by 32; num_frames must be 8n+1 (121, 241, 313...).\n* Talking characters: keep speaking shots at medium close-up or tighter, and use ~864+ native height. The VAE packs 32 px into one latent token - in a wide shot the mouth is smaller than one token and lip sync cannot resolve. 544 is a fast-preview size, not a dialogue size.\n\nIDENTITY (the point of this workflow):\n* memory_max_size - how many past shots feed the memory bank (5-7 works well). 0 disables cross-shot identity.\n* enable_audio_memory - holds VOICE identity across shots. Leave ON for a recurring speaker.\n* Repeat the character's identity sentence byte-identical in every shot's prompt - the bank keys on it.\n\nVRAM:\n* sequential_offload ON for 24 GB cards. resident_blocks: 12 on 24 GB, ~24 on 32 GB (higher = faster, more VRAM).\n* decode_tiling auto is fine.\n\nLEAVE AT DEFAULTS: num_fix_frames and audio_memory_window_size are tuned values; changing them degrades sync or identity. v2a_grad_scale is training-only and has NO effect at inference - leave it at default (correction to the v1.2 note).\n* hires_factor 1.0 = off. Prefer the AutoFinish upscaler (next group) over in-loop hires."
833
  ],
834
+ "color": "#432",
835
+ "bgcolor": "#653"
836
+ },
837
+ {
838
+ "id": 60,
839
+ "type": "Note",
840
+ "pos": [
841
+ 2780.2351442980976,
842
+ 806.7950609883953
843
+ ],
844
+ "size": [
845
+ 1057.751230034948,
846
+ 248.99507986020944
847
  ],
848
+ "flags": {},
849
+ "order": 4,
850
+ "mode": 0,
851
+ "inputs": [],
852
+ "outputs": [],
853
  "properties": {
 
 
 
854
  "ue_properties": {
855
  "widget_ue_connectable": {},
856
+ "version": "7.8",
857
+ "input_ue_unconnectable": {}
858
  }
859
  },
860
  "widgets_values": [
861
+ "MODEL LOADER - what to set, what to leave\n------------------------------------------------\nSET THESE TWO:\n* model_file - the DiT checkpoint. fp8 build (23 GB) for 24 GB cards; bf16 (43 GB) for 32 GB+ (needs sequential offload).\n* gemma_file - your Gemma-3-12B text encoder, picked from models/text_encoders or models/clip. Single-file .safetensors or .gguf. A GGUF encoder is the light option (fits 24 GB systems easily).\n\nLEAVE ALONE UNLESS YOU KNOW WHY:\n* checkpoint_path - only needed when model_file is a .gguf (GGUF = DiT only; this must then point at a full safetensors to supply the VAEs + vocoder).\n* gemma_path - only for an HF gemma-3-12b-it DIRECTORY (dropdowns list files, not folders).\n* lora_file / lora_path - optional style LoRA. Ignored for GGUF DiTs.\n\nVRAM GUIDE:\n* 24 GB: fp8 model_file + low_vram ON (encoder runs on CPU; the encode is cached per prompt, so it only costs once).\n* 32 GB: bf16 model_file if downloaded; low_vram still recommended (the bf16 encoder alone is ~23 GB).\n* RTX 40/50-series: turn fp8_scaled_mm ON - native fp8 matmul, real speedup, and at moderate resolutions the DiT can run with sequential_offload OFF. Older GPUs: leave it off.\n* encoder_fp8 - halves encoder memory at a slight embedding shift (voice quality is the canary). Try it if RAM-starved."
862
+ ],
863
+ "color": "#432",
864
+ "bgcolor": "#653"
865
  },
866
  {
867
  "id": 11,
 
875
  106
876
  ],
877
  "flags": {},
878
+ "order": 5,
879
  "mode": 0,
880
  "inputs": [
881
  {
 
909
  }
910
  },
911
  "widgets_values": [
912
+ 2,
913
  "increment",
914
  null
915
  ]
 
1025
  ]
1026
  },
1027
  {
1028
+ "id": 64,
1029
+ "type": "JoyEcho_ModelLoader",
1030
  "pos": [
1031
+ 3195.206611570208,
1032
+ 63.911845730031445
1033
  ],
1034
  "size": [
1035
+ 633.88812640109,
1036
+ 328
1037
  ],
1038
  "flags": {},
1039
+ "order": 6,
1040
  "mode": 0,
1041
+ "inputs": [
1042
+ {
1043
+ "localized_name": "lora_stack",
1044
+ "name": "lora_stack",
1045
+ "shape": 7,
1046
+ "type": "JOYECHO_LORA_STACK",
1047
+ "link": 119
1048
+ },
1049
+ {
1050
+ "localized_name": "model_file",
1051
+ "name": "model_file",
1052
+ "shape": 7,
1053
+ "type": "COMBO",
1054
+ "widget": {
1055
+ "name": "model_file"
1056
+ },
1057
+ "link": null
1058
+ },
1059
+ {
1060
+ "localized_name": "checkpoint_path",
1061
+ "name": "checkpoint_path",
1062
+ "shape": 7,
1063
+ "type": "STRING",
1064
+ "widget": {
1065
+ "name": "checkpoint_path"
1066
+ },
1067
+ "link": null
1068
+ },
1069
+ {
1070
+ "localized_name": "gemma_file",
1071
+ "name": "gemma_file",
1072
+ "shape": 7,
1073
+ "type": "COMBO",
1074
+ "widget": {
1075
+ "name": "gemma_file"
1076
+ },
1077
+ "link": null
1078
+ },
1079
+ {
1080
+ "localized_name": "gemma_path",
1081
+ "name": "gemma_path",
1082
+ "shape": 7,
1083
+ "type": "STRING",
1084
+ "widget": {
1085
+ "name": "gemma_path"
1086
+ },
1087
+ "link": null
1088
+ },
1089
+ {
1090
+ "localized_name": "lora_file",
1091
+ "name": "lora_file",
1092
+ "shape": 7,
1093
+ "type": "COMBO",
1094
+ "widget": {
1095
+ "name": "lora_file"
1096
+ },
1097
+ "link": null
1098
+ },
1099
+ {
1100
+ "localized_name": "lora_path",
1101
+ "name": "lora_path",
1102
+ "shape": 7,
1103
+ "type": "STRING",
1104
+ "widget": {
1105
+ "name": "lora_path"
1106
+ },
1107
+ "link": null
1108
+ },
1109
+ {
1110
+ "localized_name": "lora_strength",
1111
+ "name": "lora_strength",
1112
+ "shape": 7,
1113
+ "type": "FLOAT",
1114
+ "widget": {
1115
+ "name": "lora_strength"
1116
+ },
1117
+ "link": null
1118
+ },
1119
+ {
1120
+ "localized_name": "fp8_transformer",
1121
+ "name": "fp8_transformer",
1122
+ "shape": 7,
1123
+ "type": "BOOLEAN",
1124
+ "widget": {
1125
+ "name": "fp8_transformer"
1126
+ },
1127
+ "link": null
1128
+ },
1129
+ {
1130
+ "localized_name": "fp8_scaled_mm",
1131
+ "name": "fp8_scaled_mm",
1132
+ "shape": 7,
1133
+ "type": "BOOLEAN",
1134
+ "widget": {
1135
+ "name": "fp8_scaled_mm"
1136
+ },
1137
+ "link": null
1138
+ },
1139
+ {
1140
+ "localized_name": "encoder_fp8",
1141
+ "name": "encoder_fp8",
1142
+ "shape": 7,
1143
+ "type": "BOOLEAN",
1144
+ "widget": {
1145
+ "name": "encoder_fp8"
1146
+ },
1147
+ "link": null
1148
+ },
1149
+ {
1150
+ "localized_name": "low_vram",
1151
+ "name": "low_vram",
1152
+ "shape": 7,
1153
+ "type": "BOOLEAN",
1154
+ "widget": {
1155
+ "name": "low_vram"
1156
+ },
1157
+ "link": null
1158
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1159
  ],
1160
+ "outputs": [
1161
+ {
1162
+ "localized_name": "model",
1163
+ "name": "model",
1164
+ "type": "JOYECHO_MODEL",
1165
+ "links": [
1166
+ 118
1167
+ ]
1168
+ }
1169
  ],
 
 
 
 
 
1170
  "properties": {
1171
+ "aux_id": "RealRebelAI/ComfyUI_JoyAI_Echo_GGUF_Nodes",
1172
+ "ver": "0d9e32fcd2d255a16604368fcaa1875c380c7f3b",
1173
+ "Node name for S&R": "JoyEcho_ModelLoader",
1174
  "ue_properties": {
1175
  "widget_ue_connectable": {},
1176
+ "input_ue_unconnectable": {},
1177
+ "version": "7.8"
1178
  }
1179
  },
1180
  "widgets_values": [
1181
+ "diffusion_models: ltx23_echoVid-ltxAud_surgical_bf16.safetensors",
1182
+ "",
1183
+ "text_encoders: gemma3-12b-BASE-clean-Q8_0.gguf",
1184
+ "",
1185
+ "(use lora_path / none)",
1186
+ "",
1187
+ 0,
1188
+ false,
1189
+ true,
1190
+ false,
1191
+ true
1192
+ ]
1193
  },
1194
  {
1195
  "id": 57,
 
1478
  }
1479
  },
1480
  "widgets_values": [
1481
+ 211080272,
1482
  "randomize",
1483
  321,
1484
+ 768,
1485
+ 1344,
1486
  25,
1487
  2,
1488
  5,
1489
  3,
1490
+ true,
1491
+ 48,
1492
  true,
1493
  "joyecho/shot",
1494
  "vhs_glitch",
 
1502
  1,
1503
  "subtle (1 step)"
1504
  ]
1505
+ },
1506
+ {
1507
+ "id": 58,
1508
+ "type": "JoyEcho_AutoFinish",
1509
+ "pos": [
1510
+ 4328.590366291457,
1511
+ 99.91012828201144
1512
+ ],
1513
+ "size": [
1514
+ 328.24765625,
1515
+ 178
1516
+ ],
1517
+ "flags": {},
1518
+ "order": 13,
1519
+ "mode": 0,
1520
+ "inputs": [
1521
+ {
1522
+ "localized_name": "images",
1523
+ "name": "images",
1524
+ "type": "IMAGE",
1525
+ "link": 110
1526
+ },
1527
+ {
1528
+ "localized_name": "enabled",
1529
+ "name": "enabled",
1530
+ "type": "BOOLEAN",
1531
+ "widget": {
1532
+ "name": "enabled"
1533
+ },
1534
+ "link": null
1535
+ },
1536
+ {
1537
+ "localized_name": "master_name",
1538
+ "name": "master_name",
1539
+ "type": "STRING",
1540
+ "widget": {
1541
+ "name": "master_name"
1542
+ },
1543
+ "link": null
1544
+ },
1545
+ {
1546
+ "localized_name": "scale_factor",
1547
+ "name": "scale_factor",
1548
+ "type": "FLOAT",
1549
+ "widget": {
1550
+ "name": "scale_factor"
1551
+ },
1552
+ "link": null
1553
+ },
1554
+ {
1555
+ "localized_name": "quality",
1556
+ "name": "quality",
1557
+ "type": "COMBO",
1558
+ "widget": {
1559
+ "name": "quality"
1560
+ },
1561
+ "link": null
1562
+ },
1563
+ {
1564
+ "localized_name": "batch_size",
1565
+ "name": "batch_size",
1566
+ "type": "INT",
1567
+ "widget": {
1568
+ "name": "batch_size"
1569
+ },
1570
+ "link": null
1571
+ },
1572
+ {
1573
+ "localized_name": "shots_subdir",
1574
+ "name": "shots_subdir",
1575
+ "shape": 7,
1576
+ "type": "STRING",
1577
+ "widget": {
1578
+ "name": "shots_subdir"
1579
+ },
1580
+ "link": null
1581
+ }
1582
+ ],
1583
+ "outputs": [
1584
+ {
1585
+ "localized_name": "images",
1586
+ "name": "images",
1587
+ "type": "IMAGE",
1588
+ "links": [
1589
+ 113
1590
+ ]
1591
+ }
1592
+ ],
1593
+ "properties": {
1594
+ "aux_id": "RealRebelAI/ComfyUI_JoyAI_Echo_GGUF_Nodes",
1595
+ "ver": "0d9e32fcd2d255a16604368fcaa1875c380c7f3b",
1596
+ "Node name for S&R": "JoyEcho_AutoFinish",
1597
+ "ue_properties": {
1598
+ "widget_ue_connectable": {},
1599
+ "input_ue_unconnectable": {},
1600
+ "version": "7.8"
1601
+ }
1602
+ },
1603
+ "widgets_values": [
1604
+ true,
1605
+ " multishot",
1606
+ 1.42,
1607
+ "ULTRA",
1608
+ 8,
1609
+ "joyecho"
1610
+ ]
1611
  }
1612
  ],
1613
  "links": [
 
1805
  "config": {},
1806
  "extra": {
1807
  "ds": {
1808
+ "scale": 0.8784600000001012,
1809
  "offset": [
1810
+ -2169.0519384541776,
1811
+ 540.1476020823327
1812
  ]
1813
  },
1814
  "frontendVersion": "1.45.21",