Upload folder using huggingface_hub
Browse files- .gitattributes +2 -0
- Comfyui_Minimax_h3_latent_Upscaler/.gitattributes +2 -0
- Comfyui_Minimax_h3_latent_Upscaler/README.md +351 -0
- Comfyui_Minimax_h3_latent_Upscaler/README_zh.md +321 -0
- Comfyui_Minimax_h3_latent_Upscaler/__init__.py +3 -0
- Comfyui_Minimax_h3_latent_Upscaler/__pycache__/__init__.cpython-312.pyc +0 -0
- Comfyui_Minimax_h3_latent_Upscaler/examples/Minimax_h3_latent_Upscaler_001.mp4 +3 -0
- Comfyui_Minimax_h3_latent_Upscaler/examples/Minimax_h3_latent_Upscaler_002.jpg +3 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/MMH3_Split_Upscale.py +725 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/__init__.py +37 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/MMH3_Split_Upscale.cpython-312.pyc +0 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/__init__.cpython-312.pyc +0 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/minimax_h3_latent_upscaler_2d.cpython-312.pyc +0 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/minimax_h3_latent_upscaler_3d.cpython-312.pyc +0 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/minimax_h3_latent_upscaler_2d.py +479 -0
- Comfyui_Minimax_h3_latent_Upscaler/nodes/minimax_h3_latent_upscaler_3d.py +655 -0
- Comfyui_Minimax_h3_latent_Upscaler/workflow_templates/minimax_h3_i2v_Latent Upscaler example workflow2.json +3003 -0
- Comfyui_Minimax_h3_latent_Upscaler/workflow_templates/minimax_h3_r2v_Latent Upscaler example workflow3.json +2671 -0
- h3_bundle/__init__.py +475 -0
- h3_bundle/__pycache__/__init__.cpython-312.pyc +0 -0
- note.txt +1 -0
- workflow/Bundle_h3.json +1978 -0
- workflow/Minimax_Timeline.json +3192 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
Comfyui_Minimax_h3_latent_Upscaler/examples/Minimax_h3_latent_Upscaler_001.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
Comfyui_Minimax_h3_latent_Upscaler/examples/Minimax_h3_latent_Upscaler_002.jpg filter=lfs diff=lfs merge=lfs -text
|
Comfyui_Minimax_h3_latent_Upscaler/.gitattributes
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Auto detect text files and perform LF normalization
|
| 2 |
+
* text=auto
|
Comfyui_Minimax_h3_latent_Upscaler/README.md
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<p align="center">
|
| 2 |
+
<a href="./README.md"><strong>English</strong></a> ·
|
| 3 |
+
<a href="./README_zh.md">中文</a>
|
| 4 |
+
</p>
|
| 5 |
+
|
| 6 |
+
<div align="center">
|
| 7 |
+
|
| 8 |
+
# ComfyUI Minimax H3 Latent Upscaler
|
| 9 |
+
|
| 10 |
+
**Neural Latent Upscaler for Minimax H3 Video Generation**
|
| 11 |
+
Learned · High-fidelity · 2D & 3D Variants
|
| 12 |
+
|
| 13 |
+
</div>
|
| 14 |
+
|
| 15 |
+
## 📰 News
|
| 16 |
+
|
| 17 |
+
- [2026-08-28] 🚀 **New node combo — MMH3 Split Upscale**: three new nodes (`MMH3 Temporal Split Params`, `MMH3 Spatial Split Params`, `MMH3 Split Upscale`) perform a tiled, hires-fix style latent re-sampling upscale for H3 video. Decomposed and optimized from the **Comfyui-MMH3-UltimateUpscale** project — splitting the AV latent into temporal chunks and spatial tiles, resampling each piece, and stitching with seam denoise, two-level color matching and temporal anchors. Key upgrades vs. original: more stable seams (`seam_denoise` + probe-gated seam polish), zero color drift (two-level matching + first-block/every-chunk pin-source), triple temporal anchors (frame-0/motion/identity), easier use (spatial params simplified to overlap/fade percentages snapping to the latent grid), and a lighter footprint (built-in upscale model removed in favor of an external pre-upscaled latent).
|
| 18 |
+
- [2026-08-26] 🚀 **3D node memory & UX optimizations**: zero-copy model loading plus ComfyUI's native `soft_empty_cache` and explicit `.contiguous()` calls reduce RAM/VRAM spikes during load and inference; the post-inference CPU offload is now an optional `force_unload` toggle (default on); `enable_chunking` is renamed to `enable_temporal_chunking` and its effective chunk stride raised from 24 to 32; model files can now live in subfolders (PR #30); `target dimensions` and `megapixels` upper limits raised to 8192 px and 16 MP.
|
| 19 |
+
- [2026-08-23] 🚀 **3D node improvements**: added an `enable_chunking` toggle (turn off for short clips to use full-context inference); fixed temporal-chunk edge artifacts with replicate padding and weighted overlap blending, eliminating end-frame flicker; added ROCm (AMD GPU) backend support via the new `rocm` device option.
|
| 20 |
+
- [2026-08-21] 🚀 **3D node optimization**: The model is automatically offloaded to CPU after execution to free VRAM for subsequent second-pass sampling; width and height are independently aligned to the align grid (default 32), fixing the bottom light band issue; normalization/denormalization is changed from in-place operations to standard operations; temporal chunking is retained to support long videos.
|
| 21 |
+
- [2026-08-19] 🚀 **3D node overhaul**: all three resize modes (`scale by multiplier`, `target dimensions`, `megapixels`) merged into a single node; fixed aspect-ratio mismatch in certain modes and edge artifacts at specific sizes; added a new example workflow and expanded the usage notes.
|
| 22 |
+
- [2026-08-18] 🔥 **Precision selector**: both 2D and 3D nodes now support `fp32` / `fp16` / `bf16` inference.
|
| 23 |
+
- [2026-08-17] 🎉 **Initial release**: Minimax H3 Latent Upscaler 2D + 3D nodes with bilingual README and inline examples.
|
| 24 |
+
|
| 25 |
+
A custom ComfyUI node that upscales **Minimax H3** VAE latents (24 channels) with a trained
|
| 26 |
+
neural network instead of naive interpolation. Its main purpose is to **accelerate
|
| 27 |
+
high-resolution video generation** and improve quality:
|
| 28 |
+
|
| 29 |
+
- **Skip the slow decode → pixel-upscale → encode round-trip.** Minimax H3 ships a heavy
|
| 30 |
+
~5B-parameter VAE, so decoding and re-encoding latents is expensive. Upscaling directly in
|
| 31 |
+
latent space avoids that costly round-trip entirely.
|
| 32 |
+
- **Enable a faster generation pipeline:** generate at low resolution (far fewer latent tokens),
|
| 33 |
+
upscale the latent with this node, then refine at the target resolution.
|
| 34 |
+
|
| 35 |
+
It also **avoids the ghosting / double-image artifacts** that naive latent interpolation
|
| 36 |
+
(bilinear/bicubic) introduces, and plays a role similar to the latent upscaler in **LTX2.3**.
|
| 37 |
+
|
| 38 |
+
⚠️ This saves **time, not VRAM** — the refinement pass still runs at the target resolution, so
|
| 39 |
+
peak memory is comparable to generating high-res directly. The win is purely speed.
|
| 40 |
+
|
| 41 |
+
Two node variants are provided, both registered under the `video/MinimaxH3` category:
|
| 42 |
+
|
| 43 |
+
- **Minimax H3 Latent Upscaler (2D)** — a 2D ResBlock backbone with Temporal 3D-Conv layers
|
| 44 |
+
inserted for temporal consistency. Spatial (H×W) upscaling; the time dimension is preserved.
|
| 45 |
+
Lightweight and fast. Uses a simple `scale` factor (1.0×–4.0×).
|
| 46 |
+
- **Minimax H3 Latent Upscaler (3D)** — a fully 3D-convolution backbone (3D ResBlocks +
|
| 47 |
+
TemporalConv + trilinear interpolation). Processes the spatiotemporal volume jointly for
|
| 48 |
+
stronger temporal coherence; heavier on compute/memory. Supports **three resize modes** in one
|
| 49 |
+
node:
|
| 50 |
+
- `scale by multiplier` — classic `scale` factor (1.0×–4.0×).
|
| 51 |
+
- `target dimensions` — directly set target pixel `width`/`height`.
|
| 52 |
+
- `megapixels` — set a target total pixel count in megapixels (e.g. `1.2`); keeps aspect ratio.
|
| 53 |
+
Both `target dimensions` and `megapixels` modes align the output to a configurable pixel grid and
|
| 54 |
+
derive the effective scale automatically.
|
| 55 |
+
|
| 56 |
+
> The 3D node computes the equivalent `scale` internally for the size-based modes and feeds it to
|
| 57 |
+
> the same trained model, so any target between 1.0×–4.0× works.
|
| 58 |
+
|
| 59 |
+
> Both nodes support **upscaling only** (`effective scale >= 1.0`). `scale = 1.0` returns the input
|
| 60 |
+
> unchanged; an effective scale below `1.0` raises an error.
|
| 61 |
+
|
| 62 |
+
### MMH3 Split Upscale (combo)
|
| 63 |
+
|
| 64 |
+
> **Origin:** this combo is a **decomposed and re-optimized version of the
|
| 65 |
+
> Comfyui-MMH3-UltimateUpscale project**. The original monolithic node was broken into three composable nodes (temporal split /
|
| 66 |
+
> spatial split / main upscaler), and the enhancements below were layered on top of the original tiling
|
| 67 |
+
> logic to improve seam stability, color consistency, temporal coherence, usability, and footprint.
|
| 68 |
+
|
| 69 |
+
A separate three-node combo that does a **tiled, hires-fix style re-sampling upscale** directly
|
| 70 |
+
inside the diffusion sampler — instead of a pre-trained upscaler network. It takes the H3 **AV
|
| 71 |
+
latent** (nested video 24ch + audio 32ch), splits it into **temporal chunks** and **spatial tiles**,
|
| 72 |
+
runs the sampler on each piece, then stitches them back seamlessly with seam-denoise, two-level color
|
| 73 |
+
matching and temporal anchors so seams and ghosting don't appear. The two `* Split Params` nodes
|
| 74 |
+
configure the splitting and feed the main `MMH3 Split Upscale` node (both optional — leave them
|
| 75 |
+
unconnected for a single full-frame pass). It requires a `model` + `conditioning` + `sampler`/`sigmas`,
|
| 76 |
+
i.e. it re-runs sampling at the higher resolution.
|
| 77 |
+
|
| 78 |
+
**Key enhancements vs. the original project:**
|
| 79 |
+
|
| 80 |
+
- **🧩 More stable seams (Seam / Ghosting):** a seam-neighborhood denoise cap (`seam_denoise`) plus a probe-gated second-pass seam polish (`seam_polish`) remove seams and ghosting; even under high denoise + fast motion, moving objects are no longer sliced ("broken limbs").
|
| 81 |
+
- **🎨 Zero color drift (Color Zero-Drift):** spatial + temporal two-level color matching, with a global color reference pinned to the **first block** and to **every chunk** (`grade_pin`) — eliminates inter-tile flicker and the localized cyan/green tint (e.g. top-left corner).
|
| 82 |
+
- **⏱️ Stronger temporal continuity:** a **triple temporal anchor** — `frame-0 anchor` + `motion anchor` + `identity anchor` — automatically backs up identity consistency under high denoise, so subjects don't drift.
|
| 83 |
+
- **🖱️ Easier to use:** spatial parameters cut from 9 fields down to **percentages** (overlap ratio / fade ratio) that auto-snap to the latent grid; `negative` sits right next to `conditioning` for a more intuitive layout.
|
| 84 |
+
- **🪶 Lighter footprint:** the built-in upscale model was removed in favor of an **external pre-upscaled latent** input — more controllable VRAM, and a node that stays focused on its job.
|
| 85 |
+
|
| 86 |
+
**Modules added / optimized (relative to the original project):**
|
| 87 |
+
|
| 88 |
+
| Module | What it adds / optimizes |
|
| 89 |
+
| :--- | :--- |
|
| 90 |
+
| **Prevention (预防)** | Freeze-prefill overlap band + **triple temporal anchors** (frame-0 anchor + motion anchor + identity anchor) + cross-fade stitching — stops seams and forks from forming in the first place. |
|
| 91 |
+
| **Correction (校正)** | **Two-level (spatial + temporal) color matching** + first-block source reference + per-chunk global pin-source (`grade_pin`) — keeps color & brightness consistent across tiles and chunks, killing inter-tile flicker and localized cyan/green tint. |
|
| 92 |
+
| **Anti-forking (抗分叉)** | `seam_denoise` cap — under high denoise + fast motion, the seam neighborhood is re-sampled at *medium* denoise so moving objects aren't sliced ("broken limbs"); combined with the probe-gated second-pass seam polish, seams and ghosting are both eliminated (suggested 0.5–0.8; 1.0 = off). |
|
| 93 |
+
| **Fixes (修复)** | **Per-tile independent Guider** + cropped keyframes, and a **fixed probe-gated seam polish** (`seam_polish`) — each tile gets correctly-scoped conditioning/keyframes, and the polish gating no longer over/under-applies. |
|
| 94 |
+
| **Simplification (简化)** | `overlap` / `fade` are now **percentage parameters** (overlap ratio / fade ratio, resolution-independent) instead of absolute pixels, and auto-snap to the latent grid; `negative` sits next to `conditioning` for a more intuitive layout. |
|
| 95 |
+
|
| 96 |
+
---
|
| 97 |
+
|
| 98 |
+
## 📸 Examples
|
| 99 |
+
|
| 100 |
+
**Video upscale comparison**
|
| 101 |
+
|
| 102 |
+
<video src="examples/Minimax_h3_latent_Upscaler_001.mp4" controls width="640"></video>
|
| 103 |
+
|
| 104 |
+
**Image upscale comparison**
|
| 105 |
+
|
| 106 |
+

|
| 107 |
+
|
| 108 |
+
---
|
| 109 |
+
|
| 110 |
+
## 📁 Project Structure
|
| 111 |
+
|
| 112 |
+
```text
|
| 113 |
+
Comfyui_Minimax_h3_latent_Upscaler/
|
| 114 |
+
├── examples/
|
| 115 |
+
│ ├── Minimax_h3_latent_Upscaler_001.mp4
|
| 116 |
+
│ └── Minimax_h3_latent_Upscaler_002.jpg
|
| 117 |
+
├── workflow_templates/
|
| 118 |
+
│ └── minimax_h3_r2v_Latent Upscaler example workflow.json # example workflow for ComfyUI templates
|
| 119 |
+
├── nodes/
|
| 120 |
+
│ ├── __init__.py # merges 2D/3D/Split node mappings
|
| 121 |
+
│ ├── minimax_h3_latent_upscaler_2d.py # 2D backbone + Temporal 3D Conv (scale mode)
|
| 122 |
+
│ ├── minimax_h3_latent_upscaler_3d.py # pure 3D convolution with 3 resize modes
|
| 123 |
+
│ └── MMH3_Split_Upscale.py # MMH3 Split Upscale combo (decomposed from Comfyui-MMH3-UltimateUpscale)
|
| 124 |
+
├── README.md
|
| 125 |
+
├── README_zh.md
|
| 126 |
+
└── __init__.py
|
| 127 |
+
```
|
| 128 |
+
|
| 129 |
+
> The model weights are **not** included in this repo. Place them in your ComfyUI models folder
|
| 130 |
+
> (see Model Placement below).
|
| 131 |
+
|
| 132 |
+
---
|
| 133 |
+
|
| 134 |
+
## 🚀 Key Features
|
| 135 |
+
|
| 136 |
+
- ✅ **Learned latent upscaling** — neural network trained for Minimax H3 latents, far sharper
|
| 137 |
+
than bilinear/bicubic interpolation.
|
| 138 |
+
- ✅ **Two backbones** — pick the fast **2D** variant or the temporally-coherent **3D** variant.
|
| 139 |
+
- ✅ **Three ways to set output size on the 3D node** — `scale by multiplier`, `target dimensions`,
|
| 140 |
+
or `megapixels`, all with pixel-grid alignment and aspect-ratio lock.
|
| 141 |
+
- ✅ **Tiled hires-fix upscaler (MMH3 Split Upscale combo)** — re-sample the H3 AV latent at higher
|
| 142 |
+
resolution by splitting into temporal chunks + spatial tiles, with seam-denoise, two-level color
|
| 143 |
+
matching and temporal anchors to avoid seams and ghosting.
|
| 144 |
+
- ✅ **24-channel Minimax H3 latent** — uses the exact per-channel mean/std normalization from
|
| 145 |
+
training.
|
| 146 |
+
- ✅ **Auto architecture detection** — reads `in_channels`, block counts, temporal config and
|
| 147 |
+
kernel size straight from the checkpoint; no manual config needed.
|
| 148 |
+
- ✅ **Robust weight loader** — supports `.safetensors` and `.pth`; auto-converts FP8→FP16;
|
| 149 |
+
tolerates the `upscaler.` prefix in merged checkpoints.
|
| 150 |
+
- ✅ **Flexible precision/device** — `cuda`/`cpu` and fp32/fp16/bf16 options.
|
| 151 |
+
- ✅ **Plug-and-play** — standard ComfyUI node, no changes to your existing workflow.
|
| 152 |
+
|
| 153 |
+
Inference forces attention **off** (`attn=False`) for speed and stability. Loaded models are
|
| 154 |
+
cached by `(name, device, precision)` so repeated runs stay cheap.
|
| 155 |
+
|
| 156 |
+
---
|
| 157 |
+
|
| 158 |
+
## 📦 Installation
|
| 159 |
+
|
| 160 |
+
1. Clone this repository into ComfyUI's `custom_nodes` folder:
|
| 161 |
+
|
| 162 |
+
```bash
|
| 163 |
+
cd ComfyUI/custom_nodes
|
| 164 |
+
git clone https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler.git
|
| 165 |
+
```
|
| 166 |
+
|
| 167 |
+
2. Required dependencies (`torch`, `einops`, `safetensors`) are already present in a standard
|
| 168 |
+
ComfyUI environment — no extra install needed.
|
| 169 |
+
|
| 170 |
+
3. Restart ComfyUI.
|
| 171 |
+
|
| 172 |
+
---
|
| 173 |
+
|
| 174 |
+
## 🤖 Model Placement
|
| 175 |
+
|
| 176 |
+
The nodes scan and load weights from:
|
| 177 |
+
|
| 178 |
+
```text
|
| 179 |
+
ComfyUI/models/latent_upscale_models/
|
| 180 |
+
```
|
| 181 |
+
|
| 182 |
+
Put your Minimax H3 latent upscaler checkpoint (`.safetensors` or `.pth`) there. It will appear
|
| 183 |
+
automatically in the node's `model_name` dropdown.
|
| 184 |
+
|
| 185 |
+
Pre-trained checkpoints are available at:
|
| 186 |
+
[huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler)
|
| 187 |
+
|
| 188 |
+
The loader auto-detects the architecture, so a single checkpoint works for both the 2D and 3D
|
| 189 |
+
nodes as long as the stored structure matches.
|
| 190 |
+
|
| 191 |
+
---
|
| 192 |
+
|
| 193 |
+
## 🧩 Usage
|
| 194 |
+
|
| 195 |
+
Add the node you need from the `video/MinimaxH3` menu, connect a `LATENT`, pick the model, set the
|
| 196 |
+
resize mode / scale, and decode.
|
| 197 |
+
|
| 198 |
+
**Typical workflow:**
|
| 199 |
+
- **Quick preview:** `[Minimax H3 Latent] → [H3 Latent Upscaler] → [VAE Decode]`
|
| 200 |
+
- **High quality / time-saving (recommended):** `[Low-res Latent] → [H3 Latent Upscaler] → [Refine / Re-sample] → [VAE Decode]`
|
| 201 |
+
|
| 202 |
+
Compared to the naive approach `[Latent] → [VAE Decode] → [Pixel Upscaler] → [VAE Encode] → …`,
|
| 203 |
+
upscaling directly in latent space skips the expensive VAE decode/encode round-trip. Minimax H3's
|
| 204 |
+
~5B-parameter VAE makes decode and re-encode notably slow, so this is where most of the time is
|
| 205 |
+
saved. It also avoids the **ghosting / double-image artifacts** that direct latent interpolation
|
| 206 |
+
(bilinear/bicubic) causes.
|
| 207 |
+
|
| 208 |
+
⚠️ **Saves time, not VRAM:** the refinement still runs at the target resolution, so peak memory is
|
| 209 |
+
roughly the same as generating high-res directly. The benefit is purely faster turnaround.
|
| 210 |
+
|
| 211 |
+
### Node Reference — 2D
|
| 212 |
+
|
| 213 |
+
| Parameter | Type | Default | Range / Options | Description |
|
| 214 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 215 |
+
| `latent` | LATENT | — | — | Input Minimax H3 latent (B,C,T,H,W) or (B,C,H,W) |
|
| 216 |
+
| `model_name` | dropdown | auto | scanned files | Checkpoint in `latent_upscale_models/` |
|
| 217 |
+
| `scale` | FLOAT | 2.0 | 1.0 – 4.0 (step 0.1) | Spatial upscale factor |
|
| 218 |
+
| `device` | dropdown | cuda | cuda / cpu | Inference device |
|
| 219 |
+
| `precision` | dropdown | fp32 | fp32 / fp16 / bf16 | Inference precision |
|
| 220 |
+
|
| 221 |
+
**Output:** `LATENT` — the upscaled latent, ready for VAE decode.
|
| 222 |
+
|
| 223 |
+
### Node Reference — 3D
|
| 224 |
+
|
| 225 |
+
| Parameter | Type | Default | Range / Options | Description |
|
| 226 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 227 |
+
| `latent` | LATENT | — | — | Input Minimax H3 latent (B,C,T,H,W) or (B,C,H,W) |
|
| 228 |
+
| `model_name` | dropdown | auto | scanned files | Checkpoint in `latent_upscale_models/` |
|
| 229 |
+
| `mode` | dropdown | `scale by multiplier` | `scale by multiplier` / `target dimensions` / `megapixels` | How the output size is chosen |
|
| 230 |
+
| `scale` | FLOAT | 2.0 | 1.0 – 4.0 (step 0.05) | Used when `mode` is `scale by multiplier` |
|
| 231 |
+
| `width` | INT | 1280 | 64 – 8192 (step 8) | Target pixel width (used by `target dimensions`) |
|
| 232 |
+
| `height` | INT | 704 | 64 – 8192 (step 8) | Target pixel height (used by `target dimensions`) |
|
| 233 |
+
| `megapixels` | FLOAT | 1.0 | 0.1 – 16.0 (step 0.1) | Target total megapixels (used by `megapixels`); keeps aspect ratio |
|
| 234 |
+
| `align` | INT | 32 | 1 – 512 | Pixel-grid alignment: output W/H are independently rounded to multiples of this value (e.g. 16/32/64) |
|
| 235 |
+
| `enable_temporal_chunking` | BOOLEAN | True | True / False | Split long videos into temporal chunks to cap VRAM; disable for short clips for full-context inference |
|
| 236 |
+
| `force_unload` | BOOLEAN | True | True / False | Unload model to CPU after inference to free VRAM for subsequent nodes; disable if you reuse this node repeatedly to avoid reload overhead |
|
| 237 |
+
| `device` | dropdown | cuda | cuda / rocm / cpu | Inference backend (ROCm needs a HIP-enabled PyTorch build) |
|
| 238 |
+
| `precision` | dropdown | fp32 | fp32 / fp16 / bf16 | Inference precision |
|
| 239 |
+
|
| 240 |
+
**Output:** `LATENT` — the upscaled latent.
|
| 241 |
+
|
| 242 |
+
> **Which node to pick?** Use **2D** for speed and when frames are already temporally stable; use
|
| 243 |
+
> **3D** when you need stronger motion/temporal coherence or prefer specifying output size by
|
| 244 |
+
> `target dimensions` / `megapixels`.
|
| 245 |
+
|
| 246 |
+
### Node Reference — MMH3 Split Upscale (combo)
|
| 247 |
+
|
| 248 |
+
A tiled, **hires-fix style** re-sampling upscaler for H3 video, **decomposed and optimized from the
|
| 249 |
+
Comfyui-MMH3-UltimateUpscale project**. Unlike the 2D/3D nodes (which use a
|
| 250 |
+
pre-trained upscaler network), this combo re-runs the diffusion sampler on a higher-resolution
|
| 251 |
+
version of the latent, split into pieces so it fits in VRAM. It operates on the H3 **AV latent**
|
| 252 |
+
(nested video 24ch + audio 32ch) and requires `model` + `conditioning` + `sampler`/`sigmas`.
|
| 253 |
+
|
| 254 |
+
**`MMH3 Temporal Split Params`** — how to cut the clip along time (H3's native 5+17·m frame/token grid):
|
| 255 |
+
|
| 256 |
+
| Parameter | Type | Default | Range / Options | Description |
|
| 257 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 258 |
+
| `chunk_frames` | INT | 73 | 5 – 100000 | Chunk length in frames (snapped to H3 token grid) |
|
| 259 |
+
| `temporal_overlap_frames` | INT | 22 | 0 – 100000 | Overlap between consecutive chunks |
|
| 260 |
+
| `anchor_strength` | FLOAT | 0.999 | 0.0 – 1.0 | Temporal anchor strength |
|
| 261 |
+
| `motion_anchor_frames` | dropdown | 22 | 0 / 5 / 22 / 39 | Motion anchor length in frames |
|
| 262 |
+
| `identity_anchor_frames` | INT | 24 | 0 – 240 | Spacing of identity anchors |
|
| 263 |
+
|
| 264 |
+
Output: `temporal_split_param` (custom type, feeds the main node).
|
| 265 |
+
|
| 266 |
+
**`MMH3 Spatial Split Params`** — how to cut each frame into tiles:
|
| 267 |
+
|
| 268 |
+
| Parameter | Type | Default | Range / Options | Description |
|
| 269 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 270 |
+
| `tile_width` | INT | 512 | 64 – 16384 (step 32) | Tile width in pixels |
|
| 271 |
+
| `tile_height` | INT | 512 | 64 – 16384 (step 32) | Tile height in pixels |
|
| 272 |
+
| `overlap_ratio` | FLOAT | 0.25 | 0.0 – 0.90 | Overlap as a fraction of the tile |
|
| 273 |
+
| `fade_ratio` | FLOAT | 0.50 | 0.0 – 1.0 | Fade band width within the overlap |
|
| 274 |
+
| `min_tile_size` | INT | 256 | 0 – 16384 (step 32) | Minimum tile edge; avoids tiny edge tiles |
|
| 275 |
+
| `seam_denoise` | FLOAT | 1.0 | 0.1 – 1.0 | Seam-neighborhood denoise cap; <1 prevents fast objects being cut at seams (suggest 0.5–0.8) |
|
| 276 |
+
|
| 277 |
+
Outputs: `spatial_split_param` (custom type) + `grid_preview` (string, shows the computed tile/overlap grid).
|
| 278 |
+
|
| 279 |
+
**`MMH3 Split Upscale`** — the main orchestrator:
|
| 280 |
+
|
| 281 |
+
| Parameter | Type | Default | Range / Options | Description |
|
| 282 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 283 |
+
| `model` | MODEL | — | — | Diffusion model used for re-sampling |
|
| 284 |
+
| `conditioning` | CONDITIONING | — | — | Positive conditioning |
|
| 285 |
+
| `negative` | CONDITIONING | — | optional | Negative conditioning |
|
| 286 |
+
| `latent` | LATENT | — | — | Input H3 AV latent (nested video 24ch + audio 32ch); batch 1 only |
|
| 287 |
+
| `noise` | NOISE | — | — | Noise source for the sampler |
|
| 288 |
+
| `sampler` | SAMPLER | — | — | Sampler |
|
| 289 |
+
| `sigmas` | SIGMAS | — | — | Sigma schedule |
|
| 290 |
+
| `cfg` | FLOAT | 1.0 | 0.0 – 100.0 | Classifier-free guidance scale |
|
| 291 |
+
| `temporal_split_param` | custom | — | optional | From `MMH3 Temporal Split Params` |
|
| 292 |
+
| `spatial_split_param` | custom | — | optional | From `MMH3 Spatial Split Params` |
|
| 293 |
+
| `seam_polish` | dropdown | off | off / auto / all | Extra de-seam pass on detected seams |
|
| 294 |
+
| `color_match` | BOOLEAN | True | True / False | Two-level color matching across tiles/chunks |
|
| 295 |
+
|
| 296 |
+
**Output:** `LATENT` — the upscaled H3 AV latent, ready for VAE decode.
|
| 297 |
+
|
| 298 |
+
> **Notes:** Both `* Split Params` nodes are optional — leave them unconnected for a single
|
| 299 |
+
> full-frame pass (no temporal/spatial splitting). The combo re-runs the sampler at the higher
|
| 300 |
+
> resolution, so it trades extra compute for VRAM headroom on long / high-res clips.
|
| 301 |
+
|
| 302 |
+
---
|
| 303 |
+
|
| 304 |
+
## 🧪 Model / Architecture
|
| 305 |
+
|
| 306 |
+
- **Latent format:** 24-channel Minimax H3 VAE latent, normalized per-channel with the training
|
| 307 |
+
mean/std before inference and de-normalized after.
|
| 308 |
+
- **Default detected architecture** (overridden automatically if the checkpoint differs):
|
| 309 |
+
`in_channels=24`, `in_blocks=12`, `out_blocks=12`, `base_channels=512`, `dropout=0.1`,
|
| 310 |
+
`temporal_every=2`, `temporal_kernel=5`, `attn=False`.
|
| 311 |
+
- **Interpolation:** the 2D node uses bilinear feature interpolation; the 3D node uses trilinear.
|
| 312 |
+
- **Temporal handling:** both variants preserve the time dimension (only H×W are scaled).
|
| 313 |
+
|
| 314 |
+
---
|
| 315 |
+
|
| 316 |
+
## 📊 Training Data
|
| 317 |
+
|
| 318 |
+
The upscaler was trained on **~80,000 paired samples** (a low-resolution latent paired with its
|
| 319 |
+
high-resolution target), balanced across modalities and scale factors to maximize generalization.
|
| 320 |
+
|
| 321 |
+
**By data modality:**
|
| 322 |
+
|
| 323 |
+
| Modality | Pairs | Share |
|
| 324 |
+
| :--- | :--- | :--- |
|
| 325 |
+
| Video clips | ~70,000 | ~87.5% |
|
| 326 |
+
| 2K images | ~8,000 | ~10% |
|
| 327 |
+
|
| 328 |
+
**By upscale factor (scale distribution, approximate):**
|
| 329 |
+
|
| 330 |
+
| Scale | Share | Note |
|
| 331 |
+
| :--- | :--- | :--- |
|
| 332 |
+
| 2× | 40% | Dominant factor — the most common real-world case |
|
| 333 |
+
| 1.5× | 10% | — |
|
| 334 |
+
| 2.5× | 10% | — |
|
| 335 |
+
| 3× | 10% | — |
|
| 336 |
+
| 4× | 10% | — |
|
| 337 |
+
| 1.0×–4.0× (arbitrary decimals) | 10% | Improves generalization to in-between / non-fixed scales |
|
| 338 |
+
|
| 339 |
+
The heavy emphasis on **2× (40%)** matches the most common practical use case, while the **10% spread
|
| 340 |
+
of arbitrary decimal scales between 1 and 4** prevents overfitting to the fixed 1.5×/2×/2.5×/3×/4×
|
| 341 |
+
buckets — letting the model handle any continuous `scale` in the 1.0×–4.0× range at inference time.
|
| 342 |
+
|
| 343 |
+
---
|
| 344 |
+
|
| 345 |
+
## 🙏 Acknowledgments
|
| 346 |
+
|
| 347 |
+
This node follows the neural-latent-upscaling approach pioneered by
|
| 348 |
+
[ComfyUi_NNLatentUpscale](https://github.com/Ttl/ComfyUi_NNLatentUpscale) by **Ttl**
|
| 349 |
+
(https://github.com/Ttl). The model architecture also draws on and references the
|
| 350 |
+
**LTX 2.3 Spatial Upscaler** (`ltx-2.3-spatial-upscaler-x2-1.1.safetensors`).
|
| 351 |
+
Thanks to both projects for the open-source foundation this work builds upon.
|
Comfyui_Minimax_h3_latent_Upscaler/README_zh.md
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<p align="center">
|
| 2 |
+
<a href="./README.md">English</a> ·
|
| 3 |
+
<a href="./README_zh.md"><strong>中文</strong></a>
|
| 4 |
+
</p>
|
| 5 |
+
|
| 6 |
+
<div align="center">
|
| 7 |
+
|
| 8 |
+
# ComfyUI Minimax H3 Latent Upscaler
|
| 9 |
+
|
| 10 |
+
**Minimax H3 视频生成专用 Latent 神经网络放大节点**
|
| 11 |
+
学习型 · 高保真 · 2D 与 3D 双版本
|
| 12 |
+
|
| 13 |
+
</div>
|
| 14 |
+
|
| 15 |
+
## 📰 更新动态
|
| 16 |
+
|
| 17 |
+
- [2026-08-28] 🚀 **新增组合节点 — MMH3 Split Upscale**:新增三个节点(`MMH3 Temporal Split Params`、`MMH3 Spatial Split Params`、`MMH3 Split Upscale`),对 H3 视频做**分块式「高清重采样」放大**。该组合是在 **Comfyui-MMH3-UltimateUpscale** 项目基础上拆解优化而来——把 AV latent 沿时间切块、沿空间分块,逐块重采样后再无缝拼接;相比原版主要增强:更稳的拼接(`seam_denoise` + probe 门控二道缝修补)、颜色零漂移(空间+时间两级颜色匹配 + 首块/每 chunk 钉源)、三重时间锚(frame-0 / motion / identity)、更易用(空间参数简化为重叠率/渐变率百分比并自动吸附网格)、更轻量(移除内置放大模型,改接外部预放大 latent)。
|
| 18 |
+
- [2026-08-26] 🚀 **3D 节点显存与使用优化**:采用零拷贝模型加载,并接入 ComfyUI 原生 `soft_empty_cache` 与显式 `.contiguous()`,降低加载与推理期间的显存/内存峰值;推理后卸载到 CPU 改为可选开关 `force_unload`(默认开启);`enable_chunking` 更名为 `enable_temporal_chunking`,分块有效帧数由 24 提升至 32;模型文件现可放入子目录(PR #30);`target dimensions` 与 `megapixels` 上限分别放宽到 8192 像素与 16 MP。
|
| 19 |
+
- [2026-08-23] 🚀 **3D 节点改进**:新增 `enable_chunking` 开关(短片段可关闭,使用全上下文推理);修复时间分块边缘伪影——采用 Replicate Padding 与重叠区域加权融合,消除末尾帧闪烁;新增 ROCm(AMD 显卡)后端支持,设备选项新增 `rocm`。
|
| 20 |
+
- [2026-08-21] 🚀 **3D 节点优化**:节点执行后自动将模型卸载到 CPU,为后续二次采样释放显存;宽高分别独立对齐到 `align` 网格(默认 32),修复底部光带问题;归一化/反归一化由原地操作改为标准运算,保留时间分块以支持长视频。
|
| 21 |
+
- [2026-08-19] 🚀 **3D 节点重构**:三种缩放模式(`scale by multiplier`、`target dimensions`、`megapixels`)合并进单一节点;修复特定模式下造成的比例不统一,修复各类特定尺寸造成的边缘伪影;新增示例工作流供参考。
|
| 22 |
+
- [2026-08-18] 🔥 **精度选择**:2D / 3D 节点均支持 `fp32` / `fp16` / `bf16` 推理。
|
| 23 |
+
- [2026-08-17] 🎉 **初始发布**:Minimax H3 Latent Upscaler 2D + 3D 双节点、双语 README、内联示例。
|
| 24 |
+
|
| 25 |
+
一个 ComfyUI 自定义节点,用训练好的神经网络(而非简单插值)对 **Minimax H3** 的 VAE latent
|
| 26 |
+
(24 通道)进行放大。它的**主要目的是加速高分辨率视频的生成**,并提升画质:
|
| 27 |
+
|
| 28 |
+
- **跳过「解码 → 像素放大 → 再编码」的慢速往返。** Minimax H3 自带约 5B 参数的笨重 VAE,
|
| 29 |
+
对 latent 做解码和再编码都很耗时;直接在 latent 空间放大,就彻底省掉了这一往返开销。
|
| 30 |
+
- **支持更快的生成流程:** 先低分辨率生成(latent token 少得多),用本节点放大 latent,再在
|
| 31 |
+
目标分辨率下二次采样 / 重绘精修。
|
| 32 |
+
|
| 33 |
+
同时,它**避免了直接对 latent 插值(双线性/双三次)带来的鬼影、重影问题**,作用类似于
|
| 34 |
+
**LTX2.3** 中的 latent 放大模型。
|
| 35 |
+
|
| 36 |
+
⚠️ 它节省的是**时间,不是显存** —— 精修阶段仍在目标分辨率下运行,峰值显存与直接高清生成接近,
|
| 37 |
+
收益纯粹是更快出片。
|
| 38 |
+
|
| 39 |
+
提供两个节点变体,均注册在 `video/MinimaxH3` 分类下:
|
| 40 |
+
|
| 41 |
+
- **Minimax H3 Latent Upscaler (2D)**:2D 残差主干 + 穿插的时序 3D 卷积,仅做空间(H×W)放大,
|
| 42 |
+
时间维度保持不变,轻量且快速。使用简单的 `scale` 倍数(1.0×–4.0×)。
|
| 43 |
+
- **Minimax H3 Latent Upscaler (3D)**:纯 3D 卷积主干(3D 残差块 + 时序卷积 + 三线性插值),
|
| 44 |
+
联合处理时空体,时间一致性更强,但算力/显存开销更高。一个节点内置**三种缩放模式**:
|
| 45 |
+
- `scale by multiplier`:经典 `scale` 倍数(1.0×–4.0×)。
|
| 46 |
+
- `target dimensions`:直接填目标像素 `width` / `height`。
|
| 47 |
+
- `megapixels`:填目标总像素(百万像素,例如 `1.2`),保持原宽高比。
|
| 48 |
+
`target dimensions` 与 `megapixels` 两种模式会按可配置的像素网格对齐输出,并自动反推等效倍率。
|
| 49 |
+
|
| 50 |
+
> 3D 节点在尺寸模式下会在内部计算出等效 `scale` 并喂给同一个训练好的模型,因此 1.0×–4.0× 之间
|
| 51 |
+
> 任意目标都能用。
|
| 52 |
+
|
| 53 |
+
> 两个节点均**只支持放大**(等效 `scale >= 1.0`)。`scale = 1.0` 返回输入原样;等效倍率小于 1.0 会报错。
|
| 54 |
+
|
| 55 |
+
### MMH3 Split Upscale(组合节点)
|
| 56 |
+
|
| 57 |
+
> **来源:** 该组合是在 **Comfyui-MMH3-UltimateUpscale** 项目���础上**拆解优化**而来。原本的单节点被拆成三个可组合节点(时间切分 / 空间切分 / 主放大),
|
| 58 |
+
> 并在原有分块逻辑之上,针对拼接稳定性、色彩一致性、时间连续性、易用性与轻量化做了系统性增强。
|
| 59 |
+
|
| 60 |
+
一套独立的**三节点组合**,在扩散采样器内部做**分块式「高清重采样」放大**(而非用预训练放大网络)。
|
| 61 |
+
它接收 H3 的 **AV latent**(嵌套:视频 24 通道 + 音频 32 通道),沿**时间切块**、沿**空间分块**,
|
| 62 |
+
对每一块单独跑采样器,再用缝降噪、两级颜色匹配与时间锚点把结果**无缝拼接**回去,避免出现接缝和鬼影。
|
| 63 |
+
两个 `* Split Params` 节点负责配置切分方式,并喂给主节点 `MMH3 Split Upscale`(两者均可选——
|
| 64 |
+
不连接即为整段/整帧单次处理)。它需要 `model` + `conditioning` + `sampler`/`sigmas`,即会在更高
|
| 65 |
+
分辨率上重新跑一遍采样。
|
| 66 |
+
|
| 67 |
+
**相比原版主要增强(拆解优化点):**
|
| 68 |
+
|
| 69 |
+
- **🔧 更稳的拼接(Seam / Ghosting)**:缝邻域降噪上限(`seam_denoise`)+ probe 门控的**二道缝修补**(`seam_polish`),消除接缝与鬼影;在高降噪 + 快速运动下,运动物体也不再被切断("断肢")。
|
| 70 |
+
- **🎨 颜色零漂移(Color Zero-Drift)**:**空间 + 时间两级颜色匹配**,并对**首块**与**每个 chunk** 做全局色基准钉源(`grade_pin`),彻底解决块间闪烁、左上角发青等问题。
|
| 71 |
+
- **⏱️ 更强的时间连续性(Temporal Continuity)**:`frame-0 锚` + `motion 锚` + `identity 锚` **三重时间锚**,高降噪时自动兜底身份一致性,人物不漂移。
|
| 72 |
+
- **🧩 更易用(Usability)**:空间参数由原本的 9 项精简为**百分比**(重叠率 / 渐变率),并自动吸附 latent 网格;`negative` 紧跟 `conditioning` 布局,连线更直观。
|
| 73 |
+
- **🪶 更轻量(Lightweight)**:移除内置放大模型,改接**外部预放大 latent**,显存更可控、节点更专注。
|
| 74 |
+
|
| 75 |
+
**新增 / 优化的模块(相对于原项目):**
|
| 76 |
+
|
| 77 |
+
| 模块 | 新增 / 优化的内容 |
|
| 78 |
+
| :--- | :--- |
|
| 79 |
+
| **预防(Prevention)** | 冻结预填重叠带 + **三重时间锚**(frame-0 锚 + motion 锚 + identity 锚)+ cross-fade 拼接——让接缝与分叉在生成之初就不出现。 |
|
| 80 |
+
| **校正(Correction)** | **空间/时间两级颜色匹配** + 首块源参考 + 每块(chunk)全局钉源(`grade_pin`)——保证各瓦片、各时间块之间的色彩与亮度一致,杜绝块间闪烁与局部发青。 |
|
| 81 |
+
| **抗分叉(Anti-forking)** | `seam_denoise` 上限——在高降噪 + 快速运动下,缝邻域以*中等*降噪续写邻居内容,防止运动物体被切断("断肢");配合 probe 门控的二道缝修补,接缝与鬼影一并消除(建议 0.5–0.8;1.0 = 关闭)。 |
|
| 82 |
+
| **修复(Fixes)** | **每瓦片独立 Guider** + 裁剪 keyframes,以及**修复版 probe 门控去缝**(`seam_polish`)——每个瓦片获得正确作用域的条件/关键帧,去缝门控不再过度或不足。 |
|
| 83 |
+
| **简化(Simplification)** | `overlap` / `fade` 改为**百分比参数**(重叠率 / 渐变率,与分辨率无关),替代原来的绝对像素值,并自动吸附 latent 网格;`negative` 紧跟 `conditioning`,布局更直观。 |
|
| 84 |
+
|
| 85 |
+
---
|
| 86 |
+
|
| 87 |
+
## 📸 示例
|
| 88 |
+
|
| 89 |
+
**视频放大对比**
|
| 90 |
+
|
| 91 |
+
<video src="examples/Minimax_h3_latent_Upscaler_001.mp4" controls width="640"></video>
|
| 92 |
+
|
| 93 |
+
**图像放大对比**
|
| 94 |
+
|
| 95 |
+

|
| 96 |
+
|
| 97 |
+
---
|
| 98 |
+
|
| 99 |
+
## 📁 项目结构
|
| 100 |
+
|
| 101 |
+
```text
|
| 102 |
+
Comfyui_Minimax_h3_latent_Upscaler/
|
| 103 |
+
├── examples/
|
| 104 |
+
│ ├── Minimax_h3_latent_Upscaler_001.mp4
|
| 105 |
+
│ └── Minimax_h3_latent_Upscaler_002.jpg
|
| 106 |
+
├── workflow_templates/
|
| 107 |
+
│ └── minimax_h3_r2v_Latent Upscaler example workflow.json # ComfyUI 模板示例工作流
|
| 108 |
+
├── nodes/
|
| 109 |
+
│ ├── __init__.py # 合并 2D/3D/组合节点映射
|
| 110 |
+
│ ├── minimax_h3_latent_upscaler_2d.py # 2D 主干 + Temporal 3D Conv(倍数模式)
|
| 111 |
+
│ ├── minimax_h3_latent_upscaler_3d.py # 纯 3D 卷积,支持 3 种缩放模式
|
| 112 |
+
│ └── MMH3_Split_Upscale.py # MMH3 Split Upscale 组合(基于 Comfyui-MMH3-UltimateUpscale 拆解优化)
|
| 113 |
+
├── README.md
|
| 114 |
+
├── README_zh.md
|
| 115 |
+
└── __init__.py
|
| 116 |
+
```
|
| 117 |
+
|
| 118 |
+
> 模型权重**不**随仓库提供,请按下方「模型放置」说明放入 ComfyUI 模型目录。
|
| 119 |
+
|
| 120 |
+
---
|
| 121 |
+
|
| 122 |
+
## 🚀 核心特性
|
| 123 |
+
|
| 124 |
+
- ✅ **学习型 latent 放大** — 针对 Minimax H3 latent 训练的神经网络,比双线性/双三次插值清晰得多。
|
| 125 |
+
- ✅ **两种主干** — 追求速度选轻量的 **2D** 版,追求时间一致性选 **3D** 版。
|
| 126 |
+
- ✅ **3D 节点三种输出尺寸方式** — 支持 `scale by multiplier` / `target dimensions` /
|
| 127 |
+
`megapixels`,均带像素网格对齐与宽高比锁定。
|
| 128 |
+
- ✅ **分块式高清重采样(MMH3 Split Upscale 组合)** — 把 H3 的 AV latent 沿时间切块 + 空间分块,
|
| 129 |
+
在更高分辨率上重采样,配合缝降噪、两级颜色匹配与时间锚点,避免接缝与鬼影。
|
| 130 |
+
- ✅ **24 通道 Minimax H3 latent** — 使用训练时一致的逐通道均值/标准差做归一化。
|
| 131 |
+
- ✅ **自动识别模型结构** — 直接从权重读取通道数、块数、时序配置与卷积核大小,无需手动配置。
|
| 132 |
+
- ✅ **鲁棒的权重加载器** — 支持 `.safetensors` 与 `.pth`;自动 FP8→FP16;兼容合并权重中的
|
| 133 |
+
`upscaler.` 前缀。
|
| 134 |
+
- ✅ **可选精度与设备** — `cuda`/`cpu` 与 fp32/fp16/bf16 选项。
|
| 135 |
+
- ✅ **即插即用** — 标准 ComfyUI 节点,不改变现有工作流。
|
| 136 |
+
|
| 137 |
+
推理时强制关闭注意力(`attn=False`)以提升速度与稳定性;已加载模型按 `(名称, 设备, 精度)`
|
| 138 |
+
缓存,重复调用开销很低。
|
| 139 |
+
|
| 140 |
+
---
|
| 141 |
+
|
| 142 |
+
## 📦 安装
|
| 143 |
+
|
| 144 |
+
1. 将仓库克隆到 ComfyUI 的 `custom_nodes` 文件夹:
|
| 145 |
+
|
| 146 |
+
```bash
|
| 147 |
+
cd ComfyUI/custom_nodes
|
| 148 |
+
git clone https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler.git
|
| 149 |
+
```
|
| 150 |
+
|
| 151 |
+
2. 所需依赖(`torch`、`einops`、`safetensors`)在标准 ComfyUI 环境中已自带,无需额外安装。
|
| 152 |
+
|
| 153 |
+
3. 重启 ComfyUI。
|
| 154 |
+
|
| 155 |
+
---
|
| 156 |
+
|
| 157 |
+
## 🤖 模型放置
|
| 158 |
+
|
| 159 |
+
节点从这里扫描并加载权重:
|
| 160 |
+
|
| 161 |
+
```text
|
| 162 |
+
ComfyUI/models/latent_upscale_models/
|
| 163 |
+
```
|
| 164 |
+
|
| 165 |
+
把你的 Minimax H3 latent 放大模型权重(`.safetensors` 或 `.pth`)放进该目录,节点下拉框会自动列出。
|
| 166 |
+
|
| 167 |
+
预训练权重可在此下载:
|
| 168 |
+
[huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler)
|
| 169 |
+
|
| 170 |
+
加载器会自动识别结构,只要权重存储的结构匹配,2D 与 3D 节点可共用同一份权重。
|
| 171 |
+
|
| 172 |
+
---
|
| 173 |
+
|
| 174 |
+
## 🧩 使用方法
|
| 175 |
+
|
| 176 |
+
从 `video/MinimaxH3` 菜单中添加所需节点,连入一个 `LATENT`,选择模型、设置缩放模式/参数,再解码即可。
|
| 177 |
+
|
| 178 |
+
**典型流程:**
|
| 179 |
+
- **快速预览:** `[Minimax H3 Latent] → [H3 Latent Upscaler] → [VAE 解码]`
|
| 180 |
+
- **高品质 / 省时(推荐):** `[低清 Latent] → [H3 Latent Upscaler] → [二次采样重绘/精修] → [VAE 解码]`
|
| 181 |
+
|
| 182 |
+
相比「[Latent] → [VAE 解码] → [像素放大] → [VAE 编码] → …」这种朴素做法,直接在 latent 空间
|
| 183 |
+
放大跳过了昂贵的 VAE 解码/编码往返。Minimax H3 的约 5B 参数 VAE 让解码与再编码都明显偏慢,时间
|
| 184 |
+
主要就省在这里。同时也避免了直接对 latent 插值(双线性/双三次)造成的**鬼影 / 重影**问题。
|
| 185 |
+
|
| 186 |
+
⚠️ **省时间,不省显存:** 精修仍在目标分辨率下运行,峰值显存与直接高清生成接近,收益纯粹是更快出片。
|
| 187 |
+
|
| 188 |
+
### 节点参数 — 2D
|
| 189 |
+
|
| 190 |
+
| 参数 | 类型 | 默认值 | 范围 / 选项 | 说明 |
|
| 191 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 192 |
+
| `latent` | LATENT | — | — | 输入的 Minimax H3 latent((B,C,T,H,W) 或 (B,C,H,W)) |
|
| 193 |
+
| `model_name` | 下拉框 | 自动 | 扫描到的文件 | `latent_upscale_models/` 中的模型 |
|
| 194 |
+
| `scale` | FLOAT | 2.0 | 1.0 – 4.0(步进 0.1) | 空间放大倍数 |
|
| 195 |
+
| `device` | 下拉框 | cuda | cuda / cpu | 推理设备 |
|
| 196 |
+
| `precision` | 下拉框 | fp32 | fp32 / fp16 / bf16 | 推理精度 |
|
| 197 |
+
|
| 198 |
+
**输出:** `LATENT` — 放大后的 latent,可直接送 VAE 解码。
|
| 199 |
+
|
| 200 |
+
### 节点参数 — 3D
|
| 201 |
+
|
| 202 |
+
| 参数 | 类型 | 默认值 | 范围 / 选项 | 说明 |
|
| 203 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 204 |
+
| `latent` | LATENT | — | — | 输入的 Minimax H3 latent((B,C,T,H,W) 或 (B,C,H,W)) |
|
| 205 |
+
| `model_name` | 下拉框 | 自动 | 扫描到的文件 | `latent_upscale_models/` 中的模型 |
|
| 206 |
+
| `mode` | 下拉框 | `scale by multiplier` | `scale by multiplier` / `target dimensions` / `megapixels` | 输出尺寸选择方式 |
|
| 207 |
+
| `scale` | FLOAT | 2.0 | 1.0 – 4.0(步进 0.05) | `mode` 为 `scale by multiplier` 时使用 |
|
| 208 |
+
| `width` | INT | 1280 | 64 – 8192(步进 8) | 目标像素宽(`target dimensions` 使用) |
|
| 209 |
+
| `height` | INT | 704 | 64 – 8192(步进 8) | 目标像素高(`target dimensions` 使用) |
|
| 210 |
+
| `megapixels` | FLOAT | 1.0 | 0.1 – 16.0(步进 0.1) | 目标总百万像素(`megapixels` 使用),保持宽高比 |
|
| 211 |
+
| `align` | INT | 32 | 1 – 512 | 像素网格对齐:输出 W/H 会分别独立取整到该值的倍数(如 16/32/64) |
|
| 212 |
+
| `enable_temporal_chunking` | BOOLEAN | True | True / False | 长视频时间分块以压低显存峰值;短片段可关闭,使用全上下文推理 |
|
| 213 |
+
| `force_unload` | BOOLEAN | True | True / False | 推理后将模型卸载到 CPU,为后续节点释放显存;若重复使用本节点可关闭,避免重复加载开销 |
|
| 214 |
+
| `device` | 下拉框 | cuda | cuda / rocm / cpu | 推理后端(ROCm 需要支持 HIP 的 PyTorch 构建) |
|
| 215 |
+
| `precision` | 下拉框 | fp32 | fp32 / fp16 / bf16 | 推理精度 |
|
| 216 |
+
|
| 217 |
+
**输出:** `LATENT` — 放大后的 latent。
|
| 218 |
+
|
| 219 |
+
> **选哪个节点?** 帧间已较稳定、求快时选 **2D**;需要更强运动/时间一致性,或想直接按目标
|
| 220 |
+
> 像素/百万像素出图,选 **3D**。
|
| 221 |
+
|
| 222 |
+
### 节点参数 — MMH3 Split Upscale(组合)
|
| 223 |
+
|
| 224 |
+
一套**分块式「高清重采样」**的 H3 视频放大方案,**在 Comfyui-MMH3-UltimateUpscale 项目基础上拆解优化而来**。和 2D/3D 节点(用预训练放大网络)不同,这套组合会在
|
| 225 |
+
latent 的更高分辨率版本上重跑扩散采样器,并切块以适配显存。它操作的是 H3 的 **AV latent**
|
| 226 |
+
(嵌套:视频 24 通道 + 音频 32 通道),需要 `model` + `conditioning` + `sampler`/`sigmas`。
|
| 227 |
+
|
| 228 |
+
**`MMH3 Temporal Split Params`** — 沿时间怎么切(对齐 H3 原生的 5+17·m 帧/token 网格):
|
| 229 |
+
|
| 230 |
+
| 参数 | 类型 | 默认值 | 范围 / 选项 | 说明 |
|
| 231 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 232 |
+
| `chunk_frames` | INT | 73 | 5 – 100000 | 每块帧数(自动对齐 H3 token 网格) |
|
| 233 |
+
| `temporal_overlap_frames` | INT | 22 | 0 – 100000 | 相邻块之间的重叠帧数 |
|
| 234 |
+
| `anchor_strength` | FLOAT | 0.999 | 0.0 – 1.0 | 时间锚强度 |
|
| 235 |
+
| `motion_anchor_frames` | 下拉框 | 22 | 0 / 5 / 22 / 39 | 运动锚长度(帧) |
|
| 236 |
+
| `identity_anchor_frames` | INT | 24 | 0 – 240 | 身份锚间距 |
|
| 237 |
+
|
| 238 |
+
输出:`temporal_split_param`(自定义类型,喂给主节点)。
|
| 239 |
+
|
| 240 |
+
**`MMH3 Spatial Split Params`** — 每帧怎么切瓦片:
|
| 241 |
+
|
| 242 |
+
| 参数 | 类型 | 默认值 | 范围 / 选项 | 说明 |
|
| 243 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 244 |
+
| `tile_width` | INT | 512 | 64 – 16384(步进 32) | 瓦片宽(像素) |
|
| 245 |
+
| `tile_height` | INT | 512 | 64 – 16384(步进 32) | 瓦片高(像素) |
|
| 246 |
+
| `overlap_ratio` | FLOAT | 0.25 | 0.0 – 0.90 | 重叠占比(占瓦片) |
|
| 247 |
+
| `fade_ratio` | FLOAT | 0.50 | 0.0 – 1.0 | 重叠区内的渐变带宽度 |
|
| 248 |
+
| `min_tile_size` | INT | 256 | 0 – 16384(步进 32) | 最小瓦片边长;避免边缘出现极小瓦片 |
|
| 249 |
+
| `seam_denoise` | FLOAT | 1.0 | 0.1 – 1.0 | 缝邻域降噪上限;<1 时高降噪下防止快速物体被切断(建议 0.5–0.8) |
|
| 250 |
+
|
| 251 |
+
输出:`spatial_split_param`(自定义类型)+ `grid_preview`(字符串,显示计算出的瓦片/重叠网格)。
|
| 252 |
+
|
| 253 |
+
**`MMH3 Split Upscale`** — 主调度节点:
|
| 254 |
+
|
| 255 |
+
| 参数 | 类型 | 默认值 | 范围 / 选项 | 说明 |
|
| 256 |
+
| :--- | :--- | :--- | :--- | :--- |
|
| 257 |
+
| `model` | MODEL | — | — | 用于重采样的扩散模型 |
|
| 258 |
+
| `conditioning` | CONDITIONING | — | — | 正向条件 |
|
| 259 |
+
| `negative` | CONDITIONING | — | 可选 | 负向条件 |
|
| 260 |
+
| `latent` | LATENT | — | — | 输入的 H3 AV latent(嵌套:视频 24 通道 + 音频 32 通道);仅支持 batch 1 |
|
| 261 |
+
| `noise` | NOISE | — | — | 采样器用的噪声源 |
|
| 262 |
+
| `sampler` | SAMPLER | — | — | 采样器 |
|
| 263 |
+
| `sigmas` | SIGMAS | — | — | 调度序列(sigma schedule) |
|
| 264 |
+
| `cfg` | FLOAT | 1.0 | 0.0 – 100.0 | 无分类器引导强度 |
|
| 265 |
+
| `temporal_split_param` | 自定义 | — | 可选 | 来自 `MMH3 Temporal Split Params` |
|
| 266 |
+
| `spatial_split_param` | 自定义 | — | 可选 | 来自 `MMH3 Spatial Split Params` |
|
| 267 |
+
| `seam_polish` | 下拉框 | off | off / auto / all | 对检测到的接缝额外做去缝处理 |
|
| 268 |
+
| `color_match` | BOOLEAN | True | True / False | 跨瓦片/块的两级颜色匹配 |
|
| 269 |
+
|
| 270 |
+
**输出:** `LATENT` — 放大后的 H3 AV latent,可直接送 VAE 解码。
|
| 271 |
+
|
| 272 |
+
> **注意:** 两个 `* Split Params` 节点都可不接(即为整段/整帧单次处理,不做时间/空间切分)。
|
| 273 |
+
> 该组合会在更高分辨率上重跑采样器,因此以额外算力换取长视频 / 高分辨率下的显存余量。
|
| 274 |
+
|
| 275 |
+
---
|
| 276 |
+
|
| 277 |
+
## 🧪 模型与架构
|
| 278 |
+
|
| 279 |
+
- **Latent 格式:** 24 通道 Minimax H3 VAE latent,推理前按训练均值/标准差逐通道归一化,推理后反归一化。
|
| 280 |
+
- **默认检测结构**(若权重不同会被自动覆盖):`in_channels=24`、`in_blocks=12`、
|
| 281 |
+
`out_blocks=12`、`base_channels=512`、`dropout=0.1`、`temporal_every=2`、
|
| 282 |
+
`temporal_kernel=5`、`attn=False`。
|
| 283 |
+
- **插值方式:** 2D 节点用双线性特征插值;3D 节点用三线性插值。
|
| 284 |
+
- **时间处理:** 两个节点均保持时间长度不变,仅放大空间分辨率(H×W)。
|
| 285 |
+
|
| 286 |
+
---
|
| 287 |
+
|
| 288 |
+
## 📊 训练数据
|
| 289 |
+
|
| 290 |
+
该放大模型在**近 8 万对样本**上训练(低分辨率 latent 与高分辨率目标配对),并在数据类型与缩放倍数上做了均衡,以提升泛化能力。
|
| 291 |
+
|
| 292 |
+
**按数据类型:**
|
| 293 |
+
|
| 294 |
+
| 数据类型 | 对数 | 占比 |
|
| 295 |
+
| :--- | :--- | :--- |
|
| 296 |
+
| 视频素材 | 约 70,000 对 | 约 87.5% |
|
| 297 |
+
| 2K 图像 | 约 8,000 对 | 约 10% |
|
| 298 |
+
|
| 299 |
+
**按缩放倍数(占比,约):**
|
| 300 |
+
|
| 301 |
+
| 倍数 | 占比 | 说明 |
|
| 302 |
+
| :--- | :--- | :--- |
|
| 303 |
+
| 2× | 40% | 主力倍数 —— 最常见的实际使用场景 |
|
| 304 |
+
| 1.5× | 10% | — |
|
| 305 |
+
| 2.5× | 10% | — |
|
| 306 |
+
| 3× | 10% | — |
|
| 307 |
+
| 4× | 10% | — |
|
| 308 |
+
| 1.0×–4.0×(任意小数位) | 10% | 增强对中间任意倍数的泛化能力 |
|
| 309 |
+
|
| 310 |
+
重点放在 **2×(40%)**,对应最常见的实际使用场景;而 **1–4 之间的任意小数位占 10%** 这一设计,
|
| 311 |
+
是为了避免模型只对固定的 1.5×/2×/2.5×/3×/4× 几个档位过拟合,从而能在推理时处理 1.0×–4.0× 区间内
|
| 312 |
+
任意连续 `scale` 值。
|
| 313 |
+
|
| 314 |
+
---
|
| 315 |
+
|
| 316 |
+
## 🙏 致谢
|
| 317 |
+
|
| 318 |
+
本节点沿用了 **Ttl** 提出的「神经网络 latent 放大」思路
|
| 319 |
+
([ComfyUi_NNLatentUpscale](https://github.com/Ttl/ComfyUi_NNLatentUpscale),
|
| 320 |
+
https://github.com/Ttl)。本项目模型架构同时参考借鉴了 **LTX 2.3 Spatial Upscaler**
|
| 321 |
+
(`ltx-2.3-spatial-upscaler-x2-1.1.safetensors`)。感谢这些开源工作为本项目奠定基础。
|
Comfyui_Minimax_h3_latent_Upscaler/__init__.py
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
|
| 2 |
+
|
| 3 |
+
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
|
Comfyui_Minimax_h3_latent_Upscaler/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (321 Bytes). View file
|
|
|
Comfyui_Minimax_h3_latent_Upscaler/examples/Minimax_h3_latent_Upscaler_001.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:12ed02f38b167768ff865a880bec42d15d18e60522952ae601f28fc71508e71f
|
| 3 |
+
size 8011665
|
Comfyui_Minimax_h3_latent_Upscaler/examples/Minimax_h3_latent_Upscaler_002.jpg
ADDED
|
Git LFS Details
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/MMH3_Split_Upscale.py
ADDED
|
@@ -0,0 +1,725 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""MMH3 Split Upscale - 完整最终版 (含 seam_denoise 缝邻域降噪上限)
|
| 2 |
+
预防: 冻结预填重叠带 + 三重时间锚 + cross-fade
|
| 3 |
+
校正: 空间/时间两级颜色匹配 + 首块源参考 + 每 chunk 全局钉源
|
| 4 |
+
抗分叉: seam_denoise 缝邻域降噪上限 (高降噪+快运动防切割残影)
|
| 5 |
+
修复: 每瓦片独立 Guider + 裁剪 keyframes; 修复版 probe 门控 polish
|
| 6 |
+
简化: overlap/fade 百分比参数。
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import math
|
| 10 |
+
import torch
|
| 11 |
+
import comfy.model_management
|
| 12 |
+
import comfy.sample
|
| 13 |
+
import comfy.samplers
|
| 14 |
+
import comfy.utils
|
| 15 |
+
import comfy.nested_tensor
|
| 16 |
+
import latent_preview
|
| 17 |
+
from comfy_api.latest import io
|
| 18 |
+
|
| 19 |
+
try:
|
| 20 |
+
from comfy.ldm.minimax.model import FRAME_PER_TOKEN, FRAME_RESCALE
|
| 21 |
+
except Exception:
|
| 22 |
+
FRAME_PER_TOKEN = (1, 4, 4, 4, 4)
|
| 23 |
+
FRAME_RESCALE = 5.0 / 3.0
|
| 24 |
+
|
| 25 |
+
H3_TEMPORAL_PARAM = io.Custom("H3_TEMPORAL_PARAM_V10")
|
| 26 |
+
H3_SPATIAL_PARAM = io.Custom("H3_SPATIAL_PARAM_V10")
|
| 27 |
+
|
| 28 |
+
VAE_DOWNSAMPLE = 16
|
| 29 |
+
ALIGN = 2
|
| 30 |
+
MAX_IDENTITY_ANCHORS = 6
|
| 31 |
+
POLISH_HALO = 16
|
| 32 |
+
DC_MATCH_CLAMP = 0.05
|
| 33 |
+
SEAM_CORR_GATE, SEAM_DC_GATE = 0.85, 0.6
|
| 34 |
+
COLOR_CLAMP = 0.05
|
| 35 |
+
|
| 36 |
+
# ---------------------------------------------------------------------------
|
| 37 |
+
# 帧/token 映射
|
| 38 |
+
# ---------------------------------------------------------------------------
|
| 39 |
+
def frames_for_tokens(n): return sum(FRAME_PER_TOKEN[i % 5] for i in range(n))
|
| 40 |
+
|
| 41 |
+
def tokens_for_frames(f):
|
| 42 |
+
n, acc = 0, 0
|
| 43 |
+
while acc < f:
|
| 44 |
+
acc += FRAME_PER_TOKEN[n % 5]; n += 1
|
| 45 |
+
return n
|
| 46 |
+
|
| 47 |
+
def audio_range(f0, f1): return round(f0 * FRAME_RESCALE), round(f1 * FRAME_RESCALE)
|
| 48 |
+
|
| 49 |
+
def clip_tokens(n): return (n - 5) // 17 * 5 + 2 if n >= 5 else 1
|
| 50 |
+
|
| 51 |
+
def snap_clip_frames(v): return 5 + 17 * max(1, round((v - 5) / 17)) if v >= 5 else max(1, int(v))
|
| 52 |
+
|
| 53 |
+
def snap_overlap_frames(v): return 0 if v <= 0 else 5 + 17 * max(0, round((v - 5) / 17))
|
| 54 |
+
|
| 55 |
+
def token_start_at_or_before(f):
|
| 56 |
+
k = 0
|
| 57 |
+
while frames_for_tokens(k + 1) <= f:
|
| 58 |
+
k += 1
|
| 59 |
+
return k
|
| 60 |
+
|
| 61 |
+
def steps_for_frames(n):
|
| 62 |
+
k, covered = 0, 0
|
| 63 |
+
while covered < n:
|
| 64 |
+
covered += FRAME_PER_TOKEN[k % 5]; k += 1
|
| 65 |
+
return k if covered == n else None
|
| 66 |
+
|
| 67 |
+
def compute_h3_segments_adaptive(tv, chunk_frames, overlap_frames):
|
| 68 |
+
tc = clip_tokens(chunk_frames)
|
| 69 |
+
to = clip_tokens(overlap_frames) if overlap_frames > 0 else 0
|
| 70 |
+
if to >= tc:
|
| 71 |
+
to = max(0, tc - 1)
|
| 72 |
+
if tc >= tv:
|
| 73 |
+
return [(0, 0, tv, frames_for_tokens(tv))], frames_for_tokens(tv)
|
| 74 |
+
hop = max(1, tc - to)
|
| 75 |
+
bounds, prev_k0, i = [], -1, 0
|
| 76 |
+
while True:
|
| 77 |
+
k0 = i * hop
|
| 78 |
+
if k0 + tc >= tv:
|
| 79 |
+
k1 = tv
|
| 80 |
+
k0 = max(k0, tv - tc)
|
| 81 |
+
if prev_k0 >= 0 and k0 <= prev_k0:
|
| 82 |
+
k0 = prev_k0 + 1
|
| 83 |
+
if k0 >= tv:
|
| 84 |
+
break
|
| 85 |
+
bounds.append((k0, frames_for_tokens(k0), k1, frames_for_tokens(k1)))
|
| 86 |
+
break
|
| 87 |
+
bounds.append((k0, frames_for_tokens(k0), k0 + tc, frames_for_tokens(k0 + tc)))
|
| 88 |
+
prev_k0 = k0
|
| 89 |
+
i += 1
|
| 90 |
+
return bounds, frames_for_tokens(tv)
|
| 91 |
+
|
| 92 |
+
def is_h3_av_latent(samples):
|
| 93 |
+
return (samples is not None and samples.is_nested and len(samples.tensors) == 2
|
| 94 |
+
and samples.tensors[0].ndim == 5 and samples.tensors[0].shape[1] == 24
|
| 95 |
+
and samples.tensors[1].ndim == 4 and samples.tensors[1].shape[1] == 32)
|
| 96 |
+
|
| 97 |
+
def px_to_lat(px):
|
| 98 |
+
return max(ALIGN, (round(px / VAE_DOWNSAMPLE) // ALIGN) * ALIGN)
|
| 99 |
+
|
| 100 |
+
def snap_align(v):
|
| 101 |
+
return max(0, int(round(v / ALIGN)) * ALIGN)
|
| 102 |
+
|
| 103 |
+
# ---------------------------------------------------------------------------
|
| 104 |
+
# keyframe 链路
|
| 105 |
+
# ---------------------------------------------------------------------------
|
| 106 |
+
def trim_keyframe(kf, f0, f1):
|
| 107 |
+
idx = kf["resolved_frame_index"]
|
| 108 |
+
latent, audio_latent = kf.get("latent"), kf.get("audio_latent")
|
| 109 |
+
if latent is None and audio_latent is None:
|
| 110 |
+
return None if (idx < f0 or idx >= f1) else {"resolved_frame_index": idx - f0}
|
| 111 |
+
out = {}
|
| 112 |
+
if latent is not None:
|
| 113 |
+
t_start = t_end = None
|
| 114 |
+
pos = idx
|
| 115 |
+
for k in range(latent.shape[2]):
|
| 116 |
+
span = FRAME_PER_TOKEN[k % 5]
|
| 117 |
+
if f0 <= pos and pos + span <= f1:
|
| 118 |
+
if t_start is None: t_start = k
|
| 119 |
+
t_end = k + 1
|
| 120 |
+
pos += span
|
| 121 |
+
if t_start is None: return None
|
| 122 |
+
out["latent"] = latent[:, :, t_start:t_end].contiguous()
|
| 123 |
+
out["resolved_frame_index"] = idx + frames_for_tokens(t_start) - f0
|
| 124 |
+
if audio_latent is not None:
|
| 125 |
+
rt = audio_latent.shape[-1]
|
| 126 |
+
a_start = max(0, math.ceil((f0 - idx) * FRAME_RESCALE))
|
| 127 |
+
a_end = min(rt, math.floor((f1 - idx) / FRAME_RESCALE))
|
| 128 |
+
if a_end > a_start:
|
| 129 |
+
out["audio_latent"] = audio_latent[..., a_start:a_end].contiguous()
|
| 130 |
+
if "resolved_frame_index" not in out:
|
| 131 |
+
out["resolved_frame_index"] = max(0, idx - f0)
|
| 132 |
+
return out if ("latent" in out or "audio_latent" in out) else None
|
| 133 |
+
|
| 134 |
+
def reanchor_conditioning(cond, f0, f1, spatial):
|
| 135 |
+
out = []
|
| 136 |
+
for tensor, d in cond:
|
| 137 |
+
nd = dict(d)
|
| 138 |
+
kfs = nd.get("minimax_keyframes")
|
| 139 |
+
if kfs:
|
| 140 |
+
trimmed = [kf for kf in (trim_keyframe(kf, f0, f1) for kf in kfs) if kf is not None]
|
| 141 |
+
if trimmed:
|
| 142 |
+
if spatial is not None:
|
| 143 |
+
for kf in trimmed:
|
| 144 |
+
lt = kf.get("latent")
|
| 145 |
+
if lt is not None and (lt.shape[3] != spatial[0] or lt.shape[4] != spatial[1]):
|
| 146 |
+
B, C, T, H, W = lt.shape
|
| 147 |
+
kf["latent"] = torch.nn.functional.interpolate(
|
| 148 |
+
lt.view(B * T, C, H, W), size=spatial, mode="bilinear",
|
| 149 |
+
align_corners=False).view(B, C, T, spatial[0], spatial[1])
|
| 150 |
+
nd["minimax_keyframes"] = trimmed
|
| 151 |
+
else:
|
| 152 |
+
nd.pop("minimax_keyframes", None)
|
| 153 |
+
out.append([tensor, nd])
|
| 154 |
+
return out
|
| 155 |
+
|
| 156 |
+
def prepend_keyframes(cond, kfs):
|
| 157 |
+
if not kfs:
|
| 158 |
+
return cond
|
| 159 |
+
out = []
|
| 160 |
+
for tensor, d in cond:
|
| 161 |
+
nd = dict(d)
|
| 162 |
+
nd["minimax_keyframes"] = kfs + (nd.get("minimax_keyframes") or [])
|
| 163 |
+
out.append([tensor, nd])
|
| 164 |
+
return out
|
| 165 |
+
|
| 166 |
+
def motion_keyframes(prev_video, prev_tokens, f0, n_frames):
|
| 167 |
+
n = next((g for g in (56, 39, 22, 5) if g <= n_frames), 0)
|
| 168 |
+
steps = steps_for_frames(n) if n else None
|
| 169 |
+
if not steps or steps > prev_tokens or (prev_tokens - steps) % 5 != 0:
|
| 170 |
+
return []
|
| 171 |
+
start = prev_tokens - steps
|
| 172 |
+
return [{"resolved_frame_index": frames_for_tokens(start + k) - f0,
|
| 173 |
+
"latent": prev_video[:, :, start + k:start + k + 1].contiguous()}
|
| 174 |
+
for k in range(steps)]
|
| 175 |
+
|
| 176 |
+
def identity_keyframes(source, f0, f1, spacing):
|
| 177 |
+
kfs, p = [], f0 + spacing
|
| 178 |
+
while p < f1:
|
| 179 |
+
k = token_start_at_or_before(p)
|
| 180 |
+
kfs.append({"resolved_frame_index": frames_for_tokens(k) - f0,
|
| 181 |
+
"latent": source[:, :, k:k + 1].contiguous()})
|
| 182 |
+
p += spacing
|
| 183 |
+
if len(kfs) > MAX_IDENTITY_ANCHORS:
|
| 184 |
+
kfs = [kfs[i * len(kfs) // MAX_IDENTITY_ANCHORS] for i in range(MAX_IDENTITY_ANCHORS)]
|
| 185 |
+
return kfs
|
| 186 |
+
|
| 187 |
+
def anchor_conditioning(cond, prev_video, f0, strength):
|
| 188 |
+
t = tokens_for_frames(f0)
|
| 189 |
+
if t >= prev_video.shape[2]:
|
| 190 |
+
raise ValueError("previous result does not reach the current segment start")
|
| 191 |
+
anchor_kf = {"resolved_frame_index": 0, "latent": prev_video[:, :, t:t + 1].contiguous()}
|
| 192 |
+
aug = max(0.0, min(1.0, float(strength)))
|
| 193 |
+
out = []
|
| 194 |
+
for tensor, d in cond:
|
| 195 |
+
nd = dict(d)
|
| 196 |
+
kfs = nd.get("minimax_keyframes")
|
| 197 |
+
if kfs:
|
| 198 |
+
kept = [kf for kf in kfs if kf.get("resolved_frame_index") != 0 or "latent" not in kf]
|
| 199 |
+
nd["minimax_keyframes"] = [anchor_kf] + kept
|
| 200 |
+
else:
|
| 201 |
+
nd["minimax_keyframes"] = [anchor_kf]
|
| 202 |
+
nd["minimax_visual_cond_noise_aug"] = aug
|
| 203 |
+
out.append([tensor, nd])
|
| 204 |
+
return out
|
| 205 |
+
|
| 206 |
+
def crop_keyframes_to_tile(cond, src_h, src_w, r0, c0, tr, tc):
|
| 207 |
+
out = []
|
| 208 |
+
for tensor, d in cond:
|
| 209 |
+
nd = dict(d)
|
| 210 |
+
kfs = nd.get("minimax_keyframes")
|
| 211 |
+
if kfs:
|
| 212 |
+
cropped = []
|
| 213 |
+
for kf in kfs:
|
| 214 |
+
nkf = dict(kf)
|
| 215 |
+
lt = kf.get("latent")
|
| 216 |
+
if lt is not None:
|
| 217 |
+
if lt.shape[3] == src_h and lt.shape[4] == src_w:
|
| 218 |
+
nkf["latent"] = lt[:, :, :, r0:r0 + tr, c0:c0 + tc].contiguous()
|
| 219 |
+
else:
|
| 220 |
+
lt_r = torch.nn.functional.interpolate(
|
| 221 |
+
lt.to(torch.float32), size=(src_h, src_w),
|
| 222 |
+
mode="bilinear", align_corners=False)
|
| 223 |
+
nkf["latent"] = lt_r[:, :, :, r0:r0 + tr, c0:c0 + tc].contiguous()
|
| 224 |
+
cropped.append(nkf)
|
| 225 |
+
nd["minimax_keyframes"] = cropped
|
| 226 |
+
out.append([tensor, nd])
|
| 227 |
+
return out
|
| 228 |
+
|
| 229 |
+
# ---------------------------------------------------------------------------
|
| 230 |
+
# 空间网格
|
| 231 |
+
# ---------------------------------------------------------------------------
|
| 232 |
+
def _grid_1d(size, tile, ol, min_tile):
|
| 233 |
+
if size <= tile:
|
| 234 |
+
return [0], [size], [0]
|
| 235 |
+
sh = tile - ol
|
| 236 |
+
n = math.ceil((size - ol) / sh)
|
| 237 |
+
if (n - 1) * sh + tile < size:
|
| 238 |
+
n += 1
|
| 239 |
+
rows = [i * sh for i in range(n)]
|
| 240 |
+
trows = [min(tile, size - r) for r in rows]
|
| 241 |
+
if min_tile > 0 and n >= 2:
|
| 242 |
+
edge = size - rows[-1]
|
| 243 |
+
if edge < min_tile:
|
| 244 |
+
new_last = size - min_tile
|
| 245 |
+
if rows[-2] < new_last < rows[-2] + trows[-2]:
|
| 246 |
+
rows[-1] = new_last
|
| 247 |
+
trows[-1] = size - new_last
|
| 248 |
+
ovl = [0] * n
|
| 249 |
+
for i in range(1, n):
|
| 250 |
+
ovl[i] = max(0, rows[i - 1] + trows[i - 1] - rows[i])
|
| 251 |
+
return rows, trows, ovl
|
| 252 |
+
|
| 253 |
+
def compute_spatial_grid(h, w, th, tw, ol_h, ol_w, min_th=0, min_tw=0):
|
| 254 |
+
rows, trows, row_ovl = _grid_1d(h, th, ol_h, min_th)
|
| 255 |
+
cols, tcols, col_ovl = _grid_1d(w, tw, ol_w, min_tw)
|
| 256 |
+
return rows, cols, trows, tcols, row_ovl, col_ovl
|
| 257 |
+
|
| 258 |
+
def spatial_fade_mask(tile_h, tile_w, ovh, ovw, done_top, done_left,
|
| 259 |
+
fade_h=0, fade_w=0, seam_cap=1.0):
|
| 260 |
+
"""1=自由重��样, 0=冻结。
|
| 261 |
+
重叠带 = 冻结段(缝侧) + 渐变段(0->seam_cap);
|
| 262 |
+
seam_cap<1 时重叠带后再加一段等宽渐变 (cap->1), 让缝邻域以中等降噪
|
| 263 |
+
"续写"冻结条内容, 高降噪下防止运动物体被切断。seam_cap=1.0 = 经典行为。"""
|
| 264 |
+
mask = torch.ones(tile_h, tile_w, dtype=torch.float32)
|
| 265 |
+
|
| 266 |
+
def profile(n, ov, fade):
|
| 267 |
+
p = torch.ones(n, dtype=torch.float32)
|
| 268 |
+
f = min(fade, ov)
|
| 269 |
+
frozen = ov - f
|
| 270 |
+
p[:frozen] = 0.0
|
| 271 |
+
if f > 0:
|
| 272 |
+
p[frozen:ov] = torch.linspace(0.0, seam_cap, f)
|
| 273 |
+
ramp = min(ov, n - ov)
|
| 274 |
+
if ramp > 0 and seam_cap < 1.0:
|
| 275 |
+
start = seam_cap if f > 0 else 0.0
|
| 276 |
+
p[ov:ov + ramp] = torch.linspace(start, 1.0, ramp)
|
| 277 |
+
return p
|
| 278 |
+
|
| 279 |
+
if done_left and ovw > 0:
|
| 280 |
+
mask = torch.minimum(mask, profile(tile_w, ovw, fade_w)[None, :])
|
| 281 |
+
if done_top and ovh > 0:
|
| 282 |
+
mask = torch.minimum(mask, profile(tile_h, ovh, fade_h)[:, None])
|
| 283 |
+
return mask
|
| 284 |
+
|
| 285 |
+
# ---------------------------------------------------------------------------
|
| 286 |
+
# 校正 + 门控
|
| 287 |
+
# ---------------------------------------------------------------------------
|
| 288 |
+
def dc_correct(new, refs, clamp=COLOR_CLAMP, min_samples=256):
|
| 289 |
+
pairs = [p for p in refs if p is not None and p[0] is not None
|
| 290 |
+
and p[0].numel() >= min_samples]
|
| 291 |
+
if not pairs:
|
| 292 |
+
return new, None
|
| 293 |
+
pa = torch.cat([a.float().permute(0, 2, 3, 4, 1).reshape(-1, a.shape[1]) for a, _ in pairs])
|
| 294 |
+
pb = torch.cat([b.float().permute(0, 2, 3, 4, 1).reshape(-1, b.shape[1]) for _, b in pairs])
|
| 295 |
+
dc = (pa - pb).median(dim=0).values.clamp(-clamp, clamp)
|
| 296 |
+
return new - dc.view(1, -1, 1, 1, 1).to(new.device, new.dtype), dc
|
| 297 |
+
|
| 298 |
+
def grade_pin(chunk, ref, clamp=COLOR_CLAMP):
|
| 299 |
+
a = chunk.float().permute(0, 2, 3, 4, 1).reshape(-1, chunk.shape[1])
|
| 300 |
+
b = ref.float().permute(0, 2, 3, 4, 1).reshape(-1, ref.shape[1])
|
| 301 |
+
dc = (a - b).median(dim=0).values.clamp(-clamp, clamp)
|
| 302 |
+
return chunk - dc.view(1, -1, 1, 1, 1).to(chunk.device, chunk.dtype), dc
|
| 303 |
+
|
| 304 |
+
def seam_metrics(sub, region):
|
| 305 |
+
if sub.numel() < 4096:
|
| 306 |
+
return None, None
|
| 307 |
+
sp = sub.float().permute(0, 2, 3, 4, 1).reshape(-1, sub.shape[1])
|
| 308 |
+
rp = region.float().permute(0, 2, 3, 4, 1).reshape(-1, region.shape[1])
|
| 309 |
+
dc = (sp - rp).median(dim=0).values.clamp(-DC_MATCH_CLAMP, DC_MATCH_CLAMP)
|
| 310 |
+
a = sp - sp.mean(dim=0)
|
| 311 |
+
b = rp - rp.mean(dim=0)
|
| 312 |
+
corr = ((a * b).mean(dim=0) / (a.std(dim=0) * b.std(dim=0) + 1e-6)).median()
|
| 313 |
+
return dc, float(corr)
|
| 314 |
+
|
| 315 |
+
def _should_polish(mode, sub, region):
|
| 316 |
+
if mode == "all":
|
| 317 |
+
return True
|
| 318 |
+
dc, corr = seam_metrics(sub, region)
|
| 319 |
+
if dc is None:
|
| 320 |
+
return False
|
| 321 |
+
return ((corr is not None and corr < SEAM_CORR_GATE)
|
| 322 |
+
or dc.abs().max().item() > SEAM_DC_GATE * DC_MATCH_CLAMP)
|
| 323 |
+
|
| 324 |
+
# ---------------------------------------------------------------------------
|
| 325 |
+
# 时间缝合
|
| 326 |
+
# ---------------------------------------------------------------------------
|
| 327 |
+
def _crossfade(a, b, dim):
|
| 328 |
+
n = a.shape[dim]
|
| 329 |
+
w = torch.linspace(0.0, 1.0, n, device=a.device, dtype=a.dtype)
|
| 330 |
+
shape = [1] * a.ndim
|
| 331 |
+
shape[dim] = n
|
| 332 |
+
return a + (b - a) * w.view(shape)
|
| 333 |
+
|
| 334 |
+
def temporal_append(acc_v, acc_a, chunk_v, chunk_a, index, k0, f0, color_match=True):
|
| 335 |
+
if acc_v is None:
|
| 336 |
+
return chunk_v, chunk_a
|
| 337 |
+
gi, agi = k0, round(f0 * FRAME_RESCALE)
|
| 338 |
+
total_v = max(acc_v.shape[2], gi + chunk_v.shape[2])
|
| 339 |
+
total_a = max(acc_a.shape[-1], agi + chunk_a.shape[-1])
|
| 340 |
+
rv = torch.zeros((1, acc_v.shape[1], total_v, acc_v.shape[3], acc_v.shape[4]),
|
| 341 |
+
device=acc_v.device, dtype=acc_v.dtype)
|
| 342 |
+
ra = torch.zeros((1, 32, 2, total_a), device=acc_a.device, dtype=acc_a.dtype)
|
| 343 |
+
rv[:, :, :acc_v.shape[2]] = acc_v
|
| 344 |
+
ra[:, :, :, :acc_a.shape[-1]] = acc_a
|
| 345 |
+
v, a = chunk_v, chunk_a
|
| 346 |
+
if index > 0:
|
| 347 |
+
ov = min(acc_v.shape[2] - gi, v.shape[2])
|
| 348 |
+
if ov > 0:
|
| 349 |
+
if color_match:
|
| 350 |
+
v, dc = dc_correct(v, [(v[:, :, :ov], rv[:, :, gi:gi + ov])])
|
| 351 |
+
if dc is not None:
|
| 352 |
+
print(f"[H3] 🎨 chunk {index} 时间颜色匹配 |dc|max={dc.abs().max():.4f}")
|
| 353 |
+
rv[:, :, gi:gi + ov] = _crossfade(rv[:, :, gi:gi + ov], v[:, :, :ov], dim=2)
|
| 354 |
+
v = v[:, :, ov:]
|
| 355 |
+
gi += ov
|
| 356 |
+
ova = min(acc_a.shape[-1] - agi, a.shape[-1])
|
| 357 |
+
if ova > 0:
|
| 358 |
+
ra[:, :, :, agi:agi + ova] = _crossfade(ra[:, :, :, agi:agi + ova], a[:, :, :, :ova], dim=3)
|
| 359 |
+
a = a[:, :, :, ova:]
|
| 360 |
+
agi += ova
|
| 361 |
+
if v.shape[2] > 0:
|
| 362 |
+
rv[:, :, gi:gi + v.shape[2]] = v
|
| 363 |
+
if a.shape[-1] > 0:
|
| 364 |
+
ra[:, :, :, agi:agi + a.shape[-1]] = a
|
| 365 |
+
return rv, ra
|
| 366 |
+
|
| 367 |
+
# ---------------------------------------------------------------------------
|
| 368 |
+
# 采样
|
| 369 |
+
# ---------------------------------------------------------------------------
|
| 370 |
+
def build_guider(model, cond, negative, cfg):
|
| 371 |
+
guider = comfy.samplers.CFGGuider(model)
|
| 372 |
+
if negative is not None:
|
| 373 |
+
guider.set_conds(cond, negative)
|
| 374 |
+
guider.set_cfg(cfg)
|
| 375 |
+
else:
|
| 376 |
+
guider.inner_set_conds({"positive": cond})
|
| 377 |
+
return guider
|
| 378 |
+
|
| 379 |
+
def sample_piece(piece, guider, noise_tensor, seed, sampler, sigmas, callback=None):
|
| 380 |
+
latent = dict(piece)
|
| 381 |
+
latent_image = latent["samples"]
|
| 382 |
+
latent_image = comfy.sample.fix_empty_latent_channels(
|
| 383 |
+
model=guider.model_patcher.model, latent_image=latent_image)
|
| 384 |
+
latent["samples"] = latent_image
|
| 385 |
+
if callback is None:
|
| 386 |
+
x0_output = {}
|
| 387 |
+
callback = latent_preview.prepare_callback(guider.model_patcher, sigmas.shape[-1] - 1, x0_output)
|
| 388 |
+
samples = guider.sample(noise_tensor, latent_image, sampler, sigmas,
|
| 389 |
+
denoise_mask=latent.get("noise_mask"), callback=callback,
|
| 390 |
+
disable_pbar=not comfy.utils.PROGRESS_BAR_ENABLED, seed=seed)
|
| 391 |
+
return samples.to(comfy.model_management.intermediate_device())
|
| 392 |
+
|
| 393 |
+
def make_tile_progress(model_patcher, steps, n_tiles):
|
| 394 |
+
previewer = latent_preview.get_previewer(model_patcher.load_device, model_patcher.model.latent_format)
|
| 395 |
+
total = steps * n_tiles
|
| 396 |
+
pbar = comfy.utils.ProgressBar(total)
|
| 397 |
+
def for_tile(idx):
|
| 398 |
+
def callback(step, x0, x, total_steps):
|
| 399 |
+
preview = None
|
| 400 |
+
if previewer is not None and x0 is not None:
|
| 401 |
+
px0 = x0.tensors[0] if getattr(x0, "is_nested", False) else x0
|
| 402 |
+
try:
|
| 403 |
+
preview = previewer.decode_latent_to_preview_image("JPEG", px0)
|
| 404 |
+
except Exception:
|
| 405 |
+
preview = None
|
| 406 |
+
pbar.update_absolute(idx * steps + step + 1, total, preview)
|
| 407 |
+
return callback
|
| 408 |
+
return for_tile
|
| 409 |
+
|
| 410 |
+
# ---------------------------------------------------------------------------
|
| 411 |
+
# 参数节点
|
| 412 |
+
# ---------------------------------------------------------------------------
|
| 413 |
+
class H3TemporalSplitParams(io.ComfyNode):
|
| 414 |
+
@classmethod
|
| 415 |
+
def define_schema(cls):
|
| 416 |
+
return io.Schema(
|
| 417 |
+
node_id="MMH3TemporalSplitParamsV10", display_name="MMH3 Temporal Split Params",
|
| 418 |
+
category="latent/upscale/minimax",
|
| 419 |
+
description="H3 原生网格时间分块 (5+17m 帧) + 三重锚。",
|
| 420 |
+
inputs=[
|
| 421 |
+
io.Int.Input("chunk_frames", default=73, min=5, max=100000, step=1),
|
| 422 |
+
io.Int.Input("temporal_overlap_frames", default=22, min=0, max=100000, step=1),
|
| 423 |
+
io.Float.Input("anchor_strength", default=0.999, min=0.0, max=1.0, step=0.001),
|
| 424 |
+
io.Combo.Input("motion_anchor_frames", options=["0", "5", "22", "39"], default="22"),
|
| 425 |
+
io.Int.Input("identity_anchor_frames", default=24, min=0, max=240, step=1),
|
| 426 |
+
],
|
| 427 |
+
outputs=[H3_TEMPORAL_PARAM.Output("temporal_split_param")],
|
| 428 |
+
)
|
| 429 |
+
|
| 430 |
+
@classmethod
|
| 431 |
+
def execute(cls, chunk_frames, temporal_overlap_frames, anchor_strength,
|
| 432 |
+
motion_anchor_frames, identity_anchor_frames) -> io.NodeOutput:
|
| 433 |
+
chunk = snap_clip_frames(int(chunk_frames))
|
| 434 |
+
overlap = snap_overlap_frames(int(temporal_overlap_frames))
|
| 435 |
+
if overlap >= chunk:
|
| 436 |
+
overlap = snap_overlap_frames(chunk - 17)
|
| 437 |
+
return io.NodeOutput({"p": (chunk, overlap, float(anchor_strength),
|
| 438 |
+
int(motion_anchor_frames), int(identity_anchor_frames))})
|
| 439 |
+
|
| 440 |
+
|
| 441 |
+
class H3SpatialSplitParams(io.ComfyNode):
|
| 442 |
+
@classmethod
|
| 443 |
+
def define_schema(cls):
|
| 444 |
+
return io.Schema(
|
| 445 |
+
node_id="MMH3SpatialSplitParamsV10", display_name="MMH3 Spatial Split Params",
|
| 446 |
+
category="latent/upscale/minimax",
|
| 447 |
+
description="简化空间分块: 百分比重叠/渐变 + 缝邻域降噪上限。",
|
| 448 |
+
inputs=[
|
| 449 |
+
io.Int.Input("tile_width", default=512, min=64, max=16384, step=32),
|
| 450 |
+
io.Int.Input("tile_height", default=512, min=64, max=16384, step=32),
|
| 451 |
+
io.Float.Input("overlap_ratio", default=0.25, min=0.0, max=0.90, step=0.05),
|
| 452 |
+
io.Float.Input("fade_ratio", default=0.50, min=0.0, max=1.0, step=0.05),
|
| 453 |
+
io.Int.Input("min_tile_size", default=256, min=0, max=16384, step=32),
|
| 454 |
+
io.Float.Input("seam_denoise", default=1.0, min=0.1, max=1.0, step=0.05,
|
| 455 |
+
tooltip="缝邻域降噪上限: <1 时高降噪下缝附近以中等降噪续写邻居内容, "
|
| 456 |
+
"防止快运动物体在缝处被切断; 建议 0.5~0.8; 1.0=关。"),
|
| 457 |
+
],
|
| 458 |
+
outputs=[
|
| 459 |
+
H3_SPATIAL_PARAM.Output("spatial_split_param"),
|
| 460 |
+
io.String.Output("grid_preview"),
|
| 461 |
+
],
|
| 462 |
+
)
|
| 463 |
+
|
| 464 |
+
@classmethod
|
| 465 |
+
def execute(cls, tile_width, tile_height, overlap_ratio, fade_ratio,
|
| 466 |
+
min_tile_size, seam_denoise) -> io.NodeOutput:
|
| 467 |
+
tw, th = px_to_lat(tile_width), px_to_lat(tile_height)
|
| 468 |
+
ol_w = min(tw - ALIGN, snap_align(tw * overlap_ratio))
|
| 469 |
+
ol_h = min(th - ALIGN, snap_align(th * overlap_ratio))
|
| 470 |
+
fw = min(ol_w, int(round(ol_w * fade_ratio)))
|
| 471 |
+
fh = min(ol_h, int(round(ol_h * fade_ratio)))
|
| 472 |
+
mt = min(px_to_lat(min_tile_size), th, tw) if min_tile_size > 0 else 0
|
| 473 |
+
param = {"tw": tw, "th": th, "ol_w": ol_w, "ol_h": ol_h,
|
| 474 |
+
"fw": fw, "fh": fh, "mt": mt, "cap": float(seam_denoise)}
|
| 475 |
+
preview = (f"Tile: {tile_width}x{tile_height}px -> {tw}x{th}lat | "
|
| 476 |
+
f"Overlap: {overlap_ratio:.0%} -> {ol_w}x{ol_h}lat | "
|
| 477 |
+
f"Fade: {fade_ratio:.0%} -> {fw}x{fh}lat | SeamDenoise: {seam_denoise:.2f}")
|
| 478 |
+
print(f"[H3] 📊 {preview}")
|
| 479 |
+
return io.NodeOutput(param, preview)
|
| 480 |
+
|
| 481 |
+
|
| 482 |
+
# ---------------------------------------------------------------------------
|
| 483 |
+
# 主节点
|
| 484 |
+
# ---------------------------------------------------------------------------
|
| 485 |
+
class MMH3SplitUpscale(io.ComfyNode):
|
| 486 |
+
@classmethod
|
| 487 |
+
def define_schema(cls):
|
| 488 |
+
return io.Schema(
|
| 489 |
+
node_id="MMH3SplitUpscale", display_name="MMH3 Split Upscale",
|
| 490 |
+
category="latent/upscale/minimax",
|
| 491 |
+
description="预防(冻结预填+三重锚) + 校正(颜色匹配+钉源) + 抗分叉(seam_denoise) + probe 门控 polish。",
|
| 492 |
+
inputs=[
|
| 493 |
+
io.Model.Input("model"),
|
| 494 |
+
io.Conditioning.Input("conditioning"),
|
| 495 |
+
io.Conditioning.Input("negative", optional=True),
|
| 496 |
+
io.Latent.Input("latent"),
|
| 497 |
+
io.Noise.Input("noise"),
|
| 498 |
+
io.Sampler.Input("sampler"),
|
| 499 |
+
io.Sigmas.Input("sigmas"),
|
| 500 |
+
io.Float.Input("cfg", default=1.0, min=0.0, max=100.0, step=0.1, round=0.01),
|
| 501 |
+
H3_TEMPORAL_PARAM.Input("temporal_split_param", optional=True),
|
| 502 |
+
H3_SPATIAL_PARAM.Input("spatial_split_param", optional=True),
|
| 503 |
+
io.Combo.Input("seam_polish", options=["off", "auto", "all"], default="off"),
|
| 504 |
+
io.Boolean.Input("color_match", default=True),
|
| 505 |
+
],
|
| 506 |
+
outputs=[io.Latent.Output("latent")],
|
| 507 |
+
)
|
| 508 |
+
|
| 509 |
+
@classmethod
|
| 510 |
+
def execute(cls, latent, conditioning, model, noise, sampler, sigmas,
|
| 511 |
+
negative=None, cfg=1.0, temporal_split_param=None,
|
| 512 |
+
spatial_split_param=None, seam_polish="off",
|
| 513 |
+
color_match=True) -> io.NodeOutput:
|
| 514 |
+
samples = latent["samples"]
|
| 515 |
+
if not is_h3_av_latent(samples):
|
| 516 |
+
raise ValueError("期望 MiniMax H3 AV latent (嵌套 video+audio)")
|
| 517 |
+
video, audio = samples.tensors[0], samples.tensors[1]
|
| 518 |
+
if video.shape[0] != 1:
|
| 519 |
+
raise ValueError("仅支持 Batch 1")
|
| 520 |
+
B, C, T, H, W = video.shape
|
| 521 |
+
|
| 522 |
+
if temporal_split_param is not None:
|
| 523 |
+
cl, ov, anchor_strength, motion_n, identity_n = temporal_split_param["p"]
|
| 524 |
+
bounds, _ = compute_h3_segments_adaptive(T, cl, ov)
|
| 525 |
+
else:
|
| 526 |
+
bounds = [(0, 0, T, frames_for_tokens(T))]
|
| 527 |
+
anchor_strength, motion_n, identity_n = 0.999, 0, 0
|
| 528 |
+
|
| 529 |
+
if spatial_split_param is not None:
|
| 530 |
+
sp = spatial_split_param
|
| 531 |
+
rows, cols, trows, tcols, row_ovl, col_ovl = compute_spatial_grid(
|
| 532 |
+
H, W, sp["th"], sp["tw"], sp["ol_h"], sp["ol_w"], sp["mt"], sp["mt"])
|
| 533 |
+
seam_cap = sp.get("cap", 1.0)
|
| 534 |
+
else:
|
| 535 |
+
rows, cols, trows, tcols, row_ovl, col_ovl = [0], [0], [H], [W], [0], [0]
|
| 536 |
+
seam_cap = 1.0
|
| 537 |
+
nrows, ncols = len(rows), len(cols)
|
| 538 |
+
|
| 539 |
+
steps = max(int(sigmas.shape[-1]) - 1, 1)
|
| 540 |
+
n_tiles = len(bounds) * nrows * ncols
|
| 541 |
+
for_tile = make_tile_progress(model.model_patcher if hasattr(model, "model_patcher") else model,
|
| 542 |
+
steps, n_tiles)
|
| 543 |
+
|
| 544 |
+
source = video
|
| 545 |
+
noise_v = noise.generate_noise({"samples": torch.zeros_like(video, dtype=torch.float32)})
|
| 546 |
+
noise_a = noise.generate_noise({"samples": torch.zeros_like(audio, dtype=torch.float32)})
|
| 547 |
+
|
| 548 |
+
acc_v = acc_a = None
|
| 549 |
+
polish_queue = {}
|
| 550 |
+
tile_idx = 0
|
| 551 |
+
|
| 552 |
+
for i, (k0, f0, k1, f1) in enumerate(bounds):
|
| 553 |
+
chunk_v = video[:, :, k0:k1].contiguous()
|
| 554 |
+
a0, a1 = audio_range(f0, f1)
|
| 555 |
+
a1 = min(a1, audio.shape[-1])
|
| 556 |
+
chunk_a = audio[:, :, :, a0:a1].contiguous()
|
| 557 |
+
|
| 558 |
+
cond_i = reanchor_conditioning(conditioning, f0, f1, (H, W))
|
| 559 |
+
if i > 0 and acc_v is not None:
|
| 560 |
+
if motion_n > 0:
|
| 561 |
+
cond_i = prepend_keyframes(cond_i, motion_keyframes(acc_v, k0, f0, motion_n))
|
| 562 |
+
if identity_n > 0:
|
| 563 |
+
cond_i = prepend_keyframes(cond_i, identity_keyframes(source, f0, f1, identity_n))
|
| 564 |
+
if anchor_strength > 0.0:
|
| 565 |
+
cond_i = anchor_conditioning(cond_i, acc_v, f0, anchor_strength)
|
| 566 |
+
elif identity_n > 0:
|
| 567 |
+
cond_i = prepend_keyframes(cond_i, identity_keyframes(source, f0, f1, identity_n))
|
| 568 |
+
|
| 569 |
+
chunk_out = chunk_v.clone()
|
| 570 |
+
noise_vc = noise_v[:, :, k0:k1]
|
| 571 |
+
noise_ac = noise_a[:, :, :, a0:a1]
|
| 572 |
+
|
| 573 |
+
# ================= 空间内循环 =================
|
| 574 |
+
for ri in range(nrows):
|
| 575 |
+
for cj in range(ncols):
|
| 576 |
+
comfy.model_management.throw_exception_if_processing_interrupted()
|
| 577 |
+
r0, c0 = rows[ri], cols[cj]
|
| 578 |
+
tr, tc = trows[ri], tcols[cj]
|
| 579 |
+
ovh, ovw = row_ovl[ri], col_ovl[cj]
|
| 580 |
+
|
| 581 |
+
tile = chunk_out[:, :, :, r0:r0 + tr, c0:c0 + tc].clone()
|
| 582 |
+
|
| 583 |
+
if spatial_split_param is not None:
|
| 584 |
+
fh, fw = spatial_split_param["fh"], spatial_split_param["fw"]
|
| 585 |
+
else:
|
| 586 |
+
fh = fw = 0
|
| 587 |
+
m = spatial_fade_mask(tr, tc, ovh, ovw,
|
| 588 |
+
done_top=(ri > 0), done_left=(cj > 0),
|
| 589 |
+
fade_h=fh, fade_w=fw, seam_cap=seam_cap)
|
| 590 |
+
mv = m[None, None, None].to(chunk_out.device)
|
| 591 |
+
ma = torch.zeros((1, 32, 2, chunk_a.shape[-1]),
|
| 592 |
+
device=chunk_a.device, dtype=torch.float32)
|
| 593 |
+
piece = {"samples": comfy.nested_tensor.NestedTensor((tile, chunk_a)),
|
| 594 |
+
"noise_mask": comfy.nested_tensor.NestedTensor((mv, ma))}
|
| 595 |
+
tile_noise = comfy.nested_tensor.NestedTensor((
|
| 596 |
+
noise_vc[:, :, :, r0:r0 + tr, c0:c0 + tc].contiguous(),
|
| 597 |
+
noise_ac.contiguous()))
|
| 598 |
+
|
| 599 |
+
cond_tile = crop_keyframes_to_tile(cond_i, H, W, r0, c0, tr, tc)
|
| 600 |
+
guider = build_guider(model, cond_tile, negative, cfg)
|
| 601 |
+
out = sample_piece(piece, guider, tile_noise, noise.seed, sampler, sigmas,
|
| 602 |
+
for_tile(tile_idx))
|
| 603 |
+
tile_v = (out.tensors[0] if out.is_nested else out).to(chunk_out.device)
|
| 604 |
+
|
| 605 |
+
region = chunk_out[:, :, :, r0:r0 + tr, c0:c0 + tc].clone()
|
| 606 |
+
|
| 607 |
+
if color_match:
|
| 608 |
+
tile_v, _ = dc_correct(tile_v, [
|
| 609 |
+
(tile_v[:, :, :, :, :ovw], region[:, :, :, :, :ovw])
|
| 610 |
+
if (cj > 0 and ovw > 0) else None,
|
| 611 |
+
(tile_v[:, :, :, :ovh, :], region[:, :, :, :ovh, :])
|
| 612 |
+
if (ri > 0 and ovh > 0) else None,
|
| 613 |
+
(tile_v, chunk_v[:, :, :, r0:r0 + tr, c0:c0 + tc])
|
| 614 |
+
if (ri == 0 and cj == 0) else None,
|
| 615 |
+
])
|
| 616 |
+
|
| 617 |
+
if seam_polish != "off":
|
| 618 |
+
if cj > 0 and ovw > 0 and \
|
| 619 |
+
_should_polish(seam_polish, tile_v[:, :, :, :, :ovw], region[:, :, :, :, :ovw]):
|
| 620 |
+
polish_queue[(i, ri, cj, "W")] = (c0, ovw, (k0, k1))
|
| 621 |
+
if ri > 0 and ovh > 0 and \
|
| 622 |
+
_should_polish(seam_polish, tile_v[:, :, :, :ovh, :], region[:, :, :, :ovh, :]):
|
| 623 |
+
polish_queue[(i, ri, cj, "H")] = (r0, ovh, (k0, k1))
|
| 624 |
+
|
| 625 |
+
if cj > 0 and ovw > 0:
|
| 626 |
+
wts = torch.linspace(0.0, 1.0, ovw, device=region.device,
|
| 627 |
+
dtype=region.dtype).view(1, 1, 1, 1, ovw)
|
| 628 |
+
region[:, :, :, :, :ovw] = (region[:, :, :, :, :ovw] * (1.0 - wts)
|
| 629 |
+
+ tile_v[:, :, :, :, :ovw] * wts)
|
| 630 |
+
if ri > 0 and ovh > 0:
|
| 631 |
+
wts = torch.linspace(0.0, 1.0, ovh, device=region.device,
|
| 632 |
+
dtype=region.dtype).view(1, 1, 1, ovh, 1)
|
| 633 |
+
region[:, :, :, :ovh, :] = (region[:, :, :, :ovh, :] * (1.0 - wts)
|
| 634 |
+
+ tile_v[:, :, :, :ovh, :] * wts)
|
| 635 |
+
band = torch.zeros((1, 1, 1, tr, tc), dtype=torch.bool, device=region.device)
|
| 636 |
+
if cj > 0 and ovw > 0:
|
| 637 |
+
band[:, :, :, :, :ovw] = True
|
| 638 |
+
if ri > 0 and ovh > 0:
|
| 639 |
+
band[:, :, :, :ovh, :] = True
|
| 640 |
+
region = torch.where(band, region, tile_v)
|
| 641 |
+
chunk_out[:, :, :, r0:r0 + tr, c0:c0 + tc] = region
|
| 642 |
+
|
| 643 |
+
tile_idx += 1
|
| 644 |
+
comfy.model_management.soft_empty_cache()
|
| 645 |
+
|
| 646 |
+
if color_match:
|
| 647 |
+
chunk_out, dcg = grade_pin(chunk_out, chunk_v)
|
| 648 |
+
if dcg is not None and dcg.abs().max().item() > 1e-4:
|
| 649 |
+
print(f"[H3] 🎯 chunk {i} 全局钉源 |dc|max={dcg.abs().max():.4f}")
|
| 650 |
+
|
| 651 |
+
# ================= 修复版 polish 二道缝 =================
|
| 652 |
+
chunk_polish = [(k, v) for k, v in polish_queue.items() if k[0] == i]
|
| 653 |
+
if chunk_polish:
|
| 654 |
+
print(f"[H3] 🔧 chunk {i}: polish {len(chunk_polish)} 条缝")
|
| 655 |
+
pbar2 = comfy.utils.ProgressBar(steps * len(chunk_polish))
|
| 656 |
+
for pi, (key, (s0, band_w, (tk0, tk1))) in enumerate(chunk_polish):
|
| 657 |
+
comfy.model_management.throw_exception_if_processing_interrupted()
|
| 658 |
+
axis = key[3]
|
| 659 |
+
t_len = tk1 - tk0
|
| 660 |
+
if axis == "W":
|
| 661 |
+
w0 = max(0, s0 - POLISH_HALO)
|
| 662 |
+
w1 = min(W, s0 + band_w + POLISH_HALO)
|
| 663 |
+
win = chunk_out[:, :, :, :, w0:w1].clone()
|
| 664 |
+
b0, b1 = s0 - w0, s0 - w0 + band_w
|
| 665 |
+
mv = torch.zeros((1, 1, t_len, H, w1 - w0), dtype=torch.float32, device=win.device)
|
| 666 |
+
mv[:, :, :, :, b0:b1] = 1.0
|
| 667 |
+
r0c, c0c, trc, tcc, ax = 0, w0, H, w1 - w0, 4
|
| 668 |
+
nsl = (slice(None), slice(None), slice(tk0, tk1), slice(None), slice(w0, w1))
|
| 669 |
+
else:
|
| 670 |
+
h0 = max(0, s0 - POLISH_HALO)
|
| 671 |
+
h1 = min(H, s0 + band_w + POLISH_HALO)
|
| 672 |
+
win = chunk_out[:, :, :, h0:h1, :].clone()
|
| 673 |
+
b0, b1 = s0 - h0, s0 - h0 + band_w
|
| 674 |
+
mv = torch.zeros((1, 1, t_len, h1 - h0, W), dtype=torch.float32, device=win.device)
|
| 675 |
+
mv[:, :, :, b0:b1, :] = 1.0
|
| 676 |
+
r0c, c0c, trc, tcc, ax = h0, 0, h1 - h0, W, 3
|
| 677 |
+
nsl = (slice(None), slice(None), slice(tk0, tk1), slice(h0, h1), slice(None))
|
| 678 |
+
ma = torch.zeros((1, 32, 2, chunk_a.shape[-1]),
|
| 679 |
+
device=chunk_a.device, dtype=torch.float32)
|
| 680 |
+
piece = {"samples": comfy.nested_tensor.NestedTensor((win, chunk_a)),
|
| 681 |
+
"noise_mask": comfy.nested_tensor.NestedTensor((mv, ma))}
|
| 682 |
+
tn = comfy.nested_tensor.NestedTensor((noise_v[nsl].contiguous(), noise_ac.contiguous()))
|
| 683 |
+
|
| 684 |
+
cond_p = crop_keyframes_to_tile(cond_i, H, W, r0c, c0c, trc, tcc)
|
| 685 |
+
g = build_guider(model, cond_p, negative, cfg)
|
| 686 |
+
|
| 687 |
+
def _cb(step, x0, x, ts, _pi=pi):
|
| 688 |
+
pbar2.update_absolute(_pi * steps + step + 1, steps * len(chunk_polish))
|
| 689 |
+
|
| 690 |
+
out = sample_piece(piece, g, tn, noise.seed, sampler, sigmas, callback=_cb)
|
| 691 |
+
pv = (out.tensors[0] if out.is_nested else out).to(chunk_out.device)
|
| 692 |
+
|
| 693 |
+
nlen = (w1 - w0) if ax == 4 else (h1 - h0)
|
| 694 |
+
alpha = torch.ones(nlen, dtype=torch.float32)
|
| 695 |
+
if b0 > 0:
|
| 696 |
+
alpha[:b0] = torch.linspace(0.0, 1.0, b0)
|
| 697 |
+
if nlen - b1 > 0:
|
| 698 |
+
alpha[b1:] = torch.linspace(1.0, 0.0, nlen - b1)
|
| 699 |
+
view = [1, 1, 1, 1, 1]
|
| 700 |
+
view[ax] = nlen
|
| 701 |
+
avv = alpha.view(view).to(chunk_out.device)
|
| 702 |
+
if ax == 4:
|
| 703 |
+
chunk_out[:, :, :, :, w0:w1] = avv * pv + (1.0 - avv) * win
|
| 704 |
+
else:
|
| 705 |
+
chunk_out[:, :, :, h0:h1, :] = avv * pv + (1.0 - avv) * win
|
| 706 |
+
comfy.model_management.soft_empty_cache()
|
| 707 |
+
|
| 708 |
+
acc_v, acc_a = temporal_append(acc_v, acc_a, chunk_out, chunk_a, i, k0, f0, color_match)
|
| 709 |
+
|
| 710 |
+
if hasattr(model, "clone_base_uuid"):
|
| 711 |
+
comfy.model_management.unload_model_and_clones(model, unload_additional_models=False)
|
| 712 |
+
comfy.model_management.soft_empty_cache()
|
| 713 |
+
return io.NodeOutput({"samples": comfy.nested_tensor.NestedTensor((acc_v, acc_a))})
|
| 714 |
+
|
| 715 |
+
|
| 716 |
+
NODE_CLASS_MAPPINGS = {
|
| 717 |
+
"MMH3TemporalSplitParamsV10": H3TemporalSplitParams,
|
| 718 |
+
"MMH3SpatialSplitParamsV10": H3SpatialSplitParams,
|
| 719 |
+
"MMH3SplitUpscale": MMH3SplitUpscale,
|
| 720 |
+
}
|
| 721 |
+
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 722 |
+
"MMH3TemporalSplitParamsV10": "MMH3 Temporal Split Params",
|
| 723 |
+
"MMH3SpatialSplitParamsV10": "MMH3 Spatial Split Params",
|
| 724 |
+
"MMH3SplitUpscale": "MMH3 Split Upscale",
|
| 725 |
+
}
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/__init__.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import logging
|
| 2 |
+
|
| 3 |
+
# 2D node: legacy API
|
| 4 |
+
from .minimax_h3_latent_upscaler_2d import (
|
| 5 |
+
NODE_CLASS_MAPPINGS as NODE_CLASS_MAPPINGS_2D,
|
| 6 |
+
NODE_DISPLAY_NAME_MAPPINGS as NODE_DISPLAY_NAME_MAPPINGS_2D,
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
NODE_CLASS_MAPPINGS = {}
|
| 10 |
+
NODE_CLASS_MAPPINGS.update(NODE_CLASS_MAPPINGS_2D)
|
| 11 |
+
|
| 12 |
+
NODE_DISPLAY_NAME_MAPPINGS = {}
|
| 13 |
+
NODE_DISPLAY_NAME_MAPPINGS.update(NODE_DISPLAY_NAME_MAPPINGS_2D)
|
| 14 |
+
|
| 15 |
+
# 3D node: legacy API (same registration mechanism as 2D)
|
| 16 |
+
try:
|
| 17 |
+
from .minimax_h3_latent_upscaler_3d import (
|
| 18 |
+
NODE_CLASS_MAPPINGS as NODE_CLASS_MAPPINGS_3D,
|
| 19 |
+
NODE_DISPLAY_NAME_MAPPINGS as NODE_DISPLAY_NAME_MAPPINGS_3D,
|
| 20 |
+
)
|
| 21 |
+
NODE_CLASS_MAPPINGS.update(NODE_CLASS_MAPPINGS_3D)
|
| 22 |
+
NODE_DISPLAY_NAME_MAPPINGS.update(NODE_DISPLAY_NAME_MAPPINGS_3D)
|
| 23 |
+
except Exception as e:
|
| 24 |
+
logging.error(f"[MinimaxH3] Failed to import 3D node: {e}")
|
| 25 |
+
|
| 26 |
+
# MMH3 Split Upscale combo: legacy API (Temporal/Spatial params + main upscale node)
|
| 27 |
+
try:
|
| 28 |
+
from .MMH3_Split_Upscale import (
|
| 29 |
+
NODE_CLASS_MAPPINGS as NODE_CLASS_MAPPINGS_SPLIT,
|
| 30 |
+
NODE_DISPLAY_NAME_MAPPINGS as NODE_DISPLAY_NAME_MAPPINGS_SPLIT,
|
| 31 |
+
)
|
| 32 |
+
NODE_CLASS_MAPPINGS.update(NODE_CLASS_MAPPINGS_SPLIT)
|
| 33 |
+
NODE_DISPLAY_NAME_MAPPINGS.update(NODE_DISPLAY_NAME_MAPPINGS_SPLIT)
|
| 34 |
+
except Exception as e:
|
| 35 |
+
logging.error(f"[MinimaxH3] Failed to import MMH3 Split Upscale node: {e}")
|
| 36 |
+
|
| 37 |
+
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/MMH3_Split_Upscale.cpython-312.pyc
ADDED
|
Binary file (47.6 kB). View file
|
|
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (1.4 kB). View file
|
|
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/minimax_h3_latent_upscaler_2d.cpython-312.pyc
ADDED
|
Binary file (25.7 kB). View file
|
|
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/__pycache__/minimax_h3_latent_upscaler_3d.cpython-312.pyc
ADDED
|
Binary file (38.1 kB). View file
|
|
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/minimax_h3_latent_upscaler_2d.py
ADDED
|
@@ -0,0 +1,479 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Minimax H3 Latent Upscaler - ComfyUI 推理节点 (2D主干 + Temporal 3D卷积)
|
| 3 |
+
- 使用 VideoLatentResizer (与训练代码完全一致)
|
| 4 |
+
- 自动检测模型结构并加载权重 (支持合并文件中的 upscaler. 前缀)
|
| 5 |
+
- 强制关闭注意力 (attn=False) 以优化推理速度
|
| 6 |
+
- 模型从 ComfyUI/models/latent_upscale_models/ 加载
|
| 7 |
+
"""
|
| 8 |
+
import torch
|
| 9 |
+
import torch.nn as nn
|
| 10 |
+
import torch.nn.functional as F
|
| 11 |
+
import os
|
| 12 |
+
import glob
|
| 13 |
+
import folder_paths
|
| 14 |
+
import re
|
| 15 |
+
from einops import rearrange
|
| 16 |
+
|
| 17 |
+
# ==========================================
|
| 18 |
+
# 注册模型文件夹
|
| 19 |
+
# ==========================================
|
| 20 |
+
_LATENT_UPSCALE_FOLDER = "latent_upscale_models"
|
| 21 |
+
if _LATENT_UPSCALE_FOLDER not in folder_paths.folder_names_and_paths:
|
| 22 |
+
folder_paths.add_model_folder_path(
|
| 23 |
+
_LATENT_UPSCALE_FOLDER,
|
| 24 |
+
os.path.join(folder_paths.models_dir, _LATENT_UPSCALE_FOLDER)
|
| 25 |
+
)
|
| 26 |
+
|
| 27 |
+
# ==========================================
|
| 28 |
+
# Minimax H3 归一化参数 (24通道)
|
| 29 |
+
# ==========================================
|
| 30 |
+
LATENTS_MEAN = [
|
| 31 |
+
0.858090341091156, -0.9606591463088989, 1.0661640167236328, -0.5090325474739075,
|
| 32 |
+
-0.2727581858634949, -1.3675414323806763, -0.2553254961967468, -0.26907554268836975,
|
| 33 |
+
-0.5376840829849243, -0.0464097298681736, 0.6657370328903198, 0.19690127670764923,
|
| 34 |
+
-0.5460608005523682, -0.4035342037677765, -0.23683024942874908, 0.25928452610969543,
|
| 35 |
+
-0.30133944749832153, 0.211341992020607, -1.1206848621368408, 0.3581933379173279,
|
| 36 |
+
-0.04225143790245056, 0.2604829967021942, 0.22864092886447906, 0.7056031823158264
|
| 37 |
+
]
|
| 38 |
+
LATENTS_STD = [
|
| 39 |
+
1.2223774194717407, 1.2767263650894165, 1.6831774711608887, 1.7549455165863037,
|
| 40 |
+
1.5636216402053833, 2.194143533706665, 0.9653137922286987, 1.0569885969161987,
|
| 41 |
+
0.841948926448822, 0.7729952931404114, 1.8955937623977661, 0.946841835975647,
|
| 42 |
+
0.7996809482574463, 0.44988900423049927, 0.7197399735450745, 0.6936293244361877,
|
| 43 |
+
2.961095094680786, 2.7694199085235596, 3.0496184825897217, 2.1088054180145264,
|
| 44 |
+
3.276226282119751, 3.1627357006073, 2.2816812992095947, 2.6127843856811523
|
| 45 |
+
]
|
| 46 |
+
|
| 47 |
+
def _make_norm_tensors(device, dtype):
|
| 48 |
+
mean = torch.tensor(LATENTS_MEAN, dtype=dtype, device=device).view(1, -1, 1, 1, 1)
|
| 49 |
+
std = torch.tensor(LATENTS_STD, dtype=dtype, device=device).view(1, -1, 1, 1, 1)
|
| 50 |
+
return mean, std
|
| 51 |
+
|
| 52 |
+
# ==========================================
|
| 53 |
+
# 与训练代码完全一致的网络组件 (2D + Temporal)
|
| 54 |
+
# ==========================================
|
| 55 |
+
def normalization(channels):
|
| 56 |
+
return nn.GroupNorm(32, channels)
|
| 57 |
+
|
| 58 |
+
def zero_module(module):
|
| 59 |
+
for p in module.parameters():
|
| 60 |
+
p.detach().zero_()
|
| 61 |
+
return module
|
| 62 |
+
|
| 63 |
+
class AttnBlock(nn.Module):
|
| 64 |
+
def __init__(self, in_channels):
|
| 65 |
+
super().__init__()
|
| 66 |
+
self.norm = normalization(in_channels)
|
| 67 |
+
self.q = nn.Conv2d(in_channels, in_channels, 1)
|
| 68 |
+
self.k = nn.Conv2d(in_channels, in_channels, 1)
|
| 69 |
+
self.v = nn.Conv2d(in_channels, in_channels, 1)
|
| 70 |
+
self.proj_out = nn.Conv2d(in_channels, in_channels, 1)
|
| 71 |
+
|
| 72 |
+
def forward(self, x):
|
| 73 |
+
h = self.norm(x)
|
| 74 |
+
q = rearrange(self.q(h), "b c h w -> b 1 (h w) c")
|
| 75 |
+
k = rearrange(self.k(h), "b c h w -> b 1 (h w) c")
|
| 76 |
+
v = rearrange(self.v(h), "b c h w -> b 1 (h w) c")
|
| 77 |
+
h = F.scaled_dot_product_attention(q, k, v)
|
| 78 |
+
h = rearrange(h, "b 1 (h w) c -> b c h w", h=x.shape[-2], w=x.shape[-1])
|
| 79 |
+
return x + self.proj_out(h)
|
| 80 |
+
|
| 81 |
+
class ResBlockEmb(nn.Module):
|
| 82 |
+
def __init__(self, channels, emb_channels, dropout=0, out_channels=None):
|
| 83 |
+
super().__init__()
|
| 84 |
+
self.out_channels = out_channels or channels
|
| 85 |
+
self.in_layers = nn.Sequential(
|
| 86 |
+
normalization(channels), nn.SiLU(),
|
| 87 |
+
nn.Conv2d(channels, self.out_channels, 3, padding=1),
|
| 88 |
+
)
|
| 89 |
+
self.emb_layers = nn.Sequential(
|
| 90 |
+
nn.SiLU(), nn.Linear(emb_channels, 2 * self.out_channels),
|
| 91 |
+
)
|
| 92 |
+
self.out_norm = normalization(self.out_channels)
|
| 93 |
+
self.out_layers = nn.Sequential(
|
| 94 |
+
nn.SiLU(), nn.Dropout(p=dropout),
|
| 95 |
+
zero_module(nn.Conv2d(self.out_channels, self.out_channels, 3, padding=1)),
|
| 96 |
+
)
|
| 97 |
+
self.skip = (
|
| 98 |
+
nn.Conv2d(channels, self.out_channels, 1)
|
| 99 |
+
if self.out_channels != channels else nn.Identity()
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
def forward(self, x, emb):
|
| 103 |
+
h = self.in_layers(x)
|
| 104 |
+
emb_out = self.emb_layers(emb).type(h.dtype)
|
| 105 |
+
while len(emb_out.shape) < len(h.shape):
|
| 106 |
+
emb_out = emb_out[..., None]
|
| 107 |
+
scale, shift = torch.chunk(emb_out, 2, dim=1)
|
| 108 |
+
h = self.out_norm(h) * (1 + scale) + shift
|
| 109 |
+
h = self.out_layers(h)
|
| 110 |
+
return self.skip(x) + h
|
| 111 |
+
|
| 112 |
+
class TemporalConv(nn.Module):
|
| 113 |
+
def __init__(self, channels, kernel_size=5):
|
| 114 |
+
super().__init__()
|
| 115 |
+
padding = kernel_size // 2
|
| 116 |
+
self.norm = normalization(channels)
|
| 117 |
+
self.dwconv = nn.Conv3d(channels, channels,
|
| 118 |
+
kernel_size=(kernel_size, 1, 1),
|
| 119 |
+
padding=(padding, 0, 0),
|
| 120 |
+
groups=channels)
|
| 121 |
+
self.pwconv = nn.Conv3d(channels, channels, kernel_size=1)
|
| 122 |
+
nn.init.zeros_(self.pwconv.weight)
|
| 123 |
+
nn.init.zeros_(self.pwconv.bias)
|
| 124 |
+
|
| 125 |
+
def forward(self, x):
|
| 126 |
+
identity = x
|
| 127 |
+
B, C, T, H, W = x.shape
|
| 128 |
+
# 先 reshape 为 (B*T, C, H, W) 应用 2D norm
|
| 129 |
+
h = rearrange(x, "b c t h w -> (b t) c h w")
|
| 130 |
+
h = self.norm(h)
|
| 131 |
+
h = rearrange(h, "(b t) c h w -> b c t h w", b=B, t=T)
|
| 132 |
+
h = F.silu(h)
|
| 133 |
+
h = self.dwconv(h)
|
| 134 |
+
h = self.pwconv(h)
|
| 135 |
+
return identity + h
|
| 136 |
+
|
| 137 |
+
class LatentResizer(nn.Module):
|
| 138 |
+
"""2D 主干 (与训练代码完全一致)"""
|
| 139 |
+
def __init__(self, in_channels=24, in_blocks=12, out_blocks=12,
|
| 140 |
+
channels=640, dropout=0.1, attn=False):
|
| 141 |
+
super().__init__()
|
| 142 |
+
self.conv_in = nn.Conv2d(in_channels, channels, 3, padding=1)
|
| 143 |
+
embed_dim = 64
|
| 144 |
+
self.embed = nn.Sequential(
|
| 145 |
+
nn.Linear(1, embed_dim), nn.SiLU(), nn.Linear(embed_dim, embed_dim))
|
| 146 |
+
self.in_blocks = nn.ModuleList()
|
| 147 |
+
for b in range(in_blocks):
|
| 148 |
+
if (b == 1 or b == in_blocks - 1) and attn:
|
| 149 |
+
self.in_blocks.append(AttnBlock(channels))
|
| 150 |
+
self.in_blocks.append(ResBlockEmb(channels, embed_dim, dropout))
|
| 151 |
+
self.out_blocks = nn.ModuleList()
|
| 152 |
+
for b in range(out_blocks):
|
| 153 |
+
if (b == 1 or b == out_blocks - 1) and attn:
|
| 154 |
+
self.out_blocks.append(AttnBlock(channels))
|
| 155 |
+
self.out_blocks.append(ResBlockEmb(channels, embed_dim, dropout))
|
| 156 |
+
self.norm_out = normalization(channels)
|
| 157 |
+
self.conv_out = nn.Conv2d(channels, in_channels, 3, padding=1)
|
| 158 |
+
|
| 159 |
+
def forward(self, x, scale=None, target_hw=None):
|
| 160 |
+
if target_hw is not None:
|
| 161 |
+
size = target_hw
|
| 162 |
+
elif scale is not None:
|
| 163 |
+
size = tuple(int(round(s * scale)) for s in x.shape[-2:])
|
| 164 |
+
else:
|
| 165 |
+
return x
|
| 166 |
+
if size == x.shape[-2:]:
|
| 167 |
+
return x
|
| 168 |
+
|
| 169 |
+
scale_emb = torch.tensor(
|
| 170 |
+
[scale - 1 if scale is not None else 0.0],
|
| 171 |
+
dtype=x.dtype, device=x.device).unsqueeze(0)
|
| 172 |
+
emb = self.embed(scale_emb)
|
| 173 |
+
|
| 174 |
+
x = self.conv_in(x)
|
| 175 |
+
for b in self.in_blocks:
|
| 176 |
+
if isinstance(b, ResBlockEmb):
|
| 177 |
+
x = b(x, emb)
|
| 178 |
+
else:
|
| 179 |
+
x = b(x)
|
| 180 |
+
x = F.interpolate(x, size=size, mode="bilinear")
|
| 181 |
+
for b in self.out_blocks:
|
| 182 |
+
if isinstance(b, ResBlockEmb):
|
| 183 |
+
x = b(x, emb)
|
| 184 |
+
else:
|
| 185 |
+
x = b(x)
|
| 186 |
+
x = self.norm_out(x)
|
| 187 |
+
x = F.silu(x)
|
| 188 |
+
x = self.conv_out(x)
|
| 189 |
+
return x
|
| 190 |
+
|
| 191 |
+
class VideoLatentResizer(nn.Module):
|
| 192 |
+
"""5D 包装器 (含 Temporal 块) 与训练代码完全一致"""
|
| 193 |
+
def __init__(self, in_channels=24, in_blocks=12, out_blocks=12,
|
| 194 |
+
channels=640, dropout=0.1, attn=False,
|
| 195 |
+
temporal_every=2, temporal_kernel=5):
|
| 196 |
+
super().__init__()
|
| 197 |
+
self.resizer = LatentResizer(
|
| 198 |
+
in_channels=in_channels,
|
| 199 |
+
in_blocks=in_blocks,
|
| 200 |
+
out_blocks=out_blocks,
|
| 201 |
+
channels=channels,
|
| 202 |
+
dropout=dropout,
|
| 203 |
+
attn=attn,
|
| 204 |
+
)
|
| 205 |
+
self.temporal_blocks = nn.ModuleList()
|
| 206 |
+
if temporal_every > 0:
|
| 207 |
+
self.temporal_blocks.append(TemporalConv(channels, temporal_kernel))
|
| 208 |
+
self.temporal_blocks.append(TemporalConv(channels, temporal_kernel))
|
| 209 |
+
self.temporal_every = temporal_every
|
| 210 |
+
self.temporal_kernel = temporal_kernel
|
| 211 |
+
|
| 212 |
+
def forward(self, x, scale=None, target_hw=None):
|
| 213 |
+
B, C, T, H, W = x.shape
|
| 214 |
+
if target_hw is not None:
|
| 215 |
+
size = target_hw
|
| 216 |
+
elif scale is not None:
|
| 217 |
+
size = (int(round(H * scale)), int(round(W * scale)))
|
| 218 |
+
else:
|
| 219 |
+
size = (H, W)
|
| 220 |
+
|
| 221 |
+
if len(self.temporal_blocks) == 0:
|
| 222 |
+
x_flat = rearrange(x, "b c t h w -> (b t) c h w")
|
| 223 |
+
out = self.resizer(x_flat, scale=scale, target_hw=size)
|
| 224 |
+
return rearrange(out, "(b t) c h w -> b c t h w", b=B, t=T)
|
| 225 |
+
|
| 226 |
+
x_flat = rearrange(x, "b c t h w -> (b t) c h w")
|
| 227 |
+
emb = torch.tensor(
|
| 228 |
+
[scale - 1 if scale is not None else 0.0],
|
| 229 |
+
dtype=x.dtype, device=x.device).unsqueeze(0)
|
| 230 |
+
emb = self.resizer.embed(emb)
|
| 231 |
+
|
| 232 |
+
out = self.resizer.conv_in(x_flat)
|
| 233 |
+
for i, block in enumerate(self.resizer.in_blocks):
|
| 234 |
+
if isinstance(block, ResBlockEmb):
|
| 235 |
+
emb_t = emb.expand(B * T, -1)
|
| 236 |
+
out = block(out, emb_t)
|
| 237 |
+
else:
|
| 238 |
+
out = block(out)
|
| 239 |
+
if i % self.temporal_every == 0:
|
| 240 |
+
out_3d = rearrange(out, "(b t) c h w -> b c t h w", b=B, t=T)
|
| 241 |
+
out_3d = self.temporal_blocks[0](out_3d)
|
| 242 |
+
out = rearrange(out_3d, "b c t h w -> (b t) c h w")
|
| 243 |
+
|
| 244 |
+
out = F.interpolate(out, size=size, mode="bilinear")
|
| 245 |
+
|
| 246 |
+
for i, block in enumerate(self.resizer.out_blocks):
|
| 247 |
+
if isinstance(block, ResBlockEmb):
|
| 248 |
+
emb_t = emb.expand(B * T, -1)
|
| 249 |
+
out = block(out, emb_t)
|
| 250 |
+
else:
|
| 251 |
+
out = block(out)
|
| 252 |
+
if i % self.temporal_every == 0:
|
| 253 |
+
out_3d = rearrange(out, "(b t) c h w -> b c t h w", b=B, t=T)
|
| 254 |
+
out_3d = self.temporal_blocks[1](out_3d)
|
| 255 |
+
out = rearrange(out_3d, "b c t h w -> (b t) c h w")
|
| 256 |
+
|
| 257 |
+
out = self.resizer.norm_out(out)
|
| 258 |
+
out = F.silu(out)
|
| 259 |
+
out = self.resizer.conv_out(out)
|
| 260 |
+
out = rearrange(out, "(b t) c h w -> b c t h w", b=B, t=T)
|
| 261 |
+
return out
|
| 262 |
+
|
| 263 |
+
# ==========================================
|
| 264 |
+
# 模型加载 (适配训练权重)
|
| 265 |
+
# ==========================================
|
| 266 |
+
MODEL_CACHE = {}
|
| 267 |
+
|
| 268 |
+
def get_models_dir():
|
| 269 |
+
return folder_paths.get_folder_paths(_LATENT_UPSCALE_FOLDER)[0]
|
| 270 |
+
|
| 271 |
+
def scan_models():
|
| 272 |
+
files = []
|
| 273 |
+
model_dir = get_models_dir()
|
| 274 |
+
for ext in ("*.pth", "*.safetensors"):
|
| 275 |
+
files.extend(glob.glob(os.path.join(model_dir, ext)))
|
| 276 |
+
names = sorted(os.path.basename(f) for f in files)
|
| 277 |
+
return names if names else [f"(请将模型放入: {model_dir})"]
|
| 278 |
+
|
| 279 |
+
def _load_raw_sd(path):
|
| 280 |
+
if path.endswith('.safetensors'):
|
| 281 |
+
from safetensors.torch import load_file
|
| 282 |
+
sd = load_file(path, device='cpu')
|
| 283 |
+
else:
|
| 284 |
+
sd = torch.load(path, map_location='cpu', weights_only=False)
|
| 285 |
+
if isinstance(sd, dict) and 'model' in sd:
|
| 286 |
+
sd = sd['model']
|
| 287 |
+
# 转换 FP8 为 FP16 方便处理
|
| 288 |
+
sd = {k: v.to(torch.float16) if v.dtype == torch.float8_e4m3fn else v
|
| 289 |
+
for k, v in sd.items()}
|
| 290 |
+
return sd
|
| 291 |
+
|
| 292 |
+
def _extract_upscaler_sd(sd):
|
| 293 |
+
# 兼容合并权重中的 upscaler. 前缀
|
| 294 |
+
if any(k.startswith("upscaler.") for k in sd):
|
| 295 |
+
return {k[len("upscaler."):]: v for k, v in sd.items() if k.startswith("upscaler.")}
|
| 296 |
+
return sd
|
| 297 |
+
|
| 298 |
+
def _detect_arch(sd):
|
| 299 |
+
"""
|
| 300 |
+
从 state_dict 推断模型结构参数 (与训练代码一致)
|
| 301 |
+
返回: dict 包含 in_blocks, out_blocks, channels, in_channels,
|
| 302 |
+
dropout, attn, temporal_every, temporal_kernel
|
| 303 |
+
"""
|
| 304 |
+
cfg = {
|
| 305 |
+
"in_channels": 24,
|
| 306 |
+
"in_blocks": 12,
|
| 307 |
+
"out_blocks": 12,
|
| 308 |
+
"channels": 640,
|
| 309 |
+
"dropout": 0.1,
|
| 310 |
+
"attn": False,
|
| 311 |
+
"temporal_every": 2,
|
| 312 |
+
"temporal_kernel": 5,
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
# 从 conv_in 推断通道数
|
| 316 |
+
if 'resizer.conv_in.weight' in sd:
|
| 317 |
+
w = sd['resizer.conv_in.weight']
|
| 318 |
+
cfg["in_channels"] = w.shape[1]
|
| 319 |
+
cfg["channels"] = w.shape[0]
|
| 320 |
+
|
| 321 |
+
# 统计 in_blocks 中的 ResBlock 数量 (通过 in_layers 键)
|
| 322 |
+
in_ids = set()
|
| 323 |
+
out_ids = set()
|
| 324 |
+
for k in sd.keys():
|
| 325 |
+
m = re.match(r'resizer\.in_blocks\.(\d+)\.in_layers\.', k)
|
| 326 |
+
if m:
|
| 327 |
+
in_ids.add(int(m.group(1)))
|
| 328 |
+
m = re.match(r'resizer\.out_blocks\.(\d+)\.in_layers\.', k)
|
| 329 |
+
if m:
|
| 330 |
+
out_ids.add(int(m.group(1)))
|
| 331 |
+
|
| 332 |
+
if in_ids:
|
| 333 |
+
cfg["in_blocks"] = len(in_ids)
|
| 334 |
+
if out_ids:
|
| 335 |
+
cfg["out_blocks"] = len(out_ids)
|
| 336 |
+
|
| 337 |
+
# 检测是否包含 temporal 块
|
| 338 |
+
has_temporal = any('temporal_blocks' in k for k in sd)
|
| 339 |
+
if has_temporal:
|
| 340 |
+
# 尝试从 temporal_blocks.0.dwconv.weight 提取 kernel size
|
| 341 |
+
for k in sd.keys():
|
| 342 |
+
if 'temporal_blocks.0.dwconv.weight' in k:
|
| 343 |
+
kernel_t = sd[k].shape[2]
|
| 344 |
+
cfg["temporal_kernel"] = kernel_t
|
| 345 |
+
break
|
| 346 |
+
cfg["temporal_every"] = 2 # 训练固定值
|
| 347 |
+
else:
|
| 348 |
+
cfg["temporal_every"] = 0
|
| 349 |
+
|
| 350 |
+
# 检测是否包含 attn (但推理时强制关闭)
|
| 351 |
+
if any('attn' in k for k in sd):
|
| 352 |
+
cfg["attn"] = True # 仅用于记录,实际加载时强制 False
|
| 353 |
+
|
| 354 |
+
# 推理时强制 attn=False 以提高性能
|
| 355 |
+
cfg["attn"] = False
|
| 356 |
+
return cfg
|
| 357 |
+
|
| 358 |
+
def load_model(name, device, precision):
|
| 359 |
+
cache_key = f"{name}::{device}::{precision}"
|
| 360 |
+
if cache_key in MODEL_CACHE:
|
| 361 |
+
return MODEL_CACHE[cache_key]
|
| 362 |
+
|
| 363 |
+
path = os.path.join(get_models_dir(), name)
|
| 364 |
+
if not os.path.exists(path):
|
| 365 |
+
raise FileNotFoundError(f"模型文件不存在: {path}")
|
| 366 |
+
|
| 367 |
+
raw_sd = _load_raw_sd(path)
|
| 368 |
+
up_sd = _extract_upscaler_sd(raw_sd)
|
| 369 |
+
|
| 370 |
+
cfg = _detect_arch(up_sd)
|
| 371 |
+
|
| 372 |
+
# 构建模型 (与训练完全一致)
|
| 373 |
+
model = VideoLatentResizer(
|
| 374 |
+
in_channels=cfg["in_channels"],
|
| 375 |
+
in_blocks=cfg["in_blocks"],
|
| 376 |
+
out_blocks=cfg["out_blocks"],
|
| 377 |
+
channels=cfg["channels"],
|
| 378 |
+
dropout=cfg["dropout"],
|
| 379 |
+
attn=cfg["attn"], # 强制 False
|
| 380 |
+
temporal_every=cfg["temporal_every"],
|
| 381 |
+
temporal_kernel=cfg["temporal_kernel"],
|
| 382 |
+
)
|
| 383 |
+
|
| 384 |
+
# 加载权重,忽略不匹配的键 (如 attn 层若训练有但推理强制关闭)
|
| 385 |
+
missing, unexpected = model.load_state_dict(up_sd, strict=False)
|
| 386 |
+
if missing:
|
| 387 |
+
print(f"[MinimaxH3] 缺少键: {missing[:5]}... (可能由于 attn 强制关闭)")
|
| 388 |
+
if unexpected:
|
| 389 |
+
print(f"[MinimaxH3] 多余键: {unexpected[:5]}... (可能来自合并文件的其他部分)")
|
| 390 |
+
|
| 391 |
+
dtype = {"fp32": torch.float32, "fp16": torch.float16, "bf16": torch.bfloat16}.get(precision, torch.float32)
|
| 392 |
+
model = model.to(device).eval()
|
| 393 |
+
if dtype != torch.float32:
|
| 394 |
+
model = model.to(dtype)
|
| 395 |
+
|
| 396 |
+
MODEL_CACHE[cache_key] = model
|
| 397 |
+
|
| 398 |
+
print(f"[MinimaxH3] 加载放大模型: {name}")
|
| 399 |
+
print(f" Params: {sum(p.numel() for p in model.parameters()):,} | "
|
| 400 |
+
f"Attn: 强制关闭 | Temporal: {'✓' if cfg['temporal_every']>0 else '✗'} "
|
| 401 |
+
f"(every={cfg['temporal_every']}, kernel={cfg['temporal_kernel']})")
|
| 402 |
+
return model
|
| 403 |
+
|
| 404 |
+
# ==========================================
|
| 405 |
+
# ComfyUI 节点 (2D 版本)
|
| 406 |
+
# ==========================================
|
| 407 |
+
class MinimaxH3LatentUpscalerNode2D:
|
| 408 |
+
"""Minimax H3 Latent 放大节点 (2D主干 + Temporal,与训练模型兼容,scale 1.0~4.0)"""
|
| 409 |
+
@classmethod
|
| 410 |
+
def INPUT_TYPES(cls):
|
| 411 |
+
return {
|
| 412 |
+
"required": {
|
| 413 |
+
"latent": ("LATENT",),
|
| 414 |
+
"model_name": (scan_models(),),
|
| 415 |
+
"scale": ("FLOAT", {"default": 2.0, "min": 1.0, "max": 4.0, "step": 0.1}),
|
| 416 |
+
"device": (["cuda", "cpu"], {"default": "cuda"}),
|
| 417 |
+
"precision": (["fp32", "fp16", "bf16"], {"default": "fp32"}),
|
| 418 |
+
}
|
| 419 |
+
}
|
| 420 |
+
|
| 421 |
+
RETURN_TYPES = ("LATENT",)
|
| 422 |
+
FUNCTION = "run"
|
| 423 |
+
CATEGORY = "video/MinimaxH3"
|
| 424 |
+
|
| 425 |
+
def run(self, latent, model_name, scale, device, precision):
|
| 426 |
+
if model_name.startswith('('):
|
| 427 |
+
raise ValueError("请将模型文件放入 latent_upscale_models 目录")
|
| 428 |
+
|
| 429 |
+
if abs(scale - 1.0) < 1e-6:
|
| 430 |
+
return (latent,)
|
| 431 |
+
|
| 432 |
+
if scale < 1.0:
|
| 433 |
+
raise ValueError("仅支持放大 (scale >= 1.0)")
|
| 434 |
+
|
| 435 |
+
dev = torch.device(device if torch.cuda.is_available() else "cpu")
|
| 436 |
+
model = load_model(model_name, dev, precision)
|
| 437 |
+
|
| 438 |
+
s = latent["samples"].clone()
|
| 439 |
+
orig_dtype = s.dtype
|
| 440 |
+
# 确保是 5D (B, C, T, H, W)
|
| 441 |
+
if len(s.shape) == 4:
|
| 442 |
+
s = s.unsqueeze(2) # (B, C, 1, H, W)
|
| 443 |
+
|
| 444 |
+
compute_dtype = {"fp32": torch.float32, "fp16": torch.float16, "bf16": torch.bfloat16}[precision]
|
| 445 |
+
s = s.to(dev, compute_dtype)
|
| 446 |
+
|
| 447 |
+
# 归一化
|
| 448 |
+
norm_mean, norm_std = _make_norm_tensors(dev, compute_dtype)
|
| 449 |
+
s = (s - norm_mean) / norm_std
|
| 450 |
+
|
| 451 |
+
with torch.no_grad():
|
| 452 |
+
# 目标空间尺寸 (H, W),时间维度不变
|
| 453 |
+
T, H, W = s.shape[2], s.shape[3], s.shape[4]
|
| 454 |
+
target_hw = (int(round(H * scale)), int(round(W * scale)))
|
| 455 |
+
out = model(s, scale=scale, target_hw=target_hw)
|
| 456 |
+
|
| 457 |
+
# 反归一化
|
| 458 |
+
out = out * norm_std + norm_mean
|
| 459 |
+
|
| 460 |
+
# 还原维度
|
| 461 |
+
if len(latent["samples"].shape) == 4:
|
| 462 |
+
out = out.squeeze(2)
|
| 463 |
+
|
| 464 |
+
out = out.cpu().to(orig_dtype)
|
| 465 |
+
|
| 466 |
+
if dev.type == "cuda":
|
| 467 |
+
torch.cuda.empty_cache()
|
| 468 |
+
|
| 469 |
+
return ({"samples": out},)
|
| 470 |
+
|
| 471 |
+
# ==========================================
|
| 472 |
+
# 节点注册
|
| 473 |
+
# ==========================================
|
| 474 |
+
NODE_CLASS_MAPPINGS = {
|
| 475 |
+
"MinimaxH3LatentUpscalerNode2D": MinimaxH3LatentUpscalerNode2D,
|
| 476 |
+
}
|
| 477 |
+
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 478 |
+
"MinimaxH3LatentUpscalerNode2D": "Minimax H3 Latent Upscaler (2D)",
|
| 479 |
+
}
|
Comfyui_Minimax_h3_latent_Upscaler/nodes/minimax_h3_latent_upscaler_3d.py
ADDED
|
@@ -0,0 +1,655 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Minimax H3 Latent Upscaler - ComfyUI inference node (pure 3D conv version)
|
| 3 |
+
- [终极融合] 引入时间分块(Temporal Chunking)与 Replicate Padding,解决长视频 OOM 与末尾闪烁
|
| 4 |
+
- [底层黑科技] 显式 .contiguous() 消除隐式显存拷贝尖峰
|
| 5 |
+
- [底层黑科技] Zero-Copy 零拷贝加载模型,防止系统内存(RAM)峰值爆满
|
| 6 |
+
- [底层黑科技] 接入 ComfyUI 原生 soft_empty_cache,彻底清理显存碎片
|
| 7 |
+
- [终极整合] 推理结束后将模型踢回CPU,释放显存给后续节点(可选开关)
|
| 8 |
+
- [终极整合] 强制长宽双向对齐到32的倍数,彻底解决底部光带(Light Banding)问题
|
| 9 |
+
- [终极整合] 放弃 In-place 原地操作,保障 FP16/FP32 下的数值精度与画质
|
| 10 |
+
- [新增] 完美支持 ROCm (AMD GPU) 加速
|
| 11 |
+
- [新增] 支持子文件夹模型管理 (PR #30)
|
| 12 |
+
- [新增] 强制卸载模型开关 (force_unload)
|
| 13 |
+
- 3 resize modes: scale by multiplier / target dimensions / megapixels
|
| 14 |
+
- Auto-detects model architecture (channels, blocks, temporal layout)
|
| 15 |
+
"""
|
| 16 |
+
import torch
|
| 17 |
+
import torch.nn as nn
|
| 18 |
+
import torch.nn.functional as F
|
| 19 |
+
import os
|
| 20 |
+
import glob
|
| 21 |
+
import gc
|
| 22 |
+
import folder_paths
|
| 23 |
+
import re
|
| 24 |
+
from einops import rearrange
|
| 25 |
+
from enum import Enum
|
| 26 |
+
from typing import TypedDict
|
| 27 |
+
|
| 28 |
+
try:
|
| 29 |
+
import comfy.model_management as mm
|
| 30 |
+
HAS_COMFY_MM = True
|
| 31 |
+
except ImportError:
|
| 32 |
+
HAS_COMFY_MM = False
|
| 33 |
+
|
| 34 |
+
try:
|
| 35 |
+
from comfy_api.latest import ComfyExtension, io
|
| 36 |
+
from typing_extensions import override
|
| 37 |
+
USE_NEW_API = True
|
| 38 |
+
except ImportError:
|
| 39 |
+
USE_NEW_API = False
|
| 40 |
+
class io:
|
| 41 |
+
class ComfyNode: pass
|
| 42 |
+
class Schema: pass
|
| 43 |
+
class NodeOutput: pass
|
| 44 |
+
class AnyType:
|
| 45 |
+
@staticmethod
|
| 46 |
+
def Input(*args, **kwargs): return args[0] if args else "ANY"
|
| 47 |
+
@staticmethod
|
| 48 |
+
def Output(*args, **kwargs): return args[0] if args else "ANY"
|
| 49 |
+
class Combo:
|
| 50 |
+
@staticmethod
|
| 51 |
+
def Input(*args, **kwargs): return args[0] if args else "COMBO"
|
| 52 |
+
class Float:
|
| 53 |
+
@staticmethod
|
| 54 |
+
def Input(*args, **kwargs): return "FLOAT"
|
| 55 |
+
class Int:
|
| 56 |
+
@staticmethod
|
| 57 |
+
def Input(*args, **kwargs): return "INT"
|
| 58 |
+
class Boolean:
|
| 59 |
+
@staticmethod
|
| 60 |
+
def Input(*args, **kwargs): return "BOOLEAN"
|
| 61 |
+
class DynamicCombo:
|
| 62 |
+
@staticmethod
|
| 63 |
+
def Input(*args, **kwargs): return args[0] if args else "DYNAMIC"
|
| 64 |
+
class Option: pass
|
| 65 |
+
class ComfyExtension: pass
|
| 66 |
+
def override(func): return func
|
| 67 |
+
|
| 68 |
+
# ==========================================
|
| 69 |
+
# Register model folder
|
| 70 |
+
# ==========================================
|
| 71 |
+
_LATENT_UPSCALE_FOLDER = "latent_upscale_models"
|
| 72 |
+
if _LATENT_UPSCALE_FOLDER not in folder_paths.folder_names_and_paths:
|
| 73 |
+
folder_paths.add_model_folder_path(
|
| 74 |
+
_LATENT_UPSCALE_FOLDER,
|
| 75 |
+
os.path.join(folder_paths.models_dir, _LATENT_UPSCALE_FOLDER)
|
| 76 |
+
)
|
| 77 |
+
|
| 78 |
+
VAE_DOWNSAMPLE = 16
|
| 79 |
+
|
| 80 |
+
# ==========================================
|
| 81 |
+
# Minimax H3 latent normalization stats (24 channels)
|
| 82 |
+
# ==========================================
|
| 83 |
+
LATENTS_MEAN = [
|
| 84 |
+
0.858090341091156, -0.9606591463088989, 1.0661640167236328, -0.5090325474739075,
|
| 85 |
+
-0.2727581858634949, -1.3675414323806763, -0.2553254961967468, -0.26907554268836975,
|
| 86 |
+
-0.5376840829849243, -0.0464097298681736, 0.6657370328903198, 0.19690127670764923,
|
| 87 |
+
-0.5460608005523682, -0.4035342037677765, -0.23683024942874908, 0.25928452610969543,
|
| 88 |
+
-0.30133944749832153, 0.211341992020607, -1.1206848621368408, 0.3581933379173279,
|
| 89 |
+
-0.04225143790245056, 0.2604829967021942, 0.22864092886447906, 0.7056031823158264
|
| 90 |
+
]
|
| 91 |
+
LATENTS_STD = [
|
| 92 |
+
1.2223774194717407, 1.2767263650894165, 1.6831774711608887, 1.7549455165863037,
|
| 93 |
+
1.5636216402053833, 2.194143533706665, 0.9653137922286987, 1.0569885969161987,
|
| 94 |
+
0.841948926448822, 0.7729952931404114, 1.8955937623977661, 0.946841835975647,
|
| 95 |
+
0.7996809482574463, 0.44988900423049927, 0.7197399735450745, 0.6936293244361877,
|
| 96 |
+
2.961095094680786, 2.7694199085235596, 3.0496184825897217, 2.1088054180145264,
|
| 97 |
+
3.276226282119751, 3.1627357006073, 2.2816812992095947, 2.6127843856811523
|
| 98 |
+
]
|
| 99 |
+
|
| 100 |
+
def _make_norm_tensors(device, dtype):
|
| 101 |
+
mean = torch.tensor(LATENTS_MEAN, dtype=dtype, device=device).view(1, -1, 1, 1, 1)
|
| 102 |
+
std = torch.tensor(LATENTS_STD, dtype=dtype, device=device).view(1, -1, 1, 1, 1)
|
| 103 |
+
return mean, std
|
| 104 |
+
|
| 105 |
+
# ==========================================
|
| 106 |
+
# ROCm / Device Helper Functions
|
| 107 |
+
# ==========================================
|
| 108 |
+
def _is_rocm_build():
|
| 109 |
+
return getattr(torch.version, "hip", None) is not None
|
| 110 |
+
|
| 111 |
+
def _resolve_device(backend):
|
| 112 |
+
if backend == "cpu":
|
| 113 |
+
return torch.device("cpu")
|
| 114 |
+
if backend == "rocm":
|
| 115 |
+
if not _is_rocm_build():
|
| 116 |
+
raise RuntimeError("ROCm was selected, but this PyTorch build has no HIP/ROCm support.")
|
| 117 |
+
if not torch.cuda.is_available():
|
| 118 |
+
raise RuntimeError("ROCm was selected, but PyTorch cannot access an AMD GPU.")
|
| 119 |
+
return torch.device("cuda")
|
| 120 |
+
if backend == "cuda":
|
| 121 |
+
return torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
| 122 |
+
raise ValueError(f"Unsupported device backend: {backend}")
|
| 123 |
+
|
| 124 |
+
def _backend_label(device):
|
| 125 |
+
if device.type == "cuda" and _is_rocm_build():
|
| 126 |
+
return f"ROCm/HIP {torch.version.hip}"
|
| 127 |
+
if device.type == "cuda":
|
| 128 |
+
return f"CUDA {getattr(torch.version, 'cuda', None) or 'unknown'}"
|
| 129 |
+
return "CPU"
|
| 130 |
+
|
| 131 |
+
# ==========================================
|
| 132 |
+
# 3D network components
|
| 133 |
+
# ==========================================
|
| 134 |
+
def normalization(channels):
|
| 135 |
+
return nn.GroupNorm(32, channels)
|
| 136 |
+
|
| 137 |
+
def zero_module(module):
|
| 138 |
+
for p in module.parameters():
|
| 139 |
+
p.detach().zero_()
|
| 140 |
+
return module
|
| 141 |
+
|
| 142 |
+
class AttnBlock3D(nn.Module):
|
| 143 |
+
def __init__(self, in_channels):
|
| 144 |
+
super().__init__()
|
| 145 |
+
self.norm = normalization(in_channels)
|
| 146 |
+
self.q = nn.Conv3d(in_channels, in_channels, 1)
|
| 147 |
+
self.k = nn.Conv3d(in_channels, in_channels, 1)
|
| 148 |
+
self.v = nn.Conv3d(in_channels, in_channels, 1)
|
| 149 |
+
self.proj_out = nn.Conv3d(in_channels, in_channels, 1)
|
| 150 |
+
|
| 151 |
+
def forward(self, x):
|
| 152 |
+
h = self.norm(x)
|
| 153 |
+
q = rearrange(self.q(h), "b c t h w -> b 1 (t h w) c")
|
| 154 |
+
k = rearrange(self.k(h), "b c t h w -> b 1 (t h w) c")
|
| 155 |
+
v = rearrange(self.v(h), "b c t h w -> b 1 (t h w) c")
|
| 156 |
+
h = F.scaled_dot_product_attention(q, k, v)
|
| 157 |
+
h = rearrange(h, "b 1 (t h w) c -> b c t h w", t=x.shape[2], h=x.shape[3], w=x.shape[4])
|
| 158 |
+
return x + self.proj_out(h)
|
| 159 |
+
|
| 160 |
+
class ResBlockEmb3D(nn.Module):
|
| 161 |
+
def __init__(self, channels, emb_channels, dropout=0, out_channels=None):
|
| 162 |
+
super().__init__()
|
| 163 |
+
self.out_channels = out_channels or channels
|
| 164 |
+
self.in_layers = nn.Sequential(
|
| 165 |
+
normalization(channels), nn.SiLU(),
|
| 166 |
+
nn.Conv3d(channels, self.out_channels, 3, padding=1),
|
| 167 |
+
)
|
| 168 |
+
self.emb_layers = nn.Sequential(
|
| 169 |
+
nn.SiLU(), nn.Linear(emb_channels, 2 * self.out_channels),
|
| 170 |
+
)
|
| 171 |
+
self.out_norm = normalization(self.out_channels)
|
| 172 |
+
self.out_layers = nn.Sequential(
|
| 173 |
+
nn.SiLU(), nn.Dropout(p=dropout),
|
| 174 |
+
zero_module(nn.Conv3d(self.out_channels, self.out_channels, 3, padding=1)),
|
| 175 |
+
)
|
| 176 |
+
self.skip = (
|
| 177 |
+
nn.Conv3d(channels, self.out_channels, 1)
|
| 178 |
+
if self.out_channels != channels else nn.Identity()
|
| 179 |
+
)
|
| 180 |
+
|
| 181 |
+
def forward(self, x, emb):
|
| 182 |
+
h = self.in_layers(x)
|
| 183 |
+
emb_out = self.emb_layers(emb).type(h.dtype)
|
| 184 |
+
while len(emb_out.shape) < len(h.shape):
|
| 185 |
+
emb_out = emb_out[..., None]
|
| 186 |
+
scale, shift = torch.chunk(emb_out, 2, dim=1)
|
| 187 |
+
h = self.out_norm(h) * (1 + scale) + shift
|
| 188 |
+
h = self.out_layers(h)
|
| 189 |
+
return self.skip(x) + h
|
| 190 |
+
|
| 191 |
+
class TemporalConv(nn.Module):
|
| 192 |
+
def __init__(self, channels, kernel_size=5):
|
| 193 |
+
super().__init__()
|
| 194 |
+
padding = kernel_size // 2
|
| 195 |
+
self.norm = normalization(channels)
|
| 196 |
+
self.dwconv = nn.Conv3d(channels, channels,
|
| 197 |
+
kernel_size=(kernel_size, 1, 1),
|
| 198 |
+
padding=(padding, 0, 0),
|
| 199 |
+
groups=channels)
|
| 200 |
+
self.pwconv = nn.Conv3d(channels, channels, kernel_size=1)
|
| 201 |
+
nn.init.zeros_(self.pwconv.weight)
|
| 202 |
+
nn.init.zeros_(self.pwconv.bias)
|
| 203 |
+
|
| 204 |
+
def forward(self, x):
|
| 205 |
+
identity = x
|
| 206 |
+
h = self.norm(x)
|
| 207 |
+
h = F.silu(h)
|
| 208 |
+
h = self.dwconv(h)
|
| 209 |
+
h = self.pwconv(h)
|
| 210 |
+
return identity + h
|
| 211 |
+
|
| 212 |
+
# ==========================================
|
| 213 |
+
# Pure-3D backbone with Temporal Chunking
|
| 214 |
+
# ==========================================
|
| 215 |
+
class LatentResizer3D(nn.Module):
|
| 216 |
+
def __init__(self, in_channels=24, in_blocks=12, out_blocks=12,
|
| 217 |
+
channels=512, dropout=0.1, attn=False,
|
| 218 |
+
temporal_every=2, temporal_kernel=5):
|
| 219 |
+
super().__init__()
|
| 220 |
+
self.conv_in = nn.Conv3d(in_channels, channels, 3, padding=1)
|
| 221 |
+
embed_dim = 64
|
| 222 |
+
self.embed = nn.Sequential(
|
| 223 |
+
nn.Linear(1, embed_dim), nn.SiLU(), nn.Linear(embed_dim, embed_dim))
|
| 224 |
+
|
| 225 |
+
self.in_blocks = nn.ModuleList()
|
| 226 |
+
for b in range(in_blocks):
|
| 227 |
+
if (b == 1 or b == in_blocks - 1) and attn:
|
| 228 |
+
self.in_blocks.append(AttnBlock3D(channels))
|
| 229 |
+
self.in_blocks.append(ResBlockEmb3D(channels, embed_dim, dropout))
|
| 230 |
+
if temporal_every > 0 and b % temporal_every == 0:
|
| 231 |
+
self.in_blocks.append(TemporalConv(channels, temporal_kernel))
|
| 232 |
+
|
| 233 |
+
self.out_blocks = nn.ModuleList()
|
| 234 |
+
for b in range(out_blocks):
|
| 235 |
+
if (b == 1 or b == out_blocks - 1) and attn:
|
| 236 |
+
self.out_blocks.append(AttnBlock3D(channels))
|
| 237 |
+
self.out_blocks.append(ResBlockEmb3D(channels, embed_dim, dropout))
|
| 238 |
+
if temporal_every > 0 and b % temporal_every == 0:
|
| 239 |
+
self.out_blocks.append(TemporalConv(channels, temporal_kernel))
|
| 240 |
+
|
| 241 |
+
self.norm_out = normalization(channels)
|
| 242 |
+
self.conv_out = nn.Conv3d(channels, in_channels, 3, padding=1)
|
| 243 |
+
|
| 244 |
+
def forward(self, x, scale=None, target_size=None, enable_chunking=True):
|
| 245 |
+
if target_size is not None:
|
| 246 |
+
size = target_size
|
| 247 |
+
elif scale is not None:
|
| 248 |
+
size = tuple(int(round(s * scale)) for s in x.shape[-3:])
|
| 249 |
+
else:
|
| 250 |
+
return x
|
| 251 |
+
|
| 252 |
+
if size == x.shape[-3:]:
|
| 253 |
+
return x
|
| 254 |
+
|
| 255 |
+
B, C, T, H, W = x.shape
|
| 256 |
+
|
| 257 |
+
tk = 0
|
| 258 |
+
for b in self.in_blocks:
|
| 259 |
+
if isinstance(b, TemporalConv):
|
| 260 |
+
tk = b.dwconv.weight.shape[2]
|
| 261 |
+
break
|
| 262 |
+
|
| 263 |
+
overlap = tk
|
| 264 |
+
chunk = 32
|
| 265 |
+
|
| 266 |
+
if not enable_chunking or T <= chunk:
|
| 267 |
+
return self._forward_seg(x, scale, size)
|
| 268 |
+
|
| 269 |
+
print(f"[MinimaxH3-3D] temporal chunking: T={T} chunks={(T + chunk - 1) // chunk} overlap={overlap}")
|
| 270 |
+
|
| 271 |
+
x_padded = F.pad(x, (0, 0, 0, 0, overlap, overlap), mode='replicate')
|
| 272 |
+
|
| 273 |
+
out_full = torch.zeros(B, C, T, size[-2], size[-1], device=x.device, dtype=x.dtype)
|
| 274 |
+
weight_full = torch.zeros(1, 1, T, 1, 1, device=x.device, dtype=x.dtype)
|
| 275 |
+
|
| 276 |
+
start = 0
|
| 277 |
+
while start < T:
|
| 278 |
+
seg_start = start
|
| 279 |
+
seg_end = min(T, start + chunk)
|
| 280 |
+
out_start = max(0, seg_start - overlap)
|
| 281 |
+
out_end = min(T, seg_end + overlap)
|
| 282 |
+
lo = max(0, out_start - overlap)
|
| 283 |
+
hi = min(T + 2 * overlap, out_end + overlap)
|
| 284 |
+
|
| 285 |
+
seg = x_padded[:, :, lo:hi].contiguous()
|
| 286 |
+
seg_size = (hi - lo, size[-2], size[-1])
|
| 287 |
+
seg_out = self._forward_seg(seg, scale, seg_size)
|
| 288 |
+
|
| 289 |
+
s0 = (out_start + overlap) - lo
|
| 290 |
+
s1 = s0 + (out_end - out_start)
|
| 291 |
+
valid_out = seg_out[:, :, s0:s1]
|
| 292 |
+
n_valid = out_end - out_start
|
| 293 |
+
|
| 294 |
+
weight = torch.ones(n_valid, device=x.device, dtype=x.dtype)
|
| 295 |
+
if seg_start > out_start:
|
| 296 |
+
blend_len = seg_start - out_start
|
| 297 |
+
weight[:blend_len] = torch.arange(1, blend_len + 1, device=x.device, dtype=x.dtype) / (blend_len + 1)
|
| 298 |
+
if out_end > seg_end:
|
| 299 |
+
blend_len = out_end - seg_end
|
| 300 |
+
weight[-blend_len:] = torch.arange(blend_len, 0, -1, device=x.device, dtype=x.dtype) / (blend_len + 1)
|
| 301 |
+
|
| 302 |
+
out_full[:, :, out_start:out_end] += valid_out * weight.view(1, 1, n_valid, 1, 1)
|
| 303 |
+
weight_full[:, :, out_start:out_end] += weight.view(1, 1, n_valid, 1, 1)
|
| 304 |
+
|
| 305 |
+
start += chunk
|
| 306 |
+
del seg, seg_out, valid_out
|
| 307 |
+
if start % (chunk * 4) == 0:
|
| 308 |
+
gc.collect()
|
| 309 |
+
|
| 310 |
+
out_full = out_full / weight_full.clamp(min=1e-8)
|
| 311 |
+
return out_full
|
| 312 |
+
|
| 313 |
+
def _forward_seg(self, x, scale, size):
|
| 314 |
+
scale_emb = torch.tensor(
|
| 315 |
+
[scale - 1 if scale is not None else 0.0],
|
| 316 |
+
dtype=x.dtype, device=x.device).unsqueeze(0)
|
| 317 |
+
emb = self.embed(scale_emb)
|
| 318 |
+
|
| 319 |
+
x = self.conv_in(x)
|
| 320 |
+
for b in self.in_blocks:
|
| 321 |
+
if isinstance(b, ResBlockEmb3D):
|
| 322 |
+
emb_t = emb.expand(x.shape[0], -1)
|
| 323 |
+
x = b(x, emb_t)
|
| 324 |
+
else:
|
| 325 |
+
x = b(x)
|
| 326 |
+
|
| 327 |
+
x = F.interpolate(x, size=size, mode="trilinear", align_corners=False)
|
| 328 |
+
|
| 329 |
+
for b in self.out_blocks:
|
| 330 |
+
if isinstance(b, ResBlockEmb3D):
|
| 331 |
+
emb_t = emb.expand(x.shape[0], -1)
|
| 332 |
+
x = b(x, emb_t)
|
| 333 |
+
else:
|
| 334 |
+
x = b(x)
|
| 335 |
+
|
| 336 |
+
x = self.norm_out(x)
|
| 337 |
+
x = F.silu(x)
|
| 338 |
+
x = self.conv_out(x)
|
| 339 |
+
return x
|
| 340 |
+
|
| 341 |
+
# ==========================================
|
| 342 |
+
# Model loading
|
| 343 |
+
# ==========================================
|
| 344 |
+
MODEL_CACHE = {}
|
| 345 |
+
|
| 346 |
+
def get_models_dir():
|
| 347 |
+
return folder_paths.get_folder_paths(_LATENT_UPSCALE_FOLDER)[0]
|
| 348 |
+
|
| 349 |
+
def scan_models():
|
| 350 |
+
names = [
|
| 351 |
+
name for name in folder_paths.get_filename_list(_LATENT_UPSCALE_FOLDER)
|
| 352 |
+
if os.path.splitext(name)[1].lower() in (".pth", ".safetensors")
|
| 353 |
+
]
|
| 354 |
+
return names if names else [f"(place models in: {get_models_dir()})"]
|
| 355 |
+
|
| 356 |
+
def _load_raw_sd(path):
|
| 357 |
+
if path.endswith('.safetensors'):
|
| 358 |
+
try:
|
| 359 |
+
from safetensors import safe_open
|
| 360 |
+
with safe_open(path, framework="pt", device="cpu") as f:
|
| 361 |
+
sd = {k: f.get_tensor(k) for k in f.keys()}
|
| 362 |
+
except ImportError:
|
| 363 |
+
from safetensors.torch import load_file
|
| 364 |
+
sd = load_file(path, device='cpu')
|
| 365 |
+
else:
|
| 366 |
+
sd = torch.load(path, map_location='cpu', weights_only=False)
|
| 367 |
+
|
| 368 |
+
if isinstance(sd, dict) and 'model' in sd:
|
| 369 |
+
sd = sd['model']
|
| 370 |
+
sd = {k: v.to(torch.float16) if v.dtype == torch.float8_e4m3fn else v
|
| 371 |
+
for k, v in sd.items()}
|
| 372 |
+
return sd
|
| 373 |
+
|
| 374 |
+
def _extract_upscaler_sd(sd):
|
| 375 |
+
if any(k.startswith("upscaler.") for k in sd):
|
| 376 |
+
return {k[len("upscaler."):]: v for k, v in sd.items() if k.startswith("upscaler.")}
|
| 377 |
+
return sd
|
| 378 |
+
|
| 379 |
+
def _detect_arch(sd):
|
| 380 |
+
cfg = {
|
| 381 |
+
"in_channels": 24, "in_blocks": 12, "out_blocks": 12, "channels": 512,
|
| 382 |
+
"dropout": 0.1, "attn": False, "temporal_every": 2, "temporal_kernel": 5,
|
| 383 |
+
}
|
| 384 |
+
conv_key = 'conv_in.weight'
|
| 385 |
+
if conv_key in sd:
|
| 386 |
+
cfg["in_channels"] = sd[conv_key].shape[1]
|
| 387 |
+
cfg["channels"] = sd[conv_key].shape[0]
|
| 388 |
+
|
| 389 |
+
in_ids, out_ids = set(), set()
|
| 390 |
+
temporal_in_indices, temporal_out_indices = set(), set()
|
| 391 |
+
for k in sd.keys():
|
| 392 |
+
m = re.match(r'in_blocks\.(\d+)\.in_layers\.', k)
|
| 393 |
+
if m: in_ids.add(int(m.group(1)))
|
| 394 |
+
m = re.match(r'out_blocks\.(\d+)\.in_layers\.', k)
|
| 395 |
+
if m: out_ids.add(int(m.group(1)))
|
| 396 |
+
m = re.match(r'in_blocks\.(\d+)\.dwconv\.weight', k)
|
| 397 |
+
if m: temporal_in_indices.add(int(m.group(1)))
|
| 398 |
+
m = re.match(r'out_blocks\.(\d+)\.dwconv\.weight', k)
|
| 399 |
+
if m: temporal_out_indices.add(int(m.group(1)))
|
| 400 |
+
|
| 401 |
+
if in_ids: cfg["in_blocks"] = len(in_ids)
|
| 402 |
+
if out_ids: cfg["out_blocks"] = len(out_ids)
|
| 403 |
+
|
| 404 |
+
if temporal_in_indices or temporal_out_indices:
|
| 405 |
+
cfg["temporal_every"] = 2
|
| 406 |
+
for k in sd.keys():
|
| 407 |
+
if 'dwconv.weight' in k and k.endswith('dwconv.weight'):
|
| 408 |
+
cfg["temporal_kernel"] = sd[k].shape[2]
|
| 409 |
+
break
|
| 410 |
+
else:
|
| 411 |
+
cfg["temporal_every"] = 0
|
| 412 |
+
|
| 413 |
+
if any('attn' in k for k in sd): cfg["attn"] = True
|
| 414 |
+
cfg["attn"] = False
|
| 415 |
+
return cfg
|
| 416 |
+
|
| 417 |
+
def load_model(name, device, precision):
|
| 418 |
+
backend_lbl = _backend_label(device)
|
| 419 |
+
cache_key = f"{name}::{backend_lbl}::{precision}"
|
| 420 |
+
if cache_key in MODEL_CACHE:
|
| 421 |
+
model = MODEL_CACHE[cache_key]
|
| 422 |
+
return model.to(device, non_blocking=True)
|
| 423 |
+
|
| 424 |
+
try:
|
| 425 |
+
path = folder_paths.get_full_path_or_raise(_LATENT_UPSCALE_FOLDER, name)
|
| 426 |
+
except Exception as e:
|
| 427 |
+
raise FileNotFoundError(f"Model file not found: {name}") from e
|
| 428 |
+
|
| 429 |
+
raw_sd = _load_raw_sd(path)
|
| 430 |
+
up_sd = _extract_upscaler_sd(raw_sd)
|
| 431 |
+
cfg = _detect_arch(up_sd)
|
| 432 |
+
|
| 433 |
+
model = LatentResizer3D(
|
| 434 |
+
in_channels=cfg["in_channels"], in_blocks=cfg["in_blocks"], out_blocks=cfg["out_blocks"],
|
| 435 |
+
channels=cfg["channels"], dropout=cfg["dropout"], attn=cfg["attn"],
|
| 436 |
+
temporal_every=cfg["temporal_every"], temporal_kernel=cfg["temporal_kernel"],
|
| 437 |
+
)
|
| 438 |
+
model.load_state_dict(up_sd, strict=True)
|
| 439 |
+
dtype = {"fp32": torch.float32, "fp16": torch.float16, "bf16": torch.bfloat16}.get(precision, torch.float32)
|
| 440 |
+
model = model.to(device).eval().requires_grad_(False)
|
| 441 |
+
if dtype != torch.float32:
|
| 442 |
+
model = model.to(dtype)
|
| 443 |
+
|
| 444 |
+
MODEL_CACHE[cache_key] = model
|
| 445 |
+
print(f"[MinimaxH3-3D] Loaded upscale model: {name}")
|
| 446 |
+
print(f" Params: {sum(p.numel() for p in model.parameters()):,} | "
|
| 447 |
+
f"Attn: forced off | Temporal: {'on' if cfg['temporal_every'] > 0 else 'off'} "
|
| 448 |
+
f"(every={cfg['temporal_every']}, kernel={cfg['temporal_kernel']}) | "
|
| 449 |
+
f"Backend: {backend_lbl} | Precision: {precision}")
|
| 450 |
+
return model
|
| 451 |
+
|
| 452 |
+
# ==========================================
|
| 453 |
+
# ComfyUI node (new API)
|
| 454 |
+
# ==========================================
|
| 455 |
+
class UpscaleMode(str, Enum):
|
| 456 |
+
SCALE_BY = "scale by multiplier"
|
| 457 |
+
TARGET_DIMENSIONS = "target dimensions"
|
| 458 |
+
MEGAPIXELS = "megapixels"
|
| 459 |
+
|
| 460 |
+
class UpscaleConfig(TypedDict):
|
| 461 |
+
mode: UpscaleMode
|
| 462 |
+
scale: float
|
| 463 |
+
width: int
|
| 464 |
+
height: int
|
| 465 |
+
megapixels: float
|
| 466 |
+
|
| 467 |
+
class MinimaxH3LatentUpscaler3D(io.ComfyNode):
|
| 468 |
+
"""Minimax H3 latent upscaler with Temporal Chunking and pixel-space alignment."""
|
| 469 |
+
|
| 470 |
+
@classmethod
|
| 471 |
+
def define_schema(cls):
|
| 472 |
+
return io.Schema(
|
| 473 |
+
node_id="MinimaxH3LatentUpscaler3D",
|
| 474 |
+
display_name="Minimax H3 Latent Upscaler (3D)",
|
| 475 |
+
category="video/MinimaxH3",
|
| 476 |
+
search_aliases=["minimax", "h3", "latent", "upscale", "3d"],
|
| 477 |
+
inputs=[
|
| 478 |
+
io.AnyType.Input("latent", tooltip="Input latent (image or video)."),
|
| 479 |
+
io.Combo.Input("model_name", options=scan_models(), tooltip="Minimax H3 upscale model."),
|
| 480 |
+
|
| 481 |
+
io.DynamicCombo.Input(
|
| 482 |
+
"mode",
|
| 483 |
+
tooltip="How the target size is computed.",
|
| 484 |
+
options=[
|
| 485 |
+
io.DynamicCombo.Option(UpscaleMode.SCALE_BY, [
|
| 486 |
+
io.Float.Input("scale", default=2.0, min=1.0, max=4.0, step=0.05, tooltip="Upscale factor."),
|
| 487 |
+
]),
|
| 488 |
+
io.DynamicCombo.Option(UpscaleMode.TARGET_DIMENSIONS, [
|
| 489 |
+
io.Int.Input("width", default=1280, min=64, max=8192, step=8, tooltip="Target pixel width."),
|
| 490 |
+
io.Int.Input("height", default=704, min=64, max=8192, step=8, tooltip="Target pixel height.")
|
| 491 |
+
]),
|
| 492 |
+
io.DynamicCombo.Option(UpscaleMode.MEGAPIXELS, [
|
| 493 |
+
io.Float.Input("megapixels", default=1.0, min=0.1, max=16.0, step=0.1, tooltip="Target megapixels.")
|
| 494 |
+
])
|
| 495 |
+
],
|
| 496 |
+
),
|
| 497 |
+
|
| 498 |
+
io.Int.Input("align", default=32, min=1, max=512, step=1,
|
| 499 |
+
tooltip="Pixel-space alignment. 32 is strictly recommended."),
|
| 500 |
+
|
| 501 |
+
# ---- 推理行为开关组 ----
|
| 502 |
+
io.Boolean.Input("enable_temporal_chunking", default=True,
|
| 503 |
+
tooltip="Enable temporal chunking to save VRAM for long videos and fix end-frame flickering."),
|
| 504 |
+
io.Boolean.Input("force_unload", default=True,
|
| 505 |
+
tooltip="Unload model to CPU after inference to free VRAM for subsequent nodes. "
|
| 506 |
+
"Disable if you run this node repeatedly to avoid reload overhead."),
|
| 507 |
+
|
| 508 |
+
# ---- 硬件 / 精度选项组 ----
|
| 509 |
+
io.Combo.Input("device", options=["cuda", "rocm", "cpu"], default="cuda"),
|
| 510 |
+
io.Combo.Input("precision", options=["fp32", "fp16", "bf16"], default="fp16"),
|
| 511 |
+
],
|
| 512 |
+
outputs=[
|
| 513 |
+
io.AnyType.Output("latent", tooltip="Upscaled latent."),
|
| 514 |
+
],
|
| 515 |
+
)
|
| 516 |
+
|
| 517 |
+
@classmethod
|
| 518 |
+
def execute(cls, latent: dict, model_name: str, mode: UpscaleConfig,
|
| 519 |
+
align: int, enable_temporal_chunking: bool, force_unload: bool,
|
| 520 |
+
device: str, precision: str) -> io.NodeOutput:
|
| 521 |
+
|
| 522 |
+
if model_name.startswith('('):
|
| 523 |
+
raise ValueError("Please place model files into the latent_upscale_models directory")
|
| 524 |
+
|
| 525 |
+
selected_mode = mode["mode"]
|
| 526 |
+
src = latent["samples"]
|
| 527 |
+
|
| 528 |
+
# --- MiniMax H3 AV latent support ---------------------------------
|
| 529 |
+
# ComfyUI packs H3's joint video+audio latent as a NestedTensor:
|
| 530 |
+
# tensors[0] = video (B, 24, T, H, W)
|
| 531 |
+
# tensors[1] = audio (B, 32, ...)
|
| 532 |
+
# Only the video part is spatially upscalable; the audio latent is
|
| 533 |
+
# carried through untouched and re-packed on the way out.
|
| 534 |
+
audio_part = None
|
| 535 |
+
if getattr(src, "is_nested", False):
|
| 536 |
+
if len(src.tensors) != 2:
|
| 537 |
+
raise ValueError(
|
| 538 |
+
f"Expected a MiniMax H3 AV latent (video+audio), got a nested "
|
| 539 |
+
f"tensor with {len(src.tensors)} components."
|
| 540 |
+
)
|
| 541 |
+
src, audio_part = src.tensors[0], src.tensors[1]
|
| 542 |
+
print(f"[MinimaxH3-3D] AV latent detected: video {tuple(src.shape)}, "
|
| 543 |
+
f"audio {tuple(audio_part.shape)} (audio passed through).")
|
| 544 |
+
# -------------------------------------------------------------------
|
| 545 |
+
|
| 546 |
+
orig_dtype = src.dtype
|
| 547 |
+
was_4d = (src.ndim == 4)
|
| 548 |
+
|
| 549 |
+
dev = _resolve_device(device)
|
| 550 |
+
compute_dtype = {"fp32": torch.float32, "fp16": torch.float16, "bf16": torch.bfloat16}[precision]
|
| 551 |
+
|
| 552 |
+
s = src.to(device=dev, dtype=compute_dtype, copy=True)
|
| 553 |
+
if was_4d:
|
| 554 |
+
s = s.unsqueeze(2)
|
| 555 |
+
|
| 556 |
+
b, c, t, h_in, w_in = s.shape
|
| 557 |
+
downsample = VAE_DOWNSAMPLE
|
| 558 |
+
|
| 559 |
+
# 1. Calculate Target Size
|
| 560 |
+
if selected_mode == UpscaleMode.SCALE_BY:
|
| 561 |
+
scale_val = mode["scale"]
|
| 562 |
+
w_pixel_target = w_in * downsample * scale_val
|
| 563 |
+
h_pixel_target = h_in * downsample * scale_val
|
| 564 |
+
effective_scale = scale_val
|
| 565 |
+
elif selected_mode == UpscaleMode.TARGET_DIMENSIONS:
|
| 566 |
+
w_pixel_target = float(mode["width"])
|
| 567 |
+
h_pixel_target = float(mode["height"])
|
| 568 |
+
effective_scale = (w_pixel_target / (w_in * downsample) + h_pixel_target / (h_in * downsample)) / 2.0
|
| 569 |
+
elif selected_mode == UpscaleMode.MEGAPIXELS:
|
| 570 |
+
mp = mode["megapixels"]
|
| 571 |
+
target_pixels = mp * 1024 * 1024
|
| 572 |
+
aspect_ratio = w_in / h_in
|
| 573 |
+
h_pixel_target = (target_pixels / aspect_ratio) ** 0.5
|
| 574 |
+
w_pixel_target = h_pixel_target * aspect_ratio
|
| 575 |
+
effective_scale = (w_pixel_target / (w_in * downsample) + h_pixel_target / (h_in * downsample)) / 2.0
|
| 576 |
+
else:
|
| 577 |
+
raise ValueError(f"Unsupported mode: {selected_mode}")
|
| 578 |
+
|
| 579 |
+
# 2. Pixel-space alignment (双向对齐)
|
| 580 |
+
alignment = max(1, align)
|
| 581 |
+
w_pixel_aligned = round(w_pixel_target / alignment) * alignment
|
| 582 |
+
h_pixel_aligned = round(h_pixel_target / alignment) * alignment
|
| 583 |
+
|
| 584 |
+
w_pixel_final = round(w_pixel_aligned / downsample) * downsample
|
| 585 |
+
h_pixel_final = round(h_pixel_aligned / downsample) * downsample
|
| 586 |
+
|
| 587 |
+
w_out = max(1, int(w_pixel_final // downsample))
|
| 588 |
+
h_out = max(1, int(h_pixel_final // downsample))
|
| 589 |
+
|
| 590 |
+
if effective_scale < 1.0 and (w_out < w_in or h_out < h_in):
|
| 591 |
+
raise ValueError("This model only supports upscaling (effective scale >= 1.0).")
|
| 592 |
+
|
| 593 |
+
if w_out == w_in and h_out == h_in:
|
| 594 |
+
return io.NodeOutput(latent)
|
| 595 |
+
|
| 596 |
+
print(f"[MinimaxH3-3D] Latent {w_in}x{h_in} -> {w_out}x{h_out} | "
|
| 597 |
+
f"Pixels {w_out * downsample}x{h_out * downsample} | scale={effective_scale:.3f}")
|
| 598 |
+
|
| 599 |
+
# 3. Inference
|
| 600 |
+
model = load_model(model_name, dev, precision)
|
| 601 |
+
norm_mean, norm_std = _make_norm_tensors(dev, compute_dtype)
|
| 602 |
+
|
| 603 |
+
with torch.inference_mode():
|
| 604 |
+
s_norm = (s - norm_mean) / norm_std
|
| 605 |
+
del s
|
| 606 |
+
|
| 607 |
+
out = model(s_norm, scale=effective_scale, target_size=(t, h_out, w_out),
|
| 608 |
+
enable_chunking=enable_temporal_chunking)
|
| 609 |
+
|
| 610 |
+
del s_norm
|
| 611 |
+
out = out * norm_std + norm_mean
|
| 612 |
+
|
| 613 |
+
if was_4d:
|
| 614 |
+
out = out.squeeze(2)
|
| 615 |
+
|
| 616 |
+
out = out.to(device="cpu", dtype=orig_dtype, non_blocking=True)
|
| 617 |
+
|
| 618 |
+
# 4. VRAM Management
|
| 619 |
+
if dev.type == "cuda":
|
| 620 |
+
if force_unload:
|
| 621 |
+
model.to("cpu", non_blocking=True)
|
| 622 |
+
print("[MinimaxH3-3D] ✅ Model offloaded to CPU. VRAM released.")
|
| 623 |
+
if HAS_COMFY_MM:
|
| 624 |
+
mm.soft_empty_cache()
|
| 625 |
+
else:
|
| 626 |
+
torch.cuda.empty_cache()
|
| 627 |
+
gc.collect()
|
| 628 |
+
|
| 629 |
+
if audio_part is not None:
|
| 630 |
+
import comfy.nested_tensor
|
| 631 |
+
audio_out = audio_part.to(device=out.device)
|
| 632 |
+
return io.NodeOutput(
|
| 633 |
+
{"samples": comfy.nested_tensor.NestedTensor((out, audio_out))}
|
| 634 |
+
)
|
| 635 |
+
|
| 636 |
+
return io.NodeOutput({"samples": out})
|
| 637 |
+
|
| 638 |
+
# ==========================================
|
| 639 |
+
# Registration
|
| 640 |
+
# ==========================================
|
| 641 |
+
if USE_NEW_API:
|
| 642 |
+
class MinimaxH3Extension(ComfyExtension):
|
| 643 |
+
@override
|
| 644 |
+
async def get_node_list(self) -> list[type[io.ComfyNode]]:
|
| 645 |
+
return [MinimaxH3LatentUpscaler3D]
|
| 646 |
+
|
| 647 |
+
async def comfy_entrypoint() -> MinimaxH3Extension:
|
| 648 |
+
return MinimaxH3Extension()
|
| 649 |
+
|
| 650 |
+
NODE_CLASS_MAPPINGS = {
|
| 651 |
+
"MinimaxH3LatentUpscaler3D": MinimaxH3LatentUpscaler3D,
|
| 652 |
+
}
|
| 653 |
+
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 654 |
+
"MinimaxH3LatentUpscaler3D": "Minimax H3 Latent Upscaler (3D)",
|
| 655 |
+
}
|
Comfyui_Minimax_h3_latent_Upscaler/workflow_templates/minimax_h3_i2v_Latent Upscaler example workflow2.json
ADDED
|
@@ -0,0 +1,3003 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "b775e54a-5a89-47be-943b-be5a8059239c",
|
| 3 |
+
"revision": 0,
|
| 4 |
+
"last_node_id": 42,
|
| 5 |
+
"last_link_id": 58,
|
| 6 |
+
"nodes": [
|
| 7 |
+
{
|
| 8 |
+
"id": 1,
|
| 9 |
+
"type": "VHS_VideoCombine",
|
| 10 |
+
"pos": [
|
| 11 |
+
3182.018173615327,
|
| 12 |
+
5760.395250046636
|
| 13 |
+
],
|
| 14 |
+
"size": [
|
| 15 |
+
210,
|
| 16 |
+
334
|
| 17 |
+
],
|
| 18 |
+
"flags": {},
|
| 19 |
+
"order": 34,
|
| 20 |
+
"mode": 4,
|
| 21 |
+
"inputs": [
|
| 22 |
+
{
|
| 23 |
+
"label": "图像",
|
| 24 |
+
"name": "images",
|
| 25 |
+
"type": "IMAGE",
|
| 26 |
+
"link": 1
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"label": "音频",
|
| 30 |
+
"name": "audio",
|
| 31 |
+
"shape": 7,
|
| 32 |
+
"type": "AUDIO",
|
| 33 |
+
"link": 2
|
| 34 |
+
},
|
| 35 |
+
{
|
| 36 |
+
"label": "批次管理",
|
| 37 |
+
"name": "meta_batch",
|
| 38 |
+
"shape": 7,
|
| 39 |
+
"type": "VHS_BatchManager",
|
| 40 |
+
"link": null
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"name": "vae",
|
| 44 |
+
"shape": 7,
|
| 45 |
+
"type": "VAE",
|
| 46 |
+
"link": null
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"label": "帧率",
|
| 50 |
+
"name": "frame_rate",
|
| 51 |
+
"type": "FLOAT",
|
| 52 |
+
"widget": {
|
| 53 |
+
"name": "frame_rate"
|
| 54 |
+
},
|
| 55 |
+
"link": null
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"label": "循环次数",
|
| 59 |
+
"name": "loop_count",
|
| 60 |
+
"type": "INT",
|
| 61 |
+
"widget": {
|
| 62 |
+
"name": "loop_count"
|
| 63 |
+
},
|
| 64 |
+
"link": null
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"label": "文件名前缀",
|
| 68 |
+
"name": "filename_prefix",
|
| 69 |
+
"type": "STRING",
|
| 70 |
+
"widget": {
|
| 71 |
+
"name": "filename_prefix"
|
| 72 |
+
},
|
| 73 |
+
"link": null
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"label": "格式",
|
| 77 |
+
"name": "format",
|
| 78 |
+
"type": "COMBO",
|
| 79 |
+
"widget": {
|
| 80 |
+
"name": "format"
|
| 81 |
+
},
|
| 82 |
+
"link": null
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"label": "Ping-Pong",
|
| 86 |
+
"name": "pingpong",
|
| 87 |
+
"type": "BOOLEAN",
|
| 88 |
+
"widget": {
|
| 89 |
+
"name": "pingpong"
|
| 90 |
+
},
|
| 91 |
+
"link": null
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"label": "保存到输出文件夹",
|
| 95 |
+
"name": "save_output",
|
| 96 |
+
"type": "BOOLEAN",
|
| 97 |
+
"widget": {
|
| 98 |
+
"name": "save_output"
|
| 99 |
+
},
|
| 100 |
+
"link": null
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"label": "保存元数据",
|
| 104 |
+
"name": "save_metadata",
|
| 105 |
+
"type": "BOOLEAN",
|
| 106 |
+
"widget": {
|
| 107 |
+
"name": "save_metadata"
|
| 108 |
+
},
|
| 109 |
+
"link": null
|
| 110 |
+
},
|
| 111 |
+
{
|
| 112 |
+
"label": "修剪音频",
|
| 113 |
+
"name": "trim_to_audio",
|
| 114 |
+
"type": "BOOLEAN",
|
| 115 |
+
"widget": {
|
| 116 |
+
"name": "trim_to_audio"
|
| 117 |
+
},
|
| 118 |
+
"link": null
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"outputs": [
|
| 122 |
+
{
|
| 123 |
+
"label": "文件名",
|
| 124 |
+
"name": "Filenames",
|
| 125 |
+
"type": "VHS_FILENAMES",
|
| 126 |
+
"links": null
|
| 127 |
+
}
|
| 128 |
+
],
|
| 129 |
+
"title": "合并为视频",
|
| 130 |
+
"properties": {
|
| 131 |
+
"ue_properties": {
|
| 132 |
+
"widget_ue_connectable": {},
|
| 133 |
+
"input_ue_unconnectable": {},
|
| 134 |
+
"version": "7.8"
|
| 135 |
+
},
|
| 136 |
+
"cnr_id": "comfyui-videohelpersuite",
|
| 137 |
+
"ver": "4ee72c065db22c9d96c2427954dc69e7b908444b",
|
| 138 |
+
"Node name for S&R": "VHS_VideoCombine"
|
| 139 |
+
},
|
| 140 |
+
"widgets_values": {
|
| 141 |
+
"frame_rate": 24,
|
| 142 |
+
"loop_count": 0,
|
| 143 |
+
"filename_prefix": "AnimateDiff",
|
| 144 |
+
"format": "video/h264-mp4",
|
| 145 |
+
"pix_fmt": "yuv420p",
|
| 146 |
+
"crf": 19,
|
| 147 |
+
"save_metadata": true,
|
| 148 |
+
"trim_to_audio": false,
|
| 149 |
+
"pingpong": false,
|
| 150 |
+
"save_output": false,
|
| 151 |
+
"videopreview": {
|
| 152 |
+
"hidden": false,
|
| 153 |
+
"paused": false,
|
| 154 |
+
"params": {
|
| 155 |
+
"filename": "AnimateDiff_00001-audio.mp4",
|
| 156 |
+
"subfolder": "",
|
| 157 |
+
"type": "temp",
|
| 158 |
+
"format": "video/h264-mp4",
|
| 159 |
+
"frame_rate": 24,
|
| 160 |
+
"workflow": "AnimateDiff_00001.png",
|
| 161 |
+
"fullpath": "D:\\AI\\ComfyUI-aki-v2\\ComfyUI\\temp\\AnimateDiff_00001-audio.mp4"
|
| 162 |
+
}
|
| 163 |
+
}
|
| 164 |
+
},
|
| 165 |
+
"widgets_values_named": {
|
| 166 |
+
"frame_rate": 24,
|
| 167 |
+
"loop_count": 0,
|
| 168 |
+
"filename_prefix": "AnimateDiff",
|
| 169 |
+
"format": "video/h264-mp4",
|
| 170 |
+
"pix_fmt": "yuv420p",
|
| 171 |
+
"crf": 19,
|
| 172 |
+
"save_metadata": true,
|
| 173 |
+
"trim_to_audio": false,
|
| 174 |
+
"pingpong": false,
|
| 175 |
+
"save_output": false,
|
| 176 |
+
"videopreview": {
|
| 177 |
+
"hidden": false,
|
| 178 |
+
"paused": false,
|
| 179 |
+
"params": {
|
| 180 |
+
"filename": "AnimateDiff_00001-audio.mp4",
|
| 181 |
+
"subfolder": "",
|
| 182 |
+
"type": "temp",
|
| 183 |
+
"format": "video/h264-mp4",
|
| 184 |
+
"frame_rate": 24,
|
| 185 |
+
"workflow": "AnimateDiff_00001.png",
|
| 186 |
+
"fullpath": "D:\\AI\\ComfyUI-aki-v2\\ComfyUI\\temp\\AnimateDiff_00001-audio.mp4"
|
| 187 |
+
}
|
| 188 |
+
}
|
| 189 |
+
}
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"id": 2,
|
| 193 |
+
"type": "VAEDecodeAudio",
|
| 194 |
+
"pos": [
|
| 195 |
+
3176.503986022757,
|
| 196 |
+
5589.336094022448
|
| 197 |
+
],
|
| 198 |
+
"size": [
|
| 199 |
+
230.98336128023698,
|
| 200 |
+
46.99687563323096
|
| 201 |
+
],
|
| 202 |
+
"flags": {
|
| 203 |
+
"collapsed": false
|
| 204 |
+
},
|
| 205 |
+
"order": 31,
|
| 206 |
+
"mode": 0,
|
| 207 |
+
"inputs": [
|
| 208 |
+
{
|
| 209 |
+
"name": "samples",
|
| 210 |
+
"type": "LATENT",
|
| 211 |
+
"link": 3
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"name": "vae",
|
| 215 |
+
"type": "VAE",
|
| 216 |
+
"link": 4
|
| 217 |
+
}
|
| 218 |
+
],
|
| 219 |
+
"outputs": [
|
| 220 |
+
{
|
| 221 |
+
"name": "AUDIO",
|
| 222 |
+
"type": "AUDIO",
|
| 223 |
+
"links": [
|
| 224 |
+
2
|
| 225 |
+
]
|
| 226 |
+
}
|
| 227 |
+
],
|
| 228 |
+
"properties": {
|
| 229 |
+
"ue_properties": {
|
| 230 |
+
"widget_ue_connectable": {},
|
| 231 |
+
"version": "7.8",
|
| 232 |
+
"input_ue_unconnectable": {}
|
| 233 |
+
},
|
| 234 |
+
"cnr_id": "comfy-core",
|
| 235 |
+
"ver": "0.33.2",
|
| 236 |
+
"Node name for S&R": "VAEDecodeAudio"
|
| 237 |
+
}
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"id": 3,
|
| 241 |
+
"type": "SplitSigmas",
|
| 242 |
+
"pos": [
|
| 243 |
+
2823.6430428367066,
|
| 244 |
+
5558.604634124167
|
| 245 |
+
],
|
| 246 |
+
"size": [
|
| 247 |
+
308.3164287851357,
|
| 248 |
+
78
|
| 249 |
+
],
|
| 250 |
+
"flags": {},
|
| 251 |
+
"order": 24,
|
| 252 |
+
"mode": 0,
|
| 253 |
+
"inputs": [
|
| 254 |
+
{
|
| 255 |
+
"name": "sigmas",
|
| 256 |
+
"type": "SIGMAS",
|
| 257 |
+
"link": 5
|
| 258 |
+
}
|
| 259 |
+
],
|
| 260 |
+
"outputs": [
|
| 261 |
+
{
|
| 262 |
+
"name": "high_sigmas",
|
| 263 |
+
"type": "SIGMAS",
|
| 264 |
+
"links": [
|
| 265 |
+
44
|
| 266 |
+
]
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "low_sigmas",
|
| 270 |
+
"type": "SIGMAS",
|
| 271 |
+
"links": []
|
| 272 |
+
}
|
| 273 |
+
],
|
| 274 |
+
"properties": {
|
| 275 |
+
"ue_properties": {
|
| 276 |
+
"widget_ue_connectable": {},
|
| 277 |
+
"input_ue_unconnectable": {},
|
| 278 |
+
"version": "7.5.2"
|
| 279 |
+
},
|
| 280 |
+
"cnr_id": "comfy-core",
|
| 281 |
+
"ver": "0.33.0",
|
| 282 |
+
"Node name for S&R": "SplitSigmas"
|
| 283 |
+
},
|
| 284 |
+
"widgets_values": [
|
| 285 |
+
4
|
| 286 |
+
],
|
| 287 |
+
"widgets_values_named": {
|
| 288 |
+
"step": 4
|
| 289 |
+
},
|
| 290 |
+
"color": "#223",
|
| 291 |
+
"bgcolor": "#335"
|
| 292 |
+
},
|
| 293 |
+
{
|
| 294 |
+
"id": 4,
|
| 295 |
+
"type": "SaveVideo",
|
| 296 |
+
"pos": [
|
| 297 |
+
4514.64060004999,
|
| 298 |
+
5293.5022981353995
|
| 299 |
+
],
|
| 300 |
+
"size": [
|
| 301 |
+
283.126933720908,
|
| 302 |
+
106
|
| 303 |
+
],
|
| 304 |
+
"flags": {},
|
| 305 |
+
"order": 41,
|
| 306 |
+
"mode": 0,
|
| 307 |
+
"inputs": [
|
| 308 |
+
{
|
| 309 |
+
"name": "video",
|
| 310 |
+
"type": "VIDEO",
|
| 311 |
+
"link": 6
|
| 312 |
+
}
|
| 313 |
+
],
|
| 314 |
+
"outputs": [
|
| 315 |
+
{
|
| 316 |
+
"name": "video",
|
| 317 |
+
"type": "VIDEO",
|
| 318 |
+
"links": null
|
| 319 |
+
}
|
| 320 |
+
],
|
| 321 |
+
"properties": {
|
| 322 |
+
"ue_properties": {
|
| 323 |
+
"widget_ue_connectable": {},
|
| 324 |
+
"version": "7.8",
|
| 325 |
+
"input_ue_unconnectable": {}
|
| 326 |
+
},
|
| 327 |
+
"cnr_id": "comfy-core",
|
| 328 |
+
"ver": "0.33.2",
|
| 329 |
+
"Node name for S&R": "SaveVideo"
|
| 330 |
+
},
|
| 331 |
+
"widgets_values": [
|
| 332 |
+
"video/MiniMax_H3",
|
| 333 |
+
"auto",
|
| 334 |
+
"auto"
|
| 335 |
+
],
|
| 336 |
+
"widgets_values_named": {
|
| 337 |
+
"filename_prefix": "video/MiniMax_H3",
|
| 338 |
+
"format": "auto",
|
| 339 |
+
"codec": "auto"
|
| 340 |
+
}
|
| 341 |
+
},
|
| 342 |
+
{
|
| 343 |
+
"id": 5,
|
| 344 |
+
"type": "ManualSigmas",
|
| 345 |
+
"pos": [
|
| 346 |
+
3908.508146540855,
|
| 347 |
+
5496.223458932069
|
| 348 |
+
],
|
| 349 |
+
"size": [
|
| 350 |
+
308.3164287851357,
|
| 351 |
+
58
|
| 352 |
+
],
|
| 353 |
+
"flags": {},
|
| 354 |
+
"order": 0,
|
| 355 |
+
"mode": 0,
|
| 356 |
+
"inputs": [
|
| 357 |
+
{
|
| 358 |
+
"label": "sigmas",
|
| 359 |
+
"name": "sigmas",
|
| 360 |
+
"type": "STRING",
|
| 361 |
+
"widget": {
|
| 362 |
+
"name": "sigmas"
|
| 363 |
+
},
|
| 364 |
+
"link": null
|
| 365 |
+
}
|
| 366 |
+
],
|
| 367 |
+
"outputs": [
|
| 368 |
+
{
|
| 369 |
+
"label": "SIGMAS",
|
| 370 |
+
"name": "SIGMAS",
|
| 371 |
+
"type": "SIGMAS",
|
| 372 |
+
"links": []
|
| 373 |
+
}
|
| 374 |
+
],
|
| 375 |
+
"title": "5 step Sigmas",
|
| 376 |
+
"properties": {
|
| 377 |
+
"ue_properties": {
|
| 378 |
+
"widget_ue_connectable": {},
|
| 379 |
+
"version": "7.5.2",
|
| 380 |
+
"input_ue_unconnectable": {}
|
| 381 |
+
},
|
| 382 |
+
"cnr_id": "comfy-core",
|
| 383 |
+
"ver": "0.5.1",
|
| 384 |
+
"Node name for S&R": "ManualSigmas",
|
| 385 |
+
"enableTabs": false,
|
| 386 |
+
"tabWidth": 65,
|
| 387 |
+
"tabXOffset": 10,
|
| 388 |
+
"hasSecondTab": false,
|
| 389 |
+
"secondTabText": "Send Back",
|
| 390 |
+
"secondTabOffset": 80,
|
| 391 |
+
"secondTabWidth": 65
|
| 392 |
+
},
|
| 393 |
+
"widgets_values": [
|
| 394 |
+
"0.9231, 0.8780, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 395 |
+
],
|
| 396 |
+
"widgets_values_named": {
|
| 397 |
+
"sigmas": "0.9231, 0.8780, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 398 |
+
}
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"id": 6,
|
| 402 |
+
"type": "VAEDecode",
|
| 403 |
+
"pos": [
|
| 404 |
+
3176.503986022757,
|
| 405 |
+
5487.163373330627
|
| 406 |
+
],
|
| 407 |
+
"size": [
|
| 408 |
+
230.98336128023698,
|
| 409 |
+
46
|
| 410 |
+
],
|
| 411 |
+
"flags": {
|
| 412 |
+
"collapsed": false
|
| 413 |
+
},
|
| 414 |
+
"order": 32,
|
| 415 |
+
"mode": 0,
|
| 416 |
+
"inputs": [
|
| 417 |
+
{
|
| 418 |
+
"name": "samples",
|
| 419 |
+
"type": "LATENT",
|
| 420 |
+
"link": 7
|
| 421 |
+
},
|
| 422 |
+
{
|
| 423 |
+
"name": "vae",
|
| 424 |
+
"type": "VAE",
|
| 425 |
+
"link": 8
|
| 426 |
+
}
|
| 427 |
+
],
|
| 428 |
+
"outputs": [
|
| 429 |
+
{
|
| 430 |
+
"name": "IMAGE",
|
| 431 |
+
"type": "IMAGE",
|
| 432 |
+
"links": [
|
| 433 |
+
1
|
| 434 |
+
]
|
| 435 |
+
}
|
| 436 |
+
],
|
| 437 |
+
"properties": {
|
| 438 |
+
"ue_properties": {
|
| 439 |
+
"widget_ue_connectable": {},
|
| 440 |
+
"version": "7.8",
|
| 441 |
+
"input_ue_unconnectable": {}
|
| 442 |
+
},
|
| 443 |
+
"cnr_id": "comfy-core",
|
| 444 |
+
"ver": "0.33.2",
|
| 445 |
+
"Node name for S&R": "VAEDecode"
|
| 446 |
+
}
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"id": 7,
|
| 450 |
+
"type": "VAELoader",
|
| 451 |
+
"pos": [
|
| 452 |
+
1022.1892320604375,
|
| 453 |
+
5463.23147307899
|
| 454 |
+
],
|
| 455 |
+
"size": [
|
| 456 |
+
640,
|
| 457 |
+
70
|
| 458 |
+
],
|
| 459 |
+
"flags": {},
|
| 460 |
+
"order": 1,
|
| 461 |
+
"mode": 0,
|
| 462 |
+
"inputs": [],
|
| 463 |
+
"outputs": [
|
| 464 |
+
{
|
| 465 |
+
"name": "VAE",
|
| 466 |
+
"type": "VAE",
|
| 467 |
+
"links": [
|
| 468 |
+
8,
|
| 469 |
+
11,
|
| 470 |
+
16,
|
| 471 |
+
28
|
| 472 |
+
]
|
| 473 |
+
}
|
| 474 |
+
],
|
| 475 |
+
"properties": {
|
| 476 |
+
"ue_properties": {
|
| 477 |
+
"widget_ue_connectable": {},
|
| 478 |
+
"version": "7.8",
|
| 479 |
+
"input_ue_unconnectable": {}
|
| 480 |
+
},
|
| 481 |
+
"cnr_id": "comfy-core",
|
| 482 |
+
"ver": "0.33.2",
|
| 483 |
+
"Node name for S&R": "VAELoader",
|
| 484 |
+
"models": [
|
| 485 |
+
{
|
| 486 |
+
"name": "minimax_h3_video_vae_fp16.safetensors",
|
| 487 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors",
|
| 488 |
+
"directory": "vae"
|
| 489 |
+
}
|
| 490 |
+
]
|
| 491 |
+
},
|
| 492 |
+
"widgets_values": [
|
| 493 |
+
"minimax_h3_video_vae_fp16.safetensors"
|
| 494 |
+
],
|
| 495 |
+
"widgets_values_named": {
|
| 496 |
+
"vae_name": "minimax_h3_video_vae_fp16.safetensors"
|
| 497 |
+
}
|
| 498 |
+
},
|
| 499 |
+
{
|
| 500 |
+
"id": 8,
|
| 501 |
+
"type": "BasicScheduler",
|
| 502 |
+
"pos": [
|
| 503 |
+
2823.6430428367066,
|
| 504 |
+
5388.297356844566
|
| 505 |
+
],
|
| 506 |
+
"size": [
|
| 507 |
+
308.3164287851357,
|
| 508 |
+
111.22673919547651
|
| 509 |
+
],
|
| 510 |
+
"flags": {},
|
| 511 |
+
"order": 20,
|
| 512 |
+
"mode": 0,
|
| 513 |
+
"inputs": [
|
| 514 |
+
{
|
| 515 |
+
"name": "model",
|
| 516 |
+
"type": "MODEL",
|
| 517 |
+
"link": 9
|
| 518 |
+
}
|
| 519 |
+
],
|
| 520 |
+
"outputs": [
|
| 521 |
+
{
|
| 522 |
+
"name": "SIGMAS",
|
| 523 |
+
"type": "SIGMAS",
|
| 524 |
+
"links": [
|
| 525 |
+
5
|
| 526 |
+
]
|
| 527 |
+
}
|
| 528 |
+
],
|
| 529 |
+
"properties": {
|
| 530 |
+
"ue_properties": {
|
| 531 |
+
"widget_ue_connectable": {},
|
| 532 |
+
"version": "7.8",
|
| 533 |
+
"input_ue_unconnectable": {}
|
| 534 |
+
},
|
| 535 |
+
"cnr_id": "comfy-core",
|
| 536 |
+
"ver": "0.33.2",
|
| 537 |
+
"Node name for S&R": "BasicScheduler"
|
| 538 |
+
},
|
| 539 |
+
"widgets_values": [
|
| 540 |
+
"simple",
|
| 541 |
+
8,
|
| 542 |
+
1
|
| 543 |
+
],
|
| 544 |
+
"widgets_values_named": {
|
| 545 |
+
"scheduler": "simple",
|
| 546 |
+
"steps": 8,
|
| 547 |
+
"denoise": 1
|
| 548 |
+
}
|
| 549 |
+
},
|
| 550 |
+
{
|
| 551 |
+
"id": 9,
|
| 552 |
+
"type": "LoadImage",
|
| 553 |
+
"pos": [
|
| 554 |
+
1343.819198857278,
|
| 555 |
+
5833.004557721189
|
| 556 |
+
],
|
| 557 |
+
"size": [
|
| 558 |
+
290,
|
| 559 |
+
330
|
| 560 |
+
],
|
| 561 |
+
"flags": {},
|
| 562 |
+
"order": 2,
|
| 563 |
+
"mode": 4,
|
| 564 |
+
"inputs": [],
|
| 565 |
+
"outputs": [
|
| 566 |
+
{
|
| 567 |
+
"name": "IMAGE",
|
| 568 |
+
"type": "IMAGE",
|
| 569 |
+
"links": [
|
| 570 |
+
17,
|
| 571 |
+
29
|
| 572 |
+
]
|
| 573 |
+
},
|
| 574 |
+
{
|
| 575 |
+
"name": "MASK",
|
| 576 |
+
"type": "MASK",
|
| 577 |
+
"links": null
|
| 578 |
+
}
|
| 579 |
+
],
|
| 580 |
+
"properties": {
|
| 581 |
+
"ue_properties": {
|
| 582 |
+
"widget_ue_connectable": {},
|
| 583 |
+
"version": "7.8",
|
| 584 |
+
"input_ue_unconnectable": {}
|
| 585 |
+
},
|
| 586 |
+
"cnr_id": "comfy-core",
|
| 587 |
+
"ver": "0.33.2",
|
| 588 |
+
"Node name for S&R": "LoadImage"
|
| 589 |
+
},
|
| 590 |
+
"widgets_values": [
|
| 591 |
+
"09-55-07_00001.jpg",
|
| 592 |
+
"image"
|
| 593 |
+
],
|
| 594 |
+
"widgets_values_named": {
|
| 595 |
+
"image": "09-55-07_00001.jpg",
|
| 596 |
+
"upload": "image"
|
| 597 |
+
}
|
| 598 |
+
},
|
| 599 |
+
{
|
| 600 |
+
"id": 10,
|
| 601 |
+
"type": "LoadImage",
|
| 602 |
+
"pos": [
|
| 603 |
+
1676.074249167948,
|
| 604 |
+
5831.024334938233
|
| 605 |
+
],
|
| 606 |
+
"size": [
|
| 607 |
+
290,
|
| 608 |
+
330
|
| 609 |
+
],
|
| 610 |
+
"flags": {},
|
| 611 |
+
"order": 3,
|
| 612 |
+
"mode": 4,
|
| 613 |
+
"inputs": [],
|
| 614 |
+
"outputs": [
|
| 615 |
+
{
|
| 616 |
+
"name": "IMAGE",
|
| 617 |
+
"type": "IMAGE",
|
| 618 |
+
"links": [
|
| 619 |
+
18,
|
| 620 |
+
30
|
| 621 |
+
]
|
| 622 |
+
},
|
| 623 |
+
{
|
| 624 |
+
"name": "MASK",
|
| 625 |
+
"type": "MASK",
|
| 626 |
+
"links": null
|
| 627 |
+
}
|
| 628 |
+
],
|
| 629 |
+
"properties": {
|
| 630 |
+
"ue_properties": {
|
| 631 |
+
"widget_ue_connectable": {},
|
| 632 |
+
"version": "7.8",
|
| 633 |
+
"input_ue_unconnectable": {}
|
| 634 |
+
},
|
| 635 |
+
"cnr_id": "comfy-core",
|
| 636 |
+
"ver": "0.33.2",
|
| 637 |
+
"Node name for S&R": "LoadImage"
|
| 638 |
+
},
|
| 639 |
+
"widgets_values": [
|
| 640 |
+
"09-55-07_00001.jpg",
|
| 641 |
+
"image"
|
| 642 |
+
],
|
| 643 |
+
"widgets_values_named": {
|
| 644 |
+
"image": "09-55-07_00001.jpg",
|
| 645 |
+
"upload": "image"
|
| 646 |
+
}
|
| 647 |
+
},
|
| 648 |
+
{
|
| 649 |
+
"id": 11,
|
| 650 |
+
"type": "VAEDecode",
|
| 651 |
+
"pos": [
|
| 652 |
+
4244.023207065458,
|
| 653 |
+
5433.788422959353
|
| 654 |
+
],
|
| 655 |
+
"size": [
|
| 656 |
+
230,
|
| 657 |
+
60
|
| 658 |
+
],
|
| 659 |
+
"flags": {
|
| 660 |
+
"collapsed": false
|
| 661 |
+
},
|
| 662 |
+
"order": 38,
|
| 663 |
+
"mode": 0,
|
| 664 |
+
"inputs": [
|
| 665 |
+
{
|
| 666 |
+
"name": "samples",
|
| 667 |
+
"type": "LATENT",
|
| 668 |
+
"link": 10
|
| 669 |
+
},
|
| 670 |
+
{
|
| 671 |
+
"name": "vae",
|
| 672 |
+
"type": "VAE",
|
| 673 |
+
"link": 11
|
| 674 |
+
}
|
| 675 |
+
],
|
| 676 |
+
"outputs": [
|
| 677 |
+
{
|
| 678 |
+
"name": "IMAGE",
|
| 679 |
+
"type": "IMAGE",
|
| 680 |
+
"links": [
|
| 681 |
+
53
|
| 682 |
+
]
|
| 683 |
+
}
|
| 684 |
+
],
|
| 685 |
+
"properties": {
|
| 686 |
+
"ue_properties": {
|
| 687 |
+
"widget_ue_connectable": {},
|
| 688 |
+
"version": "7.8",
|
| 689 |
+
"input_ue_unconnectable": {}
|
| 690 |
+
},
|
| 691 |
+
"cnr_id": "comfy-core",
|
| 692 |
+
"ver": "0.33.2",
|
| 693 |
+
"Node name for S&R": "VAEDecode"
|
| 694 |
+
}
|
| 695 |
+
},
|
| 696 |
+
{
|
| 697 |
+
"id": 12,
|
| 698 |
+
"type": "VAEDecodeAudio",
|
| 699 |
+
"pos": [
|
| 700 |
+
4246.139687501349,
|
| 701 |
+
5553.202878575346
|
| 702 |
+
],
|
| 703 |
+
"size": [
|
| 704 |
+
230,
|
| 705 |
+
60
|
| 706 |
+
],
|
| 707 |
+
"flags": {
|
| 708 |
+
"collapsed": false
|
| 709 |
+
},
|
| 710 |
+
"order": 39,
|
| 711 |
+
"mode": 0,
|
| 712 |
+
"inputs": [
|
| 713 |
+
{
|
| 714 |
+
"name": "samples",
|
| 715 |
+
"type": "LATENT",
|
| 716 |
+
"link": 12
|
| 717 |
+
},
|
| 718 |
+
{
|
| 719 |
+
"name": "vae",
|
| 720 |
+
"type": "VAE",
|
| 721 |
+
"link": 13
|
| 722 |
+
}
|
| 723 |
+
],
|
| 724 |
+
"outputs": [
|
| 725 |
+
{
|
| 726 |
+
"name": "AUDIO",
|
| 727 |
+
"type": "AUDIO",
|
| 728 |
+
"links": [
|
| 729 |
+
54
|
| 730 |
+
]
|
| 731 |
+
}
|
| 732 |
+
],
|
| 733 |
+
"properties": {
|
| 734 |
+
"ue_properties": {
|
| 735 |
+
"widget_ue_connectable": {},
|
| 736 |
+
"version": "7.8",
|
| 737 |
+
"input_ue_unconnectable": {}
|
| 738 |
+
},
|
| 739 |
+
"cnr_id": "comfy-core",
|
| 740 |
+
"ver": "0.33.2",
|
| 741 |
+
"Node name for S&R": "VAEDecodeAudio"
|
| 742 |
+
}
|
| 743 |
+
},
|
| 744 |
+
{
|
| 745 |
+
"id": 13,
|
| 746 |
+
"type": "VAELoader",
|
| 747 |
+
"pos": [
|
| 748 |
+
1022.1892320604375,
|
| 749 |
+
5593.23147307899
|
| 750 |
+
],
|
| 751 |
+
"size": [
|
| 752 |
+
639.8453239311636,
|
| 753 |
+
58
|
| 754 |
+
],
|
| 755 |
+
"flags": {},
|
| 756 |
+
"order": 4,
|
| 757 |
+
"mode": 0,
|
| 758 |
+
"inputs": [],
|
| 759 |
+
"outputs": [
|
| 760 |
+
{
|
| 761 |
+
"name": "VAE",
|
| 762 |
+
"type": "VAE",
|
| 763 |
+
"links": [
|
| 764 |
+
4,
|
| 765 |
+
13
|
| 766 |
+
]
|
| 767 |
+
}
|
| 768 |
+
],
|
| 769 |
+
"properties": {
|
| 770 |
+
"ue_properties": {
|
| 771 |
+
"widget_ue_connectable": {},
|
| 772 |
+
"version": "7.8",
|
| 773 |
+
"input_ue_unconnectable": {}
|
| 774 |
+
},
|
| 775 |
+
"cnr_id": "comfy-core",
|
| 776 |
+
"ver": "0.33.2",
|
| 777 |
+
"Node name for S&R": "VAELoader",
|
| 778 |
+
"models": [
|
| 779 |
+
{
|
| 780 |
+
"name": "minimax_h3_audio_vae_fp32.safetensors",
|
| 781 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors",
|
| 782 |
+
"directory": "vae"
|
| 783 |
+
}
|
| 784 |
+
]
|
| 785 |
+
},
|
| 786 |
+
"widgets_values": [
|
| 787 |
+
"minimax_h3_audio_vae_fp32.safetensors"
|
| 788 |
+
],
|
| 789 |
+
"widgets_values_named": {
|
| 790 |
+
"vae_name": "minimax_h3_audio_vae_fp32.safetensors"
|
| 791 |
+
}
|
| 792 |
+
},
|
| 793 |
+
{
|
| 794 |
+
"id": 14,
|
| 795 |
+
"type": "PrimitiveStringMultiline",
|
| 796 |
+
"pos": [
|
| 797 |
+
1334.8058493668113,
|
| 798 |
+
6214.899932141244
|
| 799 |
+
],
|
| 800 |
+
"size": [
|
| 801 |
+
636.5456880478732,
|
| 802 |
+
296.4539339258454
|
| 803 |
+
],
|
| 804 |
+
"flags": {},
|
| 805 |
+
"order": 5,
|
| 806 |
+
"mode": 0,
|
| 807 |
+
"inputs": [],
|
| 808 |
+
"outputs": [
|
| 809 |
+
{
|
| 810 |
+
"name": "STRING",
|
| 811 |
+
"type": "STRING",
|
| 812 |
+
"links": [
|
| 813 |
+
19,
|
| 814 |
+
31
|
| 815 |
+
]
|
| 816 |
+
}
|
| 817 |
+
],
|
| 818 |
+
"title": "提示词",
|
| 819 |
+
"properties": {
|
| 820 |
+
"ue_properties": {
|
| 821 |
+
"widget_ue_connectable": {},
|
| 822 |
+
"version": "7.8",
|
| 823 |
+
"input_ue_unconnectable": {}
|
| 824 |
+
},
|
| 825 |
+
"cnr_id": "comfy-core",
|
| 826 |
+
"ver": "0.33.2",
|
| 827 |
+
"Node name for S&R": "PrimitiveStringMultiline"
|
| 828 |
+
},
|
| 829 |
+
"widgets_values": [
|
| 830 |
+
"资产角色:\n<Picture 1>\n国风动漫少女,深棕色发髻点缀红梅与蝶形发饰,身穿白金红相间的抹胸上衣与飘逸薄纱灯笼裤,周身环绕金红流光与炽炎花瓣特效。\n<Picture 2>\n硬派白发战将,身穿暗红色皮革长款风衣、黑色内衬与战术皮裤,手持重剑与双枪,周身散发冷冽红黑魔力气浪。\n\n一个低机位推近镜头框住\n<Picture 1>\n与\n<Picture 2>\n在废墟长廊两端对峙。\n<Picture 1>\n率先启动超音速贴地冲刺,足尖踏出金红烈焰莲华,甩出赤红绫缎如游龙贯空;\nthe camera cuts to\n侧面跟摇特写,\n<Picture 2>\n拔出重剑横向重劈,刀锋与炽炎绫缎剧烈碰撞,火星与雷光四向迸射,气浪撕裂地面石板。\nthe shot transitions to\n俯冲环绕镜头,\n<Picture 1>\n借力凌空翻腾,双掌结印召唤暴雨般金红火蝶与符文剑气垂直轰炸;\n<Picture 2>\n单手举剑格挡,魔力红光护盾展开,随即甩动红风衣滑步侧移,拔枪极速连射,火舌与剑气在半空接连引爆。\nthe camera dynamically follows\n贴地高速滑移,\n<Picture 1>\n在弹雨残影中多维瞬闪,瞬身突进至\n<Picture 2>\n身前旋身横扫,赤焰气刃斩开风衣下摆;\nthe shot changes to\n极速下坠定点特写,\n<Picture 2>\n反手抽刀上挑震开攻击,\n<Picture 1>\n空中旋身单手撑地滑退数米,\n<Picture 1>\n与\n<Picture 2>\n同时稳住身形横刃相对,周身烈火与魔能疯狂暴涨,在最强杀意临界点定格。\noverall_soundscape: Explosive shockwaves crack the stone ground as steel clashes with fiery energy ribbons. Gunfire roars in rapid bursts followed by the sizzling hum of burning petals and swirling demonic aura.non_diegetic_music: High-octane heavy metal hybrid with aggressive electric guitar riffs, pounding industrial drums, and intense symphonic brass, cutting off sharply on the final clash."
|
| 831 |
+
],
|
| 832 |
+
"widgets_values_named": {
|
| 833 |
+
"value": "资产角色:\n<Picture 1>\n国风动漫少女,深棕色发髻点缀红梅与蝶形发饰,身穿白金红相间的抹胸上衣与飘逸薄纱灯笼裤,周身环绕金红流光与炽炎花瓣特效。\n<Picture 2>\n硬派白发战将,身穿暗红色皮革长款风衣、黑色内衬与战术皮裤,手持重剑与双枪,周身散发冷冽红黑魔力气浪。\n\n一个低机位推近镜头框住\n<Picture 1>\n与\n<Picture 2>\n在废墟长廊两端对峙。\n<Picture 1>\n率先启动超音速贴地冲刺,足尖踏出金红烈焰莲华,甩出赤红绫缎如游龙贯空;\nthe camera cuts to\n侧面跟摇特写,\n<Picture 2>\n拔出重剑横向重劈,刀锋与炽炎绫缎剧烈碰撞,火星与雷光四向迸射,气浪撕裂地面石板。\nthe shot transitions to\n俯冲环绕镜头,\n<Picture 1>\n借力凌空翻腾,双掌结印召唤暴雨般金红火蝶与符文剑气垂直轰炸;\n<Picture 2>\n单手举剑格挡,魔力红光护盾展开,随即甩动红风衣滑步侧移,拔枪极速连射,火舌与剑气在半空接连引爆。\nthe camera dynamically follows\n贴地高速滑移,\n<Picture 1>\n在弹雨残影中多维瞬闪,瞬身突进至\n<Picture 2>\n身前旋身横扫,赤焰气刃斩开风衣下摆;\nthe shot changes to\n极速下坠定点特写,\n<Picture 2>\n反手抽刀上挑震开攻击,\n<Picture 1>\n空中旋身单手撑地滑退数米,\n<Picture 1>\n与\n<Picture 2>\n同时稳住身形横刃相对,周身烈火与魔能疯狂暴涨,在最强杀意临界点定格。\noverall_soundscape: Explosive shockwaves crack the stone ground as steel clashes with fiery energy ribbons. Gunfire roars in rapid bursts followed by the sizzling hum of burning petals and swirling demonic aura.non_diegetic_music: High-octane heavy metal hybrid with aggressive electric guitar riffs, pounding industrial drums, and intense symphonic brass, cutting off sharply on the final clash."
|
| 834 |
+
},
|
| 835 |
+
"color": "#232",
|
| 836 |
+
"bgcolor": "#353"
|
| 837 |
+
},
|
| 838 |
+
{
|
| 839 |
+
"id": 15,
|
| 840 |
+
"type": "ResolutionSelector",
|
| 841 |
+
"pos": [
|
| 842 |
+
1757.462855425223,
|
| 843 |
+
5540.950633219013
|
| 844 |
+
],
|
| 845 |
+
"size": [
|
| 846 |
+
270.983361280237,
|
| 847 |
+
126
|
| 848 |
+
],
|
| 849 |
+
"flags": {},
|
| 850 |
+
"order": 19,
|
| 851 |
+
"mode": 0,
|
| 852 |
+
"showAdvanced": false,
|
| 853 |
+
"inputs": [
|
| 854 |
+
{
|
| 855 |
+
"name": "megapixels",
|
| 856 |
+
"type": "FLOAT",
|
| 857 |
+
"widget": {
|
| 858 |
+
"name": "megapixels"
|
| 859 |
+
},
|
| 860 |
+
"link": 14
|
| 861 |
+
}
|
| 862 |
+
],
|
| 863 |
+
"outputs": [
|
| 864 |
+
{
|
| 865 |
+
"name": "width",
|
| 866 |
+
"type": "INT",
|
| 867 |
+
"links": [
|
| 868 |
+
32,
|
| 869 |
+
47
|
| 870 |
+
]
|
| 871 |
+
},
|
| 872 |
+
{
|
| 873 |
+
"name": "height",
|
| 874 |
+
"type": "INT",
|
| 875 |
+
"links": [
|
| 876 |
+
33,
|
| 877 |
+
48
|
| 878 |
+
]
|
| 879 |
+
}
|
| 880 |
+
],
|
| 881 |
+
"title": "Resolution Selector (Size)",
|
| 882 |
+
"properties": {
|
| 883 |
+
"ue_properties": {
|
| 884 |
+
"widget_ue_connectable": {},
|
| 885 |
+
"version": "7.8",
|
| 886 |
+
"input_ue_unconnectable": {}
|
| 887 |
+
},
|
| 888 |
+
"cnr_id": "comfy-core",
|
| 889 |
+
"ver": "0.33.2",
|
| 890 |
+
"Node name for S&R": "ResolutionSelector"
|
| 891 |
+
},
|
| 892 |
+
"widgets_values": [
|
| 893 |
+
"16:9 (Widescreen)",
|
| 894 |
+
1,
|
| 895 |
+
32
|
| 896 |
+
],
|
| 897 |
+
"widgets_values_named": {
|
| 898 |
+
"aspect_ratio": "16:9 (Widescreen)",
|
| 899 |
+
"megapixels": 1,
|
| 900 |
+
"multiple": 32
|
| 901 |
+
},
|
| 902 |
+
"color": "#322",
|
| 903 |
+
"bgcolor": "#533"
|
| 904 |
+
},
|
| 905 |
+
{
|
| 906 |
+
"id": 16,
|
| 907 |
+
"type": "MiniMaxH3ImageToVideo",
|
| 908 |
+
"pos": [
|
| 909 |
+
1765.8316212818622,
|
| 910 |
+
5272.664531479656
|
| 911 |
+
],
|
| 912 |
+
"size": [
|
| 913 |
+
257.521811503208,
|
| 914 |
+
220
|
| 915 |
+
],
|
| 916 |
+
"flags": {},
|
| 917 |
+
"order": 22,
|
| 918 |
+
"mode": 0,
|
| 919 |
+
"inputs": [
|
| 920 |
+
{
|
| 921 |
+
"name": "clip",
|
| 922 |
+
"type": "CLIP",
|
| 923 |
+
"link": 15
|
| 924 |
+
},
|
| 925 |
+
{
|
| 926 |
+
"name": "vae",
|
| 927 |
+
"type": "VAE",
|
| 928 |
+
"link": 16
|
| 929 |
+
},
|
| 930 |
+
{
|
| 931 |
+
"name": "first_frame",
|
| 932 |
+
"shape": 7,
|
| 933 |
+
"type": "IMAGE",
|
| 934 |
+
"link": 17
|
| 935 |
+
},
|
| 936 |
+
{
|
| 937 |
+
"name": "last_frame",
|
| 938 |
+
"shape": 7,
|
| 939 |
+
"type": "IMAGE",
|
| 940 |
+
"link": 18
|
| 941 |
+
},
|
| 942 |
+
{
|
| 943 |
+
"name": "prompt",
|
| 944 |
+
"type": "STRING",
|
| 945 |
+
"widget": {
|
| 946 |
+
"name": "prompt"
|
| 947 |
+
},
|
| 948 |
+
"link": 19
|
| 949 |
+
},
|
| 950 |
+
{
|
| 951 |
+
"name": "width",
|
| 952 |
+
"type": "INT",
|
| 953 |
+
"widget": {
|
| 954 |
+
"name": "width"
|
| 955 |
+
},
|
| 956 |
+
"link": 20
|
| 957 |
+
},
|
| 958 |
+
{
|
| 959 |
+
"name": "height",
|
| 960 |
+
"type": "INT",
|
| 961 |
+
"widget": {
|
| 962 |
+
"name": "height"
|
| 963 |
+
},
|
| 964 |
+
"link": 21
|
| 965 |
+
},
|
| 966 |
+
{
|
| 967 |
+
"name": "length",
|
| 968 |
+
"type": "INT",
|
| 969 |
+
"widget": {
|
| 970 |
+
"name": "length"
|
| 971 |
+
},
|
| 972 |
+
"link": 22
|
| 973 |
+
}
|
| 974 |
+
],
|
| 975 |
+
"outputs": [
|
| 976 |
+
{
|
| 977 |
+
"name": "positive",
|
| 978 |
+
"type": "CONDITIONING",
|
| 979 |
+
"links": [
|
| 980 |
+
50
|
| 981 |
+
]
|
| 982 |
+
},
|
| 983 |
+
{
|
| 984 |
+
"name": "LATENT",
|
| 985 |
+
"type": "LATENT",
|
| 986 |
+
"links": [
|
| 987 |
+
45
|
| 988 |
+
]
|
| 989 |
+
}
|
| 990 |
+
],
|
| 991 |
+
"properties": {
|
| 992 |
+
"ue_properties": {
|
| 993 |
+
"widget_ue_connectable": {},
|
| 994 |
+
"version": "7.8",
|
| 995 |
+
"input_ue_unconnectable": {}
|
| 996 |
+
},
|
| 997 |
+
"cnr_id": "comfy-core",
|
| 998 |
+
"ver": "0.32.0",
|
| 999 |
+
"Node name for S&R": "MiniMaxH3ImageToVideo"
|
| 1000 |
+
},
|
| 1001 |
+
"widgets_values": [
|
| 1002 |
+
"",
|
| 1003 |
+
1344,
|
| 1004 |
+
768,
|
| 1005 |
+
73
|
| 1006 |
+
],
|
| 1007 |
+
"widgets_values_named": {
|
| 1008 |
+
"prompt": "",
|
| 1009 |
+
"width": 1344,
|
| 1010 |
+
"height": 768,
|
| 1011 |
+
"length": 73
|
| 1012 |
+
}
|
| 1013 |
+
},
|
| 1014 |
+
{
|
| 1015 |
+
"id": 17,
|
| 1016 |
+
"type": "ModelPreviewOverrideKJ",
|
| 1017 |
+
"pos": [
|
| 1018 |
+
2417.54562531032,
|
| 1019 |
+
5122.681252342183
|
| 1020 |
+
],
|
| 1021 |
+
"size": [
|
| 1022 |
+
319.39965668617606,
|
| 1023 |
+
411.607317175336
|
| 1024 |
+
],
|
| 1025 |
+
"flags": {},
|
| 1026 |
+
"order": 27,
|
| 1027 |
+
"mode": 0,
|
| 1028 |
+
"inputs": [
|
| 1029 |
+
{
|
| 1030 |
+
"name": "model",
|
| 1031 |
+
"type": "MODEL",
|
| 1032 |
+
"link": 23
|
| 1033 |
+
},
|
| 1034 |
+
{
|
| 1035 |
+
"name": "vae",
|
| 1036 |
+
"shape": 7,
|
| 1037 |
+
"type": "VAE",
|
| 1038 |
+
"link": null
|
| 1039 |
+
},
|
| 1040 |
+
{
|
| 1041 |
+
"name": "preview_frames",
|
| 1042 |
+
"type": "INT",
|
| 1043 |
+
"widget": {
|
| 1044 |
+
"name": "preview_frames"
|
| 1045 |
+
},
|
| 1046 |
+
"link": 24
|
| 1047 |
+
}
|
| 1048 |
+
],
|
| 1049 |
+
"outputs": [
|
| 1050 |
+
{
|
| 1051 |
+
"name": "MODEL",
|
| 1052 |
+
"type": "MODEL",
|
| 1053 |
+
"links": [
|
| 1054 |
+
49
|
| 1055 |
+
]
|
| 1056 |
+
}
|
| 1057 |
+
],
|
| 1058 |
+
"properties": {
|
| 1059 |
+
"ue_properties": {
|
| 1060 |
+
"widget_ue_connectable": {},
|
| 1061 |
+
"input_ue_unconnectable": {},
|
| 1062 |
+
"version": "7.5.2"
|
| 1063 |
+
},
|
| 1064 |
+
"cnr_id": "comfyui-kjnodes",
|
| 1065 |
+
"ver": "3f20054214fec9f9234fd3841ae6f1e4287948f6",
|
| 1066 |
+
"Node name for S&R": "ModelPreviewOverrideKJ"
|
| 1067 |
+
},
|
| 1068 |
+
"widgets_values": [
|
| 1069 |
+
1024,
|
| 1070 |
+
80,
|
| 1071 |
+
true,
|
| 1072 |
+
9,
|
| 1073 |
+
12,
|
| 1074 |
+
"taeh3.safetensors",
|
| 1075 |
+
""
|
| 1076 |
+
],
|
| 1077 |
+
"widgets_values_named": {
|
| 1078 |
+
"max_resolution": 1024,
|
| 1079 |
+
"jpeg_quality": 80,
|
| 1080 |
+
"suppress_default_preview": true,
|
| 1081 |
+
"preview_frames": 9,
|
| 1082 |
+
"preview_fps": 12,
|
| 1083 |
+
"tiny_vae": "taeh3.safetensors",
|
| 1084 |
+
"preview": ""
|
| 1085 |
+
},
|
| 1086 |
+
"color": "#233",
|
| 1087 |
+
"bgcolor": "#355"
|
| 1088 |
+
},
|
| 1089 |
+
{
|
| 1090 |
+
"id": 18,
|
| 1091 |
+
"type": "LTXVConcatAVLatent",
|
| 1092 |
+
"pos": [
|
| 1093 |
+
3519.8709916998964,
|
| 1094 |
+
5544.8126149799
|
| 1095 |
+
],
|
| 1096 |
+
"size": [
|
| 1097 |
+
286.8360679651149,
|
| 1098 |
+
46
|
| 1099 |
+
],
|
| 1100 |
+
"flags": {},
|
| 1101 |
+
"order": 36,
|
| 1102 |
+
"mode": 0,
|
| 1103 |
+
"inputs": [
|
| 1104 |
+
{
|
| 1105 |
+
"label": "video_latent",
|
| 1106 |
+
"name": "video_latent",
|
| 1107 |
+
"type": "LATENT",
|
| 1108 |
+
"link": 25
|
| 1109 |
+
},
|
| 1110 |
+
{
|
| 1111 |
+
"label": "audio_latent",
|
| 1112 |
+
"name": "audio_latent",
|
| 1113 |
+
"type": "LATENT",
|
| 1114 |
+
"link": 26
|
| 1115 |
+
}
|
| 1116 |
+
],
|
| 1117 |
+
"outputs": [
|
| 1118 |
+
{
|
| 1119 |
+
"label": "latent",
|
| 1120 |
+
"name": "latent",
|
| 1121 |
+
"type": "LATENT",
|
| 1122 |
+
"links": [
|
| 1123 |
+
40
|
| 1124 |
+
]
|
| 1125 |
+
}
|
| 1126 |
+
],
|
| 1127 |
+
"properties": {
|
| 1128 |
+
"ue_properties": {
|
| 1129 |
+
"widget_ue_connectable": {},
|
| 1130 |
+
"version": "7.5.2",
|
| 1131 |
+
"input_ue_unconnectable": {}
|
| 1132 |
+
},
|
| 1133 |
+
"cnr_id": "comfy-core",
|
| 1134 |
+
"ver": "0.5.1",
|
| 1135 |
+
"Node name for S&R": "LTXVConcatAVLatent",
|
| 1136 |
+
"enableTabs": false,
|
| 1137 |
+
"tabWidth": 65,
|
| 1138 |
+
"tabXOffset": 10,
|
| 1139 |
+
"hasSecondTab": false,
|
| 1140 |
+
"secondTabText": "Send Back",
|
| 1141 |
+
"secondTabOffset": 80,
|
| 1142 |
+
"secondTabWidth": 65
|
| 1143 |
+
}
|
| 1144 |
+
},
|
| 1145 |
+
{
|
| 1146 |
+
"id": 19,
|
| 1147 |
+
"type": "MiniMaxH3ImageToVideo",
|
| 1148 |
+
"pos": [
|
| 1149 |
+
2053.827625494082,
|
| 1150 |
+
5271.729493415262
|
| 1151 |
+
],
|
| 1152 |
+
"size": [
|
| 1153 |
+
254.68831917761077,
|
| 1154 |
+
220
|
| 1155 |
+
],
|
| 1156 |
+
"flags": {},
|
| 1157 |
+
"order": 23,
|
| 1158 |
+
"mode": 0,
|
| 1159 |
+
"inputs": [
|
| 1160 |
+
{
|
| 1161 |
+
"name": "clip",
|
| 1162 |
+
"type": "CLIP",
|
| 1163 |
+
"link": 27
|
| 1164 |
+
},
|
| 1165 |
+
{
|
| 1166 |
+
"name": "vae",
|
| 1167 |
+
"type": "VAE",
|
| 1168 |
+
"link": 28
|
| 1169 |
+
},
|
| 1170 |
+
{
|
| 1171 |
+
"name": "first_frame",
|
| 1172 |
+
"shape": 7,
|
| 1173 |
+
"type": "IMAGE",
|
| 1174 |
+
"link": 29
|
| 1175 |
+
},
|
| 1176 |
+
{
|
| 1177 |
+
"name": "last_frame",
|
| 1178 |
+
"shape": 7,
|
| 1179 |
+
"type": "IMAGE",
|
| 1180 |
+
"link": 30
|
| 1181 |
+
},
|
| 1182 |
+
{
|
| 1183 |
+
"name": "prompt",
|
| 1184 |
+
"type": "STRING",
|
| 1185 |
+
"widget": {
|
| 1186 |
+
"name": "prompt"
|
| 1187 |
+
},
|
| 1188 |
+
"link": 31
|
| 1189 |
+
},
|
| 1190 |
+
{
|
| 1191 |
+
"name": "width",
|
| 1192 |
+
"type": "INT",
|
| 1193 |
+
"widget": {
|
| 1194 |
+
"name": "width"
|
| 1195 |
+
},
|
| 1196 |
+
"link": 32
|
| 1197 |
+
},
|
| 1198 |
+
{
|
| 1199 |
+
"name": "height",
|
| 1200 |
+
"type": "INT",
|
| 1201 |
+
"widget": {
|
| 1202 |
+
"name": "height"
|
| 1203 |
+
},
|
| 1204 |
+
"link": 33
|
| 1205 |
+
},
|
| 1206 |
+
{
|
| 1207 |
+
"name": "length",
|
| 1208 |
+
"type": "INT",
|
| 1209 |
+
"widget": {
|
| 1210 |
+
"name": "length"
|
| 1211 |
+
},
|
| 1212 |
+
"link": 34
|
| 1213 |
+
}
|
| 1214 |
+
],
|
| 1215 |
+
"outputs": [
|
| 1216 |
+
{
|
| 1217 |
+
"name": "positive",
|
| 1218 |
+
"type": "CONDITIONING",
|
| 1219 |
+
"links": [
|
| 1220 |
+
52
|
| 1221 |
+
]
|
| 1222 |
+
},
|
| 1223 |
+
{
|
| 1224 |
+
"name": "LATENT",
|
| 1225 |
+
"type": "LATENT",
|
| 1226 |
+
"links": []
|
| 1227 |
+
}
|
| 1228 |
+
],
|
| 1229 |
+
"properties": {
|
| 1230 |
+
"ue_properties": {
|
| 1231 |
+
"widget_ue_connectable": {},
|
| 1232 |
+
"version": "7.8",
|
| 1233 |
+
"input_ue_unconnectable": {}
|
| 1234 |
+
},
|
| 1235 |
+
"cnr_id": "comfy-core",
|
| 1236 |
+
"ver": "0.32.0",
|
| 1237 |
+
"Node name for S&R": "MiniMaxH3ImageToVideo"
|
| 1238 |
+
},
|
| 1239 |
+
"widgets_values": [
|
| 1240 |
+
"",
|
| 1241 |
+
1344,
|
| 1242 |
+
768,
|
| 1243 |
+
73
|
| 1244 |
+
],
|
| 1245 |
+
"widgets_values_named": {
|
| 1246 |
+
"prompt": "",
|
| 1247 |
+
"width": 1344,
|
| 1248 |
+
"height": 768,
|
| 1249 |
+
"length": 73
|
| 1250 |
+
}
|
| 1251 |
+
},
|
| 1252 |
+
{
|
| 1253 |
+
"id": 20,
|
| 1254 |
+
"type": "PrimitiveFloat",
|
| 1255 |
+
"pos": [
|
| 1256 |
+
1032.884221724624,
|
| 1257 |
+
6014.891597108754
|
| 1258 |
+
],
|
| 1259 |
+
"size": [
|
| 1260 |
+
270,
|
| 1261 |
+
70
|
| 1262 |
+
],
|
| 1263 |
+
"flags": {},
|
| 1264 |
+
"order": 6,
|
| 1265 |
+
"mode": 0,
|
| 1266 |
+
"inputs": [],
|
| 1267 |
+
"outputs": [
|
| 1268 |
+
{
|
| 1269 |
+
"name": "FLOAT",
|
| 1270 |
+
"type": "FLOAT",
|
| 1271 |
+
"links": [
|
| 1272 |
+
35
|
| 1273 |
+
]
|
| 1274 |
+
}
|
| 1275 |
+
],
|
| 1276 |
+
"title": "Float (Duration)",
|
| 1277 |
+
"properties": {
|
| 1278 |
+
"ue_properties": {
|
| 1279 |
+
"widget_ue_connectable": {},
|
| 1280 |
+
"version": "7.8",
|
| 1281 |
+
"input_ue_unconnectable": {}
|
| 1282 |
+
},
|
| 1283 |
+
"cnr_id": "comfy-core",
|
| 1284 |
+
"ver": "0.33.2",
|
| 1285 |
+
"Node name for S&R": "PrimitiveFloat"
|
| 1286 |
+
},
|
| 1287 |
+
"widgets_values": [
|
| 1288 |
+
5
|
| 1289 |
+
],
|
| 1290 |
+
"widgets_values_named": {
|
| 1291 |
+
"value": 5
|
| 1292 |
+
},
|
| 1293 |
+
"color": "#322",
|
| 1294 |
+
"bgcolor": "#533"
|
| 1295 |
+
},
|
| 1296 |
+
{
|
| 1297 |
+
"id": 21,
|
| 1298 |
+
"type": "CLIPLoader",
|
| 1299 |
+
"pos": [
|
| 1300 |
+
1022.1892320604375,
|
| 1301 |
+
5283.23147307899
|
| 1302 |
+
],
|
| 1303 |
+
"size": [
|
| 1304 |
+
640,
|
| 1305 |
+
120
|
| 1306 |
+
],
|
| 1307 |
+
"flags": {},
|
| 1308 |
+
"order": 7,
|
| 1309 |
+
"mode": 0,
|
| 1310 |
+
"inputs": [],
|
| 1311 |
+
"outputs": [
|
| 1312 |
+
{
|
| 1313 |
+
"name": "CLIP",
|
| 1314 |
+
"type": "CLIP",
|
| 1315 |
+
"links": [
|
| 1316 |
+
15,
|
| 1317 |
+
27
|
| 1318 |
+
]
|
| 1319 |
+
}
|
| 1320 |
+
],
|
| 1321 |
+
"properties": {
|
| 1322 |
+
"ue_properties": {
|
| 1323 |
+
"widget_ue_connectable": {},
|
| 1324 |
+
"version": "7.8",
|
| 1325 |
+
"input_ue_unconnectable": {}
|
| 1326 |
+
},
|
| 1327 |
+
"cnr_id": "comfy-core",
|
| 1328 |
+
"ver": "0.33.2",
|
| 1329 |
+
"Node name for S&R": "CLIPLoader",
|
| 1330 |
+
"models": [
|
| 1331 |
+
{
|
| 1332 |
+
"name": "qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 1333 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 1334 |
+
"directory": "text_encoders"
|
| 1335 |
+
}
|
| 1336 |
+
]
|
| 1337 |
+
},
|
| 1338 |
+
"widgets_values": [
|
| 1339 |
+
"qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 1340 |
+
"minimax",
|
| 1341 |
+
"default"
|
| 1342 |
+
],
|
| 1343 |
+
"widgets_values_named": {
|
| 1344 |
+
"clip_name": "qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 1345 |
+
"type": "minimax",
|
| 1346 |
+
"device": "default"
|
| 1347 |
+
}
|
| 1348 |
+
},
|
| 1349 |
+
{
|
| 1350 |
+
"id": 22,
|
| 1351 |
+
"type": "ResolutionSelector",
|
| 1352 |
+
"pos": [
|
| 1353 |
+
1035.834305565335,
|
| 1354 |
+
5835.209409598467
|
| 1355 |
+
],
|
| 1356 |
+
"size": [
|
| 1357 |
+
270.983361280237,
|
| 1358 |
+
126
|
| 1359 |
+
],
|
| 1360 |
+
"flags": {},
|
| 1361 |
+
"order": 8,
|
| 1362 |
+
"mode": 0,
|
| 1363 |
+
"showAdvanced": false,
|
| 1364 |
+
"inputs": [],
|
| 1365 |
+
"outputs": [
|
| 1366 |
+
{
|
| 1367 |
+
"name": "width",
|
| 1368 |
+
"type": "INT",
|
| 1369 |
+
"links": [
|
| 1370 |
+
20
|
| 1371 |
+
]
|
| 1372 |
+
},
|
| 1373 |
+
{
|
| 1374 |
+
"name": "height",
|
| 1375 |
+
"type": "INT",
|
| 1376 |
+
"links": [
|
| 1377 |
+
21
|
| 1378 |
+
]
|
| 1379 |
+
}
|
| 1380 |
+
],
|
| 1381 |
+
"title": "Resolution Selector (Size)",
|
| 1382 |
+
"properties": {
|
| 1383 |
+
"ue_properties": {
|
| 1384 |
+
"widget_ue_connectable": {},
|
| 1385 |
+
"version": "7.8",
|
| 1386 |
+
"input_ue_unconnectable": {}
|
| 1387 |
+
},
|
| 1388 |
+
"cnr_id": "comfy-core",
|
| 1389 |
+
"ver": "0.33.2",
|
| 1390 |
+
"Node name for S&R": "ResolutionSelector"
|
| 1391 |
+
},
|
| 1392 |
+
"widgets_values": [
|
| 1393 |
+
"16:9 (Widescreen)",
|
| 1394 |
+
0.2,
|
| 1395 |
+
32
|
| 1396 |
+
],
|
| 1397 |
+
"widgets_values_named": {
|
| 1398 |
+
"aspect_ratio": "16:9 (Widescreen)",
|
| 1399 |
+
"megapixels": 0.2,
|
| 1400 |
+
"multiple": 32
|
| 1401 |
+
},
|
| 1402 |
+
"color": "#322",
|
| 1403 |
+
"bgcolor": "#533"
|
| 1404 |
+
},
|
| 1405 |
+
{
|
| 1406 |
+
"id": 23,
|
| 1407 |
+
"type": "ComfyMathExpression",
|
| 1408 |
+
"pos": [
|
| 1409 |
+
1161.2203497483204,
|
| 1410 |
+
6140.088998712415
|
| 1411 |
+
],
|
| 1412 |
+
"size": [
|
| 1413 |
+
225,
|
| 1414 |
+
116
|
| 1415 |
+
],
|
| 1416 |
+
"flags": {
|
| 1417 |
+
"collapsed": true
|
| 1418 |
+
},
|
| 1419 |
+
"order": 18,
|
| 1420 |
+
"mode": 0,
|
| 1421 |
+
"inputs": [
|
| 1422 |
+
{
|
| 1423 |
+
"label": "a",
|
| 1424 |
+
"name": "values.a",
|
| 1425 |
+
"type": "FLOAT,INT,BOOLEAN",
|
| 1426 |
+
"link": 35
|
| 1427 |
+
},
|
| 1428 |
+
{
|
| 1429 |
+
"label": "b",
|
| 1430 |
+
"name": "values.b",
|
| 1431 |
+
"shape": 7,
|
| 1432 |
+
"type": "FLOAT,INT,BOOLEAN",
|
| 1433 |
+
"link": null
|
| 1434 |
+
}
|
| 1435 |
+
],
|
| 1436 |
+
"outputs": [
|
| 1437 |
+
{
|
| 1438 |
+
"name": "FLOAT",
|
| 1439 |
+
"type": "FLOAT",
|
| 1440 |
+
"links": []
|
| 1441 |
+
},
|
| 1442 |
+
{
|
| 1443 |
+
"name": "INT",
|
| 1444 |
+
"type": "INT",
|
| 1445 |
+
"links": [
|
| 1446 |
+
22,
|
| 1447 |
+
24,
|
| 1448 |
+
34
|
| 1449 |
+
]
|
| 1450 |
+
},
|
| 1451 |
+
{
|
| 1452 |
+
"name": "BOOL",
|
| 1453 |
+
"type": "BOOLEAN",
|
| 1454 |
+
"links": []
|
| 1455 |
+
}
|
| 1456 |
+
],
|
| 1457 |
+
"properties": {
|
| 1458 |
+
"ue_properties": {
|
| 1459 |
+
"widget_ue_connectable": {},
|
| 1460 |
+
"version": "7.8",
|
| 1461 |
+
"input_ue_unconnectable": {}
|
| 1462 |
+
},
|
| 1463 |
+
"cnr_id": "comfy-core",
|
| 1464 |
+
"ver": "0.33.2",
|
| 1465 |
+
"Node name for S&R": "ComfyMathExpression"
|
| 1466 |
+
},
|
| 1467 |
+
"widgets_values": [
|
| 1468 |
+
"max(5, round(a * 24)) + (5 - (max(5, round(a * 24)) % 17)) % 17"
|
| 1469 |
+
],
|
| 1470 |
+
"widgets_values_named": {
|
| 1471 |
+
"expression": "max(5, round(a * 24)) + (5 - (max(5, round(a * 24)) % 17)) % 17"
|
| 1472 |
+
}
|
| 1473 |
+
},
|
| 1474 |
+
{
|
| 1475 |
+
"id": 24,
|
| 1476 |
+
"type": "ManualSigmas",
|
| 1477 |
+
"pos": [
|
| 1478 |
+
3908.508146540855,
|
| 1479 |
+
5381.63001827778
|
| 1480 |
+
],
|
| 1481 |
+
"size": [
|
| 1482 |
+
308.3164287851357,
|
| 1483 |
+
58
|
| 1484 |
+
],
|
| 1485 |
+
"flags": {},
|
| 1486 |
+
"order": 9,
|
| 1487 |
+
"mode": 0,
|
| 1488 |
+
"inputs": [
|
| 1489 |
+
{
|
| 1490 |
+
"label": "sigmas",
|
| 1491 |
+
"name": "sigmas",
|
| 1492 |
+
"type": "STRING",
|
| 1493 |
+
"widget": {
|
| 1494 |
+
"name": "sigmas"
|
| 1495 |
+
},
|
| 1496 |
+
"link": null
|
| 1497 |
+
}
|
| 1498 |
+
],
|
| 1499 |
+
"outputs": [
|
| 1500 |
+
{
|
| 1501 |
+
"label": "SIGMAS",
|
| 1502 |
+
"name": "SIGMAS",
|
| 1503 |
+
"type": "SIGMAS",
|
| 1504 |
+
"links": []
|
| 1505 |
+
}
|
| 1506 |
+
],
|
| 1507 |
+
"title": "4 step Sigmas",
|
| 1508 |
+
"properties": {
|
| 1509 |
+
"ue_properties": {
|
| 1510 |
+
"widget_ue_connectable": {},
|
| 1511 |
+
"version": "7.5.2",
|
| 1512 |
+
"input_ue_unconnectable": {}
|
| 1513 |
+
},
|
| 1514 |
+
"cnr_id": "comfy-core",
|
| 1515 |
+
"ver": "0.5.1",
|
| 1516 |
+
"Node name for S&R": "ManualSigmas",
|
| 1517 |
+
"enableTabs": false,
|
| 1518 |
+
"tabWidth": 65,
|
| 1519 |
+
"tabXOffset": 10,
|
| 1520 |
+
"hasSecondTab": false,
|
| 1521 |
+
"secondTabText": "Send Back",
|
| 1522 |
+
"secondTabOffset": 80,
|
| 1523 |
+
"secondTabWidth": 65
|
| 1524 |
+
},
|
| 1525 |
+
"widgets_values": [
|
| 1526 |
+
"0.9035, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 1527 |
+
],
|
| 1528 |
+
"widgets_values_named": {
|
| 1529 |
+
"sigmas": "0.9035, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 1530 |
+
}
|
| 1531 |
+
},
|
| 1532 |
+
{
|
| 1533 |
+
"id": 25,
|
| 1534 |
+
"type": "SamplerCustomAdvanced",
|
| 1535 |
+
"pos": [
|
| 1536 |
+
4246.03966844866,
|
| 1537 |
+
5134.519207068676
|
| 1538 |
+
],
|
| 1539 |
+
"size": [
|
| 1540 |
+
230,
|
| 1541 |
+
244.65625
|
| 1542 |
+
],
|
| 1543 |
+
"flags": {},
|
| 1544 |
+
"order": 37,
|
| 1545 |
+
"mode": 0,
|
| 1546 |
+
"inputs": [
|
| 1547 |
+
{
|
| 1548 |
+
"name": "noise",
|
| 1549 |
+
"type": "NOISE",
|
| 1550 |
+
"link": 36
|
| 1551 |
+
},
|
| 1552 |
+
{
|
| 1553 |
+
"name": "guider",
|
| 1554 |
+
"type": "GUIDER",
|
| 1555 |
+
"link": 37
|
| 1556 |
+
},
|
| 1557 |
+
{
|
| 1558 |
+
"name": "sampler",
|
| 1559 |
+
"type": "SAMPLER",
|
| 1560 |
+
"link": 38
|
| 1561 |
+
},
|
| 1562 |
+
{
|
| 1563 |
+
"name": "sigmas",
|
| 1564 |
+
"type": "SIGMAS",
|
| 1565 |
+
"link": 39
|
| 1566 |
+
},
|
| 1567 |
+
{
|
| 1568 |
+
"name": "latent_image",
|
| 1569 |
+
"type": "LATENT",
|
| 1570 |
+
"link": 40
|
| 1571 |
+
}
|
| 1572 |
+
],
|
| 1573 |
+
"outputs": [
|
| 1574 |
+
{
|
| 1575 |
+
"name": "output",
|
| 1576 |
+
"type": "LATENT",
|
| 1577 |
+
"links": [
|
| 1578 |
+
10,
|
| 1579 |
+
12
|
| 1580 |
+
]
|
| 1581 |
+
},
|
| 1582 |
+
{
|
| 1583 |
+
"name": "denoised_output",
|
| 1584 |
+
"type": "LATENT",
|
| 1585 |
+
"links": []
|
| 1586 |
+
}
|
| 1587 |
+
],
|
| 1588 |
+
"properties": {
|
| 1589 |
+
"ue_properties": {
|
| 1590 |
+
"widget_ue_connectable": {},
|
| 1591 |
+
"version": "7.8",
|
| 1592 |
+
"input_ue_unconnectable": {}
|
| 1593 |
+
},
|
| 1594 |
+
"cnr_id": "comfy-core",
|
| 1595 |
+
"ver": "0.33.2",
|
| 1596 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 1597 |
+
}
|
| 1598 |
+
},
|
| 1599 |
+
{
|
| 1600 |
+
"id": 26,
|
| 1601 |
+
"type": "SamplerCustomAdvanced",
|
| 1602 |
+
"pos": [
|
| 1603 |
+
3176.503986022757,
|
| 1604 |
+
5128.316087104825
|
| 1605 |
+
],
|
| 1606 |
+
"size": [
|
| 1607 |
+
230.98336128023698,
|
| 1608 |
+
302.67456553398097
|
| 1609 |
+
],
|
| 1610 |
+
"flags": {},
|
| 1611 |
+
"order": 30,
|
| 1612 |
+
"mode": 0,
|
| 1613 |
+
"inputs": [
|
| 1614 |
+
{
|
| 1615 |
+
"name": "noise",
|
| 1616 |
+
"type": "NOISE",
|
| 1617 |
+
"link": 41
|
| 1618 |
+
},
|
| 1619 |
+
{
|
| 1620 |
+
"name": "guider",
|
| 1621 |
+
"type": "GUIDER",
|
| 1622 |
+
"link": 42
|
| 1623 |
+
},
|
| 1624 |
+
{
|
| 1625 |
+
"name": "sampler",
|
| 1626 |
+
"type": "SAMPLER",
|
| 1627 |
+
"link": 43
|
| 1628 |
+
},
|
| 1629 |
+
{
|
| 1630 |
+
"name": "sigmas",
|
| 1631 |
+
"type": "SIGMAS",
|
| 1632 |
+
"link": 44
|
| 1633 |
+
},
|
| 1634 |
+
{
|
| 1635 |
+
"name": "latent_image",
|
| 1636 |
+
"type": "LATENT",
|
| 1637 |
+
"link": 45
|
| 1638 |
+
}
|
| 1639 |
+
],
|
| 1640 |
+
"outputs": [
|
| 1641 |
+
{
|
| 1642 |
+
"name": "output",
|
| 1643 |
+
"type": "LATENT",
|
| 1644 |
+
"links": []
|
| 1645 |
+
},
|
| 1646 |
+
{
|
| 1647 |
+
"name": "denoised_output",
|
| 1648 |
+
"type": "LATENT",
|
| 1649 |
+
"links": [
|
| 1650 |
+
3,
|
| 1651 |
+
7,
|
| 1652 |
+
55
|
| 1653 |
+
]
|
| 1654 |
+
}
|
| 1655 |
+
],
|
| 1656 |
+
"properties": {
|
| 1657 |
+
"ue_properties": {
|
| 1658 |
+
"widget_ue_connectable": {},
|
| 1659 |
+
"version": "7.8",
|
| 1660 |
+
"input_ue_unconnectable": {}
|
| 1661 |
+
},
|
| 1662 |
+
"cnr_id": "comfy-core",
|
| 1663 |
+
"ver": "0.33.2",
|
| 1664 |
+
"Node name for S&R": "SamplerCustomAdvanced"
|
| 1665 |
+
}
|
| 1666 |
+
},
|
| 1667 |
+
{
|
| 1668 |
+
"id": 27,
|
| 1669 |
+
"type": "PrimitiveFloat",
|
| 1670 |
+
"pos": [
|
| 1671 |
+
1029.8193877921321,
|
| 1672 |
+
6209.720798413607
|
| 1673 |
+
],
|
| 1674 |
+
"size": [
|
| 1675 |
+
275.0797862917766,
|
| 1676 |
+
58
|
| 1677 |
+
],
|
| 1678 |
+
"flags": {},
|
| 1679 |
+
"order": 10,
|
| 1680 |
+
"mode": 0,
|
| 1681 |
+
"inputs": [],
|
| 1682 |
+
"outputs": [
|
| 1683 |
+
{
|
| 1684 |
+
"name": "FLOAT",
|
| 1685 |
+
"type": "FLOAT",
|
| 1686 |
+
"links": [
|
| 1687 |
+
14
|
| 1688 |
+
]
|
| 1689 |
+
}
|
| 1690 |
+
],
|
| 1691 |
+
"title": "target_megapixels(放大的像素数)",
|
| 1692 |
+
"properties": {
|
| 1693 |
+
"ue_properties": {
|
| 1694 |
+
"widget_ue_connectable": {},
|
| 1695 |
+
"input_ue_unconnectable": {},
|
| 1696 |
+
"version": "7.8"
|
| 1697 |
+
},
|
| 1698 |
+
"cnr_id": "comfy-core",
|
| 1699 |
+
"ver": "0.33.2",
|
| 1700 |
+
"Node name for S&R": "PrimitiveFloat"
|
| 1701 |
+
},
|
| 1702 |
+
"widgets_values": [
|
| 1703 |
+
1
|
| 1704 |
+
],
|
| 1705 |
+
"widgets_values_named": {
|
| 1706 |
+
"value": 1
|
| 1707 |
+
},
|
| 1708 |
+
"color": "#232",
|
| 1709 |
+
"bgcolor": "#353"
|
| 1710 |
+
},
|
| 1711 |
+
{
|
| 1712 |
+
"id": 28,
|
| 1713 |
+
"type": "MinimaxH3LatentUpscaler3D",
|
| 1714 |
+
"pos": [
|
| 1715 |
+
3517.3533034183665,
|
| 1716 |
+
5256.613801714128
|
| 1717 |
+
],
|
| 1718 |
+
"size": [
|
| 1719 |
+
286.836067965115,
|
| 1720 |
+
226
|
| 1721 |
+
],
|
| 1722 |
+
"flags": {},
|
| 1723 |
+
"order": 35,
|
| 1724 |
+
"mode": 0,
|
| 1725 |
+
"inputs": [
|
| 1726 |
+
{
|
| 1727 |
+
"name": "latent",
|
| 1728 |
+
"type": "*",
|
| 1729 |
+
"link": 46
|
| 1730 |
+
},
|
| 1731 |
+
{
|
| 1732 |
+
"name": "mode.width",
|
| 1733 |
+
"type": "INT",
|
| 1734 |
+
"widget": {
|
| 1735 |
+
"name": "mode.width"
|
| 1736 |
+
},
|
| 1737 |
+
"link": 47
|
| 1738 |
+
},
|
| 1739 |
+
{
|
| 1740 |
+
"name": "mode.height",
|
| 1741 |
+
"type": "INT",
|
| 1742 |
+
"widget": {
|
| 1743 |
+
"name": "mode.height"
|
| 1744 |
+
},
|
| 1745 |
+
"link": 48
|
| 1746 |
+
}
|
| 1747 |
+
],
|
| 1748 |
+
"outputs": [
|
| 1749 |
+
{
|
| 1750 |
+
"name": "latent",
|
| 1751 |
+
"type": "*",
|
| 1752 |
+
"links": [
|
| 1753 |
+
25
|
| 1754 |
+
]
|
| 1755 |
+
}
|
| 1756 |
+
],
|
| 1757 |
+
"properties": {
|
| 1758 |
+
"ue_properties": {
|
| 1759 |
+
"widget_ue_connectable": {},
|
| 1760 |
+
"input_ue_unconnectable": {},
|
| 1761 |
+
"version": "7.8"
|
| 1762 |
+
},
|
| 1763 |
+
"Node name for S&R": "MinimaxH3LatentUpscaler3D"
|
| 1764 |
+
},
|
| 1765 |
+
"widgets_values": [
|
| 1766 |
+
"minimax_h3_latent_upscaler_3d_fp16.safetensors",
|
| 1767 |
+
"target dimensions",
|
| 1768 |
+
1280,
|
| 1769 |
+
704,
|
| 1770 |
+
32,
|
| 1771 |
+
false,
|
| 1772 |
+
"cuda",
|
| 1773 |
+
"fp16"
|
| 1774 |
+
],
|
| 1775 |
+
"widgets_values_named": {
|
| 1776 |
+
"model_name": "minimax_h3_latent_upscaler_3d_fp16.safetensors",
|
| 1777 |
+
"mode": "target dimensions",
|
| 1778 |
+
"mode.width": 1280,
|
| 1779 |
+
"mode.height": 704,
|
| 1780 |
+
"align": 32,
|
| 1781 |
+
"keep_proportion": false,
|
| 1782 |
+
"device": "cuda",
|
| 1783 |
+
"precision": "fp16"
|
| 1784 |
+
}
|
| 1785 |
+
},
|
| 1786 |
+
{
|
| 1787 |
+
"id": 29,
|
| 1788 |
+
"type": "KSamplerSelect",
|
| 1789 |
+
"pos": [
|
| 1790 |
+
2823.6430428367066,
|
| 1791 |
+
5271.216818760441
|
| 1792 |
+
],
|
| 1793 |
+
"size": [
|
| 1794 |
+
308.3164287851357,
|
| 1795 |
+
58
|
| 1796 |
+
],
|
| 1797 |
+
"flags": {},
|
| 1798 |
+
"order": 11,
|
| 1799 |
+
"mode": 0,
|
| 1800 |
+
"inputs": [],
|
| 1801 |
+
"outputs": [
|
| 1802 |
+
{
|
| 1803 |
+
"name": "SAMPLER",
|
| 1804 |
+
"type": "SAMPLER",
|
| 1805 |
+
"links": [
|
| 1806 |
+
38,
|
| 1807 |
+
43
|
| 1808 |
+
]
|
| 1809 |
+
}
|
| 1810 |
+
],
|
| 1811 |
+
"properties": {
|
| 1812 |
+
"ue_properties": {
|
| 1813 |
+
"widget_ue_connectable": {},
|
| 1814 |
+
"version": "7.8",
|
| 1815 |
+
"input_ue_unconnectable": {}
|
| 1816 |
+
},
|
| 1817 |
+
"cnr_id": "comfy-core",
|
| 1818 |
+
"ver": "0.33.2",
|
| 1819 |
+
"Node name for S&R": "KSamplerSelect"
|
| 1820 |
+
},
|
| 1821 |
+
"widgets_values": [
|
| 1822 |
+
"euler"
|
| 1823 |
+
],
|
| 1824 |
+
"widgets_values_named": {
|
| 1825 |
+
"sampler_name": "euler"
|
| 1826 |
+
}
|
| 1827 |
+
},
|
| 1828 |
+
{
|
| 1829 |
+
"id": 30,
|
| 1830 |
+
"type": "ManualSigmas",
|
| 1831 |
+
"pos": [
|
| 1832 |
+
3908.508146540855,
|
| 1833 |
+
5278.999981525025
|
| 1834 |
+
],
|
| 1835 |
+
"size": [
|
| 1836 |
+
308.3164287851357,
|
| 1837 |
+
58
|
| 1838 |
+
],
|
| 1839 |
+
"flags": {},
|
| 1840 |
+
"order": 12,
|
| 1841 |
+
"mode": 0,
|
| 1842 |
+
"inputs": [
|
| 1843 |
+
{
|
| 1844 |
+
"label": "sigmas",
|
| 1845 |
+
"name": "sigmas",
|
| 1846 |
+
"type": "STRING",
|
| 1847 |
+
"widget": {
|
| 1848 |
+
"name": "sigmas"
|
| 1849 |
+
},
|
| 1850 |
+
"link": null
|
| 1851 |
+
}
|
| 1852 |
+
],
|
| 1853 |
+
"outputs": [
|
| 1854 |
+
{
|
| 1855 |
+
"label": "SIGMAS",
|
| 1856 |
+
"name": "SIGMAS",
|
| 1857 |
+
"type": "SIGMAS",
|
| 1858 |
+
"links": [
|
| 1859 |
+
39
|
| 1860 |
+
]
|
| 1861 |
+
}
|
| 1862 |
+
],
|
| 1863 |
+
"title": "3 step Sigmas",
|
| 1864 |
+
"properties": {
|
| 1865 |
+
"ue_properties": {
|
| 1866 |
+
"widget_ue_connectable": {},
|
| 1867 |
+
"version": "7.5.2",
|
| 1868 |
+
"input_ue_unconnectable": {}
|
| 1869 |
+
},
|
| 1870 |
+
"cnr_id": "comfy-core",
|
| 1871 |
+
"ver": "0.5.1",
|
| 1872 |
+
"Node name for S&R": "ManualSigmas",
|
| 1873 |
+
"enableTabs": false,
|
| 1874 |
+
"tabWidth": 65,
|
| 1875 |
+
"tabXOffset": 10,
|
| 1876 |
+
"hasSecondTab": false,
|
| 1877 |
+
"secondTabText": "Send Back",
|
| 1878 |
+
"secondTabOffset": 80,
|
| 1879 |
+
"secondTabWidth": 65
|
| 1880 |
+
},
|
| 1881 |
+
"widgets_values": [
|
| 1882 |
+
"0.9035, 0.6316, 0.3158, 0.0000"
|
| 1883 |
+
],
|
| 1884 |
+
"widgets_values_named": {
|
| 1885 |
+
"sigmas": "0.9035, 0.6316, 0.3158, 0.0000"
|
| 1886 |
+
}
|
| 1887 |
+
},
|
| 1888 |
+
{
|
| 1889 |
+
"id": 31,
|
| 1890 |
+
"type": "MarkdownNote",
|
| 1891 |
+
"pos": [
|
| 1892 |
+
494.78201888763215,
|
| 1893 |
+
5065.247043792415
|
| 1894 |
+
],
|
| 1895 |
+
"size": [
|
| 1896 |
+
440,
|
| 1897 |
+
823.8125
|
| 1898 |
+
],
|
| 1899 |
+
"flags": {},
|
| 1900 |
+
"order": 13,
|
| 1901 |
+
"mode": 0,
|
| 1902 |
+
"inputs": [],
|
| 1903 |
+
"outputs": [],
|
| 1904 |
+
"title": "Note: Model Links",
|
| 1905 |
+
"properties": {
|
| 1906 |
+
"ue_properties": {
|
| 1907 |
+
"widget_ue_connectable": {},
|
| 1908 |
+
"version": "7.8",
|
| 1909 |
+
"input_ue_unconnectable": {}
|
| 1910 |
+
}
|
| 1911 |
+
},
|
| 1912 |
+
"widgets_values": [
|
| 1913 |
+
"Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Links\n\n**vae**\n\n- [minimax_h3_video_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors)\n- [minimax_h3_audio_vae_fp32.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors)\n\n**diffusion_models**\n\n- [minimax_h3_fl2va_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_fl2va_pruned_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors)\n\n**loras**\n\n- 8 steps: [minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors](https://huggingface.co/lightx2v/Minimax-h3-Turbo/resolve/main/minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors)\n- 4 steps: [minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/loras/minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors)\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ ├── minimax_h3_video_vae_fp16.safetensors\n│ │ └── minimax_h3_audio_vae_fp32.safetensors\n│ ├── 📂 diffusion_models/\n│ │ └── minimax_h3_fl2va_pruned_int8_convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors\n│ └── 📂 loras/\n│ └── minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
|
| 1914 |
+
],
|
| 1915 |
+
"widgets_values_named": {
|
| 1916 |
+
"text": "Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Links\n\n**vae**\n\n- [minimax_h3_video_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors)\n- [minimax_h3_audio_vae_fp32.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors)\n\n**diffusion_models**\n\n- [minimax_h3_fl2va_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_fl2va_pruned_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors)\n\n**loras**\n\n- 8 steps: [minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors](https://huggingface.co/lightx2v/Minimax-h3-Turbo/resolve/main/minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors)\n- 4 steps: [minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/loras/minimax_h3_fl2v_turbo_4step_v1.0_768p_comfyui_bf16.safetensors)\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ ├── minimax_h3_video_vae_fp16.safetensors\n│ │ └── minimax_h3_audio_vae_fp32.safetensors\n│ ├── 📂 diffusion_models/\n│ │ └── minimax_h3_fl2va_pruned_int8_convrot.safetensors\n│ ├── 📂 text_encoders/\n│ │ └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors\n│ └── 📂 loras/\n│ └── minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
|
| 1917 |
+
},
|
| 1918 |
+
"color": "#222",
|
| 1919 |
+
"bgcolor": "#000"
|
| 1920 |
+
},
|
| 1921 |
+
{
|
| 1922 |
+
"id": 32,
|
| 1923 |
+
"type": "MarkdownNote",
|
| 1924 |
+
"pos": [
|
| 1925 |
+
619.2485783896982,
|
| 1926 |
+
5976.897338708028
|
| 1927 |
+
],
|
| 1928 |
+
"size": [
|
| 1929 |
+
300,
|
| 1930 |
+
520
|
| 1931 |
+
],
|
| 1932 |
+
"flags": {},
|
| 1933 |
+
"order": 14,
|
| 1934 |
+
"mode": 0,
|
| 1935 |
+
"inputs": [],
|
| 1936 |
+
"outputs": [],
|
| 1937 |
+
"title": "Note: Size Settings Reference",
|
| 1938 |
+
"properties": {
|
| 1939 |
+
"ue_properties": {
|
| 1940 |
+
"widget_ue_connectable": {},
|
| 1941 |
+
"version": "7.8",
|
| 1942 |
+
"input_ue_unconnectable": {}
|
| 1943 |
+
}
|
| 1944 |
+
},
|
| 1945 |
+
"widgets_values": [
|
| 1946 |
+
"| megapixels | Aspect | Output (multiple=32) |\n|---|---|---|\n| 0.2 | 16:9 | 608 x 352 |\n| 0.3 | 16:9 | 736 x 416 |\n| 0.4 | 16:9 | 864 x 480 |\n| 0.5 | 16:9 | 960 x 544 |\n| 0.6 | 16:9 | 1056 x 608 |\n| 0.7 | 16:9 | 1152 x 640 |\n| 0.8 | 16:9 | 1216 x 672 |\n| 0.9 | 16:9 | 1280 x 736 |\n| 0.98 | 16:9 | 1344 x 768 |\n| 1.0 | 16:9 | 1376 x 768 |\n| 1.2 | 16:9 | 1504 x 832 |\n| 1.5 | 16:9 | 1664 x 928 |\n| 1.8 | 16:9 | 1824 x 1024 |\n| 2.0 | 16:9 | 1920 x 1088 |\n"
|
| 1947 |
+
],
|
| 1948 |
+
"widgets_values_named": {
|
| 1949 |
+
"text": "| megapixels | Aspect | Output (multiple=32) |\n|---|---|---|\n| 0.2 | 16:9 | 608 x 352 |\n| 0.3 | 16:9 | 736 x 416 |\n| 0.4 | 16:9 | 864 x 480 |\n| 0.5 | 16:9 | 960 x 544 |\n| 0.6 | 16:9 | 1056 x 608 |\n| 0.7 | 16:9 | 1152 x 640 |\n| 0.8 | 16:9 | 1216 x 672 |\n| 0.9 | 16:9 | 1280 x 736 |\n| 0.98 | 16:9 | 1344 x 768 |\n| 1.0 | 16:9 | 1376 x 768 |\n| 1.2 | 16:9 | 1504 x 832 |\n| 1.5 | 16:9 | 1664 x 928 |\n| 1.8 | 16:9 | 1824 x 1024 |\n| 2.0 | 16:9 | 1920 x 1088 |\n"
|
| 1950 |
+
},
|
| 1951 |
+
"color": "#222",
|
| 1952 |
+
"bgcolor": "#000"
|
| 1953 |
+
},
|
| 1954 |
+
{
|
| 1955 |
+
"id": 33,
|
| 1956 |
+
"type": "BasicGuider",
|
| 1957 |
+
"pos": [
|
| 1958 |
+
2823.6430428367066,
|
| 1959 |
+
5152.136280676316
|
| 1960 |
+
],
|
| 1961 |
+
"size": [
|
| 1962 |
+
308.3164287851357,
|
| 1963 |
+
60
|
| 1964 |
+
],
|
| 1965 |
+
"flags": {},
|
| 1966 |
+
"order": 29,
|
| 1967 |
+
"mode": 0,
|
| 1968 |
+
"inputs": [
|
| 1969 |
+
{
|
| 1970 |
+
"name": "model",
|
| 1971 |
+
"type": "MODEL",
|
| 1972 |
+
"link": 49
|
| 1973 |
+
},
|
| 1974 |
+
{
|
| 1975 |
+
"name": "conditioning",
|
| 1976 |
+
"type": "CONDITIONING",
|
| 1977 |
+
"link": 50
|
| 1978 |
+
}
|
| 1979 |
+
],
|
| 1980 |
+
"outputs": [
|
| 1981 |
+
{
|
| 1982 |
+
"name": "GUIDER",
|
| 1983 |
+
"type": "GUIDER",
|
| 1984 |
+
"links": [
|
| 1985 |
+
42
|
| 1986 |
+
]
|
| 1987 |
+
}
|
| 1988 |
+
],
|
| 1989 |
+
"properties": {
|
| 1990 |
+
"ue_properties": {
|
| 1991 |
+
"widget_ue_connectable": {},
|
| 1992 |
+
"version": "7.8",
|
| 1993 |
+
"input_ue_unconnectable": {}
|
| 1994 |
+
},
|
| 1995 |
+
"cnr_id": "comfy-core",
|
| 1996 |
+
"ver": "0.33.2",
|
| 1997 |
+
"Node name for S&R": "BasicGuider"
|
| 1998 |
+
}
|
| 1999 |
+
},
|
| 2000 |
+
{
|
| 2001 |
+
"id": 34,
|
| 2002 |
+
"type": "UNETLoader",
|
| 2003 |
+
"pos": [
|
| 2004 |
+
1021.6194926311771,
|
| 2005 |
+
5128.795241774153
|
| 2006 |
+
],
|
| 2007 |
+
"size": [
|
| 2008 |
+
640,
|
| 2009 |
+
90
|
| 2010 |
+
],
|
| 2011 |
+
"flags": {},
|
| 2012 |
+
"order": 15,
|
| 2013 |
+
"mode": 0,
|
| 2014 |
+
"inputs": [],
|
| 2015 |
+
"outputs": [
|
| 2016 |
+
{
|
| 2017 |
+
"name": "MODEL",
|
| 2018 |
+
"type": "MODEL",
|
| 2019 |
+
"links": [
|
| 2020 |
+
9,
|
| 2021 |
+
57
|
| 2022 |
+
]
|
| 2023 |
+
}
|
| 2024 |
+
],
|
| 2025 |
+
"properties": {
|
| 2026 |
+
"ue_properties": {
|
| 2027 |
+
"widget_ue_connectable": {},
|
| 2028 |
+
"version": "7.8",
|
| 2029 |
+
"input_ue_unconnectable": {}
|
| 2030 |
+
},
|
| 2031 |
+
"cnr_id": "comfy-core",
|
| 2032 |
+
"ver": "0.33.2",
|
| 2033 |
+
"Node name for S&R": "UNETLoader",
|
| 2034 |
+
"models": [
|
| 2035 |
+
{
|
| 2036 |
+
"name": "minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 2037 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 2038 |
+
"directory": "diffusion_models"
|
| 2039 |
+
}
|
| 2040 |
+
]
|
| 2041 |
+
},
|
| 2042 |
+
"widgets_values": [
|
| 2043 |
+
"minimax_h3_fl2va_int8_convrot.safetensors",
|
| 2044 |
+
"default"
|
| 2045 |
+
],
|
| 2046 |
+
"widgets_values_named": {
|
| 2047 |
+
"unet_name": "minimax_h3_fl2va_int8_convrot.safetensors",
|
| 2048 |
+
"weight_dtype": "default"
|
| 2049 |
+
}
|
| 2050 |
+
},
|
| 2051 |
+
{
|
| 2052 |
+
"id": 35,
|
| 2053 |
+
"type": "BasicGuider",
|
| 2054 |
+
"pos": [
|
| 2055 |
+
3908.508146540855,
|
| 2056 |
+
5153.527207254698
|
| 2057 |
+
],
|
| 2058 |
+
"size": [
|
| 2059 |
+
308.3164287851357,
|
| 2060 |
+
60
|
| 2061 |
+
],
|
| 2062 |
+
"flags": {},
|
| 2063 |
+
"order": 28,
|
| 2064 |
+
"mode": 0,
|
| 2065 |
+
"inputs": [
|
| 2066 |
+
{
|
| 2067 |
+
"name": "model",
|
| 2068 |
+
"type": "MODEL",
|
| 2069 |
+
"link": 51
|
| 2070 |
+
},
|
| 2071 |
+
{
|
| 2072 |
+
"name": "conditioning",
|
| 2073 |
+
"type": "CONDITIONING",
|
| 2074 |
+
"link": 52
|
| 2075 |
+
}
|
| 2076 |
+
],
|
| 2077 |
+
"outputs": [
|
| 2078 |
+
{
|
| 2079 |
+
"name": "GUIDER",
|
| 2080 |
+
"type": "GUIDER",
|
| 2081 |
+
"links": [
|
| 2082 |
+
37
|
| 2083 |
+
]
|
| 2084 |
+
}
|
| 2085 |
+
],
|
| 2086 |
+
"properties": {
|
| 2087 |
+
"ue_properties": {
|
| 2088 |
+
"widget_ue_connectable": {},
|
| 2089 |
+
"version": "7.8",
|
| 2090 |
+
"input_ue_unconnectable": {}
|
| 2091 |
+
},
|
| 2092 |
+
"cnr_id": "comfy-core",
|
| 2093 |
+
"ver": "0.33.2",
|
| 2094 |
+
"Node name for S&R": "BasicGuider"
|
| 2095 |
+
}
|
| 2096 |
+
},
|
| 2097 |
+
{
|
| 2098 |
+
"id": 36,
|
| 2099 |
+
"type": "CreateVideo",
|
| 2100 |
+
"pos": [
|
| 2101 |
+
4513.419976243165,
|
| 2102 |
+
5133.073653450162
|
| 2103 |
+
],
|
| 2104 |
+
"size": [
|
| 2105 |
+
283.1269337209078,
|
| 2106 |
+
102
|
| 2107 |
+
],
|
| 2108 |
+
"flags": {},
|
| 2109 |
+
"order": 40,
|
| 2110 |
+
"mode": 0,
|
| 2111 |
+
"inputs": [
|
| 2112 |
+
{
|
| 2113 |
+
"name": "images",
|
| 2114 |
+
"type": "IMAGE",
|
| 2115 |
+
"link": 53
|
| 2116 |
+
},
|
| 2117 |
+
{
|
| 2118 |
+
"name": "audio",
|
| 2119 |
+
"shape": 7,
|
| 2120 |
+
"type": "AUDIO",
|
| 2121 |
+
"link": 54
|
| 2122 |
+
}
|
| 2123 |
+
],
|
| 2124 |
+
"outputs": [
|
| 2125 |
+
{
|
| 2126 |
+
"name": "VIDEO",
|
| 2127 |
+
"type": "VIDEO",
|
| 2128 |
+
"links": [
|
| 2129 |
+
6
|
| 2130 |
+
]
|
| 2131 |
+
}
|
| 2132 |
+
],
|
| 2133 |
+
"properties": {
|
| 2134 |
+
"ue_properties": {
|
| 2135 |
+
"widget_ue_connectable": {},
|
| 2136 |
+
"version": "7.8",
|
| 2137 |
+
"input_ue_unconnectable": {}
|
| 2138 |
+
},
|
| 2139 |
+
"cnr_id": "comfy-core",
|
| 2140 |
+
"ver": "0.33.2",
|
| 2141 |
+
"Node name for S&R": "CreateVideo"
|
| 2142 |
+
},
|
| 2143 |
+
"widgets_values": [
|
| 2144 |
+
24,
|
| 2145 |
+
8
|
| 2146 |
+
],
|
| 2147 |
+
"widgets_values_named": {
|
| 2148 |
+
"fps": 24,
|
| 2149 |
+
"bit_depth": 8
|
| 2150 |
+
}
|
| 2151 |
+
},
|
| 2152 |
+
{
|
| 2153 |
+
"id": 37,
|
| 2154 |
+
"type": "RandomNoise",
|
| 2155 |
+
"pos": [
|
| 2156 |
+
1762.6607460983612,
|
| 2157 |
+
5127.777700325522
|
| 2158 |
+
],
|
| 2159 |
+
"size": [
|
| 2160 |
+
258.683290941065,
|
| 2161 |
+
82
|
| 2162 |
+
],
|
| 2163 |
+
"flags": {},
|
| 2164 |
+
"order": 16,
|
| 2165 |
+
"mode": 0,
|
| 2166 |
+
"inputs": [],
|
| 2167 |
+
"outputs": [
|
| 2168 |
+
{
|
| 2169 |
+
"name": "NOISE",
|
| 2170 |
+
"type": "NOISE",
|
| 2171 |
+
"links": [
|
| 2172 |
+
36,
|
| 2173 |
+
41
|
| 2174 |
+
]
|
| 2175 |
+
}
|
| 2176 |
+
],
|
| 2177 |
+
"properties": {
|
| 2178 |
+
"ue_properties": {
|
| 2179 |
+
"widget_ue_connectable": {},
|
| 2180 |
+
"version": "7.8",
|
| 2181 |
+
"input_ue_unconnectable": {}
|
| 2182 |
+
},
|
| 2183 |
+
"cnr_id": "comfy-core",
|
| 2184 |
+
"ver": "0.33.2",
|
| 2185 |
+
"Node name for S&R": "RandomNoise"
|
| 2186 |
+
},
|
| 2187 |
+
"widgets_values": [
|
| 2188 |
+
42,
|
| 2189 |
+
"fixed"
|
| 2190 |
+
],
|
| 2191 |
+
"widgets_values_named": {
|
| 2192 |
+
"noise_seed": 42,
|
| 2193 |
+
"control_after_generate": "fixed"
|
| 2194 |
+
}
|
| 2195 |
+
},
|
| 2196 |
+
{
|
| 2197 |
+
"id": 38,
|
| 2198 |
+
"type": "LTXVSeparateAVLatent",
|
| 2199 |
+
"pos": [
|
| 2200 |
+
3515.6748445640137,
|
| 2201 |
+
5141.589345008434
|
| 2202 |
+
],
|
| 2203 |
+
"size": [
|
| 2204 |
+
286.836067965115,
|
| 2205 |
+
48.43467905382113
|
| 2206 |
+
],
|
| 2207 |
+
"flags": {},
|
| 2208 |
+
"order": 33,
|
| 2209 |
+
"mode": 0,
|
| 2210 |
+
"inputs": [
|
| 2211 |
+
{
|
| 2212 |
+
"label": "av_latent",
|
| 2213 |
+
"name": "av_latent",
|
| 2214 |
+
"type": "LATENT",
|
| 2215 |
+
"link": 55
|
| 2216 |
+
}
|
| 2217 |
+
],
|
| 2218 |
+
"outputs": [
|
| 2219 |
+
{
|
| 2220 |
+
"label": "video_latent",
|
| 2221 |
+
"name": "video_latent",
|
| 2222 |
+
"type": "LATENT",
|
| 2223 |
+
"links": [
|
| 2224 |
+
46
|
| 2225 |
+
]
|
| 2226 |
+
},
|
| 2227 |
+
{
|
| 2228 |
+
"label": "audio_latent",
|
| 2229 |
+
"name": "audio_latent",
|
| 2230 |
+
"type": "LATENT",
|
| 2231 |
+
"links": [
|
| 2232 |
+
26
|
| 2233 |
+
]
|
| 2234 |
+
}
|
| 2235 |
+
],
|
| 2236 |
+
"properties": {
|
| 2237 |
+
"ue_properties": {
|
| 2238 |
+
"widget_ue_connectable": {},
|
| 2239 |
+
"version": "7.5.2",
|
| 2240 |
+
"input_ue_unconnectable": {}
|
| 2241 |
+
},
|
| 2242 |
+
"cnr_id": "comfy-core",
|
| 2243 |
+
"ver": "0.5.1",
|
| 2244 |
+
"Node name for S&R": "LTXVSeparateAVLatent",
|
| 2245 |
+
"enableTabs": false,
|
| 2246 |
+
"tabWidth": 65,
|
| 2247 |
+
"tabXOffset": 10,
|
| 2248 |
+
"hasSecondTab": false,
|
| 2249 |
+
"secondTabText": "Send Back",
|
| 2250 |
+
"secondTabOffset": 80,
|
| 2251 |
+
"secondTabWidth": 65
|
| 2252 |
+
}
|
| 2253 |
+
},
|
| 2254 |
+
{
|
| 2255 |
+
"id": 39,
|
| 2256 |
+
"type": "MarkdownNote",
|
| 2257 |
+
"pos": [
|
| 2258 |
+
-248.89143937390827,
|
| 2259 |
+
5059.017541561554
|
| 2260 |
+
],
|
| 2261 |
+
"size": [
|
| 2262 |
+
704.1847986543371,
|
| 2263 |
+
1486.7010497507154
|
| 2264 |
+
],
|
| 2265 |
+
"flags": {},
|
| 2266 |
+
"order": 17,
|
| 2267 |
+
"mode": 0,
|
| 2268 |
+
"inputs": [],
|
| 2269 |
+
"outputs": [],
|
| 2270 |
+
"title": "Note: Model Links",
|
| 2271 |
+
"properties": {
|
| 2272 |
+
"ue_properties": {
|
| 2273 |
+
"widget_ue_connectable": {},
|
| 2274 |
+
"version": "7.5.2",
|
| 2275 |
+
"input_ue_unconnectable": {}
|
| 2276 |
+
}
|
| 2277 |
+
},
|
| 2278 |
+
"widgets_values": [
|
| 2279 |
+
"# 工作流说明 / Workflow Notes\n\n## 需要安装的第三方节点\n\n[🤗 H3 的浅空间放大节点](https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler)\n\n```bash\ncd ComfyUI/custom_nodes\ngit clone https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler.git\n```\n\n---\n\n## 模型下载与放置\n\n**H3 浅空间放大模型,放置在 `ComfyUI/models/latent_upscale_models/`**\n\n| 文件名 | 精度 | 大小 | 适用场景 |\n| :--- | :--- | :--- | :--- |\n| [minimax_h3_latent_upscaler_3d_bf16.safetensors](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_bf16.safetensors) | bf16 | ~691 MB | Ampere/Ada 显卡上最快 |\n| [minimax_h3_latent_upscaler_3d_fp16.safetensors](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_fp16.safetensors) | fp16 | ~691 MB | 速度与显存平衡(推荐) |\n| [minimax_h3_latent_upscaler_3d_fp32.pth](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_fp32.pth) | fp32 | ~1.38 GB | 数值精度最高 |\n\n> 三个文件结构相同,选一个你显卡和 workflow 能承受的精度即可。节点下拉框会自动扫描到它们。\n\n---\n\n\n### ⚠️ 3D 倍率节点必须配合音视频分离/合并节���\n\n`Minimax H3 Latent Upscaler (3D)` 因为 H3 latent 里同时含视频与音频,不能直接接原始 `latent`:\n\n```\n[LTXV分离音视频潜空间] → video_latent → [Minimax H3 Latent Upscaler (3D)] → [LTXVConcatAVLatent]\n │ audio_latent(原样传回)\n```\n\n即:前接 `LTXV分离音视频潜空间`,只把 `video_latent` 喂给放大节点,放大后由 `LTXVConcatAVLatent` 把 `audio_latent` 合并回去。\n\n> 其余2个节点(Target Resolution / Megapixels)都不会处理音频,直接接 `latent` 即可,无需分离/合并。\n\n\n\n# 工作流说明 / Workflow Notes\n\n## ⚠️ 重要:`Minimax H3 Latent Upscaler (3D) 节点必须配合音视频分离节点使用\n\n`Minimax H3 Latent Upscaler (3D)` 节点**不能直接接在原始 `latent` 后面**,因为 Minimax H3 的 latent 里同时包含了视频和音频潜空间,直接一起放大可能会破坏音频。\n\n正确连接方式(参考截图):\n\n```\n[av_latent]\n │\n ▼\n┌─────────────────────────┐\n│ LTXV分离音视频潜空间 │ ← 把 latent 拆成 video_latent + audio_latent\n└─────────────────────────┘\n │ video_latent\n ▼\n┌─────────────────────────┐\n│ Minimax H3 Latent │ ← 只放大 video_latent\n│ Upscaler (3D) │\n└─────────────────────────┘\n │ latent (已放大)\n ▼\n┌─────────────────────────┐\n│ LTXVConcatAVLatent │ ← 把放大的 video_latent 和原始 audio_latent 合并\n└─────────────────────────┘\n │\n ▼\n[VAE Decode / 后续节点]\n```\n\n即:\n\n- **前节点**:`LTXV分离音视频潜空间`(输出 `video_latent` + `audio_latent`)\n- **中间**:`Minimax H3 Latent Upscaler (3D)`,只连接 `video_latent`\n- **后节点**:`LTXVConcatAVLatent`,把放大后的 `latent` 和未改动的 `audio_latent` 重新拼回\n\n---\n\n## 节点参数建议\n\n| 参数 | 推荐值 | 说明 |\n| :--- | :--- | :--- |\n| `model_name` | `minimax_h3_latent_upscaler_3d_fp16.safetensors` | 按需选择精度 |\n| `scale` | `2.0` | 1.0–4.0,常用 2× |\n| `device` | `cuda` | 没有显卡可选 `cpu`,但速度很慢 |\n| `precision` | `fp16` | 与模型文件对应;想稳可选 `fp32` |\n\n---\n\n## 完整流程示意\n\n```\nH3 低分辨率生成\n │\n ▼\nVAE Encode(得到 av_latent)\n │\n ▼\nLTXV分离音视频潜空间\n │ video_latent\n ▼\nMinimax H3 Latent Upscaler (3D) ← 在这里放大\n │\n ▼\nLTXVConcatAVLatent\n │\n ▼\n第二阶段二次采样/重绘精修\n │\n ▼\nVAE Decode → 高清视频\n```\n\n> 这个流程跳过了「VAE 解码 → 像素放大 → 再编码」的笨重往返,也避免了对 latent 直接插值带来的鬼影/重影问题。\n"
|
| 2280 |
+
],
|
| 2281 |
+
"widgets_values_named": {
|
| 2282 |
+
"text": "# 工作流说明 / Workflow Notes\n\n## 需要安装的第三方节点\n\n[🤗 H3 的浅空间放大节点](https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler)\n\n```bash\ncd ComfyUI/custom_nodes\ngit clone https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler.git\n```\n\n---\n\n## 模型下载与放置\n\n**H3 浅空间放大模型,放置在 `ComfyUI/models/latent_upscale_models/`**\n\n| 文件名 | 精度 | 大小 | 适用场景 |\n| :--- | :--- | :--- | :--- |\n| [minimax_h3_latent_upscaler_3d_bf16.safetensors](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_bf16.safetensors) | bf16 | ~691 MB | Ampere/Ada 显卡上最快 |\n| [minimax_h3_latent_upscaler_3d_fp16.safetensors](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_fp16.safetensors) | fp16 | ~691 MB | 速度与显存平衡(推荐) |\n| [minimax_h3_latent_upscaler_3d_fp32.pth](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler/blob/main/minimax_h3_latent_upscaler_3d_fp32.pth) | fp32 | ~1.38 GB | 数值精度最高 |\n\n> 三个文件结构相同,选一个你显卡和 workflow 能承受的精度即可。节点下拉框会自动扫描到它们。\n\n---\n\n\n### ⚠️ 3D 倍率节点必须配合音视频分离/合并节点\n\n`Minimax H3 Latent Upscaler (3D)` 因为 H3 latent 里同时含视频与音频,不能直接接原始 `latent`:\n\n```\n[LTXV分离音视频潜空间] → video_latent → [Minimax H3 Latent Upscaler (3D)] → [LTXVConcatAVLatent]\n │ audio_latent(原样传回)\n```\n\n即:前接 `LTXV分离音视频潜空间`,只把 `video_latent` 喂给放大节点,放大后由 `LTXVConcatAVLatent` 把 `audio_latent` 合并回去。\n\n> 其余2个节点(Target Resolution / Megapixels)都不会处理音频,直接接 `latent` 即可,无需分离/合并。\n\n\n\n# 工作流说明 / Workflow Notes\n\n## ⚠️ 重要:`Minimax H3 Latent Upscaler (3D) 节点必须配合音视频分离节点使用\n\n`Minimax H3 Latent Upscaler (3D)` 节点**不能直接接在原始 `latent` 后面**,因为 Minimax H3 的 latent 里同时包含了视频和音频潜空间,直接一起放大可能会破坏音频。\n\n正确连接方式(参考截图):\n\n```\n[av_latent]\n │\n ▼\n┌─────────────────────────┐\n│ LTXV分离音视频潜空间 │ ← 把 latent 拆成 video_latent + audio_latent\n└─────────────────────────┘\n │ video_latent\n ▼\n┌─────────────────────────┐\n│ Minimax H3 Latent │ ← 只放大 video_latent\n│ Upscaler (3D) │\n└─────────────────────────┘\n │ latent (已放大)\n ▼\n┌─────────────────────────┐\n│ LTXVConcatAVLatent │ ← 把放大的 video_latent 和原始 audio_latent 合并\n└─────────────────────────┘\n │\n ▼\n[VAE Decode / 后续节点]\n```\n\n即:\n\n- **前节点**:`LTXV分离音视频潜空间`(输出 `video_latent` + `audio_latent`)\n- **中间**:`Minimax H3 Latent Upscaler (3D)`,只连接 `video_latent`\n- **后节点**:`LTXVConcatAVLatent`,把放大后的 `latent` 和未改动的 `audio_latent` 重新拼回\n\n---\n\n## 节点参数建议\n\n| 参数 | 推荐值 | 说明 |\n| :--- | :--- | :--- |\n| `model_name` | `minimax_h3_latent_upscaler_3d_fp16.safetensors` | 按需选择精度 |\n| `scale` | `2.0` | 1.0–4.0,常用 2× |\n| `device` | `cuda` | 没有显卡可选 `cpu`,但速度很慢 |\n| `precision` | `fp16` | 与模型文件对应;想稳可选 `fp32` |\n\n---\n\n## 完整流程示意\n\n```\nH3 低分辨率生成\n │\n ▼\nVAE Encode(得到 av_latent)\n │\n ▼\nLTXV分离音视频潜空间\n │ video_latent\n ▼\nMinimax H3 Latent Upscaler (3D) ← 在这里放大\n │\n ▼\nLTXVConcatAVLatent\n │\n ▼\n第二阶段二次采样/重绘精修\n │\n ▼\nVAE Decode → 高清视频\n```\n\n> 这个流程跳过了「VAE 解码 → 像素放大 → 再编码」的笨重往返,也避免了对 latent 直接插值带来的鬼影/重影问题。\n"
|
| 2283 |
+
},
|
| 2284 |
+
"color": "#222",
|
| 2285 |
+
"bgcolor": "#000"
|
| 2286 |
+
},
|
| 2287 |
+
{
|
| 2288 |
+
"id": 40,
|
| 2289 |
+
"type": "ModelAttentionBackend",
|
| 2290 |
+
"pos": [
|
| 2291 |
+
2428.2578085907203,
|
| 2292 |
+
4920.293966332052
|
| 2293 |
+
],
|
| 2294 |
+
"size": [
|
| 2295 |
+
270,
|
| 2296 |
+
62
|
| 2297 |
+
],
|
| 2298 |
+
"flags": {},
|
| 2299 |
+
"order": 26,
|
| 2300 |
+
"mode": 0,
|
| 2301 |
+
"inputs": [
|
| 2302 |
+
{
|
| 2303 |
+
"name": "model",
|
| 2304 |
+
"type": "MODEL",
|
| 2305 |
+
"link": 56
|
| 2306 |
+
}
|
| 2307 |
+
],
|
| 2308 |
+
"outputs": [
|
| 2309 |
+
{
|
| 2310 |
+
"name": "MODEL",
|
| 2311 |
+
"type": "MODEL",
|
| 2312 |
+
"links": [
|
| 2313 |
+
23,
|
| 2314 |
+
51
|
| 2315 |
+
]
|
| 2316 |
+
}
|
| 2317 |
+
],
|
| 2318 |
+
"properties": {
|
| 2319 |
+
"ue_properties": {
|
| 2320 |
+
"widget_ue_connectable": {},
|
| 2321 |
+
"version": "7.8",
|
| 2322 |
+
"input_ue_unconnectable": {}
|
| 2323 |
+
},
|
| 2324 |
+
"cnr_id": "comfy-core",
|
| 2325 |
+
"ver": "0.33.2",
|
| 2326 |
+
"Node name for S&R": "ModelAttentionBackend"
|
| 2327 |
+
},
|
| 2328 |
+
"widgets_values": [
|
| 2329 |
+
"comfy kitchen attention"
|
| 2330 |
+
],
|
| 2331 |
+
"widgets_values_named": {
|
| 2332 |
+
"attention": "comfy kitchen attention"
|
| 2333 |
+
}
|
| 2334 |
+
},
|
| 2335 |
+
{
|
| 2336 |
+
"id": 41,
|
| 2337 |
+
"type": "LoraLoaderModelOnly",
|
| 2338 |
+
"pos": [
|
| 2339 |
+
1733.9262755570603,
|
| 2340 |
+
4920.745239746706
|
| 2341 |
+
],
|
| 2342 |
+
"size": [
|
| 2343 |
+
381.22282887292226,
|
| 2344 |
+
82
|
| 2345 |
+
],
|
| 2346 |
+
"flags": {},
|
| 2347 |
+
"order": 21,
|
| 2348 |
+
"mode": 0,
|
| 2349 |
+
"inputs": [
|
| 2350 |
+
{
|
| 2351 |
+
"name": "model",
|
| 2352 |
+
"type": "MODEL",
|
| 2353 |
+
"link": 57
|
| 2354 |
+
}
|
| 2355 |
+
],
|
| 2356 |
+
"outputs": [
|
| 2357 |
+
{
|
| 2358 |
+
"name": "MODEL",
|
| 2359 |
+
"type": "MODEL",
|
| 2360 |
+
"links": [
|
| 2361 |
+
58
|
| 2362 |
+
]
|
| 2363 |
+
}
|
| 2364 |
+
],
|
| 2365 |
+
"properties": {
|
| 2366 |
+
"ue_properties": {
|
| 2367 |
+
"widget_ue_connectable": {},
|
| 2368 |
+
"version": "7.8",
|
| 2369 |
+
"input_ue_unconnectable": {}
|
| 2370 |
+
},
|
| 2371 |
+
"cnr_id": "comfy-core",
|
| 2372 |
+
"ver": "0.33.2",
|
| 2373 |
+
"Node name for S&R": "LoraLoaderModelOnly"
|
| 2374 |
+
},
|
| 2375 |
+
"widgets_values": [
|
| 2376 |
+
"Minimax_H3\\minimax_h3_fl2v_lightx2v_turbo_4step_v0.1_comfy.safetensors",
|
| 2377 |
+
1
|
| 2378 |
+
],
|
| 2379 |
+
"widgets_values_named": {
|
| 2380 |
+
"lora_name": "Minimax_H3\\minimax_h3_fl2v_lightx2v_turbo_4step_v0.1_comfy.safetensors",
|
| 2381 |
+
"strength_model": 1
|
| 2382 |
+
}
|
| 2383 |
+
},
|
| 2384 |
+
{
|
| 2385 |
+
"id": 42,
|
| 2386 |
+
"type": "MiniMaxH3SigmaShift",
|
| 2387 |
+
"pos": [
|
| 2388 |
+
2138.9374852454953,
|
| 2389 |
+
4919.377082432047
|
| 2390 |
+
],
|
| 2391 |
+
"size": [
|
| 2392 |
+
265.53194252971207,
|
| 2393 |
+
82
|
| 2394 |
+
],
|
| 2395 |
+
"flags": {},
|
| 2396 |
+
"order": 25,
|
| 2397 |
+
"mode": 0,
|
| 2398 |
+
"inputs": [
|
| 2399 |
+
{
|
| 2400 |
+
"name": "model",
|
| 2401 |
+
"type": "MODEL",
|
| 2402 |
+
"link": 58
|
| 2403 |
+
}
|
| 2404 |
+
],
|
| 2405 |
+
"outputs": [
|
| 2406 |
+
{
|
| 2407 |
+
"name": "MODEL",
|
| 2408 |
+
"type": "MODEL",
|
| 2409 |
+
"links": [
|
| 2410 |
+
56
|
| 2411 |
+
]
|
| 2412 |
+
}
|
| 2413 |
+
],
|
| 2414 |
+
"properties": {
|
| 2415 |
+
"ue_properties": {
|
| 2416 |
+
"widget_ue_connectable": {},
|
| 2417 |
+
"input_ue_unconnectable": {},
|
| 2418 |
+
"version": "7.8"
|
| 2419 |
+
},
|
| 2420 |
+
"cnr_id": "comfy-core",
|
| 2421 |
+
"ver": "0.30.0",
|
| 2422 |
+
"Node name for S&R": "MiniMaxH3SigmaShift"
|
| 2423 |
+
},
|
| 2424 |
+
"widgets_values": [
|
| 2425 |
+
12,
|
| 2426 |
+
3
|
| 2427 |
+
],
|
| 2428 |
+
"widgets_values_named": {
|
| 2429 |
+
"shift_video": 12,
|
| 2430 |
+
"shift_audio": 3
|
| 2431 |
+
}
|
| 2432 |
+
}
|
| 2433 |
+
],
|
| 2434 |
+
"links": [
|
| 2435 |
+
[
|
| 2436 |
+
1,
|
| 2437 |
+
6,
|
| 2438 |
+
0,
|
| 2439 |
+
1,
|
| 2440 |
+
0,
|
| 2441 |
+
"IMAGE"
|
| 2442 |
+
],
|
| 2443 |
+
[
|
| 2444 |
+
2,
|
| 2445 |
+
2,
|
| 2446 |
+
0,
|
| 2447 |
+
1,
|
| 2448 |
+
1,
|
| 2449 |
+
"AUDIO"
|
| 2450 |
+
],
|
| 2451 |
+
[
|
| 2452 |
+
3,
|
| 2453 |
+
26,
|
| 2454 |
+
1,
|
| 2455 |
+
2,
|
| 2456 |
+
0,
|
| 2457 |
+
"LATENT"
|
| 2458 |
+
],
|
| 2459 |
+
[
|
| 2460 |
+
4,
|
| 2461 |
+
13,
|
| 2462 |
+
0,
|
| 2463 |
+
2,
|
| 2464 |
+
1,
|
| 2465 |
+
"VAE"
|
| 2466 |
+
],
|
| 2467 |
+
[
|
| 2468 |
+
5,
|
| 2469 |
+
8,
|
| 2470 |
+
0,
|
| 2471 |
+
3,
|
| 2472 |
+
0,
|
| 2473 |
+
"SIGMAS"
|
| 2474 |
+
],
|
| 2475 |
+
[
|
| 2476 |
+
6,
|
| 2477 |
+
36,
|
| 2478 |
+
0,
|
| 2479 |
+
4,
|
| 2480 |
+
0,
|
| 2481 |
+
"VIDEO"
|
| 2482 |
+
],
|
| 2483 |
+
[
|
| 2484 |
+
7,
|
| 2485 |
+
26,
|
| 2486 |
+
1,
|
| 2487 |
+
6,
|
| 2488 |
+
0,
|
| 2489 |
+
"LATENT"
|
| 2490 |
+
],
|
| 2491 |
+
[
|
| 2492 |
+
8,
|
| 2493 |
+
7,
|
| 2494 |
+
0,
|
| 2495 |
+
6,
|
| 2496 |
+
1,
|
| 2497 |
+
"VAE"
|
| 2498 |
+
],
|
| 2499 |
+
[
|
| 2500 |
+
9,
|
| 2501 |
+
34,
|
| 2502 |
+
0,
|
| 2503 |
+
8,
|
| 2504 |
+
0,
|
| 2505 |
+
"MODEL"
|
| 2506 |
+
],
|
| 2507 |
+
[
|
| 2508 |
+
10,
|
| 2509 |
+
25,
|
| 2510 |
+
0,
|
| 2511 |
+
11,
|
| 2512 |
+
0,
|
| 2513 |
+
"LATENT"
|
| 2514 |
+
],
|
| 2515 |
+
[
|
| 2516 |
+
11,
|
| 2517 |
+
7,
|
| 2518 |
+
0,
|
| 2519 |
+
11,
|
| 2520 |
+
1,
|
| 2521 |
+
"VAE"
|
| 2522 |
+
],
|
| 2523 |
+
[
|
| 2524 |
+
12,
|
| 2525 |
+
25,
|
| 2526 |
+
0,
|
| 2527 |
+
12,
|
| 2528 |
+
0,
|
| 2529 |
+
"LATENT"
|
| 2530 |
+
],
|
| 2531 |
+
[
|
| 2532 |
+
13,
|
| 2533 |
+
13,
|
| 2534 |
+
0,
|
| 2535 |
+
12,
|
| 2536 |
+
1,
|
| 2537 |
+
"VAE"
|
| 2538 |
+
],
|
| 2539 |
+
[
|
| 2540 |
+
14,
|
| 2541 |
+
27,
|
| 2542 |
+
0,
|
| 2543 |
+
15,
|
| 2544 |
+
0,
|
| 2545 |
+
"FLOAT"
|
| 2546 |
+
],
|
| 2547 |
+
[
|
| 2548 |
+
15,
|
| 2549 |
+
21,
|
| 2550 |
+
0,
|
| 2551 |
+
16,
|
| 2552 |
+
0,
|
| 2553 |
+
"CLIP"
|
| 2554 |
+
],
|
| 2555 |
+
[
|
| 2556 |
+
16,
|
| 2557 |
+
7,
|
| 2558 |
+
0,
|
| 2559 |
+
16,
|
| 2560 |
+
1,
|
| 2561 |
+
"VAE"
|
| 2562 |
+
],
|
| 2563 |
+
[
|
| 2564 |
+
17,
|
| 2565 |
+
9,
|
| 2566 |
+
0,
|
| 2567 |
+
16,
|
| 2568 |
+
2,
|
| 2569 |
+
"IMAGE"
|
| 2570 |
+
],
|
| 2571 |
+
[
|
| 2572 |
+
18,
|
| 2573 |
+
10,
|
| 2574 |
+
0,
|
| 2575 |
+
16,
|
| 2576 |
+
3,
|
| 2577 |
+
"IMAGE"
|
| 2578 |
+
],
|
| 2579 |
+
[
|
| 2580 |
+
19,
|
| 2581 |
+
14,
|
| 2582 |
+
0,
|
| 2583 |
+
16,
|
| 2584 |
+
4,
|
| 2585 |
+
"STRING"
|
| 2586 |
+
],
|
| 2587 |
+
[
|
| 2588 |
+
20,
|
| 2589 |
+
22,
|
| 2590 |
+
0,
|
| 2591 |
+
16,
|
| 2592 |
+
5,
|
| 2593 |
+
"INT"
|
| 2594 |
+
],
|
| 2595 |
+
[
|
| 2596 |
+
21,
|
| 2597 |
+
22,
|
| 2598 |
+
1,
|
| 2599 |
+
16,
|
| 2600 |
+
6,
|
| 2601 |
+
"INT"
|
| 2602 |
+
],
|
| 2603 |
+
[
|
| 2604 |
+
22,
|
| 2605 |
+
23,
|
| 2606 |
+
1,
|
| 2607 |
+
16,
|
| 2608 |
+
7,
|
| 2609 |
+
"INT"
|
| 2610 |
+
],
|
| 2611 |
+
[
|
| 2612 |
+
23,
|
| 2613 |
+
40,
|
| 2614 |
+
0,
|
| 2615 |
+
17,
|
| 2616 |
+
0,
|
| 2617 |
+
"MODEL"
|
| 2618 |
+
],
|
| 2619 |
+
[
|
| 2620 |
+
24,
|
| 2621 |
+
23,
|
| 2622 |
+
1,
|
| 2623 |
+
17,
|
| 2624 |
+
2,
|
| 2625 |
+
"INT"
|
| 2626 |
+
],
|
| 2627 |
+
[
|
| 2628 |
+
25,
|
| 2629 |
+
28,
|
| 2630 |
+
0,
|
| 2631 |
+
18,
|
| 2632 |
+
0,
|
| 2633 |
+
"LATENT"
|
| 2634 |
+
],
|
| 2635 |
+
[
|
| 2636 |
+
26,
|
| 2637 |
+
38,
|
| 2638 |
+
1,
|
| 2639 |
+
18,
|
| 2640 |
+
1,
|
| 2641 |
+
"LATENT"
|
| 2642 |
+
],
|
| 2643 |
+
[
|
| 2644 |
+
27,
|
| 2645 |
+
21,
|
| 2646 |
+
0,
|
| 2647 |
+
19,
|
| 2648 |
+
0,
|
| 2649 |
+
"CLIP"
|
| 2650 |
+
],
|
| 2651 |
+
[
|
| 2652 |
+
28,
|
| 2653 |
+
7,
|
| 2654 |
+
0,
|
| 2655 |
+
19,
|
| 2656 |
+
1,
|
| 2657 |
+
"VAE"
|
| 2658 |
+
],
|
| 2659 |
+
[
|
| 2660 |
+
29,
|
| 2661 |
+
9,
|
| 2662 |
+
0,
|
| 2663 |
+
19,
|
| 2664 |
+
2,
|
| 2665 |
+
"IMAGE"
|
| 2666 |
+
],
|
| 2667 |
+
[
|
| 2668 |
+
30,
|
| 2669 |
+
10,
|
| 2670 |
+
0,
|
| 2671 |
+
19,
|
| 2672 |
+
3,
|
| 2673 |
+
"IMAGE"
|
| 2674 |
+
],
|
| 2675 |
+
[
|
| 2676 |
+
31,
|
| 2677 |
+
14,
|
| 2678 |
+
0,
|
| 2679 |
+
19,
|
| 2680 |
+
4,
|
| 2681 |
+
"STRING"
|
| 2682 |
+
],
|
| 2683 |
+
[
|
| 2684 |
+
32,
|
| 2685 |
+
15,
|
| 2686 |
+
0,
|
| 2687 |
+
19,
|
| 2688 |
+
5,
|
| 2689 |
+
"INT"
|
| 2690 |
+
],
|
| 2691 |
+
[
|
| 2692 |
+
33,
|
| 2693 |
+
15,
|
| 2694 |
+
1,
|
| 2695 |
+
19,
|
| 2696 |
+
6,
|
| 2697 |
+
"INT"
|
| 2698 |
+
],
|
| 2699 |
+
[
|
| 2700 |
+
34,
|
| 2701 |
+
23,
|
| 2702 |
+
1,
|
| 2703 |
+
19,
|
| 2704 |
+
7,
|
| 2705 |
+
"INT"
|
| 2706 |
+
],
|
| 2707 |
+
[
|
| 2708 |
+
35,
|
| 2709 |
+
20,
|
| 2710 |
+
0,
|
| 2711 |
+
23,
|
| 2712 |
+
0,
|
| 2713 |
+
"FLOAT"
|
| 2714 |
+
],
|
| 2715 |
+
[
|
| 2716 |
+
36,
|
| 2717 |
+
37,
|
| 2718 |
+
0,
|
| 2719 |
+
25,
|
| 2720 |
+
0,
|
| 2721 |
+
"NOISE"
|
| 2722 |
+
],
|
| 2723 |
+
[
|
| 2724 |
+
37,
|
| 2725 |
+
35,
|
| 2726 |
+
0,
|
| 2727 |
+
25,
|
| 2728 |
+
1,
|
| 2729 |
+
"GUIDER"
|
| 2730 |
+
],
|
| 2731 |
+
[
|
| 2732 |
+
38,
|
| 2733 |
+
29,
|
| 2734 |
+
0,
|
| 2735 |
+
25,
|
| 2736 |
+
2,
|
| 2737 |
+
"SAMPLER"
|
| 2738 |
+
],
|
| 2739 |
+
[
|
| 2740 |
+
39,
|
| 2741 |
+
30,
|
| 2742 |
+
0,
|
| 2743 |
+
25,
|
| 2744 |
+
3,
|
| 2745 |
+
"SIGMAS"
|
| 2746 |
+
],
|
| 2747 |
+
[
|
| 2748 |
+
40,
|
| 2749 |
+
18,
|
| 2750 |
+
0,
|
| 2751 |
+
25,
|
| 2752 |
+
4,
|
| 2753 |
+
"LATENT"
|
| 2754 |
+
],
|
| 2755 |
+
[
|
| 2756 |
+
41,
|
| 2757 |
+
37,
|
| 2758 |
+
0,
|
| 2759 |
+
26,
|
| 2760 |
+
0,
|
| 2761 |
+
"NOISE"
|
| 2762 |
+
],
|
| 2763 |
+
[
|
| 2764 |
+
42,
|
| 2765 |
+
33,
|
| 2766 |
+
0,
|
| 2767 |
+
26,
|
| 2768 |
+
1,
|
| 2769 |
+
"GUIDER"
|
| 2770 |
+
],
|
| 2771 |
+
[
|
| 2772 |
+
43,
|
| 2773 |
+
29,
|
| 2774 |
+
0,
|
| 2775 |
+
26,
|
| 2776 |
+
2,
|
| 2777 |
+
"SAMPLER"
|
| 2778 |
+
],
|
| 2779 |
+
[
|
| 2780 |
+
44,
|
| 2781 |
+
3,
|
| 2782 |
+
0,
|
| 2783 |
+
26,
|
| 2784 |
+
3,
|
| 2785 |
+
"SIGMAS"
|
| 2786 |
+
],
|
| 2787 |
+
[
|
| 2788 |
+
45,
|
| 2789 |
+
16,
|
| 2790 |
+
1,
|
| 2791 |
+
26,
|
| 2792 |
+
4,
|
| 2793 |
+
"LATENT"
|
| 2794 |
+
],
|
| 2795 |
+
[
|
| 2796 |
+
46,
|
| 2797 |
+
38,
|
| 2798 |
+
0,
|
| 2799 |
+
28,
|
| 2800 |
+
0,
|
| 2801 |
+
"LATENT"
|
| 2802 |
+
],
|
| 2803 |
+
[
|
| 2804 |
+
47,
|
| 2805 |
+
15,
|
| 2806 |
+
0,
|
| 2807 |
+
28,
|
| 2808 |
+
1,
|
| 2809 |
+
"INT"
|
| 2810 |
+
],
|
| 2811 |
+
[
|
| 2812 |
+
48,
|
| 2813 |
+
15,
|
| 2814 |
+
1,
|
| 2815 |
+
28,
|
| 2816 |
+
2,
|
| 2817 |
+
"INT"
|
| 2818 |
+
],
|
| 2819 |
+
[
|
| 2820 |
+
49,
|
| 2821 |
+
17,
|
| 2822 |
+
0,
|
| 2823 |
+
33,
|
| 2824 |
+
0,
|
| 2825 |
+
"MODEL"
|
| 2826 |
+
],
|
| 2827 |
+
[
|
| 2828 |
+
50,
|
| 2829 |
+
16,
|
| 2830 |
+
0,
|
| 2831 |
+
33,
|
| 2832 |
+
1,
|
| 2833 |
+
"CONDITIONING"
|
| 2834 |
+
],
|
| 2835 |
+
[
|
| 2836 |
+
51,
|
| 2837 |
+
40,
|
| 2838 |
+
0,
|
| 2839 |
+
35,
|
| 2840 |
+
0,
|
| 2841 |
+
"MODEL"
|
| 2842 |
+
],
|
| 2843 |
+
[
|
| 2844 |
+
52,
|
| 2845 |
+
19,
|
| 2846 |
+
0,
|
| 2847 |
+
35,
|
| 2848 |
+
1,
|
| 2849 |
+
"CONDITIONING"
|
| 2850 |
+
],
|
| 2851 |
+
[
|
| 2852 |
+
53,
|
| 2853 |
+
11,
|
| 2854 |
+
0,
|
| 2855 |
+
36,
|
| 2856 |
+
0,
|
| 2857 |
+
"IMAGE"
|
| 2858 |
+
],
|
| 2859 |
+
[
|
| 2860 |
+
54,
|
| 2861 |
+
12,
|
| 2862 |
+
0,
|
| 2863 |
+
36,
|
| 2864 |
+
1,
|
| 2865 |
+
"AUDIO"
|
| 2866 |
+
],
|
| 2867 |
+
[
|
| 2868 |
+
55,
|
| 2869 |
+
26,
|
| 2870 |
+
1,
|
| 2871 |
+
38,
|
| 2872 |
+
0,
|
| 2873 |
+
"LATENT"
|
| 2874 |
+
],
|
| 2875 |
+
[
|
| 2876 |
+
56,
|
| 2877 |
+
42,
|
| 2878 |
+
0,
|
| 2879 |
+
40,
|
| 2880 |
+
0,
|
| 2881 |
+
"MODEL"
|
| 2882 |
+
],
|
| 2883 |
+
[
|
| 2884 |
+
57,
|
| 2885 |
+
34,
|
| 2886 |
+
0,
|
| 2887 |
+
41,
|
| 2888 |
+
0,
|
| 2889 |
+
"MODEL"
|
| 2890 |
+
],
|
| 2891 |
+
[
|
| 2892 |
+
58,
|
| 2893 |
+
41,
|
| 2894 |
+
0,
|
| 2895 |
+
42,
|
| 2896 |
+
0,
|
| 2897 |
+
"MODEL"
|
| 2898 |
+
]
|
| 2899 |
+
],
|
| 2900 |
+
"groups": [
|
| 2901 |
+
{
|
| 2902 |
+
"id": 1,
|
| 2903 |
+
"title": "User Inputs",
|
| 2904 |
+
"bounding": [
|
| 2905 |
+
992.884221724624,
|
| 2906 |
+
5724.891597108754,
|
| 2907 |
+
1208.9503194675362,
|
| 2908 |
+
834.450029042503
|
| 2909 |
+
],
|
| 2910 |
+
"color": "#3f789e",
|
| 2911 |
+
"flags": {}
|
| 2912 |
+
},
|
| 2913 |
+
{
|
| 2914 |
+
"id": 2,
|
| 2915 |
+
"title": "Models",
|
| 2916 |
+
"bounding": [
|
| 2917 |
+
992.1892320604375,
|
| 2918 |
+
5033.23147307899,
|
| 2919 |
+
700,
|
| 2920 |
+
670
|
| 2921 |
+
],
|
| 2922 |
+
"color": "#3f789e",
|
| 2923 |
+
"flags": {}
|
| 2924 |
+
},
|
| 2925 |
+
{
|
| 2926 |
+
"id": 3,
|
| 2927 |
+
"title": "Sampling",
|
| 2928 |
+
"bounding": [
|
| 2929 |
+
2786.1892320604375,
|
| 2930 |
+
5033.23147307899,
|
| 2931 |
+
670.6723003979018,
|
| 2932 |
+
670
|
| 2933 |
+
],
|
| 2934 |
+
"color": "#3f789e",
|
| 2935 |
+
"flags": {}
|
| 2936 |
+
},
|
| 2937 |
+
{
|
| 2938 |
+
"id": 4,
|
| 2939 |
+
"title": "Conditioning",
|
| 2940 |
+
"bounding": [
|
| 2941 |
+
1710.1892320604375,
|
| 2942 |
+
5033.23147307899,
|
| 2943 |
+
657,
|
| 2944 |
+
670
|
| 2945 |
+
],
|
| 2946 |
+
"color": "#3f789e",
|
| 2947 |
+
"flags": {}
|
| 2948 |
+
},
|
| 2949 |
+
{
|
| 2950 |
+
"id": 5,
|
| 2951 |
+
"title": "Two-stage sampling upscaling - Decoding and create video",
|
| 2952 |
+
"bounding": [
|
| 2953 |
+
3876.1892320604375,
|
| 2954 |
+
5033.23147307899,
|
| 2955 |
+
963,
|
| 2956 |
+
670
|
| 2957 |
+
],
|
| 2958 |
+
"color": "#3f789e",
|
| 2959 |
+
"flags": {}
|
| 2960 |
+
},
|
| 2961 |
+
{
|
| 2962 |
+
"id": 6,
|
| 2963 |
+
"title": "H3 Latent Upscaler",
|
| 2964 |
+
"bounding": [
|
| 2965 |
+
3474.8615324583393,
|
| 2966 |
+
5033.23147307899,
|
| 2967 |
+
383,
|
| 2968 |
+
670
|
| 2969 |
+
],
|
| 2970 |
+
"color": "#3f789e",
|
| 2971 |
+
"flags": {}
|
| 2972 |
+
},
|
| 2973 |
+
{
|
| 2974 |
+
"id": 7,
|
| 2975 |
+
"title": "preview",
|
| 2976 |
+
"bounding": [
|
| 2977 |
+
2385.1892320604375,
|
| 2978 |
+
5033.23147307899,
|
| 2979 |
+
383,
|
| 2980 |
+
670
|
| 2981 |
+
],
|
| 2982 |
+
"color": "#3f789e",
|
| 2983 |
+
"flags": {}
|
| 2984 |
+
}
|
| 2985 |
+
],
|
| 2986 |
+
"config": {},
|
| 2987 |
+
"extra": {
|
| 2988 |
+
"ds": {
|
| 2989 |
+
"scale": 0.392221789683935,
|
| 2990 |
+
"offset": [
|
| 2991 |
+
1806.6773443253683,
|
| 2992 |
+
-4318.606286467836
|
| 2993 |
+
]
|
| 2994 |
+
},
|
| 2995 |
+
"ue_links": [],
|
| 2996 |
+
"frontendVersion": "1.49.6",
|
| 2997 |
+
"VHS_latentpreview": false,
|
| 2998 |
+
"VHS_latentpreviewrate": 0,
|
| 2999 |
+
"VHS_MetadataImage": true,
|
| 3000 |
+
"VHS_KeepIntermediate": true
|
| 3001 |
+
},
|
| 3002 |
+
"version": 0.4
|
| 3003 |
+
}
|
Comfyui_Minimax_h3_latent_Upscaler/workflow_templates/minimax_h3_r2v_Latent Upscaler example workflow3.json
ADDED
|
@@ -0,0 +1,2671 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "1e132da8-4308-4d7e-b766-009313e961c8",
|
| 3 |
+
"revision": 0,
|
| 4 |
+
"last_node_id": 38,
|
| 5 |
+
"last_link_id": 49,
|
| 6 |
+
"nodes": [
|
| 7 |
+
{
|
| 8 |
+
"id": 1,
|
| 9 |
+
"type": "VHS_VideoCombine",
|
| 10 |
+
"pos": [
|
| 11 |
+
1672.3340244896142,
|
| 12 |
+
5341.889808999437
|
| 13 |
+
],
|
| 14 |
+
"size": [
|
| 15 |
+
210,
|
| 16 |
+
334
|
| 17 |
+
],
|
| 18 |
+
"flags": {},
|
| 19 |
+
"order": 30,
|
| 20 |
+
"mode": 4,
|
| 21 |
+
"inputs": [
|
| 22 |
+
{
|
| 23 |
+
"label": "图像",
|
| 24 |
+
"name": "images",
|
| 25 |
+
"type": "IMAGE",
|
| 26 |
+
"link": 1
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"label": "音频",
|
| 30 |
+
"name": "audio",
|
| 31 |
+
"shape": 7,
|
| 32 |
+
"type": "AUDIO",
|
| 33 |
+
"link": 2
|
| 34 |
+
},
|
| 35 |
+
{
|
| 36 |
+
"label": "批次管理",
|
| 37 |
+
"name": "meta_batch",
|
| 38 |
+
"shape": 7,
|
| 39 |
+
"type": "VHS_BatchManager",
|
| 40 |
+
"link": null
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"name": "vae",
|
| 44 |
+
"shape": 7,
|
| 45 |
+
"type": "VAE",
|
| 46 |
+
"link": null
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"label": "帧率",
|
| 50 |
+
"name": "frame_rate",
|
| 51 |
+
"type": "FLOAT",
|
| 52 |
+
"widget": {
|
| 53 |
+
"name": "frame_rate"
|
| 54 |
+
},
|
| 55 |
+
"link": null
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"label": "循环次数",
|
| 59 |
+
"name": "loop_count",
|
| 60 |
+
"type": "INT",
|
| 61 |
+
"widget": {
|
| 62 |
+
"name": "loop_count"
|
| 63 |
+
},
|
| 64 |
+
"link": null
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"label": "文件名前缀",
|
| 68 |
+
"name": "filename_prefix",
|
| 69 |
+
"type": "STRING",
|
| 70 |
+
"widget": {
|
| 71 |
+
"name": "filename_prefix"
|
| 72 |
+
},
|
| 73 |
+
"link": null
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"label": "格式",
|
| 77 |
+
"name": "format",
|
| 78 |
+
"type": "COMBO",
|
| 79 |
+
"widget": {
|
| 80 |
+
"name": "format"
|
| 81 |
+
},
|
| 82 |
+
"link": null
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"label": "Ping-Pong",
|
| 86 |
+
"name": "pingpong",
|
| 87 |
+
"type": "BOOLEAN",
|
| 88 |
+
"widget": {
|
| 89 |
+
"name": "pingpong"
|
| 90 |
+
},
|
| 91 |
+
"link": null
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"label": "保存到输出文件夹",
|
| 95 |
+
"name": "save_output",
|
| 96 |
+
"type": "BOOLEAN",
|
| 97 |
+
"widget": {
|
| 98 |
+
"name": "save_output"
|
| 99 |
+
},
|
| 100 |
+
"link": null
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"label": "保存元数据",
|
| 104 |
+
"name": "save_metadata",
|
| 105 |
+
"type": "BOOLEAN",
|
| 106 |
+
"widget": {
|
| 107 |
+
"name": "save_metadata"
|
| 108 |
+
},
|
| 109 |
+
"link": null
|
| 110 |
+
},
|
| 111 |
+
{
|
| 112 |
+
"label": "修剪音频",
|
| 113 |
+
"name": "trim_to_audio",
|
| 114 |
+
"type": "BOOLEAN",
|
| 115 |
+
"widget": {
|
| 116 |
+
"name": "trim_to_audio"
|
| 117 |
+
},
|
| 118 |
+
"link": null
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"outputs": [
|
| 122 |
+
{
|
| 123 |
+
"label": "文件名",
|
| 124 |
+
"name": "Filenames",
|
| 125 |
+
"type": "VHS_FILENAMES",
|
| 126 |
+
"links": null
|
| 127 |
+
}
|
| 128 |
+
],
|
| 129 |
+
"title": "合并为视频",
|
| 130 |
+
"properties": {
|
| 131 |
+
"cnr_id": "comfyui-videohelpersuite",
|
| 132 |
+
"ver": "4ee72c065db22c9d96c2427954dc69e7b908444b",
|
| 133 |
+
"Node name for S&R": "VHS_VideoCombine",
|
| 134 |
+
"ue_properties": {
|
| 135 |
+
"widget_ue_connectable": {},
|
| 136 |
+
"input_ue_unconnectable": {},
|
| 137 |
+
"version": "7.8"
|
| 138 |
+
}
|
| 139 |
+
},
|
| 140 |
+
"widgets_values": {
|
| 141 |
+
"frame_rate": 24,
|
| 142 |
+
"loop_count": 0,
|
| 143 |
+
"filename_prefix": "AnimateDiff",
|
| 144 |
+
"format": "video/h264-mp4",
|
| 145 |
+
"pix_fmt": "yuv420p",
|
| 146 |
+
"crf": 19,
|
| 147 |
+
"save_metadata": true,
|
| 148 |
+
"trim_to_audio": false,
|
| 149 |
+
"pingpong": false,
|
| 150 |
+
"save_output": false,
|
| 151 |
+
"videopreview": {
|
| 152 |
+
"hidden": false,
|
| 153 |
+
"paused": false,
|
| 154 |
+
"params": {
|
| 155 |
+
"filename": "AnimateDiff_00001-audio.mp4",
|
| 156 |
+
"subfolder": "",
|
| 157 |
+
"type": "temp",
|
| 158 |
+
"format": "video/h264-mp4",
|
| 159 |
+
"frame_rate": 24,
|
| 160 |
+
"workflow": "AnimateDiff_00001.png",
|
| 161 |
+
"fullpath": "D:\\AI\\ComfyUI-aki-v2\\ComfyUI\\temp\\AnimateDiff_00001-audio.mp4"
|
| 162 |
+
}
|
| 163 |
+
}
|
| 164 |
+
},
|
| 165 |
+
"widgets_values_named": {
|
| 166 |
+
"frame_rate": 24,
|
| 167 |
+
"loop_count": 0,
|
| 168 |
+
"filename_prefix": "AnimateDiff",
|
| 169 |
+
"format": "video/h264-mp4",
|
| 170 |
+
"pix_fmt": "yuv420p",
|
| 171 |
+
"crf": 19,
|
| 172 |
+
"save_metadata": true,
|
| 173 |
+
"trim_to_audio": false,
|
| 174 |
+
"pingpong": false,
|
| 175 |
+
"save_output": false,
|
| 176 |
+
"videopreview": {
|
| 177 |
+
"hidden": false,
|
| 178 |
+
"paused": false,
|
| 179 |
+
"params": {
|
| 180 |
+
"filename": "AnimateDiff_00001-audio.mp4",
|
| 181 |
+
"subfolder": "",
|
| 182 |
+
"type": "temp",
|
| 183 |
+
"format": "video/h264-mp4",
|
| 184 |
+
"frame_rate": 24,
|
| 185 |
+
"workflow": "AnimateDiff_00001.png",
|
| 186 |
+
"fullpath": "D:\\AI\\ComfyUI-aki-v2\\ComfyUI\\temp\\AnimateDiff_00001-audio.mp4"
|
| 187 |
+
}
|
| 188 |
+
}
|
| 189 |
+
}
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"id": 2,
|
| 193 |
+
"type": "PrimitiveStringMultiline",
|
| 194 |
+
"pos": [
|
| 195 |
+
337.6228951554299,
|
| 196 |
+
5390.6781334546085
|
| 197 |
+
],
|
| 198 |
+
"size": [
|
| 199 |
+
370,
|
| 200 |
+
390
|
| 201 |
+
],
|
| 202 |
+
"flags": {},
|
| 203 |
+
"order": 0,
|
| 204 |
+
"mode": 0,
|
| 205 |
+
"inputs": [],
|
| 206 |
+
"outputs": [
|
| 207 |
+
{
|
| 208 |
+
"name": "STRING",
|
| 209 |
+
"type": "STRING",
|
| 210 |
+
"links": []
|
| 211 |
+
}
|
| 212 |
+
],
|
| 213 |
+
"title": "提示词",
|
| 214 |
+
"properties": {
|
| 215 |
+
"cnr_id": "comfy-core",
|
| 216 |
+
"ver": "0.33.2",
|
| 217 |
+
"Node name for S&R": "PrimitiveStringMultiline",
|
| 218 |
+
"ue_properties": {
|
| 219 |
+
"widget_ue_connectable": {},
|
| 220 |
+
"version": "7.8",
|
| 221 |
+
"input_ue_unconnectable": {}
|
| 222 |
+
}
|
| 223 |
+
},
|
| 224 |
+
"widgets_values": [
|
| 225 |
+
"资产角色:\n<Picture 1>\n国风动漫少女,深棕色发髻点缀红梅与蝶形发饰,身穿白金红相间的抹胸上衣与飘逸薄纱灯笼裤,周身环绕金红流光与炽炎花瓣特效。\n<Picture 2>\n硬派白发战将,身穿暗红色皮革长款风衣、黑色内衬与战术皮裤,手持重剑与双枪,周身散发冷冽红黑魔力气浪。\n\n一个低机位推近镜头框住\n<Picture 1>\n与\n<Picture 2>\n在废墟长廊两端对峙。\n<Picture 1>\n率先启动超音速贴地冲刺,足尖踏出金红烈焰莲华,甩出赤红绫缎如游龙贯空;\nthe camera cuts to\n侧面跟摇特写,\n<Picture 2>\n拔出重剑横向重劈,刀锋与炽炎绫缎剧烈碰撞,火星与雷光四向迸射,气浪撕裂地面石板。\nthe shot transitions to\n俯冲环绕镜头,\n<Picture 1>\n借力凌空翻腾,双掌结印召唤暴雨般金红火蝶与符文剑气垂直轰炸;\n<Picture 2>\n单手举剑格挡,魔力红光护盾展开,随即甩动红风衣滑步侧移,拔枪极速连射,火舌与剑气在半空接连引爆。\nthe camera dynamically follows\n贴地高速滑移,\n<Picture 1>\n在弹雨残影中多维瞬闪,瞬身突进至\n<Picture 2>\n身前旋身横扫,赤焰气刃斩开风衣下摆;\nthe shot changes to\n极速下坠定点特写,\n<Picture 2>\n反手抽刀上挑震开攻击,\n<Picture 1>\n空中旋身单手撑地滑退数米,\n<Picture 1>\n与\n<Picture 2>\n同时稳住身形横刃相对,周身烈火与魔能疯狂暴涨,在最强杀意临界点定格。\noverall_soundscape: Explosive shockwaves crack the stone ground as steel clashes with fiery energy ribbons. Gunfire roars in rapid bursts followed by the sizzling hum of burning petals and swirling demonic aura.non_diegetic_music: High-octane heavy metal hybrid with aggressive electric guitar riffs, pounding industrial drums, and intense symphonic brass, cutting off sharply on the final clash."
|
| 226 |
+
],
|
| 227 |
+
"widgets_values_named": {
|
| 228 |
+
"value": "资产角色:\n<Picture 1>\n国风动漫少女,深棕色发髻点缀红梅与蝶形发饰,身穿白金红相间的抹胸上衣与飘逸薄纱灯笼裤,周身环绕金红流光与炽炎花瓣特效。\n<Picture 2>\n硬派白发战将,身穿暗红色皮革长款风衣、黑色内衬与战术皮裤,手持重剑与双枪,周身散发冷冽红黑魔力气浪。\n\n一个低机位推近镜头框住\n<Picture 1>\n与\n<Picture 2>\n在废墟长廊两端对峙。\n<Picture 1>\n率先启动超音速贴地冲刺,足尖踏出金红烈焰莲华,甩出赤红绫缎如游龙贯空;\nthe camera cuts to\n侧面跟摇特写,\n<Picture 2>\n拔出重剑横向重劈,刀锋与炽炎绫缎剧烈碰撞,火星与雷光四向迸射,气浪撕裂地面石板。\nthe shot transitions to\n俯冲环绕镜头,\n<Picture 1>\n借力凌空翻腾,双掌结印召唤暴雨般金红火蝶与符文剑气垂直轰炸;\n<Picture 2>\n单手举剑格挡,魔力红光护盾展开,随即甩动红风衣滑步侧移,拔枪极速连射,火舌与剑气在半空接连引爆。\nthe camera dynamically follows\n贴地高速滑移,\n<Picture 1>\n在弹雨残影中多维瞬闪,瞬身突进至\n<Picture 2>\n身前旋身横扫,赤焰气刃斩开风衣下摆;\nthe shot changes to\n极速下坠定点特写,\n<Picture 2>\n反手抽刀上挑震开攻击,\n<Picture 1>\n空中旋身单手撑地滑退数米,\n<Picture 1>\n与\n<Picture 2>\n同时稳住身形横刃相对,周身烈火与魔能疯狂暴涨,在最强杀意临界点定格。\noverall_soundscape: Explosive shockwaves crack the stone ground as steel clashes with fiery energy ribbons. Gunfire roars in rapid bursts followed by the sizzling hum of burning petals and swirling demonic aura.non_diegetic_music: High-octane heavy metal hybrid with aggressive electric guitar riffs, pounding industrial drums, and intense symphonic brass, cutting off sharply on the final clash."
|
| 229 |
+
},
|
| 230 |
+
"color": "#232",
|
| 231 |
+
"bgcolor": "#353"
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"id": 3,
|
| 235 |
+
"type": "VAELoader",
|
| 236 |
+
"pos": [
|
| 237 |
+
-306.15299615894105,
|
| 238 |
+
5023.880667348764
|
| 239 |
+
],
|
| 240 |
+
"size": [
|
| 241 |
+
640,
|
| 242 |
+
70
|
| 243 |
+
],
|
| 244 |
+
"flags": {},
|
| 245 |
+
"order": 1,
|
| 246 |
+
"mode": 0,
|
| 247 |
+
"inputs": [],
|
| 248 |
+
"outputs": [
|
| 249 |
+
{
|
| 250 |
+
"name": "VAE",
|
| 251 |
+
"type": "VAE",
|
| 252 |
+
"links": [
|
| 253 |
+
5,
|
| 254 |
+
11,
|
| 255 |
+
34
|
| 256 |
+
]
|
| 257 |
+
}
|
| 258 |
+
],
|
| 259 |
+
"properties": {
|
| 260 |
+
"cnr_id": "comfy-core",
|
| 261 |
+
"ver": "0.33.2",
|
| 262 |
+
"Node name for S&R": "VAELoader",
|
| 263 |
+
"ue_properties": {
|
| 264 |
+
"widget_ue_connectable": {},
|
| 265 |
+
"version": "7.8",
|
| 266 |
+
"input_ue_unconnectable": {}
|
| 267 |
+
},
|
| 268 |
+
"models": [
|
| 269 |
+
{
|
| 270 |
+
"name": "minimax_h3_video_vae_fp16.safetensors",
|
| 271 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors",
|
| 272 |
+
"directory": "vae"
|
| 273 |
+
}
|
| 274 |
+
]
|
| 275 |
+
},
|
| 276 |
+
"widgets_values": [
|
| 277 |
+
"minimax_h3_video_vae_fp16.safetensors"
|
| 278 |
+
],
|
| 279 |
+
"widgets_values_named": {
|
| 280 |
+
"vae_name": "minimax_h3_video_vae_fp16.safetensors"
|
| 281 |
+
}
|
| 282 |
+
},
|
| 283 |
+
{
|
| 284 |
+
"id": 4,
|
| 285 |
+
"type": "VAELoader",
|
| 286 |
+
"pos": [
|
| 287 |
+
-306.15299615894105,
|
| 288 |
+
5153.880667348764
|
| 289 |
+
],
|
| 290 |
+
"size": [
|
| 291 |
+
650,
|
| 292 |
+
70
|
| 293 |
+
],
|
| 294 |
+
"flags": {},
|
| 295 |
+
"order": 2,
|
| 296 |
+
"mode": 0,
|
| 297 |
+
"inputs": [],
|
| 298 |
+
"outputs": [
|
| 299 |
+
{
|
| 300 |
+
"name": "VAE",
|
| 301 |
+
"type": "VAE",
|
| 302 |
+
"links": [
|
| 303 |
+
7,
|
| 304 |
+
12,
|
| 305 |
+
20
|
| 306 |
+
]
|
| 307 |
+
}
|
| 308 |
+
],
|
| 309 |
+
"properties": {
|
| 310 |
+
"cnr_id": "comfy-core",
|
| 311 |
+
"ver": "0.33.2",
|
| 312 |
+
"Node name for S&R": "VAELoader",
|
| 313 |
+
"ue_properties": {
|
| 314 |
+
"widget_ue_connectable": {},
|
| 315 |
+
"version": "7.8",
|
| 316 |
+
"input_ue_unconnectable": {}
|
| 317 |
+
},
|
| 318 |
+
"models": [
|
| 319 |
+
{
|
| 320 |
+
"name": "minimax_h3_audio_vae_fp32.safetensors",
|
| 321 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors",
|
| 322 |
+
"directory": "vae"
|
| 323 |
+
}
|
| 324 |
+
]
|
| 325 |
+
},
|
| 326 |
+
"widgets_values": [
|
| 327 |
+
"minimax_h3_audio_vae_fp32.safetensors"
|
| 328 |
+
],
|
| 329 |
+
"widgets_values_named": {
|
| 330 |
+
"vae_name": "minimax_h3_audio_vae_fp32.safetensors"
|
| 331 |
+
}
|
| 332 |
+
},
|
| 333 |
+
{
|
| 334 |
+
"id": 5,
|
| 335 |
+
"type": "SaveVideo",
|
| 336 |
+
"pos": [
|
| 337 |
+
2942.544119477948,
|
| 338 |
+
4853.660006083442
|
| 339 |
+
],
|
| 340 |
+
"size": [
|
| 341 |
+
283.126933720908,
|
| 342 |
+
106
|
| 343 |
+
],
|
| 344 |
+
"flags": {},
|
| 345 |
+
"order": 37,
|
| 346 |
+
"mode": 0,
|
| 347 |
+
"inputs": [
|
| 348 |
+
{
|
| 349 |
+
"name": "video",
|
| 350 |
+
"type": "VIDEO",
|
| 351 |
+
"link": 3
|
| 352 |
+
}
|
| 353 |
+
],
|
| 354 |
+
"outputs": [
|
| 355 |
+
{
|
| 356 |
+
"name": "video",
|
| 357 |
+
"type": "VIDEO",
|
| 358 |
+
"links": null
|
| 359 |
+
}
|
| 360 |
+
],
|
| 361 |
+
"properties": {
|
| 362 |
+
"cnr_id": "comfy-core",
|
| 363 |
+
"ver": "0.33.2",
|
| 364 |
+
"Node name for S&R": "SaveVideo",
|
| 365 |
+
"ue_properties": {
|
| 366 |
+
"widget_ue_connectable": {},
|
| 367 |
+
"version": "7.8",
|
| 368 |
+
"input_ue_unconnectable": {}
|
| 369 |
+
}
|
| 370 |
+
},
|
| 371 |
+
"widgets_values": [
|
| 372 |
+
"video/MiniMax_H3",
|
| 373 |
+
"auto",
|
| 374 |
+
"auto"
|
| 375 |
+
],
|
| 376 |
+
"widgets_values_named": {
|
| 377 |
+
"filename_prefix": "video/MiniMax_H3",
|
| 378 |
+
"format": "auto",
|
| 379 |
+
"codec": "auto"
|
| 380 |
+
}
|
| 381 |
+
},
|
| 382 |
+
{
|
| 383 |
+
"id": 6,
|
| 384 |
+
"type": "ManualSigmas",
|
| 385 |
+
"pos": [
|
| 386 |
+
2358.2357570959043,
|
| 387 |
+
5038.7065251752965
|
| 388 |
+
],
|
| 389 |
+
"size": [
|
| 390 |
+
266.579898552601,
|
| 391 |
+
58
|
| 392 |
+
],
|
| 393 |
+
"flags": {},
|
| 394 |
+
"order": 3,
|
| 395 |
+
"mode": 0,
|
| 396 |
+
"inputs": [
|
| 397 |
+
{
|
| 398 |
+
"label": "sigmas",
|
| 399 |
+
"name": "sigmas",
|
| 400 |
+
"type": "STRING",
|
| 401 |
+
"widget": {
|
| 402 |
+
"name": "sigmas"
|
| 403 |
+
},
|
| 404 |
+
"link": null
|
| 405 |
+
}
|
| 406 |
+
],
|
| 407 |
+
"outputs": [
|
| 408 |
+
{
|
| 409 |
+
"label": "SIGMAS",
|
| 410 |
+
"name": "SIGMAS",
|
| 411 |
+
"type": "SIGMAS",
|
| 412 |
+
"links": []
|
| 413 |
+
}
|
| 414 |
+
],
|
| 415 |
+
"title": "5 step Sigmas",
|
| 416 |
+
"properties": {
|
| 417 |
+
"cnr_id": "comfy-core",
|
| 418 |
+
"ver": "0.5.1",
|
| 419 |
+
"Node name for S&R": "ManualSigmas",
|
| 420 |
+
"ue_properties": {
|
| 421 |
+
"widget_ue_connectable": {},
|
| 422 |
+
"version": "7.5.2",
|
| 423 |
+
"input_ue_unconnectable": {}
|
| 424 |
+
},
|
| 425 |
+
"enableTabs": false,
|
| 426 |
+
"tabWidth": 65,
|
| 427 |
+
"tabXOffset": 10,
|
| 428 |
+
"hasSecondTab": false,
|
| 429 |
+
"secondTabText": "Send Back",
|
| 430 |
+
"secondTabOffset": 80,
|
| 431 |
+
"secondTabWidth": 65
|
| 432 |
+
},
|
| 433 |
+
"widgets_values": [
|
| 434 |
+
"0.9231, 0.8780, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 435 |
+
],
|
| 436 |
+
"widgets_values_named": {
|
| 437 |
+
"sigmas": "0.9231, 0.8780, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 438 |
+
}
|
| 439 |
+
},
|
| 440 |
+
{
|
| 441 |
+
"id": 7,
|
| 442 |
+
"type": "VAEDecode",
|
| 443 |
+
"pos": [
|
| 444 |
+
1637.6859974582662,
|
| 445 |
+
5047.812567600401
|
| 446 |
+
],
|
| 447 |
+
"size": [
|
| 448 |
+
230.98336128023698,
|
| 449 |
+
46
|
| 450 |
+
],
|
| 451 |
+
"flags": {
|
| 452 |
+
"collapsed": false
|
| 453 |
+
},
|
| 454 |
+
"order": 27,
|
| 455 |
+
"mode": 0,
|
| 456 |
+
"inputs": [
|
| 457 |
+
{
|
| 458 |
+
"name": "samples",
|
| 459 |
+
"type": "LATENT",
|
| 460 |
+
"link": 4
|
| 461 |
+
},
|
| 462 |
+
{
|
| 463 |
+
"name": "vae",
|
| 464 |
+
"type": "VAE",
|
| 465 |
+
"link": 5
|
| 466 |
+
}
|
| 467 |
+
],
|
| 468 |
+
"outputs": [
|
| 469 |
+
{
|
| 470 |
+
"name": "IMAGE",
|
| 471 |
+
"type": "IMAGE",
|
| 472 |
+
"links": [
|
| 473 |
+
1
|
| 474 |
+
]
|
| 475 |
+
}
|
| 476 |
+
],
|
| 477 |
+
"properties": {
|
| 478 |
+
"cnr_id": "comfy-core",
|
| 479 |
+
"ver": "0.33.2",
|
| 480 |
+
"Node name for S&R": "VAEDecode",
|
| 481 |
+
"ue_properties": {
|
| 482 |
+
"widget_ue_connectable": {},
|
| 483 |
+
"version": "7.8",
|
| 484 |
+
"input_ue_unconnectable": {}
|
| 485 |
+
}
|
| 486 |
+
}
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"id": 8,
|
| 490 |
+
"type": "VAEDecodeAudio",
|
| 491 |
+
"pos": [
|
| 492 |
+
1637.6859974582662,
|
| 493 |
+
5149.985288292222
|
| 494 |
+
],
|
| 495 |
+
"size": [
|
| 496 |
+
230.98336128023698,
|
| 497 |
+
46.99687563323096
|
| 498 |
+
],
|
| 499 |
+
"flags": {
|
| 500 |
+
"collapsed": false
|
| 501 |
+
},
|
| 502 |
+
"order": 28,
|
| 503 |
+
"mode": 0,
|
| 504 |
+
"inputs": [
|
| 505 |
+
{
|
| 506 |
+
"name": "samples",
|
| 507 |
+
"type": "LATENT",
|
| 508 |
+
"link": 6
|
| 509 |
+
},
|
| 510 |
+
{
|
| 511 |
+
"name": "vae",
|
| 512 |
+
"type": "VAE",
|
| 513 |
+
"link": 7
|
| 514 |
+
}
|
| 515 |
+
],
|
| 516 |
+
"outputs": [
|
| 517 |
+
{
|
| 518 |
+
"name": "AUDIO",
|
| 519 |
+
"type": "AUDIO",
|
| 520 |
+
"links": [
|
| 521 |
+
2
|
| 522 |
+
]
|
| 523 |
+
}
|
| 524 |
+
],
|
| 525 |
+
"properties": {
|
| 526 |
+
"cnr_id": "comfy-core",
|
| 527 |
+
"ver": "0.33.2",
|
| 528 |
+
"Node name for S&R": "VAEDecodeAudio",
|
| 529 |
+
"ue_properties": {
|
| 530 |
+
"widget_ue_connectable": {},
|
| 531 |
+
"version": "7.8",
|
| 532 |
+
"input_ue_unconnectable": {}
|
| 533 |
+
}
|
| 534 |
+
}
|
| 535 |
+
},
|
| 536 |
+
{
|
| 537 |
+
"id": 9,
|
| 538 |
+
"type": "LoadImage",
|
| 539 |
+
"pos": [
|
| 540 |
+
15.476970637899512,
|
| 541 |
+
5397.098522753795
|
| 542 |
+
],
|
| 543 |
+
"size": [
|
| 544 |
+
290,
|
| 545 |
+
330
|
| 546 |
+
],
|
| 547 |
+
"flags": {},
|
| 548 |
+
"order": 4,
|
| 549 |
+
"mode": 4,
|
| 550 |
+
"inputs": [],
|
| 551 |
+
"outputs": [
|
| 552 |
+
{
|
| 553 |
+
"name": "IMAGE",
|
| 554 |
+
"type": "IMAGE",
|
| 555 |
+
"links": [
|
| 556 |
+
13
|
| 557 |
+
]
|
| 558 |
+
},
|
| 559 |
+
{
|
| 560 |
+
"name": "MASK",
|
| 561 |
+
"type": "MASK",
|
| 562 |
+
"links": null
|
| 563 |
+
}
|
| 564 |
+
],
|
| 565 |
+
"properties": {
|
| 566 |
+
"cnr_id": "comfy-core",
|
| 567 |
+
"ver": "0.33.2",
|
| 568 |
+
"Node name for S&R": "LoadImage",
|
| 569 |
+
"ue_properties": {
|
| 570 |
+
"widget_ue_connectable": {},
|
| 571 |
+
"version": "7.8",
|
| 572 |
+
"input_ue_unconnectable": {}
|
| 573 |
+
}
|
| 574 |
+
},
|
| 575 |
+
"widgets_values": [
|
| 576 |
+
"09-55-07_00001.jpg",
|
| 577 |
+
"image"
|
| 578 |
+
],
|
| 579 |
+
"widgets_values_named": {
|
| 580 |
+
"image": "09-55-07_00001.jpg",
|
| 581 |
+
"upload": "image"
|
| 582 |
+
}
|
| 583 |
+
},
|
| 584 |
+
{
|
| 585 |
+
"id": 10,
|
| 586 |
+
"type": "LTXVConcatAVLatent",
|
| 587 |
+
"pos": [
|
| 588 |
+
1970.9114206444888,
|
| 589 |
+
5102.2627638016265
|
| 590 |
+
],
|
| 591 |
+
"size": [
|
| 592 |
+
286.8360679651149,
|
| 593 |
+
46
|
| 594 |
+
],
|
| 595 |
+
"flags": {},
|
| 596 |
+
"order": 32,
|
| 597 |
+
"mode": 0,
|
| 598 |
+
"inputs": [
|
| 599 |
+
{
|
| 600 |
+
"label": "video_latent",
|
| 601 |
+
"name": "video_latent",
|
| 602 |
+
"type": "LATENT",
|
| 603 |
+
"link": 8
|
| 604 |
+
},
|
| 605 |
+
{
|
| 606 |
+
"label": "audio_latent",
|
| 607 |
+
"name": "audio_latent",
|
| 608 |
+
"type": "LATENT",
|
| 609 |
+
"link": 9
|
| 610 |
+
}
|
| 611 |
+
],
|
| 612 |
+
"outputs": [
|
| 613 |
+
{
|
| 614 |
+
"label": "latent",
|
| 615 |
+
"name": "latent",
|
| 616 |
+
"type": "LATENT",
|
| 617 |
+
"links": [
|
| 618 |
+
25
|
| 619 |
+
]
|
| 620 |
+
}
|
| 621 |
+
],
|
| 622 |
+
"properties": {
|
| 623 |
+
"cnr_id": "comfy-core",
|
| 624 |
+
"ver": "0.5.1",
|
| 625 |
+
"Node name for S&R": "LTXVConcatAVLatent",
|
| 626 |
+
"ue_properties": {
|
| 627 |
+
"widget_ue_connectable": {},
|
| 628 |
+
"version": "7.5.2",
|
| 629 |
+
"input_ue_unconnectable": {}
|
| 630 |
+
},
|
| 631 |
+
"enableTabs": false,
|
| 632 |
+
"tabWidth": 65,
|
| 633 |
+
"tabXOffset": 10,
|
| 634 |
+
"hasSecondTab": false,
|
| 635 |
+
"secondTabText": "Send Back",
|
| 636 |
+
"secondTabOffset": 80,
|
| 637 |
+
"secondTabWidth": 65
|
| 638 |
+
}
|
| 639 |
+
},
|
| 640 |
+
{
|
| 641 |
+
"id": 11,
|
| 642 |
+
"type": "MiniMaxH3ReferenceToVideo",
|
| 643 |
+
"pos": [
|
| 644 |
+
427.616431673551,
|
| 645 |
+
4842.454751659
|
| 646 |
+
],
|
| 647 |
+
"size": [
|
| 648 |
+
375.96979953612185,
|
| 649 |
+
348.76458454401836
|
| 650 |
+
],
|
| 651 |
+
"flags": {},
|
| 652 |
+
"order": 19,
|
| 653 |
+
"mode": 0,
|
| 654 |
+
"inputs": [
|
| 655 |
+
{
|
| 656 |
+
"name": "clip",
|
| 657 |
+
"type": "CLIP",
|
| 658 |
+
"link": 10
|
| 659 |
+
},
|
| 660 |
+
{
|
| 661 |
+
"name": "vae",
|
| 662 |
+
"type": "VAE",
|
| 663 |
+
"link": 11
|
| 664 |
+
},
|
| 665 |
+
{
|
| 666 |
+
"name": "audio_vae",
|
| 667 |
+
"type": "VAE",
|
| 668 |
+
"link": 12
|
| 669 |
+
},
|
| 670 |
+
{
|
| 671 |
+
"label": "ref_image_0",
|
| 672 |
+
"name": "ref_images.ref_image_0",
|
| 673 |
+
"shape": 7,
|
| 674 |
+
"type": "IMAGE",
|
| 675 |
+
"link": 13
|
| 676 |
+
},
|
| 677 |
+
{
|
| 678 |
+
"label": "ref_image_1",
|
| 679 |
+
"name": "ref_images.ref_image_1",
|
| 680 |
+
"shape": 7,
|
| 681 |
+
"type": "IMAGE",
|
| 682 |
+
"link": null
|
| 683 |
+
},
|
| 684 |
+
{
|
| 685 |
+
"label": "ref_video_0",
|
| 686 |
+
"name": "ref_videos.ref_video_0",
|
| 687 |
+
"shape": 7,
|
| 688 |
+
"type": "IMAGE",
|
| 689 |
+
"link": null
|
| 690 |
+
},
|
| 691 |
+
{
|
| 692 |
+
"label": "ref_video_audio_0",
|
| 693 |
+
"name": "ref_video_audios.ref_video_audio_0",
|
| 694 |
+
"shape": 7,
|
| 695 |
+
"type": "AUDIO",
|
| 696 |
+
"link": null
|
| 697 |
+
},
|
| 698 |
+
{
|
| 699 |
+
"label": "ref_audio_0",
|
| 700 |
+
"name": "ref_audios.ref_audio_0",
|
| 701 |
+
"shape": 7,
|
| 702 |
+
"type": "AUDIO",
|
| 703 |
+
"link": null
|
| 704 |
+
},
|
| 705 |
+
{
|
| 706 |
+
"name": "width",
|
| 707 |
+
"type": "INT",
|
| 708 |
+
"widget": {
|
| 709 |
+
"name": "width"
|
| 710 |
+
},
|
| 711 |
+
"link": 47
|
| 712 |
+
},
|
| 713 |
+
{
|
| 714 |
+
"name": "height",
|
| 715 |
+
"type": "INT",
|
| 716 |
+
"widget": {
|
| 717 |
+
"name": "height"
|
| 718 |
+
},
|
| 719 |
+
"link": 48
|
| 720 |
+
},
|
| 721 |
+
{
|
| 722 |
+
"name": "length",
|
| 723 |
+
"type": "INT",
|
| 724 |
+
"widget": {
|
| 725 |
+
"name": "length"
|
| 726 |
+
},
|
| 727 |
+
"link": 49
|
| 728 |
+
}
|
| 729 |
+
],
|
| 730 |
+
"outputs": [
|
| 731 |
+
{
|
| 732 |
+
"name": "positive",
|
| 733 |
+
"type": "CONDITIONING",
|
| 734 |
+
"links": [
|
| 735 |
+
38,
|
| 736 |
+
40
|
| 737 |
+
]
|
| 738 |
+
},
|
| 739 |
+
{
|
| 740 |
+
"name": "LATENT",
|
| 741 |
+
"type": "LATENT",
|
| 742 |
+
"links": [
|
| 743 |
+
31
|
| 744 |
+
]
|
| 745 |
+
}
|
| 746 |
+
],
|
| 747 |
+
"properties": {
|
| 748 |
+
"cnr_id": "comfy-core",
|
| 749 |
+
"ver": "0.33.2",
|
| 750 |
+
"Node name for S&R": "MiniMaxH3ReferenceToVideo",
|
| 751 |
+
"ue_properties": {
|
| 752 |
+
"widget_ue_connectable": {
|
| 753 |
+
"prompt": true,
|
| 754 |
+
"width": true,
|
| 755 |
+
"height": true,
|
| 756 |
+
"length": true
|
| 757 |
+
},
|
| 758 |
+
"version": "7.8",
|
| 759 |
+
"input_ue_unconnectable": {}
|
| 760 |
+
}
|
| 761 |
+
},
|
| 762 |
+
"widgets_values": [
|
| 763 |
+
"",
|
| 764 |
+
1344,
|
| 765 |
+
768,
|
| 766 |
+
124,
|
| 767 |
+
"match"
|
| 768 |
+
],
|
| 769 |
+
"widgets_values_named": {
|
| 770 |
+
"prompt": "",
|
| 771 |
+
"width": 1344,
|
| 772 |
+
"height": 768,
|
| 773 |
+
"length": 124,
|
| 774 |
+
"ref_image_size": "match"
|
| 775 |
+
}
|
| 776 |
+
},
|
| 777 |
+
{
|
| 778 |
+
"id": 12,
|
| 779 |
+
"type": "ModelPreviewOverrideKJ",
|
| 780 |
+
"pos": [
|
| 781 |
+
904.139041498252,
|
| 782 |
+
4675.511346038954
|
| 783 |
+
],
|
| 784 |
+
"size": [
|
| 785 |
+
296.3668204268381,
|
| 786 |
+
462.7777453538065
|
| 787 |
+
],
|
| 788 |
+
"flags": {},
|
| 789 |
+
"order": 23,
|
| 790 |
+
"mode": 0,
|
| 791 |
+
"inputs": [
|
| 792 |
+
{
|
| 793 |
+
"name": "model",
|
| 794 |
+
"type": "MODEL",
|
| 795 |
+
"link": 16
|
| 796 |
+
},
|
| 797 |
+
{
|
| 798 |
+
"name": "vae",
|
| 799 |
+
"shape": 7,
|
| 800 |
+
"type": "VAE",
|
| 801 |
+
"link": null
|
| 802 |
+
},
|
| 803 |
+
{
|
| 804 |
+
"name": "preview_frames",
|
| 805 |
+
"type": "INT",
|
| 806 |
+
"widget": {
|
| 807 |
+
"name": "preview_frames"
|
| 808 |
+
},
|
| 809 |
+
"link": 17
|
| 810 |
+
}
|
| 811 |
+
],
|
| 812 |
+
"outputs": [
|
| 813 |
+
{
|
| 814 |
+
"name": "MODEL",
|
| 815 |
+
"type": "MODEL",
|
| 816 |
+
"links": [
|
| 817 |
+
37
|
| 818 |
+
]
|
| 819 |
+
}
|
| 820 |
+
],
|
| 821 |
+
"properties": {
|
| 822 |
+
"cnr_id": "comfyui-kjnodes",
|
| 823 |
+
"ver": "3f20054214fec9f9234fd3841ae6f1e4287948f6",
|
| 824 |
+
"Node name for S&R": "ModelPreviewOverrideKJ",
|
| 825 |
+
"ue_properties": {
|
| 826 |
+
"widget_ue_connectable": {},
|
| 827 |
+
"input_ue_unconnectable": {},
|
| 828 |
+
"version": "7.5.2"
|
| 829 |
+
}
|
| 830 |
+
},
|
| 831 |
+
"widgets_values": [
|
| 832 |
+
1024,
|
| 833 |
+
80,
|
| 834 |
+
true,
|
| 835 |
+
9,
|
| 836 |
+
12,
|
| 837 |
+
"taeh3.safetensors",
|
| 838 |
+
""
|
| 839 |
+
],
|
| 840 |
+
"widgets_values_named": {
|
| 841 |
+
"max_resolution": 1024,
|
| 842 |
+
"jpeg_quality": 80,
|
| 843 |
+
"suppress_default_preview": true,
|
| 844 |
+
"preview_frames": 9,
|
| 845 |
+
"preview_fps": 12,
|
| 846 |
+
"tiny_vae": "taeh3.safetensors",
|
| 847 |
+
"preview": ""
|
| 848 |
+
},
|
| 849 |
+
"color": "#233",
|
| 850 |
+
"bgcolor": "#355"
|
| 851 |
+
},
|
| 852 |
+
{
|
| 853 |
+
"id": 13,
|
| 854 |
+
"type": "SplitSigmas",
|
| 855 |
+
"pos": [
|
| 856 |
+
1284.8250542722158,
|
| 857 |
+
5119.253828393941
|
| 858 |
+
],
|
| 859 |
+
"size": [
|
| 860 |
+
308.3164287851357,
|
| 861 |
+
78
|
| 862 |
+
],
|
| 863 |
+
"flags": {},
|
| 864 |
+
"order": 20,
|
| 865 |
+
"mode": 0,
|
| 866 |
+
"inputs": [
|
| 867 |
+
{
|
| 868 |
+
"name": "sigmas",
|
| 869 |
+
"type": "SIGMAS",
|
| 870 |
+
"link": 18
|
| 871 |
+
}
|
| 872 |
+
],
|
| 873 |
+
"outputs": [
|
| 874 |
+
{
|
| 875 |
+
"name": "high_sigmas",
|
| 876 |
+
"type": "SIGMAS",
|
| 877 |
+
"links": [
|
| 878 |
+
30
|
| 879 |
+
]
|
| 880 |
+
},
|
| 881 |
+
{
|
| 882 |
+
"name": "low_sigmas",
|
| 883 |
+
"type": "SIGMAS",
|
| 884 |
+
"links": []
|
| 885 |
+
}
|
| 886 |
+
],
|
| 887 |
+
"properties": {
|
| 888 |
+
"cnr_id": "comfy-core",
|
| 889 |
+
"ver": "0.33.0",
|
| 890 |
+
"Node name for S&R": "SplitSigmas",
|
| 891 |
+
"ue_properties": {
|
| 892 |
+
"widget_ue_connectable": {},
|
| 893 |
+
"input_ue_unconnectable": {},
|
| 894 |
+
"version": "7.5.2"
|
| 895 |
+
}
|
| 896 |
+
},
|
| 897 |
+
"widgets_values": [
|
| 898 |
+
4
|
| 899 |
+
],
|
| 900 |
+
"widgets_values_named": {
|
| 901 |
+
"step": 4
|
| 902 |
+
},
|
| 903 |
+
"color": "#223",
|
| 904 |
+
"bgcolor": "#335"
|
| 905 |
+
},
|
| 906 |
+
{
|
| 907 |
+
"id": 14,
|
| 908 |
+
"type": "VAEDecodeAudio",
|
| 909 |
+
"pos": [
|
| 910 |
+
2670.464205116373,
|
| 911 |
+
5117.045715347668
|
| 912 |
+
],
|
| 913 |
+
"size": [
|
| 914 |
+
230,
|
| 915 |
+
60
|
| 916 |
+
],
|
| 917 |
+
"flags": {
|
| 918 |
+
"collapsed": false
|
| 919 |
+
},
|
| 920 |
+
"order": 34,
|
| 921 |
+
"mode": 0,
|
| 922 |
+
"inputs": [
|
| 923 |
+
{
|
| 924 |
+
"name": "samples",
|
| 925 |
+
"type": "LATENT",
|
| 926 |
+
"link": 19
|
| 927 |
+
},
|
| 928 |
+
{
|
| 929 |
+
"name": "vae",
|
| 930 |
+
"type": "VAE",
|
| 931 |
+
"link": 20
|
| 932 |
+
}
|
| 933 |
+
],
|
| 934 |
+
"outputs": [
|
| 935 |
+
{
|
| 936 |
+
"name": "AUDIO",
|
| 937 |
+
"type": "AUDIO",
|
| 938 |
+
"links": [
|
| 939 |
+
42
|
| 940 |
+
]
|
| 941 |
+
}
|
| 942 |
+
],
|
| 943 |
+
"properties": {
|
| 944 |
+
"cnr_id": "comfy-core",
|
| 945 |
+
"ver": "0.33.2",
|
| 946 |
+
"Node name for S&R": "VAEDecodeAudio",
|
| 947 |
+
"ue_properties": {
|
| 948 |
+
"widget_ue_connectable": {},
|
| 949 |
+
"version": "7.8",
|
| 950 |
+
"input_ue_unconnectable": {}
|
| 951 |
+
}
|
| 952 |
+
}
|
| 953 |
+
},
|
| 954 |
+
{
|
| 955 |
+
"id": 15,
|
| 956 |
+
"type": "CLIPLoader",
|
| 957 |
+
"pos": [
|
| 958 |
+
-306.15299615894105,
|
| 959 |
+
4843.880667348764
|
| 960 |
+
],
|
| 961 |
+
"size": [
|
| 962 |
+
640,
|
| 963 |
+
120
|
| 964 |
+
],
|
| 965 |
+
"flags": {},
|
| 966 |
+
"order": 5,
|
| 967 |
+
"mode": 0,
|
| 968 |
+
"inputs": [],
|
| 969 |
+
"outputs": [
|
| 970 |
+
{
|
| 971 |
+
"name": "CLIP",
|
| 972 |
+
"type": "CLIP",
|
| 973 |
+
"links": [
|
| 974 |
+
10
|
| 975 |
+
]
|
| 976 |
+
}
|
| 977 |
+
],
|
| 978 |
+
"properties": {
|
| 979 |
+
"cnr_id": "comfy-core",
|
| 980 |
+
"ver": "0.33.2",
|
| 981 |
+
"Node name for S&R": "CLIPLoader",
|
| 982 |
+
"ue_properties": {
|
| 983 |
+
"widget_ue_connectable": {},
|
| 984 |
+
"version": "7.8",
|
| 985 |
+
"input_ue_unconnectable": {}
|
| 986 |
+
},
|
| 987 |
+
"models": [
|
| 988 |
+
{
|
| 989 |
+
"name": "qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 990 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 991 |
+
"directory": "text_encoders"
|
| 992 |
+
}
|
| 993 |
+
]
|
| 994 |
+
},
|
| 995 |
+
"widgets_values": [
|
| 996 |
+
"qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 997 |
+
"minimax",
|
| 998 |
+
"default"
|
| 999 |
+
],
|
| 1000 |
+
"widgets_values_named": {
|
| 1001 |
+
"clip_name": "qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 1002 |
+
"type": "minimax",
|
| 1003 |
+
"device": "default"
|
| 1004 |
+
}
|
| 1005 |
+
},
|
| 1006 |
+
{
|
| 1007 |
+
"id": 16,
|
| 1008 |
+
"type": "SamplerCustomAdvanced",
|
| 1009 |
+
"pos": [
|
| 1010 |
+
2671.2544142840693,
|
| 1011 |
+
4689.961821972248
|
| 1012 |
+
],
|
| 1013 |
+
"size": [
|
| 1014 |
+
230,
|
| 1015 |
+
244.65625
|
| 1016 |
+
],
|
| 1017 |
+
"flags": {},
|
| 1018 |
+
"order": 33,
|
| 1019 |
+
"mode": 0,
|
| 1020 |
+
"inputs": [
|
| 1021 |
+
{
|
| 1022 |
+
"name": "noise",
|
| 1023 |
+
"type": "NOISE",
|
| 1024 |
+
"link": 21
|
| 1025 |
+
},
|
| 1026 |
+
{
|
| 1027 |
+
"name": "guider",
|
| 1028 |
+
"type": "GUIDER",
|
| 1029 |
+
"link": 22
|
| 1030 |
+
},
|
| 1031 |
+
{
|
| 1032 |
+
"name": "sampler",
|
| 1033 |
+
"type": "SAMPLER",
|
| 1034 |
+
"link": 23
|
| 1035 |
+
},
|
| 1036 |
+
{
|
| 1037 |
+
"name": "sigmas",
|
| 1038 |
+
"type": "SIGMAS",
|
| 1039 |
+
"link": 24
|
| 1040 |
+
},
|
| 1041 |
+
{
|
| 1042 |
+
"name": "latent_image",
|
| 1043 |
+
"type": "LATENT",
|
| 1044 |
+
"link": 25
|
| 1045 |
+
}
|
| 1046 |
+
],
|
| 1047 |
+
"outputs": [
|
| 1048 |
+
{
|
| 1049 |
+
"name": "output",
|
| 1050 |
+
"type": "LATENT",
|
| 1051 |
+
"links": [
|
| 1052 |
+
19,
|
| 1053 |
+
33
|
| 1054 |
+
]
|
| 1055 |
+
},
|
| 1056 |
+
{
|
| 1057 |
+
"name": "denoised_output",
|
| 1058 |
+
"type": "LATENT",
|
| 1059 |
+
"links": []
|
| 1060 |
+
}
|
| 1061 |
+
],
|
| 1062 |
+
"properties": {
|
| 1063 |
+
"cnr_id": "comfy-core",
|
| 1064 |
+
"ver": "0.33.2",
|
| 1065 |
+
"Node name for S&R": "SamplerCustomAdvanced",
|
| 1066 |
+
"ue_properties": {
|
| 1067 |
+
"widget_ue_connectable": {},
|
| 1068 |
+
"version": "7.8",
|
| 1069 |
+
"input_ue_unconnectable": {}
|
| 1070 |
+
}
|
| 1071 |
+
}
|
| 1072 |
+
},
|
| 1073 |
+
{
|
| 1074 |
+
"id": 17,
|
| 1075 |
+
"type": "PrimitiveFloat",
|
| 1076 |
+
"pos": [
|
| 1077 |
+
-295.4580064947545,
|
| 1078 |
+
5575.5407913785275
|
| 1079 |
+
],
|
| 1080 |
+
"size": [
|
| 1081 |
+
270,
|
| 1082 |
+
70
|
| 1083 |
+
],
|
| 1084 |
+
"flags": {},
|
| 1085 |
+
"order": 6,
|
| 1086 |
+
"mode": 0,
|
| 1087 |
+
"inputs": [],
|
| 1088 |
+
"outputs": [
|
| 1089 |
+
{
|
| 1090 |
+
"name": "FLOAT",
|
| 1091 |
+
"type": "FLOAT",
|
| 1092 |
+
"links": [
|
| 1093 |
+
26
|
| 1094 |
+
]
|
| 1095 |
+
}
|
| 1096 |
+
],
|
| 1097 |
+
"title": "Float (Duration)",
|
| 1098 |
+
"properties": {
|
| 1099 |
+
"cnr_id": "comfy-core",
|
| 1100 |
+
"ver": "0.33.2",
|
| 1101 |
+
"Node name for S&R": "PrimitiveFloat",
|
| 1102 |
+
"ue_properties": {
|
| 1103 |
+
"widget_ue_connectable": {},
|
| 1104 |
+
"version": "7.8",
|
| 1105 |
+
"input_ue_unconnectable": {}
|
| 1106 |
+
}
|
| 1107 |
+
},
|
| 1108 |
+
"widgets_values": [
|
| 1109 |
+
5
|
| 1110 |
+
],
|
| 1111 |
+
"widgets_values_named": {
|
| 1112 |
+
"value": 5
|
| 1113 |
+
},
|
| 1114 |
+
"color": "#322",
|
| 1115 |
+
"bgcolor": "#533"
|
| 1116 |
+
},
|
| 1117 |
+
{
|
| 1118 |
+
"id": 18,
|
| 1119 |
+
"type": "KSamplerSelect",
|
| 1120 |
+
"pos": [
|
| 1121 |
+
1284.8250542722158,
|
| 1122 |
+
4831.866013030215
|
| 1123 |
+
],
|
| 1124 |
+
"size": [
|
| 1125 |
+
308.3164287851357,
|
| 1126 |
+
58
|
| 1127 |
+
],
|
| 1128 |
+
"flags": {},
|
| 1129 |
+
"order": 7,
|
| 1130 |
+
"mode": 0,
|
| 1131 |
+
"inputs": [],
|
| 1132 |
+
"outputs": [
|
| 1133 |
+
{
|
| 1134 |
+
"name": "SAMPLER",
|
| 1135 |
+
"type": "SAMPLER",
|
| 1136 |
+
"links": [
|
| 1137 |
+
23,
|
| 1138 |
+
29
|
| 1139 |
+
]
|
| 1140 |
+
}
|
| 1141 |
+
],
|
| 1142 |
+
"properties": {
|
| 1143 |
+
"cnr_id": "comfy-core",
|
| 1144 |
+
"ver": "0.33.2",
|
| 1145 |
+
"Node name for S&R": "KSamplerSelect",
|
| 1146 |
+
"ue_properties": {
|
| 1147 |
+
"widget_ue_connectable": {},
|
| 1148 |
+
"version": "7.8",
|
| 1149 |
+
"input_ue_unconnectable": {}
|
| 1150 |
+
}
|
| 1151 |
+
},
|
| 1152 |
+
"widgets_values": [
|
| 1153 |
+
"euler"
|
| 1154 |
+
],
|
| 1155 |
+
"widgets_values_named": {
|
| 1156 |
+
"sampler_name": "euler"
|
| 1157 |
+
}
|
| 1158 |
+
},
|
| 1159 |
+
{
|
| 1160 |
+
"id": 21,
|
| 1161 |
+
"type": "SamplerCustomAdvanced",
|
| 1162 |
+
"pos": [
|
| 1163 |
+
1637.6859974582662,
|
| 1164 |
+
4688.965281374599
|
| 1165 |
+
],
|
| 1166 |
+
"size": [
|
| 1167 |
+
230.98336128023698,
|
| 1168 |
+
302.67456553398097
|
| 1169 |
+
],
|
| 1170 |
+
"flags": {},
|
| 1171 |
+
"order": 26,
|
| 1172 |
+
"mode": 0,
|
| 1173 |
+
"inputs": [
|
| 1174 |
+
{
|
| 1175 |
+
"name": "noise",
|
| 1176 |
+
"type": "NOISE",
|
| 1177 |
+
"link": 27
|
| 1178 |
+
},
|
| 1179 |
+
{
|
| 1180 |
+
"name": "guider",
|
| 1181 |
+
"type": "GUIDER",
|
| 1182 |
+
"link": 28
|
| 1183 |
+
},
|
| 1184 |
+
{
|
| 1185 |
+
"name": "sampler",
|
| 1186 |
+
"type": "SAMPLER",
|
| 1187 |
+
"link": 29
|
| 1188 |
+
},
|
| 1189 |
+
{
|
| 1190 |
+
"name": "sigmas",
|
| 1191 |
+
"type": "SIGMAS",
|
| 1192 |
+
"link": 30
|
| 1193 |
+
},
|
| 1194 |
+
{
|
| 1195 |
+
"name": "latent_image",
|
| 1196 |
+
"type": "LATENT",
|
| 1197 |
+
"link": 31
|
| 1198 |
+
}
|
| 1199 |
+
],
|
| 1200 |
+
"outputs": [
|
| 1201 |
+
{
|
| 1202 |
+
"name": "output",
|
| 1203 |
+
"type": "LATENT",
|
| 1204 |
+
"links": []
|
| 1205 |
+
},
|
| 1206 |
+
{
|
| 1207 |
+
"name": "denoised_output",
|
| 1208 |
+
"type": "LATENT",
|
| 1209 |
+
"links": [
|
| 1210 |
+
4,
|
| 1211 |
+
6,
|
| 1212 |
+
43
|
| 1213 |
+
]
|
| 1214 |
+
}
|
| 1215 |
+
],
|
| 1216 |
+
"properties": {
|
| 1217 |
+
"cnr_id": "comfy-core",
|
| 1218 |
+
"ver": "0.33.2",
|
| 1219 |
+
"Node name for S&R": "SamplerCustomAdvanced",
|
| 1220 |
+
"ue_properties": {
|
| 1221 |
+
"widget_ue_connectable": {},
|
| 1222 |
+
"version": "7.8",
|
| 1223 |
+
"input_ue_unconnectable": {}
|
| 1224 |
+
}
|
| 1225 |
+
}
|
| 1226 |
+
},
|
| 1227 |
+
{
|
| 1228 |
+
"id": 22,
|
| 1229 |
+
"type": "ManualSigmas",
|
| 1230 |
+
"pos": [
|
| 1231 |
+
2358.2357570959043,
|
| 1232 |
+
4924.113084521008
|
| 1233 |
+
],
|
| 1234 |
+
"size": [
|
| 1235 |
+
266.579898552601,
|
| 1236 |
+
58
|
| 1237 |
+
],
|
| 1238 |
+
"flags": {},
|
| 1239 |
+
"order": 8,
|
| 1240 |
+
"mode": 0,
|
| 1241 |
+
"inputs": [
|
| 1242 |
+
{
|
| 1243 |
+
"label": "sigmas",
|
| 1244 |
+
"name": "sigmas",
|
| 1245 |
+
"type": "STRING",
|
| 1246 |
+
"widget": {
|
| 1247 |
+
"name": "sigmas"
|
| 1248 |
+
},
|
| 1249 |
+
"link": null
|
| 1250 |
+
}
|
| 1251 |
+
],
|
| 1252 |
+
"outputs": [
|
| 1253 |
+
{
|
| 1254 |
+
"label": "SIGMAS",
|
| 1255 |
+
"name": "SIGMAS",
|
| 1256 |
+
"type": "SIGMAS",
|
| 1257 |
+
"links": []
|
| 1258 |
+
}
|
| 1259 |
+
],
|
| 1260 |
+
"title": "4 step Sigmas",
|
| 1261 |
+
"properties": {
|
| 1262 |
+
"cnr_id": "comfy-core",
|
| 1263 |
+
"ver": "0.5.1",
|
| 1264 |
+
"Node name for S&R": "ManualSigmas",
|
| 1265 |
+
"ue_properties": {
|
| 1266 |
+
"widget_ue_connectable": {},
|
| 1267 |
+
"version": "7.5.2",
|
| 1268 |
+
"input_ue_unconnectable": {}
|
| 1269 |
+
},
|
| 1270 |
+
"enableTabs": false,
|
| 1271 |
+
"tabWidth": 65,
|
| 1272 |
+
"tabXOffset": 10,
|
| 1273 |
+
"hasSecondTab": false,
|
| 1274 |
+
"secondTabText": "Send Back",
|
| 1275 |
+
"secondTabOffset": 80,
|
| 1276 |
+
"secondTabWidth": 65
|
| 1277 |
+
},
|
| 1278 |
+
"widgets_values": [
|
| 1279 |
+
"0.9035, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 1280 |
+
],
|
| 1281 |
+
"widgets_values_named": {
|
| 1282 |
+
"sigmas": "0.9035, 0.8000, 0.6316, 0.3158, 0.0000"
|
| 1283 |
+
}
|
| 1284 |
+
},
|
| 1285 |
+
{
|
| 1286 |
+
"id": 23,
|
| 1287 |
+
"type": "PrimitiveFloat",
|
| 1288 |
+
"pos": [
|
| 1289 |
+
-300.93105593155974,
|
| 1290 |
+
5772.312661072873
|
| 1291 |
+
],
|
| 1292 |
+
"size": [
|
| 1293 |
+
291.8643748353079,
|
| 1294 |
+
58
|
| 1295 |
+
],
|
| 1296 |
+
"flags": {},
|
| 1297 |
+
"order": 9,
|
| 1298 |
+
"mode": 0,
|
| 1299 |
+
"inputs": [],
|
| 1300 |
+
"outputs": [
|
| 1301 |
+
{
|
| 1302 |
+
"name": "FLOAT",
|
| 1303 |
+
"type": "FLOAT",
|
| 1304 |
+
"links": [
|
| 1305 |
+
36
|
| 1306 |
+
]
|
| 1307 |
+
}
|
| 1308 |
+
],
|
| 1309 |
+
"title": "target_megapixels(放大的像素数)",
|
| 1310 |
+
"properties": {
|
| 1311 |
+
"cnr_id": "comfy-core",
|
| 1312 |
+
"ver": "0.33.2",
|
| 1313 |
+
"Node name for S&R": "PrimitiveFloat",
|
| 1314 |
+
"ue_properties": {
|
| 1315 |
+
"widget_ue_connectable": {},
|
| 1316 |
+
"input_ue_unconnectable": {},
|
| 1317 |
+
"version": "7.8"
|
| 1318 |
+
}
|
| 1319 |
+
},
|
| 1320 |
+
"widgets_values": [
|
| 1321 |
+
1
|
| 1322 |
+
],
|
| 1323 |
+
"widgets_values_named": {
|
| 1324 |
+
"value": 1
|
| 1325 |
+
},
|
| 1326 |
+
"color": "#232",
|
| 1327 |
+
"bgcolor": "#353"
|
| 1328 |
+
},
|
| 1329 |
+
{
|
| 1330 |
+
"id": 24,
|
| 1331 |
+
"type": "BasicScheduler",
|
| 1332 |
+
"pos": [
|
| 1333 |
+
1284.8250542722158,
|
| 1334 |
+
4948.94655111434
|
| 1335 |
+
],
|
| 1336 |
+
"size": [
|
| 1337 |
+
308.3164287851357,
|
| 1338 |
+
111.22673919547651
|
| 1339 |
+
],
|
| 1340 |
+
"flags": {},
|
| 1341 |
+
"order": 17,
|
| 1342 |
+
"mode": 0,
|
| 1343 |
+
"inputs": [
|
| 1344 |
+
{
|
| 1345 |
+
"name": "model",
|
| 1346 |
+
"type": "MODEL",
|
| 1347 |
+
"link": 32
|
| 1348 |
+
}
|
| 1349 |
+
],
|
| 1350 |
+
"outputs": [
|
| 1351 |
+
{
|
| 1352 |
+
"name": "SIGMAS",
|
| 1353 |
+
"type": "SIGMAS",
|
| 1354 |
+
"links": [
|
| 1355 |
+
18
|
| 1356 |
+
]
|
| 1357 |
+
}
|
| 1358 |
+
],
|
| 1359 |
+
"properties": {
|
| 1360 |
+
"cnr_id": "comfy-core",
|
| 1361 |
+
"ver": "0.33.2",
|
| 1362 |
+
"Node name for S&R": "BasicScheduler",
|
| 1363 |
+
"ue_properties": {
|
| 1364 |
+
"widget_ue_connectable": {},
|
| 1365 |
+
"version": "7.8",
|
| 1366 |
+
"input_ue_unconnectable": {}
|
| 1367 |
+
}
|
| 1368 |
+
},
|
| 1369 |
+
"widgets_values": [
|
| 1370 |
+
"simple",
|
| 1371 |
+
8,
|
| 1372 |
+
1
|
| 1373 |
+
],
|
| 1374 |
+
"widgets_values_named": {
|
| 1375 |
+
"scheduler": "simple",
|
| 1376 |
+
"steps": 8,
|
| 1377 |
+
"denoise": 1
|
| 1378 |
+
}
|
| 1379 |
+
},
|
| 1380 |
+
{
|
| 1381 |
+
"id": 25,
|
| 1382 |
+
"type": "VAEDecode",
|
| 1383 |
+
"pos": [
|
| 1384 |
+
2671.3761513913773,
|
| 1385 |
+
4995.482627248038
|
| 1386 |
+
],
|
| 1387 |
+
"size": [
|
| 1388 |
+
230,
|
| 1389 |
+
60
|
| 1390 |
+
],
|
| 1391 |
+
"flags": {
|
| 1392 |
+
"collapsed": false
|
| 1393 |
+
},
|
| 1394 |
+
"order": 35,
|
| 1395 |
+
"mode": 0,
|
| 1396 |
+
"inputs": [
|
| 1397 |
+
{
|
| 1398 |
+
"name": "samples",
|
| 1399 |
+
"type": "LATENT",
|
| 1400 |
+
"link": 33
|
| 1401 |
+
},
|
| 1402 |
+
{
|
| 1403 |
+
"name": "vae",
|
| 1404 |
+
"type": "VAE",
|
| 1405 |
+
"link": 34
|
| 1406 |
+
}
|
| 1407 |
+
],
|
| 1408 |
+
"outputs": [
|
| 1409 |
+
{
|
| 1410 |
+
"name": "IMAGE",
|
| 1411 |
+
"type": "IMAGE",
|
| 1412 |
+
"links": [
|
| 1413 |
+
41
|
| 1414 |
+
]
|
| 1415 |
+
}
|
| 1416 |
+
],
|
| 1417 |
+
"properties": {
|
| 1418 |
+
"cnr_id": "comfy-core",
|
| 1419 |
+
"ver": "0.33.2",
|
| 1420 |
+
"Node name for S&R": "VAEDecode",
|
| 1421 |
+
"ue_properties": {
|
| 1422 |
+
"widget_ue_connectable": {},
|
| 1423 |
+
"version": "7.8",
|
| 1424 |
+
"input_ue_unconnectable": {}
|
| 1425 |
+
}
|
| 1426 |
+
}
|
| 1427 |
+
},
|
| 1428 |
+
{
|
| 1429 |
+
"id": 27,
|
| 1430 |
+
"type": "MarkdownNote",
|
| 1431 |
+
"pos": [
|
| 1432 |
+
-827.4982958786786,
|
| 1433 |
+
4626.87618265607
|
| 1434 |
+
],
|
| 1435 |
+
"size": [
|
| 1436 |
+
440,
|
| 1437 |
+
740
|
| 1438 |
+
],
|
| 1439 |
+
"flags": {},
|
| 1440 |
+
"order": 10,
|
| 1441 |
+
"mode": 0,
|
| 1442 |
+
"inputs": [],
|
| 1443 |
+
"outputs": [],
|
| 1444 |
+
"title": "Note: Model Links",
|
| 1445 |
+
"properties": {
|
| 1446 |
+
"ue_properties": {
|
| 1447 |
+
"widget_ue_connectable": {},
|
| 1448 |
+
"version": "7.8",
|
| 1449 |
+
"input_ue_unconnectable": {}
|
| 1450 |
+
}
|
| 1451 |
+
},
|
| 1452 |
+
"widgets_values": [
|
| 1453 |
+
"## Model Links\n[🤗 Comfy-Org/MiniMax-H3](https://huggingface.co/Comfy-Org/MiniMax-H3)\n\n**vae**\n\n- [minimax_h3_video_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors)\n- [minimax_h3_audio_vae_fp32.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors)\n\n**diffusion_models**\n\n- [minimax_h3_ref2va_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ ├── minimax_h3_video_vae_fp16.safetensors\n│ │ └── minimax_h3_audio_vae_fp32.safetensors\n│ ├── 📂 diffusion_models/\n│ │ └── minimax_h3_ref2va_pruned_int8_convrot.safetensors\n│ └── 📂 text_encoders/\n│ └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
|
| 1454 |
+
],
|
| 1455 |
+
"widgets_values_named": {
|
| 1456 |
+
"text": "## Model Links\n[🤗 Comfy-Org/MiniMax-H3](https://huggingface.co/Comfy-Org/MiniMax-H3)\n\n**vae**\n\n- [minimax_h3_video_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors)\n- [minimax_h3_audio_vae_fp32.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors)\n\n**diffusion_models**\n\n- [minimax_h3_ref2va_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ ├── minimax_h3_video_vae_fp16.safetensors\n│ │ └── minimax_h3_audio_vae_fp32.safetensors\n│ ├── 📂 diffusion_models/\n│ │ └── minimax_h3_ref2va_pruned_int8_convrot.safetensors\n│ └── 📂 text_encoders/\n│ └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
|
| 1457 |
+
},
|
| 1458 |
+
"color": "#222",
|
| 1459 |
+
"bgcolor": "#000"
|
| 1460 |
+
},
|
| 1461 |
+
{
|
| 1462 |
+
"id": 28,
|
| 1463 |
+
"type": "MarkdownNote",
|
| 1464 |
+
"pos": [
|
| 1465 |
+
-698.29987297497,
|
| 1466 |
+
5452.995280949237
|
| 1467 |
+
],
|
| 1468 |
+
"size": [
|
| 1469 |
+
300,
|
| 1470 |
+
520
|
| 1471 |
+
],
|
| 1472 |
+
"flags": {},
|
| 1473 |
+
"order": 11,
|
| 1474 |
+
"mode": 0,
|
| 1475 |
+
"inputs": [],
|
| 1476 |
+
"outputs": [],
|
| 1477 |
+
"title": "Note: Size Settings Reference",
|
| 1478 |
+
"properties": {
|
| 1479 |
+
"ue_properties": {
|
| 1480 |
+
"widget_ue_connectable": {},
|
| 1481 |
+
"version": "7.8",
|
| 1482 |
+
"input_ue_unconnectable": {}
|
| 1483 |
+
}
|
| 1484 |
+
},
|
| 1485 |
+
"widgets_values": [
|
| 1486 |
+
"| megapixels | Aspect | Output (multiple=32) |\n|---|---|---|\n| 0.2 | 16:9 | 608 x 352 |\n| 0.3 | 16:9 | 736 x 416 |\n| 0.4 | 16:9 | 864 x 480 |\n| 0.5 | 16:9 | 960 x 544 |\n| 0.6 | 16:9 | 1056 x 608 |\n| 0.7 | 16:9 | 1152 x 640 |\n| 0.8 | 16:9 | 1216 x 672 |\n| 0.9 | 16:9 | 1280 x 736 |\n| 0.98 | 16:9 | 1344 x 768 |\n| 1.0 | 16:9 | 1376 x 768 |\n| 1.2 | 16:9 | 1504 x 832 |\n| 1.5 | 16:9 | 1664 x 928 |\n| 1.8 | 16:9 | 1824 x 1024 |\n| 2.0 | 16:9 | 1920 x 1088 |\n"
|
| 1487 |
+
],
|
| 1488 |
+
"widgets_values_named": {
|
| 1489 |
+
"text": "| megapixels | Aspect | Output (multiple=32) |\n|---|---|---|\n| 0.2 | 16:9 | 608 x 352 |\n| 0.3 | 16:9 | 736 x 416 |\n| 0.4 | 16:9 | 864 x 480 |\n| 0.5 | 16:9 | 960 x 544 |\n| 0.6 | 16:9 | 1056 x 608 |\n| 0.7 | 16:9 | 1152 x 640 |\n| 0.8 | 16:9 | 1216 x 672 |\n| 0.9 | 16:9 | 1280 x 736 |\n| 0.98 | 16:9 | 1344 x 768 |\n| 1.0 | 16:9 | 1376 x 768 |\n| 1.2 | 16:9 | 1504 x 832 |\n| 1.5 | 16:9 | 1664 x 928 |\n| 1.8 | 16:9 | 1824 x 1024 |\n| 2.0 | 16:9 | 1920 x 1088 |\n"
|
| 1490 |
+
},
|
| 1491 |
+
"color": "#222",
|
| 1492 |
+
"bgcolor": "#000"
|
| 1493 |
+
},
|
| 1494 |
+
{
|
| 1495 |
+
"id": 29,
|
| 1496 |
+
"type": "BasicGuider",
|
| 1497 |
+
"pos": [
|
| 1498 |
+
1284.8250542722158,
|
| 1499 |
+
4712.78547494609
|
| 1500 |
+
],
|
| 1501 |
+
"size": [
|
| 1502 |
+
308.3164287851357,
|
| 1503 |
+
60
|
| 1504 |
+
],
|
| 1505 |
+
"flags": {},
|
| 1506 |
+
"order": 25,
|
| 1507 |
+
"mode": 0,
|
| 1508 |
+
"inputs": [
|
| 1509 |
+
{
|
| 1510 |
+
"name": "model",
|
| 1511 |
+
"type": "MODEL",
|
| 1512 |
+
"link": 37
|
| 1513 |
+
},
|
| 1514 |
+
{
|
| 1515 |
+
"name": "conditioning",
|
| 1516 |
+
"type": "CONDITIONING",
|
| 1517 |
+
"link": 38
|
| 1518 |
+
}
|
| 1519 |
+
],
|
| 1520 |
+
"outputs": [
|
| 1521 |
+
{
|
| 1522 |
+
"name": "GUIDER",
|
| 1523 |
+
"type": "GUIDER",
|
| 1524 |
+
"links": [
|
| 1525 |
+
28
|
| 1526 |
+
]
|
| 1527 |
+
}
|
| 1528 |
+
],
|
| 1529 |
+
"properties": {
|
| 1530 |
+
"cnr_id": "comfy-core",
|
| 1531 |
+
"ver": "0.33.2",
|
| 1532 |
+
"Node name for S&R": "BasicGuider",
|
| 1533 |
+
"ue_properties": {
|
| 1534 |
+
"widget_ue_connectable": {},
|
| 1535 |
+
"version": "7.8",
|
| 1536 |
+
"input_ue_unconnectable": {}
|
| 1537 |
+
}
|
| 1538 |
+
}
|
| 1539 |
+
},
|
| 1540 |
+
{
|
| 1541 |
+
"id": 30,
|
| 1542 |
+
"type": "UNETLoader",
|
| 1543 |
+
"pos": [
|
| 1544 |
+
-306.72273558820143,
|
| 1545 |
+
4689.4444360439265
|
| 1546 |
+
],
|
| 1547 |
+
"size": [
|
| 1548 |
+
640,
|
| 1549 |
+
90
|
| 1550 |
+
],
|
| 1551 |
+
"flags": {},
|
| 1552 |
+
"order": 12,
|
| 1553 |
+
"mode": 0,
|
| 1554 |
+
"inputs": [],
|
| 1555 |
+
"outputs": [
|
| 1556 |
+
{
|
| 1557 |
+
"name": "MODEL",
|
| 1558 |
+
"type": "MODEL",
|
| 1559 |
+
"links": [
|
| 1560 |
+
32,
|
| 1561 |
+
44
|
| 1562 |
+
]
|
| 1563 |
+
}
|
| 1564 |
+
],
|
| 1565 |
+
"properties": {
|
| 1566 |
+
"cnr_id": "comfy-core",
|
| 1567 |
+
"ver": "0.33.2",
|
| 1568 |
+
"Node name for S&R": "UNETLoader",
|
| 1569 |
+
"ue_properties": {
|
| 1570 |
+
"widget_ue_connectable": {},
|
| 1571 |
+
"version": "7.8",
|
| 1572 |
+
"input_ue_unconnectable": {}
|
| 1573 |
+
},
|
| 1574 |
+
"models": [
|
| 1575 |
+
{
|
| 1576 |
+
"name": "minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 1577 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 1578 |
+
"directory": "diffusion_models"
|
| 1579 |
+
}
|
| 1580 |
+
]
|
| 1581 |
+
},
|
| 1582 |
+
"widgets_values": [
|
| 1583 |
+
"minimax_h3_ref2va_int8_convrot.safetensors",
|
| 1584 |
+
"default"
|
| 1585 |
+
],
|
| 1586 |
+
"widgets_values_named": {
|
| 1587 |
+
"unet_name": "minimax_h3_ref2va_int8_convrot.safetensors",
|
| 1588 |
+
"weight_dtype": "default"
|
| 1589 |
+
}
|
| 1590 |
+
},
|
| 1591 |
+
{
|
| 1592 |
+
"id": 31,
|
| 1593 |
+
"type": "RandomNoise",
|
| 1594 |
+
"pos": [
|
| 1595 |
+
427.616431673551,
|
| 1596 |
+
4690.66092333044
|
| 1597 |
+
],
|
| 1598 |
+
"size": [
|
| 1599 |
+
375.96979953612185,
|
| 1600 |
+
82
|
| 1601 |
+
],
|
| 1602 |
+
"flags": {},
|
| 1603 |
+
"order": 13,
|
| 1604 |
+
"mode": 0,
|
| 1605 |
+
"inputs": [],
|
| 1606 |
+
"outputs": [
|
| 1607 |
+
{
|
| 1608 |
+
"name": "NOISE",
|
| 1609 |
+
"type": "NOISE",
|
| 1610 |
+
"links": [
|
| 1611 |
+
21,
|
| 1612 |
+
27
|
| 1613 |
+
]
|
| 1614 |
+
}
|
| 1615 |
+
],
|
| 1616 |
+
"properties": {
|
| 1617 |
+
"cnr_id": "comfy-core",
|
| 1618 |
+
"ver": "0.33.2",
|
| 1619 |
+
"Node name for S&R": "RandomNoise",
|
| 1620 |
+
"ue_properties": {
|
| 1621 |
+
"widget_ue_connectable": {},
|
| 1622 |
+
"version": "7.8",
|
| 1623 |
+
"input_ue_unconnectable": {}
|
| 1624 |
+
}
|
| 1625 |
+
},
|
| 1626 |
+
"widgets_values": [
|
| 1627 |
+
42,
|
| 1628 |
+
"fixed"
|
| 1629 |
+
],
|
| 1630 |
+
"widgets_values_named": {
|
| 1631 |
+
"noise_seed": 42,
|
| 1632 |
+
"control_after_generate": "fixed"
|
| 1633 |
+
}
|
| 1634 |
+
},
|
| 1635 |
+
{
|
| 1636 |
+
"id": 32,
|
| 1637 |
+
"type": "BasicGuider",
|
| 1638 |
+
"pos": [
|
| 1639 |
+
2357.730698917854,
|
| 1640 |
+
4699.904827320822
|
| 1641 |
+
],
|
| 1642 |
+
"size": [
|
| 1643 |
+
270,
|
| 1644 |
+
60
|
| 1645 |
+
],
|
| 1646 |
+
"flags": {},
|
| 1647 |
+
"order": 24,
|
| 1648 |
+
"mode": 0,
|
| 1649 |
+
"inputs": [
|
| 1650 |
+
{
|
| 1651 |
+
"name": "model",
|
| 1652 |
+
"type": "MODEL",
|
| 1653 |
+
"link": 39
|
| 1654 |
+
},
|
| 1655 |
+
{
|
| 1656 |
+
"name": "conditioning",
|
| 1657 |
+
"type": "CONDITIONING",
|
| 1658 |
+
"link": 40
|
| 1659 |
+
}
|
| 1660 |
+
],
|
| 1661 |
+
"outputs": [
|
| 1662 |
+
{
|
| 1663 |
+
"name": "GUIDER",
|
| 1664 |
+
"type": "GUIDER",
|
| 1665 |
+
"links": [
|
| 1666 |
+
22
|
| 1667 |
+
]
|
| 1668 |
+
}
|
| 1669 |
+
],
|
| 1670 |
+
"properties": {
|
| 1671 |
+
"cnr_id": "comfy-core",
|
| 1672 |
+
"ver": "0.33.2",
|
| 1673 |
+
"Node name for S&R": "BasicGuider",
|
| 1674 |
+
"ue_properties": {
|
| 1675 |
+
"widget_ue_connectable": {},
|
| 1676 |
+
"version": "7.8",
|
| 1677 |
+
"input_ue_unconnectable": {}
|
| 1678 |
+
}
|
| 1679 |
+
}
|
| 1680 |
+
},
|
| 1681 |
+
{
|
| 1682 |
+
"id": 33,
|
| 1683 |
+
"type": "ManualSigmas",
|
| 1684 |
+
"pos": [
|
| 1685 |
+
2358.2357570959043,
|
| 1686 |
+
4821.483047768253
|
| 1687 |
+
],
|
| 1688 |
+
"size": [
|
| 1689 |
+
266.579898552601,
|
| 1690 |
+
58
|
| 1691 |
+
],
|
| 1692 |
+
"flags": {},
|
| 1693 |
+
"order": 14,
|
| 1694 |
+
"mode": 0,
|
| 1695 |
+
"inputs": [
|
| 1696 |
+
{
|
| 1697 |
+
"label": "sigmas",
|
| 1698 |
+
"name": "sigmas",
|
| 1699 |
+
"type": "STRING",
|
| 1700 |
+
"widget": {
|
| 1701 |
+
"name": "sigmas"
|
| 1702 |
+
},
|
| 1703 |
+
"link": null
|
| 1704 |
+
}
|
| 1705 |
+
],
|
| 1706 |
+
"outputs": [
|
| 1707 |
+
{
|
| 1708 |
+
"label": "SIGMAS",
|
| 1709 |
+
"name": "SIGMAS",
|
| 1710 |
+
"type": "SIGMAS",
|
| 1711 |
+
"links": [
|
| 1712 |
+
24
|
| 1713 |
+
]
|
| 1714 |
+
}
|
| 1715 |
+
],
|
| 1716 |
+
"title": "3 step Sigmas",
|
| 1717 |
+
"properties": {
|
| 1718 |
+
"cnr_id": "comfy-core",
|
| 1719 |
+
"ver": "0.5.1",
|
| 1720 |
+
"Node name for S&R": "ManualSigmas",
|
| 1721 |
+
"ue_properties": {
|
| 1722 |
+
"widget_ue_connectable": {},
|
| 1723 |
+
"version": "7.5.2",
|
| 1724 |
+
"input_ue_unconnectable": {}
|
| 1725 |
+
},
|
| 1726 |
+
"enableTabs": false,
|
| 1727 |
+
"tabWidth": 65,
|
| 1728 |
+
"tabXOffset": 10,
|
| 1729 |
+
"hasSecondTab": false,
|
| 1730 |
+
"secondTabText": "Send Back",
|
| 1731 |
+
"secondTabOffset": 80,
|
| 1732 |
+
"secondTabWidth": 65
|
| 1733 |
+
},
|
| 1734 |
+
"widgets_values": [
|
| 1735 |
+
"0.9035, 0.6316, 0.3158, 0.0000"
|
| 1736 |
+
],
|
| 1737 |
+
"widgets_values_named": {
|
| 1738 |
+
"sigmas": "0.9035, 0.6316, 0.3158, 0.0000"
|
| 1739 |
+
}
|
| 1740 |
+
},
|
| 1741 |
+
{
|
| 1742 |
+
"id": 34,
|
| 1743 |
+
"type": "CreateVideo",
|
| 1744 |
+
"pos": [
|
| 1745 |
+
2941.323495671123,
|
| 1746 |
+
4693.231361398204
|
| 1747 |
+
],
|
| 1748 |
+
"size": [
|
| 1749 |
+
283.1269337209078,
|
| 1750 |
+
102
|
| 1751 |
+
],
|
| 1752 |
+
"flags": {},
|
| 1753 |
+
"order": 36,
|
| 1754 |
+
"mode": 0,
|
| 1755 |
+
"inputs": [
|
| 1756 |
+
{
|
| 1757 |
+
"name": "images",
|
| 1758 |
+
"type": "IMAGE",
|
| 1759 |
+
"link": 41
|
| 1760 |
+
},
|
| 1761 |
+
{
|
| 1762 |
+
"name": "audio",
|
| 1763 |
+
"shape": 7,
|
| 1764 |
+
"type": "AUDIO",
|
| 1765 |
+
"link": 42
|
| 1766 |
+
}
|
| 1767 |
+
],
|
| 1768 |
+
"outputs": [
|
| 1769 |
+
{
|
| 1770 |
+
"name": "VIDEO",
|
| 1771 |
+
"type": "VIDEO",
|
| 1772 |
+
"links": [
|
| 1773 |
+
3
|
| 1774 |
+
]
|
| 1775 |
+
}
|
| 1776 |
+
],
|
| 1777 |
+
"properties": {
|
| 1778 |
+
"cnr_id": "comfy-core",
|
| 1779 |
+
"ver": "0.33.2",
|
| 1780 |
+
"Node name for S&R": "CreateVideo",
|
| 1781 |
+
"ue_properties": {
|
| 1782 |
+
"widget_ue_connectable": {},
|
| 1783 |
+
"version": "7.8",
|
| 1784 |
+
"input_ue_unconnectable": {}
|
| 1785 |
+
}
|
| 1786 |
+
},
|
| 1787 |
+
"widgets_values": [
|
| 1788 |
+
24,
|
| 1789 |
+
8
|
| 1790 |
+
],
|
| 1791 |
+
"widgets_values_named": {
|
| 1792 |
+
"fps": 24,
|
| 1793 |
+
"bit_depth": 8
|
| 1794 |
+
}
|
| 1795 |
+
},
|
| 1796 |
+
{
|
| 1797 |
+
"id": 35,
|
| 1798 |
+
"type": "LTXVSeparateAVLatent",
|
| 1799 |
+
"pos": [
|
| 1800 |
+
1966.715273508606,
|
| 1801 |
+
4699.039493830161
|
| 1802 |
+
],
|
| 1803 |
+
"size": [
|
| 1804 |
+
286.836067965115,
|
| 1805 |
+
48.43467905382113
|
| 1806 |
+
],
|
| 1807 |
+
"flags": {},
|
| 1808 |
+
"order": 29,
|
| 1809 |
+
"mode": 0,
|
| 1810 |
+
"inputs": [
|
| 1811 |
+
{
|
| 1812 |
+
"label": "av_latent",
|
| 1813 |
+
"name": "av_latent",
|
| 1814 |
+
"type": "LATENT",
|
| 1815 |
+
"link": 43
|
| 1816 |
+
}
|
| 1817 |
+
],
|
| 1818 |
+
"outputs": [
|
| 1819 |
+
{
|
| 1820 |
+
"label": "video_latent",
|
| 1821 |
+
"name": "video_latent",
|
| 1822 |
+
"type": "LATENT",
|
| 1823 |
+
"links": [
|
| 1824 |
+
35
|
| 1825 |
+
]
|
| 1826 |
+
},
|
| 1827 |
+
{
|
| 1828 |
+
"label": "audio_latent",
|
| 1829 |
+
"name": "audio_latent",
|
| 1830 |
+
"type": "LATENT",
|
| 1831 |
+
"links": [
|
| 1832 |
+
9
|
| 1833 |
+
]
|
| 1834 |
+
}
|
| 1835 |
+
],
|
| 1836 |
+
"properties": {
|
| 1837 |
+
"cnr_id": "comfy-core",
|
| 1838 |
+
"ver": "0.5.1",
|
| 1839 |
+
"Node name for S&R": "LTXVSeparateAVLatent",
|
| 1840 |
+
"ue_properties": {
|
| 1841 |
+
"widget_ue_connectable": {},
|
| 1842 |
+
"version": "7.5.2",
|
| 1843 |
+
"input_ue_unconnectable": {}
|
| 1844 |
+
},
|
| 1845 |
+
"enableTabs": false,
|
| 1846 |
+
"tabWidth": 65,
|
| 1847 |
+
"tabXOffset": 10,
|
| 1848 |
+
"hasSecondTab": false,
|
| 1849 |
+
"secondTabText": "Send Back",
|
| 1850 |
+
"secondTabOffset": 80,
|
| 1851 |
+
"secondTabWidth": 65
|
| 1852 |
+
}
|
| 1853 |
+
},
|
| 1854 |
+
{
|
| 1855 |
+
"id": 36,
|
| 1856 |
+
"type": "LoraLoaderModelOnly",
|
| 1857 |
+
"pos": [
|
| 1858 |
+
437.53065825024066,
|
| 1859 |
+
4481.39443401648
|
| 1860 |
+
],
|
| 1861 |
+
"size": [
|
| 1862 |
+
453.3210289616586,
|
| 1863 |
+
82
|
| 1864 |
+
],
|
| 1865 |
+
"flags": {},
|
| 1866 |
+
"order": 18,
|
| 1867 |
+
"mode": 0,
|
| 1868 |
+
"inputs": [
|
| 1869 |
+
{
|
| 1870 |
+
"name": "model",
|
| 1871 |
+
"type": "MODEL",
|
| 1872 |
+
"link": 44
|
| 1873 |
+
}
|
| 1874 |
+
],
|
| 1875 |
+
"outputs": [
|
| 1876 |
+
{
|
| 1877 |
+
"name": "MODEL",
|
| 1878 |
+
"type": "MODEL",
|
| 1879 |
+
"links": [
|
| 1880 |
+
46
|
| 1881 |
+
]
|
| 1882 |
+
}
|
| 1883 |
+
],
|
| 1884 |
+
"properties": {
|
| 1885 |
+
"cnr_id": "comfy-core",
|
| 1886 |
+
"ver": "0.33.2",
|
| 1887 |
+
"Node name for S&R": "LoraLoaderModelOnly",
|
| 1888 |
+
"ue_properties": {
|
| 1889 |
+
"widget_ue_connectable": {},
|
| 1890 |
+
"version": "7.8",
|
| 1891 |
+
"input_ue_unconnectable": {}
|
| 1892 |
+
}
|
| 1893 |
+
},
|
| 1894 |
+
"widgets_values": [
|
| 1895 |
+
"Minimax_H3\\minimax_h3_fl2v_lightx2v_turbo_4step_v0.1_comfy.safetensors",
|
| 1896 |
+
1
|
| 1897 |
+
],
|
| 1898 |
+
"widgets_values_named": {
|
| 1899 |
+
"lora_name": "Minimax_H3\\minimax_h3_fl2v_lightx2v_turbo_4step_v0.1_comfy.safetensors",
|
| 1900 |
+
"strength_model": 1
|
| 1901 |
+
}
|
| 1902 |
+
},
|
| 1903 |
+
{
|
| 1904 |
+
"id": 37,
|
| 1905 |
+
"type": "ModelAttentionBackend",
|
| 1906 |
+
"pos": [
|
| 1907 |
+
1212.250299654286,
|
| 1908 |
+
4477.499802262122
|
| 1909 |
+
],
|
| 1910 |
+
"size": [
|
| 1911 |
+
270,
|
| 1912 |
+
62
|
| 1913 |
+
],
|
| 1914 |
+
"flags": {},
|
| 1915 |
+
"order": 22,
|
| 1916 |
+
"mode": 0,
|
| 1917 |
+
"inputs": [
|
| 1918 |
+
{
|
| 1919 |
+
"name": "model",
|
| 1920 |
+
"type": "MODEL",
|
| 1921 |
+
"link": 45
|
| 1922 |
+
}
|
| 1923 |
+
],
|
| 1924 |
+
"outputs": [
|
| 1925 |
+
{
|
| 1926 |
+
"name": "MODEL",
|
| 1927 |
+
"type": "MODEL",
|
| 1928 |
+
"links": [
|
| 1929 |
+
16,
|
| 1930 |
+
39
|
| 1931 |
+
]
|
| 1932 |
+
}
|
| 1933 |
+
],
|
| 1934 |
+
"properties": {
|
| 1935 |
+
"cnr_id": "comfy-core",
|
| 1936 |
+
"ver": "0.33.2",
|
| 1937 |
+
"Node name for S&R": "ModelAttentionBackend",
|
| 1938 |
+
"ue_properties": {
|
| 1939 |
+
"widget_ue_connectable": {},
|
| 1940 |
+
"version": "7.8",
|
| 1941 |
+
"input_ue_unconnectable": {}
|
| 1942 |
+
}
|
| 1943 |
+
},
|
| 1944 |
+
"widgets_values": [
|
| 1945 |
+
"comfy kitchen attention"
|
| 1946 |
+
],
|
| 1947 |
+
"widgets_values_named": {
|
| 1948 |
+
"attention": "comfy kitchen attention"
|
| 1949 |
+
}
|
| 1950 |
+
},
|
| 1951 |
+
{
|
| 1952 |
+
"id": 26,
|
| 1953 |
+
"type": "MinimaxH3LatentUpscaler3D",
|
| 1954 |
+
"pos": [
|
| 1955 |
+
1969.409199969843,
|
| 1956 |
+
4827.265029425342
|
| 1957 |
+
],
|
| 1958 |
+
"size": [
|
| 1959 |
+
286.836067965115,
|
| 1960 |
+
202
|
| 1961 |
+
],
|
| 1962 |
+
"flags": {},
|
| 1963 |
+
"order": 31,
|
| 1964 |
+
"mode": 0,
|
| 1965 |
+
"inputs": [
|
| 1966 |
+
{
|
| 1967 |
+
"name": "latent",
|
| 1968 |
+
"type": "*",
|
| 1969 |
+
"link": 35
|
| 1970 |
+
},
|
| 1971 |
+
{
|
| 1972 |
+
"name": "mode.megapixels",
|
| 1973 |
+
"type": "FLOAT",
|
| 1974 |
+
"widget": {
|
| 1975 |
+
"name": "mode.megapixels"
|
| 1976 |
+
},
|
| 1977 |
+
"link": 36
|
| 1978 |
+
}
|
| 1979 |
+
],
|
| 1980 |
+
"outputs": [
|
| 1981 |
+
{
|
| 1982 |
+
"name": "latent",
|
| 1983 |
+
"type": "*",
|
| 1984 |
+
"links": [
|
| 1985 |
+
8
|
| 1986 |
+
]
|
| 1987 |
+
}
|
| 1988 |
+
],
|
| 1989 |
+
"properties": {
|
| 1990 |
+
"Node name for S&R": "MinimaxH3LatentUpscaler3D",
|
| 1991 |
+
"ue_properties": {
|
| 1992 |
+
"widget_ue_connectable": {},
|
| 1993 |
+
"input_ue_unconnectable": {},
|
| 1994 |
+
"version": "7.8"
|
| 1995 |
+
}
|
| 1996 |
+
},
|
| 1997 |
+
"widgets_values": [
|
| 1998 |
+
"minimax_h3_latent_upscaler_3d_fp16.safetensors",
|
| 1999 |
+
"megapixels",
|
| 2000 |
+
1,
|
| 2001 |
+
32,
|
| 2002 |
+
false,
|
| 2003 |
+
"cuda",
|
| 2004 |
+
"fp16"
|
| 2005 |
+
],
|
| 2006 |
+
"widgets_values_named": {
|
| 2007 |
+
"model_name": "minimax_h3_latent_upscaler_3d_fp16.safetensors",
|
| 2008 |
+
"mode": "megapixels",
|
| 2009 |
+
"mode.megapixels": 1,
|
| 2010 |
+
"align": 32,
|
| 2011 |
+
"keep_proportion": false,
|
| 2012 |
+
"device": "cuda",
|
| 2013 |
+
"precision": "fp16"
|
| 2014 |
+
}
|
| 2015 |
+
},
|
| 2016 |
+
{
|
| 2017 |
+
"id": 20,
|
| 2018 |
+
"type": "ResolutionSelector",
|
| 2019 |
+
"pos": [
|
| 2020 |
+
-292.50792265404357,
|
| 2021 |
+
5395.858603868241
|
| 2022 |
+
],
|
| 2023 |
+
"size": [
|
| 2024 |
+
270.983361280237,
|
| 2025 |
+
126
|
| 2026 |
+
],
|
| 2027 |
+
"flags": {},
|
| 2028 |
+
"order": 15,
|
| 2029 |
+
"mode": 0,
|
| 2030 |
+
"showAdvanced": false,
|
| 2031 |
+
"inputs": [],
|
| 2032 |
+
"outputs": [
|
| 2033 |
+
{
|
| 2034 |
+
"name": "width",
|
| 2035 |
+
"type": "INT",
|
| 2036 |
+
"links": [
|
| 2037 |
+
47
|
| 2038 |
+
]
|
| 2039 |
+
},
|
| 2040 |
+
{
|
| 2041 |
+
"name": "height",
|
| 2042 |
+
"type": "INT",
|
| 2043 |
+
"links": [
|
| 2044 |
+
48
|
| 2045 |
+
]
|
| 2046 |
+
}
|
| 2047 |
+
],
|
| 2048 |
+
"title": "Resolution Selector (Size)",
|
| 2049 |
+
"properties": {
|
| 2050 |
+
"cnr_id": "comfy-core",
|
| 2051 |
+
"ver": "0.33.2",
|
| 2052 |
+
"Node name for S&R": "ResolutionSelector",
|
| 2053 |
+
"ue_properties": {
|
| 2054 |
+
"widget_ue_connectable": {},
|
| 2055 |
+
"version": "7.8",
|
| 2056 |
+
"input_ue_unconnectable": {}
|
| 2057 |
+
}
|
| 2058 |
+
},
|
| 2059 |
+
"widgets_values": [
|
| 2060 |
+
"16:9 (Widescreen)",
|
| 2061 |
+
0.2,
|
| 2062 |
+
32
|
| 2063 |
+
],
|
| 2064 |
+
"widgets_values_named": {
|
| 2065 |
+
"aspect_ratio": "16:9 (Widescreen)",
|
| 2066 |
+
"megapixels": 0.2,
|
| 2067 |
+
"multiple": 32
|
| 2068 |
+
},
|
| 2069 |
+
"color": "#322",
|
| 2070 |
+
"bgcolor": "#533"
|
| 2071 |
+
},
|
| 2072 |
+
{
|
| 2073 |
+
"id": 19,
|
| 2074 |
+
"type": "ComfyMathExpression",
|
| 2075 |
+
"pos": [
|
| 2076 |
+
-168.6086245942965,
|
| 2077 |
+
5700.738192982189
|
| 2078 |
+
],
|
| 2079 |
+
"size": [
|
| 2080 |
+
225,
|
| 2081 |
+
116
|
| 2082 |
+
],
|
| 2083 |
+
"flags": {
|
| 2084 |
+
"collapsed": true
|
| 2085 |
+
},
|
| 2086 |
+
"order": 16,
|
| 2087 |
+
"mode": 0,
|
| 2088 |
+
"inputs": [
|
| 2089 |
+
{
|
| 2090 |
+
"label": "a",
|
| 2091 |
+
"name": "values.a",
|
| 2092 |
+
"type": "FLOAT,INT,BOOLEAN",
|
| 2093 |
+
"link": 26
|
| 2094 |
+
},
|
| 2095 |
+
{
|
| 2096 |
+
"label": "b",
|
| 2097 |
+
"name": "values.b",
|
| 2098 |
+
"shape": 7,
|
| 2099 |
+
"type": "FLOAT,INT,BOOLEAN",
|
| 2100 |
+
"link": null
|
| 2101 |
+
}
|
| 2102 |
+
],
|
| 2103 |
+
"outputs": [
|
| 2104 |
+
{
|
| 2105 |
+
"name": "FLOAT",
|
| 2106 |
+
"type": "FLOAT",
|
| 2107 |
+
"links": []
|
| 2108 |
+
},
|
| 2109 |
+
{
|
| 2110 |
+
"name": "INT",
|
| 2111 |
+
"type": "INT",
|
| 2112 |
+
"links": [
|
| 2113 |
+
17,
|
| 2114 |
+
49
|
| 2115 |
+
]
|
| 2116 |
+
},
|
| 2117 |
+
{
|
| 2118 |
+
"name": "BOOL",
|
| 2119 |
+
"type": "BOOLEAN",
|
| 2120 |
+
"links": []
|
| 2121 |
+
}
|
| 2122 |
+
],
|
| 2123 |
+
"properties": {
|
| 2124 |
+
"cnr_id": "comfy-core",
|
| 2125 |
+
"ver": "0.33.2",
|
| 2126 |
+
"Node name for S&R": "ComfyMathExpression",
|
| 2127 |
+
"ue_properties": {
|
| 2128 |
+
"widget_ue_connectable": {},
|
| 2129 |
+
"version": "7.8",
|
| 2130 |
+
"input_ue_unconnectable": {}
|
| 2131 |
+
}
|
| 2132 |
+
},
|
| 2133 |
+
"widgets_values": [
|
| 2134 |
+
"max(5, round(a * 24)) + (5 - (max(5, round(a * 24)) % 17)) % 17"
|
| 2135 |
+
],
|
| 2136 |
+
"widgets_values_named": {
|
| 2137 |
+
"expression": "max(5, round(a * 24)) + (5 - (max(5, round(a * 24)) % 17)) % 17"
|
| 2138 |
+
}
|
| 2139 |
+
},
|
| 2140 |
+
{
|
| 2141 |
+
"id": 38,
|
| 2142 |
+
"type": "MiniMaxH3SigmaShift",
|
| 2143 |
+
"pos": [
|
| 2144 |
+
913.6385462171465,
|
| 2145 |
+
4479.056966713434
|
| 2146 |
+
],
|
| 2147 |
+
"size": [
|
| 2148 |
+
272.23402873514397,
|
| 2149 |
+
82
|
| 2150 |
+
],
|
| 2151 |
+
"flags": {},
|
| 2152 |
+
"order": 21,
|
| 2153 |
+
"mode": 0,
|
| 2154 |
+
"inputs": [
|
| 2155 |
+
{
|
| 2156 |
+
"name": "model",
|
| 2157 |
+
"type": "MODEL",
|
| 2158 |
+
"link": 46
|
| 2159 |
+
}
|
| 2160 |
+
],
|
| 2161 |
+
"outputs": [
|
| 2162 |
+
{
|
| 2163 |
+
"name": "MODEL",
|
| 2164 |
+
"type": "MODEL",
|
| 2165 |
+
"links": [
|
| 2166 |
+
45
|
| 2167 |
+
]
|
| 2168 |
+
}
|
| 2169 |
+
],
|
| 2170 |
+
"properties": {
|
| 2171 |
+
"cnr_id": "comfy-core",
|
| 2172 |
+
"ver": "0.30.0",
|
| 2173 |
+
"Node name for S&R": "MiniMaxH3SigmaShift",
|
| 2174 |
+
"ue_properties": {
|
| 2175 |
+
"widget_ue_connectable": {},
|
| 2176 |
+
"input_ue_unconnectable": {},
|
| 2177 |
+
"version": "7.8"
|
| 2178 |
+
}
|
| 2179 |
+
},
|
| 2180 |
+
"widgets_values": [
|
| 2181 |
+
12,
|
| 2182 |
+
3
|
| 2183 |
+
],
|
| 2184 |
+
"widgets_values_named": {
|
| 2185 |
+
"shift_video": 12,
|
| 2186 |
+
"shift_audio": 3
|
| 2187 |
+
}
|
| 2188 |
+
}
|
| 2189 |
+
],
|
| 2190 |
+
"links": [
|
| 2191 |
+
[
|
| 2192 |
+
1,
|
| 2193 |
+
7,
|
| 2194 |
+
0,
|
| 2195 |
+
1,
|
| 2196 |
+
0,
|
| 2197 |
+
"IMAGE"
|
| 2198 |
+
],
|
| 2199 |
+
[
|
| 2200 |
+
2,
|
| 2201 |
+
8,
|
| 2202 |
+
0,
|
| 2203 |
+
1,
|
| 2204 |
+
1,
|
| 2205 |
+
"AUDIO"
|
| 2206 |
+
],
|
| 2207 |
+
[
|
| 2208 |
+
3,
|
| 2209 |
+
34,
|
| 2210 |
+
0,
|
| 2211 |
+
5,
|
| 2212 |
+
0,
|
| 2213 |
+
"VIDEO"
|
| 2214 |
+
],
|
| 2215 |
+
[
|
| 2216 |
+
4,
|
| 2217 |
+
21,
|
| 2218 |
+
1,
|
| 2219 |
+
7,
|
| 2220 |
+
0,
|
| 2221 |
+
"LATENT"
|
| 2222 |
+
],
|
| 2223 |
+
[
|
| 2224 |
+
5,
|
| 2225 |
+
3,
|
| 2226 |
+
0,
|
| 2227 |
+
7,
|
| 2228 |
+
1,
|
| 2229 |
+
"VAE"
|
| 2230 |
+
],
|
| 2231 |
+
[
|
| 2232 |
+
6,
|
| 2233 |
+
21,
|
| 2234 |
+
1,
|
| 2235 |
+
8,
|
| 2236 |
+
0,
|
| 2237 |
+
"LATENT"
|
| 2238 |
+
],
|
| 2239 |
+
[
|
| 2240 |
+
7,
|
| 2241 |
+
4,
|
| 2242 |
+
0,
|
| 2243 |
+
8,
|
| 2244 |
+
1,
|
| 2245 |
+
"VAE"
|
| 2246 |
+
],
|
| 2247 |
+
[
|
| 2248 |
+
8,
|
| 2249 |
+
26,
|
| 2250 |
+
0,
|
| 2251 |
+
10,
|
| 2252 |
+
0,
|
| 2253 |
+
"LATENT"
|
| 2254 |
+
],
|
| 2255 |
+
[
|
| 2256 |
+
9,
|
| 2257 |
+
35,
|
| 2258 |
+
1,
|
| 2259 |
+
10,
|
| 2260 |
+
1,
|
| 2261 |
+
"LATENT"
|
| 2262 |
+
],
|
| 2263 |
+
[
|
| 2264 |
+
10,
|
| 2265 |
+
15,
|
| 2266 |
+
0,
|
| 2267 |
+
11,
|
| 2268 |
+
0,
|
| 2269 |
+
"CLIP"
|
| 2270 |
+
],
|
| 2271 |
+
[
|
| 2272 |
+
11,
|
| 2273 |
+
3,
|
| 2274 |
+
0,
|
| 2275 |
+
11,
|
| 2276 |
+
1,
|
| 2277 |
+
"VAE"
|
| 2278 |
+
],
|
| 2279 |
+
[
|
| 2280 |
+
12,
|
| 2281 |
+
4,
|
| 2282 |
+
0,
|
| 2283 |
+
11,
|
| 2284 |
+
2,
|
| 2285 |
+
"VAE"
|
| 2286 |
+
],
|
| 2287 |
+
[
|
| 2288 |
+
13,
|
| 2289 |
+
9,
|
| 2290 |
+
0,
|
| 2291 |
+
11,
|
| 2292 |
+
3,
|
| 2293 |
+
"IMAGE"
|
| 2294 |
+
],
|
| 2295 |
+
[
|
| 2296 |
+
16,
|
| 2297 |
+
37,
|
| 2298 |
+
0,
|
| 2299 |
+
12,
|
| 2300 |
+
0,
|
| 2301 |
+
"MODEL"
|
| 2302 |
+
],
|
| 2303 |
+
[
|
| 2304 |
+
17,
|
| 2305 |
+
19,
|
| 2306 |
+
1,
|
| 2307 |
+
12,
|
| 2308 |
+
2,
|
| 2309 |
+
"INT"
|
| 2310 |
+
],
|
| 2311 |
+
[
|
| 2312 |
+
18,
|
| 2313 |
+
24,
|
| 2314 |
+
0,
|
| 2315 |
+
13,
|
| 2316 |
+
0,
|
| 2317 |
+
"SIGMAS"
|
| 2318 |
+
],
|
| 2319 |
+
[
|
| 2320 |
+
19,
|
| 2321 |
+
16,
|
| 2322 |
+
0,
|
| 2323 |
+
14,
|
| 2324 |
+
0,
|
| 2325 |
+
"LATENT"
|
| 2326 |
+
],
|
| 2327 |
+
[
|
| 2328 |
+
20,
|
| 2329 |
+
4,
|
| 2330 |
+
0,
|
| 2331 |
+
14,
|
| 2332 |
+
1,
|
| 2333 |
+
"VAE"
|
| 2334 |
+
],
|
| 2335 |
+
[
|
| 2336 |
+
21,
|
| 2337 |
+
31,
|
| 2338 |
+
0,
|
| 2339 |
+
16,
|
| 2340 |
+
0,
|
| 2341 |
+
"NOISE"
|
| 2342 |
+
],
|
| 2343 |
+
[
|
| 2344 |
+
22,
|
| 2345 |
+
32,
|
| 2346 |
+
0,
|
| 2347 |
+
16,
|
| 2348 |
+
1,
|
| 2349 |
+
"GUIDER"
|
| 2350 |
+
],
|
| 2351 |
+
[
|
| 2352 |
+
23,
|
| 2353 |
+
18,
|
| 2354 |
+
0,
|
| 2355 |
+
16,
|
| 2356 |
+
2,
|
| 2357 |
+
"SAMPLER"
|
| 2358 |
+
],
|
| 2359 |
+
[
|
| 2360 |
+
24,
|
| 2361 |
+
33,
|
| 2362 |
+
0,
|
| 2363 |
+
16,
|
| 2364 |
+
3,
|
| 2365 |
+
"SIGMAS"
|
| 2366 |
+
],
|
| 2367 |
+
[
|
| 2368 |
+
25,
|
| 2369 |
+
10,
|
| 2370 |
+
0,
|
| 2371 |
+
16,
|
| 2372 |
+
4,
|
| 2373 |
+
"LATENT"
|
| 2374 |
+
],
|
| 2375 |
+
[
|
| 2376 |
+
26,
|
| 2377 |
+
17,
|
| 2378 |
+
0,
|
| 2379 |
+
19,
|
| 2380 |
+
0,
|
| 2381 |
+
"FLOAT"
|
| 2382 |
+
],
|
| 2383 |
+
[
|
| 2384 |
+
27,
|
| 2385 |
+
31,
|
| 2386 |
+
0,
|
| 2387 |
+
21,
|
| 2388 |
+
0,
|
| 2389 |
+
"NOISE"
|
| 2390 |
+
],
|
| 2391 |
+
[
|
| 2392 |
+
28,
|
| 2393 |
+
29,
|
| 2394 |
+
0,
|
| 2395 |
+
21,
|
| 2396 |
+
1,
|
| 2397 |
+
"GUIDER"
|
| 2398 |
+
],
|
| 2399 |
+
[
|
| 2400 |
+
29,
|
| 2401 |
+
18,
|
| 2402 |
+
0,
|
| 2403 |
+
21,
|
| 2404 |
+
2,
|
| 2405 |
+
"SAMPLER"
|
| 2406 |
+
],
|
| 2407 |
+
[
|
| 2408 |
+
30,
|
| 2409 |
+
13,
|
| 2410 |
+
0,
|
| 2411 |
+
21,
|
| 2412 |
+
3,
|
| 2413 |
+
"SIGMAS"
|
| 2414 |
+
],
|
| 2415 |
+
[
|
| 2416 |
+
31,
|
| 2417 |
+
11,
|
| 2418 |
+
1,
|
| 2419 |
+
21,
|
| 2420 |
+
4,
|
| 2421 |
+
"LATENT"
|
| 2422 |
+
],
|
| 2423 |
+
[
|
| 2424 |
+
32,
|
| 2425 |
+
30,
|
| 2426 |
+
0,
|
| 2427 |
+
24,
|
| 2428 |
+
0,
|
| 2429 |
+
"MODEL"
|
| 2430 |
+
],
|
| 2431 |
+
[
|
| 2432 |
+
33,
|
| 2433 |
+
16,
|
| 2434 |
+
0,
|
| 2435 |
+
25,
|
| 2436 |
+
0,
|
| 2437 |
+
"LATENT"
|
| 2438 |
+
],
|
| 2439 |
+
[
|
| 2440 |
+
34,
|
| 2441 |
+
3,
|
| 2442 |
+
0,
|
| 2443 |
+
25,
|
| 2444 |
+
1,
|
| 2445 |
+
"VAE"
|
| 2446 |
+
],
|
| 2447 |
+
[
|
| 2448 |
+
35,
|
| 2449 |
+
35,
|
| 2450 |
+
0,
|
| 2451 |
+
26,
|
| 2452 |
+
0,
|
| 2453 |
+
"LATENT"
|
| 2454 |
+
],
|
| 2455 |
+
[
|
| 2456 |
+
36,
|
| 2457 |
+
23,
|
| 2458 |
+
0,
|
| 2459 |
+
26,
|
| 2460 |
+
1,
|
| 2461 |
+
"FLOAT"
|
| 2462 |
+
],
|
| 2463 |
+
[
|
| 2464 |
+
37,
|
| 2465 |
+
12,
|
| 2466 |
+
0,
|
| 2467 |
+
29,
|
| 2468 |
+
0,
|
| 2469 |
+
"MODEL"
|
| 2470 |
+
],
|
| 2471 |
+
[
|
| 2472 |
+
38,
|
| 2473 |
+
11,
|
| 2474 |
+
0,
|
| 2475 |
+
29,
|
| 2476 |
+
1,
|
| 2477 |
+
"CONDITIONING"
|
| 2478 |
+
],
|
| 2479 |
+
[
|
| 2480 |
+
39,
|
| 2481 |
+
37,
|
| 2482 |
+
0,
|
| 2483 |
+
32,
|
| 2484 |
+
0,
|
| 2485 |
+
"MODEL"
|
| 2486 |
+
],
|
| 2487 |
+
[
|
| 2488 |
+
40,
|
| 2489 |
+
11,
|
| 2490 |
+
0,
|
| 2491 |
+
32,
|
| 2492 |
+
1,
|
| 2493 |
+
"CONDITIONING"
|
| 2494 |
+
],
|
| 2495 |
+
[
|
| 2496 |
+
41,
|
| 2497 |
+
25,
|
| 2498 |
+
0,
|
| 2499 |
+
34,
|
| 2500 |
+
0,
|
| 2501 |
+
"IMAGE"
|
| 2502 |
+
],
|
| 2503 |
+
[
|
| 2504 |
+
42,
|
| 2505 |
+
14,
|
| 2506 |
+
0,
|
| 2507 |
+
34,
|
| 2508 |
+
1,
|
| 2509 |
+
"AUDIO"
|
| 2510 |
+
],
|
| 2511 |
+
[
|
| 2512 |
+
43,
|
| 2513 |
+
21,
|
| 2514 |
+
1,
|
| 2515 |
+
35,
|
| 2516 |
+
0,
|
| 2517 |
+
"LATENT"
|
| 2518 |
+
],
|
| 2519 |
+
[
|
| 2520 |
+
44,
|
| 2521 |
+
30,
|
| 2522 |
+
0,
|
| 2523 |
+
36,
|
| 2524 |
+
0,
|
| 2525 |
+
"MODEL"
|
| 2526 |
+
],
|
| 2527 |
+
[
|
| 2528 |
+
45,
|
| 2529 |
+
38,
|
| 2530 |
+
0,
|
| 2531 |
+
37,
|
| 2532 |
+
0,
|
| 2533 |
+
"MODEL"
|
| 2534 |
+
],
|
| 2535 |
+
[
|
| 2536 |
+
46,
|
| 2537 |
+
36,
|
| 2538 |
+
0,
|
| 2539 |
+
38,
|
| 2540 |
+
0,
|
| 2541 |
+
"MODEL"
|
| 2542 |
+
],
|
| 2543 |
+
[
|
| 2544 |
+
47,
|
| 2545 |
+
20,
|
| 2546 |
+
0,
|
| 2547 |
+
11,
|
| 2548 |
+
8,
|
| 2549 |
+
"INT"
|
| 2550 |
+
],
|
| 2551 |
+
[
|
| 2552 |
+
48,
|
| 2553 |
+
20,
|
| 2554 |
+
1,
|
| 2555 |
+
11,
|
| 2556 |
+
9,
|
| 2557 |
+
"INT"
|
| 2558 |
+
],
|
| 2559 |
+
[
|
| 2560 |
+
49,
|
| 2561 |
+
19,
|
| 2562 |
+
1,
|
| 2563 |
+
11,
|
| 2564 |
+
10,
|
| 2565 |
+
"INT"
|
| 2566 |
+
]
|
| 2567 |
+
],
|
| 2568 |
+
"groups": [
|
| 2569 |
+
{
|
| 2570 |
+
"id": 1,
|
| 2571 |
+
"title": "User Inputs",
|
| 2572 |
+
"bounding": [
|
| 2573 |
+
-335.4580064947545,
|
| 2574 |
+
5285.5407913785275,
|
| 2575 |
+
1208.9503194675362,
|
| 2576 |
+
834.450029042503
|
| 2577 |
+
],
|
| 2578 |
+
"color": "#3f789e",
|
| 2579 |
+
"flags": {}
|
| 2580 |
+
},
|
| 2581 |
+
{
|
| 2582 |
+
"id": 2,
|
| 2583 |
+
"title": "Models",
|
| 2584 |
+
"bounding": [
|
| 2585 |
+
-336.15299615894105,
|
| 2586 |
+
4593.880667348764,
|
| 2587 |
+
700,
|
| 2588 |
+
674
|
| 2589 |
+
],
|
| 2590 |
+
"color": "#3f789e",
|
| 2591 |
+
"flags": {}
|
| 2592 |
+
},
|
| 2593 |
+
{
|
| 2594 |
+
"id": 3,
|
| 2595 |
+
"title": "Sampling",
|
| 2596 |
+
"bounding": [
|
| 2597 |
+
1247.847003841059,
|
| 2598 |
+
4593.880667348764,
|
| 2599 |
+
659,
|
| 2600 |
+
674
|
| 2601 |
+
],
|
| 2602 |
+
"color": "#3f789e",
|
| 2603 |
+
"flags": {}
|
| 2604 |
+
},
|
| 2605 |
+
{
|
| 2606 |
+
"id": 4,
|
| 2607 |
+
"title": "Conditioning",
|
| 2608 |
+
"bounding": [
|
| 2609 |
+
381.84700384105895,
|
| 2610 |
+
4593.880667348764,
|
| 2611 |
+
480,
|
| 2612 |
+
674
|
| 2613 |
+
],
|
| 2614 |
+
"color": "#3f789e",
|
| 2615 |
+
"flags": {}
|
| 2616 |
+
},
|
| 2617 |
+
{
|
| 2618 |
+
"id": 5,
|
| 2619 |
+
"title": "Two-stage sampling upscaling - Decoding and create video",
|
| 2620 |
+
"bounding": [
|
| 2621 |
+
2310.3892605227284,
|
| 2622 |
+
4593.880667348764,
|
| 2623 |
+
948.4270012610004,
|
| 2624 |
+
674.0547621542864
|
| 2625 |
+
],
|
| 2626 |
+
"color": "#3f789e",
|
| 2627 |
+
"flags": {}
|
| 2628 |
+
},
|
| 2629 |
+
{
|
| 2630 |
+
"id": 6,
|
| 2631 |
+
"title": "H3 Latent Upscaler",
|
| 2632 |
+
"bounding": [
|
| 2633 |
+
1924.847003841059,
|
| 2634 |
+
4593.880667348764,
|
| 2635 |
+
368,
|
| 2636 |
+
674
|
| 2637 |
+
],
|
| 2638 |
+
"color": "#3f789e",
|
| 2639 |
+
"flags": {}
|
| 2640 |
+
},
|
| 2641 |
+
{
|
| 2642 |
+
"id": 7,
|
| 2643 |
+
"title": "preview",
|
| 2644 |
+
"bounding": [
|
| 2645 |
+
879.847003841059,
|
| 2646 |
+
4593.880667348764,
|
| 2647 |
+
350,
|
| 2648 |
+
674
|
| 2649 |
+
],
|
| 2650 |
+
"color": "#3f789e",
|
| 2651 |
+
"flags": {}
|
| 2652 |
+
}
|
| 2653 |
+
],
|
| 2654 |
+
"config": {},
|
| 2655 |
+
"extra": {
|
| 2656 |
+
"ue_links": [],
|
| 2657 |
+
"ds": {
|
| 2658 |
+
"scale": 0.6316771145038458,
|
| 2659 |
+
"offset": [
|
| 2660 |
+
2201.5181287178216,
|
| 2661 |
+
-4262.109523178327
|
| 2662 |
+
]
|
| 2663 |
+
},
|
| 2664 |
+
"frontendVersion": "1.49.6",
|
| 2665 |
+
"VHS_latentpreview": false,
|
| 2666 |
+
"VHS_latentpreviewrate": 0,
|
| 2667 |
+
"VHS_MetadataImage": true,
|
| 2668 |
+
"VHS_KeepIntermediate": true
|
| 2669 |
+
},
|
| 2670 |
+
"version": 0.4
|
| 2671 |
+
}
|
h3_bundle/__init__.py
ADDED
|
@@ -0,0 +1,475 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
H3 Bundle — sauvegarde et rechargement de latents AV + conditioning MiniMax H3.
|
| 3 |
+
|
| 4 |
+
Objectif : découpler la passe de génération (locale) de la passe d'upscaling
|
| 5 |
+
(instance Vast.ai), sans avoir à réimporter les images de référence ni le
|
| 6 |
+
CLIP qwen3vl 32B.
|
| 7 |
+
|
| 8 |
+
Installation :
|
| 9 |
+
cp -r h3_bundle /workspace/ComfyUI/custom_nodes/
|
| 10 |
+
(idem en local dans ComfyUI/custom_nodes/)
|
| 11 |
+
"""
|
| 12 |
+
|
| 13 |
+
import os
|
| 14 |
+
import json
|
| 15 |
+
import time
|
| 16 |
+
import shutil
|
| 17 |
+
import torch
|
| 18 |
+
|
| 19 |
+
import folder_paths
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
# --------------------------------------------------------------------------
|
| 23 |
+
# helpers
|
| 24 |
+
# --------------------------------------------------------------------------
|
| 25 |
+
|
| 26 |
+
def _to_cpu(obj):
|
| 27 |
+
"""Descend récursivement la structure et rapatrie tous les tenseurs en CPU."""
|
| 28 |
+
if torch.is_tensor(obj):
|
| 29 |
+
return obj.detach().cpu()
|
| 30 |
+
if isinstance(obj, dict):
|
| 31 |
+
return {k: _to_cpu(v) for k, v in obj.items()}
|
| 32 |
+
if isinstance(obj, (list, tuple)):
|
| 33 |
+
return type(obj)(_to_cpu(v) for v in obj)
|
| 34 |
+
return obj
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def _shapes(obj):
|
| 38 |
+
"""Cartographie des shapes/dtypes — c'est ce qui te sert à câbler l'amont."""
|
| 39 |
+
if torch.is_tensor(obj):
|
| 40 |
+
return f"Tensor{tuple(obj.shape)} {str(obj.dtype).replace('torch.', '')}"
|
| 41 |
+
if isinstance(obj, dict):
|
| 42 |
+
return {k: _shapes(v) for k, v in obj.items()}
|
| 43 |
+
if isinstance(obj, (list, tuple)):
|
| 44 |
+
return [_shapes(v) for v in obj]
|
| 45 |
+
if isinstance(obj, (int, float, str, bool, type(None))):
|
| 46 |
+
return repr(obj)
|
| 47 |
+
return type(obj).__name__
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def _dir_size(path):
|
| 51 |
+
total = 0
|
| 52 |
+
for root, _, files in os.walk(path):
|
| 53 |
+
for f in files:
|
| 54 |
+
total += os.path.getsize(os.path.join(root, f))
|
| 55 |
+
return total
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
def _human(n):
|
| 59 |
+
for unit in ("B", "KB", "MB", "GB"):
|
| 60 |
+
if n < 1024:
|
| 61 |
+
return f"{n:.1f} {unit}"
|
| 62 |
+
n /= 1024
|
| 63 |
+
return f"{n:.1f} TB"
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
def _bundles_root():
|
| 67 |
+
return os.path.join(folder_paths.get_output_directory(), "h3_bundles")
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
# --------------------------------------------------------------------------
|
| 71 |
+
# preview
|
| 72 |
+
# --------------------------------------------------------------------------
|
| 73 |
+
|
| 74 |
+
def _tensor_to_pil(frame, max_width=512):
|
| 75 |
+
"""[H,W,C] float 0-1 -> PIL, redimensionné pour rester léger."""
|
| 76 |
+
from PIL import Image
|
| 77 |
+
import numpy as np
|
| 78 |
+
arr = (frame.cpu().numpy() * 255.0).clip(0, 255).astype(np.uint8)
|
| 79 |
+
img = Image.fromarray(arr)
|
| 80 |
+
if img.width > max_width:
|
| 81 |
+
ratio = max_width / img.width
|
| 82 |
+
img = img.resize((max_width, int(img.height * ratio)), Image.LANCZOS)
|
| 83 |
+
return img
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
def _sample_frames(images, count):
|
| 87 |
+
"""Échantillonne count frames réparties sur toute la séquence."""
|
| 88 |
+
total = images.shape[0]
|
| 89 |
+
if total <= count:
|
| 90 |
+
return list(range(total))
|
| 91 |
+
step = (total - 1) / (count - 1) if count > 1 else 1
|
| 92 |
+
return [min(total - 1, int(round(i * step))) for i in range(count)]
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
def _write_wav(audio, path):
|
| 96 |
+
"""AUDIO ComfyUI ({waveform:[B,C,S], sample_rate}) -> wav 16 bits."""
|
| 97 |
+
import wave
|
| 98 |
+
import numpy as np
|
| 99 |
+
wav = audio["waveform"]
|
| 100 |
+
if wav.dim() == 3:
|
| 101 |
+
wav = wav[0]
|
| 102 |
+
data = wav.transpose(0, 1).cpu().numpy()
|
| 103 |
+
data = (data.clip(-1, 1) * 32767).astype(np.int16)
|
| 104 |
+
with wave.open(path, "wb") as fh:
|
| 105 |
+
fh.setnchannels(data.shape[1])
|
| 106 |
+
fh.setsampwidth(2)
|
| 107 |
+
fh.setframerate(int(audio["sample_rate"]))
|
| 108 |
+
fh.writeframes(data.tobytes())
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
def _encode_mp4(images, fps, out_path, audio=None):
|
| 112 |
+
"""Encode la séquence en mp4 via ffmpeg. Retourne True si ça a marché."""
|
| 113 |
+
import subprocess
|
| 114 |
+
import tempfile
|
| 115 |
+
|
| 116 |
+
if shutil.which("ffmpeg") is None:
|
| 117 |
+
print("[SaveH3Bundle] ffmpeg introuvable, preview mp4 ignorée.")
|
| 118 |
+
return False
|
| 119 |
+
|
| 120 |
+
tmp = tempfile.mkdtemp(prefix="h3prev_")
|
| 121 |
+
try:
|
| 122 |
+
for i in range(images.shape[0]):
|
| 123 |
+
_tensor_to_pil(images[i], max_width=720).save(
|
| 124 |
+
os.path.join(tmp, f"{i:06d}.png"))
|
| 125 |
+
|
| 126 |
+
cmd = ["ffmpeg", "-y", "-loglevel", "error",
|
| 127 |
+
"-framerate", str(fps), "-i", os.path.join(tmp, "%06d.png")]
|
| 128 |
+
|
| 129 |
+
wav_path = None
|
| 130 |
+
if audio is not None:
|
| 131 |
+
wav_path = os.path.join(tmp, "audio.wav")
|
| 132 |
+
try:
|
| 133 |
+
_write_wav(audio, wav_path)
|
| 134 |
+
cmd += ["-i", wav_path]
|
| 135 |
+
except Exception as exc:
|
| 136 |
+
print(f"[SaveH3Bundle] audio preview ignoré : {exc}")
|
| 137 |
+
wav_path = None
|
| 138 |
+
|
| 139 |
+
cmd += ["-c:v", "libx264", "-pix_fmt", "yuv420p", "-crf", "20"]
|
| 140 |
+
if wav_path:
|
| 141 |
+
cmd += ["-c:a", "aac", "-shortest"]
|
| 142 |
+
cmd.append(out_path)
|
| 143 |
+
|
| 144 |
+
subprocess.run(cmd, check=True)
|
| 145 |
+
return True
|
| 146 |
+
except Exception as exc:
|
| 147 |
+
print(f"[SaveH3Bundle] échec encodage preview : {exc}")
|
| 148 |
+
return False
|
| 149 |
+
finally:
|
| 150 |
+
shutil.rmtree(tmp, ignore_errors=True)
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
# --------------------------------------------------------------------------
|
| 154 |
+
# SAVE
|
| 155 |
+
# --------------------------------------------------------------------------
|
| 156 |
+
|
| 157 |
+
class SaveH3Bundle:
|
| 158 |
+
"""
|
| 159 |
+
Regroupe tout ce dont la passe d'upscale a besoin dans un dossier unique.
|
| 160 |
+
|
| 161 |
+
Le latent MiniMax H3 porte déjà vidéo + audio dans sa structure nested,
|
| 162 |
+
donc un seul torch.save suffit — contrairement au SaveLatent natif qui
|
| 163 |
+
ne sérialise que la clé `samples`.
|
| 164 |
+
"""
|
| 165 |
+
|
| 166 |
+
@classmethod
|
| 167 |
+
def INPUT_TYPES(cls):
|
| 168 |
+
return {
|
| 169 |
+
"required": {
|
| 170 |
+
"latent": ("LATENT",),
|
| 171 |
+
"bundle_name": ("STRING", {"default": "run"}),
|
| 172 |
+
"mode": (["save", "replace_last", "skip"],),
|
| 173 |
+
},
|
| 174 |
+
"optional": {
|
| 175 |
+
"conditioning": ("CONDITIONING",),
|
| 176 |
+
"video": ("VIDEO",),
|
| 177 |
+
"video_path": ("STRING", {"default": ""}),
|
| 178 |
+
"images": ("IMAGE",),
|
| 179 |
+
"audio": ("AUDIO",),
|
| 180 |
+
"preview_frames": ("INT", {"default": 6, "min": 0, "max": 24}),
|
| 181 |
+
"preview_mp4": ("BOOLEAN", {"default": True}),
|
| 182 |
+
"keep_last_n": ("INT", {"default": 0, "min": 0, "max": 999}),
|
| 183 |
+
"width": ("INT", {"default": 0, "min": 0, "max": 16384}),
|
| 184 |
+
"height": ("INT", {"default": 0, "min": 0, "max": 16384}),
|
| 185 |
+
"seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}),
|
| 186 |
+
"fps": ("INT", {"default": 24, "min": 1, "max": 240}),
|
| 187 |
+
"generation_seconds": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 600.0}),
|
| 188 |
+
"notes": ("STRING", {"default": "", "multiline": True}),
|
| 189 |
+
},
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
RETURN_TYPES = ("STRING",)
|
| 193 |
+
RETURN_NAMES = ("bundle_path",)
|
| 194 |
+
FUNCTION = "save"
|
| 195 |
+
OUTPUT_NODE = True
|
| 196 |
+
CATEGORY = "vast/h3"
|
| 197 |
+
|
| 198 |
+
@staticmethod
|
| 199 |
+
def _existing_bundles():
|
| 200 |
+
"""Bundles valides, du plus ancien au plus récent."""
|
| 201 |
+
root = _bundles_root()
|
| 202 |
+
if not os.path.isdir(root):
|
| 203 |
+
return []
|
| 204 |
+
found = []
|
| 205 |
+
for name in sorted(os.listdir(root)):
|
| 206 |
+
path = os.path.join(root, name)
|
| 207 |
+
if os.path.isdir(path) and os.path.isfile(os.path.join(path, "latent.pt")):
|
| 208 |
+
found.append(path)
|
| 209 |
+
return found
|
| 210 |
+
|
| 211 |
+
@staticmethod
|
| 212 |
+
def _delete_bundle(path):
|
| 213 |
+
"""Suppression volontairement paranoïaque : jamais hors de h3_bundles,
|
| 214 |
+
et uniquement un dossier qui contient bien un latent.pt."""
|
| 215 |
+
root = os.path.abspath(_bundles_root())
|
| 216 |
+
target = os.path.abspath(path)
|
| 217 |
+
if not target.startswith(root + os.sep):
|
| 218 |
+
print(f"[SaveH3Bundle] REFUS suppression hors bundles : {target}")
|
| 219 |
+
return False
|
| 220 |
+
if not os.path.isfile(os.path.join(target, "latent.pt")):
|
| 221 |
+
print(f"[SaveH3Bundle] REFUS suppression, pas un bundle : {target}")
|
| 222 |
+
return False
|
| 223 |
+
shutil.rmtree(target)
|
| 224 |
+
print(f"[SaveH3Bundle] supprimé : {os.path.basename(target)}")
|
| 225 |
+
return True
|
| 226 |
+
|
| 227 |
+
def save(self, latent, bundle_name, mode="save", conditioning=None,
|
| 228 |
+
video=None, video_path="", images=None, audio=None,
|
| 229 |
+
preview_frames=6, preview_mp4=True,
|
| 230 |
+
keep_last_n=0, width=0, height=0, seed=0, fps=24,
|
| 231 |
+
generation_seconds=0.0, notes=""):
|
| 232 |
+
|
| 233 |
+
if mode == "skip":
|
| 234 |
+
print("[SaveH3Bundle] mode 'skip' — rien n'est écrit sur le disque.")
|
| 235 |
+
return {"ui": {"text": ["skip"]}, "result": ("",)}
|
| 236 |
+
|
| 237 |
+
if mode == "replace_last":
|
| 238 |
+
existing = self._existing_bundles()
|
| 239 |
+
if existing:
|
| 240 |
+
self._delete_bundle(existing[-1])
|
| 241 |
+
else:
|
| 242 |
+
print("[SaveH3Bundle] 'replace_last' : aucun bundle à supprimer.")
|
| 243 |
+
|
| 244 |
+
safe = "".join(c for c in bundle_name if c.isalnum() or c in "-_") or "run"
|
| 245 |
+
stamp = time.strftime("%Y%m%d_%H%M%S")
|
| 246 |
+
root = os.path.join(_bundles_root(), f"{safe}_{stamp}")
|
| 247 |
+
os.makedirs(root, exist_ok=True)
|
| 248 |
+
|
| 249 |
+
manifest = {
|
| 250 |
+
"bundle_name": safe,
|
| 251 |
+
"created": stamp,
|
| 252 |
+
"width": width,
|
| 253 |
+
"height": height,
|
| 254 |
+
"seed": seed,
|
| 255 |
+
"fps": fps,
|
| 256 |
+
"generation_seconds": generation_seconds,
|
| 257 |
+
"notes": notes,
|
| 258 |
+
"has_conditioning": conditioning is not None,
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
torch.save(_to_cpu(latent), os.path.join(root, "latent.pt"))
|
| 262 |
+
manifest["latent_structure"] = _shapes(latent)
|
| 263 |
+
|
| 264 |
+
if conditioning is not None:
|
| 265 |
+
torch.save(_to_cpu(conditioning), os.path.join(root, "cond.pt"))
|
| 266 |
+
manifest["cond_structure"] = _shapes(conditioning)
|
| 267 |
+
|
| 268 |
+
manifest["files"] = {
|
| 269 |
+
f: _human(os.path.getsize(os.path.join(root, f)))
|
| 270 |
+
for f in sorted(os.listdir(root))
|
| 271 |
+
}
|
| 272 |
+
manifest["total_size"] = _human(_dir_size(root))
|
| 273 |
+
|
| 274 |
+
with open(os.path.join(root, "manifest.json"), "w") as fh:
|
| 275 |
+
json.dump(manifest, fh, indent=2, default=str)
|
| 276 |
+
|
| 277 |
+
print("\n" + "=" * 66)
|
| 278 |
+
print(f"[SaveH3Bundle] {root}")
|
| 279 |
+
print(f" total : {manifest['total_size']}")
|
| 280 |
+
print(" structure latent :")
|
| 281 |
+
print(json.dumps(manifest["latent_structure"], indent=4, default=str))
|
| 282 |
+
if conditioning is not None:
|
| 283 |
+
print(" structure conditioning :")
|
| 284 |
+
print(json.dumps(manifest["cond_structure"], indent=4, default=str))
|
| 285 |
+
print("=" * 66 + "\n")
|
| 286 |
+
|
| 287 |
+
# ---- preview ----------------------------------------------------
|
| 288 |
+
ui_images = []
|
| 289 |
+
dest_mp4 = os.path.join(root, "preview.mp4")
|
| 290 |
+
got_video = False
|
| 291 |
+
|
| 292 |
+
# 1. objet VIDEO natif (sortie de CreateVideo) — écriture directe
|
| 293 |
+
if video is not None:
|
| 294 |
+
try:
|
| 295 |
+
video.save_to(dest_mp4)
|
| 296 |
+
got_video = True
|
| 297 |
+
print(f"[SaveH3Bundle] vidéo écrite : {dest_mp4}")
|
| 298 |
+
except Exception as exc:
|
| 299 |
+
print(f"[SaveH3Bundle] save_to a échoué ({exc}), on tente autre chose.")
|
| 300 |
+
|
| 301 |
+
# 2. chemin d'un fichier déjà écrit par un autre node — simple copie
|
| 302 |
+
if not got_video and video_path:
|
| 303 |
+
src = video_path
|
| 304 |
+
if not os.path.isabs(src):
|
| 305 |
+
src = os.path.join(folder_paths.get_output_directory(), src)
|
| 306 |
+
if os.path.isfile(src):
|
| 307 |
+
shutil.copy2(src, os.path.join(root, os.path.basename(src)))
|
| 308 |
+
got_video = True
|
| 309 |
+
print(f"[SaveH3Bundle] vidéo copiée : {os.path.basename(src)}")
|
| 310 |
+
else:
|
| 311 |
+
print(f"[SaveH3Bundle] video_path introuvable : {src}")
|
| 312 |
+
|
| 313 |
+
# 3. dernier recours — ré-encodage depuis les frames
|
| 314 |
+
if not got_video and preview_mp4 and images is not None and images.shape[0] > 0:
|
| 315 |
+
if _encode_mp4(images, fps, dest_mp4, audio=audio):
|
| 316 |
+
got_video = True
|
| 317 |
+
|
| 318 |
+
manifest["has_video"] = got_video
|
| 319 |
+
|
| 320 |
+
if images is not None and images.shape[0] > 0 and preview_frames > 0:
|
| 321 |
+
sub = os.path.join("h3_bundles", os.path.basename(root))
|
| 322 |
+
for n, idx in enumerate(_sample_frames(images, preview_frames)):
|
| 323 |
+
fname = f"preview_{n:02d}.png"
|
| 324 |
+
_tensor_to_pil(images[idx]).save(os.path.join(root, fname))
|
| 325 |
+
ui_images.append({
|
| 326 |
+
"filename": fname,
|
| 327 |
+
"subfolder": sub,
|
| 328 |
+
"type": "output",
|
| 329 |
+
})
|
| 330 |
+
|
| 331 |
+
manifest["files"] = {
|
| 332 |
+
f: _human(os.path.getsize(os.path.join(root, f)))
|
| 333 |
+
for f in sorted(os.listdir(root)) if os.path.isfile(os.path.join(root, f))
|
| 334 |
+
}
|
| 335 |
+
manifest["total_size"] = _human(_dir_size(root))
|
| 336 |
+
with open(os.path.join(root, "manifest.json"), "w") as fh:
|
| 337 |
+
json.dump(manifest, fh, indent=2, default=str)
|
| 338 |
+
|
| 339 |
+
if keep_last_n > 0:
|
| 340 |
+
everything = self._existing_bundles()
|
| 341 |
+
for old in everything[:-keep_last_n]:
|
| 342 |
+
self._delete_bundle(old)
|
| 343 |
+
|
| 344 |
+
return {"ui": {"images": ui_images, "text": [root]}, "result": (root,)}
|
| 345 |
+
|
| 346 |
+
|
| 347 |
+
# --------------------------------------------------------------------------
|
| 348 |
+
# LOAD
|
| 349 |
+
# --------------------------------------------------------------------------
|
| 350 |
+
|
| 351 |
+
class LoadH3BundleBatch:
|
| 352 |
+
"""
|
| 353 |
+
Recharge un bundle. ComfyUI n'a pas de boucle interne : le batch séquentiel
|
| 354 |
+
se fait en empilant N runs dans la queue.
|
| 355 |
+
|
| 356 |
+
mode = "index" -> tu choisis le bundle à la main (debug / rerun)
|
| 357 |
+
mode = "next_pending" -> avance tout seul dans le dossier, un bundle par
|
| 358 |
+
run. Tu cliques Queue N fois (ou tu mets le batch
|
| 359 |
+
count à N) et il déroule la liste.
|
| 360 |
+
|
| 361 |
+
Un bundle est considéré comme traité si un fichier de sortie portant son
|
| 362 |
+
nom existe déjà dans output/<output_subdir>/. Pas de marqueur : un run qui
|
| 363 |
+
plante est repris automatiquement au run suivant.
|
| 364 |
+
"""
|
| 365 |
+
|
| 366 |
+
@classmethod
|
| 367 |
+
def INPUT_TYPES(cls):
|
| 368 |
+
return {
|
| 369 |
+
"required": {
|
| 370 |
+
"bundles_dir": ("STRING", {"default": "h3_bundles"}),
|
| 371 |
+
"mode": (["next_pending", "index"],),
|
| 372 |
+
"index": ("INT", {"default": 0, "min": 0, "max": 9999}),
|
| 373 |
+
},
|
| 374 |
+
"optional": {
|
| 375 |
+
"output_subdir": ("STRING", {"default": "minimax-h3"}),
|
| 376 |
+
},
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
RETURN_TYPES = ("LATENT", "CONDITIONING", "STRING", "INT", "INT", "INT")
|
| 380 |
+
RETURN_NAMES = ("latent", "conditioning", "filename_prefix",
|
| 381 |
+
"width", "height", "remaining")
|
| 382 |
+
FUNCTION = "load"
|
| 383 |
+
CATEGORY = "vast/h3"
|
| 384 |
+
|
| 385 |
+
@classmethod
|
| 386 |
+
def IS_CHANGED(cls, mode, **kwargs):
|
| 387 |
+
# en next_pending l'état change à chaque run : on casse le cache
|
| 388 |
+
if mode == "next_pending":
|
| 389 |
+
return float("nan")
|
| 390 |
+
return json.dumps(kwargs, sort_keys=True, default=str)
|
| 391 |
+
|
| 392 |
+
def _resolve_dir(self, bundles_dir):
|
| 393 |
+
if os.path.isabs(bundles_dir):
|
| 394 |
+
return bundles_dir
|
| 395 |
+
for base in (folder_paths.get_output_directory(),
|
| 396 |
+
folder_paths.get_input_directory()):
|
| 397 |
+
cand = os.path.join(base, bundles_dir)
|
| 398 |
+
if os.path.isdir(cand):
|
| 399 |
+
return cand
|
| 400 |
+
return os.path.join(folder_paths.get_output_directory(), bundles_dir)
|
| 401 |
+
|
| 402 |
+
def _list_bundles(self, root):
|
| 403 |
+
if not os.path.isdir(root):
|
| 404 |
+
raise FileNotFoundError(f"Dossier de bundles introuvable : {root}")
|
| 405 |
+
out = []
|
| 406 |
+
for name in sorted(os.listdir(root)):
|
| 407 |
+
path = os.path.join(root, name)
|
| 408 |
+
if os.path.isdir(path) and os.path.isfile(os.path.join(path, "latent.pt")):
|
| 409 |
+
out.append(path)
|
| 410 |
+
if not out:
|
| 411 |
+
raise FileNotFoundError(f"Aucun bundle valide dans {root}")
|
| 412 |
+
return out
|
| 413 |
+
|
| 414 |
+
def _has_output(self, bundle_path, output_subdir):
|
| 415 |
+
"""Un bundle est traité si un fichier de sortie porte son nom."""
|
| 416 |
+
out_dir = os.path.join(folder_paths.get_output_directory(), output_subdir)
|
| 417 |
+
if not os.path.isdir(out_dir):
|
| 418 |
+
return False
|
| 419 |
+
name = os.path.basename(bundle_path)
|
| 420 |
+
return any(f.startswith(name) for f in os.listdir(out_dir))
|
| 421 |
+
|
| 422 |
+
def load(self, bundles_dir, mode, index, output_subdir="minimax-h3"):
|
| 423 |
+
root = self._resolve_dir(bundles_dir)
|
| 424 |
+
bundles = self._list_bundles(root)
|
| 425 |
+
|
| 426 |
+
if mode == "index":
|
| 427 |
+
if index >= len(bundles):
|
| 428 |
+
raise IndexError(f"index {index} hors bornes ({len(bundles)} bundles)")
|
| 429 |
+
target = bundles[index]
|
| 430 |
+
remaining = len(bundles) - index - 1
|
| 431 |
+
else:
|
| 432 |
+
pending = [b for b in bundles if not self._has_output(b, output_subdir)]
|
| 433 |
+
if not pending:
|
| 434 |
+
raise RuntimeError(
|
| 435 |
+
f"Les {len(bundles)} bundles de {root} ont déjà une sortie dans "
|
| 436 |
+
f"output/{output_subdir}/. Supprime les mp4 correspondants pour "
|
| 437 |
+
f"les relancer, ou passe en mode 'index'."
|
| 438 |
+
)
|
| 439 |
+
target = pending[0]
|
| 440 |
+
remaining = len(pending) - 1
|
| 441 |
+
|
| 442 |
+
latent = torch.load(os.path.join(target, "latent.pt"),
|
| 443 |
+
map_location="cpu", weights_only=False)
|
| 444 |
+
|
| 445 |
+
cond_file = os.path.join(target, "cond.pt")
|
| 446 |
+
conditioning = []
|
| 447 |
+
if os.path.isfile(cond_file):
|
| 448 |
+
conditioning = torch.load(cond_file, map_location="cpu", weights_only=False)
|
| 449 |
+
|
| 450 |
+
width = height = 0
|
| 451 |
+
manifest_file = os.path.join(target, "manifest.json")
|
| 452 |
+
if os.path.isfile(manifest_file):
|
| 453 |
+
with open(manifest_file) as fh:
|
| 454 |
+
m = json.load(fh)
|
| 455 |
+
width = int(m.get("width", 0) or 0)
|
| 456 |
+
height = int(m.get("height", 0) or 0)
|
| 457 |
+
|
| 458 |
+
name = os.path.basename(target)
|
| 459 |
+
prefix = f"minimax-h3/{name}_upscaled"
|
| 460 |
+
|
| 461 |
+
print(f"[LoadH3BundleBatch] {name} | cond={'oui' if conditioning else 'non'} "
|
| 462 |
+
f"| {width}x{height} | restants : {remaining}")
|
| 463 |
+
|
| 464 |
+
return (latent, conditioning, prefix, width, height, remaining)
|
| 465 |
+
|
| 466 |
+
|
| 467 |
+
NODE_CLASS_MAPPINGS = {
|
| 468 |
+
"SaveH3Bundle": SaveH3Bundle,
|
| 469 |
+
"LoadH3BundleBatch": LoadH3BundleBatch,
|
| 470 |
+
}
|
| 471 |
+
|
| 472 |
+
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 473 |
+
"SaveH3Bundle": "Save H3 Bundle (latent AV + cond)",
|
| 474 |
+
"LoadH3BundleBatch": "Load H3 Bundle (batch séquentiel)",
|
| 475 |
+
}
|
h3_bundle/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (25.9 kB). View file
|
|
|
note.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
https://github.com/Saganaki22/ComfyUI-VDN-H3
|
workflow/Bundle_h3.json
ADDED
|
@@ -0,0 +1,1978 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "159c3537-7c23-4c93-bd07-e5439b5c4017",
|
| 3 |
+
"revision": 0,
|
| 4 |
+
"last_node_id": 36,
|
| 5 |
+
"last_link_id": 38,
|
| 6 |
+
"nodes": [
|
| 7 |
+
{
|
| 8 |
+
"id": 1,
|
| 9 |
+
"type": "MinimaxH3LatentUpscaler3D",
|
| 10 |
+
"pos": [
|
| 11 |
+
3856.1660843903683,
|
| 12 |
+
5916.413832444967
|
| 13 |
+
],
|
| 14 |
+
"size": [
|
| 15 |
+
461.3766842951726,
|
| 16 |
+
226
|
| 17 |
+
],
|
| 18 |
+
"flags": {},
|
| 19 |
+
"order": 14,
|
| 20 |
+
"mode": 0,
|
| 21 |
+
"inputs": [
|
| 22 |
+
{
|
| 23 |
+
"name": "latent",
|
| 24 |
+
"type": "*",
|
| 25 |
+
"link": 18
|
| 26 |
+
}
|
| 27 |
+
],
|
| 28 |
+
"outputs": [
|
| 29 |
+
{
|
| 30 |
+
"name": "latent",
|
| 31 |
+
"type": "*",
|
| 32 |
+
"links": [
|
| 33 |
+
36
|
| 34 |
+
]
|
| 35 |
+
}
|
| 36 |
+
],
|
| 37 |
+
"properties": {
|
| 38 |
+
"aux_id": "LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler",
|
| 39 |
+
"ver": "d7c01b9011f2e8439493f6c02c29995a27df276f",
|
| 40 |
+
"Node name for S&R": "MinimaxH3LatentUpscaler3D",
|
| 41 |
+
"ue_properties": {
|
| 42 |
+
"widget_ue_connectable": {},
|
| 43 |
+
"input_ue_unconnectable": {},
|
| 44 |
+
"version": "7.5.1"
|
| 45 |
+
}
|
| 46 |
+
},
|
| 47 |
+
"widgets_values": [
|
| 48 |
+
"minimax_h3_latent_upscaler_3d_bf16.safetensors",
|
| 49 |
+
"scale by multiplier",
|
| 50 |
+
1.5,
|
| 51 |
+
32,
|
| 52 |
+
true,
|
| 53 |
+
true,
|
| 54 |
+
"cuda",
|
| 55 |
+
"fp16"
|
| 56 |
+
],
|
| 57 |
+
"widgets_values_named": {
|
| 58 |
+
"model_name": "minimax_h3_latent_upscaler_3d_bf16.safetensors",
|
| 59 |
+
"mode": "scale by multiplier",
|
| 60 |
+
"mode.scale": 1.5,
|
| 61 |
+
"align": 32,
|
| 62 |
+
"enable_temporal_chunking": true,
|
| 63 |
+
"force_unload": true,
|
| 64 |
+
"device": "cuda",
|
| 65 |
+
"precision": "fp16"
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"id": 2,
|
| 70 |
+
"type": "GetNode",
|
| 71 |
+
"pos": [
|
| 72 |
+
4189.533821259078,
|
| 73 |
+
6352.722810277472
|
| 74 |
+
],
|
| 75 |
+
"size": [
|
| 76 |
+
210,
|
| 77 |
+
58
|
| 78 |
+
],
|
| 79 |
+
"flags": {},
|
| 80 |
+
"order": 3,
|
| 81 |
+
"mode": 0,
|
| 82 |
+
"inputs": [],
|
| 83 |
+
"outputs": [
|
| 84 |
+
{
|
| 85 |
+
"name": "MODEL",
|
| 86 |
+
"type": "MODEL",
|
| 87 |
+
"links": [
|
| 88 |
+
1,
|
| 89 |
+
3
|
| 90 |
+
]
|
| 91 |
+
}
|
| 92 |
+
],
|
| 93 |
+
"title": "Get_model_VDN",
|
| 94 |
+
"properties": {
|
| 95 |
+
"Node name for S&R": "GetNode",
|
| 96 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 97 |
+
"ue_properties": {
|
| 98 |
+
"widget_ue_connectable": {},
|
| 99 |
+
"version": "7.5.1",
|
| 100 |
+
"input_ue_unconnectable": {}
|
| 101 |
+
}
|
| 102 |
+
},
|
| 103 |
+
"widgets_values": [
|
| 104 |
+
"model_VDN"
|
| 105 |
+
],
|
| 106 |
+
"widgets_values_named": {
|
| 107 |
+
"Constant": "model_VDN"
|
| 108 |
+
},
|
| 109 |
+
"color": "#1f1f48",
|
| 110 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"id": 4,
|
| 114 |
+
"type": "KSamplerSelect",
|
| 115 |
+
"pos": [
|
| 116 |
+
4540.866963201227,
|
| 117 |
+
6206.558421641109
|
| 118 |
+
],
|
| 119 |
+
"size": [
|
| 120 |
+
361.19999999999993,
|
| 121 |
+
66.19999999999982
|
| 122 |
+
],
|
| 123 |
+
"flags": {},
|
| 124 |
+
"order": 0,
|
| 125 |
+
"mode": 0,
|
| 126 |
+
"inputs": [],
|
| 127 |
+
"outputs": [
|
| 128 |
+
{
|
| 129 |
+
"name": "SAMPLER",
|
| 130 |
+
"type": "SAMPLER",
|
| 131 |
+
"links": [
|
| 132 |
+
6
|
| 133 |
+
]
|
| 134 |
+
}
|
| 135 |
+
],
|
| 136 |
+
"properties": {
|
| 137 |
+
"cnr_id": "comfy-core",
|
| 138 |
+
"ver": "0.30.0",
|
| 139 |
+
"Node name for S&R": "KSamplerSelect",
|
| 140 |
+
"ue_properties": {
|
| 141 |
+
"widget_ue_connectable": {},
|
| 142 |
+
"version": "7.5.1",
|
| 143 |
+
"input_ue_unconnectable": {}
|
| 144 |
+
}
|
| 145 |
+
},
|
| 146 |
+
"widgets_values": [
|
| 147 |
+
"euler"
|
| 148 |
+
],
|
| 149 |
+
"widgets_values_named": {
|
| 150 |
+
"sampler_name": "euler"
|
| 151 |
+
}
|
| 152 |
+
},
|
| 153 |
+
{
|
| 154 |
+
"id": 5,
|
| 155 |
+
"type": "BasicGuider",
|
| 156 |
+
"pos": [
|
| 157 |
+
4530.087815400926,
|
| 158 |
+
6089.176927689423
|
| 159 |
+
],
|
| 160 |
+
"size": [
|
| 161 |
+
360,
|
| 162 |
+
60
|
| 163 |
+
],
|
| 164 |
+
"flags": {},
|
| 165 |
+
"order": 16,
|
| 166 |
+
"mode": 0,
|
| 167 |
+
"inputs": [
|
| 168 |
+
{
|
| 169 |
+
"name": "model",
|
| 170 |
+
"type": "MODEL",
|
| 171 |
+
"link": 1
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"name": "conditioning",
|
| 175 |
+
"type": "CONDITIONING",
|
| 176 |
+
"link": 19
|
| 177 |
+
}
|
| 178 |
+
],
|
| 179 |
+
"outputs": [
|
| 180 |
+
{
|
| 181 |
+
"name": "GUIDER",
|
| 182 |
+
"type": "GUIDER",
|
| 183 |
+
"links": [
|
| 184 |
+
5
|
| 185 |
+
]
|
| 186 |
+
}
|
| 187 |
+
],
|
| 188 |
+
"properties": {
|
| 189 |
+
"cnr_id": "comfy-core",
|
| 190 |
+
"ver": "0.30.0",
|
| 191 |
+
"Node name for S&R": "BasicGuider",
|
| 192 |
+
"ue_properties": {
|
| 193 |
+
"widget_ue_connectable": {},
|
| 194 |
+
"version": "7.5.1",
|
| 195 |
+
"input_ue_unconnectable": {}
|
| 196 |
+
}
|
| 197 |
+
}
|
| 198 |
+
},
|
| 199 |
+
{
|
| 200 |
+
"id": 6,
|
| 201 |
+
"type": "RandomNoise",
|
| 202 |
+
"pos": [
|
| 203 |
+
4540.866963201227,
|
| 204 |
+
5947.758421641106
|
| 205 |
+
],
|
| 206 |
+
"size": [
|
| 207 |
+
360,
|
| 208 |
+
90
|
| 209 |
+
],
|
| 210 |
+
"flags": {},
|
| 211 |
+
"order": 1,
|
| 212 |
+
"mode": 0,
|
| 213 |
+
"inputs": [],
|
| 214 |
+
"outputs": [
|
| 215 |
+
{
|
| 216 |
+
"name": "NOISE",
|
| 217 |
+
"type": "NOISE",
|
| 218 |
+
"links": [
|
| 219 |
+
4
|
| 220 |
+
]
|
| 221 |
+
}
|
| 222 |
+
],
|
| 223 |
+
"properties": {
|
| 224 |
+
"cnr_id": "comfy-core",
|
| 225 |
+
"ver": "0.30.0",
|
| 226 |
+
"Node name for S&R": "RandomNoise",
|
| 227 |
+
"ue_properties": {
|
| 228 |
+
"widget_ue_connectable": {},
|
| 229 |
+
"version": "7.5.1",
|
| 230 |
+
"input_ue_unconnectable": {}
|
| 231 |
+
}
|
| 232 |
+
},
|
| 233 |
+
"widgets_values": [
|
| 234 |
+
42,
|
| 235 |
+
"fixed"
|
| 236 |
+
],
|
| 237 |
+
"widgets_values_named": {
|
| 238 |
+
"noise_seed": 42,
|
| 239 |
+
"control_after_generate": "fixed"
|
| 240 |
+
}
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"id": 7,
|
| 244 |
+
"type": "BasicScheduler",
|
| 245 |
+
"pos": [
|
| 246 |
+
4540.866963201227,
|
| 247 |
+
6328.758421641109
|
| 248 |
+
],
|
| 249 |
+
"size": [
|
| 250 |
+
370,
|
| 251 |
+
130
|
| 252 |
+
],
|
| 253 |
+
"flags": {},
|
| 254 |
+
"order": 9,
|
| 255 |
+
"mode": 0,
|
| 256 |
+
"inputs": [
|
| 257 |
+
{
|
| 258 |
+
"name": "model",
|
| 259 |
+
"type": "MODEL",
|
| 260 |
+
"link": 3
|
| 261 |
+
}
|
| 262 |
+
],
|
| 263 |
+
"outputs": [
|
| 264 |
+
{
|
| 265 |
+
"name": "SIGMAS",
|
| 266 |
+
"type": "SIGMAS",
|
| 267 |
+
"links": [
|
| 268 |
+
7
|
| 269 |
+
]
|
| 270 |
+
}
|
| 271 |
+
],
|
| 272 |
+
"properties": {
|
| 273 |
+
"cnr_id": "comfy-core",
|
| 274 |
+
"ver": "0.30.0",
|
| 275 |
+
"Node name for S&R": "BasicScheduler",
|
| 276 |
+
"ue_properties": {
|
| 277 |
+
"widget_ue_connectable": {},
|
| 278 |
+
"version": "7.5.1",
|
| 279 |
+
"input_ue_unconnectable": {}
|
| 280 |
+
}
|
| 281 |
+
},
|
| 282 |
+
"widgets_values": [
|
| 283 |
+
"simple",
|
| 284 |
+
3,
|
| 285 |
+
0.2
|
| 286 |
+
],
|
| 287 |
+
"widgets_values_named": {
|
| 288 |
+
"scheduler": "simple",
|
| 289 |
+
"steps": 3,
|
| 290 |
+
"denoise": 0.2
|
| 291 |
+
}
|
| 292 |
+
},
|
| 293 |
+
{
|
| 294 |
+
"id": 8,
|
| 295 |
+
"type": "SamplerCustomAdvanced",
|
| 296 |
+
"pos": [
|
| 297 |
+
5102.116963201228,
|
| 298 |
+
6078.758421641109
|
| 299 |
+
],
|
| 300 |
+
"size": [
|
| 301 |
+
239.76709241172045,
|
| 302 |
+
326
|
| 303 |
+
],
|
| 304 |
+
"flags": {},
|
| 305 |
+
"order": 20,
|
| 306 |
+
"mode": 0,
|
| 307 |
+
"inputs": [
|
| 308 |
+
{
|
| 309 |
+
"name": "noise",
|
| 310 |
+
"type": "NOISE",
|
| 311 |
+
"link": 4
|
| 312 |
+
},
|
| 313 |
+
{
|
| 314 |
+
"name": "guider",
|
| 315 |
+
"type": "GUIDER",
|
| 316 |
+
"link": 5
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"name": "sampler",
|
| 320 |
+
"type": "SAMPLER",
|
| 321 |
+
"link": 6
|
| 322 |
+
},
|
| 323 |
+
{
|
| 324 |
+
"name": "sigmas",
|
| 325 |
+
"type": "SIGMAS",
|
| 326 |
+
"link": 7
|
| 327 |
+
},
|
| 328 |
+
{
|
| 329 |
+
"name": "latent_image",
|
| 330 |
+
"type": "LATENT",
|
| 331 |
+
"link": 36
|
| 332 |
+
}
|
| 333 |
+
],
|
| 334 |
+
"outputs": [
|
| 335 |
+
{
|
| 336 |
+
"name": "output",
|
| 337 |
+
"type": "LATENT",
|
| 338 |
+
"links": [
|
| 339 |
+
9
|
| 340 |
+
]
|
| 341 |
+
},
|
| 342 |
+
{
|
| 343 |
+
"name": "denoised_output",
|
| 344 |
+
"type": "LATENT",
|
| 345 |
+
"links": []
|
| 346 |
+
}
|
| 347 |
+
],
|
| 348 |
+
"properties": {
|
| 349 |
+
"cnr_id": "comfy-core",
|
| 350 |
+
"ver": "0.30.0",
|
| 351 |
+
"Node name for S&R": "SamplerCustomAdvanced",
|
| 352 |
+
"ue_properties": {
|
| 353 |
+
"widget_ue_connectable": {},
|
| 354 |
+
"version": "7.5.1",
|
| 355 |
+
"input_ue_unconnectable": {}
|
| 356 |
+
}
|
| 357 |
+
}
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"id": 9,
|
| 361 |
+
"type": "GetNode",
|
| 362 |
+
"pos": [
|
| 363 |
+
5462.805825592742,
|
| 364 |
+
6109.340215847699
|
| 365 |
+
],
|
| 366 |
+
"size": [
|
| 367 |
+
210,
|
| 368 |
+
58
|
| 369 |
+
],
|
| 370 |
+
"flags": {
|
| 371 |
+
"collapsed": false
|
| 372 |
+
},
|
| 373 |
+
"order": 5,
|
| 374 |
+
"mode": 0,
|
| 375 |
+
"inputs": [],
|
| 376 |
+
"outputs": [
|
| 377 |
+
{
|
| 378 |
+
"name": "VAE",
|
| 379 |
+
"type": "VAE",
|
| 380 |
+
"links": [
|
| 381 |
+
10
|
| 382 |
+
]
|
| 383 |
+
}
|
| 384 |
+
],
|
| 385 |
+
"title": "Get_vae_video",
|
| 386 |
+
"properties": {
|
| 387 |
+
"Node name for S&R": "GetNode",
|
| 388 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 389 |
+
"ue_properties": {
|
| 390 |
+
"widget_ue_connectable": {},
|
| 391 |
+
"version": "7.5.1",
|
| 392 |
+
"input_ue_unconnectable": {}
|
| 393 |
+
}
|
| 394 |
+
},
|
| 395 |
+
"widgets_values": [
|
| 396 |
+
"vae_video"
|
| 397 |
+
],
|
| 398 |
+
"widgets_values_named": {
|
| 399 |
+
"Constant": "vae_video"
|
| 400 |
+
},
|
| 401 |
+
"color": "#af3535",
|
| 402 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 403 |
+
},
|
| 404 |
+
{
|
| 405 |
+
"id": 10,
|
| 406 |
+
"type": "VAEDecode",
|
| 407 |
+
"pos": [
|
| 408 |
+
5477.721985489667,
|
| 409 |
+
6271.643325921581
|
| 410 |
+
],
|
| 411 |
+
"size": [
|
| 412 |
+
230,
|
| 413 |
+
60
|
| 414 |
+
],
|
| 415 |
+
"flags": {
|
| 416 |
+
"collapsed": false
|
| 417 |
+
},
|
| 418 |
+
"order": 21,
|
| 419 |
+
"mode": 0,
|
| 420 |
+
"inputs": [
|
| 421 |
+
{
|
| 422 |
+
"name": "samples",
|
| 423 |
+
"type": "LATENT",
|
| 424 |
+
"link": 9
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"name": "vae",
|
| 428 |
+
"type": "VAE",
|
| 429 |
+
"link": 10
|
| 430 |
+
}
|
| 431 |
+
],
|
| 432 |
+
"outputs": [
|
| 433 |
+
{
|
| 434 |
+
"name": "IMAGE",
|
| 435 |
+
"type": "IMAGE",
|
| 436 |
+
"links": [
|
| 437 |
+
11
|
| 438 |
+
]
|
| 439 |
+
}
|
| 440 |
+
],
|
| 441 |
+
"properties": {
|
| 442 |
+
"cnr_id": "comfy-core",
|
| 443 |
+
"ver": "0.30.0",
|
| 444 |
+
"Node name for S&R": "VAEDecode",
|
| 445 |
+
"ue_properties": {
|
| 446 |
+
"widget_ue_connectable": {},
|
| 447 |
+
"version": "7.5.1",
|
| 448 |
+
"input_ue_unconnectable": {}
|
| 449 |
+
}
|
| 450 |
+
}
|
| 451 |
+
},
|
| 452 |
+
{
|
| 453 |
+
"id": 11,
|
| 454 |
+
"type": "MathExpression|pysssss",
|
| 455 |
+
"pos": [
|
| 456 |
+
5860.105045064689,
|
| 457 |
+
6373.189217624035
|
| 458 |
+
],
|
| 459 |
+
"size": [
|
| 460 |
+
400,
|
| 461 |
+
200
|
| 462 |
+
],
|
| 463 |
+
"flags": {},
|
| 464 |
+
"order": 6,
|
| 465 |
+
"mode": 0,
|
| 466 |
+
"inputs": [
|
| 467 |
+
{
|
| 468 |
+
"name": "a",
|
| 469 |
+
"shape": 7,
|
| 470 |
+
"type": "INT,FLOAT,IMAGE,LATENT",
|
| 471 |
+
"link": null
|
| 472 |
+
},
|
| 473 |
+
{
|
| 474 |
+
"name": "b",
|
| 475 |
+
"shape": 7,
|
| 476 |
+
"type": "INT,FLOAT,IMAGE,LATENT",
|
| 477 |
+
"link": null
|
| 478 |
+
},
|
| 479 |
+
{
|
| 480 |
+
"name": "c",
|
| 481 |
+
"shape": 7,
|
| 482 |
+
"type": "INT,FLOAT,IMAGE,LATENT",
|
| 483 |
+
"link": null
|
| 484 |
+
}
|
| 485 |
+
],
|
| 486 |
+
"outputs": [
|
| 487 |
+
{
|
| 488 |
+
"name": "INT",
|
| 489 |
+
"type": "INT",
|
| 490 |
+
"links": null
|
| 491 |
+
},
|
| 492 |
+
{
|
| 493 |
+
"name": "FLOAT",
|
| 494 |
+
"type": "FLOAT",
|
| 495 |
+
"links": [
|
| 496 |
+
14,
|
| 497 |
+
35
|
| 498 |
+
]
|
| 499 |
+
}
|
| 500 |
+
],
|
| 501 |
+
"properties": {
|
| 502 |
+
"cnr_id": "comfyui-custom-scripts",
|
| 503 |
+
"ver": "1.2.5",
|
| 504 |
+
"ue_properties": {
|
| 505 |
+
"widget_ue_connectable": {},
|
| 506 |
+
"input_ue_unconnectable": {},
|
| 507 |
+
"version": "7.5.1"
|
| 508 |
+
}
|
| 509 |
+
},
|
| 510 |
+
"widgets_values": [
|
| 511 |
+
"24*2"
|
| 512 |
+
],
|
| 513 |
+
"widgets_values_named": {
|
| 514 |
+
"expression": "24*2"
|
| 515 |
+
}
|
| 516 |
+
},
|
| 517 |
+
{
|
| 518 |
+
"id": 12,
|
| 519 |
+
"type": "RIFEInterpolation",
|
| 520 |
+
"pos": [
|
| 521 |
+
6289.458038457433,
|
| 522 |
+
6271.208568461926
|
| 523 |
+
],
|
| 524 |
+
"size": [
|
| 525 |
+
270,
|
| 526 |
+
178
|
| 527 |
+
],
|
| 528 |
+
"flags": {},
|
| 529 |
+
"order": 22,
|
| 530 |
+
"mode": 0,
|
| 531 |
+
"inputs": [
|
| 532 |
+
{
|
| 533 |
+
"name": "images",
|
| 534 |
+
"type": "IMAGE",
|
| 535 |
+
"link": 11
|
| 536 |
+
},
|
| 537 |
+
{
|
| 538 |
+
"name": "target_fps",
|
| 539 |
+
"type": "FLOAT",
|
| 540 |
+
"widget": {
|
| 541 |
+
"name": "target_fps"
|
| 542 |
+
},
|
| 543 |
+
"link": 35
|
| 544 |
+
}
|
| 545 |
+
],
|
| 546 |
+
"outputs": [
|
| 547 |
+
{
|
| 548 |
+
"name": "images",
|
| 549 |
+
"type": "IMAGE",
|
| 550 |
+
"links": [
|
| 551 |
+
12
|
| 552 |
+
]
|
| 553 |
+
}
|
| 554 |
+
],
|
| 555 |
+
"properties": {
|
| 556 |
+
"aux_id": "GACLove/ComfyUI-VFI",
|
| 557 |
+
"ver": "6176a430f12cd16003f4664c1e3c6af8e96cc3c6",
|
| 558 |
+
"Node name for S&R": "RIFEInterpolation",
|
| 559 |
+
"ue_properties": {
|
| 560 |
+
"widget_ue_connectable": {},
|
| 561 |
+
"input_ue_unconnectable": {},
|
| 562 |
+
"version": "7.5.1"
|
| 563 |
+
}
|
| 564 |
+
},
|
| 565 |
+
"widgets_values": [
|
| 566 |
+
24,
|
| 567 |
+
48,
|
| 568 |
+
1,
|
| 569 |
+
"flownet.pkl",
|
| 570 |
+
8,
|
| 571 |
+
true
|
| 572 |
+
],
|
| 573 |
+
"widgets_values_named": {
|
| 574 |
+
"source_fps": 24,
|
| 575 |
+
"target_fps": 48,
|
| 576 |
+
"scale": 1,
|
| 577 |
+
"model_name": "flownet.pkl",
|
| 578 |
+
"batch_size": 8,
|
| 579 |
+
"use_fp16": true
|
| 580 |
+
},
|
| 581 |
+
"ndSuperSelectorEnabled": false,
|
| 582 |
+
"ndPowerEnabled": false
|
| 583 |
+
},
|
| 584 |
+
{
|
| 585 |
+
"id": 13,
|
| 586 |
+
"type": "VHS_VideoCombine",
|
| 587 |
+
"pos": [
|
| 588 |
+
7003.629054557495,
|
| 589 |
+
5614.858443597528
|
| 590 |
+
],
|
| 591 |
+
"size": [
|
| 592 |
+
693.741563959413,
|
| 593 |
+
1470.9026065990217
|
| 594 |
+
],
|
| 595 |
+
"flags": {
|
| 596 |
+
"collapsed": false
|
| 597 |
+
},
|
| 598 |
+
"order": 23,
|
| 599 |
+
"mode": 0,
|
| 600 |
+
"inputs": [
|
| 601 |
+
{
|
| 602 |
+
"name": "images",
|
| 603 |
+
"type": "IMAGE",
|
| 604 |
+
"link": 12
|
| 605 |
+
},
|
| 606 |
+
{
|
| 607 |
+
"name": "audio",
|
| 608 |
+
"shape": 7,
|
| 609 |
+
"type": "AUDIO",
|
| 610 |
+
"link": 37
|
| 611 |
+
},
|
| 612 |
+
{
|
| 613 |
+
"name": "meta_batch",
|
| 614 |
+
"shape": 7,
|
| 615 |
+
"type": "VHS_BatchManager",
|
| 616 |
+
"link": null
|
| 617 |
+
},
|
| 618 |
+
{
|
| 619 |
+
"name": "vae",
|
| 620 |
+
"shape": 7,
|
| 621 |
+
"type": "VAE",
|
| 622 |
+
"link": null
|
| 623 |
+
},
|
| 624 |
+
{
|
| 625 |
+
"name": "frame_rate",
|
| 626 |
+
"type": "FLOAT",
|
| 627 |
+
"widget": {
|
| 628 |
+
"name": "frame_rate"
|
| 629 |
+
},
|
| 630 |
+
"link": 14
|
| 631 |
+
}
|
| 632 |
+
],
|
| 633 |
+
"outputs": [
|
| 634 |
+
{
|
| 635 |
+
"name": "Filenames",
|
| 636 |
+
"type": "VHS_FILENAMES",
|
| 637 |
+
"links": null
|
| 638 |
+
}
|
| 639 |
+
],
|
| 640 |
+
"title": "Video Output 2 (Output)",
|
| 641 |
+
"properties": {
|
| 642 |
+
"cnr_id": "comfyui-videohelpersuite",
|
| 643 |
+
"ver": "993082e4f2473bf4acaf06f51e33877a7eb38960",
|
| 644 |
+
"Node name for S&R": "VHS_VideoCombine",
|
| 645 |
+
"ue_properties": {
|
| 646 |
+
"widget_ue_connectable": {
|
| 647 |
+
"frame_rate": true
|
| 648 |
+
},
|
| 649 |
+
"version": "7.5.1",
|
| 650 |
+
"input_ue_unconnectable": {}
|
| 651 |
+
},
|
| 652 |
+
"aux_id": "kosinkadink/ComfyUI-VideoHelperSuite"
|
| 653 |
+
},
|
| 654 |
+
"widgets_values": {
|
| 655 |
+
"frame_rate": 24,
|
| 656 |
+
"loop_count": 0,
|
| 657 |
+
"filename_prefix": "minimax-h3/Upscaled_24_fps_video_",
|
| 658 |
+
"format": "video/h264-mp4",
|
| 659 |
+
"pix_fmt": "yuv420p",
|
| 660 |
+
"crf": 12,
|
| 661 |
+
"save_metadata": true,
|
| 662 |
+
"trim_to_audio": false,
|
| 663 |
+
"pingpong": false,
|
| 664 |
+
"save_output": true,
|
| 665 |
+
"videopreview": {
|
| 666 |
+
"hidden": false,
|
| 667 |
+
"paused": false,
|
| 668 |
+
"params": {
|
| 669 |
+
"filename": "Upscaled_24_fps_video__00006-audio.mp4",
|
| 670 |
+
"subfolder": "minimax-h3",
|
| 671 |
+
"type": "output",
|
| 672 |
+
"format": "video/h264-mp4",
|
| 673 |
+
"frame_rate": 48,
|
| 674 |
+
"workflow": "Upscaled_24_fps_video__00006.png",
|
| 675 |
+
"fullpath": "/home/bryan/Documents/ComfyUI/ComfyUI/output/minimax-h3/Upscaled_24_fps_video__00006-audio.mp4"
|
| 676 |
+
},
|
| 677 |
+
"muted": false
|
| 678 |
+
}
|
| 679 |
+
},
|
| 680 |
+
"widgets_values_named": {
|
| 681 |
+
"frame_rate": 24,
|
| 682 |
+
"loop_count": 0,
|
| 683 |
+
"filename_prefix": "minimax-h3/Upscaled_24_fps_video_",
|
| 684 |
+
"format": "video/h264-mp4",
|
| 685 |
+
"pix_fmt": "yuv420p",
|
| 686 |
+
"crf": 12,
|
| 687 |
+
"save_metadata": true,
|
| 688 |
+
"trim_to_audio": false,
|
| 689 |
+
"pingpong": false,
|
| 690 |
+
"save_output": true,
|
| 691 |
+
"videopreview": {
|
| 692 |
+
"hidden": false,
|
| 693 |
+
"paused": false,
|
| 694 |
+
"params": {
|
| 695 |
+
"filename": "Upscaled_24_fps_video__00006-audio.mp4",
|
| 696 |
+
"subfolder": "minimax-h3",
|
| 697 |
+
"type": "output",
|
| 698 |
+
"format": "video/h264-mp4",
|
| 699 |
+
"frame_rate": 48,
|
| 700 |
+
"workflow": "Upscaled_24_fps_video__00006.png",
|
| 701 |
+
"fullpath": "/home/bryan/Documents/ComfyUI/ComfyUI/output/minimax-h3/Upscaled_24_fps_video__00006-audio.mp4"
|
| 702 |
+
},
|
| 703 |
+
"muted": false
|
| 704 |
+
}
|
| 705 |
+
},
|
| 706 |
+
"ndSuperSelectorEnabled": false,
|
| 707 |
+
"ndPowerEnabled": false
|
| 708 |
+
},
|
| 709 |
+
{
|
| 710 |
+
"id": 14,
|
| 711 |
+
"type": "GetNode",
|
| 712 |
+
"pos": [
|
| 713 |
+
4024.055823306182,
|
| 714 |
+
5553.142281680486
|
| 715 |
+
],
|
| 716 |
+
"size": [
|
| 717 |
+
210,
|
| 718 |
+
58
|
| 719 |
+
],
|
| 720 |
+
"flags": {},
|
| 721 |
+
"order": 2,
|
| 722 |
+
"mode": 0,
|
| 723 |
+
"inputs": [],
|
| 724 |
+
"outputs": [
|
| 725 |
+
{
|
| 726 |
+
"name": "*",
|
| 727 |
+
"type": "*",
|
| 728 |
+
"links": []
|
| 729 |
+
}
|
| 730 |
+
],
|
| 731 |
+
"title": "Get_src_audio",
|
| 732 |
+
"properties": {
|
| 733 |
+
"Node name for S&R": "GetNode",
|
| 734 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 735 |
+
"ue_properties": {
|
| 736 |
+
"widget_ue_connectable": {},
|
| 737 |
+
"version": "7.5.1",
|
| 738 |
+
"input_ue_unconnectable": {}
|
| 739 |
+
}
|
| 740 |
+
},
|
| 741 |
+
"widgets_values": [
|
| 742 |
+
"src_audio"
|
| 743 |
+
],
|
| 744 |
+
"widgets_values_named": {
|
| 745 |
+
"Constant": "src_audio"
|
| 746 |
+
}
|
| 747 |
+
},
|
| 748 |
+
{
|
| 749 |
+
"id": 15,
|
| 750 |
+
"type": "LoadH3BundleBatch",
|
| 751 |
+
"pos": [
|
| 752 |
+
3663.0697659653974,
|
| 753 |
+
6211.159206074967
|
| 754 |
+
],
|
| 755 |
+
"size": [
|
| 756 |
+
329.2798828125,
|
| 757 |
+
230
|
| 758 |
+
],
|
| 759 |
+
"flags": {},
|
| 760 |
+
"order": 13,
|
| 761 |
+
"mode": 0,
|
| 762 |
+
"inputs": [
|
| 763 |
+
{
|
| 764 |
+
"name": "index",
|
| 765 |
+
"type": "INT",
|
| 766 |
+
"widget": {
|
| 767 |
+
"name": "index"
|
| 768 |
+
},
|
| 769 |
+
"link": 38
|
| 770 |
+
}
|
| 771 |
+
],
|
| 772 |
+
"outputs": [
|
| 773 |
+
{
|
| 774 |
+
"name": "latent",
|
| 775 |
+
"type": "LATENT",
|
| 776 |
+
"links": [
|
| 777 |
+
18,
|
| 778 |
+
29
|
| 779 |
+
]
|
| 780 |
+
},
|
| 781 |
+
{
|
| 782 |
+
"name": "conditioning",
|
| 783 |
+
"type": "CONDITIONING",
|
| 784 |
+
"links": [
|
| 785 |
+
19
|
| 786 |
+
]
|
| 787 |
+
},
|
| 788 |
+
{
|
| 789 |
+
"name": "filename_prefix",
|
| 790 |
+
"type": "STRING",
|
| 791 |
+
"links": null
|
| 792 |
+
},
|
| 793 |
+
{
|
| 794 |
+
"name": "width",
|
| 795 |
+
"type": "INT",
|
| 796 |
+
"links": [
|
| 797 |
+
17
|
| 798 |
+
]
|
| 799 |
+
},
|
| 800 |
+
{
|
| 801 |
+
"name": "height",
|
| 802 |
+
"type": "INT",
|
| 803 |
+
"links": [
|
| 804 |
+
16
|
| 805 |
+
]
|
| 806 |
+
},
|
| 807 |
+
{
|
| 808 |
+
"name": "remaining",
|
| 809 |
+
"type": "INT",
|
| 810 |
+
"links": [
|
| 811 |
+
15
|
| 812 |
+
]
|
| 813 |
+
}
|
| 814 |
+
],
|
| 815 |
+
"properties": {
|
| 816 |
+
"Node name for S&R": "LoadH3BundleBatch",
|
| 817 |
+
"ue_properties": {
|
| 818 |
+
"widget_ue_connectable": {},
|
| 819 |
+
"input_ue_unconnectable": {},
|
| 820 |
+
"version": "7.5.1"
|
| 821 |
+
}
|
| 822 |
+
},
|
| 823 |
+
"widgets_values": [
|
| 824 |
+
"h3_bundles/",
|
| 825 |
+
"index",
|
| 826 |
+
0,
|
| 827 |
+
false
|
| 828 |
+
],
|
| 829 |
+
"widgets_values_named": {
|
| 830 |
+
"bundles_dir": "h3_bundles/",
|
| 831 |
+
"mode": "index",
|
| 832 |
+
"index": 0,
|
| 833 |
+
"output_subdir": false
|
| 834 |
+
}
|
| 835 |
+
},
|
| 836 |
+
{
|
| 837 |
+
"id": 17,
|
| 838 |
+
"type": "easy showAnything",
|
| 839 |
+
"pos": [
|
| 840 |
+
4021.6464033959273,
|
| 841 |
+
6558.944584421644
|
| 842 |
+
],
|
| 843 |
+
"size": [
|
| 844 |
+
210,
|
| 845 |
+
88
|
| 846 |
+
],
|
| 847 |
+
"flags": {},
|
| 848 |
+
"order": 19,
|
| 849 |
+
"mode": 0,
|
| 850 |
+
"inputs": [
|
| 851 |
+
{
|
| 852 |
+
"name": "anything",
|
| 853 |
+
"shape": 7,
|
| 854 |
+
"type": "*",
|
| 855 |
+
"link": 15
|
| 856 |
+
}
|
| 857 |
+
],
|
| 858 |
+
"outputs": [
|
| 859 |
+
{
|
| 860 |
+
"name": "output",
|
| 861 |
+
"type": "*",
|
| 862 |
+
"links": null
|
| 863 |
+
}
|
| 864 |
+
],
|
| 865 |
+
"properties": {
|
| 866 |
+
"cnr_id": "comfyui-easy-use",
|
| 867 |
+
"ver": "1.3.6",
|
| 868 |
+
"Node name for S&R": "easy showAnything",
|
| 869 |
+
"ue_properties": {
|
| 870 |
+
"widget_ue_connectable": {},
|
| 871 |
+
"input_ue_unconnectable": {},
|
| 872 |
+
"version": "7.5.1"
|
| 873 |
+
}
|
| 874 |
+
},
|
| 875 |
+
"widgets_values": [
|
| 876 |
+
"0"
|
| 877 |
+
],
|
| 878 |
+
"widgets_values_named": {
|
| 879 |
+
"text": "0"
|
| 880 |
+
}
|
| 881 |
+
},
|
| 882 |
+
{
|
| 883 |
+
"id": 18,
|
| 884 |
+
"type": "easy showAnything",
|
| 885 |
+
"pos": [
|
| 886 |
+
4286.225331937098,
|
| 887 |
+
6495.741734554551
|
| 888 |
+
],
|
| 889 |
+
"size": [
|
| 890 |
+
210,
|
| 891 |
+
88
|
| 892 |
+
],
|
| 893 |
+
"flags": {},
|
| 894 |
+
"order": 18,
|
| 895 |
+
"mode": 0,
|
| 896 |
+
"inputs": [
|
| 897 |
+
{
|
| 898 |
+
"name": "anything",
|
| 899 |
+
"shape": 7,
|
| 900 |
+
"type": "*",
|
| 901 |
+
"link": 16
|
| 902 |
+
}
|
| 903 |
+
],
|
| 904 |
+
"outputs": [
|
| 905 |
+
{
|
| 906 |
+
"name": "output",
|
| 907 |
+
"type": "*",
|
| 908 |
+
"links": null
|
| 909 |
+
}
|
| 910 |
+
],
|
| 911 |
+
"properties": {
|
| 912 |
+
"cnr_id": "comfyui-easy-use",
|
| 913 |
+
"ver": "1.3.6",
|
| 914 |
+
"Node name for S&R": "easy showAnything",
|
| 915 |
+
"ue_properties": {
|
| 916 |
+
"widget_ue_connectable": {},
|
| 917 |
+
"input_ue_unconnectable": {},
|
| 918 |
+
"version": "7.5.1"
|
| 919 |
+
}
|
| 920 |
+
},
|
| 921 |
+
"widgets_values": [
|
| 922 |
+
"416"
|
| 923 |
+
],
|
| 924 |
+
"widgets_values_named": {
|
| 925 |
+
"text": "416"
|
| 926 |
+
}
|
| 927 |
+
},
|
| 928 |
+
{
|
| 929 |
+
"id": 19,
|
| 930 |
+
"type": "easy showAnything",
|
| 931 |
+
"pos": [
|
| 932 |
+
4020.4387216756945,
|
| 933 |
+
6286.107615783938
|
| 934 |
+
],
|
| 935 |
+
"size": [
|
| 936 |
+
210,
|
| 937 |
+
88
|
| 938 |
+
],
|
| 939 |
+
"flags": {},
|
| 940 |
+
"order": 17,
|
| 941 |
+
"mode": 0,
|
| 942 |
+
"inputs": [
|
| 943 |
+
{
|
| 944 |
+
"name": "anything",
|
| 945 |
+
"shape": 7,
|
| 946 |
+
"type": "*",
|
| 947 |
+
"link": 17
|
| 948 |
+
}
|
| 949 |
+
],
|
| 950 |
+
"outputs": [
|
| 951 |
+
{
|
| 952 |
+
"name": "output",
|
| 953 |
+
"type": "*",
|
| 954 |
+
"links": null
|
| 955 |
+
}
|
| 956 |
+
],
|
| 957 |
+
"properties": {
|
| 958 |
+
"cnr_id": "comfyui-easy-use",
|
| 959 |
+
"ver": "1.3.6",
|
| 960 |
+
"Node name for S&R": "easy showAnything",
|
| 961 |
+
"ue_properties": {
|
| 962 |
+
"widget_ue_connectable": {},
|
| 963 |
+
"input_ue_unconnectable": {},
|
| 964 |
+
"version": "7.5.1"
|
| 965 |
+
}
|
| 966 |
+
},
|
| 967 |
+
"widgets_values": [
|
| 968 |
+
"256"
|
| 969 |
+
],
|
| 970 |
+
"widgets_values_named": {
|
| 971 |
+
"text": "256"
|
| 972 |
+
}
|
| 973 |
+
},
|
| 974 |
+
{
|
| 975 |
+
"id": 26,
|
| 976 |
+
"type": "deb3547e-1d90-4a4b-8f05-6e17727281b0",
|
| 977 |
+
"pos": [
|
| 978 |
+
3080.3347470774556,
|
| 979 |
+
5784.654012641178
|
| 980 |
+
],
|
| 981 |
+
"size": [
|
| 982 |
+
530.5983197868572,
|
| 983 |
+
237.79108895109584
|
| 984 |
+
],
|
| 985 |
+
"flags": {},
|
| 986 |
+
"order": 4,
|
| 987 |
+
"mode": 0,
|
| 988 |
+
"inputs": [],
|
| 989 |
+
"outputs": [
|
| 990 |
+
{
|
| 991 |
+
"name": "MODEL",
|
| 992 |
+
"type": "MODEL",
|
| 993 |
+
"links": [
|
| 994 |
+
28
|
| 995 |
+
]
|
| 996 |
+
},
|
| 997 |
+
{
|
| 998 |
+
"label": "Vae_Audio",
|
| 999 |
+
"name": "VAE",
|
| 1000 |
+
"type": "VAE",
|
| 1001 |
+
"links": [
|
| 1002 |
+
32
|
| 1003 |
+
]
|
| 1004 |
+
},
|
| 1005 |
+
{
|
| 1006 |
+
"label": "VAE_Video",
|
| 1007 |
+
"name": "VAE_1",
|
| 1008 |
+
"type": "VAE",
|
| 1009 |
+
"links": [
|
| 1010 |
+
33
|
| 1011 |
+
]
|
| 1012 |
+
}
|
| 1013 |
+
],
|
| 1014 |
+
"properties": {
|
| 1015 |
+
"cnr_id": "comfy-core",
|
| 1016 |
+
"ver": "0.34.5",
|
| 1017 |
+
"ue_properties": {
|
| 1018 |
+
"widget_ue_connectable": {},
|
| 1019 |
+
"input_ue_unconnectable": {},
|
| 1020 |
+
"version": "7.5.1"
|
| 1021 |
+
},
|
| 1022 |
+
"previewExposures": []
|
| 1023 |
+
}
|
| 1024 |
+
},
|
| 1025 |
+
{
|
| 1026 |
+
"id": 27,
|
| 1027 |
+
"type": "SetNode",
|
| 1028 |
+
"pos": [
|
| 1029 |
+
3863.182966811336,
|
| 1030 |
+
5730.639268000472
|
| 1031 |
+
],
|
| 1032 |
+
"size": [
|
| 1033 |
+
210,
|
| 1034 |
+
58
|
| 1035 |
+
],
|
| 1036 |
+
"flags": {},
|
| 1037 |
+
"order": 10,
|
| 1038 |
+
"mode": 0,
|
| 1039 |
+
"inputs": [
|
| 1040 |
+
{
|
| 1041 |
+
"name": "MODEL",
|
| 1042 |
+
"type": "MODEL",
|
| 1043 |
+
"link": 28
|
| 1044 |
+
}
|
| 1045 |
+
],
|
| 1046 |
+
"outputs": [
|
| 1047 |
+
{
|
| 1048 |
+
"name": "MODEL",
|
| 1049 |
+
"type": "MODEL",
|
| 1050 |
+
"links": []
|
| 1051 |
+
}
|
| 1052 |
+
],
|
| 1053 |
+
"title": "Set_model_VDN",
|
| 1054 |
+
"properties": {
|
| 1055 |
+
"Node name for S&R": "SetNode",
|
| 1056 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1057 |
+
"previousName": "model_VDN",
|
| 1058 |
+
"ue_properties": {
|
| 1059 |
+
"widget_ue_connectable": {},
|
| 1060 |
+
"version": "7.5.1",
|
| 1061 |
+
"input_ue_unconnectable": {}
|
| 1062 |
+
}
|
| 1063 |
+
},
|
| 1064 |
+
"widgets_values": [
|
| 1065 |
+
"model_VDN"
|
| 1066 |
+
],
|
| 1067 |
+
"widgets_values_named": {
|
| 1068 |
+
"Constant": "model_VDN"
|
| 1069 |
+
},
|
| 1070 |
+
"color": "#1f1f48",
|
| 1071 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 1072 |
+
},
|
| 1073 |
+
{
|
| 1074 |
+
"id": 28,
|
| 1075 |
+
"type": "VAEDecodeAudio",
|
| 1076 |
+
"pos": [
|
| 1077 |
+
5610.404818473734,
|
| 1078 |
+
5931.430221895427
|
| 1079 |
+
],
|
| 1080 |
+
"size": [
|
| 1081 |
+
164.2388671875,
|
| 1082 |
+
46
|
| 1083 |
+
],
|
| 1084 |
+
"flags": {},
|
| 1085 |
+
"order": 15,
|
| 1086 |
+
"mode": 0,
|
| 1087 |
+
"inputs": [
|
| 1088 |
+
{
|
| 1089 |
+
"name": "samples",
|
| 1090 |
+
"type": "LATENT",
|
| 1091 |
+
"link": 29
|
| 1092 |
+
},
|
| 1093 |
+
{
|
| 1094 |
+
"name": "vae",
|
| 1095 |
+
"type": "VAE",
|
| 1096 |
+
"link": 34
|
| 1097 |
+
}
|
| 1098 |
+
],
|
| 1099 |
+
"outputs": [
|
| 1100 |
+
{
|
| 1101 |
+
"name": "AUDIO",
|
| 1102 |
+
"type": "AUDIO",
|
| 1103 |
+
"links": [
|
| 1104 |
+
37
|
| 1105 |
+
]
|
| 1106 |
+
}
|
| 1107 |
+
],
|
| 1108 |
+
"properties": {
|
| 1109 |
+
"cnr_id": "comfy-core",
|
| 1110 |
+
"ver": "0.34.5",
|
| 1111 |
+
"Node name for S&R": "VAEDecodeAudio",
|
| 1112 |
+
"ue_properties": {
|
| 1113 |
+
"widget_ue_connectable": {},
|
| 1114 |
+
"input_ue_unconnectable": {},
|
| 1115 |
+
"version": "7.5.1"
|
| 1116 |
+
}
|
| 1117 |
+
}
|
| 1118 |
+
},
|
| 1119 |
+
{
|
| 1120 |
+
"id": 32,
|
| 1121 |
+
"type": "SetNode",
|
| 1122 |
+
"pos": [
|
| 1123 |
+
3666.164256167578,
|
| 1124 |
+
5819.700639749696
|
| 1125 |
+
],
|
| 1126 |
+
"size": [
|
| 1127 |
+
210,
|
| 1128 |
+
60
|
| 1129 |
+
],
|
| 1130 |
+
"flags": {},
|
| 1131 |
+
"order": 11,
|
| 1132 |
+
"mode": 0,
|
| 1133 |
+
"inputs": [
|
| 1134 |
+
{
|
| 1135 |
+
"name": "VAE",
|
| 1136 |
+
"type": "VAE",
|
| 1137 |
+
"link": 32
|
| 1138 |
+
}
|
| 1139 |
+
],
|
| 1140 |
+
"outputs": [
|
| 1141 |
+
{
|
| 1142 |
+
"name": "VAE",
|
| 1143 |
+
"type": "VAE",
|
| 1144 |
+
"links": null
|
| 1145 |
+
}
|
| 1146 |
+
],
|
| 1147 |
+
"title": "Set_vae_audio",
|
| 1148 |
+
"properties": {
|
| 1149 |
+
"Node name for S&R": "SetNode",
|
| 1150 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1151 |
+
"previousName": "vae_audio",
|
| 1152 |
+
"ue_properties": {
|
| 1153 |
+
"widget_ue_connectable": {},
|
| 1154 |
+
"version": "7.5.1",
|
| 1155 |
+
"input_ue_unconnectable": {}
|
| 1156 |
+
}
|
| 1157 |
+
},
|
| 1158 |
+
"widgets_values": [
|
| 1159 |
+
"vae_audio"
|
| 1160 |
+
],
|
| 1161 |
+
"widgets_values_named": {
|
| 1162 |
+
"Constant": "vae_audio"
|
| 1163 |
+
},
|
| 1164 |
+
"color": "#af3535",
|
| 1165 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 1166 |
+
},
|
| 1167 |
+
{
|
| 1168 |
+
"id": 33,
|
| 1169 |
+
"type": "SetNode",
|
| 1170 |
+
"pos": [
|
| 1171 |
+
3629.1238607063815,
|
| 1172 |
+
5971.820043351726
|
| 1173 |
+
],
|
| 1174 |
+
"size": [
|
| 1175 |
+
210,
|
| 1176 |
+
58
|
| 1177 |
+
],
|
| 1178 |
+
"flags": {},
|
| 1179 |
+
"order": 12,
|
| 1180 |
+
"mode": 0,
|
| 1181 |
+
"inputs": [
|
| 1182 |
+
{
|
| 1183 |
+
"name": "VAE",
|
| 1184 |
+
"type": "VAE",
|
| 1185 |
+
"link": 33
|
| 1186 |
+
}
|
| 1187 |
+
],
|
| 1188 |
+
"outputs": [
|
| 1189 |
+
{
|
| 1190 |
+
"name": "VAE",
|
| 1191 |
+
"type": "VAE",
|
| 1192 |
+
"links": null
|
| 1193 |
+
}
|
| 1194 |
+
],
|
| 1195 |
+
"title": "Set_vae_video",
|
| 1196 |
+
"properties": {
|
| 1197 |
+
"Node name for S&R": "SetNode",
|
| 1198 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1199 |
+
"previousName": "vae_video",
|
| 1200 |
+
"ue_properties": {
|
| 1201 |
+
"widget_ue_connectable": {},
|
| 1202 |
+
"version": "7.5.1",
|
| 1203 |
+
"input_ue_unconnectable": {}
|
| 1204 |
+
}
|
| 1205 |
+
},
|
| 1206 |
+
"widgets_values": [
|
| 1207 |
+
"vae_video"
|
| 1208 |
+
],
|
| 1209 |
+
"widgets_values_named": {
|
| 1210 |
+
"Constant": "vae_video"
|
| 1211 |
+
},
|
| 1212 |
+
"color": "#af3535",
|
| 1213 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 1214 |
+
},
|
| 1215 |
+
{
|
| 1216 |
+
"id": 34,
|
| 1217 |
+
"type": "GetNode",
|
| 1218 |
+
"pos": [
|
| 1219 |
+
5349.028602450984,
|
| 1220 |
+
5868.56737955779
|
| 1221 |
+
],
|
| 1222 |
+
"size": [
|
| 1223 |
+
210,
|
| 1224 |
+
60
|
| 1225 |
+
],
|
| 1226 |
+
"flags": {},
|
| 1227 |
+
"order": 7,
|
| 1228 |
+
"mode": 0,
|
| 1229 |
+
"inputs": [],
|
| 1230 |
+
"outputs": [
|
| 1231 |
+
{
|
| 1232 |
+
"name": "VAE",
|
| 1233 |
+
"type": "VAE",
|
| 1234 |
+
"links": [
|
| 1235 |
+
34
|
| 1236 |
+
]
|
| 1237 |
+
}
|
| 1238 |
+
],
|
| 1239 |
+
"title": "Get_vae_audio",
|
| 1240 |
+
"properties": {
|
| 1241 |
+
"Node name for S&R": "GetNode",
|
| 1242 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1243 |
+
"ue_properties": {
|
| 1244 |
+
"widget_ue_connectable": {},
|
| 1245 |
+
"version": "7.5.1",
|
| 1246 |
+
"input_ue_unconnectable": {}
|
| 1247 |
+
}
|
| 1248 |
+
},
|
| 1249 |
+
"widgets_values": [
|
| 1250 |
+
"vae_audio"
|
| 1251 |
+
],
|
| 1252 |
+
"widgets_values_named": {
|
| 1253 |
+
"Constant": "vae_audio"
|
| 1254 |
+
},
|
| 1255 |
+
"color": "#af3535",
|
| 1256 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 1257 |
+
},
|
| 1258 |
+
{
|
| 1259 |
+
"id": 36,
|
| 1260 |
+
"type": "PrimitiveInt",
|
| 1261 |
+
"pos": [
|
| 1262 |
+
3288.91510592369,
|
| 1263 |
+
6382.083130778668
|
| 1264 |
+
],
|
| 1265 |
+
"size": [
|
| 1266 |
+
270,
|
| 1267 |
+
82
|
| 1268 |
+
],
|
| 1269 |
+
"flags": {},
|
| 1270 |
+
"order": 8,
|
| 1271 |
+
"mode": 0,
|
| 1272 |
+
"inputs": [],
|
| 1273 |
+
"outputs": [
|
| 1274 |
+
{
|
| 1275 |
+
"name": "INT",
|
| 1276 |
+
"type": "INT",
|
| 1277 |
+
"links": [
|
| 1278 |
+
38
|
| 1279 |
+
]
|
| 1280 |
+
}
|
| 1281 |
+
],
|
| 1282 |
+
"properties": {
|
| 1283 |
+
"cnr_id": "comfy-core",
|
| 1284 |
+
"ver": "0.34.5",
|
| 1285 |
+
"Node name for S&R": "PrimitiveInt",
|
| 1286 |
+
"ue_properties": {
|
| 1287 |
+
"widget_ue_connectable": {},
|
| 1288 |
+
"input_ue_unconnectable": {},
|
| 1289 |
+
"version": "7.5.1"
|
| 1290 |
+
}
|
| 1291 |
+
},
|
| 1292 |
+
"widgets_values": [
|
| 1293 |
+
2,
|
| 1294 |
+
"increment"
|
| 1295 |
+
],
|
| 1296 |
+
"widgets_values_named": {
|
| 1297 |
+
"value": 2,
|
| 1298 |
+
"fixed": "increment"
|
| 1299 |
+
}
|
| 1300 |
+
}
|
| 1301 |
+
],
|
| 1302 |
+
"links": [
|
| 1303 |
+
[
|
| 1304 |
+
1,
|
| 1305 |
+
2,
|
| 1306 |
+
0,
|
| 1307 |
+
5,
|
| 1308 |
+
0,
|
| 1309 |
+
"MODEL"
|
| 1310 |
+
],
|
| 1311 |
+
[
|
| 1312 |
+
3,
|
| 1313 |
+
2,
|
| 1314 |
+
0,
|
| 1315 |
+
7,
|
| 1316 |
+
0,
|
| 1317 |
+
"MODEL"
|
| 1318 |
+
],
|
| 1319 |
+
[
|
| 1320 |
+
4,
|
| 1321 |
+
6,
|
| 1322 |
+
0,
|
| 1323 |
+
8,
|
| 1324 |
+
0,
|
| 1325 |
+
"NOISE"
|
| 1326 |
+
],
|
| 1327 |
+
[
|
| 1328 |
+
5,
|
| 1329 |
+
5,
|
| 1330 |
+
0,
|
| 1331 |
+
8,
|
| 1332 |
+
1,
|
| 1333 |
+
"GUIDER"
|
| 1334 |
+
],
|
| 1335 |
+
[
|
| 1336 |
+
6,
|
| 1337 |
+
4,
|
| 1338 |
+
0,
|
| 1339 |
+
8,
|
| 1340 |
+
2,
|
| 1341 |
+
"SAMPLER"
|
| 1342 |
+
],
|
| 1343 |
+
[
|
| 1344 |
+
7,
|
| 1345 |
+
7,
|
| 1346 |
+
0,
|
| 1347 |
+
8,
|
| 1348 |
+
3,
|
| 1349 |
+
"SIGMAS"
|
| 1350 |
+
],
|
| 1351 |
+
[
|
| 1352 |
+
9,
|
| 1353 |
+
8,
|
| 1354 |
+
0,
|
| 1355 |
+
10,
|
| 1356 |
+
0,
|
| 1357 |
+
"LATENT"
|
| 1358 |
+
],
|
| 1359 |
+
[
|
| 1360 |
+
10,
|
| 1361 |
+
9,
|
| 1362 |
+
0,
|
| 1363 |
+
10,
|
| 1364 |
+
1,
|
| 1365 |
+
"VAE"
|
| 1366 |
+
],
|
| 1367 |
+
[
|
| 1368 |
+
11,
|
| 1369 |
+
10,
|
| 1370 |
+
0,
|
| 1371 |
+
12,
|
| 1372 |
+
0,
|
| 1373 |
+
"IMAGE"
|
| 1374 |
+
],
|
| 1375 |
+
[
|
| 1376 |
+
12,
|
| 1377 |
+
12,
|
| 1378 |
+
0,
|
| 1379 |
+
13,
|
| 1380 |
+
0,
|
| 1381 |
+
"IMAGE"
|
| 1382 |
+
],
|
| 1383 |
+
[
|
| 1384 |
+
14,
|
| 1385 |
+
11,
|
| 1386 |
+
1,
|
| 1387 |
+
13,
|
| 1388 |
+
4,
|
| 1389 |
+
"FLOAT"
|
| 1390 |
+
],
|
| 1391 |
+
[
|
| 1392 |
+
15,
|
| 1393 |
+
15,
|
| 1394 |
+
5,
|
| 1395 |
+
17,
|
| 1396 |
+
0,
|
| 1397 |
+
"INT"
|
| 1398 |
+
],
|
| 1399 |
+
[
|
| 1400 |
+
16,
|
| 1401 |
+
15,
|
| 1402 |
+
4,
|
| 1403 |
+
18,
|
| 1404 |
+
0,
|
| 1405 |
+
"INT"
|
| 1406 |
+
],
|
| 1407 |
+
[
|
| 1408 |
+
17,
|
| 1409 |
+
15,
|
| 1410 |
+
3,
|
| 1411 |
+
19,
|
| 1412 |
+
0,
|
| 1413 |
+
"INT"
|
| 1414 |
+
],
|
| 1415 |
+
[
|
| 1416 |
+
18,
|
| 1417 |
+
15,
|
| 1418 |
+
0,
|
| 1419 |
+
1,
|
| 1420 |
+
0,
|
| 1421 |
+
"LATENT"
|
| 1422 |
+
],
|
| 1423 |
+
[
|
| 1424 |
+
19,
|
| 1425 |
+
15,
|
| 1426 |
+
1,
|
| 1427 |
+
5,
|
| 1428 |
+
1,
|
| 1429 |
+
"CONDITIONING"
|
| 1430 |
+
],
|
| 1431 |
+
[
|
| 1432 |
+
28,
|
| 1433 |
+
26,
|
| 1434 |
+
0,
|
| 1435 |
+
27,
|
| 1436 |
+
0,
|
| 1437 |
+
"MODEL"
|
| 1438 |
+
],
|
| 1439 |
+
[
|
| 1440 |
+
29,
|
| 1441 |
+
15,
|
| 1442 |
+
0,
|
| 1443 |
+
28,
|
| 1444 |
+
0,
|
| 1445 |
+
"LATENT"
|
| 1446 |
+
],
|
| 1447 |
+
[
|
| 1448 |
+
32,
|
| 1449 |
+
26,
|
| 1450 |
+
1,
|
| 1451 |
+
32,
|
| 1452 |
+
0,
|
| 1453 |
+
"VAE"
|
| 1454 |
+
],
|
| 1455 |
+
[
|
| 1456 |
+
33,
|
| 1457 |
+
26,
|
| 1458 |
+
2,
|
| 1459 |
+
33,
|
| 1460 |
+
0,
|
| 1461 |
+
"VAE"
|
| 1462 |
+
],
|
| 1463 |
+
[
|
| 1464 |
+
34,
|
| 1465 |
+
34,
|
| 1466 |
+
0,
|
| 1467 |
+
28,
|
| 1468 |
+
1,
|
| 1469 |
+
"VAE"
|
| 1470 |
+
],
|
| 1471 |
+
[
|
| 1472 |
+
35,
|
| 1473 |
+
11,
|
| 1474 |
+
1,
|
| 1475 |
+
12,
|
| 1476 |
+
1,
|
| 1477 |
+
"FLOAT"
|
| 1478 |
+
],
|
| 1479 |
+
[
|
| 1480 |
+
36,
|
| 1481 |
+
1,
|
| 1482 |
+
0,
|
| 1483 |
+
8,
|
| 1484 |
+
4,
|
| 1485 |
+
"LATENT"
|
| 1486 |
+
],
|
| 1487 |
+
[
|
| 1488 |
+
37,
|
| 1489 |
+
28,
|
| 1490 |
+
0,
|
| 1491 |
+
13,
|
| 1492 |
+
1,
|
| 1493 |
+
"AUDIO"
|
| 1494 |
+
],
|
| 1495 |
+
[
|
| 1496 |
+
38,
|
| 1497 |
+
36,
|
| 1498 |
+
0,
|
| 1499 |
+
15,
|
| 1500 |
+
0,
|
| 1501 |
+
"INT"
|
| 1502 |
+
]
|
| 1503 |
+
],
|
| 1504 |
+
"groups": [],
|
| 1505 |
+
"definitions": {
|
| 1506 |
+
"subgraphs": [
|
| 1507 |
+
{
|
| 1508 |
+
"id": "deb3547e-1d90-4a4b-8f05-6e17727281b0",
|
| 1509 |
+
"version": 1,
|
| 1510 |
+
"state": {
|
| 1511 |
+
"lastGroupId": 0,
|
| 1512 |
+
"lastNodeId": 36,
|
| 1513 |
+
"lastLinkId": 38,
|
| 1514 |
+
"lastRerouteId": 0
|
| 1515 |
+
},
|
| 1516 |
+
"revision": 0,
|
| 1517 |
+
"config": {},
|
| 1518 |
+
"name": "Model_VDN_Loading",
|
| 1519 |
+
"inputNode": {
|
| 1520 |
+
"id": -10,
|
| 1521 |
+
"bounding": [
|
| 1522 |
+
1512.2050049277864,
|
| 1523 |
+
6045.092780484874,
|
| 1524 |
+
128,
|
| 1525 |
+
48
|
| 1526 |
+
]
|
| 1527 |
+
},
|
| 1528 |
+
"outputNode": {
|
| 1529 |
+
"id": -20,
|
| 1530 |
+
"bounding": [
|
| 1531 |
+
3719.5565366738974,
|
| 1532 |
+
6045.092780484874,
|
| 1533 |
+
128,
|
| 1534 |
+
108
|
| 1535 |
+
]
|
| 1536 |
+
},
|
| 1537 |
+
"inputs": [],
|
| 1538 |
+
"outputs": [
|
| 1539 |
+
{
|
| 1540 |
+
"id": "d6df7459-c732-4567-9bed-8e37206efabe",
|
| 1541 |
+
"name": "MODEL",
|
| 1542 |
+
"type": "MODEL",
|
| 1543 |
+
"linkIds": [
|
| 1544 |
+
27
|
| 1545 |
+
],
|
| 1546 |
+
"pos": [
|
| 1547 |
+
3743.5565366738974,
|
| 1548 |
+
6069.092780484874
|
| 1549 |
+
]
|
| 1550 |
+
},
|
| 1551 |
+
{
|
| 1552 |
+
"id": "0493d6cb-919f-44db-b324-35c212134764",
|
| 1553 |
+
"name": "VAE",
|
| 1554 |
+
"type": "VAE",
|
| 1555 |
+
"linkIds": [
|
| 1556 |
+
30
|
| 1557 |
+
],
|
| 1558 |
+
"pos": [
|
| 1559 |
+
3743.5565366738974,
|
| 1560 |
+
6089.092780484874
|
| 1561 |
+
]
|
| 1562 |
+
},
|
| 1563 |
+
{
|
| 1564 |
+
"id": "cb29645c-2136-4a21-9ddd-04a64e2b232c",
|
| 1565 |
+
"name": "VAE_1",
|
| 1566 |
+
"type": "VAE",
|
| 1567 |
+
"linkIds": [
|
| 1568 |
+
31
|
| 1569 |
+
],
|
| 1570 |
+
"pos": [
|
| 1571 |
+
3743.5565366738974,
|
| 1572 |
+
6109.092780484874
|
| 1573 |
+
]
|
| 1574 |
+
}
|
| 1575 |
+
],
|
| 1576 |
+
"widgets": [],
|
| 1577 |
+
"nodes": [
|
| 1578 |
+
{
|
| 1579 |
+
"id": 23,
|
| 1580 |
+
"type": "UNETLoader",
|
| 1581 |
+
"pos": [
|
| 1582 |
+
1700.2050049277864,
|
| 1583 |
+
6377.496467251863
|
| 1584 |
+
],
|
| 1585 |
+
"size": [
|
| 1586 |
+
648.390625,
|
| 1587 |
+
113.859375
|
| 1588 |
+
],
|
| 1589 |
+
"flags": {},
|
| 1590 |
+
"order": 0,
|
| 1591 |
+
"mode": 0,
|
| 1592 |
+
"inputs": [],
|
| 1593 |
+
"outputs": [
|
| 1594 |
+
{
|
| 1595 |
+
"localized_name": "MODEL",
|
| 1596 |
+
"name": "MODEL",
|
| 1597 |
+
"type": "MODEL",
|
| 1598 |
+
"links": [
|
| 1599 |
+
25
|
| 1600 |
+
]
|
| 1601 |
+
}
|
| 1602 |
+
],
|
| 1603 |
+
"properties": {
|
| 1604 |
+
"cnr_id": "comfy-core",
|
| 1605 |
+
"ver": "0.29.0",
|
| 1606 |
+
"Node name for S&R": "UNETLoader",
|
| 1607 |
+
"ue_properties": {
|
| 1608 |
+
"widget_ue_connectable": {},
|
| 1609 |
+
"version": "7.5.1",
|
| 1610 |
+
"input_ue_unconnectable": {}
|
| 1611 |
+
},
|
| 1612 |
+
"models": [
|
| 1613 |
+
{
|
| 1614 |
+
"name": "minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 1615 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 1616 |
+
"directory": "diffusion_models"
|
| 1617 |
+
}
|
| 1618 |
+
]
|
| 1619 |
+
},
|
| 1620 |
+
"widgets_values": [
|
| 1621 |
+
"minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 1622 |
+
"default"
|
| 1623 |
+
],
|
| 1624 |
+
"widgets_values_named": {
|
| 1625 |
+
"unet_name": "minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 1626 |
+
"weight_dtype": "default"
|
| 1627 |
+
},
|
| 1628 |
+
"ndSuperSelectorEnabled": false,
|
| 1629 |
+
"ndPowerEnabled": false
|
| 1630 |
+
},
|
| 1631 |
+
{
|
| 1632 |
+
"id": 22,
|
| 1633 |
+
"type": "ApplyVDNH3Advanced",
|
| 1634 |
+
"pos": [
|
| 1635 |
+
2431.818086194477,
|
| 1636 |
+
5762.34511632811
|
| 1637 |
+
],
|
| 1638 |
+
"size": [
|
| 1639 |
+
442.609375,
|
| 1640 |
+
477.453125
|
| 1641 |
+
],
|
| 1642 |
+
"flags": {},
|
| 1643 |
+
"order": 3,
|
| 1644 |
+
"mode": 0,
|
| 1645 |
+
"inputs": [
|
| 1646 |
+
{
|
| 1647 |
+
"localized_name": "model",
|
| 1648 |
+
"name": "model",
|
| 1649 |
+
"type": "MODEL",
|
| 1650 |
+
"link": 25
|
| 1651 |
+
}
|
| 1652 |
+
],
|
| 1653 |
+
"outputs": [
|
| 1654 |
+
{
|
| 1655 |
+
"localized_name": "MODEL",
|
| 1656 |
+
"name": "MODEL",
|
| 1657 |
+
"type": "MODEL",
|
| 1658 |
+
"links": [
|
| 1659 |
+
20
|
| 1660 |
+
]
|
| 1661 |
+
}
|
| 1662 |
+
],
|
| 1663 |
+
"properties": {
|
| 1664 |
+
"cnr_id": "comfyui-vdn-h3",
|
| 1665 |
+
"ver": "183f33d8a7b3c6322d83be95ae369251a63b3198",
|
| 1666 |
+
"Node name for S&R": "ApplyVDNH3Advanced",
|
| 1667 |
+
"ue_properties": {
|
| 1668 |
+
"widget_ue_connectable": {},
|
| 1669 |
+
"version": "7.5.1",
|
| 1670 |
+
"input_ue_unconnectable": {}
|
| 1671 |
+
},
|
| 1672 |
+
"aux_id": "Saganaki22/ComfyUI-VDN-H3"
|
| 1673 |
+
},
|
| 1674 |
+
"widgets_values": [
|
| 1675 |
+
"stage-dmd-step-250",
|
| 1676 |
+
true,
|
| 1677 |
+
1,
|
| 1678 |
+
1,
|
| 1679 |
+
"merge",
|
| 1680 |
+
"stream",
|
| 1681 |
+
"off",
|
| 1682 |
+
"grouped",
|
| 1683 |
+
"grouped",
|
| 1684 |
+
1,
|
| 1685 |
+
5,
|
| 1686 |
+
"both",
|
| 1687 |
+
true,
|
| 1688 |
+
true,
|
| 1689 |
+
false
|
| 1690 |
+
],
|
| 1691 |
+
"widgets_values_named": {
|
| 1692 |
+
"vdn_checkpoint": "stage-dmd-step-250",
|
| 1693 |
+
"apply_turbo_adapter": true,
|
| 1694 |
+
"stage_b_strength": 1,
|
| 1695 |
+
"turbo_strength": 1,
|
| 1696 |
+
"lora_mode": "merge",
|
| 1697 |
+
"branch_weights": "stream",
|
| 1698 |
+
"retain_buffers": "off",
|
| 1699 |
+
"verbose": "grouped",
|
| 1700 |
+
"attention_backend": "grouped",
|
| 1701 |
+
"window_radius": 1,
|
| 1702 |
+
"window_chunk": 5,
|
| 1703 |
+
"anchor_frames": "both",
|
| 1704 |
+
"text_state": true,
|
| 1705 |
+
"linear_branch": true,
|
| 1706 |
+
"fast_kernels": false
|
| 1707 |
+
}
|
| 1708 |
+
},
|
| 1709 |
+
{
|
| 1710 |
+
"id": 20,
|
| 1711 |
+
"type": "MiniMaxChunkFeedForward",
|
| 1712 |
+
"pos": [
|
| 1713 |
+
2980.6390337676967,
|
| 1714 |
+
5875.486515660144
|
| 1715 |
+
],
|
| 1716 |
+
"size": [
|
| 1717 |
+
324.1875,
|
| 1718 |
+
113.859375
|
| 1719 |
+
],
|
| 1720 |
+
"flags": {},
|
| 1721 |
+
"order": 4,
|
| 1722 |
+
"mode": 0,
|
| 1723 |
+
"inputs": [
|
| 1724 |
+
{
|
| 1725 |
+
"localized_name": "model",
|
| 1726 |
+
"name": "model",
|
| 1727 |
+
"type": "MODEL",
|
| 1728 |
+
"link": 20
|
| 1729 |
+
}
|
| 1730 |
+
],
|
| 1731 |
+
"outputs": [
|
| 1732 |
+
{
|
| 1733 |
+
"localized_name": "model",
|
| 1734 |
+
"name": "model",
|
| 1735 |
+
"type": "MODEL",
|
| 1736 |
+
"links": [
|
| 1737 |
+
21
|
| 1738 |
+
]
|
| 1739 |
+
}
|
| 1740 |
+
],
|
| 1741 |
+
"properties": {
|
| 1742 |
+
"cnr_id": "comfyui-kjnodes",
|
| 1743 |
+
"ver": "1.5.0",
|
| 1744 |
+
"Node name for S&R": "MiniMaxChunkFeedForward",
|
| 1745 |
+
"ue_properties": {
|
| 1746 |
+
"widget_ue_connectable": {},
|
| 1747 |
+
"input_ue_unconnectable": {},
|
| 1748 |
+
"version": "7.8"
|
| 1749 |
+
}
|
| 1750 |
+
},
|
| 1751 |
+
"widgets_values": [
|
| 1752 |
+
2,
|
| 1753 |
+
4096
|
| 1754 |
+
],
|
| 1755 |
+
"widgets_values_named": {
|
| 1756 |
+
"chunks": 2,
|
| 1757 |
+
"seq_threshold": 4096
|
| 1758 |
+
}
|
| 1759 |
+
},
|
| 1760 |
+
{
|
| 1761 |
+
"id": 21,
|
| 1762 |
+
"type": "ModelPatchTorchSettings",
|
| 1763 |
+
"pos": [
|
| 1764 |
+
3343.6918658984664,
|
| 1765 |
+
5891.365402174691
|
| 1766 |
+
],
|
| 1767 |
+
"size": [
|
| 1768 |
+
312.078125,
|
| 1769 |
+
85.890625
|
| 1770 |
+
],
|
| 1771 |
+
"flags": {
|
| 1772 |
+
"collapsed": false
|
| 1773 |
+
},
|
| 1774 |
+
"order": 5,
|
| 1775 |
+
"mode": 0,
|
| 1776 |
+
"inputs": [
|
| 1777 |
+
{
|
| 1778 |
+
"localized_name": "model",
|
| 1779 |
+
"name": "model",
|
| 1780 |
+
"type": "MODEL",
|
| 1781 |
+
"link": 21
|
| 1782 |
+
}
|
| 1783 |
+
],
|
| 1784 |
+
"outputs": [
|
| 1785 |
+
{
|
| 1786 |
+
"localized_name": "MODEL",
|
| 1787 |
+
"name": "MODEL",
|
| 1788 |
+
"type": "MODEL",
|
| 1789 |
+
"links": [
|
| 1790 |
+
27
|
| 1791 |
+
]
|
| 1792 |
+
}
|
| 1793 |
+
],
|
| 1794 |
+
"properties": {
|
| 1795 |
+
"cnr_id": "comfyui-kjnodes",
|
| 1796 |
+
"ver": "e8e88f7c88e3f6205b122f5de87e69a09fbce5ac",
|
| 1797 |
+
"Node name for S&R": "ModelPatchTorchSettings",
|
| 1798 |
+
"ue_properties": {
|
| 1799 |
+
"widget_ue_connectable": {},
|
| 1800 |
+
"version": "7.5.1",
|
| 1801 |
+
"input_ue_unconnectable": {}
|
| 1802 |
+
}
|
| 1803 |
+
},
|
| 1804 |
+
"widgets_values": [
|
| 1805 |
+
true
|
| 1806 |
+
],
|
| 1807 |
+
"widgets_values_named": {
|
| 1808 |
+
"enable_fp16_accumulation": true
|
| 1809 |
+
}
|
| 1810 |
+
},
|
| 1811 |
+
{
|
| 1812 |
+
"id": 29,
|
| 1813 |
+
"type": "VAELoader",
|
| 1814 |
+
"pos": [
|
| 1815 |
+
3359.1089537220587,
|
| 1816 |
+
6062.769321627355
|
| 1817 |
+
],
|
| 1818 |
+
"size": [
|
| 1819 |
+
270,
|
| 1820 |
+
58
|
| 1821 |
+
],
|
| 1822 |
+
"flags": {},
|
| 1823 |
+
"order": 1,
|
| 1824 |
+
"mode": 0,
|
| 1825 |
+
"inputs": [],
|
| 1826 |
+
"outputs": [
|
| 1827 |
+
{
|
| 1828 |
+
"label": "Vae_Audio",
|
| 1829 |
+
"localized_name": "VAE",
|
| 1830 |
+
"name": "VAE",
|
| 1831 |
+
"type": "VAE",
|
| 1832 |
+
"links": [
|
| 1833 |
+
30
|
| 1834 |
+
]
|
| 1835 |
+
}
|
| 1836 |
+
],
|
| 1837 |
+
"properties": {
|
| 1838 |
+
"cnr_id": "comfy-core",
|
| 1839 |
+
"ver": "0.34.5",
|
| 1840 |
+
"Node name for S&R": "VAELoader",
|
| 1841 |
+
"ue_properties": {
|
| 1842 |
+
"widget_ue_connectable": {},
|
| 1843 |
+
"input_ue_unconnectable": {},
|
| 1844 |
+
"version": "7.5.1"
|
| 1845 |
+
}
|
| 1846 |
+
},
|
| 1847 |
+
"widgets_values": [
|
| 1848 |
+
"minimax_h3_audio_vae_fp32.safetensors"
|
| 1849 |
+
],
|
| 1850 |
+
"widgets_values_named": {
|
| 1851 |
+
"vae_name": "minimax_h3_audio_vae_fp32.safetensors"
|
| 1852 |
+
},
|
| 1853 |
+
"ndSuperSelectorEnabled": false,
|
| 1854 |
+
"ndPowerEnabled": false
|
| 1855 |
+
},
|
| 1856 |
+
{
|
| 1857 |
+
"id": 31,
|
| 1858 |
+
"type": "VAELoader",
|
| 1859 |
+
"pos": [
|
| 1860 |
+
3362.8387747424795,
|
| 1861 |
+
6184.03950060693
|
| 1862 |
+
],
|
| 1863 |
+
"size": [
|
| 1864 |
+
270,
|
| 1865 |
+
58
|
| 1866 |
+
],
|
| 1867 |
+
"flags": {},
|
| 1868 |
+
"order": 2,
|
| 1869 |
+
"mode": 0,
|
| 1870 |
+
"inputs": [],
|
| 1871 |
+
"outputs": [
|
| 1872 |
+
{
|
| 1873 |
+
"label": "VAE_Video",
|
| 1874 |
+
"localized_name": "VAE",
|
| 1875 |
+
"name": "VAE",
|
| 1876 |
+
"type": "VAE",
|
| 1877 |
+
"links": [
|
| 1878 |
+
31
|
| 1879 |
+
]
|
| 1880 |
+
}
|
| 1881 |
+
],
|
| 1882 |
+
"properties": {
|
| 1883 |
+
"cnr_id": "comfy-core",
|
| 1884 |
+
"ver": "0.34.5",
|
| 1885 |
+
"Node name for S&R": "VAELoader",
|
| 1886 |
+
"ue_properties": {
|
| 1887 |
+
"widget_ue_connectable": {},
|
| 1888 |
+
"input_ue_unconnectable": {},
|
| 1889 |
+
"version": "7.5.1"
|
| 1890 |
+
}
|
| 1891 |
+
},
|
| 1892 |
+
"widgets_values": [
|
| 1893 |
+
"minimax_h3_video_vae_int8_convrot.safetensors"
|
| 1894 |
+
],
|
| 1895 |
+
"widgets_values_named": {
|
| 1896 |
+
"vae_name": "minimax_h3_video_vae_int8_convrot.safetensors"
|
| 1897 |
+
},
|
| 1898 |
+
"ndSuperSelectorEnabled": false,
|
| 1899 |
+
"ndPowerEnabled": false
|
| 1900 |
+
}
|
| 1901 |
+
],
|
| 1902 |
+
"groups": [],
|
| 1903 |
+
"links": [
|
| 1904 |
+
{
|
| 1905 |
+
"id": 25,
|
| 1906 |
+
"origin_id": 23,
|
| 1907 |
+
"origin_slot": 0,
|
| 1908 |
+
"target_id": 22,
|
| 1909 |
+
"target_slot": 0,
|
| 1910 |
+
"type": "MODEL"
|
| 1911 |
+
},
|
| 1912 |
+
{
|
| 1913 |
+
"id": 20,
|
| 1914 |
+
"origin_id": 22,
|
| 1915 |
+
"origin_slot": 0,
|
| 1916 |
+
"target_id": 20,
|
| 1917 |
+
"target_slot": 0,
|
| 1918 |
+
"type": "MODEL"
|
| 1919 |
+
},
|
| 1920 |
+
{
|
| 1921 |
+
"id": 21,
|
| 1922 |
+
"origin_id": 20,
|
| 1923 |
+
"origin_slot": 0,
|
| 1924 |
+
"target_id": 21,
|
| 1925 |
+
"target_slot": 0,
|
| 1926 |
+
"type": "MODEL"
|
| 1927 |
+
},
|
| 1928 |
+
{
|
| 1929 |
+
"id": 27,
|
| 1930 |
+
"origin_id": 21,
|
| 1931 |
+
"origin_slot": 0,
|
| 1932 |
+
"target_id": -20,
|
| 1933 |
+
"target_slot": 0,
|
| 1934 |
+
"type": "MODEL"
|
| 1935 |
+
},
|
| 1936 |
+
{
|
| 1937 |
+
"id": 30,
|
| 1938 |
+
"origin_id": 29,
|
| 1939 |
+
"origin_slot": 0,
|
| 1940 |
+
"target_id": -20,
|
| 1941 |
+
"target_slot": 1,
|
| 1942 |
+
"type": "VAE"
|
| 1943 |
+
},
|
| 1944 |
+
{
|
| 1945 |
+
"id": 31,
|
| 1946 |
+
"origin_id": 31,
|
| 1947 |
+
"origin_slot": 0,
|
| 1948 |
+
"target_id": -20,
|
| 1949 |
+
"target_slot": 2,
|
| 1950 |
+
"type": "VAE"
|
| 1951 |
+
}
|
| 1952 |
+
],
|
| 1953 |
+
"extra": {
|
| 1954 |
+
"ue_links": [],
|
| 1955 |
+
"links_added_by_ue": []
|
| 1956 |
+
}
|
| 1957 |
+
}
|
| 1958 |
+
]
|
| 1959 |
+
},
|
| 1960 |
+
"config": {},
|
| 1961 |
+
"extra": {
|
| 1962 |
+
"ue_links": [],
|
| 1963 |
+
"ds": {
|
| 1964 |
+
"scale": 0.9277171243279716,
|
| 1965 |
+
"offset": [
|
| 1966 |
+
-2712.6235131313183,
|
| 1967 |
+
-5254.730090894639
|
| 1968 |
+
]
|
| 1969 |
+
},
|
| 1970 |
+
"links_added_by_ue": [],
|
| 1971 |
+
"frontendVersion": "1.49.6",
|
| 1972 |
+
"VHS_latentpreview": false,
|
| 1973 |
+
"VHS_latentpreviewrate": 0,
|
| 1974 |
+
"VHS_MetadataImage": true,
|
| 1975 |
+
"VHS_KeepIntermediate": true
|
| 1976 |
+
},
|
| 1977 |
+
"version": 0.4
|
| 1978 |
+
}
|
workflow/Minimax_Timeline.json
ADDED
|
@@ -0,0 +1,3192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"id": "42476cc0-ba47-4042-ad72-3802b573afb3",
|
| 3 |
+
"revision": 0,
|
| 4 |
+
"last_node_id": 220,
|
| 5 |
+
"last_link_id": 393,
|
| 6 |
+
"nodes": [
|
| 7 |
+
{
|
| 8 |
+
"id": 92,
|
| 9 |
+
"type": "SaveVideo",
|
| 10 |
+
"pos": [
|
| 11 |
+
1275.5521965719986,
|
| 12 |
+
4499.325535955995
|
| 13 |
+
],
|
| 14 |
+
"size": [
|
| 15 |
+
612.3666583336471,
|
| 16 |
+
1093.0958197921766
|
| 17 |
+
],
|
| 18 |
+
"flags": {},
|
| 19 |
+
"order": 43,
|
| 20 |
+
"mode": 0,
|
| 21 |
+
"inputs": [
|
| 22 |
+
{
|
| 23 |
+
"name": "video",
|
| 24 |
+
"type": "VIDEO",
|
| 25 |
+
"link": 260
|
| 26 |
+
}
|
| 27 |
+
],
|
| 28 |
+
"outputs": [
|
| 29 |
+
{
|
| 30 |
+
"name": "video",
|
| 31 |
+
"type": "VIDEO",
|
| 32 |
+
"links": null
|
| 33 |
+
}
|
| 34 |
+
],
|
| 35 |
+
"properties": {
|
| 36 |
+
"cnr_id": "comfy-core",
|
| 37 |
+
"ver": "0.29.0",
|
| 38 |
+
"Node name for S&R": "SaveVideo",
|
| 39 |
+
"ue_properties": {
|
| 40 |
+
"widget_ue_connectable": {},
|
| 41 |
+
"version": "7.5.1",
|
| 42 |
+
"input_ue_unconnectable": {}
|
| 43 |
+
}
|
| 44 |
+
},
|
| 45 |
+
"widgets_values": [
|
| 46 |
+
"video/MiniMax_H3",
|
| 47 |
+
"auto",
|
| 48 |
+
"auto",
|
| 49 |
+
"auto"
|
| 50 |
+
],
|
| 51 |
+
"widgets_values_named": {
|
| 52 |
+
"filename_prefix": "video/MiniMax_H3",
|
| 53 |
+
"format": "auto",
|
| 54 |
+
"format.codec": "auto",
|
| 55 |
+
"codec": "auto"
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"id": 115,
|
| 60 |
+
"type": "ResolutionSelector",
|
| 61 |
+
"pos": [
|
| 62 |
+
-862.4467856615897,
|
| 63 |
+
5609.97531007646
|
| 64 |
+
],
|
| 65 |
+
"size": [
|
| 66 |
+
248.46875,
|
| 67 |
+
161.828125
|
| 68 |
+
],
|
| 69 |
+
"flags": {},
|
| 70 |
+
"order": 18,
|
| 71 |
+
"mode": 0,
|
| 72 |
+
"showAdvanced": false,
|
| 73 |
+
"inputs": [],
|
| 74 |
+
"outputs": [
|
| 75 |
+
{
|
| 76 |
+
"name": "width",
|
| 77 |
+
"type": "INT",
|
| 78 |
+
"links": [
|
| 79 |
+
285,
|
| 80 |
+
349,
|
| 81 |
+
382
|
| 82 |
+
]
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"name": "height",
|
| 86 |
+
"type": "INT",
|
| 87 |
+
"links": [
|
| 88 |
+
286,
|
| 89 |
+
350,
|
| 90 |
+
383
|
| 91 |
+
]
|
| 92 |
+
}
|
| 93 |
+
],
|
| 94 |
+
"title": "Resolution Selector (Size)",
|
| 95 |
+
"properties": {
|
| 96 |
+
"cnr_id": "comfy-core",
|
| 97 |
+
"ver": "0.29.0",
|
| 98 |
+
"Node name for S&R": "ResolutionSelector",
|
| 99 |
+
"ue_properties": {
|
| 100 |
+
"widget_ue_connectable": {},
|
| 101 |
+
"version": "7.5.1",
|
| 102 |
+
"input_ue_unconnectable": {}
|
| 103 |
+
}
|
| 104 |
+
},
|
| 105 |
+
"widgets_values": [
|
| 106 |
+
"9:16 (Portrait Widescreen)",
|
| 107 |
+
0.1,
|
| 108 |
+
32
|
| 109 |
+
],
|
| 110 |
+
"widgets_values_named": {
|
| 111 |
+
"aspect_ratio": "9:16 (Portrait Widescreen)",
|
| 112 |
+
"megapixels": 0.1,
|
| 113 |
+
"multiple": 32
|
| 114 |
+
},
|
| 115 |
+
"color": "#322",
|
| 116 |
+
"bgcolor": "#533"
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"id": 116,
|
| 120 |
+
"type": "MarkdownNote",
|
| 121 |
+
"pos": [
|
| 122 |
+
-2033.7082424262605,
|
| 123 |
+
4829.138252930259
|
| 124 |
+
],
|
| 125 |
+
"size": [
|
| 126 |
+
450,
|
| 127 |
+
860.71875
|
| 128 |
+
],
|
| 129 |
+
"flags": {},
|
| 130 |
+
"order": 0,
|
| 131 |
+
"mode": 0,
|
| 132 |
+
"inputs": [],
|
| 133 |
+
"outputs": [],
|
| 134 |
+
"title": "Note: MiniMax H3",
|
| 135 |
+
"properties": {
|
| 136 |
+
"ue_properties": {
|
| 137 |
+
"widget_ue_connectable": {},
|
| 138 |
+
"version": "7.5.1",
|
| 139 |
+
"input_ue_unconnectable": {}
|
| 140 |
+
}
|
| 141 |
+
},
|
| 142 |
+
"widgets_values": [
|
| 143 |
+
"## MiniMax H3\n\n[MiniMax H3](https://www.minimax.io/blog/minimax-h3) is MiniMax's general-purpose, omni-modal generation model. It jointly understands text, image, video, and audio, and generates video with **native stereo audio**: voice, sound effects, and music are modeled jointly in a single forward pass, not layered on afterward. Output is up to 2K resolution, 24fps, and up to about 15 seconds.\n\nH3 removes the usual task boundaries between generation modes. Text-to-video, image-to-video, first/last-frame control, and reference-driven generation (character, motion, camera, voice, style) are all handled by one model instead of separate expert pipelines.\n\n## About this workflow\n\nThis template runs the **reference-to-video (ref2va)** task using the `MiniMaxH3ReferenceToVideo` node. It takes any mix of reference images, videos, and standalone audio, and weaves them into the generation to lock in a character's identity, a style, a motion, a camera move, or a voice.\n\n**Key inputs**\n\n- **ref_images / ref_videos / ref_video_audios / ref_audios**: up to 9 reference images, 3 reference videos (each may carry its own paired soundtrack), and 3 standalone reference audio clips\n- **prompt**: reference the inputs by tag, in the exact order they were connected, for example `<Picture 1>`, `<Video 1>`, `<Audio 1>`, then describe the target scene, motion, and audio\n- **ref_image_size**: `match` scales references down to the generation's resolution (faster); `max` keeps up to a 2048px short edge for stronger identity fidelity, at the cost of speed since reference tokens ride along every sampling step\n- **width / height**: set via Resolution Selector. H3's native canvas is a 768px short edge, capped at 768x1344 pixels, rounded to a multiple of 32\n- **duration (seconds)**: converted to a valid frame `length` by the Math Expression node, snapping up to the model's 17-frame-per-block (17k+5) grid at 24fps\n\n**Sampling and decode**\n\n- Sampler: `res_multistep`. `beta` or `normal` scheduler tends to outperform `simple` for reference-heavy prompts like this one\n- The sampler's joint audio+video `LATENT` output feeds directly into both `VAEDecode` (video, `minimax_h3_video_vae_fp16`) and `VAEDecodeAudio` (audio, `minimax_h3_audio_vae_fp32`); each decode node automatically pulls its own half out of the packed latent. `CreateVideo` then muxes the two into a single MP4 with synced sound\n- The diffusion model here is `minimax_h3_ref2va_pruned_int8_convrot.safetensors`, a different set of weights from the `fl2va` model used by the t2v/i2v templates\n\nRef2va's output is very sensitive to prompt wording; matching the reference tags precisely and being explicit about which reference drives which part of the shot tends to work best."
|
| 144 |
+
],
|
| 145 |
+
"widgets_values_named": {
|
| 146 |
+
"text": "## MiniMax H3\n\n[MiniMax H3](https://www.minimax.io/blog/minimax-h3) is MiniMax's general-purpose, omni-modal generation model. It jointly understands text, image, video, and audio, and generates video with **native stereo audio**: voice, sound effects, and music are modeled jointly in a single forward pass, not layered on afterward. Output is up to 2K resolution, 24fps, and up to about 15 seconds.\n\nH3 removes the usual task boundaries between generation modes. Text-to-video, image-to-video, first/last-frame control, and reference-driven generation (character, motion, camera, voice, style) are all handled by one model instead of separate expert pipelines.\n\n## About this workflow\n\nThis template runs the **reference-to-video (ref2va)** task using the `MiniMaxH3ReferenceToVideo` node. It takes any mix of reference images, videos, and standalone audio, and weaves them into the generation to lock in a character's identity, a style, a motion, a camera move, or a voice.\n\n**Key inputs**\n\n- **ref_images / ref_videos / ref_video_audios / ref_audios**: up to 9 reference images, 3 reference videos (each may carry its own paired soundtrack), and 3 standalone reference audio clips\n- **prompt**: reference the inputs by tag, in the exact order they were connected, for example `<Picture 1>`, `<Video 1>`, `<Audio 1>`, then describe the target scene, motion, and audio\n- **ref_image_size**: `match` scales references down to the generation's resolution (faster); `max` keeps up to a 2048px short edge for stronger identity fidelity, at the cost of speed since reference tokens ride along every sampling step\n- **width / height**: set via Resolution Selector. H3's native canvas is a 768px short edge, capped at 768x1344 pixels, rounded to a multiple of 32\n- **duration (seconds)**: converted to a valid frame `length` by the Math Expression node, snapping up to the model's 17-frame-per-block (17k+5) grid at 24fps\n\n**Sampling and decode**\n\n- Sampler: `res_multistep`. `beta` or `normal` scheduler tends to outperform `simple` for reference-heavy prompts like this one\n- The sampler's joint audio+video `LATENT` output feeds directly into both `VAEDecode` (video, `minimax_h3_video_vae_fp16`) and `VAEDecodeAudio` (audio, `minimax_h3_audio_vae_fp32`); each decode node automatically pulls its own half out of the packed latent. `CreateVideo` then muxes the two into a single MP4 with synced sound\n- The diffusion model here is `minimax_h3_ref2va_pruned_int8_convrot.safetensors`, a different set of weights from the `fl2va` model used by the t2v/i2v templates\n\nRef2va's output is very sensitive to prompt wording; matching the reference tags precisely and being explicit about which reference drives which part of the shot tends to work best."
|
| 147 |
+
},
|
| 148 |
+
"color": "#222",
|
| 149 |
+
"bgcolor": "#000"
|
| 150 |
+
},
|
| 151 |
+
{
|
| 152 |
+
"id": 117,
|
| 153 |
+
"type": "MarkdownNote",
|
| 154 |
+
"pos": [
|
| 155 |
+
-2500,
|
| 156 |
+
4850
|
| 157 |
+
],
|
| 158 |
+
"size": [
|
| 159 |
+
440,
|
| 160 |
+
740
|
| 161 |
+
],
|
| 162 |
+
"flags": {},
|
| 163 |
+
"order": 1,
|
| 164 |
+
"mode": 0,
|
| 165 |
+
"inputs": [],
|
| 166 |
+
"outputs": [],
|
| 167 |
+
"title": "Note: Model Links",
|
| 168 |
+
"properties": {
|
| 169 |
+
"ue_properties": {
|
| 170 |
+
"widget_ue_connectable": {},
|
| 171 |
+
"version": "7.5.1",
|
| 172 |
+
"input_ue_unconnectable": {}
|
| 173 |
+
}
|
| 174 |
+
},
|
| 175 |
+
"widgets_values": [
|
| 176 |
+
"## Model Links\n\n**vae**\n\n- [minimax_h3_video_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors)\n- [minimax_h3_audio_vae_fp32.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors)\n\n**diffusion_models**\n\n- [minimax_h3_ref2va_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_32b_minimax_h3_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ ├── minimax_h3_video_vae_fp16.safetensors\n│ │ └── minimax_h3_audio_vae_fp32.safetensors\n│ ├── 📂 diffusion_models/\n│ │ └── minimax_h3_ref2va_pruned_int8_convrot.safetensors\n│ └── 📂 text_encoders/\n│ └── qwen3vl_32b_minimax_h3_int8_convrot.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
|
| 177 |
+
],
|
| 178 |
+
"widgets_values_named": {
|
| 179 |
+
"text": "## Model Links\n\n**vae**\n\n- [minimax_h3_video_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors)\n- [minimax_h3_audio_vae_fp32.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors)\n\n**diffusion_models**\n\n- [minimax_h3_ref2va_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors)\n\n**text_encoders**\n\n- [qwen3vl_32b_minimax_h3_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors)\n\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ ├── 📂 vae/\n│ │ ├── minimax_h3_video_vae_fp16.safetensors\n│ │ └── minimax_h3_audio_vae_fp32.safetensors\n│ ├── 📂 diffusion_models/\n│ │ └── minimax_h3_ref2va_pruned_int8_convrot.safetensors\n│ └── 📂 text_encoders/\n│ └── qwen3vl_32b_minimax_h3_int8_convrot.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
|
| 180 |
+
},
|
| 181 |
+
"color": "#222",
|
| 182 |
+
"bgcolor": "#000"
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"id": 119,
|
| 186 |
+
"type": "VAELoader",
|
| 187 |
+
"pos": [
|
| 188 |
+
-1494.30411371666,
|
| 189 |
+
5272.8694091444395
|
| 190 |
+
],
|
| 191 |
+
"size": [
|
| 192 |
+
640,
|
| 193 |
+
85.890625
|
| 194 |
+
],
|
| 195 |
+
"flags": {},
|
| 196 |
+
"order": 2,
|
| 197 |
+
"mode": 0,
|
| 198 |
+
"inputs": [],
|
| 199 |
+
"outputs": [
|
| 200 |
+
{
|
| 201 |
+
"name": "VAE",
|
| 202 |
+
"type": "VAE",
|
| 203 |
+
"links": [
|
| 204 |
+
251,
|
| 205 |
+
347
|
| 206 |
+
]
|
| 207 |
+
}
|
| 208 |
+
],
|
| 209 |
+
"properties": {
|
| 210 |
+
"cnr_id": "comfy-core",
|
| 211 |
+
"ver": "0.29.0",
|
| 212 |
+
"Node name for S&R": "VAELoader",
|
| 213 |
+
"models": [
|
| 214 |
+
{
|
| 215 |
+
"name": "minimax_h3_video_vae_fp16.safetensors",
|
| 216 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors",
|
| 217 |
+
"directory": "vae"
|
| 218 |
+
}
|
| 219 |
+
],
|
| 220 |
+
"ue_properties": {
|
| 221 |
+
"widget_ue_connectable": {},
|
| 222 |
+
"version": "7.5.1",
|
| 223 |
+
"input_ue_unconnectable": {}
|
| 224 |
+
}
|
| 225 |
+
},
|
| 226 |
+
"widgets_values": [
|
| 227 |
+
"minimax_h3_video_vae_int8_convrot.safetensors"
|
| 228 |
+
],
|
| 229 |
+
"widgets_values_named": {
|
| 230 |
+
"vae_name": "minimax_h3_video_vae_int8_convrot.safetensors"
|
| 231 |
+
},
|
| 232 |
+
"ndSuperSelectorEnabled": false,
|
| 233 |
+
"ndPowerEnabled": false
|
| 234 |
+
},
|
| 235 |
+
{
|
| 236 |
+
"id": 120,
|
| 237 |
+
"type": "VAELoader",
|
| 238 |
+
"pos": [
|
| 239 |
+
-1502.0675653264077,
|
| 240 |
+
5390.29777908046
|
| 241 |
+
],
|
| 242 |
+
"size": [
|
| 243 |
+
650,
|
| 244 |
+
85.890625
|
| 245 |
+
],
|
| 246 |
+
"flags": {},
|
| 247 |
+
"order": 3,
|
| 248 |
+
"mode": 0,
|
| 249 |
+
"inputs": [],
|
| 250 |
+
"outputs": [
|
| 251 |
+
{
|
| 252 |
+
"name": "VAE",
|
| 253 |
+
"type": "VAE",
|
| 254 |
+
"links": [
|
| 255 |
+
250,
|
| 256 |
+
348
|
| 257 |
+
]
|
| 258 |
+
}
|
| 259 |
+
],
|
| 260 |
+
"properties": {
|
| 261 |
+
"cnr_id": "comfy-core",
|
| 262 |
+
"ver": "0.29.0",
|
| 263 |
+
"Node name for S&R": "VAELoader",
|
| 264 |
+
"models": [
|
| 265 |
+
{
|
| 266 |
+
"name": "minimax_h3_audio_vae_fp32.safetensors",
|
| 267 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors",
|
| 268 |
+
"directory": "vae"
|
| 269 |
+
}
|
| 270 |
+
],
|
| 271 |
+
"ue_properties": {
|
| 272 |
+
"widget_ue_connectable": {},
|
| 273 |
+
"version": "7.5.1",
|
| 274 |
+
"input_ue_unconnectable": {}
|
| 275 |
+
}
|
| 276 |
+
},
|
| 277 |
+
"widgets_values": [
|
| 278 |
+
"minimax_h3_audio_vae_fp32.safetensors"
|
| 279 |
+
],
|
| 280 |
+
"widgets_values_named": {
|
| 281 |
+
"vae_name": "minimax_h3_audio_vae_fp32.safetensors"
|
| 282 |
+
},
|
| 283 |
+
"ndSuperSelectorEnabled": false,
|
| 284 |
+
"ndPowerEnabled": false
|
| 285 |
+
},
|
| 286 |
+
{
|
| 287 |
+
"id": 121,
|
| 288 |
+
"type": "VAEDecodeAudio",
|
| 289 |
+
"pos": [
|
| 290 |
+
914.7436379821778,
|
| 291 |
+
5253.488956759807
|
| 292 |
+
],
|
| 293 |
+
"size": [
|
| 294 |
+
230,
|
| 295 |
+
77.921875
|
| 296 |
+
],
|
| 297 |
+
"flags": {
|
| 298 |
+
"collapsed": false
|
| 299 |
+
},
|
| 300 |
+
"order": 38,
|
| 301 |
+
"mode": 0,
|
| 302 |
+
"inputs": [
|
| 303 |
+
{
|
| 304 |
+
"name": "samples",
|
| 305 |
+
"type": "LATENT",
|
| 306 |
+
"link": 281
|
| 307 |
+
},
|
| 308 |
+
{
|
| 309 |
+
"name": "vae",
|
| 310 |
+
"type": "VAE",
|
| 311 |
+
"link": 250
|
| 312 |
+
}
|
| 313 |
+
],
|
| 314 |
+
"outputs": [
|
| 315 |
+
{
|
| 316 |
+
"name": "AUDIO",
|
| 317 |
+
"type": "AUDIO",
|
| 318 |
+
"links": [
|
| 319 |
+
328,
|
| 320 |
+
373
|
| 321 |
+
]
|
| 322 |
+
}
|
| 323 |
+
],
|
| 324 |
+
"properties": {
|
| 325 |
+
"cnr_id": "comfy-core",
|
| 326 |
+
"ver": "0.29.0",
|
| 327 |
+
"Node name for S&R": "VAEDecodeAudio",
|
| 328 |
+
"ue_properties": {
|
| 329 |
+
"widget_ue_connectable": {},
|
| 330 |
+
"version": "7.5.1",
|
| 331 |
+
"input_ue_unconnectable": {}
|
| 332 |
+
}
|
| 333 |
+
}
|
| 334 |
+
},
|
| 335 |
+
{
|
| 336 |
+
"id": 122,
|
| 337 |
+
"type": "VAEDecode",
|
| 338 |
+
"pos": [
|
| 339 |
+
916.1098723933795,
|
| 340 |
+
5097.97485199241
|
| 341 |
+
],
|
| 342 |
+
"size": [
|
| 343 |
+
230,
|
| 344 |
+
77.921875
|
| 345 |
+
],
|
| 346 |
+
"flags": {
|
| 347 |
+
"collapsed": false
|
| 348 |
+
},
|
| 349 |
+
"order": 37,
|
| 350 |
+
"mode": 0,
|
| 351 |
+
"inputs": [
|
| 352 |
+
{
|
| 353 |
+
"name": "samples",
|
| 354 |
+
"type": "LATENT",
|
| 355 |
+
"link": 280
|
| 356 |
+
},
|
| 357 |
+
{
|
| 358 |
+
"name": "vae",
|
| 359 |
+
"type": "VAE",
|
| 360 |
+
"link": 251
|
| 361 |
+
}
|
| 362 |
+
],
|
| 363 |
+
"outputs": [
|
| 364 |
+
{
|
| 365 |
+
"name": "IMAGE",
|
| 366 |
+
"type": "IMAGE",
|
| 367 |
+
"links": [
|
| 368 |
+
258
|
| 369 |
+
]
|
| 370 |
+
}
|
| 371 |
+
],
|
| 372 |
+
"properties": {
|
| 373 |
+
"cnr_id": "comfy-core",
|
| 374 |
+
"ver": "0.29.0",
|
| 375 |
+
"Node name for S&R": "VAEDecode",
|
| 376 |
+
"ue_properties": {
|
| 377 |
+
"widget_ue_connectable": {},
|
| 378 |
+
"version": "7.5.1",
|
| 379 |
+
"input_ue_unconnectable": {}
|
| 380 |
+
}
|
| 381 |
+
}
|
| 382 |
+
},
|
| 383 |
+
{
|
| 384 |
+
"id": 124,
|
| 385 |
+
"type": "BasicScheduler",
|
| 386 |
+
"pos": [
|
| 387 |
+
160.77997741238457,
|
| 388 |
+
5312.837864849799
|
| 389 |
+
],
|
| 390 |
+
"size": [
|
| 391 |
+
348.90625,
|
| 392 |
+
149.625
|
| 393 |
+
],
|
| 394 |
+
"flags": {},
|
| 395 |
+
"order": 34,
|
| 396 |
+
"mode": 0,
|
| 397 |
+
"inputs": [
|
| 398 |
+
{
|
| 399 |
+
"name": "model",
|
| 400 |
+
"type": "MODEL",
|
| 401 |
+
"link": 358
|
| 402 |
+
}
|
| 403 |
+
],
|
| 404 |
+
"outputs": [
|
| 405 |
+
{
|
| 406 |
+
"name": "SIGMAS",
|
| 407 |
+
"type": "SIGMAS",
|
| 408 |
+
"links": [
|
| 409 |
+
256
|
| 410 |
+
]
|
| 411 |
+
}
|
| 412 |
+
],
|
| 413 |
+
"properties": {
|
| 414 |
+
"cnr_id": "comfy-core",
|
| 415 |
+
"ver": "0.29.0",
|
| 416 |
+
"Node name for S&R": "BasicScheduler",
|
| 417 |
+
"ue_properties": {
|
| 418 |
+
"widget_ue_connectable": {},
|
| 419 |
+
"version": "7.5.1",
|
| 420 |
+
"input_ue_unconnectable": {}
|
| 421 |
+
}
|
| 422 |
+
},
|
| 423 |
+
"widgets_values": [
|
| 424 |
+
"simple",
|
| 425 |
+
8,
|
| 426 |
+
1
|
| 427 |
+
],
|
| 428 |
+
"widgets_values_named": {
|
| 429 |
+
"scheduler": "simple",
|
| 430 |
+
"steps": 8,
|
| 431 |
+
"denoise": 1
|
| 432 |
+
}
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"id": 125,
|
| 436 |
+
"type": "SamplerCustomAdvanced",
|
| 437 |
+
"pos": [
|
| 438 |
+
556.8556745238828,
|
| 439 |
+
4933.173657183853
|
| 440 |
+
],
|
| 441 |
+
"size": [
|
| 442 |
+
252.546875,
|
| 443 |
+
389.84375
|
| 444 |
+
],
|
| 445 |
+
"flags": {},
|
| 446 |
+
"order": 36,
|
| 447 |
+
"mode": 0,
|
| 448 |
+
"inputs": [
|
| 449 |
+
{
|
| 450 |
+
"name": "noise",
|
| 451 |
+
"type": "NOISE",
|
| 452 |
+
"link": 253
|
| 453 |
+
},
|
| 454 |
+
{
|
| 455 |
+
"name": "guider",
|
| 456 |
+
"type": "GUIDER",
|
| 457 |
+
"link": 254
|
| 458 |
+
},
|
| 459 |
+
{
|
| 460 |
+
"name": "sampler",
|
| 461 |
+
"type": "SAMPLER",
|
| 462 |
+
"link": 341
|
| 463 |
+
},
|
| 464 |
+
{
|
| 465 |
+
"name": "sigmas",
|
| 466 |
+
"type": "SIGMAS",
|
| 467 |
+
"link": 256
|
| 468 |
+
},
|
| 469 |
+
{
|
| 470 |
+
"name": "latent_image",
|
| 471 |
+
"type": "LATENT",
|
| 472 |
+
"link": 345
|
| 473 |
+
}
|
| 474 |
+
],
|
| 475 |
+
"outputs": [
|
| 476 |
+
{
|
| 477 |
+
"name": "output",
|
| 478 |
+
"type": "LATENT",
|
| 479 |
+
"links": [
|
| 480 |
+
280,
|
| 481 |
+
281,
|
| 482 |
+
378,
|
| 483 |
+
391
|
| 484 |
+
]
|
| 485 |
+
},
|
| 486 |
+
{
|
| 487 |
+
"name": "denoised_output",
|
| 488 |
+
"type": "LATENT",
|
| 489 |
+
"links": []
|
| 490 |
+
}
|
| 491 |
+
],
|
| 492 |
+
"properties": {
|
| 493 |
+
"cnr_id": "comfy-core",
|
| 494 |
+
"ver": "0.29.0",
|
| 495 |
+
"Node name for S&R": "SamplerCustomAdvanced",
|
| 496 |
+
"ue_properties": {
|
| 497 |
+
"widget_ue_connectable": {},
|
| 498 |
+
"version": "7.5.1",
|
| 499 |
+
"input_ue_unconnectable": {}
|
| 500 |
+
}
|
| 501 |
+
}
|
| 502 |
+
},
|
| 503 |
+
{
|
| 504 |
+
"id": 126,
|
| 505 |
+
"type": "BasicGuider",
|
| 506 |
+
"pos": [
|
| 507 |
+
156.29100926618642,
|
| 508 |
+
5074.271224643126
|
| 509 |
+
],
|
| 510 |
+
"size": [
|
| 511 |
+
360,
|
| 512 |
+
77.921875
|
| 513 |
+
],
|
| 514 |
+
"flags": {},
|
| 515 |
+
"order": 33,
|
| 516 |
+
"mode": 0,
|
| 517 |
+
"inputs": [
|
| 518 |
+
{
|
| 519 |
+
"name": "model",
|
| 520 |
+
"type": "MODEL",
|
| 521 |
+
"link": 357
|
| 522 |
+
},
|
| 523 |
+
{
|
| 524 |
+
"name": "conditioning",
|
| 525 |
+
"type": "CONDITIONING",
|
| 526 |
+
"link": 344
|
| 527 |
+
}
|
| 528 |
+
],
|
| 529 |
+
"outputs": [
|
| 530 |
+
{
|
| 531 |
+
"name": "GUIDER",
|
| 532 |
+
"type": "GUIDER",
|
| 533 |
+
"links": [
|
| 534 |
+
254
|
| 535 |
+
]
|
| 536 |
+
}
|
| 537 |
+
],
|
| 538 |
+
"properties": {
|
| 539 |
+
"cnr_id": "comfy-core",
|
| 540 |
+
"ver": "0.29.0",
|
| 541 |
+
"Node name for S&R": "BasicGuider",
|
| 542 |
+
"ue_properties": {
|
| 543 |
+
"widget_ue_connectable": {},
|
| 544 |
+
"version": "7.5.1",
|
| 545 |
+
"input_ue_unconnectable": {}
|
| 546 |
+
}
|
| 547 |
+
}
|
| 548 |
+
},
|
| 549 |
+
{
|
| 550 |
+
"id": 127,
|
| 551 |
+
"type": "UNETLoader",
|
| 552 |
+
"pos": [
|
| 553 |
+
-1503.0984969025762,
|
| 554 |
+
4941.480443405995
|
| 555 |
+
],
|
| 556 |
+
"size": [
|
| 557 |
+
648.390625,
|
| 558 |
+
113.859375
|
| 559 |
+
],
|
| 560 |
+
"flags": {},
|
| 561 |
+
"order": 4,
|
| 562 |
+
"mode": 0,
|
| 563 |
+
"inputs": [],
|
| 564 |
+
"outputs": [
|
| 565 |
+
{
|
| 566 |
+
"name": "MODEL",
|
| 567 |
+
"type": "MODEL",
|
| 568 |
+
"links": [
|
| 569 |
+
332
|
| 570 |
+
]
|
| 571 |
+
}
|
| 572 |
+
],
|
| 573 |
+
"properties": {
|
| 574 |
+
"cnr_id": "comfy-core",
|
| 575 |
+
"ver": "0.29.0",
|
| 576 |
+
"Node name for S&R": "UNETLoader",
|
| 577 |
+
"models": [
|
| 578 |
+
{
|
| 579 |
+
"name": "minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 580 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 581 |
+
"directory": "diffusion_models"
|
| 582 |
+
}
|
| 583 |
+
],
|
| 584 |
+
"ue_properties": {
|
| 585 |
+
"widget_ue_connectable": {},
|
| 586 |
+
"version": "7.5.1",
|
| 587 |
+
"input_ue_unconnectable": {}
|
| 588 |
+
}
|
| 589 |
+
},
|
| 590 |
+
"widgets_values": [
|
| 591 |
+
"minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 592 |
+
"default"
|
| 593 |
+
],
|
| 594 |
+
"widgets_values_named": {
|
| 595 |
+
"unet_name": "minimax_h3_ref2va_pruned_int8_convrot.safetensors",
|
| 596 |
+
"weight_dtype": "default"
|
| 597 |
+
},
|
| 598 |
+
"ndSuperSelectorEnabled": false,
|
| 599 |
+
"ndPowerEnabled": false
|
| 600 |
+
},
|
| 601 |
+
{
|
| 602 |
+
"id": 128,
|
| 603 |
+
"type": "CLIPLoader",
|
| 604 |
+
"pos": [
|
| 605 |
+
-1495.9462293764273,
|
| 606 |
+
5091.377600569795
|
| 607 |
+
],
|
| 608 |
+
"size": [
|
| 609 |
+
640,
|
| 610 |
+
141.828125
|
| 611 |
+
],
|
| 612 |
+
"flags": {},
|
| 613 |
+
"order": 5,
|
| 614 |
+
"mode": 0,
|
| 615 |
+
"inputs": [],
|
| 616 |
+
"outputs": [
|
| 617 |
+
{
|
| 618 |
+
"name": "CLIP",
|
| 619 |
+
"type": "CLIP",
|
| 620 |
+
"links": [
|
| 621 |
+
346
|
| 622 |
+
]
|
| 623 |
+
}
|
| 624 |
+
],
|
| 625 |
+
"properties": {
|
| 626 |
+
"cnr_id": "comfy-core",
|
| 627 |
+
"ver": "0.29.0",
|
| 628 |
+
"Node name for S&R": "CLIPLoader",
|
| 629 |
+
"models": [
|
| 630 |
+
{
|
| 631 |
+
"name": "qwen3vl_32b_minimax_h3_int8_convrot.safetensors",
|
| 632 |
+
"url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors",
|
| 633 |
+
"directory": "text_encoders"
|
| 634 |
+
}
|
| 635 |
+
],
|
| 636 |
+
"ue_properties": {
|
| 637 |
+
"widget_ue_connectable": {},
|
| 638 |
+
"version": "7.5.1",
|
| 639 |
+
"input_ue_unconnectable": {}
|
| 640 |
+
}
|
| 641 |
+
},
|
| 642 |
+
"widgets_values": [
|
| 643 |
+
"qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 644 |
+
"minimax",
|
| 645 |
+
"default"
|
| 646 |
+
],
|
| 647 |
+
"widgets_values_named": {
|
| 648 |
+
"clip_name": "qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
|
| 649 |
+
"type": "minimax",
|
| 650 |
+
"device": "default"
|
| 651 |
+
},
|
| 652 |
+
"ndSuperSelectorEnabled": false,
|
| 653 |
+
"ndPowerEnabled": false
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"id": 129,
|
| 657 |
+
"type": "RandomNoise",
|
| 658 |
+
"pos": [
|
| 659 |
+
156.29100926618642,
|
| 660 |
+
4934.271224643126
|
| 661 |
+
],
|
| 662 |
+
"size": [
|
| 663 |
+
360,
|
| 664 |
+
90
|
| 665 |
+
],
|
| 666 |
+
"flags": {},
|
| 667 |
+
"order": 22,
|
| 668 |
+
"mode": 0,
|
| 669 |
+
"inputs": [
|
| 670 |
+
{
|
| 671 |
+
"name": "noise_seed",
|
| 672 |
+
"type": "INT",
|
| 673 |
+
"widget": {
|
| 674 |
+
"name": "noise_seed"
|
| 675 |
+
},
|
| 676 |
+
"link": 389
|
| 677 |
+
}
|
| 678 |
+
],
|
| 679 |
+
"outputs": [
|
| 680 |
+
{
|
| 681 |
+
"name": "NOISE",
|
| 682 |
+
"type": "NOISE",
|
| 683 |
+
"links": [
|
| 684 |
+
253
|
| 685 |
+
]
|
| 686 |
+
}
|
| 687 |
+
],
|
| 688 |
+
"properties": {
|
| 689 |
+
"cnr_id": "comfy-core",
|
| 690 |
+
"ver": "0.29.0",
|
| 691 |
+
"Node name for S&R": "RandomNoise",
|
| 692 |
+
"ue_properties": {
|
| 693 |
+
"widget_ue_connectable": {},
|
| 694 |
+
"version": "7.5.1",
|
| 695 |
+
"input_ue_unconnectable": {}
|
| 696 |
+
}
|
| 697 |
+
},
|
| 698 |
+
"widgets_values": [
|
| 699 |
+
4244,
|
| 700 |
+
"increment"
|
| 701 |
+
],
|
| 702 |
+
"widgets_values_named": {
|
| 703 |
+
"noise_seed": 4244,
|
| 704 |
+
"control_after_generate": "increment"
|
| 705 |
+
}
|
| 706 |
+
},
|
| 707 |
+
{
|
| 708 |
+
"id": 130,
|
| 709 |
+
"type": "CreateVideo",
|
| 710 |
+
"pos": [
|
| 711 |
+
1230.4944002147352,
|
| 712 |
+
4911.021740537447
|
| 713 |
+
],
|
| 714 |
+
"size": [
|
| 715 |
+
270,
|
| 716 |
+
161.828125
|
| 717 |
+
],
|
| 718 |
+
"flags": {},
|
| 719 |
+
"order": 40,
|
| 720 |
+
"mode": 0,
|
| 721 |
+
"inputs": [
|
| 722 |
+
{
|
| 723 |
+
"name": "images",
|
| 724 |
+
"type": "IMAGE",
|
| 725 |
+
"link": 258
|
| 726 |
+
},
|
| 727 |
+
{
|
| 728 |
+
"name": "audio",
|
| 729 |
+
"shape": 7,
|
| 730 |
+
"type": "AUDIO",
|
| 731 |
+
"link": 328
|
| 732 |
+
}
|
| 733 |
+
],
|
| 734 |
+
"outputs": [
|
| 735 |
+
{
|
| 736 |
+
"name": "VIDEO",
|
| 737 |
+
"type": "VIDEO",
|
| 738 |
+
"links": [
|
| 739 |
+
260,
|
| 740 |
+
392
|
| 741 |
+
]
|
| 742 |
+
}
|
| 743 |
+
],
|
| 744 |
+
"properties": {
|
| 745 |
+
"cnr_id": "comfy-core",
|
| 746 |
+
"ver": "0.29.0",
|
| 747 |
+
"Node name for S&R": "CreateVideo",
|
| 748 |
+
"ue_properties": {
|
| 749 |
+
"widget_ue_connectable": {},
|
| 750 |
+
"version": "7.5.1",
|
| 751 |
+
"input_ue_unconnectable": {}
|
| 752 |
+
}
|
| 753 |
+
},
|
| 754 |
+
"widgets_values": [
|
| 755 |
+
24,
|
| 756 |
+
8,
|
| 757 |
+
"sRGB"
|
| 758 |
+
],
|
| 759 |
+
"widgets_values_named": {
|
| 760 |
+
"fps": 24,
|
| 761 |
+
"bit_depth": 8,
|
| 762 |
+
"color_space": "sRGB"
|
| 763 |
+
}
|
| 764 |
+
},
|
| 765 |
+
{
|
| 766 |
+
"id": 144,
|
| 767 |
+
"type": "easy showAnything",
|
| 768 |
+
"pos": [
|
| 769 |
+
-1493.8902038554618,
|
| 770 |
+
5927.232535398474
|
| 771 |
+
],
|
| 772 |
+
"size": [
|
| 773 |
+
225,
|
| 774 |
+
125.890625
|
| 775 |
+
],
|
| 776 |
+
"flags": {},
|
| 777 |
+
"order": 23,
|
| 778 |
+
"mode": 0,
|
| 779 |
+
"inputs": [
|
| 780 |
+
{
|
| 781 |
+
"name": "anything",
|
| 782 |
+
"shape": 7,
|
| 783 |
+
"type": "*",
|
| 784 |
+
"link": 285
|
| 785 |
+
}
|
| 786 |
+
],
|
| 787 |
+
"outputs": [
|
| 788 |
+
{
|
| 789 |
+
"name": "output",
|
| 790 |
+
"type": "*",
|
| 791 |
+
"links": null
|
| 792 |
+
}
|
| 793 |
+
],
|
| 794 |
+
"properties": {
|
| 795 |
+
"cnr_id": "comfyui-easy-use",
|
| 796 |
+
"ver": "5618a748c14858a6e95a583baa28bb7c8da7976a",
|
| 797 |
+
"Node name for S&R": "easy showAnything",
|
| 798 |
+
"ue_properties": {
|
| 799 |
+
"widget_ue_connectable": {},
|
| 800 |
+
"version": "7.5.1",
|
| 801 |
+
"input_ue_unconnectable": {}
|
| 802 |
+
}
|
| 803 |
+
},
|
| 804 |
+
"widgets_values": [
|
| 805 |
+
"256"
|
| 806 |
+
],
|
| 807 |
+
"widgets_values_named": {
|
| 808 |
+
"text": "256"
|
| 809 |
+
}
|
| 810 |
+
},
|
| 811 |
+
{
|
| 812 |
+
"id": 145,
|
| 813 |
+
"type": "easy showAnything",
|
| 814 |
+
"pos": [
|
| 815 |
+
-1245.9659302340724,
|
| 816 |
+
5936.131811630934
|
| 817 |
+
],
|
| 818 |
+
"size": [
|
| 819 |
+
225,
|
| 820 |
+
125.890625
|
| 821 |
+
],
|
| 822 |
+
"flags": {},
|
| 823 |
+
"order": 25,
|
| 824 |
+
"mode": 0,
|
| 825 |
+
"inputs": [
|
| 826 |
+
{
|
| 827 |
+
"name": "anything",
|
| 828 |
+
"shape": 7,
|
| 829 |
+
"type": "*",
|
| 830 |
+
"link": 286
|
| 831 |
+
}
|
| 832 |
+
],
|
| 833 |
+
"outputs": [
|
| 834 |
+
{
|
| 835 |
+
"name": "output",
|
| 836 |
+
"type": "*",
|
| 837 |
+
"links": null
|
| 838 |
+
}
|
| 839 |
+
],
|
| 840 |
+
"properties": {
|
| 841 |
+
"cnr_id": "comfyui-easy-use",
|
| 842 |
+
"ver": "5618a748c14858a6e95a583baa28bb7c8da7976a",
|
| 843 |
+
"Node name for S&R": "easy showAnything",
|
| 844 |
+
"ue_properties": {
|
| 845 |
+
"widget_ue_connectable": {},
|
| 846 |
+
"version": "7.5.1",
|
| 847 |
+
"input_ue_unconnectable": {}
|
| 848 |
+
}
|
| 849 |
+
},
|
| 850 |
+
"widgets_values": [
|
| 851 |
+
"416"
|
| 852 |
+
],
|
| 853 |
+
"widgets_values_named": {
|
| 854 |
+
"text": "416"
|
| 855 |
+
}
|
| 856 |
+
},
|
| 857 |
+
{
|
| 858 |
+
"id": 177,
|
| 859 |
+
"type": "LoraLoaderModelOnly",
|
| 860 |
+
"pos": [
|
| 861 |
+
-767.5236112457903,
|
| 862 |
+
4944.179109005764
|
| 863 |
+
],
|
| 864 |
+
"size": [
|
| 865 |
+
355.203125,
|
| 866 |
+
113.859375
|
| 867 |
+
],
|
| 868 |
+
"flags": {},
|
| 869 |
+
"order": 19,
|
| 870 |
+
"mode": 4,
|
| 871 |
+
"inputs": [
|
| 872 |
+
{
|
| 873 |
+
"name": "model",
|
| 874 |
+
"type": "MODEL",
|
| 875 |
+
"link": 332
|
| 876 |
+
}
|
| 877 |
+
],
|
| 878 |
+
"outputs": [
|
| 879 |
+
{
|
| 880 |
+
"name": "MODEL",
|
| 881 |
+
"type": "MODEL",
|
| 882 |
+
"links": [
|
| 883 |
+
356
|
| 884 |
+
]
|
| 885 |
+
}
|
| 886 |
+
],
|
| 887 |
+
"properties": {
|
| 888 |
+
"cnr_id": "comfy-core",
|
| 889 |
+
"ver": "0.33.0",
|
| 890 |
+
"Node name for S&R": "LoraLoaderModelOnly",
|
| 891 |
+
"ue_properties": {
|
| 892 |
+
"widget_ue_connectable": {},
|
| 893 |
+
"version": "7.5.1",
|
| 894 |
+
"input_ue_unconnectable": {}
|
| 895 |
+
}
|
| 896 |
+
},
|
| 897 |
+
"widgets_values": [
|
| 898 |
+
"minimax_h3_fl2v_lightx2v_turbo_4step_v1.0_768p_resized_avg_rank_31_bf16.safetensors",
|
| 899 |
+
1
|
| 900 |
+
],
|
| 901 |
+
"widgets_values_named": {
|
| 902 |
+
"lora_name": "minimax_h3_fl2v_lightx2v_turbo_4step_v1.0_768p_resized_avg_rank_31_bf16.safetensors",
|
| 903 |
+
"strength_model": 1
|
| 904 |
+
},
|
| 905 |
+
"ndSuperSelectorEnabled": false,
|
| 906 |
+
"ndPowerEnabled": false
|
| 907 |
+
},
|
| 908 |
+
{
|
| 909 |
+
"id": 179,
|
| 910 |
+
"type": "KSamplerSelect",
|
| 911 |
+
"pos": [
|
| 912 |
+
209.49743383365987,
|
| 913 |
+
5183.705023289966
|
| 914 |
+
],
|
| 915 |
+
"size": [
|
| 916 |
+
270,
|
| 917 |
+
85.890625
|
| 918 |
+
],
|
| 919 |
+
"flags": {},
|
| 920 |
+
"order": 6,
|
| 921 |
+
"mode": 0,
|
| 922 |
+
"inputs": [],
|
| 923 |
+
"outputs": [
|
| 924 |
+
{
|
| 925 |
+
"name": "SAMPLER",
|
| 926 |
+
"type": "SAMPLER",
|
| 927 |
+
"links": [
|
| 928 |
+
341
|
| 929 |
+
]
|
| 930 |
+
}
|
| 931 |
+
],
|
| 932 |
+
"properties": {
|
| 933 |
+
"cnr_id": "comfy-core",
|
| 934 |
+
"ver": "0.33.0",
|
| 935 |
+
"Node name for S&R": "KSamplerSelect",
|
| 936 |
+
"ue_properties": {
|
| 937 |
+
"widget_ue_connectable": {},
|
| 938 |
+
"version": "7.5.1",
|
| 939 |
+
"input_ue_unconnectable": {}
|
| 940 |
+
}
|
| 941 |
+
},
|
| 942 |
+
"widgets_values": [
|
| 943 |
+
"euler"
|
| 944 |
+
],
|
| 945 |
+
"widgets_values_named": {
|
| 946 |
+
"sampler_name": "euler"
|
| 947 |
+
}
|
| 948 |
+
},
|
| 949 |
+
{
|
| 950 |
+
"id": 184,
|
| 951 |
+
"type": "MiniMaxH3TimelinePlanner",
|
| 952 |
+
"pos": [
|
| 953 |
+
-527.8950941395228,
|
| 954 |
+
5708.606113290952
|
| 955 |
+
],
|
| 956 |
+
"size": [
|
| 957 |
+
1715.078125,
|
| 958 |
+
804
|
| 959 |
+
],
|
| 960 |
+
"flags": {},
|
| 961 |
+
"order": 26,
|
| 962 |
+
"mode": 0,
|
| 963 |
+
"inputs": [
|
| 964 |
+
{
|
| 965 |
+
"label": "Prompt Index",
|
| 966 |
+
"name": "prompt_index",
|
| 967 |
+
"shape": 7,
|
| 968 |
+
"type": "INT",
|
| 969 |
+
"link": null
|
| 970 |
+
},
|
| 971 |
+
{
|
| 972 |
+
"name": "width",
|
| 973 |
+
"type": "INT",
|
| 974 |
+
"widget": {
|
| 975 |
+
"name": "width"
|
| 976 |
+
},
|
| 977 |
+
"link": 349
|
| 978 |
+
},
|
| 979 |
+
{
|
| 980 |
+
"name": "height",
|
| 981 |
+
"type": "INT",
|
| 982 |
+
"widget": {
|
| 983 |
+
"name": "height"
|
| 984 |
+
},
|
| 985 |
+
"link": 350
|
| 986 |
+
}
|
| 987 |
+
],
|
| 988 |
+
"outputs": [
|
| 989 |
+
{
|
| 990 |
+
"name": "Material Plan",
|
| 991 |
+
"type": "MINIMAX_H3_TIMELINE_PLAN",
|
| 992 |
+
"links": [
|
| 993 |
+
353
|
| 994 |
+
]
|
| 995 |
+
},
|
| 996 |
+
{
|
| 997 |
+
"name": "Omni Media Bundle",
|
| 998 |
+
"type": "MINIMAX_H3_OMNI_MEDIA_BUNDLE",
|
| 999 |
+
"links": null
|
| 1000 |
+
}
|
| 1001 |
+
],
|
| 1002 |
+
"properties": {
|
| 1003 |
+
"aux_id": "Songssx/ComfyUI-MiniMaxH3-TimelineDirector",
|
| 1004 |
+
"ver": "e4d6d5ea44eb00e2414d16dd94883be8e2661213",
|
| 1005 |
+
"Node name for S&R": "MiniMaxH3TimelinePlanner",
|
| 1006 |
+
"ue_properties": {
|
| 1007 |
+
"widget_ue_connectable": {
|
| 1008 |
+
"width": true,
|
| 1009 |
+
"height": true
|
| 1010 |
+
},
|
| 1011 |
+
"version": "7.5.1",
|
| 1012 |
+
"input_ue_unconnectable": {}
|
| 1013 |
+
}
|
| 1014 |
+
},
|
| 1015 |
+
"widgets_values": [
|
| 1016 |
+
1344,
|
| 1017 |
+
768,
|
| 1018 |
+
10,
|
| 1019 |
+
"{\"version\":4,\"fps\":24,\"selection\":{\"start\":0,\"duration\":10},\"videoAudioEnabled\":true,\"videoClips\":[],\"images\":[{\"id\":\"mtpncdu2-o1oklx\",\"file\":\"minimax_h3_timeline_director/1788689161191_lin01_KreaEdit1__00148_.png\",\"name\":\"KreaEdit1__00148_.png\",\"width\":1088,\"height\":1920},{\"id\":\"mtpncjay-7eso16\",\"file\":\"minimax_h3_timeline_director/1788689168287_mn5mv_KreaEdit1__00147_.png\",\"name\":\"KreaEdit1__00147_.png\",\"width\":1088,\"height\":1920}],\"audios\":[],\"segmentConfig\":{\"count\":2,\"segments\":[{\"images\":[],\"audios\":[]},{\"images\":[],\"audios\":[]}]}}",
|
| 1020 |
+
""
|
| 1021 |
+
],
|
| 1022 |
+
"widgets_values_named": {
|
| 1023 |
+
"width": 1344,
|
| 1024 |
+
"height": 768,
|
| 1025 |
+
"generation_seconds": 10,
|
| 1026 |
+
"timeline_data": "{\"version\":4,\"fps\":24,\"selection\":{\"start\":0,\"duration\":10},\"videoAudioEnabled\":true,\"videoClips\":[],\"images\":[{\"id\":\"mtpncdu2-o1oklx\",\"file\":\"minimax_h3_timeline_director/1788689161191_lin01_KreaEdit1__00148_.png\",\"name\":\"KreaEdit1__00148_.png\",\"width\":1088,\"height\":1920},{\"id\":\"mtpncjay-7eso16\",\"file\":\"minimax_h3_timeline_director/1788689168287_mn5mv_KreaEdit1__00147_.png\",\"name\":\"KreaEdit1__00147_.png\",\"width\":1088,\"height\":1920}],\"audios\":[],\"segmentConfig\":{\"count\":2,\"segments\":[{\"images\":[],\"audios\":[]},{\"images\":[],\"audios\":[]}]}}",
|
| 1027 |
+
"minimax_h3_timeline": ""
|
| 1028 |
+
}
|
| 1029 |
+
},
|
| 1030 |
+
{
|
| 1031 |
+
"id": 185,
|
| 1032 |
+
"type": "MiniMaxH3TimelineEncoder",
|
| 1033 |
+
"pos": [
|
| 1034 |
+
1199.243073032633,
|
| 1035 |
+
5684.742013884508
|
| 1036 |
+
],
|
| 1037 |
+
"size": [
|
| 1038 |
+
620,
|
| 1039 |
+
520
|
| 1040 |
+
],
|
| 1041 |
+
"flags": {},
|
| 1042 |
+
"order": 29,
|
| 1043 |
+
"mode": 0,
|
| 1044 |
+
"inputs": [
|
| 1045 |
+
{
|
| 1046 |
+
"name": "clip",
|
| 1047 |
+
"type": "CLIP",
|
| 1048 |
+
"link": 346
|
| 1049 |
+
},
|
| 1050 |
+
{
|
| 1051 |
+
"name": "vae",
|
| 1052 |
+
"type": "VAE",
|
| 1053 |
+
"link": 347
|
| 1054 |
+
},
|
| 1055 |
+
{
|
| 1056 |
+
"name": "audio_vae",
|
| 1057 |
+
"type": "VAE",
|
| 1058 |
+
"link": 348
|
| 1059 |
+
},
|
| 1060 |
+
{
|
| 1061 |
+
"name": "plan",
|
| 1062 |
+
"type": "MINIMAX_H3_TIMELINE_PLAN",
|
| 1063 |
+
"link": 353
|
| 1064 |
+
}
|
| 1065 |
+
],
|
| 1066 |
+
"outputs": [
|
| 1067 |
+
{
|
| 1068 |
+
"name": "positive",
|
| 1069 |
+
"type": "CONDITIONING",
|
| 1070 |
+
"links": [
|
| 1071 |
+
344,
|
| 1072 |
+
380,
|
| 1073 |
+
381
|
| 1074 |
+
]
|
| 1075 |
+
},
|
| 1076 |
+
{
|
| 1077 |
+
"name": "LATENT",
|
| 1078 |
+
"type": "LATENT",
|
| 1079 |
+
"links": [
|
| 1080 |
+
345
|
| 1081 |
+
]
|
| 1082 |
+
},
|
| 1083 |
+
{
|
| 1084 |
+
"name": "Merged Video Audio",
|
| 1085 |
+
"type": "AUDIO",
|
| 1086 |
+
"links": null
|
| 1087 |
+
},
|
| 1088 |
+
{
|
| 1089 |
+
"name": "Merged Standalone Audio",
|
| 1090 |
+
"type": "AUDIO",
|
| 1091 |
+
"links": null
|
| 1092 |
+
}
|
| 1093 |
+
],
|
| 1094 |
+
"properties": {
|
| 1095 |
+
"aux_id": "Songssx/ComfyUI-MiniMaxH3-TimelineDirector",
|
| 1096 |
+
"ver": "e4d6d5ea44eb00e2414d16dd94883be8e2661213",
|
| 1097 |
+
"Node name for S&R": "MiniMaxH3TimelineEncoder",
|
| 1098 |
+
"ue_properties": {
|
| 1099 |
+
"widget_ue_connectable": {},
|
| 1100 |
+
"version": "7.5.1",
|
| 1101 |
+
"input_ue_unconnectable": {}
|
| 1102 |
+
}
|
| 1103 |
+
},
|
| 1104 |
+
"widgets_values": [
|
| 1105 |
+
"subject_definitions:\n<Picture 1> and <Picture 2> show the same young woman: long wavy dark brown hair, brown eyes, black lipstick, freckles, black nail polish, large breasts, black triangle bikini top, black string bottoms worn closed, gray sofa, pink-lit wall.\n\nsummary:\nreference generation. Segment 1 of 2, 10 seconds. Live-action cinematic shot of the woman standing in front of the gray sofa, walking toward the lens while stroking her breasts over the bikini. At 00:07.000 a slow dissolve lands on her kneeling. The final 0.917 seconds hold that kneeling pose, both hands on her breasts, string bottoms still closed, for latent handover.\n\nretention_analysis:\nfully_preserved <Picture 1>\nfully_preserved <Picture 2>\n\ndetailed_description:\n[Shot 1] Live-action, cinematic, ultra realistic. The young woman shown in <Picture 1> and <Picture 2> stands in front of the gray sofa against the pink wall, preserving her long wavy dark brown hair, brown eyes, black lipstick, freckles, black nail polish, black triangle bikini top and closed black string bottoms. The camera performs a tracking shot at slow speed at chest level. She walks toward the lens, leans her torso forward, and strokes her breasts over the bikini cups. She blinks once, looks at the camera, then blinks again as her lips part. [Shot 2] At 00:07.000, the shot slow-dissolves to the same woman in the same room now kneeling on the wooden floor facing the lens, knees together, both hands still on her breasts, string bottoms still closed. The camera lowers toward ground level during the dissolve and then holds a slow tracking shot. She blinks slowly, a small smile forms and holds, and her lips stay slightly parted. During 00:09.083-00:10.000 the camera keeps that ground-level tracking shot. She remains kneeling facing the lens, both hands stroking her breasts over the bikini, smile held, one slow blink. No new pose.\n\noverall_soundscape:\nBikini fabric shifts as she walks. Palms rub the cups. Knees meet the floor through the dissolve. Steady breathing and short sighs. During 00:09.083-00:10.000 the same fabric rub, room-floor contact and breathing continue without a new sound event.\n\nnon_diegetic_music:\nN/A\n\n--- SEGMENT ---\n\nsubject_definitions:\nSame woman already established from <Picture 1> and <Picture 2>. No new subject.\n\nsummary:\nvideo continuation + reference generation. Segment 2 of 2, 10 seconds. Opens by repeating the kneeling handover pose for 0.917 seconds, then she places her palms on the floor, goes to all fours, crawls toward the lens at ground level, tilts her head and holds the smile.\n\nretention_analysis:\nfully_preserved <Picture 1>\nfully_preserved <Picture 2>\n\ndetailed_description:\n[Shot 1] Live-action, cinematic, ultra realistic. During 00:00.000-00:00.917 the young woman shown in <Picture 1> and <Picture 2> remains kneeling on the wooden floor in front of the gray sofa against the pink wall, preserving her long wavy dark brown hair, brown eyes, black lipstick, freckles, black nail polish, black triangle bikini top and closed black string bottoms. She faces the lens, both hands on her breasts, smile held, one slow blink. The camera holds the same ground-level tracking shot and the same distance as the end of the previous segment. From 00:00.917, without a cut, she slides her palms down onto the floor, leans her torso forward onto all fours, crawls one slow step toward the lens, blinks, tilts her head a little, and the smile holds. The camera keeps tracking at slow speed at ground level.\n\noverall_soundscape:\nDuring 00:00.000-00:00.917 preceding fabric rub, knee contact and breathing continue. After 00:00.917 palms meet the floor, knees slide, bikini strings shift, steady breathing and short sighs.\n\nnon_diegetic_music:\nN/A",
|
| 1106 |
+
"match"
|
| 1107 |
+
],
|
| 1108 |
+
"widgets_values_named": {
|
| 1109 |
+
"prompt": "subject_definitions:\n<Picture 1> and <Picture 2> show the same young woman: long wavy dark brown hair, brown eyes, black lipstick, freckles, black nail polish, large breasts, black triangle bikini top, black string bottoms worn closed, gray sofa, pink-lit wall.\n\nsummary:\nreference generation. Segment 1 of 2, 10 seconds. Live-action cinematic shot of the woman standing in front of the gray sofa, walking toward the lens while stroking her breasts over the bikini. At 00:07.000 a slow dissolve lands on her kneeling. The final 0.917 seconds hold that kneeling pose, both hands on her breasts, string bottoms still closed, for latent handover.\n\nretention_analysis:\nfully_preserved <Picture 1>\nfully_preserved <Picture 2>\n\ndetailed_description:\n[Shot 1] Live-action, cinematic, ultra realistic. The young woman shown in <Picture 1> and <Picture 2> stands in front of the gray sofa against the pink wall, preserving her long wavy dark brown hair, brown eyes, black lipstick, freckles, black nail polish, black triangle bikini top and closed black string bottoms. The camera performs a tracking shot at slow speed at chest level. She walks toward the lens, leans her torso forward, and strokes her breasts over the bikini cups. She blinks once, looks at the camera, then blinks again as her lips part. [Shot 2] At 00:07.000, the shot slow-dissolves to the same woman in the same room now kneeling on the wooden floor facing the lens, knees together, both hands still on her breasts, string bottoms still closed. The camera lowers toward ground level during the dissolve and then holds a slow tracking shot. She blinks slowly, a small smile forms and holds, and her lips stay slightly parted. During 00:09.083-00:10.000 the camera keeps that ground-level tracking shot. She remains kneeling facing the lens, both hands stroking her breasts over the bikini, smile held, one slow blink. No new pose.\n\noverall_soundscape:\nBikini fabric shifts as she walks. Palms rub the cups. Knees meet the floor through the dissolve. Steady breathing and short sighs. During 00:09.083-00:10.000 the same fabric rub, room-floor contact and breathing continue without a new sound event.\n\nnon_diegetic_music:\nN/A\n\n--- SEGMENT ---\n\nsubject_definitions:\nSame woman already established from <Picture 1> and <Picture 2>. No new subject.\n\nsummary:\nvideo continuation + reference generation. Segment 2 of 2, 10 seconds. Opens by repeating the kneeling handover pose for 0.917 seconds, then she places her palms on the floor, goes to all fours, crawls toward the lens at ground level, tilts her head and holds the smile.\n\nretention_analysis:\nfully_preserved <Picture 1>\nfully_preserved <Picture 2>\n\ndetailed_description:\n[Shot 1] Live-action, cinematic, ultra realistic. During 00:00.000-00:00.917 the young woman shown in <Picture 1> and <Picture 2> remains kneeling on the wooden floor in front of the gray sofa against the pink wall, preserving her long wavy dark brown hair, brown eyes, black lipstick, freckles, black nail polish, black triangle bikini top and closed black string bottoms. She faces the lens, both hands on her breasts, smile held, one slow blink. The camera holds the same ground-level tracking shot and the same distance as the end of the previous segment. From 00:00.917, without a cut, she slides her palms down onto the floor, leans her torso forward onto all fours, crawls one slow step toward the lens, blinks, tilts her head a little, and the smile holds. The camera keeps tracking at slow speed at ground level.\n\noverall_soundscape:\nDuring 00:00.000-00:00.917 preceding fabric rub, knee contact and breathing continue. After 00:00.917 palms meet the floor, knees slide, bikini strings shift, steady breathing and short sighs.\n\nnon_diegetic_music:\nN/A",
|
| 1110 |
+
"ref_image_size": "match"
|
| 1111 |
+
}
|
| 1112 |
+
},
|
| 1113 |
+
{
|
| 1114 |
+
"id": 186,
|
| 1115 |
+
"type": "ModelPatchTorchSettings",
|
| 1116 |
+
"pos": [
|
| 1117 |
+
144.17490984353213,
|
| 1118 |
+
4440.202848550011
|
| 1119 |
+
],
|
| 1120 |
+
"size": [
|
| 1121 |
+
312.078125,
|
| 1122 |
+
85.890625
|
| 1123 |
+
],
|
| 1124 |
+
"flags": {
|
| 1125 |
+
"collapsed": false
|
| 1126 |
+
},
|
| 1127 |
+
"order": 32,
|
| 1128 |
+
"mode": 0,
|
| 1129 |
+
"inputs": [
|
| 1130 |
+
{
|
| 1131 |
+
"name": "model",
|
| 1132 |
+
"type": "MODEL",
|
| 1133 |
+
"link": 354
|
| 1134 |
+
}
|
| 1135 |
+
],
|
| 1136 |
+
"outputs": [
|
| 1137 |
+
{
|
| 1138 |
+
"name": "MODEL",
|
| 1139 |
+
"type": "MODEL",
|
| 1140 |
+
"links": [
|
| 1141 |
+
357,
|
| 1142 |
+
358,
|
| 1143 |
+
379
|
| 1144 |
+
]
|
| 1145 |
+
}
|
| 1146 |
+
],
|
| 1147 |
+
"properties": {
|
| 1148 |
+
"cnr_id": "comfyui-kjnodes",
|
| 1149 |
+
"ver": "e8e88f7c88e3f6205b122f5de87e69a09fbce5ac",
|
| 1150 |
+
"Node name for S&R": "ModelPatchTorchSettings",
|
| 1151 |
+
"ue_properties": {
|
| 1152 |
+
"widget_ue_connectable": {},
|
| 1153 |
+
"version": "7.5.1",
|
| 1154 |
+
"input_ue_unconnectable": {}
|
| 1155 |
+
}
|
| 1156 |
+
},
|
| 1157 |
+
"widgets_values": [
|
| 1158 |
+
true
|
| 1159 |
+
],
|
| 1160 |
+
"widgets_values_named": {
|
| 1161 |
+
"enable_fp16_accumulation": true
|
| 1162 |
+
}
|
| 1163 |
+
},
|
| 1164 |
+
{
|
| 1165 |
+
"id": 187,
|
| 1166 |
+
"type": "MiniMaxChunkFeedForward",
|
| 1167 |
+
"pos": [
|
| 1168 |
+
-222.66446806266873,
|
| 1169 |
+
4439.470491814276
|
| 1170 |
+
],
|
| 1171 |
+
"size": [
|
| 1172 |
+
324.1875,
|
| 1173 |
+
113.859375
|
| 1174 |
+
],
|
| 1175 |
+
"flags": {},
|
| 1176 |
+
"order": 30,
|
| 1177 |
+
"mode": 0,
|
| 1178 |
+
"inputs": [
|
| 1179 |
+
{
|
| 1180 |
+
"name": "model",
|
| 1181 |
+
"type": "MODEL",
|
| 1182 |
+
"link": 355
|
| 1183 |
+
}
|
| 1184 |
+
],
|
| 1185 |
+
"outputs": [
|
| 1186 |
+
{
|
| 1187 |
+
"name": "model",
|
| 1188 |
+
"type": "MODEL",
|
| 1189 |
+
"links": [
|
| 1190 |
+
354
|
| 1191 |
+
]
|
| 1192 |
+
}
|
| 1193 |
+
],
|
| 1194 |
+
"properties": {
|
| 1195 |
+
"cnr_id": "comfyui-kjnodes",
|
| 1196 |
+
"ver": "1.5.0",
|
| 1197 |
+
"Node name for S&R": "MiniMaxChunkFeedForward",
|
| 1198 |
+
"ue_properties": {
|
| 1199 |
+
"widget_ue_connectable": {},
|
| 1200 |
+
"input_ue_unconnectable": {},
|
| 1201 |
+
"version": "7.8"
|
| 1202 |
+
}
|
| 1203 |
+
},
|
| 1204 |
+
"widgets_values": [
|
| 1205 |
+
2,
|
| 1206 |
+
4096
|
| 1207 |
+
],
|
| 1208 |
+
"widgets_values_named": {
|
| 1209 |
+
"chunks": 2,
|
| 1210 |
+
"seq_threshold": 4096
|
| 1211 |
+
}
|
| 1212 |
+
},
|
| 1213 |
+
{
|
| 1214 |
+
"id": 188,
|
| 1215 |
+
"type": "ApplyVDNH3Advanced",
|
| 1216 |
+
"pos": [
|
| 1217 |
+
-771.4854156358887,
|
| 1218 |
+
4326.329092482242
|
| 1219 |
+
],
|
| 1220 |
+
"size": [
|
| 1221 |
+
442.609375,
|
| 1222 |
+
477.453125
|
| 1223 |
+
],
|
| 1224 |
+
"flags": {},
|
| 1225 |
+
"order": 28,
|
| 1226 |
+
"mode": 0,
|
| 1227 |
+
"inputs": [
|
| 1228 |
+
{
|
| 1229 |
+
"name": "model",
|
| 1230 |
+
"type": "MODEL",
|
| 1231 |
+
"link": 356
|
| 1232 |
+
}
|
| 1233 |
+
],
|
| 1234 |
+
"outputs": [
|
| 1235 |
+
{
|
| 1236 |
+
"name": "MODEL",
|
| 1237 |
+
"type": "MODEL",
|
| 1238 |
+
"links": [
|
| 1239 |
+
355
|
| 1240 |
+
]
|
| 1241 |
+
}
|
| 1242 |
+
],
|
| 1243 |
+
"properties": {
|
| 1244 |
+
"cnr_id": "comfyui-vdn-h3",
|
| 1245 |
+
"ver": "183f33d8a7b3c6322d83be95ae369251a63b3198",
|
| 1246 |
+
"Node name for S&R": "ApplyVDNH3Advanced",
|
| 1247 |
+
"ue_properties": {
|
| 1248 |
+
"widget_ue_connectable": {},
|
| 1249 |
+
"version": "7.5.1",
|
| 1250 |
+
"input_ue_unconnectable": {}
|
| 1251 |
+
},
|
| 1252 |
+
"aux_id": "Saganaki22/ComfyUI-VDN-H3"
|
| 1253 |
+
},
|
| 1254 |
+
"widgets_values": [
|
| 1255 |
+
"stage-dmd-step-250",
|
| 1256 |
+
true,
|
| 1257 |
+
1,
|
| 1258 |
+
1,
|
| 1259 |
+
"merge",
|
| 1260 |
+
"stream",
|
| 1261 |
+
"off",
|
| 1262 |
+
"grouped",
|
| 1263 |
+
"grouped",
|
| 1264 |
+
1,
|
| 1265 |
+
5,
|
| 1266 |
+
"both",
|
| 1267 |
+
true,
|
| 1268 |
+
true,
|
| 1269 |
+
false
|
| 1270 |
+
],
|
| 1271 |
+
"widgets_values_named": {
|
| 1272 |
+
"vdn_checkpoint": "stage-dmd-step-250",
|
| 1273 |
+
"apply_turbo_adapter": true,
|
| 1274 |
+
"stage_b_strength": 1,
|
| 1275 |
+
"turbo_strength": 1,
|
| 1276 |
+
"lora_mode": "merge",
|
| 1277 |
+
"branch_weights": "stream",
|
| 1278 |
+
"retain_buffers": "off",
|
| 1279 |
+
"verbose": "grouped",
|
| 1280 |
+
"attention_backend": "grouped",
|
| 1281 |
+
"window_radius": 1,
|
| 1282 |
+
"window_chunk": 5,
|
| 1283 |
+
"anchor_frames": "both",
|
| 1284 |
+
"text_state": true,
|
| 1285 |
+
"linear_branch": true,
|
| 1286 |
+
"fast_kernels": false
|
| 1287 |
+
}
|
| 1288 |
+
},
|
| 1289 |
+
{
|
| 1290 |
+
"id": 190,
|
| 1291 |
+
"type": "GetNode",
|
| 1292 |
+
"pos": [
|
| 1293 |
+
3019.596094983624,
|
| 1294 |
+
5877.152914338328
|
| 1295 |
+
],
|
| 1296 |
+
"size": [
|
| 1297 |
+
210,
|
| 1298 |
+
58
|
| 1299 |
+
],
|
| 1300 |
+
"flags": {},
|
| 1301 |
+
"order": 7,
|
| 1302 |
+
"mode": 4,
|
| 1303 |
+
"inputs": [],
|
| 1304 |
+
"outputs": [
|
| 1305 |
+
{
|
| 1306 |
+
"name": "MODEL",
|
| 1307 |
+
"type": "MODEL",
|
| 1308 |
+
"links": [
|
| 1309 |
+
359,
|
| 1310 |
+
361
|
| 1311 |
+
]
|
| 1312 |
+
}
|
| 1313 |
+
],
|
| 1314 |
+
"title": "Get_model_VDN",
|
| 1315 |
+
"properties": {
|
| 1316 |
+
"Node name for S&R": "GetNode",
|
| 1317 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1318 |
+
"ue_properties": {
|
| 1319 |
+
"widget_ue_connectable": {},
|
| 1320 |
+
"version": "7.5.1",
|
| 1321 |
+
"input_ue_unconnectable": {}
|
| 1322 |
+
}
|
| 1323 |
+
},
|
| 1324 |
+
"widgets_values": [
|
| 1325 |
+
"model_VDN"
|
| 1326 |
+
],
|
| 1327 |
+
"widgets_values_named": {
|
| 1328 |
+
"Constant": "model_VDN"
|
| 1329 |
+
},
|
| 1330 |
+
"color": "#1f1f48",
|
| 1331 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 1332 |
+
},
|
| 1333 |
+
{
|
| 1334 |
+
"id": 191,
|
| 1335 |
+
"type": "GetNode",
|
| 1336 |
+
"pos": [
|
| 1337 |
+
3023.5065112803254,
|
| 1338 |
+
5739.272025023764
|
| 1339 |
+
],
|
| 1340 |
+
"size": [
|
| 1341 |
+
210,
|
| 1342 |
+
58
|
| 1343 |
+
],
|
| 1344 |
+
"flags": {},
|
| 1345 |
+
"order": 12,
|
| 1346 |
+
"mode": 4,
|
| 1347 |
+
"inputs": [],
|
| 1348 |
+
"outputs": [
|
| 1349 |
+
{
|
| 1350 |
+
"name": "CONDITIONING",
|
| 1351 |
+
"type": "CONDITIONING",
|
| 1352 |
+
"links": [
|
| 1353 |
+
360
|
| 1354 |
+
]
|
| 1355 |
+
}
|
| 1356 |
+
],
|
| 1357 |
+
"title": "Get_conditionning",
|
| 1358 |
+
"properties": {
|
| 1359 |
+
"Node name for S&R": "GetNode",
|
| 1360 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1361 |
+
"ue_properties": {
|
| 1362 |
+
"widget_ue_connectable": {},
|
| 1363 |
+
"version": "7.5.1",
|
| 1364 |
+
"input_ue_unconnectable": {}
|
| 1365 |
+
}
|
| 1366 |
+
},
|
| 1367 |
+
"widgets_values": [
|
| 1368 |
+
"conditionning"
|
| 1369 |
+
],
|
| 1370 |
+
"widgets_values_named": {
|
| 1371 |
+
"Constant": "conditionning"
|
| 1372 |
+
},
|
| 1373 |
+
"color": "#38291f",
|
| 1374 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 1375 |
+
},
|
| 1376 |
+
{
|
| 1377 |
+
"id": 192,
|
| 1378 |
+
"type": "MinimaxH3LatentUpscaler3D",
|
| 1379 |
+
"pos": [
|
| 1380 |
+
2686.2283581149145,
|
| 1381 |
+
5440.843936505823
|
| 1382 |
+
],
|
| 1383 |
+
"size": [
|
| 1384 |
+
461.3766842951726,
|
| 1385 |
+
226
|
| 1386 |
+
],
|
| 1387 |
+
"flags": {},
|
| 1388 |
+
"order": 39,
|
| 1389 |
+
"mode": 4,
|
| 1390 |
+
"inputs": [
|
| 1391 |
+
{
|
| 1392 |
+
"name": "latent",
|
| 1393 |
+
"type": "*",
|
| 1394 |
+
"link": 378
|
| 1395 |
+
}
|
| 1396 |
+
],
|
| 1397 |
+
"outputs": [
|
| 1398 |
+
{
|
| 1399 |
+
"name": "latent",
|
| 1400 |
+
"type": "*",
|
| 1401 |
+
"links": [
|
| 1402 |
+
372
|
| 1403 |
+
]
|
| 1404 |
+
}
|
| 1405 |
+
],
|
| 1406 |
+
"properties": {
|
| 1407 |
+
"aux_id": "LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler",
|
| 1408 |
+
"ver": "d7c01b9011f2e8439493f6c02c29995a27df276f",
|
| 1409 |
+
"Node name for S&R": "MinimaxH3LatentUpscaler3D",
|
| 1410 |
+
"ue_properties": {
|
| 1411 |
+
"widget_ue_connectable": {},
|
| 1412 |
+
"input_ue_unconnectable": {},
|
| 1413 |
+
"version": "7.5.1"
|
| 1414 |
+
}
|
| 1415 |
+
},
|
| 1416 |
+
"widgets_values": [
|
| 1417 |
+
"minimax_h3_latent_upscaler_3d_bf16.safetensors",
|
| 1418 |
+
"scale by multiplier",
|
| 1419 |
+
1,
|
| 1420 |
+
32,
|
| 1421 |
+
true,
|
| 1422 |
+
true,
|
| 1423 |
+
"cuda",
|
| 1424 |
+
"fp16"
|
| 1425 |
+
],
|
| 1426 |
+
"widgets_values_named": {
|
| 1427 |
+
"model_name": "minimax_h3_latent_upscaler_3d_bf16.safetensors",
|
| 1428 |
+
"mode": "scale by multiplier",
|
| 1429 |
+
"mode.scale": 1,
|
| 1430 |
+
"align": 32,
|
| 1431 |
+
"enable_temporal_chunking": true,
|
| 1432 |
+
"force_unload": true,
|
| 1433 |
+
"device": "cuda",
|
| 1434 |
+
"precision": "fp16"
|
| 1435 |
+
}
|
| 1436 |
+
},
|
| 1437 |
+
{
|
| 1438 |
+
"id": 193,
|
| 1439 |
+
"type": "GetNode",
|
| 1440 |
+
"pos": [
|
| 1441 |
+
2854.118097030728,
|
| 1442 |
+
5077.572385741342
|
| 1443 |
+
],
|
| 1444 |
+
"size": [
|
| 1445 |
+
210,
|
| 1446 |
+
58
|
| 1447 |
+
],
|
| 1448 |
+
"flags": {},
|
| 1449 |
+
"order": 8,
|
| 1450 |
+
"mode": 0,
|
| 1451 |
+
"inputs": [],
|
| 1452 |
+
"outputs": [
|
| 1453 |
+
{
|
| 1454 |
+
"name": "AUDIO",
|
| 1455 |
+
"type": "AUDIO",
|
| 1456 |
+
"links": [
|
| 1457 |
+
370
|
| 1458 |
+
]
|
| 1459 |
+
}
|
| 1460 |
+
],
|
| 1461 |
+
"title": "Get_src_audio",
|
| 1462 |
+
"properties": {
|
| 1463 |
+
"Node name for S&R": "GetNode",
|
| 1464 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1465 |
+
"ue_properties": {
|
| 1466 |
+
"widget_ue_connectable": {},
|
| 1467 |
+
"version": "7.5.1",
|
| 1468 |
+
"input_ue_unconnectable": {}
|
| 1469 |
+
}
|
| 1470 |
+
},
|
| 1471 |
+
"widgets_values": [
|
| 1472 |
+
"src_audio"
|
| 1473 |
+
],
|
| 1474 |
+
"widgets_values_named": {
|
| 1475 |
+
"Constant": "src_audio"
|
| 1476 |
+
}
|
| 1477 |
+
},
|
| 1478 |
+
{
|
| 1479 |
+
"id": 194,
|
| 1480 |
+
"type": "KSamplerSelect",
|
| 1481 |
+
"pos": [
|
| 1482 |
+
3370.9292369257732,
|
| 1483 |
+
5730.988525701965
|
| 1484 |
+
],
|
| 1485 |
+
"size": [
|
| 1486 |
+
361.19999999999993,
|
| 1487 |
+
66.19999999999982
|
| 1488 |
+
],
|
| 1489 |
+
"flags": {},
|
| 1490 |
+
"order": 9,
|
| 1491 |
+
"mode": 4,
|
| 1492 |
+
"inputs": [],
|
| 1493 |
+
"outputs": [
|
| 1494 |
+
{
|
| 1495 |
+
"name": "SAMPLER",
|
| 1496 |
+
"type": "SAMPLER",
|
| 1497 |
+
"links": [
|
| 1498 |
+
364
|
| 1499 |
+
]
|
| 1500 |
+
}
|
| 1501 |
+
],
|
| 1502 |
+
"properties": {
|
| 1503 |
+
"cnr_id": "comfy-core",
|
| 1504 |
+
"ver": "0.30.0",
|
| 1505 |
+
"Node name for S&R": "KSamplerSelect",
|
| 1506 |
+
"ue_properties": {
|
| 1507 |
+
"widget_ue_connectable": {},
|
| 1508 |
+
"version": "7.5.1",
|
| 1509 |
+
"input_ue_unconnectable": {}
|
| 1510 |
+
}
|
| 1511 |
+
},
|
| 1512 |
+
"widgets_values": [
|
| 1513 |
+
"euler"
|
| 1514 |
+
],
|
| 1515 |
+
"widgets_values_named": {
|
| 1516 |
+
"sampler_name": "euler"
|
| 1517 |
+
}
|
| 1518 |
+
},
|
| 1519 |
+
{
|
| 1520 |
+
"id": 195,
|
| 1521 |
+
"type": "BasicGuider",
|
| 1522 |
+
"pos": [
|
| 1523 |
+
3370.9292369257732,
|
| 1524 |
+
5623.188525701965
|
| 1525 |
+
],
|
| 1526 |
+
"size": [
|
| 1527 |
+
360,
|
| 1528 |
+
60
|
| 1529 |
+
],
|
| 1530 |
+
"flags": {},
|
| 1531 |
+
"order": 21,
|
| 1532 |
+
"mode": 4,
|
| 1533 |
+
"inputs": [
|
| 1534 |
+
{
|
| 1535 |
+
"name": "model",
|
| 1536 |
+
"type": "MODEL",
|
| 1537 |
+
"link": 359
|
| 1538 |
+
},
|
| 1539 |
+
{
|
| 1540 |
+
"name": "conditioning",
|
| 1541 |
+
"type": "CONDITIONING",
|
| 1542 |
+
"link": 360
|
| 1543 |
+
}
|
| 1544 |
+
],
|
| 1545 |
+
"outputs": [
|
| 1546 |
+
{
|
| 1547 |
+
"name": "GUIDER",
|
| 1548 |
+
"type": "GUIDER",
|
| 1549 |
+
"links": [
|
| 1550 |
+
363
|
| 1551 |
+
]
|
| 1552 |
+
}
|
| 1553 |
+
],
|
| 1554 |
+
"properties": {
|
| 1555 |
+
"cnr_id": "comfy-core",
|
| 1556 |
+
"ver": "0.30.0",
|
| 1557 |
+
"Node name for S&R": "BasicGuider",
|
| 1558 |
+
"ue_properties": {
|
| 1559 |
+
"widget_ue_connectable": {},
|
| 1560 |
+
"version": "7.5.1",
|
| 1561 |
+
"input_ue_unconnectable": {}
|
| 1562 |
+
}
|
| 1563 |
+
}
|
| 1564 |
+
},
|
| 1565 |
+
{
|
| 1566 |
+
"id": 196,
|
| 1567 |
+
"type": "RandomNoise",
|
| 1568 |
+
"pos": [
|
| 1569 |
+
3370.9292369257732,
|
| 1570 |
+
5472.188525701962
|
| 1571 |
+
],
|
| 1572 |
+
"size": [
|
| 1573 |
+
360,
|
| 1574 |
+
90
|
| 1575 |
+
],
|
| 1576 |
+
"flags": {},
|
| 1577 |
+
"order": 10,
|
| 1578 |
+
"mode": 4,
|
| 1579 |
+
"inputs": [],
|
| 1580 |
+
"outputs": [
|
| 1581 |
+
{
|
| 1582 |
+
"name": "NOISE",
|
| 1583 |
+
"type": "NOISE",
|
| 1584 |
+
"links": [
|
| 1585 |
+
362
|
| 1586 |
+
]
|
| 1587 |
+
}
|
| 1588 |
+
],
|
| 1589 |
+
"properties": {
|
| 1590 |
+
"cnr_id": "comfy-core",
|
| 1591 |
+
"ver": "0.30.0",
|
| 1592 |
+
"Node name for S&R": "RandomNoise",
|
| 1593 |
+
"ue_properties": {
|
| 1594 |
+
"widget_ue_connectable": {},
|
| 1595 |
+
"version": "7.5.1",
|
| 1596 |
+
"input_ue_unconnectable": {}
|
| 1597 |
+
}
|
| 1598 |
+
},
|
| 1599 |
+
"widgets_values": [
|
| 1600 |
+
42,
|
| 1601 |
+
"fixed"
|
| 1602 |
+
],
|
| 1603 |
+
"widgets_values_named": {
|
| 1604 |
+
"noise_seed": 42,
|
| 1605 |
+
"control_after_generate": "fixed"
|
| 1606 |
+
}
|
| 1607 |
+
},
|
| 1608 |
+
{
|
| 1609 |
+
"id": 197,
|
| 1610 |
+
"type": "BasicScheduler",
|
| 1611 |
+
"pos": [
|
| 1612 |
+
3370.9292369257732,
|
| 1613 |
+
5853.188525701965
|
| 1614 |
+
],
|
| 1615 |
+
"size": [
|
| 1616 |
+
370,
|
| 1617 |
+
130
|
| 1618 |
+
],
|
| 1619 |
+
"flags": {},
|
| 1620 |
+
"order": 20,
|
| 1621 |
+
"mode": 4,
|
| 1622 |
+
"inputs": [
|
| 1623 |
+
{
|
| 1624 |
+
"name": "model",
|
| 1625 |
+
"type": "MODEL",
|
| 1626 |
+
"link": 361
|
| 1627 |
+
}
|
| 1628 |
+
],
|
| 1629 |
+
"outputs": [
|
| 1630 |
+
{
|
| 1631 |
+
"name": "SIGMAS",
|
| 1632 |
+
"type": "SIGMAS",
|
| 1633 |
+
"links": [
|
| 1634 |
+
365
|
| 1635 |
+
]
|
| 1636 |
+
}
|
| 1637 |
+
],
|
| 1638 |
+
"properties": {
|
| 1639 |
+
"cnr_id": "comfy-core",
|
| 1640 |
+
"ver": "0.30.0",
|
| 1641 |
+
"Node name for S&R": "BasicScheduler",
|
| 1642 |
+
"ue_properties": {
|
| 1643 |
+
"widget_ue_connectable": {},
|
| 1644 |
+
"version": "7.5.1",
|
| 1645 |
+
"input_ue_unconnectable": {}
|
| 1646 |
+
}
|
| 1647 |
+
},
|
| 1648 |
+
"widgets_values": [
|
| 1649 |
+
"simple",
|
| 1650 |
+
3,
|
| 1651 |
+
0.2
|
| 1652 |
+
],
|
| 1653 |
+
"widgets_values_named": {
|
| 1654 |
+
"scheduler": "simple",
|
| 1655 |
+
"steps": 3,
|
| 1656 |
+
"denoise": 0.2
|
| 1657 |
+
}
|
| 1658 |
+
},
|
| 1659 |
+
{
|
| 1660 |
+
"id": 198,
|
| 1661 |
+
"type": "SamplerCustomAdvanced",
|
| 1662 |
+
"pos": [
|
| 1663 |
+
3932.179236925774,
|
| 1664 |
+
5603.188525701965
|
| 1665 |
+
],
|
| 1666 |
+
"size": [
|
| 1667 |
+
239.76709241172045,
|
| 1668 |
+
326
|
| 1669 |
+
],
|
| 1670 |
+
"flags": {},
|
| 1671 |
+
"order": 42,
|
| 1672 |
+
"mode": 4,
|
| 1673 |
+
"inputs": [
|
| 1674 |
+
{
|
| 1675 |
+
"name": "noise",
|
| 1676 |
+
"type": "NOISE",
|
| 1677 |
+
"link": 362
|
| 1678 |
+
},
|
| 1679 |
+
{
|
| 1680 |
+
"name": "guider",
|
| 1681 |
+
"type": "GUIDER",
|
| 1682 |
+
"link": 363
|
| 1683 |
+
},
|
| 1684 |
+
{
|
| 1685 |
+
"name": "sampler",
|
| 1686 |
+
"type": "SAMPLER",
|
| 1687 |
+
"link": 364
|
| 1688 |
+
},
|
| 1689 |
+
{
|
| 1690 |
+
"name": "sigmas",
|
| 1691 |
+
"type": "SIGMAS",
|
| 1692 |
+
"link": 365
|
| 1693 |
+
},
|
| 1694 |
+
{
|
| 1695 |
+
"name": "latent_image",
|
| 1696 |
+
"type": "LATENT",
|
| 1697 |
+
"link": 372
|
| 1698 |
+
}
|
| 1699 |
+
],
|
| 1700 |
+
"outputs": [
|
| 1701 |
+
{
|
| 1702 |
+
"name": "output",
|
| 1703 |
+
"type": "LATENT",
|
| 1704 |
+
"links": [
|
| 1705 |
+
367
|
| 1706 |
+
]
|
| 1707 |
+
},
|
| 1708 |
+
{
|
| 1709 |
+
"name": "denoised_output",
|
| 1710 |
+
"type": "LATENT",
|
| 1711 |
+
"links": []
|
| 1712 |
+
}
|
| 1713 |
+
],
|
| 1714 |
+
"properties": {
|
| 1715 |
+
"cnr_id": "comfy-core",
|
| 1716 |
+
"ver": "0.30.0",
|
| 1717 |
+
"Node name for S&R": "SamplerCustomAdvanced",
|
| 1718 |
+
"ue_properties": {
|
| 1719 |
+
"widget_ue_connectable": {},
|
| 1720 |
+
"version": "7.5.1",
|
| 1721 |
+
"input_ue_unconnectable": {}
|
| 1722 |
+
}
|
| 1723 |
+
}
|
| 1724 |
+
},
|
| 1725 |
+
{
|
| 1726 |
+
"id": 199,
|
| 1727 |
+
"type": "GetNode",
|
| 1728 |
+
"pos": [
|
| 1729 |
+
4284.484259214214,
|
| 1730 |
+
5735.573429982442
|
| 1731 |
+
],
|
| 1732 |
+
"size": [
|
| 1733 |
+
210,
|
| 1734 |
+
50
|
| 1735 |
+
],
|
| 1736 |
+
"flags": {
|
| 1737 |
+
"collapsed": true
|
| 1738 |
+
},
|
| 1739 |
+
"order": 13,
|
| 1740 |
+
"mode": 4,
|
| 1741 |
+
"inputs": [],
|
| 1742 |
+
"outputs": [
|
| 1743 |
+
{
|
| 1744 |
+
"name": "*",
|
| 1745 |
+
"type": "*",
|
| 1746 |
+
"links": [
|
| 1747 |
+
368
|
| 1748 |
+
]
|
| 1749 |
+
}
|
| 1750 |
+
],
|
| 1751 |
+
"title": "Get_VAE",
|
| 1752 |
+
"properties": {
|
| 1753 |
+
"Node name for S&R": "GetNode",
|
| 1754 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1755 |
+
"ue_properties": {
|
| 1756 |
+
"widget_ue_connectable": {},
|
| 1757 |
+
"version": "7.5.1",
|
| 1758 |
+
"input_ue_unconnectable": {}
|
| 1759 |
+
}
|
| 1760 |
+
},
|
| 1761 |
+
"widgets_values": [
|
| 1762 |
+
"VAE"
|
| 1763 |
+
],
|
| 1764 |
+
"widgets_values_named": {
|
| 1765 |
+
"Constant": "VAE"
|
| 1766 |
+
}
|
| 1767 |
+
},
|
| 1768 |
+
{
|
| 1769 |
+
"id": 200,
|
| 1770 |
+
"type": "VAEDecode",
|
| 1771 |
+
"pos": [
|
| 1772 |
+
4307.784259214213,
|
| 1773 |
+
5796.073429982437
|
| 1774 |
+
],
|
| 1775 |
+
"size": [
|
| 1776 |
+
230,
|
| 1777 |
+
60
|
| 1778 |
+
],
|
| 1779 |
+
"flags": {
|
| 1780 |
+
"collapsed": false
|
| 1781 |
+
},
|
| 1782 |
+
"order": 45,
|
| 1783 |
+
"mode": 4,
|
| 1784 |
+
"inputs": [
|
| 1785 |
+
{
|
| 1786 |
+
"name": "samples",
|
| 1787 |
+
"type": "LATENT",
|
| 1788 |
+
"link": 367
|
| 1789 |
+
},
|
| 1790 |
+
{
|
| 1791 |
+
"name": "vae",
|
| 1792 |
+
"type": "VAE",
|
| 1793 |
+
"link": 368
|
| 1794 |
+
}
|
| 1795 |
+
],
|
| 1796 |
+
"outputs": [
|
| 1797 |
+
{
|
| 1798 |
+
"name": "IMAGE",
|
| 1799 |
+
"type": "IMAGE",
|
| 1800 |
+
"links": [
|
| 1801 |
+
376
|
| 1802 |
+
]
|
| 1803 |
+
}
|
| 1804 |
+
],
|
| 1805 |
+
"properties": {
|
| 1806 |
+
"cnr_id": "comfy-core",
|
| 1807 |
+
"ver": "0.30.0",
|
| 1808 |
+
"Node name for S&R": "VAEDecode",
|
| 1809 |
+
"ue_properties": {
|
| 1810 |
+
"widget_ue_connectable": {},
|
| 1811 |
+
"version": "7.5.1",
|
| 1812 |
+
"input_ue_unconnectable": {}
|
| 1813 |
+
}
|
| 1814 |
+
}
|
| 1815 |
+
},
|
| 1816 |
+
{
|
| 1817 |
+
"id": 202,
|
| 1818 |
+
"type": "VHS_VideoCombine",
|
| 1819 |
+
"pos": [
|
| 1820 |
+
5567.506210306146,
|
| 1821 |
+
5320.6776134084175
|
| 1822 |
+
],
|
| 1823 |
+
"size": [
|
| 1824 |
+
693.741563959413,
|
| 1825 |
+
1518.1827163505593
|
| 1826 |
+
],
|
| 1827 |
+
"flags": {
|
| 1828 |
+
"collapsed": false
|
| 1829 |
+
},
|
| 1830 |
+
"order": 48,
|
| 1831 |
+
"mode": 0,
|
| 1832 |
+
"inputs": [
|
| 1833 |
+
{
|
| 1834 |
+
"name": "images",
|
| 1835 |
+
"type": "IMAGE",
|
| 1836 |
+
"link": 377
|
| 1837 |
+
},
|
| 1838 |
+
{
|
| 1839 |
+
"name": "audio",
|
| 1840 |
+
"shape": 7,
|
| 1841 |
+
"type": "AUDIO",
|
| 1842 |
+
"link": 370
|
| 1843 |
+
},
|
| 1844 |
+
{
|
| 1845 |
+
"name": "meta_batch",
|
| 1846 |
+
"shape": 7,
|
| 1847 |
+
"type": "VHS_BatchManager",
|
| 1848 |
+
"link": null
|
| 1849 |
+
},
|
| 1850 |
+
{
|
| 1851 |
+
"name": "vae",
|
| 1852 |
+
"shape": 7,
|
| 1853 |
+
"type": "VAE",
|
| 1854 |
+
"link": null
|
| 1855 |
+
},
|
| 1856 |
+
{
|
| 1857 |
+
"name": "frame_rate",
|
| 1858 |
+
"type": "FLOAT",
|
| 1859 |
+
"widget": {
|
| 1860 |
+
"name": "frame_rate"
|
| 1861 |
+
},
|
| 1862 |
+
"link": 375
|
| 1863 |
+
}
|
| 1864 |
+
],
|
| 1865 |
+
"outputs": [
|
| 1866 |
+
{
|
| 1867 |
+
"name": "Filenames",
|
| 1868 |
+
"type": "VHS_FILENAMES",
|
| 1869 |
+
"links": null
|
| 1870 |
+
}
|
| 1871 |
+
],
|
| 1872 |
+
"title": "Video Output 2 (Output)",
|
| 1873 |
+
"properties": {
|
| 1874 |
+
"cnr_id": "comfyui-videohelpersuite",
|
| 1875 |
+
"ver": "993082e4f2473bf4acaf06f51e33877a7eb38960",
|
| 1876 |
+
"Node name for S&R": "VHS_VideoCombine",
|
| 1877 |
+
"ue_properties": {
|
| 1878 |
+
"widget_ue_connectable": {
|
| 1879 |
+
"frame_rate": true
|
| 1880 |
+
},
|
| 1881 |
+
"version": "7.5.1",
|
| 1882 |
+
"input_ue_unconnectable": {}
|
| 1883 |
+
},
|
| 1884 |
+
"aux_id": "kosinkadink/ComfyUI-VideoHelperSuite"
|
| 1885 |
+
},
|
| 1886 |
+
"widgets_values": {
|
| 1887 |
+
"frame_rate": 24,
|
| 1888 |
+
"loop_count": 0,
|
| 1889 |
+
"filename_prefix": "minimax-h3/Upscaled_24_fps_video_",
|
| 1890 |
+
"format": "video/h264-mp4",
|
| 1891 |
+
"pix_fmt": "yuv420p",
|
| 1892 |
+
"crf": 12,
|
| 1893 |
+
"save_metadata": true,
|
| 1894 |
+
"trim_to_audio": false,
|
| 1895 |
+
"pingpong": false,
|
| 1896 |
+
"save_output": true,
|
| 1897 |
+
"videopreview": {
|
| 1898 |
+
"hidden": false,
|
| 1899 |
+
"paused": false,
|
| 1900 |
+
"params": {
|
| 1901 |
+
"filename": "vid-patch1_00002-audio.mp4",
|
| 1902 |
+
"subfolder": "minimax-h3",
|
| 1903 |
+
"type": "output",
|
| 1904 |
+
"format": "video/h264-mp4",
|
| 1905 |
+
"frame_rate": 24,
|
| 1906 |
+
"workflow": "vid-patch1_00002.png",
|
| 1907 |
+
"fullpath": "/home/bryan/Documents/ComfyUI/ComfyUI/output/minimax-h3/vid-patch1_00002-audio.mp4"
|
| 1908 |
+
},
|
| 1909 |
+
"muted": false
|
| 1910 |
+
}
|
| 1911 |
+
},
|
| 1912 |
+
"widgets_values_named": {
|
| 1913 |
+
"frame_rate": 24,
|
| 1914 |
+
"loop_count": 0,
|
| 1915 |
+
"filename_prefix": "minimax-h3/Upscaled_24_fps_video_",
|
| 1916 |
+
"format": "video/h264-mp4",
|
| 1917 |
+
"pix_fmt": "yuv420p",
|
| 1918 |
+
"crf": 12,
|
| 1919 |
+
"save_metadata": true,
|
| 1920 |
+
"trim_to_audio": false,
|
| 1921 |
+
"pingpong": false,
|
| 1922 |
+
"save_output": true,
|
| 1923 |
+
"videopreview": {
|
| 1924 |
+
"hidden": false,
|
| 1925 |
+
"paused": false,
|
| 1926 |
+
"params": {
|
| 1927 |
+
"filename": "vid-patch1_00002-audio.mp4",
|
| 1928 |
+
"subfolder": "minimax-h3",
|
| 1929 |
+
"type": "output",
|
| 1930 |
+
"format": "video/h264-mp4",
|
| 1931 |
+
"frame_rate": 24,
|
| 1932 |
+
"workflow": "vid-patch1_00002.png",
|
| 1933 |
+
"fullpath": "/home/bryan/Documents/ComfyUI/ComfyUI/output/minimax-h3/vid-patch1_00002-audio.mp4"
|
| 1934 |
+
},
|
| 1935 |
+
"muted": false
|
| 1936 |
+
}
|
| 1937 |
+
},
|
| 1938 |
+
"ndSuperSelectorEnabled": false,
|
| 1939 |
+
"ndPowerEnabled": false
|
| 1940 |
+
},
|
| 1941 |
+
{
|
| 1942 |
+
"id": 203,
|
| 1943 |
+
"type": "SetNode",
|
| 1944 |
+
"pos": [
|
| 1945 |
+
1286.4724929438958,
|
| 1946 |
+
5255.62196170261
|
| 1947 |
+
],
|
| 1948 |
+
"size": [
|
| 1949 |
+
210,
|
| 1950 |
+
60
|
| 1951 |
+
],
|
| 1952 |
+
"flags": {},
|
| 1953 |
+
"order": 41,
|
| 1954 |
+
"mode": 0,
|
| 1955 |
+
"inputs": [
|
| 1956 |
+
{
|
| 1957 |
+
"name": "AUDIO",
|
| 1958 |
+
"type": "AUDIO",
|
| 1959 |
+
"link": 373
|
| 1960 |
+
}
|
| 1961 |
+
],
|
| 1962 |
+
"outputs": [
|
| 1963 |
+
{
|
| 1964 |
+
"name": "AUDIO",
|
| 1965 |
+
"type": "AUDIO",
|
| 1966 |
+
"links": null
|
| 1967 |
+
}
|
| 1968 |
+
],
|
| 1969 |
+
"title": "Set_src_audio",
|
| 1970 |
+
"properties": {
|
| 1971 |
+
"Node name for S&R": "SetNode",
|
| 1972 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 1973 |
+
"previousName": "src_audio",
|
| 1974 |
+
"ue_properties": {
|
| 1975 |
+
"widget_ue_connectable": {},
|
| 1976 |
+
"version": "7.5.1",
|
| 1977 |
+
"input_ue_unconnectable": {}
|
| 1978 |
+
}
|
| 1979 |
+
},
|
| 1980 |
+
"widgets_values": [
|
| 1981 |
+
"src_audio"
|
| 1982 |
+
],
|
| 1983 |
+
"widgets_values_named": {
|
| 1984 |
+
"Constant": "src_audio"
|
| 1985 |
+
}
|
| 1986 |
+
},
|
| 1987 |
+
{
|
| 1988 |
+
"id": 204,
|
| 1989 |
+
"type": "MathExpression|pysssss",
|
| 1990 |
+
"pos": [
|
| 1991 |
+
4523.449955620569,
|
| 1992 |
+
6055.593667019151
|
| 1993 |
+
],
|
| 1994 |
+
"size": [
|
| 1995 |
+
400,
|
| 1996 |
+
200
|
| 1997 |
+
],
|
| 1998 |
+
"flags": {},
|
| 1999 |
+
"order": 11,
|
| 2000 |
+
"mode": 4,
|
| 2001 |
+
"inputs": [
|
| 2002 |
+
{
|
| 2003 |
+
"name": "a",
|
| 2004 |
+
"shape": 7,
|
| 2005 |
+
"type": "INT,FLOAT,IMAGE,LATENT",
|
| 2006 |
+
"link": null
|
| 2007 |
+
},
|
| 2008 |
+
{
|
| 2009 |
+
"name": "b",
|
| 2010 |
+
"shape": 7,
|
| 2011 |
+
"type": "INT,FLOAT,IMAGE,LATENT",
|
| 2012 |
+
"link": null
|
| 2013 |
+
},
|
| 2014 |
+
{
|
| 2015 |
+
"name": "c",
|
| 2016 |
+
"shape": 7,
|
| 2017 |
+
"type": "INT,FLOAT,IMAGE,LATENT",
|
| 2018 |
+
"link": null
|
| 2019 |
+
}
|
| 2020 |
+
],
|
| 2021 |
+
"outputs": [
|
| 2022 |
+
{
|
| 2023 |
+
"name": "INT",
|
| 2024 |
+
"type": "INT",
|
| 2025 |
+
"links": null
|
| 2026 |
+
},
|
| 2027 |
+
{
|
| 2028 |
+
"name": "FLOAT",
|
| 2029 |
+
"type": "FLOAT",
|
| 2030 |
+
"links": [
|
| 2031 |
+
375
|
| 2032 |
+
]
|
| 2033 |
+
}
|
| 2034 |
+
],
|
| 2035 |
+
"properties": {
|
| 2036 |
+
"cnr_id": "comfyui-custom-scripts",
|
| 2037 |
+
"ver": "1.2.5",
|
| 2038 |
+
"ue_properties": {
|
| 2039 |
+
"widget_ue_connectable": {},
|
| 2040 |
+
"input_ue_unconnectable": {},
|
| 2041 |
+
"version": "7.5.1"
|
| 2042 |
+
}
|
| 2043 |
+
},
|
| 2044 |
+
"widgets_values": [
|
| 2045 |
+
"24*2"
|
| 2046 |
+
],
|
| 2047 |
+
"widgets_values_named": {
|
| 2048 |
+
"expression": "24*2"
|
| 2049 |
+
}
|
| 2050 |
+
},
|
| 2051 |
+
{
|
| 2052 |
+
"id": 206,
|
| 2053 |
+
"type": "RIFEInterpolation",
|
| 2054 |
+
"pos": [
|
| 2055 |
+
5119.520312181979,
|
| 2056 |
+
5795.638672522782
|
| 2057 |
+
],
|
| 2058 |
+
"size": [
|
| 2059 |
+
270,
|
| 2060 |
+
178
|
| 2061 |
+
],
|
| 2062 |
+
"flags": {},
|
| 2063 |
+
"order": 47,
|
| 2064 |
+
"mode": 0,
|
| 2065 |
+
"inputs": [
|
| 2066 |
+
{
|
| 2067 |
+
"name": "images",
|
| 2068 |
+
"type": "IMAGE",
|
| 2069 |
+
"link": 376
|
| 2070 |
+
}
|
| 2071 |
+
],
|
| 2072 |
+
"outputs": [
|
| 2073 |
+
{
|
| 2074 |
+
"name": "images",
|
| 2075 |
+
"type": "IMAGE",
|
| 2076 |
+
"links": [
|
| 2077 |
+
377
|
| 2078 |
+
]
|
| 2079 |
+
}
|
| 2080 |
+
],
|
| 2081 |
+
"properties": {
|
| 2082 |
+
"aux_id": "GACLove/ComfyUI-VFI",
|
| 2083 |
+
"ver": "6176a430f12cd16003f4664c1e3c6af8e96cc3c6",
|
| 2084 |
+
"Node name for S&R": "RIFEInterpolation",
|
| 2085 |
+
"ue_properties": {
|
| 2086 |
+
"widget_ue_connectable": {},
|
| 2087 |
+
"input_ue_unconnectable": {},
|
| 2088 |
+
"version": "7.5.1"
|
| 2089 |
+
}
|
| 2090 |
+
},
|
| 2091 |
+
"widgets_values": [
|
| 2092 |
+
24,
|
| 2093 |
+
60,
|
| 2094 |
+
1,
|
| 2095 |
+
"flownet.pkl",
|
| 2096 |
+
8,
|
| 2097 |
+
true
|
| 2098 |
+
],
|
| 2099 |
+
"widgets_values_named": {
|
| 2100 |
+
"source_fps": 24,
|
| 2101 |
+
"target_fps": 60,
|
| 2102 |
+
"scale": 1,
|
| 2103 |
+
"model_name": "flownet.pkl",
|
| 2104 |
+
"batch_size": 8,
|
| 2105 |
+
"use_fp16": true
|
| 2106 |
+
},
|
| 2107 |
+
"ndSuperSelectorEnabled": false,
|
| 2108 |
+
"ndPowerEnabled": false
|
| 2109 |
+
},
|
| 2110 |
+
{
|
| 2111 |
+
"id": 207,
|
| 2112 |
+
"type": "SetNode",
|
| 2113 |
+
"pos": [
|
| 2114 |
+
596.3791007131739,
|
| 2115 |
+
4439.082344867778
|
| 2116 |
+
],
|
| 2117 |
+
"size": [
|
| 2118 |
+
210,
|
| 2119 |
+
60
|
| 2120 |
+
],
|
| 2121 |
+
"flags": {},
|
| 2122 |
+
"order": 35,
|
| 2123 |
+
"mode": 0,
|
| 2124 |
+
"inputs": [
|
| 2125 |
+
{
|
| 2126 |
+
"name": "MODEL",
|
| 2127 |
+
"type": "MODEL",
|
| 2128 |
+
"link": 379
|
| 2129 |
+
}
|
| 2130 |
+
],
|
| 2131 |
+
"outputs": [
|
| 2132 |
+
{
|
| 2133 |
+
"name": "MODEL",
|
| 2134 |
+
"type": "MODEL",
|
| 2135 |
+
"links": null
|
| 2136 |
+
}
|
| 2137 |
+
],
|
| 2138 |
+
"title": "Set_model_VDN",
|
| 2139 |
+
"properties": {
|
| 2140 |
+
"Node name for S&R": "SetNode",
|
| 2141 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 2142 |
+
"previousName": "model_VDN",
|
| 2143 |
+
"ue_properties": {
|
| 2144 |
+
"widget_ue_connectable": {},
|
| 2145 |
+
"version": "7.5.1",
|
| 2146 |
+
"input_ue_unconnectable": {}
|
| 2147 |
+
}
|
| 2148 |
+
},
|
| 2149 |
+
"widgets_values": [
|
| 2150 |
+
"model_VDN"
|
| 2151 |
+
],
|
| 2152 |
+
"widgets_values_named": {
|
| 2153 |
+
"Constant": "model_VDN"
|
| 2154 |
+
},
|
| 2155 |
+
"color": "#1f1f48",
|
| 2156 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 2157 |
+
},
|
| 2158 |
+
{
|
| 2159 |
+
"id": 208,
|
| 2160 |
+
"type": "SetNode",
|
| 2161 |
+
"pos": [
|
| 2162 |
+
1308.9444211807354,
|
| 2163 |
+
5370.09917893309
|
| 2164 |
+
],
|
| 2165 |
+
"size": [
|
| 2166 |
+
223.53515625,
|
| 2167 |
+
60
|
| 2168 |
+
],
|
| 2169 |
+
"flags": {},
|
| 2170 |
+
"order": 31,
|
| 2171 |
+
"mode": 0,
|
| 2172 |
+
"inputs": [
|
| 2173 |
+
{
|
| 2174 |
+
"name": "CONDITIONING",
|
| 2175 |
+
"type": "CONDITIONING",
|
| 2176 |
+
"link": 380
|
| 2177 |
+
}
|
| 2178 |
+
],
|
| 2179 |
+
"outputs": [
|
| 2180 |
+
{
|
| 2181 |
+
"name": "CONDITIONING",
|
| 2182 |
+
"type": "CONDITIONING",
|
| 2183 |
+
"links": null
|
| 2184 |
+
}
|
| 2185 |
+
],
|
| 2186 |
+
"title": "Set_conditionning",
|
| 2187 |
+
"properties": {
|
| 2188 |
+
"Node name for S&R": "SetNode",
|
| 2189 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 2190 |
+
"previousName": "conditionning",
|
| 2191 |
+
"ue_properties": {
|
| 2192 |
+
"widget_ue_connectable": {},
|
| 2193 |
+
"version": "7.5.1",
|
| 2194 |
+
"input_ue_unconnectable": {}
|
| 2195 |
+
}
|
| 2196 |
+
},
|
| 2197 |
+
"widgets_values": [
|
| 2198 |
+
"conditionning"
|
| 2199 |
+
],
|
| 2200 |
+
"widgets_values_named": {
|
| 2201 |
+
"Constant": "conditionning"
|
| 2202 |
+
},
|
| 2203 |
+
"color": "#38291f",
|
| 2204 |
+
"bgcolor": "rgba(24,24,27,.9)"
|
| 2205 |
+
},
|
| 2206 |
+
{
|
| 2207 |
+
"id": 209,
|
| 2208 |
+
"type": "Fast Groups Bypasser (rgthree)",
|
| 2209 |
+
"pos": [
|
| 2210 |
+
2524.1583410749927,
|
| 2211 |
+
5017.789720985363
|
| 2212 |
+
],
|
| 2213 |
+
"size": [
|
| 2214 |
+
247.2955078125,
|
| 2215 |
+
178
|
| 2216 |
+
],
|
| 2217 |
+
"flags": {},
|
| 2218 |
+
"order": 17,
|
| 2219 |
+
"mode": 0,
|
| 2220 |
+
"inputs": [],
|
| 2221 |
+
"outputs": [
|
| 2222 |
+
{
|
| 2223 |
+
"name": "OPT_CONNECTION",
|
| 2224 |
+
"type": "*",
|
| 2225 |
+
"links": null
|
| 2226 |
+
}
|
| 2227 |
+
],
|
| 2228 |
+
"properties": {
|
| 2229 |
+
"matchColors": "",
|
| 2230 |
+
"matchTitle": "",
|
| 2231 |
+
"showNav": true,
|
| 2232 |
+
"showAllGraphs": true,
|
| 2233 |
+
"sort": "position",
|
| 2234 |
+
"customSortAlphabet": "",
|
| 2235 |
+
"toggleRestriction": "default",
|
| 2236 |
+
"ue_properties": {
|
| 2237 |
+
"widget_ue_connectable": {},
|
| 2238 |
+
"input_ue_unconnectable": {},
|
| 2239 |
+
"version": "7.5.1"
|
| 2240 |
+
}
|
| 2241 |
+
}
|
| 2242 |
+
},
|
| 2243 |
+
{
|
| 2244 |
+
"id": 210,
|
| 2245 |
+
"type": "SaveH3Bundle",
|
| 2246 |
+
"pos": [
|
| 2247 |
+
1961.8501333519866,
|
| 2248 |
+
5241.902352667398
|
| 2249 |
+
],
|
| 2250 |
+
"size": [
|
| 2251 |
+
400,
|
| 2252 |
+
456
|
| 2253 |
+
],
|
| 2254 |
+
"flags": {},
|
| 2255 |
+
"order": 44,
|
| 2256 |
+
"mode": 0,
|
| 2257 |
+
"inputs": [
|
| 2258 |
+
{
|
| 2259 |
+
"name": "latent",
|
| 2260 |
+
"type": "LATENT",
|
| 2261 |
+
"link": 391
|
| 2262 |
+
},
|
| 2263 |
+
{
|
| 2264 |
+
"name": "conditioning",
|
| 2265 |
+
"shape": 7,
|
| 2266 |
+
"type": "CONDITIONING",
|
| 2267 |
+
"link": 381
|
| 2268 |
+
},
|
| 2269 |
+
{
|
| 2270 |
+
"name": "video",
|
| 2271 |
+
"shape": 7,
|
| 2272 |
+
"type": "VIDEO",
|
| 2273 |
+
"link": 392
|
| 2274 |
+
},
|
| 2275 |
+
{
|
| 2276 |
+
"name": "images",
|
| 2277 |
+
"shape": 7,
|
| 2278 |
+
"type": "IMAGE",
|
| 2279 |
+
"link": null
|
| 2280 |
+
},
|
| 2281 |
+
{
|
| 2282 |
+
"name": "audio",
|
| 2283 |
+
"shape": 7,
|
| 2284 |
+
"type": "AUDIO",
|
| 2285 |
+
"link": null
|
| 2286 |
+
},
|
| 2287 |
+
{
|
| 2288 |
+
"name": "width",
|
| 2289 |
+
"shape": 7,
|
| 2290 |
+
"type": "INT",
|
| 2291 |
+
"widget": {
|
| 2292 |
+
"name": "width"
|
| 2293 |
+
},
|
| 2294 |
+
"link": 385
|
| 2295 |
+
},
|
| 2296 |
+
{
|
| 2297 |
+
"name": "height",
|
| 2298 |
+
"shape": 7,
|
| 2299 |
+
"type": "INT",
|
| 2300 |
+
"widget": {
|
| 2301 |
+
"name": "height"
|
| 2302 |
+
},
|
| 2303 |
+
"link": 384
|
| 2304 |
+
},
|
| 2305 |
+
{
|
| 2306 |
+
"name": "seed",
|
| 2307 |
+
"shape": 7,
|
| 2308 |
+
"type": "INT",
|
| 2309 |
+
"widget": {
|
| 2310 |
+
"name": "seed"
|
| 2311 |
+
},
|
| 2312 |
+
"link": 388
|
| 2313 |
+
}
|
| 2314 |
+
],
|
| 2315 |
+
"outputs": [
|
| 2316 |
+
{
|
| 2317 |
+
"name": "bundle_path",
|
| 2318 |
+
"type": "STRING",
|
| 2319 |
+
"links": [
|
| 2320 |
+
390
|
| 2321 |
+
]
|
| 2322 |
+
}
|
| 2323 |
+
],
|
| 2324 |
+
"properties": {
|
| 2325 |
+
"Node name for S&R": "SaveH3Bundle",
|
| 2326 |
+
"ue_properties": {
|
| 2327 |
+
"widget_ue_connectable": {},
|
| 2328 |
+
"input_ue_unconnectable": {},
|
| 2329 |
+
"version": "7.5.1"
|
| 2330 |
+
}
|
| 2331 |
+
},
|
| 2332 |
+
"widgets_values": [
|
| 2333 |
+
"H3/Save_latent_cond/run_",
|
| 2334 |
+
"save",
|
| 2335 |
+
0,
|
| 2336 |
+
0,
|
| 2337 |
+
"randomize",
|
| 2338 |
+
24,
|
| 2339 |
+
5,
|
| 2340 |
+
"",
|
| 2341 |
+
0,
|
| 2342 |
+
"randomize",
|
| 2343 |
+
24,
|
| 2344 |
+
5,
|
| 2345 |
+
""
|
| 2346 |
+
],
|
| 2347 |
+
"widgets_values_named": {
|
| 2348 |
+
"bundle_name": "H3/Save_latent_cond/run_",
|
| 2349 |
+
"mode": "save",
|
| 2350 |
+
"video_path": 0,
|
| 2351 |
+
"preview_frames": 0,
|
| 2352 |
+
"preview_mp4": "randomize",
|
| 2353 |
+
"keep_last_n": 24,
|
| 2354 |
+
"width": 5,
|
| 2355 |
+
"height": "",
|
| 2356 |
+
"seed": 0,
|
| 2357 |
+
"control_after_generate": "randomize",
|
| 2358 |
+
"fps": 24,
|
| 2359 |
+
"generation_seconds": 5,
|
| 2360 |
+
"notes": ""
|
| 2361 |
+
}
|
| 2362 |
+
},
|
| 2363 |
+
{
|
| 2364 |
+
"id": 211,
|
| 2365 |
+
"type": "GetNode",
|
| 2366 |
+
"pos": [
|
| 2367 |
+
1620.3068074605058,
|
| 2368 |
+
5455.36235488306
|
| 2369 |
+
],
|
| 2370 |
+
"size": [
|
| 2371 |
+
210,
|
| 2372 |
+
60
|
| 2373 |
+
],
|
| 2374 |
+
"flags": {},
|
| 2375 |
+
"order": 14,
|
| 2376 |
+
"mode": 0,
|
| 2377 |
+
"inputs": [],
|
| 2378 |
+
"outputs": [
|
| 2379 |
+
{
|
| 2380 |
+
"name": "INT",
|
| 2381 |
+
"type": "INT",
|
| 2382 |
+
"links": [
|
| 2383 |
+
384
|
| 2384 |
+
]
|
| 2385 |
+
}
|
| 2386 |
+
],
|
| 2387 |
+
"title": "Get_height",
|
| 2388 |
+
"properties": {
|
| 2389 |
+
"Node name for S&R": "GetNode",
|
| 2390 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 2391 |
+
"ue_properties": {
|
| 2392 |
+
"widget_ue_connectable": {},
|
| 2393 |
+
"version": "7.5.1",
|
| 2394 |
+
"input_ue_unconnectable": {}
|
| 2395 |
+
}
|
| 2396 |
+
},
|
| 2397 |
+
"widgets_values": [
|
| 2398 |
+
"height"
|
| 2399 |
+
],
|
| 2400 |
+
"widgets_values_named": {
|
| 2401 |
+
"Constant": "height"
|
| 2402 |
+
},
|
| 2403 |
+
"color": "#1b4669",
|
| 2404 |
+
"bgcolor": "#29699c"
|
| 2405 |
+
},
|
| 2406 |
+
{
|
| 2407 |
+
"id": 212,
|
| 2408 |
+
"type": "GetNode",
|
| 2409 |
+
"pos": [
|
| 2410 |
+
1619.4751745121116,
|
| 2411 |
+
5333.651186770866
|
| 2412 |
+
],
|
| 2413 |
+
"size": [
|
| 2414 |
+
210,
|
| 2415 |
+
58
|
| 2416 |
+
],
|
| 2417 |
+
"flags": {},
|
| 2418 |
+
"order": 15,
|
| 2419 |
+
"mode": 0,
|
| 2420 |
+
"inputs": [],
|
| 2421 |
+
"outputs": [
|
| 2422 |
+
{
|
| 2423 |
+
"name": "INT",
|
| 2424 |
+
"type": "INT",
|
| 2425 |
+
"links": [
|
| 2426 |
+
385
|
| 2427 |
+
]
|
| 2428 |
+
}
|
| 2429 |
+
],
|
| 2430 |
+
"title": "Get_width",
|
| 2431 |
+
"properties": {
|
| 2432 |
+
"Node name for S&R": "GetNode",
|
| 2433 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 2434 |
+
"ue_properties": {
|
| 2435 |
+
"widget_ue_connectable": {},
|
| 2436 |
+
"version": "7.5.1",
|
| 2437 |
+
"input_ue_unconnectable": {}
|
| 2438 |
+
}
|
| 2439 |
+
},
|
| 2440 |
+
"widgets_values": [
|
| 2441 |
+
"width"
|
| 2442 |
+
],
|
| 2443 |
+
"widgets_values_named": {
|
| 2444 |
+
"Constant": "width"
|
| 2445 |
+
},
|
| 2446 |
+
"color": "#1b4669",
|
| 2447 |
+
"bgcolor": "#29699c"
|
| 2448 |
+
},
|
| 2449 |
+
{
|
| 2450 |
+
"id": 213,
|
| 2451 |
+
"type": "SetNode",
|
| 2452 |
+
"pos": [
|
| 2453 |
+
-738.3667157504831,
|
| 2454 |
+
5830.672682838942
|
| 2455 |
+
],
|
| 2456 |
+
"size": [
|
| 2457 |
+
210,
|
| 2458 |
+
60
|
| 2459 |
+
],
|
| 2460 |
+
"flags": {
|
| 2461 |
+
"collapsed": true
|
| 2462 |
+
},
|
| 2463 |
+
"order": 27,
|
| 2464 |
+
"mode": 0,
|
| 2465 |
+
"inputs": [
|
| 2466 |
+
{
|
| 2467 |
+
"name": "INT",
|
| 2468 |
+
"type": "INT",
|
| 2469 |
+
"link": 383
|
| 2470 |
+
}
|
| 2471 |
+
],
|
| 2472 |
+
"outputs": [
|
| 2473 |
+
{
|
| 2474 |
+
"name": "INT",
|
| 2475 |
+
"type": "INT",
|
| 2476 |
+
"links": null
|
| 2477 |
+
}
|
| 2478 |
+
],
|
| 2479 |
+
"title": "Set_height",
|
| 2480 |
+
"properties": {
|
| 2481 |
+
"Node name for S&R": "SetNode",
|
| 2482 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 2483 |
+
"previousName": "height",
|
| 2484 |
+
"ue_properties": {
|
| 2485 |
+
"widget_ue_connectable": {},
|
| 2486 |
+
"version": "7.5.1",
|
| 2487 |
+
"input_ue_unconnectable": {}
|
| 2488 |
+
}
|
| 2489 |
+
},
|
| 2490 |
+
"widgets_values": [
|
| 2491 |
+
"height"
|
| 2492 |
+
],
|
| 2493 |
+
"widgets_values_named": {
|
| 2494 |
+
"Constant": "height"
|
| 2495 |
+
},
|
| 2496 |
+
"color": "#1b4669",
|
| 2497 |
+
"bgcolor": "#29699c"
|
| 2498 |
+
},
|
| 2499 |
+
{
|
| 2500 |
+
"id": 214,
|
| 2501 |
+
"type": "SetNode",
|
| 2502 |
+
"pos": [
|
| 2503 |
+
-542.2339207115867,
|
| 2504 |
+
5608.02949441485
|
| 2505 |
+
],
|
| 2506 |
+
"size": [
|
| 2507 |
+
210,
|
| 2508 |
+
58
|
| 2509 |
+
],
|
| 2510 |
+
"flags": {
|
| 2511 |
+
"collapsed": true
|
| 2512 |
+
},
|
| 2513 |
+
"order": 24,
|
| 2514 |
+
"mode": 0,
|
| 2515 |
+
"inputs": [
|
| 2516 |
+
{
|
| 2517 |
+
"name": "INT",
|
| 2518 |
+
"type": "INT",
|
| 2519 |
+
"link": 382
|
| 2520 |
+
}
|
| 2521 |
+
],
|
| 2522 |
+
"outputs": [
|
| 2523 |
+
{
|
| 2524 |
+
"name": "INT",
|
| 2525 |
+
"type": "INT",
|
| 2526 |
+
"links": null
|
| 2527 |
+
}
|
| 2528 |
+
],
|
| 2529 |
+
"title": "Set_width",
|
| 2530 |
+
"properties": {
|
| 2531 |
+
"Node name for S&R": "SetNode",
|
| 2532 |
+
"aux_id": "kijai/ComfyUI-KJNodes",
|
| 2533 |
+
"previousName": "width",
|
| 2534 |
+
"ue_properties": {
|
| 2535 |
+
"widget_ue_connectable": {},
|
| 2536 |
+
"version": "7.5.1",
|
| 2537 |
+
"input_ue_unconnectable": {}
|
| 2538 |
+
}
|
| 2539 |
+
},
|
| 2540 |
+
"widgets_values": [
|
| 2541 |
+
"width"
|
| 2542 |
+
],
|
| 2543 |
+
"widgets_values_named": {
|
| 2544 |
+
"Constant": "width"
|
| 2545 |
+
},
|
| 2546 |
+
"color": "#1b4669",
|
| 2547 |
+
"bgcolor": "#29699c"
|
| 2548 |
+
},
|
| 2549 |
+
{
|
| 2550 |
+
"id": 216,
|
| 2551 |
+
"type": "PrimitiveInt",
|
| 2552 |
+
"pos": [
|
| 2553 |
+
1589.11306583775,
|
| 2554 |
+
5076.806327532248
|
| 2555 |
+
],
|
| 2556 |
+
"size": [
|
| 2557 |
+
270,
|
| 2558 |
+
82
|
| 2559 |
+
],
|
| 2560 |
+
"flags": {},
|
| 2561 |
+
"order": 16,
|
| 2562 |
+
"mode": 0,
|
| 2563 |
+
"inputs": [],
|
| 2564 |
+
"outputs": [
|
| 2565 |
+
{
|
| 2566 |
+
"name": "INT",
|
| 2567 |
+
"type": "INT",
|
| 2568 |
+
"links": [
|
| 2569 |
+
388,
|
| 2570 |
+
389
|
| 2571 |
+
]
|
| 2572 |
+
}
|
| 2573 |
+
],
|
| 2574 |
+
"properties": {
|
| 2575 |
+
"cnr_id": "comfy-core",
|
| 2576 |
+
"ver": "0.34.5",
|
| 2577 |
+
"Node name for S&R": "PrimitiveInt",
|
| 2578 |
+
"ue_properties": {
|
| 2579 |
+
"widget_ue_connectable": {},
|
| 2580 |
+
"input_ue_unconnectable": {},
|
| 2581 |
+
"version": "7.5.1"
|
| 2582 |
+
}
|
| 2583 |
+
},
|
| 2584 |
+
"widgets_values": [
|
| 2585 |
+
4224,
|
| 2586 |
+
"fixed"
|
| 2587 |
+
],
|
| 2588 |
+
"widgets_values_named": {
|
| 2589 |
+
"value": 4224,
|
| 2590 |
+
"fixed": "fixed"
|
| 2591 |
+
}
|
| 2592 |
+
},
|
| 2593 |
+
{
|
| 2594 |
+
"id": 217,
|
| 2595 |
+
"type": "ShowText|pysssss",
|
| 2596 |
+
"pos": [
|
| 2597 |
+
2379.8169537945423,
|
| 2598 |
+
5268.9087051319975
|
| 2599 |
+
],
|
| 2600 |
+
"size": [
|
| 2601 |
+
247.7914780029946,
|
| 2602 |
+
162.23318240239496
|
| 2603 |
+
],
|
| 2604 |
+
"flags": {},
|
| 2605 |
+
"order": 46,
|
| 2606 |
+
"mode": 0,
|
| 2607 |
+
"inputs": [
|
| 2608 |
+
{
|
| 2609 |
+
"name": "text",
|
| 2610 |
+
"type": "STRING",
|
| 2611 |
+
"link": 390
|
| 2612 |
+
}
|
| 2613 |
+
],
|
| 2614 |
+
"outputs": [
|
| 2615 |
+
{
|
| 2616 |
+
"name": "STRING",
|
| 2617 |
+
"shape": 6,
|
| 2618 |
+
"type": "STRING",
|
| 2619 |
+
"links": null
|
| 2620 |
+
}
|
| 2621 |
+
],
|
| 2622 |
+
"properties": {
|
| 2623 |
+
"cnr_id": "comfyui-custom-scripts",
|
| 2624 |
+
"ver": "1.2.5",
|
| 2625 |
+
"Node name for S&R": "ShowText|pysssss",
|
| 2626 |
+
"ue_properties": {
|
| 2627 |
+
"widget_ue_connectable": {},
|
| 2628 |
+
"input_ue_unconnectable": {},
|
| 2629 |
+
"version": "7.5.1"
|
| 2630 |
+
}
|
| 2631 |
+
},
|
| 2632 |
+
"widgets_values": [
|
| 2633 |
+
"/home/bryan/Documents/ComfyUI/ComfyUI/output/h3_bundles/H3Save_latent_condrun__20260907_152858"
|
| 2634 |
+
],
|
| 2635 |
+
"widgets_values_named": {
|
| 2636 |
+
"text_0": "/home/bryan/Documents/ComfyUI/ComfyUI/output/h3_bundles/H3Save_latent_condrun__20260907_152858"
|
| 2637 |
+
}
|
| 2638 |
+
}
|
| 2639 |
+
],
|
| 2640 |
+
"links": [
|
| 2641 |
+
[
|
| 2642 |
+
250,
|
| 2643 |
+
120,
|
| 2644 |
+
0,
|
| 2645 |
+
121,
|
| 2646 |
+
1,
|
| 2647 |
+
"VAE"
|
| 2648 |
+
],
|
| 2649 |
+
[
|
| 2650 |
+
251,
|
| 2651 |
+
119,
|
| 2652 |
+
0,
|
| 2653 |
+
122,
|
| 2654 |
+
1,
|
| 2655 |
+
"VAE"
|
| 2656 |
+
],
|
| 2657 |
+
[
|
| 2658 |
+
253,
|
| 2659 |
+
129,
|
| 2660 |
+
0,
|
| 2661 |
+
125,
|
| 2662 |
+
0,
|
| 2663 |
+
"NOISE"
|
| 2664 |
+
],
|
| 2665 |
+
[
|
| 2666 |
+
254,
|
| 2667 |
+
126,
|
| 2668 |
+
0,
|
| 2669 |
+
125,
|
| 2670 |
+
1,
|
| 2671 |
+
"GUIDER"
|
| 2672 |
+
],
|
| 2673 |
+
[
|
| 2674 |
+
256,
|
| 2675 |
+
124,
|
| 2676 |
+
0,
|
| 2677 |
+
125,
|
| 2678 |
+
3,
|
| 2679 |
+
"SIGMAS"
|
| 2680 |
+
],
|
| 2681 |
+
[
|
| 2682 |
+
258,
|
| 2683 |
+
122,
|
| 2684 |
+
0,
|
| 2685 |
+
130,
|
| 2686 |
+
0,
|
| 2687 |
+
"IMAGE"
|
| 2688 |
+
],
|
| 2689 |
+
[
|
| 2690 |
+
260,
|
| 2691 |
+
130,
|
| 2692 |
+
0,
|
| 2693 |
+
92,
|
| 2694 |
+
0,
|
| 2695 |
+
"VIDEO"
|
| 2696 |
+
],
|
| 2697 |
+
[
|
| 2698 |
+
280,
|
| 2699 |
+
125,
|
| 2700 |
+
0,
|
| 2701 |
+
122,
|
| 2702 |
+
0,
|
| 2703 |
+
"LATENT"
|
| 2704 |
+
],
|
| 2705 |
+
[
|
| 2706 |
+
281,
|
| 2707 |
+
125,
|
| 2708 |
+
0,
|
| 2709 |
+
121,
|
| 2710 |
+
0,
|
| 2711 |
+
"LATENT"
|
| 2712 |
+
],
|
| 2713 |
+
[
|
| 2714 |
+
285,
|
| 2715 |
+
115,
|
| 2716 |
+
0,
|
| 2717 |
+
144,
|
| 2718 |
+
0,
|
| 2719 |
+
"INT"
|
| 2720 |
+
],
|
| 2721 |
+
[
|
| 2722 |
+
286,
|
| 2723 |
+
115,
|
| 2724 |
+
1,
|
| 2725 |
+
145,
|
| 2726 |
+
0,
|
| 2727 |
+
"INT"
|
| 2728 |
+
],
|
| 2729 |
+
[
|
| 2730 |
+
328,
|
| 2731 |
+
121,
|
| 2732 |
+
0,
|
| 2733 |
+
130,
|
| 2734 |
+
1,
|
| 2735 |
+
"AUDIO"
|
| 2736 |
+
],
|
| 2737 |
+
[
|
| 2738 |
+
332,
|
| 2739 |
+
127,
|
| 2740 |
+
0,
|
| 2741 |
+
177,
|
| 2742 |
+
0,
|
| 2743 |
+
"MODEL"
|
| 2744 |
+
],
|
| 2745 |
+
[
|
| 2746 |
+
341,
|
| 2747 |
+
179,
|
| 2748 |
+
0,
|
| 2749 |
+
125,
|
| 2750 |
+
2,
|
| 2751 |
+
"SAMPLER"
|
| 2752 |
+
],
|
| 2753 |
+
[
|
| 2754 |
+
344,
|
| 2755 |
+
185,
|
| 2756 |
+
0,
|
| 2757 |
+
126,
|
| 2758 |
+
1,
|
| 2759 |
+
"CONDITIONING"
|
| 2760 |
+
],
|
| 2761 |
+
[
|
| 2762 |
+
345,
|
| 2763 |
+
185,
|
| 2764 |
+
1,
|
| 2765 |
+
125,
|
| 2766 |
+
4,
|
| 2767 |
+
"LATENT"
|
| 2768 |
+
],
|
| 2769 |
+
[
|
| 2770 |
+
346,
|
| 2771 |
+
128,
|
| 2772 |
+
0,
|
| 2773 |
+
185,
|
| 2774 |
+
0,
|
| 2775 |
+
"CLIP"
|
| 2776 |
+
],
|
| 2777 |
+
[
|
| 2778 |
+
347,
|
| 2779 |
+
119,
|
| 2780 |
+
0,
|
| 2781 |
+
185,
|
| 2782 |
+
1,
|
| 2783 |
+
"VAE"
|
| 2784 |
+
],
|
| 2785 |
+
[
|
| 2786 |
+
348,
|
| 2787 |
+
120,
|
| 2788 |
+
0,
|
| 2789 |
+
185,
|
| 2790 |
+
2,
|
| 2791 |
+
"VAE"
|
| 2792 |
+
],
|
| 2793 |
+
[
|
| 2794 |
+
349,
|
| 2795 |
+
115,
|
| 2796 |
+
0,
|
| 2797 |
+
184,
|
| 2798 |
+
1,
|
| 2799 |
+
"INT"
|
| 2800 |
+
],
|
| 2801 |
+
[
|
| 2802 |
+
350,
|
| 2803 |
+
115,
|
| 2804 |
+
1,
|
| 2805 |
+
184,
|
| 2806 |
+
2,
|
| 2807 |
+
"INT"
|
| 2808 |
+
],
|
| 2809 |
+
[
|
| 2810 |
+
353,
|
| 2811 |
+
184,
|
| 2812 |
+
0,
|
| 2813 |
+
185,
|
| 2814 |
+
3,
|
| 2815 |
+
"MINIMAX_H3_TIMELINE_PLAN"
|
| 2816 |
+
],
|
| 2817 |
+
[
|
| 2818 |
+
354,
|
| 2819 |
+
187,
|
| 2820 |
+
0,
|
| 2821 |
+
186,
|
| 2822 |
+
0,
|
| 2823 |
+
"MODEL"
|
| 2824 |
+
],
|
| 2825 |
+
[
|
| 2826 |
+
355,
|
| 2827 |
+
188,
|
| 2828 |
+
0,
|
| 2829 |
+
187,
|
| 2830 |
+
0,
|
| 2831 |
+
"MODEL"
|
| 2832 |
+
],
|
| 2833 |
+
[
|
| 2834 |
+
356,
|
| 2835 |
+
177,
|
| 2836 |
+
0,
|
| 2837 |
+
188,
|
| 2838 |
+
0,
|
| 2839 |
+
"MODEL"
|
| 2840 |
+
],
|
| 2841 |
+
[
|
| 2842 |
+
357,
|
| 2843 |
+
186,
|
| 2844 |
+
0,
|
| 2845 |
+
126,
|
| 2846 |
+
0,
|
| 2847 |
+
"MODEL"
|
| 2848 |
+
],
|
| 2849 |
+
[
|
| 2850 |
+
358,
|
| 2851 |
+
186,
|
| 2852 |
+
0,
|
| 2853 |
+
124,
|
| 2854 |
+
0,
|
| 2855 |
+
"MODEL"
|
| 2856 |
+
],
|
| 2857 |
+
[
|
| 2858 |
+
359,
|
| 2859 |
+
190,
|
| 2860 |
+
0,
|
| 2861 |
+
195,
|
| 2862 |
+
0,
|
| 2863 |
+
"MODEL"
|
| 2864 |
+
],
|
| 2865 |
+
[
|
| 2866 |
+
360,
|
| 2867 |
+
191,
|
| 2868 |
+
0,
|
| 2869 |
+
195,
|
| 2870 |
+
1,
|
| 2871 |
+
"CONDITIONING"
|
| 2872 |
+
],
|
| 2873 |
+
[
|
| 2874 |
+
361,
|
| 2875 |
+
190,
|
| 2876 |
+
0,
|
| 2877 |
+
197,
|
| 2878 |
+
0,
|
| 2879 |
+
"MODEL"
|
| 2880 |
+
],
|
| 2881 |
+
[
|
| 2882 |
+
362,
|
| 2883 |
+
196,
|
| 2884 |
+
0,
|
| 2885 |
+
198,
|
| 2886 |
+
0,
|
| 2887 |
+
"NOISE"
|
| 2888 |
+
],
|
| 2889 |
+
[
|
| 2890 |
+
363,
|
| 2891 |
+
195,
|
| 2892 |
+
0,
|
| 2893 |
+
198,
|
| 2894 |
+
1,
|
| 2895 |
+
"GUIDER"
|
| 2896 |
+
],
|
| 2897 |
+
[
|
| 2898 |
+
364,
|
| 2899 |
+
194,
|
| 2900 |
+
0,
|
| 2901 |
+
198,
|
| 2902 |
+
2,
|
| 2903 |
+
"SAMPLER"
|
| 2904 |
+
],
|
| 2905 |
+
[
|
| 2906 |
+
365,
|
| 2907 |
+
197,
|
| 2908 |
+
0,
|
| 2909 |
+
198,
|
| 2910 |
+
3,
|
| 2911 |
+
"SIGMAS"
|
| 2912 |
+
],
|
| 2913 |
+
[
|
| 2914 |
+
367,
|
| 2915 |
+
198,
|
| 2916 |
+
0,
|
| 2917 |
+
200,
|
| 2918 |
+
0,
|
| 2919 |
+
"LATENT"
|
| 2920 |
+
],
|
| 2921 |
+
[
|
| 2922 |
+
368,
|
| 2923 |
+
199,
|
| 2924 |
+
0,
|
| 2925 |
+
200,
|
| 2926 |
+
1,
|
| 2927 |
+
"VAE"
|
| 2928 |
+
],
|
| 2929 |
+
[
|
| 2930 |
+
370,
|
| 2931 |
+
193,
|
| 2932 |
+
0,
|
| 2933 |
+
202,
|
| 2934 |
+
1,
|
| 2935 |
+
"AUDIO"
|
| 2936 |
+
],
|
| 2937 |
+
[
|
| 2938 |
+
372,
|
| 2939 |
+
192,
|
| 2940 |
+
0,
|
| 2941 |
+
198,
|
| 2942 |
+
4,
|
| 2943 |
+
"LATENT"
|
| 2944 |
+
],
|
| 2945 |
+
[
|
| 2946 |
+
373,
|
| 2947 |
+
121,
|
| 2948 |
+
0,
|
| 2949 |
+
203,
|
| 2950 |
+
0,
|
| 2951 |
+
"AUDIO"
|
| 2952 |
+
],
|
| 2953 |
+
[
|
| 2954 |
+
375,
|
| 2955 |
+
204,
|
| 2956 |
+
1,
|
| 2957 |
+
202,
|
| 2958 |
+
4,
|
| 2959 |
+
"FLOAT"
|
| 2960 |
+
],
|
| 2961 |
+
[
|
| 2962 |
+
376,
|
| 2963 |
+
200,
|
| 2964 |
+
0,
|
| 2965 |
+
206,
|
| 2966 |
+
0,
|
| 2967 |
+
"IMAGE"
|
| 2968 |
+
],
|
| 2969 |
+
[
|
| 2970 |
+
377,
|
| 2971 |
+
206,
|
| 2972 |
+
0,
|
| 2973 |
+
202,
|
| 2974 |
+
0,
|
| 2975 |
+
"IMAGE"
|
| 2976 |
+
],
|
| 2977 |
+
[
|
| 2978 |
+
378,
|
| 2979 |
+
125,
|
| 2980 |
+
0,
|
| 2981 |
+
192,
|
| 2982 |
+
0,
|
| 2983 |
+
"LATENT"
|
| 2984 |
+
],
|
| 2985 |
+
[
|
| 2986 |
+
379,
|
| 2987 |
+
186,
|
| 2988 |
+
0,
|
| 2989 |
+
207,
|
| 2990 |
+
0,
|
| 2991 |
+
"MODEL"
|
| 2992 |
+
],
|
| 2993 |
+
[
|
| 2994 |
+
380,
|
| 2995 |
+
185,
|
| 2996 |
+
0,
|
| 2997 |
+
208,
|
| 2998 |
+
0,
|
| 2999 |
+
"CONDITIONING"
|
| 3000 |
+
],
|
| 3001 |
+
[
|
| 3002 |
+
381,
|
| 3003 |
+
185,
|
| 3004 |
+
0,
|
| 3005 |
+
210,
|
| 3006 |
+
1,
|
| 3007 |
+
"CONDITIONING"
|
| 3008 |
+
],
|
| 3009 |
+
[
|
| 3010 |
+
382,
|
| 3011 |
+
115,
|
| 3012 |
+
0,
|
| 3013 |
+
214,
|
| 3014 |
+
0,
|
| 3015 |
+
"INT"
|
| 3016 |
+
],
|
| 3017 |
+
[
|
| 3018 |
+
383,
|
| 3019 |
+
115,
|
| 3020 |
+
1,
|
| 3021 |
+
213,
|
| 3022 |
+
0,
|
| 3023 |
+
"INT"
|
| 3024 |
+
],
|
| 3025 |
+
[
|
| 3026 |
+
384,
|
| 3027 |
+
211,
|
| 3028 |
+
0,
|
| 3029 |
+
210,
|
| 3030 |
+
6,
|
| 3031 |
+
"INT"
|
| 3032 |
+
],
|
| 3033 |
+
[
|
| 3034 |
+
385,
|
| 3035 |
+
212,
|
| 3036 |
+
0,
|
| 3037 |
+
210,
|
| 3038 |
+
5,
|
| 3039 |
+
"INT"
|
| 3040 |
+
],
|
| 3041 |
+
[
|
| 3042 |
+
388,
|
| 3043 |
+
216,
|
| 3044 |
+
0,
|
| 3045 |
+
210,
|
| 3046 |
+
7,
|
| 3047 |
+
"INT"
|
| 3048 |
+
],
|
| 3049 |
+
[
|
| 3050 |
+
389,
|
| 3051 |
+
216,
|
| 3052 |
+
0,
|
| 3053 |
+
129,
|
| 3054 |
+
0,
|
| 3055 |
+
"INT"
|
| 3056 |
+
],
|
| 3057 |
+
[
|
| 3058 |
+
390,
|
| 3059 |
+
210,
|
| 3060 |
+
0,
|
| 3061 |
+
217,
|
| 3062 |
+
0,
|
| 3063 |
+
"STRING"
|
| 3064 |
+
],
|
| 3065 |
+
[
|
| 3066 |
+
391,
|
| 3067 |
+
125,
|
| 3068 |
+
0,
|
| 3069 |
+
210,
|
| 3070 |
+
0,
|
| 3071 |
+
"LATENT"
|
| 3072 |
+
],
|
| 3073 |
+
[
|
| 3074 |
+
392,
|
| 3075 |
+
130,
|
| 3076 |
+
0,
|
| 3077 |
+
210,
|
| 3078 |
+
2,
|
| 3079 |
+
"VIDEO"
|
| 3080 |
+
]
|
| 3081 |
+
],
|
| 3082 |
+
"groups": [
|
| 3083 |
+
{
|
| 3084 |
+
"id": 1,
|
| 3085 |
+
"title": "Models",
|
| 3086 |
+
"bounding": [
|
| 3087 |
+
-1520,
|
| 3088 |
+
4840,
|
| 3089 |
+
700,
|
| 3090 |
+
670
|
| 3091 |
+
],
|
| 3092 |
+
"color": "#3f789e",
|
| 3093 |
+
"flags": {}
|
| 3094 |
+
},
|
| 3095 |
+
{
|
| 3096 |
+
"id": 2,
|
| 3097 |
+
"title": "Sampling",
|
| 3098 |
+
"bounding": [
|
| 3099 |
+
136.29100926618636,
|
| 3100 |
+
4834.271224643126,
|
| 3101 |
+
690,
|
| 3102 |
+
670
|
| 3103 |
+
],
|
| 3104 |
+
"color": "#3f789e",
|
| 3105 |
+
"flags": {}
|
| 3106 |
+
},
|
| 3107 |
+
{
|
| 3108 |
+
"id": 3,
|
| 3109 |
+
"title": "Conditioning",
|
| 3110 |
+
"bounding": [
|
| 3111 |
+
-790,
|
| 3112 |
+
4840,
|
| 3113 |
+
480,
|
| 3114 |
+
670
|
| 3115 |
+
],
|
| 3116 |
+
"color": "#3f789e",
|
| 3117 |
+
"flags": {}
|
| 3118 |
+
},
|
| 3119 |
+
{
|
| 3120 |
+
"id": 4,
|
| 3121 |
+
"title": "Decoding and create video",
|
| 3122 |
+
"bounding": [
|
| 3123 |
+
888.501561617095,
|
| 3124 |
+
4839.100440233215,
|
| 3125 |
+
670,
|
| 3126 |
+
670
|
| 3127 |
+
],
|
| 3128 |
+
"color": "#3f789e",
|
| 3129 |
+
"flags": {}
|
| 3130 |
+
},
|
| 3131 |
+
{
|
| 3132 |
+
"id": 5,
|
| 3133 |
+
"title": "User Inputs",
|
| 3134 |
+
"bounding": [
|
| 3135 |
+
-1520,
|
| 3136 |
+
5540,
|
| 3137 |
+
1210,
|
| 3138 |
+
880
|
| 3139 |
+
],
|
| 3140 |
+
"color": "#3f789e",
|
| 3141 |
+
"flags": {}
|
| 3142 |
+
},
|
| 3143 |
+
{
|
| 3144 |
+
"id": 6,
|
| 3145 |
+
"title": "Upscaling",
|
| 3146 |
+
"bounding": [
|
| 3147 |
+
2558.029612735003,
|
| 3148 |
+
5351.991034540429,
|
| 3149 |
+
2454.80502,
|
| 3150 |
+
1275.2606874999992
|
| 3151 |
+
],
|
| 3152 |
+
"color": "#3f789e",
|
| 3153 |
+
"flags": {}
|
| 3154 |
+
}
|
| 3155 |
+
],
|
| 3156 |
+
"config": {},
|
| 3157 |
+
"extra": {
|
| 3158 |
+
"ds": {
|
| 3159 |
+
"scale": 0.9277171243279717,
|
| 3160 |
+
"offset": [
|
| 3161 |
+
1500.7939306240755,
|
| 3162 |
+
-3948.661739430455
|
| 3163 |
+
]
|
| 3164 |
+
},
|
| 3165 |
+
"frontendVersion": "1.49.6",
|
| 3166 |
+
"VHS_latentpreview": false,
|
| 3167 |
+
"VHS_latentpreviewrate": 0,
|
| 3168 |
+
"VHS_MetadataImage": true,
|
| 3169 |
+
"VHS_KeepIntermediate": true,
|
| 3170 |
+
"anomalous_hashes": {
|
| 3171 |
+
"127_minimax_h3_ref2va_int8_convrot.safetensors": {
|
| 3172 |
+
"hash": "",
|
| 3173 |
+
"size": 34038894550
|
| 3174 |
+
},
|
| 3175 |
+
"119_minimax_h3_video_vae_fp16.safetensors": {
|
| 3176 |
+
"hash": "",
|
| 3177 |
+
"size": 5207808496
|
| 3178 |
+
},
|
| 3179 |
+
"120_minimax_h3_audio_vae_fp32.safetensors": {
|
| 3180 |
+
"hash": "",
|
| 3181 |
+
"size": 605254808
|
| 3182 |
+
},
|
| 3183 |
+
"177_minimax_h3_fl2v_lightx2v_turbo_4step_v1.0_768p_resized_avg_rank_31_bf16.safetensors": {
|
| 3184 |
+
"hash": "",
|
| 3185 |
+
"size": 440873704
|
| 3186 |
+
}
|
| 3187 |
+
},
|
| 3188 |
+
"ue_links": [],
|
| 3189 |
+
"links_added_by_ue": []
|
| 3190 |
+
},
|
| 3191 |
+
"version": 0.4
|
| 3192 |
+
}
|