joeygambino commited on
Commit
7d28f09
Β·
verified Β·
1 Parent(s): 5ac4726

Document the system-RAM / Windows pagefile requirement (three users crashed on 64GB with no guidance anywhere)

Browse files
Files changed (1) hide show
  1. INSTRUCTIONS.md +230 -189
INSTRUCTIONS.md CHANGED
@@ -1,189 +1,230 @@
1
- # JoyAI-Echo Multishot β€” Full Instructions
2
-
3
- This is the complete, step-by-step guide. If you only read one file, read
4
- this one. It covers install, your first render, where the reference image
5
- goes, LoRAs, performance settings, and every common failure with its fix.
6
-
7
- ---
8
-
9
- ## 1. What this workflow actually is (read this first β€” it prevents confusion)
10
-
11
- This is a **multi-shot text-to-video** pipeline with **joint audio** (voice and
12
- picture generated together, not dubbed). You write one or more SHOTS; each shot
13
- renders separately, and a **cross-shot memory bank** carries your character's
14
- face, wardrobe, and voice from shot to shot. The thing that makes it work is
15
- simple but strict:
16
-
17
- > **Repeat your character's description sentence WORD-FOR-WORD IDENTICAL in
18
- > every shot.** The memory bank keys on it. Reword it even slightly and the
19
- > face drifts.
20
-
21
- It is **not** a classic image-to-video workflow. You do not have to provide an
22
- image at all β€” text alone holds identity. You *can* add a reference image to
23
- lock the face harder (section 6), but it works differently from normal i2v:
24
- it pre-seeds the memory bank rather than becoming frame one.
25
-
26
- ---
27
-
28
- ## 2. What you need
29
-
30
- | thing | where it goes | notes |
31
- |---|---|---|
32
- | RealRebelAI's ComfyUI_JoyAI_Echo_GGUF_Nodes | `ComfyUI/custom_nodes/` | the BASE pack β€” install it first |
33
- | This patch (the folder in this zip) | copied OVER the base pack | replace files when asked |
34
- | A model build (see table below) | `ComfyUI/models/diffusion_models/` (safetensors) or `models/unet/` (GGUF) | one of: bf16, fp8, Q8_0, Q5_0 |
35
- | A FULL checkpoint (bf16 or fp8) | `ComfyUI/models/diffusion_models/` | **required even when using a GGUF** β€” the GGUF is the transformer only; the VAEs and vocoder load from the full checkpoint |
36
- | Gemma-3-12B-it text encoder | `ComfyUI/models/text_encoders/` | use TRUE BASE Gemma β€” single-file safetensors or the clean Q8_0 encoder GGUF. **Do not** use the circulating "joyecho" Gemma GGUF: it is a different model and produces duplicated people |
37
- | ComfyUI-Easy-Use + ComfyUI-Custom-Scripts | `custom_nodes/` | two helper packs used by two convenience nodes; or delete those two nodes |
38
-
39
- Which model build:
40
-
41
- | you have | use |
42
- |---|---|
43
- | RTX 40/50-series, 24 GB+ | fp8 (fast) or Q8_0 GGUF (highest quant fidelity) |
44
- | RTX 30-series or older, 24 GB | Q8_0 GGUF |
45
- | 16 GB card | Q5_0 GGUF |
46
- | 32 GB+ and patience | bf16 |
47
-
48
- ## 3. Install
49
-
50
- 1. Install the base pack (RealRebelAI's) into `ComfyUI/custom_nodes/` if you
51
- have not already.
52
- 2. Copy this zip's `ComfyUI_JoyAI_Echo_GGUF_Nodes` folder into
53
- `ComfyUI/custom_nodes/`, REPLACING files when asked.
54
- 3. Restart ComfyUI.
55
- 4. Open `workflow/JoyEcho_Multishot_Workflow_PUBLIC.json` (drag it onto the
56
- ComfyUI canvas, or Workflows > Open).
57
-
58
- ## 4. First render in five minutes
59
-
60
- 1. Copy `workflow/example_multishot.json` into `ComfyUI/input/joyecho_prompts/`
61
- (create the folder if it does not exist).
62
- 2. In the **Model Loader** node: pick your DiT in `model_file` (GGUF or
63
- safetensors). If you picked a GGUF, ALSO set `checkpoint_path` to your full
64
- bf16/fp8 checkpoint. Pick your Gemma in `gemma_file`.
65
- 3. In the **Prompt Source** node: pick `example_multishot.json`.
66
- 4. Queue. First run encodes the prompts (a few minutes); every later run of the
67
- same prompts skips encoding entirely (you will see `Conditioning cache HIT`).
68
-
69
- Where your output goes β€” THREE places, by design:
70
-
71
- | file | what it is |
72
- |---|---|
73
- | `output/joyecho/shot_000.mp4`, `shot_001.mp4`, ... | each shot, saved the moment it finishes (watch progress live) |
74
- | `output/output_#####.mp4` | the assembled full video from SaveVideo (native resolution, with shot transitions) |
75
- | `output/joyecho/<name>_<timestamp>_MASTER.mp4` | the upscaled master, built automatically in the background a few minutes after the run ends |
76
-
77
- ## 5. Writing your own shots
78
-
79
- Your prompt file is either a `.json` file: `{"prompts": ["shot 1 text",
80
- "shot 2 text", ...]}` β€” or a `.txt` in the same format the example shows. Rules
81
- that matter:
82
-
83
- - **The identity sentence is byte-identical in every shot.** Copy-paste it.
84
- Include: appearance, wardrobe, and a voice description WITH an explicit
85
- accent ("in a casual American accent" β€” the model defaults to British if you
86
- do not say otherwise).
87
- - One shot is ~12.5 seconds at the default 313 frames. A comfortable spoken
88
- line for one shot is **about 20-30 words**, in double quotes.
89
- - For talking shots, keep the framing **medium close-up or tighter** and the
90
- resolution height 864+. In wide shots the mouth is smaller than the model
91
- can resolve and lip sync suffers no matter what you write.
92
- - Describe sound affirmatively in every shot ("Quiet diegetic sound only:
93
- rain on the window and a ticking radiator") β€” otherwise the model invents
94
- drones and music.
95
- - Do not write "no X" in a prompt β€” it renders the X. State what IS there.
96
-
97
- ## 6. THE REFERENCE IMAGE β€” "where do I insert the source image?"
98
-
99
- As of v1.4 the graph ships with a **Reference Image (OPTIONAL)** node just
100
- below the Generate node, deliberately unconnected - unconnected nodes never
101
- run, so it is safe to ignore. To use it: load your image there and drag its
102
- IMAGE output to the `reference_image` input on the left edge of
103
- JoyEcho_Generate. If you are on an older graph without the node:
104
-
105
- 1. Right-click the canvas > **Add Node > image > Load Image**.
106
- 2. Load your character image (a portrait render or photo-style still works
107
- best β€” clear face, front or three-quarter angle).
108
- 3. Drag from the Load Image node's **IMAGE** output to the **`reference_image`**
109
- input socket on the left edge of the **JoyEcho_Generate** node.
110
- 4. Queue as normal.
111
-
112
- What it does: the image is planted into the cross-shot memory bank as a
113
- permanent anchor, so EVERY shot is conditioned on that face and look β€” on top
114
- of (not instead of) your identity sentence. Keep the identity sentence anyway,
115
- and make it describe the same person as the image.
116
-
117
- The `reference_zoom` widget (default 1.2) crops the reference in ~20% before
118
- conditioning. Why: a reference at exactly the render size is treated as
119
- continuable content β€” the first shot opens ON your image like classic i2v,
120
- which usually is not what you want in a multi-shot piece. 1.2 keeps the
121
- identity and drops that behavior. If you WANT shot 1 to start from your image
122
- (true i2v-style opening), set `reference_zoom` to 1.0.
123
-
124
- Advanced: the RefPicker node can auto-load reference folders per character by
125
- name (a folder `ComfyUI/input/joyecho_refs/alice/` is used whenever "alice"
126
- appears in your prompts). For single-character work the Load Image route above
127
- is simpler.
128
-
129
- ## 7. LoRAs
130
-
131
- As of v1.4 the loader takes **multiple LoRAs**, and the workflow ships with
132
- the node for it: the **LoRA Stack** node, already wired into the Model Loader.
133
-
134
- - Pick up to three LoRAs in its dropdowns, each with its own strength slider.
135
- Slots left on `(none)` do nothing.
136
- - Need more than three? Add another LoRA Stack node (Add Node > JoyAI-Echo >
137
- JoyEcho LoRA Stack) and chain it: first node's `lora_stack` output into the
138
- second node's `lora_stack` input, second node into the Model Loader.
139
- - Everything stacks with the Model Loader's own `lora_file` pick.
140
-
141
- Power users / automation: `lora_path` also accepts a text list β€” one entry per
142
- line or comma-separated, each with an optional strength suffix
143
- (`my_style.safetensors@0.7`). Same result, no extra nodes.
144
-
145
- All LoRAs are fused into the model at load, so there is no per-step cost.
146
- Note: LoRAs apply on the **safetensors DiT path** only β€” they are ignored when
147
- a GGUF is selected as the DiT (existing limitation, stated in the tooltip).
148
-
149
- ## 8. Performance settings by VRAM
150
-
151
- | widget | what to set |
152
- |---|---|
153
- | `sequential_offload` | ON below 32 GB VRAM. Streams transformer blocks over PCIe. |
154
- | `resident_blocks` | With offload ON: how many of the 48 blocks stay on the GPU. Rough guide: 24 GB card + fp8/GGUF -> ~20-24; 16 GB -> 8-12; raise until VRAM is nearly full. |
155
- | `fp8_scaled_mm` | RTX 40/50-series ONLY. Native fp8 compute, real speedup. Leave OFF on 30-series and older. |
156
- | `low_vram` (encoder) | ON if Gemma encoding OOMs; slower but ~3 GB. |
157
- | resolution | 544x960 is a fast preview. For dialogue, raise height to 864+. |
158
- | `hires_factor` | 1.0 = off (default). The background AutoFinish upscale usually covers you. |
159
- | `head_trim_frames` | Leave at 14 (default). Trims the unstable first ~0.5s of each shot, where identity morph and lip-sync error concentrate. |
160
-
161
- ## 9. After updating this patch β€” one-time step
162
-
163
- Open your workflow, glance at the LAST few widgets on the Generate node
164
- (reference_zoom / resident_blocks / hires), fix anything that looks wrong, and
165
- SAVE. ComfyUI stores widget values by position; a graph saved under an older
166
- pack version can load a few trailing widgets scrambled until you re-save it
167
- once. If you ever find yourself re-entering the same two or three values after
168
- every restart β€” this is why, and one save ends it.
169
-
170
- ## 10. Troubleshooting
171
-
172
- | symptom | cause / fix |
173
- |---|---|
174
- | Error: "checkpoint_path is empty" | You picked a GGUF in model_file. GGUFs are the transformer only β€” set checkpoint_path to a full bf16/fp8 checkpoint too. |
175
- | Two copies of your character / wrong wardrobe / garbled identity | Wrong text encoder. Use TRUE BASE Gemma-3-12B-it (safetensors or the clean Q8_0 encoder GGUF). The "joyecho" Gemma GGUF is a different model β€” replace it. |
176
- | Face drifts between shots | Your identity sentence is not byte-identical across shots. Copy-paste it; do not reword. |
177
- | Voice is British | State the accent in every shot: "in a casual American accent". |
178
- | Random music / horror drones | Add an explicit sound line to every shot; leave `negative_scale_audio` at 0.3. |
179
- | Lip sync poor in wide shots | Physics of resolution: mouth too small. Medium close-up + height 864+ for talking shots. |
180
- | Widgets reset every restart | Section 9 β€” re-save the graph once. |
181
- | First run very slow | Normal: prompt encoding + caches build. Subsequent runs with the same prompts skip encoding entirely. |
182
- | Master video missing | It arrives a few minutes AFTER the run ends (background worker). Check `output/joyecho/` for `*_MASTER.mp4` and the `_autofinish_*.log` next to it. |
183
- | OOM during generation | sequential_offload ON, lower resident_blocks, lower resolution, low_vram ON for the encoder. |
184
-
185
- ---
186
-
187
- Model downloads, measurements, and a live demo Space are linked from the
188
- model listings. AI-generated content must be disclosed as such (LTX-2
189
- Community License; the JoyAI-Echo component is research / non-commercial).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # JoyAI-Echo Multishot β€” Full Instructions
2
+
3
+ This is the complete, step-by-step guide. If you only read one file, read
4
+ this one. It covers install, your first render, where the reference image
5
+ goes, LoRAs, performance settings, and every common failure with its fix.
6
+
7
+ ---
8
+
9
+ ## 1. What this workflow actually is (read this first β€” it prevents confusion)
10
+
11
+ This is a **multi-shot text-to-video** pipeline with **joint audio** (voice and
12
+ picture generated together, not dubbed). You write one or more SHOTS; each shot
13
+ renders separately, and a **cross-shot memory bank** carries your character's
14
+ face, wardrobe, and voice from shot to shot. The thing that makes it work is
15
+ simple but strict:
16
+
17
+ > **Repeat your character's description sentence WORD-FOR-WORD IDENTICAL in
18
+ > every shot.** The memory bank keys on it. Reword it even slightly and the
19
+ > face drifts.
20
+
21
+ It is **not** a classic image-to-video workflow. You do not have to provide an
22
+ image at all β€” text alone holds identity. You *can* add a reference image to
23
+ lock the face harder (section 6), but it works differently from normal i2v:
24
+ it pre-seeds the memory bank rather than becoming frame one.
25
+
26
+ ---
27
+
28
+ ## 2. What you need
29
+
30
+ | thing | where it goes | notes |
31
+ |---|---|---|
32
+ | RealRebelAI's ComfyUI_JoyAI_Echo_GGUF_Nodes | `ComfyUI/custom_nodes/` | the BASE pack β€” install it first |
33
+ | This patch (the folder in this zip) | copied OVER the base pack | replace files when asked |
34
+ | A model build (see table below) | `ComfyUI/models/diffusion_models/` (safetensors) or `models/unet/` (GGUF) | one of: bf16, fp8, Q8_0, Q5_0 |
35
+ | A FULL checkpoint (bf16 or fp8) | `ComfyUI/models/diffusion_models/` | **required even when using a GGUF** β€” the GGUF is the transformer only; the VAEs and vocoder load from the full checkpoint |
36
+ | Gemma-3-12B-it text encoder | `ComfyUI/models/text_encoders/` | use TRUE BASE Gemma β€” single-file safetensors or the clean Q8_0 encoder GGUF. **Do not** use the circulating "joyecho" Gemma GGUF: it is a different model and produces duplicated people |
37
+ | ComfyUI-Easy-Use + ComfyUI-Custom-Scripts | `custom_nodes/` | two helper packs used by two convenience nodes; or delete those two nodes |
38
+
39
+ Which model build:
40
+
41
+ | you have | use |
42
+ |---|---|
43
+ | RTX 40/50-series, 24 GB+ | fp8 (fast) or Q8_0 GGUF (highest quant fidelity) |
44
+ | RTX 30-series or older, 24 GB | Q8_0 GGUF |
45
+ | 16 GB card | Q5_0 GGUF |
46
+ | 32 GB+ and patience | bf16 |
47
+
48
+
49
+ ### System RAM and the Windows pagefile - READ THIS IF COMFYUI DIES WHILE LOADING
50
+
51
+ **A 24-32 GB GPU is not the binding constraint. System RAM is.** Loading a model
52
+ here materializes the whole checkpoint in system RAM as owned copies (not
53
+ memory-mapped), and the quantize / LoRA-fuse pass stacks more on top. The bf16
54
+ build is 46 GB on disk, so peak system usage runs well past what 64 GB of RAM
55
+ alone can provide.
56
+
57
+ **Symptoms** (all the same root cause):
58
+ - RAM climbs to ~100% while **VRAM stays almost idle**, then ComfyUI exits
59
+ - `Windows fatal exception: access violation` with a stack ending in
60
+ `sft_loader.py` / `create_vae_wrappers`
61
+ - the whole machine hangs or reboots during the first load
62
+
63
+ There is no catchable Python error for this - the process is killed by the OS.
64
+
65
+ **Fixes, cheapest first:**
66
+
67
+ 1. **Raise the Windows pagefile. This is the usual fix and costs only disk.**
68
+ Settings > System > About > Advanced system settings > Performance Settings >
69
+ Advanced > Virtual memory > Change. Untick "Automatically manage", select an
70
+ SSD, choose Custom size, and set **65536-131072 MB (64-128 GB)**. Reboot.
71
+ The peak is brief; with a large pagefile it spills to disk instead of dying.
72
+ Machines with 64 GB RAM and a default pagefile are the ones that crash.
73
+ 2. **Raise `resident_blocks` on the Generate node.** With `sequential_offload`
74
+ on, blocks that are NOT resident live in system RAM. `resident_blocks=1`
75
+ means 47 of 48 blocks sit in RAM while your VRAM goes unused. Push it up
76
+ until VRAM is nearly full - roughly **24-30 on a 32 GB card, 12 on 24 GB**.
77
+ This moves load off RAM and onto the card you bought.
78
+ 3. **Use a GGUF** in `model_file` - GGUF weights stay packed and memory-mapped
79
+ rather than copied into RAM.
80
+ 4. **Avoid the fp8 FILE unless you are also using an fp8 toggle.** Loaded on its
81
+ own it is upcast to bf16 at load, so a 25 GB file becomes ~50 GB in RAM. It
82
+ saves disk, not memory.
83
+ 5. Close other applications, and load no LoRAs on the first successful run
84
+ (fusion allocates extra at the peak).
85
+
86
+ Recent versions print a system-memory estimate before loading and warn when it
87
+ looks too tight, instead of letting Windows fall over silently.
88
+
89
+ ## 3. Install
90
+
91
+ 1. Install the base pack (RealRebelAI's) into `ComfyUI/custom_nodes/` if you
92
+ have not already.
93
+ 2. Copy this zip's `ComfyUI_JoyAI_Echo_GGUF_Nodes` folder into
94
+ `ComfyUI/custom_nodes/`, REPLACING files when asked.
95
+ 3. Restart ComfyUI.
96
+ 4. Open `workflow/JoyEcho_Multishot_Workflow_PUBLIC.json` (drag it onto the
97
+ ComfyUI canvas, or Workflows > Open).
98
+
99
+ ## 4. First render in five minutes
100
+
101
+ 1. Copy `workflow/example_multishot.json` into `ComfyUI/input/joyecho_prompts/`
102
+ (create the folder if it does not exist).
103
+ 2. In the **Model Loader** node: pick your DiT in `model_file` (GGUF or
104
+ safetensors). If you picked a GGUF, ALSO set `checkpoint_path` to your full
105
+ bf16/fp8 checkpoint. Pick your Gemma in `gemma_file`.
106
+ 3. In the **Prompt Source** node: pick `example_multishot.json`.
107
+ 4. Queue. First run encodes the prompts (a few minutes); every later run of the
108
+ same prompts skips encoding entirely (you will see `Conditioning cache HIT`).
109
+
110
+ Where your output goes β€” THREE places, by design:
111
+
112
+ | file | what it is |
113
+ |---|---|
114
+ | `output/joyecho/shot_000.mp4`, `shot_001.mp4`, ... | each shot, saved the moment it finishes (watch progress live) |
115
+ | `output/output_#####.mp4` | the assembled full video from SaveVideo (native resolution, with shot transitions) |
116
+ | `output/joyecho/<name>_<timestamp>_MASTER.mp4` | the upscaled master, built automatically in the background a few minutes after the run ends |
117
+
118
+ ## 5. Writing your own shots
119
+
120
+ Your prompt file is either a `.json` file: `{"prompts": ["shot 1 text",
121
+ "shot 2 text", ...]}` β€” or a `.txt` in the same format the example shows. Rules
122
+ that matter:
123
+
124
+ - **The identity sentence is byte-identical in every shot.** Copy-paste it.
125
+ Include: appearance, wardrobe, and a voice description WITH an explicit
126
+ accent ("in a casual American accent" β€” the model defaults to British if you
127
+ do not say otherwise).
128
+ - One shot is ~12.5 seconds at the default 313 frames. A comfortable spoken
129
+ line for one shot is **about 20-30 words**, in double quotes.
130
+ - For talking shots, keep the framing **medium close-up or tighter** and the
131
+ resolution height 864+. In wide shots the mouth is smaller than the model
132
+ can resolve and lip sync suffers no matter what you write.
133
+ - Describe sound affirmatively in every shot ("Quiet diegetic sound only:
134
+ rain on the window and a ticking radiator") β€” otherwise the model invents
135
+ drones and music.
136
+ - Do not write "no X" in a prompt β€” it renders the X. State what IS there.
137
+
138
+ ## 6. THE REFERENCE IMAGE β€” "where do I insert the source image?"
139
+
140
+ As of v1.4 the graph ships with a **Reference Image (OPTIONAL)** node just
141
+ below the Generate node, deliberately unconnected - unconnected nodes never
142
+ run, so it is safe to ignore. To use it: load your image there and drag its
143
+ IMAGE output to the `reference_image` input on the left edge of
144
+ JoyEcho_Generate. If you are on an older graph without the node:
145
+
146
+ 1. Right-click the canvas > **Add Node > image > Load Image**.
147
+ 2. Load your character image (a portrait render or photo-style still works
148
+ best β€” clear face, front or three-quarter angle).
149
+ 3. Drag from the Load Image node's **IMAGE** output to the **`reference_image`**
150
+ input socket on the left edge of the **JoyEcho_Generate** node.
151
+ 4. Queue as normal.
152
+
153
+ What it does: the image is planted into the cross-shot memory bank as a
154
+ permanent anchor, so EVERY shot is conditioned on that face and look β€” on top
155
+ of (not instead of) your identity sentence. Keep the identity sentence anyway,
156
+ and make it describe the same person as the image.
157
+
158
+ The `reference_zoom` widget (default 1.2) crops the reference in ~20% before
159
+ conditioning. Why: a reference at exactly the render size is treated as
160
+ continuable content β€” the first shot opens ON your image like classic i2v,
161
+ which usually is not what you want in a multi-shot piece. 1.2 keeps the
162
+ identity and drops that behavior. If you WANT shot 1 to start from your image
163
+ (true i2v-style opening), set `reference_zoom` to 1.0.
164
+
165
+ Advanced: the RefPicker node can auto-load reference folders per character by
166
+ name (a folder `ComfyUI/input/joyecho_refs/alice/` is used whenever "alice"
167
+ appears in your prompts). For single-character work the Load Image route above
168
+ is simpler.
169
+
170
+ ## 7. LoRAs
171
+
172
+ As of v1.4 the loader takes **multiple LoRAs**, and the workflow ships with
173
+ the node for it: the **LoRA Stack** node, already wired into the Model Loader.
174
+
175
+ - Pick up to three LoRAs in its dropdowns, each with its own strength slider.
176
+ Slots left on `(none)` do nothing.
177
+ - Need more than three? Add another LoRA Stack node (Add Node > JoyAI-Echo >
178
+ JoyEcho LoRA Stack) and chain it: first node's `lora_stack` output into the
179
+ second node's `lora_stack` input, second node into the Model Loader.
180
+ - Everything stacks with the Model Loader's own `lora_file` pick.
181
+
182
+ Power users / automation: `lora_path` also accepts a text list β€” one entry per
183
+ line or comma-separated, each with an optional strength suffix
184
+ (`my_style.safetensors@0.7`). Same result, no extra nodes.
185
+
186
+ All LoRAs are fused into the model at load, so there is no per-step cost.
187
+ Note: LoRAs apply on the **safetensors DiT path** only β€” they are ignored when
188
+ a GGUF is selected as the DiT (existing limitation, stated in the tooltip).
189
+
190
+ ## 8. Performance settings by VRAM
191
+
192
+ | widget | what to set |
193
+ |---|---|
194
+ | `sequential_offload` | ON below 32 GB VRAM. Streams transformer blocks over PCIe. |
195
+ | `resident_blocks` | With offload ON: how many of the 48 blocks stay on the GPU. Rough guide: 24 GB card + fp8/GGUF -> ~20-24; 16 GB -> 8-12; raise until VRAM is nearly full. |
196
+ | `fp8_scaled_mm` | RTX 40/50-series ONLY. Native fp8 compute, real speedup. Leave OFF on 30-series and older. |
197
+ | `low_vram` (encoder) | ON if Gemma encoding OOMs; slower but ~3 GB. |
198
+ | resolution | 544x960 is a fast preview. For dialogue, raise height to 864+. |
199
+ | `hires_factor` | 1.0 = off (default). The background AutoFinish upscale usually covers you. |
200
+ | `head_trim_frames` | Leave at 14 (default). Trims the unstable first ~0.5s of each shot, where identity morph and lip-sync error concentrate. |
201
+
202
+ ## 9. After updating this patch β€” one-time step
203
+
204
+ Open your workflow, glance at the LAST few widgets on the Generate node
205
+ (reference_zoom / resident_blocks / hires), fix anything that looks wrong, and
206
+ SAVE. ComfyUI stores widget values by position; a graph saved under an older
207
+ pack version can load a few trailing widgets scrambled until you re-save it
208
+ once. If you ever find yourself re-entering the same two or three values after
209
+ every restart β€” this is why, and one save ends it.
210
+
211
+ ## 10. Troubleshooting
212
+
213
+ | symptom | cause / fix |
214
+ |---|---|
215
+ | Error: "checkpoint_path is empty" | You picked a GGUF in model_file. GGUFs are the transformer only β€” set checkpoint_path to a full bf16/fp8 checkpoint too. |
216
+ | Two copies of your character / wrong wardrobe / garbled identity | Wrong text encoder. Use TRUE BASE Gemma-3-12B-it (safetensors or the clean Q8_0 encoder GGUF). The "joyecho" Gemma GGUF is a different model β€” replace it. |
217
+ | Face drifts between shots | Your identity sentence is not byte-identical across shots. Copy-paste it; do not reword. |
218
+ | Voice is British | State the accent in every shot: "in a casual American accent". |
219
+ | Random music / horror drones | Add an explicit sound line to every shot; leave `negative_scale_audio` at 0.3. |
220
+ | Lip sync poor in wide shots | Physics of resolution: mouth too small. Medium close-up + height 864+ for talking shots. |
221
+ | Widgets reset every restart | Section 9 β€” re-save the graph once. |
222
+ | First run very slow | Normal: prompt encoding + caches build. Subsequent runs with the same prompts skip encoding entirely. |
223
+ | Master video missing | It arrives a few minutes AFTER the run ends (background worker). Check `output/joyecho/` for `*_MASTER.mp4` and the `_autofinish_*.log` next to it. |
224
+ | OOM during generation | sequential_offload ON, lower resident_blocks, lower resolution, low_vram ON for the encoder. |
225
+
226
+ ---
227
+
228
+ Model downloads, measurements, and a live demo Space are linked from the
229
+ model listings. AI-generated content must be disclosed as such (LTX-2
230
+ Community License; the JoyAI-Echo component is research / non-commercial).