sakils123 Noob-Master60nine commited on
Commit
9111d07
·
0 Parent(s):

Duplicate from Noob-Master60nine/Anima-Control-Pose

Browse files

Co-authored-by: Adam Madrigal <Noob-Master60nine@users.noreply.huggingface.co>

.gitattributes ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz 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
+ samples/grid.png filter=lfs diff=lfs merge=lfs -text
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Anima Control — Pose (Preview-1)
2
+ Non-Commercial License (inherited)
3
+
4
+ These adapter weights (adapter_model.safetensors) are a derivative of the Anima
5
+ base model (circlestone-labs/Anima), which is itself a derivative of
6
+ nvidia/Cosmos-Predict2-2B-Text2Image.
7
+
8
+ As a derivative, these weights inherit and are bound by the upstream terms:
9
+
10
+ 1. CircleStone Labs Non-Commercial License
11
+ https://huggingface.co/circlestone-labs/Anima (see its LICENSE.md)
12
+ 2. NVIDIA Open Model License Agreement (insofar as it applies to Derivative Models)
13
+ https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/
14
+
15
+ The MODEL WEIGHTS are for NON-COMMERCIAL use only.
16
+
17
+ Generated images (Outputs) are NOT restricted by these terms and may be used
18
+ commercially, consistent with the base model's license.
19
+
20
+ This file is a pointer to the governing upstream terms, not an independent grant
21
+ of rights. If an upstream license forbids a use, that prohibition applies here.
README.md ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: other
3
+ license_name: circlestone-labs-non-commercial-license
4
+ license_link: LICENSE
5
+ base_model: circlestone-labs/Anima
6
+ library_name: diffusers
7
+ tags:
8
+ - control-lora
9
+ - pose
10
+ - dwpose
11
+ - anima
12
+ - cosmos-predict2
13
+ - comfyui
14
+ - text-to-image
15
+ pipeline_tag: text-to-image
16
+ ---
17
+
18
+ # Anima Control — Pose (Preview-2)
19
+
20
+ > ⚠️ **Preview-2 — still experimental.** Better than Preview-1, but not finished. It will still
21
+ > miss poses and produce deformed bodies, fused hands, and similar artifacts. Treat it as a
22
+ > work-in-progress preview, not a production tool. **Non-commercial use only** (inherits the Anima
23
+ > base model license). Behaviour and weights may still change.
24
+
25
+ A native **pose control adapter** for the Anima v1.0 image model: condition generation on a
26
+ skeleton pose map so the subject follows a target pose. Preview-2 is the same idea as Preview-1,
27
+ trained at higher resolutions on a larger corpus, and shipped with a friendlier ComfyUI node.
28
+
29
+ ## What changed since Preview-1
30
+
31
+ - **Multi-resolution: 512, 768 and 1024.** Preview-1 was 512-only; this runs at all three, and the
32
+ bodies hold together much better at the larger sizes. 1024 looks best.
33
+ - **Larger training corpus** than Preview-1's ~3,900 examples, which shows up as cleaner anatomy and
34
+ steadier poses.
35
+ - **Better pose-following at every resolution**, with the biggest gains at 768 and 1024.
36
+ - **New ComfyUI node, "Anima Pose Control."** Drop in a reference photo; it detects the pose for you
37
+ and renders the skeleton, and you can pick how the skeleton is drawn (thin, thick, puppet, heatmap,
38
+ or with hands/face stripped). The plain thin skeleton is still the best default — it's the only one
39
+ the model trained on — but a different render occasionally lands a stubborn pose when the seed
40
+ alone won't.
41
+
42
+ ## Method
43
+
44
+ Unchanged from Preview-1: a channel-concat control-LoRA on the frozen Anima DiT.
45
+
46
+ **Conditioning.** The base VAE encodes the skeleton pose map into a control latent, the same latent
47
+ space as the noisy image, so the control stays spatially aligned with the generation.
48
+
49
+ **Fusion (`ControlEmbedder` + `ControlInitialLayer`).** A zero-initialized `ControlEmbedder` produces
50
+ control tokens that are **added to the frozen base patch-embed output**. Zero-init means training
51
+ starts as an exact no-op (output == base) and the control contribution grows only as it earns loss,
52
+ so at `strength = 0` the adapter is exactly the base model.
53
+
54
+ **Trainable parameters.** The `ControlEmbedder` plus a rank-16 low-rank adapter on the transformer
55
+ blocks. The base transformer, text encoder, and VAE stay frozen.
56
+
57
+ ```
58
+ skeleton ─▶ VAE ─▶ control latent ─┐
59
+ ▼ (+ zero-init ControlEmbedder)
60
+ noisy latent ─▶ patch-embed ─▶ [ControlInitialLayer] ─▶ Block×N (+ rank-16 LoRA) ─▶ output
61
+ ```
62
+
63
+ ## Training
64
+
65
+ **Data.** (image, skeleton, caption) triples generated by Anima from a broad prompt distribution;
66
+ skeletons rendered from each image's detected keypoints (DWPose, COCO-WholeBody, black background).
67
+ Preview-2 uses a substantially larger corpus than Preview-1.
68
+
69
+ | Setting | Value |
70
+ |---|---|
71
+ | Resolution | **512 + 768 + 1024**, aspect-ratio bucketed |
72
+ | Adapter rank | 16 |
73
+ | Learning rate | 1e-4 |
74
+ | Epochs | 8 |
75
+ | Control dropout | 0.1 |
76
+ | Precision | bf16 |
77
+
78
+ > Final training loss ≈ 0.11 (denoising MSE, mean over the final 400 steps).
79
+
80
+ ## Results
81
+
82
+ Measured on held-out full-body poses (fresh generations, not seen in training). Pose agreement is
83
+ body-PCK@0.1: re-detect keypoints on each output, compare to the target skeleton.
84
+
85
+ ![Pose control across skeleton styles](samples/grid.png)
86
+
87
+ *Each grid: the BASE column shows the reference and the no-control generation (same prompt, different
88
+ seed — it ignores the pose); the remaining columns show the skeleton, drawn in each style, over the
89
+ pose-controlled output. Control follows the pose; no-control doesn't.*
90
+
91
+ | body-PCK@0.1 | control off | control on |
92
+ |---|---|---|
93
+ | 512 | ~0.33 | **~0.59** |
94
+ | 768 | ~0.38 | **~0.67** |
95
+ | 1024 | ~0.37 | **~0.83** |
96
+
97
+ Preview-1 reached ~0.59 at 512. Preview-2 matches that at 512 and pulls clearly ahead at 768 and
98
+ 1024 — the gains grow with resolution.
99
+
100
+ **What's still off (honest):**
101
+ - It doesn't always follow the skeleton, even a clean, correct one.
102
+ - A thin stick figure on black isn't how anime is drawn, so the model only half-reads it; the worst
103
+ artifacts (fused hands, mush) cluster where the skeleton is busiest.
104
+ - Dynamic poses — running, jumping, sitting — are the least reliable.
105
+ - On short or vague prompts the style flattens toward a samey default; a richer prompt fixes it.
106
+
107
+ ## Usage (ComfyUI)
108
+
109
+ Preview-2 uses two small custom nodes: **Anima Control Apply** (`AnimaControlApply`) applies the
110
+ adapter, and **Anima Pose Control** (`AnimaPoseControl`) detects the pose from a photo and renders
111
+ the skeleton for you.
112
+
113
+ ### Install
114
+
115
+ 1. Download `anima_pose_preview2.safetensors` into `ComfyUI/models/loras/`.
116
+ 2. Copy both folders from `comfyui/` in this repo into `ComfyUI/custom_nodes/`:
117
+ `anima_control_lora/` and `ComfyUI-anima-pose-control/`. Restart ComfyUI. ComfyUI-Manager installs
118
+ the second node's `requirements.txt` automatically; otherwise:
119
+ `pip install -r ComfyUI-anima-pose-control/requirements.txt` (rtmlib, opencv-python, onnxruntime,
120
+ numpy; torch and Pillow come with ComfyUI).
121
+ 3. Load a workflow from the menu. `pose_control_demo.json` is the easiest — control vs no-control side
122
+ by side. Also included: `pose_control.json` (simple), `pose_control_edit.json` (single node, pick
123
+ the skeleton style), `pose_control_compare.json` (one pose across every style at once).
124
+
125
+ `anima_pose_preview2.safetensors` holds both the low-rank adapter (`lora.*` keys) and the control
126
+ embedder (`control_embedder.*` keys); `LoraLoaderModelOnly` reads the first set and Anima Control
127
+ Apply reads the second, both pointing at the same file.
128
+
129
+ **Strength.** `0.0` is the base model with no control; `1.0` follows the skeleton (range 0–2). Higher
130
+ tracks the pose more closely but can cost some image quality.
131
+
132
+ ### Pose detector (first run)
133
+
134
+ The Anima Pose Control node needs a pose detector (rtmlib). On first use it downloads two ONNX
135
+ files (~316 MB) from this repo's `detector/` folder and caches them under
136
+ `~/.cache/rtmlib/hub/checkpoints/`; after that it runs offline. If you see
137
+ `urllib ... getaddrinfo failed`, your machine couldn't reach the download host — download
138
+ `detector/yolox_m_8xb8-300e_humanart-c2c7a14a.onnx` and
139
+ `detector/rtmw-dw-x-l_simcc-cocktail14_270e-256x192_20231122.onnx` from the Files tab by hand and
140
+ drop both into that cache folder (create it if missing), then restart ComfyUI.
141
+
142
+ ## Roadmap
143
+
144
+ **Preview-3** targets the headline weakness: the model only half-reads the skeleton. The thin
145
+ lines-on-black signal seems foreign to it, so a representation bake-off is testing other renders
146
+ (thicker, puppet/segmentation, depth-mannequin) to find what Anima follows best, plus the smaller
147
+ fixes (default strength, dropping noisy hand points, more varied captions). The other half is the
148
+ detector: the one used here was built for photos, not anime, so on art it produces noisy skeletons.
149
+ Preview-3 will most likely wait on a purpose-built **anime pose detector** ("DWPose for anime"),
150
+ then retrain on the winning representation with a lot more dynamic-pose data.
151
+
152
+ **Version 1.0** comes after Preview-3, if it lands clean — the first non-preview release, trained on
153
+ a good deal more data again.
154
+
155
+ Pose is the first component on a shared control harness for Anima; planned siblings are image-prompt
156
+ (IP-Adapter) and face-identity conditioning.
157
+
158
+ ## License
159
+
160
+ These weights are a derivative of the Anima base model
161
+ ([`circlestone-labs/Anima`](https://huggingface.co/circlestone-labs/Anima)) and inherit its terms:
162
+ the **CircleStone Labs Non-Commercial License**, and — because Anima is itself a derivative of
163
+ Cosmos-Predict2 — the [NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/).
164
+
165
+ The **model weights are for non-commercial use only.** Generated images (outputs) are not restricted
166
+ by these terms and may be used commercially. See the bundled [`LICENSE`](./LICENSE) for the full text.
167
+
168
+ ## Support
169
+
170
+ Building these models means mining and labeling a lot of images and renting GPUs to train on them. If
171
+ they're useful to you and you want to chip in, it's appreciated and never expected:
172
+ https://ko-fi.com/claquasse
173
+
174
+ ## Citation
175
+
176
+ ```bibtex
177
+ @misc{anima_control_pose_preview2,
178
+ title = {Anima Control --- Pose (Preview-2)},
179
+ author = {Claquasse},
180
+ year = {2026},
181
+ note = {Preview-2 multi-resolution pose control adapter for Anima v1.0},
182
+ howpublished = {\url{https://huggingface.co/Claquasse/Anima-Control-Pose}}
183
+ }
184
+ ```
185
+
186
+ Built on Anima (CircleStone Labs), the Cosmos-Predict2 transformer architecture, and the
187
+ diffusion-pipe training framework.
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:976c93669dd69eb5b4d7eb63ad22c344b69860b23f8977623b70a6ba344027f4
3
+ size 75051096
anima_control_tools.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bcd28519425a96b85ab5a52bf99014519812c81fca6c863fc72d7391c5dabcb1
3
+ size 28067
anima_pose_preview2.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c10fa11628e9b1bf16dfe095ac5c6dc4ddd9ae77d7fe023d0a1857f7e29c516f
3
+ size 75051096
comfyui/ComfyUI-anima-pose-control/README.md ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ComfyUI-anima-pose-control
2
+
3
+ A single ComfyUI node — **Anima Pose Control** (`AnimaPoseControl`) — that detects a pose from a photo,
4
+ lets you drag the body joints on a mini-canvas in the node, picks a predefined skeleton style, paints the
5
+ styled skeleton inline, and outputs the control image for a pose-control LoRA.
6
+
7
+ ## Install
8
+ Clone into `ComfyUI/custom_nodes/` and restart ComfyUI (ComfyUI-Manager installs `requirements.txt` for you):
9
+ ```bash
10
+ cd ComfyUI/custom_nodes
11
+ git clone <this repo> ComfyUI-anima-pose-control
12
+ ComfyUI/venv/bin/python -m pip install -r ComfyUI-anima-pose-control/requirements.txt
13
+ ```
14
+ Dependencies: `rtmlib` (DWPose Wholebody-133 detection — same model/convention as the training data),
15
+ `opencv-python`, `onnxruntime`, `numpy`. torch / Pillow are provided by ComfyUI.
16
+
17
+ ## Node: Anima Pose Control
18
+ **Inputs:** `image` (optional) · widgets `style` (R0_thin / R1_thick / R2_puppet / heatmap),
19
+ `hands` / `face` / `feet` toggles, `redetect`, `resolution`, hidden `pose_json`.
20
+ **Outputs:** `skeleton` (IMAGE) · `keypoints` (POSE_KEYPOINT).
21
+
22
+ ### Use
23
+ 1. Connect a reference photo to `image`, **Queue** once (`redetect` on) — detects the pose, fills the canvas,
24
+ paints the styled skeleton on the node.
25
+ 2. **Mute** the node's re-detect (toggle `redetect` off — auto-set when you drag) and drag body joints in the
26
+ mini-canvas.
27
+ 3. **Queue** — only this node + downstream re-run (detection is skipped). Output feeds `ImageScale → VAEEncode`.
28
+
29
+ ### Styles & toggles
30
+ `R0_thin` = DWPose-style thin skeleton (matches typical pose-LoRA training); `R1_thick` / `R2_puppet` =
31
+ thicker limbs; `heatmap` = gaussian joint blobs. `hands`/`face`/`feet` add/remove those parts (R1/R2/heatmap
32
+ are body-only; `feet` adds foot joints). No color picker — the palette is the fixed DWPose palette.
33
+
34
+ Pure-Python renderer (`pose_render.py`) is the single source of truth and is unit-tested headless.
comfyui/ComfyUI-anima-pose-control/__init__.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ from .node import AnimaPoseControl
2
+
3
+ NODE_CLASS_MAPPINGS = {"AnimaPoseControl": AnimaPoseControl}
4
+ NODE_DISPLAY_NAME_MAPPINGS = {"AnimaPoseControl": "Anima Pose Control (detect+edit+style)"}
5
+ WEB_DIRECTORY = "./js"
6
+ __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"]
comfyui/ComfyUI-anima-pose-control/detect.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """DWPose detection wrapper. Uses rtmlib Wholebody — the same model + 133-keypoint convention
2
+ v2 trained on (render_skeletons.py / eval used the identical call). Injectable for tests.
3
+
4
+ Wholebody-133: body 0-16, feet 17-22, face 23-90, L-hand 91-111, R-hand 112-132.
5
+
6
+ On first use rtmlib's Wholebody (mode="balanced") needs two ONNX files. rtmlib would fetch them
7
+ from download.openmmlab.com, which is slow or blocked on many networks ("getaddrinfo failed").
8
+ We mirror them on the model's own HF repo and pre-seed rtmlib's cache from there, so the node
9
+ works for anyone who can reach huggingface.co. openmmlab stays a silent fallback."""
10
+ import os
11
+ import numpy as np
12
+
13
+
14
+ class NoPersonError(RuntimeError):
15
+ pass
16
+
17
+
18
+ _POSE = None
19
+
20
+ # rtmlib Wholebody(mode="balanced") checkpoints, mirrored on the model repo to dodge the
21
+ # flaky download.openmmlab.com host. Filenames MUST match the names rtmlib looks for in cache.
22
+ _HF_REPO = "Claquasse/Anima-Control-Pose"
23
+ _MODELS = (
24
+ "yolox_m_8xb8-300e_humanart-c2c7a14a.onnx",
25
+ "rtmw-dw-x-l_simcc-cocktail14_270e-256x192_20231122.onnx",
26
+ )
27
+
28
+
29
+ def _rtmlib_ckpt_dir():
30
+ try:
31
+ from rtmlib.tools.file import _get_rtmhub_dir
32
+ return os.path.join(_get_rtmhub_dir(), "checkpoints")
33
+ except Exception:
34
+ base = os.getenv("XDG_CACHE_HOME") or os.path.expanduser("~/.cache")
35
+ return os.path.join(os.path.expanduser(base), "rtmlib", "hub", "checkpoints")
36
+
37
+
38
+ # huggingface.co is often blocked/throttled in mainland China; hf-mirror.com mirrors it and is
39
+ # reachable there. We try the Hub first (honoring HF_ENDPOINT if the user set one), then the mirror.
40
+ _MIRROR = "https://hf-mirror.com"
41
+
42
+
43
+ def _looks_real(path):
44
+ # a real .onnx is tens-to-hundreds of MB; an HTML error page or partial is tiny.
45
+ return os.path.exists(path) and os.path.getsize(path) > 1_000_000
46
+
47
+
48
+ def _fetch(name, dst):
49
+ """Download detector/<name> to dst, trying the HF Hub then the China-friendly mirror.
50
+ Returns True only on a plausibly-complete file (guards against caching an error page)."""
51
+ import shutil
52
+ try:
53
+ from huggingface_hub import hf_hub_download
54
+ src = hf_hub_download(repo_id=_HF_REPO, filename="detector/" + name)
55
+ shutil.copyfile(src, dst)
56
+ if _looks_real(dst):
57
+ return True
58
+ except Exception:
59
+ pass
60
+ try:
61
+ import urllib.request
62
+ url = "%s/%s/resolve/main/detector/%s" % (_MIRROR, _HF_REPO, name)
63
+ with urllib.request.urlopen(url, timeout=120) as r, open(dst, "wb") as f:
64
+ shutil.copyfileobj(r, f)
65
+ if _looks_real(dst):
66
+ return True
67
+ except Exception:
68
+ pass
69
+ if os.path.exists(dst) and not _looks_real(dst):
70
+ try:
71
+ os.remove(dst) # never leave a partial/HTML stub behind
72
+ except OSError:
73
+ pass
74
+ return False
75
+
76
+
77
+ def _ensure_models():
78
+ """Pre-seed rtmlib's checkpoint cache from the HF model repo (or its mirror) so it never hits
79
+ download.openmmlab.com. Best-effort: on failure, rtmlib falls back to its own download."""
80
+ ckpt_dir = _rtmlib_ckpt_dir()
81
+ # A leftover <base>.zip means an earlier download failed mid-way (openmmlab returned a
82
+ # partial file or an HTML error page). rtmlib would then try to extract it and crash with
83
+ # `BadZipFile: File is not a zip file` on every run, even when the .onnx is present, because
84
+ # its skip-download path only triggers when no .zip exists. Remove ours so the seeded .onnx
85
+ # is used instead.
86
+ for name in _MODELS:
87
+ zp = os.path.join(ckpt_dir, os.path.splitext(name)[0] + ".zip")
88
+ if os.path.exists(zp):
89
+ try:
90
+ os.remove(zp)
91
+ except OSError:
92
+ pass
93
+ missing = [m for m in _MODELS if not os.path.exists(os.path.join(ckpt_dir, m))]
94
+ if not missing:
95
+ return
96
+ os.makedirs(ckpt_dir, exist_ok=True)
97
+ for name in missing:
98
+ if not _fetch(name, os.path.join(ckpt_dir, name)):
99
+ print("[AnimaPoseControl] could not fetch %s from Hugging Face or its mirror. "
100
+ "rtmlib will try download.openmmlab.com instead; if that fails, see the model "
101
+ "card for the offline install." % name)
102
+
103
+
104
+ def _default_estimator(resolution):
105
+ """Lazily build the rtmlib Wholebody estimator (ComfyUI venv). Returns a callable
106
+ img_rgb -> (kp[N,133,2], sc[N,133]) in pixel coords on a `resolution`-square canvas."""
107
+ global _POSE
108
+ if _POSE is None:
109
+ _ensure_models()
110
+ from rtmlib import Wholebody
111
+ _POSE = Wholebody(to_openpose=False, mode="balanced", backend="onnxruntime", device="cpu")
112
+ pose = _POSE
113
+ res = int(resolution)
114
+
115
+ def run(img):
116
+ import cv2
117
+ bgr = cv2.cvtColor(cv2.resize(img, (res, res)), cv2.COLOR_RGB2BGR)
118
+ return pose(bgr) # (N,133,2), (N,133)
119
+ return run
120
+
121
+
122
+ def detect(image_rgb, resolution, estimator=None):
123
+ est = _default_estimator(resolution) if estimator is None else estimator
124
+ kp_all, sc_all = est(image_rgb)
125
+ if kp_all is None or len(kp_all) == 0:
126
+ raise NoPersonError("no person detected")
127
+ return np.asarray(kp_all[0], float), np.asarray(sc_all[0], float)
comfyui/ComfyUI-anima-pose-control/js/anima_pose_control.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // js/anima_pose_control.js — Anima Pose Control: hide the machine-managed pose_json text box.
2
+ // (Joint-drag editing removed for now; the node shows the styled skeleton via ComfyUI's image preview.)
3
+ import { app } from "../../scripts/app.js";
4
+
5
+ app.registerExtension({
6
+ name: "anima.pose.control",
7
+ async beforeRegisterNodeDef(nodeType, nodeData) {
8
+ if (nodeData.name !== "AnimaPoseControl") return;
9
+ const onNodeCreated = nodeType.prototype.onNodeCreated;
10
+ nodeType.prototype.onNodeCreated = function () {
11
+ onNodeCreated?.apply(this, arguments);
12
+ const pj = this.widgets?.find((w) => w.name === "pose_json");
13
+ if (pj) { pj.hidden = true; pj.computeSize = () => [0, -4]; pj.type = "hidden_pose_json"; }
14
+ };
15
+ },
16
+ });
comfyui/ComfyUI-anima-pose-control/keypoints.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Codec between the JS canvas pose JSON and numpy keypoint arrays, plus body-17 edit merge."""
2
+ import json
3
+ import numpy as np
4
+
5
+
6
+ def to_json(kp, sc, canvas):
7
+ kp = np.asarray(kp, float); sc = np.asarray(sc, float)
8
+ pts = [[float(kp[i][0]), float(kp[i][1]), float(sc[i])] for i in range(133)]
9
+ return json.dumps({"canvas": int(canvas), "points": pts})
10
+
11
+
12
+ def from_json(s):
13
+ d = json.loads(s)
14
+ pts = np.asarray(d["points"], float) # (133,3)
15
+ return pts[:, :2].copy(), pts[:, 2].copy(), int(d["canvas"])
16
+
17
+
18
+ def merge_body(full_kp, full_sc, body_kp):
19
+ out = np.asarray(full_kp, float).copy()
20
+ out[:17] = np.asarray(body_kp, float)
21
+ return out
comfyui/ComfyUI-anima-pose-control/node.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """AnimaPoseControl ComfyUI node: detect -> edit (JS) -> styled skeleton -> control IMAGE."""
2
+ import numpy as np
3
+
4
+ try: # keep the helper importable without the package context (tests)
5
+ from .pose_render import render, STYLES
6
+ from .keypoints import from_json, to_json
7
+ from .detect import detect
8
+ except ImportError: # flat import when running tests inside the package dir
9
+ from pose_render import render, STYLES
10
+ from keypoints import from_json, to_json
11
+ from detect import detect
12
+
13
+
14
+ def compose(image, pose_json, style, hands, face, feet, redetect, resolution, estimator=None):
15
+ """Pure branch logic. Returns (skeleton uint8 [H,W,3] RGB, pose_json_out str)."""
16
+ if redetect and image is not None:
17
+ kp, sc = detect(image, int(resolution), estimator=estimator)
18
+ elif pose_json and pose_json.strip():
19
+ kp, sc, _ = from_json(pose_json)
20
+ elif image is not None:
21
+ kp, sc = detect(image, int(resolution), estimator=estimator) # no pose yet -> detect
22
+ else:
23
+ raise ValueError("AnimaPoseControl: no pose to render — connect an image, or Queue once with redetect on first")
24
+ img = render(kp, sc, style, int(resolution), hands=hands, face=face, feet=feet)
25
+ return img, to_json(kp, sc, int(resolution))
26
+
27
+
28
+ class AnimaPoseControl:
29
+ @classmethod
30
+ def INPUT_TYPES(cls):
31
+ return {
32
+ "required": {
33
+ "style": (list(STYLES),),
34
+ "hands": ("BOOLEAN", {"default": True}),
35
+ "face": ("BOOLEAN", {"default": True}),
36
+ "feet": ("BOOLEAN", {"default": True}),
37
+ "redetect": ("BOOLEAN", {"default": True}),
38
+ "resolution": ("INT", {"default": 768, "min": 256, "max": 2048, "step": 64}),
39
+ "pose_json": ("STRING", {"multiline": True, "default": ""}),
40
+ },
41
+ "optional": {"image": ("IMAGE",)},
42
+ }
43
+
44
+ RETURN_TYPES = ("IMAGE", "POSE_KEYPOINT")
45
+ RETURN_NAMES = ("skeleton", "keypoints")
46
+ FUNCTION = "run"
47
+ OUTPUT_NODE = True
48
+ CATEGORY = "Anima/pose"
49
+
50
+ def run(self, style, hands, face, feet, redetect, resolution, pose_json, image=None):
51
+ import torch
52
+ img_in = None
53
+ if image is not None:
54
+ img_in = (image[0].cpu().numpy() * 255).astype(np.uint8) # ComfyUI IMAGE -> HWC uint8
55
+ skel, pj = compose(img_in, pose_json, style, hands, face, feet, redetect, resolution)
56
+ t = torch.from_numpy(skel.astype(np.float32) / 255.0)[None, ...]
57
+ import json
58
+ kpts = json.loads(pj)
59
+ # Show the styled render inline via ComfyUI's standard image preview.
60
+ return {"ui": {"images": _save_preview(skel), "pose_json": [pj]}, "result": (t, kpts)}
61
+
62
+
63
+ def _save_preview(skel_uint8):
64
+ """Write the styled skeleton to ComfyUI's temp dir; return a /view descriptor for the JS to load."""
65
+ import folder_paths, os, uuid
66
+ from PIL import Image
67
+ d = folder_paths.get_temp_directory(); os.makedirs(d, exist_ok=True)
68
+ fn = "anima_pose_%s.png" % uuid.uuid4().hex[:8]
69
+ Image.fromarray(skel_uint8).save(os.path.join(d, fn))
70
+ return [{"filename": fn, "subfolder": "", "type": "temp"}]
comfyui/ComfyUI-anima-pose-control/pose_render.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Styled pose-skeleton renderer for AnimaPoseControl. Pure numpy + cv2 (no torch).
2
+ Single source of truth for the predefined skeleton looks.
3
+ Wholebody-133: body 0-16, feet 17-22, face 23-90, L-hand 91-111, R-hand 112-132."""
4
+ import numpy as np
5
+ import cv2
6
+
7
+ BODY = list(range(17)); FEET = list(range(17, 23)); FACE = list(range(23, 91)); HAND = list(range(91, 133))
8
+ COCO_LIMBS = [(5, 7), (7, 9), (6, 8), (8, 10), (11, 13), (13, 15), (12, 14), (14, 16),
9
+ (5, 6), (11, 12), (5, 11), (6, 12), (0, 5), (0, 6)]
10
+ _PAL = [(255, 0, 0), (255, 128, 0), (255, 255, 0), (128, 255, 0), (0, 255, 0), (0, 255, 128), (0, 255, 255),
11
+ (0, 128, 255), (0, 0, 255), (128, 0, 255), (255, 0, 255), (255, 0, 128), (180, 180, 180), (220, 220, 220)]
12
+ LIMB_COLOR = {l: _PAL[i % len(_PAL)] for i, l in enumerate(COCO_LIMBS)}
13
+ JOINT_COLOR = [_PAL[i % len(_PAL)] for i in range(17)]
14
+ STYLES = ("R0_thin", "R1_thick", "R2_puppet", "heatmap")
15
+ _W = {"R0_thin": {"stick": 2, "joint": 3}, "R1_thick": {"stick": 8, "joint": 6}, "R2_puppet": {"stick": 22, "joint": 11}, "heatmap": {"stick": 2, "joint": 3}}
16
+
17
+
18
+ def _toggle(sc, hands, face, feet):
19
+ sc = np.asarray(sc, float).copy()
20
+ if not hands: sc[HAND] = 0.0
21
+ if not face: sc[FACE] = 0.0
22
+ if not feet: sc[FEET] = 0.0
23
+ return sc
24
+
25
+
26
+ def render(kp, sc, style, resolution, hands=True, face=True, feet=True, kpt_thr=0.3):
27
+ if style not in STYLES:
28
+ raise ValueError(f"unknown style {style!r}")
29
+ H = W = int(resolution)
30
+ kp = np.asarray(kp, float); sc = _toggle(sc, hands, face, feet)
31
+ if style == "heatmap":
32
+ return _heatmap(kp, sc, H, W, feet, kpt_thr)
33
+ cfg = _W[style]; cv = np.zeros((H, W, 3), np.uint8)
34
+ for a, b in COCO_LIMBS:
35
+ if sc[a] >= kpt_thr and sc[b] >= kpt_thr:
36
+ cv2.line(cv, (int(kp[a][0]), int(kp[a][1])), (int(kp[b][0]), int(kp[b][1])), LIMB_COLOR[(a, b)], cfg["stick"])
37
+ for i in BODY:
38
+ if sc[i] >= kpt_thr:
39
+ cv2.circle(cv, (int(kp[i][0]), int(kp[i][1])), cfg["joint"], (255, 255, 255), -1)
40
+ for i in FEET:
41
+ if sc[i] >= kpt_thr:
42
+ cv2.circle(cv, (int(kp[i][0]), int(kp[i][1])), max(1, cfg["joint"] // 2), (255, 255, 255), -1)
43
+ if style == "R0_thin": # only R0 draws hands + face (DWPose-style small visible dots)
44
+ for i in HAND:
45
+ if sc[i] >= kpt_thr:
46
+ cv2.circle(cv, (int(kp[i][0]), int(kp[i][1])), 2, (0, 255, 255), -1)
47
+ for i in FACE:
48
+ if sc[i] >= kpt_thr:
49
+ cv2.circle(cv, (int(kp[i][0]), int(kp[i][1])), 2, (255, 255, 255), -1)
50
+ return cv
51
+
52
+
53
+ def _heatmap(kp, sc, H, W, feet, thr, sig=11):
54
+ acc = np.zeros((H, W, 3), np.float32)
55
+ for i in BODY + (FEET if feet else []):
56
+ if sc[i] >= thr:
57
+ x, y = int(round(kp[i][0])), int(round(kp[i][1]))
58
+ if 0 <= x < W and 0 <= y < H:
59
+ b = np.zeros((H, W), np.float32); b[y, x] = 1.0
60
+ b = cv2.GaussianBlur(b, (0, 0), sig); b /= (b.max() + 1e-9)
61
+ acc += b[..., None] * np.array(JOINT_COLOR[i % 17], np.float32)
62
+ return np.clip(acc, 0, 255).astype(np.uint8)
comfyui/ComfyUI-anima-pose-control/requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # ComfyUI-anima-pose-control runtime dependencies.
2
+ # ComfyUI already provides torch, Pillow and numpy; these are the extras the node needs.
3
+ # ComfyUI-Manager installs this automatically on first load.
4
+ rtmlib
5
+ opencv-python
6
+ onnxruntime
7
+ numpy
8
+ huggingface_hub
comfyui/anima_control_lora/__init__.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """ComfyUI node: fuse a trained control-LoRA's ControlEmbedder into the Cosmos DiT forward.
2
+ Wraps the DIFFUSION_MODEL forward (comfy/model_patcher.py add_wrapper_with_key) to add the
3
+ control contribution at the patch-embed output; LoRA deltas on existing weights are applied
4
+ separately via LoraLoaderModelOnly upstream of this node."""
5
+
6
+
7
+ class AnimaControlApply:
8
+ @classmethod
9
+ def INPUT_TYPES(cls):
10
+ return {"required": {
11
+ "model": ("MODEL",),
12
+ "control_latent": ("LATENT",), # VAE-encoded skeleton (use a VAEEncode node)
13
+ "control_embedder_path": ("STRING", {"default": "adapter_model.safetensors"}),
14
+ "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 2.0, "step": 0.05}),
15
+ }}
16
+
17
+ RETURN_TYPES = ("MODEL",)
18
+ FUNCTION = "apply"
19
+ CATEGORY = "AnimaControl"
20
+
21
+ def apply(self, model, control_latent, control_embedder_path, strength):
22
+ import safetensors.torch as st
23
+ from .control_embedder import ControlEmbedder
24
+ dit = model.model.diffusion_model
25
+ p = next(dit.parameters())
26
+ embedder = ControlEmbedder(in_channels=16, model_channels=getattr(dit, "model_channels", 2048))
27
+ # Training saves the embedder INSIDE the adapter file as `diffusion_model.control_embedder.proj.*`
28
+ # (saver keeps `control_embedder.proj.*`, base save_adapter prepends `diffusion_model.`). Strip up
29
+ # to and including `control_embedder.`, and fail loudly if nothing matches — otherwise the embedder
30
+ # would stay zero-init and control would be a silent no-op.
31
+ # Resolve a bare filename against ComfyUI's loras/ dir so the same downloaded
32
+ # adapter_model.safetensors feeds both this node and LoraLoaderModelOnly; absolute
33
+ # paths are used as-is (the training/eval scripts pass those).
34
+ import os
35
+ cep = control_embedder_path
36
+ if not os.path.isabs(cep):
37
+ try:
38
+ import folder_paths
39
+ cep = folder_paths.get_full_path("loras", cep) or cep
40
+ except Exception:
41
+ pass
42
+ sd = {k.split("control_embedder.", 1)[1]: v
43
+ for k, v in st.load_file(cep).items() if "control_embedder." in k}
44
+ assert sd, f"no control_embedder.* keys in {cep} (expected diffusion_model.control_embedder.proj.*)"
45
+ embedder.load_state_dict(sd, strict=False)
46
+ embedder.eval().to(p.device, p.dtype)
47
+ ctrl = control_latent["samples"]
48
+
49
+ def wrapper(executor, *args, **kwargs):
50
+ # Reproduce training-time fusion (ControlInitialLayer._fuse_control): add the
51
+ # ControlEmbedder output to the x_embedder output via a temporary forward hook,
52
+ # removed after the call so it never leaks onto the shared DiT. strength=0 zeroes
53
+ # control_tokens -> output unchanged (the base regression).
54
+ control_tokens = strength * embedder(ctrl.to(p.device, p.dtype))
55
+
56
+ def add_control(_module, _inputs, output):
57
+ # match output's device AND dtype — at apply() the DiT may still be on CPU (ComfyUI
58
+ # lazy-loads), so control_tokens can be built on CPU while output is on cuda at sampling.
59
+ return output + control_tokens.to(output.device, output.dtype)
60
+
61
+ handle = dit.x_embedder.register_forward_hook(add_control)
62
+ try:
63
+ return executor(*args, **kwargs)
64
+ finally:
65
+ handle.remove()
66
+
67
+ m = model.clone()
68
+ m.add_wrapper_with_key("diffusion_model", "anima_control", wrapper)
69
+ return (m,)
70
+
71
+
72
+ NODE_CLASS_MAPPINGS = {"AnimaControlApply": AnimaControlApply}
73
+ NODE_DISPLAY_NAME_MAPPINGS = {"AnimaControlApply": "Anima Control Apply"}
comfyui/anima_control_lora/control_embedder.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+ from einops import rearrange
3
+
4
+
5
+ class ControlEmbedder(nn.Module):
6
+ """Zero-init patch-embed for the control (pose-skeleton) latent.
7
+
8
+ Mirrors the base PatchEmbed (spatial_patch_size=2, temporal_patch_size=1) but on the
9
+ raw 16-channel control latent (no padding-mask channel). Zero-initialized so it adds
10
+ nothing until trained (ControlNet zero-init). Output matches prepare_embedded_sequence's
11
+ x_B_T_H_W_D: (B, T, H/2, W/2, model_channels).
12
+ """
13
+
14
+ def __init__(self, in_channels=16, spatial_patch_size=2, temporal_patch_size=1, model_channels=2048):
15
+ super().__init__()
16
+ self.spatial_patch_size = spatial_patch_size
17
+ self.temporal_patch_size = temporal_patch_size
18
+ in_features = in_channels * spatial_patch_size * spatial_patch_size * temporal_patch_size
19
+ self.proj = nn.Linear(in_features, model_channels)
20
+ nn.init.zeros_(self.proj.weight)
21
+ nn.init.zeros_(self.proj.bias)
22
+
23
+ def forward(self, control_B_C_T_H_W):
24
+ x = rearrange(
25
+ control_B_C_T_H_W,
26
+ "b c (t r) (h m) (w n) -> b t h w (c r m n)",
27
+ r=self.temporal_patch_size, m=self.spatial_patch_size, n=self.spatial_patch_size,
28
+ )
29
+ return self.proj(x)
detector/rtmw-dw-x-l_simcc-cocktail14_270e-256x192_20231122.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9a9bc17c13ff0a1e37507f45a037a21bc410cd08374b0e664c57d0080843aa58
3
+ size 228708578
detector/yolox_m_8xb8-300e_humanart-c2c7a14a.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3dea6513388889f0fff4b77bf7a26013600321b9eb9ceb0e9a400a82572f5f23
3
+ size 101400344
pose_control.json ADDED
@@ -0,0 +1,1084 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "release",
3
+ "revision": 0,
4
+ "last_node_id": 16,
5
+ "last_link_id": 17,
6
+ "nodes": [
7
+ {
8
+ "id": 1,
9
+ "type": "UNETLoader",
10
+ "pos": [
11
+ 40,
12
+ 40
13
+ ],
14
+ "size": [
15
+ 300,
16
+ 120
17
+ ],
18
+ "flags": {},
19
+ "order": 1,
20
+ "mode": 0,
21
+ "inputs": [
22
+ {
23
+ "localized_name": "unet_name",
24
+ "name": "unet_name",
25
+ "type": "COMBO",
26
+ "widget": {
27
+ "name": "unet_name"
28
+ },
29
+ "link": null
30
+ },
31
+ {
32
+ "localized_name": "weight_dtype",
33
+ "name": "weight_dtype",
34
+ "type": "COMBO",
35
+ "widget": {
36
+ "name": "weight_dtype"
37
+ },
38
+ "link": null
39
+ }
40
+ ],
41
+ "outputs": [
42
+ {
43
+ "localized_name": "MODEL",
44
+ "name": "MODEL",
45
+ "type": "MODEL",
46
+ "slot_index": 0,
47
+ "links": [
48
+ 1
49
+ ]
50
+ }
51
+ ],
52
+ "properties": {
53
+ "Node name for S&R": "UNETLoader"
54
+ },
55
+ "widgets_values": [
56
+ "anima-base-v1.0.safetensors",
57
+ "default"
58
+ ]
59
+ },
60
+ {
61
+ "id": 2,
62
+ "type": "LoraLoaderModelOnly",
63
+ "pos": [
64
+ 40,
65
+ 180
66
+ ],
67
+ "size": [
68
+ 300,
69
+ 120
70
+ ],
71
+ "flags": {},
72
+ "order": 2,
73
+ "mode": 0,
74
+ "inputs": [
75
+ {
76
+ "localized_name": "model",
77
+ "name": "model",
78
+ "type": "MODEL",
79
+ "link": 1
80
+ },
81
+ {
82
+ "localized_name": "lora_name",
83
+ "name": "lora_name",
84
+ "type": "COMBO",
85
+ "widget": {
86
+ "name": "lora_name"
87
+ },
88
+ "link": null
89
+ },
90
+ {
91
+ "localized_name": "strength_model",
92
+ "name": "strength_model",
93
+ "type": "FLOAT",
94
+ "widget": {
95
+ "name": "strength_model"
96
+ },
97
+ "link": null
98
+ }
99
+ ],
100
+ "outputs": [
101
+ {
102
+ "localized_name": "MODEL",
103
+ "name": "MODEL",
104
+ "type": "MODEL",
105
+ "slot_index": 0,
106
+ "links": [
107
+ 8
108
+ ]
109
+ }
110
+ ],
111
+ "properties": {
112
+ "Node name for S&R": "LoraLoaderModelOnly"
113
+ },
114
+ "widgets_values": [
115
+ "anima_pose_preview2.safetensors",
116
+ 1
117
+ ]
118
+ },
119
+ {
120
+ "id": 3,
121
+ "type": "CLIPLoader",
122
+ "pos": [
123
+ 40,
124
+ 320
125
+ ],
126
+ "size": [
127
+ 300,
128
+ 120
129
+ ],
130
+ "flags": {},
131
+ "order": 3,
132
+ "mode": 0,
133
+ "inputs": [
134
+ {
135
+ "localized_name": "clip_name",
136
+ "name": "clip_name",
137
+ "type": "COMBO",
138
+ "widget": {
139
+ "name": "clip_name"
140
+ },
141
+ "link": null
142
+ },
143
+ {
144
+ "localized_name": "type",
145
+ "name": "type",
146
+ "type": "COMBO",
147
+ "widget": {
148
+ "name": "type"
149
+ },
150
+ "link": null
151
+ },
152
+ {
153
+ "localized_name": "device",
154
+ "name": "device",
155
+ "shape": 7,
156
+ "type": "COMBO",
157
+ "widget": {
158
+ "name": "device"
159
+ },
160
+ "link": null
161
+ }
162
+ ],
163
+ "outputs": [
164
+ {
165
+ "localized_name": "CLIP",
166
+ "name": "CLIP",
167
+ "type": "CLIP",
168
+ "slot_index": 0,
169
+ "links": [
170
+ 2,
171
+ 3
172
+ ]
173
+ }
174
+ ],
175
+ "properties": {
176
+ "Node name for S&R": "CLIPLoader"
177
+ },
178
+ "widgets_values": [
179
+ "qwen_3_06b_base.safetensors",
180
+ "stable_diffusion",
181
+ "default"
182
+ ]
183
+ },
184
+ {
185
+ "id": 4,
186
+ "type": "VAELoader",
187
+ "pos": [
188
+ 40,
189
+ 450
190
+ ],
191
+ "size": [
192
+ 300,
193
+ 120
194
+ ],
195
+ "flags": {},
196
+ "order": 4,
197
+ "mode": 0,
198
+ "inputs": [
199
+ {
200
+ "localized_name": "vae_name",
201
+ "name": "vae_name",
202
+ "type": "COMBO",
203
+ "widget": {
204
+ "name": "vae_name"
205
+ },
206
+ "link": null
207
+ }
208
+ ],
209
+ "outputs": [
210
+ {
211
+ "localized_name": "VAE",
212
+ "name": "VAE",
213
+ "type": "VAE",
214
+ "slot_index": 0,
215
+ "links": [
216
+ 7,
217
+ 16
218
+ ]
219
+ }
220
+ ],
221
+ "properties": {
222
+ "Node name for S&R": "VAELoader"
223
+ },
224
+ "widgets_values": [
225
+ "qwen_image_vae.safetensors"
226
+ ]
227
+ },
228
+ {
229
+ "id": 5,
230
+ "type": "CLIPTextEncode",
231
+ "pos": [
232
+ 40,
233
+ 560
234
+ ],
235
+ "size": [
236
+ 300,
237
+ 120
238
+ ],
239
+ "flags": {},
240
+ "order": 5,
241
+ "mode": 0,
242
+ "inputs": [
243
+ {
244
+ "localized_name": "clip",
245
+ "name": "clip",
246
+ "type": "CLIP",
247
+ "link": 2
248
+ },
249
+ {
250
+ "localized_name": "text",
251
+ "name": "text",
252
+ "type": "STRING",
253
+ "widget": {
254
+ "name": "text"
255
+ },
256
+ "link": null
257
+ }
258
+ ],
259
+ "outputs": [
260
+ {
261
+ "localized_name": "CONDITIONING",
262
+ "name": "CONDITIONING",
263
+ "type": "CONDITIONING",
264
+ "slot_index": 0,
265
+ "links": [
266
+ 12
267
+ ]
268
+ }
269
+ ],
270
+ "properties": {
271
+ "Node name for S&R": "CLIPTextEncode"
272
+ },
273
+ "widgets_values": [
274
+ "newest, masterpiece, best quality, score_9, safe\n\n1girl, solo, simple background"
275
+ ],
276
+ "title": "prompt"
277
+ },
278
+ {
279
+ "id": 6,
280
+ "type": "CLIPTextEncode",
281
+ "pos": [
282
+ 40,
283
+ 760
284
+ ],
285
+ "size": [
286
+ 300,
287
+ 120
288
+ ],
289
+ "flags": {},
290
+ "order": 6,
291
+ "mode": 0,
292
+ "inputs": [
293
+ {
294
+ "localized_name": "clip",
295
+ "name": "clip",
296
+ "type": "CLIP",
297
+ "link": 3
298
+ },
299
+ {
300
+ "localized_name": "text",
301
+ "name": "text",
302
+ "type": "STRING",
303
+ "widget": {
304
+ "name": "text"
305
+ },
306
+ "link": null
307
+ }
308
+ ],
309
+ "outputs": [
310
+ {
311
+ "localized_name": "CONDITIONING",
312
+ "name": "CONDITIONING",
313
+ "type": "CONDITIONING",
314
+ "slot_index": 0,
315
+ "links": [
316
+ 13
317
+ ]
318
+ }
319
+ ],
320
+ "properties": {
321
+ "Node name for S&R": "CLIPTextEncode"
322
+ },
323
+ "widgets_values": [
324
+ "worst quality, low quality, score_1, score_2, blurry, jpeg artifacts"
325
+ ],
326
+ "title": "negative"
327
+ },
328
+ {
329
+ "id": 7,
330
+ "type": "EmptyLatentImage",
331
+ "pos": [
332
+ 40,
333
+ 960
334
+ ],
335
+ "size": [
336
+ 300,
337
+ 120
338
+ ],
339
+ "flags": {},
340
+ "order": 7,
341
+ "mode": 0,
342
+ "inputs": [
343
+ {
344
+ "localized_name": "width",
345
+ "name": "width",
346
+ "type": "INT",
347
+ "widget": {
348
+ "name": "width"
349
+ },
350
+ "link": null
351
+ },
352
+ {
353
+ "localized_name": "height",
354
+ "name": "height",
355
+ "type": "INT",
356
+ "widget": {
357
+ "name": "height"
358
+ },
359
+ "link": null
360
+ },
361
+ {
362
+ "localized_name": "batch_size",
363
+ "name": "batch_size",
364
+ "type": "INT",
365
+ "widget": {
366
+ "name": "batch_size"
367
+ },
368
+ "link": null
369
+ }
370
+ ],
371
+ "outputs": [
372
+ {
373
+ "localized_name": "LATENT",
374
+ "name": "LATENT",
375
+ "type": "LATENT",
376
+ "slot_index": 0,
377
+ "links": [
378
+ 14
379
+ ]
380
+ }
381
+ ],
382
+ "properties": {
383
+ "Node name for S&R": "EmptyLatentImage"
384
+ },
385
+ "widgets_values": [
386
+ 768,
387
+ 768,
388
+ 1
389
+ ]
390
+ },
391
+ {
392
+ "id": 8,
393
+ "type": "LoadImage",
394
+ "pos": [
395
+ 380,
396
+ 120
397
+ ],
398
+ "size": [
399
+ 300,
400
+ 314
401
+ ],
402
+ "flags": {},
403
+ "order": 8,
404
+ "mode": 0,
405
+ "inputs": [
406
+ {
407
+ "localized_name": "image",
408
+ "name": "image",
409
+ "type": "COMBO",
410
+ "widget": {
411
+ "name": "image"
412
+ },
413
+ "link": null
414
+ },
415
+ {
416
+ "localized_name": "choose file to upload",
417
+ "name": "upload",
418
+ "type": "IMAGEUPLOAD",
419
+ "widget": {
420
+ "name": "upload"
421
+ },
422
+ "link": null
423
+ }
424
+ ],
425
+ "outputs": [
426
+ {
427
+ "localized_name": "IMAGE",
428
+ "name": "IMAGE",
429
+ "type": "IMAGE",
430
+ "slot_index": 0,
431
+ "links": [
432
+ 4
433
+ ]
434
+ },
435
+ {
436
+ "localized_name": "MASK",
437
+ "name": "MASK",
438
+ "type": "MASK",
439
+ "slot_index": 1,
440
+ "links": []
441
+ }
442
+ ],
443
+ "properties": {
444
+ "Node name for S&R": "LoadImage"
445
+ },
446
+ "widgets_values": [
447
+ "cmp_source.png",
448
+ "image"
449
+ ],
450
+ "title": "reference PHOTO"
451
+ },
452
+ {
453
+ "id": 9,
454
+ "type": "AnimaPoseControl",
455
+ "pos": [
456
+ 680,
457
+ 120
458
+ ],
459
+ "size": [
460
+ 260,
461
+ 200
462
+ ],
463
+ "flags": {},
464
+ "order": 9,
465
+ "mode": 0,
466
+ "properties": {
467
+ "Node name for S&R": "AnimaPoseControl"
468
+ },
469
+ "widgets_values": [
470
+ "R0_thin",
471
+ true,
472
+ true,
473
+ true,
474
+ true,
475
+ 768,
476
+ ""
477
+ ],
478
+ "inputs": [
479
+ {
480
+ "name": "image",
481
+ "type": "IMAGE",
482
+ "link": 4
483
+ }
484
+ ],
485
+ "outputs": [
486
+ {
487
+ "name": "skeleton",
488
+ "type": "IMAGE",
489
+ "links": [
490
+ 5
491
+ ],
492
+ "slot_index": 0
493
+ },
494
+ {
495
+ "name": "keypoints",
496
+ "type": "POSE_KEYPOINT",
497
+ "links": [],
498
+ "slot_index": 1
499
+ }
500
+ ],
501
+ "title": "POSE: detect + style",
502
+ "color": "#533",
503
+ "bgcolor": "#223"
504
+ },
505
+ {
506
+ "id": 10,
507
+ "type": "ImageScale",
508
+ "pos": [
509
+ 980,
510
+ 120
511
+ ],
512
+ "size": [
513
+ 300,
514
+ 130
515
+ ],
516
+ "flags": {},
517
+ "order": 10,
518
+ "mode": 0,
519
+ "inputs": [
520
+ {
521
+ "localized_name": "image",
522
+ "name": "image",
523
+ "type": "IMAGE",
524
+ "link": 5
525
+ },
526
+ {
527
+ "localized_name": "upscale_method",
528
+ "name": "upscale_method",
529
+ "type": "COMBO",
530
+ "widget": {
531
+ "name": "upscale_method"
532
+ },
533
+ "link": null
534
+ },
535
+ {
536
+ "localized_name": "width",
537
+ "name": "width",
538
+ "type": "INT",
539
+ "widget": {
540
+ "name": "width"
541
+ },
542
+ "link": null
543
+ },
544
+ {
545
+ "localized_name": "height",
546
+ "name": "height",
547
+ "type": "INT",
548
+ "widget": {
549
+ "name": "height"
550
+ },
551
+ "link": null
552
+ },
553
+ {
554
+ "localized_name": "crop",
555
+ "name": "crop",
556
+ "type": "COMBO",
557
+ "widget": {
558
+ "name": "crop"
559
+ },
560
+ "link": null
561
+ }
562
+ ],
563
+ "outputs": [
564
+ {
565
+ "localized_name": "IMAGE",
566
+ "name": "IMAGE",
567
+ "type": "IMAGE",
568
+ "slot_index": 0,
569
+ "links": [
570
+ 6
571
+ ]
572
+ }
573
+ ],
574
+ "properties": {
575
+ "Node name for S&R": "ImageScale"
576
+ },
577
+ "widgets_values": [
578
+ "nearest-exact",
579
+ 768,
580
+ 768,
581
+ "disabled"
582
+ ]
583
+ },
584
+ {
585
+ "id": 11,
586
+ "type": "VAEEncode",
587
+ "pos": [
588
+ 1280,
589
+ 120
590
+ ],
591
+ "size": [
592
+ 300,
593
+ 120
594
+ ],
595
+ "flags": {},
596
+ "order": 11,
597
+ "mode": 0,
598
+ "inputs": [
599
+ {
600
+ "localized_name": "pixels",
601
+ "name": "pixels",
602
+ "type": "IMAGE",
603
+ "link": 6
604
+ },
605
+ {
606
+ "localized_name": "vae",
607
+ "name": "vae",
608
+ "type": "VAE",
609
+ "link": 7
610
+ }
611
+ ],
612
+ "outputs": [
613
+ {
614
+ "localized_name": "LATENT",
615
+ "name": "LATENT",
616
+ "type": "LATENT",
617
+ "slot_index": 0,
618
+ "links": [
619
+ 9
620
+ ]
621
+ }
622
+ ],
623
+ "properties": {
624
+ "Node name for S&R": "VAEEncode"
625
+ },
626
+ "widgets_values": []
627
+ },
628
+ {
629
+ "id": 12,
630
+ "type": "AnimaControlApply",
631
+ "pos": [
632
+ 1580,
633
+ 120
634
+ ],
635
+ "size": [
636
+ 300,
637
+ 120
638
+ ],
639
+ "flags": {},
640
+ "order": 12,
641
+ "mode": 0,
642
+ "inputs": [
643
+ {
644
+ "localized_name": "model",
645
+ "name": "model",
646
+ "type": "MODEL",
647
+ "link": 8
648
+ },
649
+ {
650
+ "localized_name": "control_latent",
651
+ "name": "control_latent",
652
+ "type": "LATENT",
653
+ "link": 9
654
+ },
655
+ {
656
+ "localized_name": "control_embedder_path",
657
+ "name": "control_embedder_path",
658
+ "type": "STRING",
659
+ "widget": {
660
+ "name": "control_embedder_path"
661
+ },
662
+ "link": null
663
+ },
664
+ {
665
+ "localized_name": "strength",
666
+ "name": "strength",
667
+ "type": "FLOAT",
668
+ "widget": {
669
+ "name": "strength"
670
+ },
671
+ "link": null
672
+ }
673
+ ],
674
+ "outputs": [
675
+ {
676
+ "localized_name": "MODEL",
677
+ "name": "MODEL",
678
+ "type": "MODEL",
679
+ "slot_index": 0,
680
+ "links": [
681
+ 10
682
+ ]
683
+ }
684
+ ],
685
+ "properties": {
686
+ "Node name for S&R": "AnimaControlApply"
687
+ },
688
+ "widgets_values": [
689
+ "anima_pose_preview2.safetensors",
690
+ 1
691
+ ]
692
+ },
693
+ {
694
+ "id": 13,
695
+ "type": "CFGZeroStar",
696
+ "pos": [
697
+ 1880,
698
+ 120
699
+ ],
700
+ "size": [
701
+ 300,
702
+ 120
703
+ ],
704
+ "flags": {},
705
+ "order": 13,
706
+ "mode": 0,
707
+ "inputs": [
708
+ {
709
+ "localized_name": "model",
710
+ "name": "model",
711
+ "type": "MODEL",
712
+ "link": 10
713
+ }
714
+ ],
715
+ "outputs": [
716
+ {
717
+ "localized_name": "patched_model",
718
+ "name": "patched_model",
719
+ "type": "MODEL",
720
+ "slot_index": 0,
721
+ "links": [
722
+ 11
723
+ ]
724
+ }
725
+ ],
726
+ "properties": {
727
+ "Node name for S&R": "CFGZeroStar"
728
+ },
729
+ "widgets_values": []
730
+ },
731
+ {
732
+ "id": 14,
733
+ "type": "KSampler",
734
+ "pos": [
735
+ 2180,
736
+ 120
737
+ ],
738
+ "size": [
739
+ 300,
740
+ 262
741
+ ],
742
+ "flags": {},
743
+ "order": 14,
744
+ "mode": 0,
745
+ "inputs": [
746
+ {
747
+ "localized_name": "model",
748
+ "name": "model",
749
+ "type": "MODEL",
750
+ "link": 11
751
+ },
752
+ {
753
+ "localized_name": "positive",
754
+ "name": "positive",
755
+ "type": "CONDITIONING",
756
+ "link": 12
757
+ },
758
+ {
759
+ "localized_name": "negative",
760
+ "name": "negative",
761
+ "type": "CONDITIONING",
762
+ "link": 13
763
+ },
764
+ {
765
+ "localized_name": "latent_image",
766
+ "name": "latent_image",
767
+ "type": "LATENT",
768
+ "link": 14
769
+ },
770
+ {
771
+ "localized_name": "seed",
772
+ "name": "seed",
773
+ "type": "INT",
774
+ "widget": {
775
+ "name": "seed"
776
+ },
777
+ "link": null
778
+ },
779
+ {
780
+ "localized_name": "steps",
781
+ "name": "steps",
782
+ "type": "INT",
783
+ "widget": {
784
+ "name": "steps"
785
+ },
786
+ "link": null
787
+ },
788
+ {
789
+ "localized_name": "cfg",
790
+ "name": "cfg",
791
+ "type": "FLOAT",
792
+ "widget": {
793
+ "name": "cfg"
794
+ },
795
+ "link": null
796
+ },
797
+ {
798
+ "localized_name": "sampler_name",
799
+ "name": "sampler_name",
800
+ "type": "COMBO",
801
+ "widget": {
802
+ "name": "sampler_name"
803
+ },
804
+ "link": null
805
+ },
806
+ {
807
+ "localized_name": "scheduler",
808
+ "name": "scheduler",
809
+ "type": "COMBO",
810
+ "widget": {
811
+ "name": "scheduler"
812
+ },
813
+ "link": null
814
+ },
815
+ {
816
+ "localized_name": "denoise",
817
+ "name": "denoise",
818
+ "type": "FLOAT",
819
+ "widget": {
820
+ "name": "denoise"
821
+ },
822
+ "link": null
823
+ }
824
+ ],
825
+ "outputs": [
826
+ {
827
+ "localized_name": "LATENT",
828
+ "name": "LATENT",
829
+ "type": "LATENT",
830
+ "slot_index": 0,
831
+ "links": [
832
+ 15
833
+ ]
834
+ }
835
+ ],
836
+ "properties": {
837
+ "Node name for S&R": "KSampler"
838
+ },
839
+ "widgets_values": [
840
+ 2024,
841
+ "fixed",
842
+ 30,
843
+ 4,
844
+ "er_sde",
845
+ "simple",
846
+ 1
847
+ ]
848
+ },
849
+ {
850
+ "id": 15,
851
+ "type": "VAEDecode",
852
+ "pos": [
853
+ 2480,
854
+ 120
855
+ ],
856
+ "size": [
857
+ 300,
858
+ 120
859
+ ],
860
+ "flags": {},
861
+ "order": 15,
862
+ "mode": 0,
863
+ "inputs": [
864
+ {
865
+ "localized_name": "samples",
866
+ "name": "samples",
867
+ "type": "LATENT",
868
+ "link": 15
869
+ },
870
+ {
871
+ "localized_name": "vae",
872
+ "name": "vae",
873
+ "type": "VAE",
874
+ "link": 16
875
+ }
876
+ ],
877
+ "outputs": [
878
+ {
879
+ "localized_name": "IMAGE",
880
+ "name": "IMAGE",
881
+ "type": "IMAGE",
882
+ "slot_index": 0,
883
+ "links": [
884
+ 17
885
+ ]
886
+ }
887
+ ],
888
+ "properties": {
889
+ "Node name for S&R": "VAEDecode"
890
+ },
891
+ "widgets_values": []
892
+ },
893
+ {
894
+ "id": 16,
895
+ "type": "SaveImage",
896
+ "pos": [
897
+ 2780,
898
+ 120
899
+ ],
900
+ "size": [
901
+ 300,
902
+ 270
903
+ ],
904
+ "flags": {},
905
+ "order": 16,
906
+ "mode": 0,
907
+ "inputs": [
908
+ {
909
+ "localized_name": "images",
910
+ "name": "images",
911
+ "type": "IMAGE",
912
+ "link": 17
913
+ },
914
+ {
915
+ "localized_name": "filename_prefix",
916
+ "name": "filename_prefix",
917
+ "type": "STRING",
918
+ "widget": {
919
+ "name": "filename_prefix"
920
+ },
921
+ "link": null
922
+ }
923
+ ],
924
+ "outputs": [],
925
+ "properties": {
926
+ "Node name for S&R": "SaveImage"
927
+ },
928
+ "widgets_values": [
929
+ "anima_pose_control"
930
+ ],
931
+ "title": "GENERATION"
932
+ }
933
+ ],
934
+ "links": [
935
+ [
936
+ 1,
937
+ 1,
938
+ 0,
939
+ 2,
940
+ 0,
941
+ "MODEL"
942
+ ],
943
+ [
944
+ 2,
945
+ 3,
946
+ 0,
947
+ 5,
948
+ 0,
949
+ "CLIP"
950
+ ],
951
+ [
952
+ 3,
953
+ 3,
954
+ 0,
955
+ 6,
956
+ 0,
957
+ "CLIP"
958
+ ],
959
+ [
960
+ 4,
961
+ 8,
962
+ 0,
963
+ 9,
964
+ 0,
965
+ "IMAGE"
966
+ ],
967
+ [
968
+ 5,
969
+ 9,
970
+ 0,
971
+ 10,
972
+ 0,
973
+ "IMAGE"
974
+ ],
975
+ [
976
+ 6,
977
+ 10,
978
+ 0,
979
+ 11,
980
+ 0,
981
+ "IMAGE"
982
+ ],
983
+ [
984
+ 7,
985
+ 4,
986
+ 0,
987
+ 11,
988
+ 1,
989
+ "VAE"
990
+ ],
991
+ [
992
+ 8,
993
+ 2,
994
+ 0,
995
+ 12,
996
+ 0,
997
+ "MODEL"
998
+ ],
999
+ [
1000
+ 9,
1001
+ 11,
1002
+ 0,
1003
+ 12,
1004
+ 1,
1005
+ "LATENT"
1006
+ ],
1007
+ [
1008
+ 10,
1009
+ 12,
1010
+ 0,
1011
+ 13,
1012
+ 0,
1013
+ "MODEL"
1014
+ ],
1015
+ [
1016
+ 11,
1017
+ 13,
1018
+ 0,
1019
+ 14,
1020
+ 0,
1021
+ "MODEL"
1022
+ ],
1023
+ [
1024
+ 12,
1025
+ 5,
1026
+ 0,
1027
+ 14,
1028
+ 1,
1029
+ "CONDITIONING"
1030
+ ],
1031
+ [
1032
+ 13,
1033
+ 6,
1034
+ 0,
1035
+ 14,
1036
+ 2,
1037
+ "CONDITIONING"
1038
+ ],
1039
+ [
1040
+ 14,
1041
+ 7,
1042
+ 0,
1043
+ 14,
1044
+ 3,
1045
+ "LATENT"
1046
+ ],
1047
+ [
1048
+ 15,
1049
+ 14,
1050
+ 0,
1051
+ 15,
1052
+ 0,
1053
+ "LATENT"
1054
+ ],
1055
+ [
1056
+ 16,
1057
+ 4,
1058
+ 0,
1059
+ 15,
1060
+ 1,
1061
+ "VAE"
1062
+ ],
1063
+ [
1064
+ 17,
1065
+ 15,
1066
+ 0,
1067
+ 16,
1068
+ 0,
1069
+ "IMAGE"
1070
+ ]
1071
+ ],
1072
+ "groups": [],
1073
+ "config": {},
1074
+ "extra": {
1075
+ "ds": {
1076
+ "scale": 1.2284597357367357,
1077
+ "offset": [
1078
+ -896.6673282988922,
1079
+ -2098.6519356376084
1080
+ ]
1081
+ }
1082
+ },
1083
+ "version": 0.4
1084
+ }
pose_control_compare.json ADDED
The diff for this file is too large to render. See raw diff
 
pose_control_demo.json ADDED
@@ -0,0 +1,1469 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "release",
3
+ "revision": 0,
4
+ "last_node_id": 21,
5
+ "last_link_id": 26,
6
+ "nodes": [
7
+ {
8
+ "id": 1,
9
+ "type": "UNETLoader",
10
+ "pos": [
11
+ 40,
12
+ 40
13
+ ],
14
+ "size": [
15
+ 300,
16
+ 120
17
+ ],
18
+ "flags": {},
19
+ "order": 1,
20
+ "mode": 0,
21
+ "inputs": [
22
+ {
23
+ "localized_name": "unet_name",
24
+ "name": "unet_name",
25
+ "type": "COMBO",
26
+ "widget": {
27
+ "name": "unet_name"
28
+ },
29
+ "link": null
30
+ },
31
+ {
32
+ "localized_name": "weight_dtype",
33
+ "name": "weight_dtype",
34
+ "type": "COMBO",
35
+ "widget": {
36
+ "name": "weight_dtype"
37
+ },
38
+ "link": null
39
+ }
40
+ ],
41
+ "outputs": [
42
+ {
43
+ "localized_name": "MODEL",
44
+ "name": "MODEL",
45
+ "type": "MODEL",
46
+ "slot_index": 0,
47
+ "links": [
48
+ 1,
49
+ 18
50
+ ]
51
+ }
52
+ ],
53
+ "properties": {
54
+ "Node name for S&R": "UNETLoader"
55
+ },
56
+ "widgets_values": [
57
+ "anima-base-v1.0.safetensors",
58
+ "default"
59
+ ]
60
+ },
61
+ {
62
+ "id": 2,
63
+ "type": "LoraLoaderModelOnly",
64
+ "pos": [
65
+ 40,
66
+ 180
67
+ ],
68
+ "size": [
69
+ 300,
70
+ 120
71
+ ],
72
+ "flags": {},
73
+ "order": 2,
74
+ "mode": 0,
75
+ "inputs": [
76
+ {
77
+ "localized_name": "model",
78
+ "name": "model",
79
+ "type": "MODEL",
80
+ "link": 1
81
+ },
82
+ {
83
+ "localized_name": "lora_name",
84
+ "name": "lora_name",
85
+ "type": "COMBO",
86
+ "widget": {
87
+ "name": "lora_name"
88
+ },
89
+ "link": null
90
+ },
91
+ {
92
+ "localized_name": "strength_model",
93
+ "name": "strength_model",
94
+ "type": "FLOAT",
95
+ "widget": {
96
+ "name": "strength_model"
97
+ },
98
+ "link": null
99
+ }
100
+ ],
101
+ "outputs": [
102
+ {
103
+ "localized_name": "MODEL",
104
+ "name": "MODEL",
105
+ "type": "MODEL",
106
+ "slot_index": 0,
107
+ "links": [
108
+ 8
109
+ ]
110
+ }
111
+ ],
112
+ "properties": {
113
+ "Node name for S&R": "LoraLoaderModelOnly"
114
+ },
115
+ "widgets_values": [
116
+ "anima_pose_preview2.safetensors",
117
+ 1
118
+ ]
119
+ },
120
+ {
121
+ "id": 3,
122
+ "type": "CLIPLoader",
123
+ "pos": [
124
+ 40,
125
+ 320
126
+ ],
127
+ "size": [
128
+ 300,
129
+ 120
130
+ ],
131
+ "flags": {},
132
+ "order": 3,
133
+ "mode": 0,
134
+ "inputs": [
135
+ {
136
+ "localized_name": "clip_name",
137
+ "name": "clip_name",
138
+ "type": "COMBO",
139
+ "widget": {
140
+ "name": "clip_name"
141
+ },
142
+ "link": null
143
+ },
144
+ {
145
+ "localized_name": "type",
146
+ "name": "type",
147
+ "type": "COMBO",
148
+ "widget": {
149
+ "name": "type"
150
+ },
151
+ "link": null
152
+ },
153
+ {
154
+ "localized_name": "device",
155
+ "name": "device",
156
+ "shape": 7,
157
+ "type": "COMBO",
158
+ "widget": {
159
+ "name": "device"
160
+ },
161
+ "link": null
162
+ }
163
+ ],
164
+ "outputs": [
165
+ {
166
+ "localized_name": "CLIP",
167
+ "name": "CLIP",
168
+ "type": "CLIP",
169
+ "slot_index": 0,
170
+ "links": [
171
+ 2,
172
+ 3
173
+ ]
174
+ }
175
+ ],
176
+ "properties": {
177
+ "Node name for S&R": "CLIPLoader"
178
+ },
179
+ "widgets_values": [
180
+ "qwen_3_06b_base.safetensors",
181
+ "stable_diffusion",
182
+ "default"
183
+ ]
184
+ },
185
+ {
186
+ "id": 4,
187
+ "type": "VAELoader",
188
+ "pos": [
189
+ 40,
190
+ 450
191
+ ],
192
+ "size": [
193
+ 300,
194
+ 120
195
+ ],
196
+ "flags": {},
197
+ "order": 4,
198
+ "mode": 0,
199
+ "inputs": [
200
+ {
201
+ "localized_name": "vae_name",
202
+ "name": "vae_name",
203
+ "type": "COMBO",
204
+ "widget": {
205
+ "name": "vae_name"
206
+ },
207
+ "link": null
208
+ }
209
+ ],
210
+ "outputs": [
211
+ {
212
+ "localized_name": "VAE",
213
+ "name": "VAE",
214
+ "type": "VAE",
215
+ "slot_index": 0,
216
+ "links": [
217
+ 7,
218
+ 16,
219
+ 24
220
+ ]
221
+ }
222
+ ],
223
+ "properties": {
224
+ "Node name for S&R": "VAELoader"
225
+ },
226
+ "widgets_values": [
227
+ "qwen_image_vae.safetensors"
228
+ ]
229
+ },
230
+ {
231
+ "id": 5,
232
+ "type": "CLIPTextEncode",
233
+ "pos": [
234
+ 40,
235
+ 560
236
+ ],
237
+ "size": [
238
+ 300,
239
+ 120
240
+ ],
241
+ "flags": {},
242
+ "order": 5,
243
+ "mode": 0,
244
+ "inputs": [
245
+ {
246
+ "localized_name": "clip",
247
+ "name": "clip",
248
+ "type": "CLIP",
249
+ "link": 2
250
+ },
251
+ {
252
+ "localized_name": "text",
253
+ "name": "text",
254
+ "type": "STRING",
255
+ "widget": {
256
+ "name": "text"
257
+ },
258
+ "link": null
259
+ }
260
+ ],
261
+ "outputs": [
262
+ {
263
+ "localized_name": "CONDITIONING",
264
+ "name": "CONDITIONING",
265
+ "type": "CONDITIONING",
266
+ "slot_index": 0,
267
+ "links": [
268
+ 12,
269
+ 20
270
+ ]
271
+ }
272
+ ],
273
+ "properties": {
274
+ "Node name for S&R": "CLIPTextEncode"
275
+ },
276
+ "widgets_values": [
277
+ "newest, masterpiece, best quality, score_9, safe\n\n1girl, solo, simple background"
278
+ ],
279
+ "title": "prompt"
280
+ },
281
+ {
282
+ "id": 6,
283
+ "type": "CLIPTextEncode",
284
+ "pos": [
285
+ 40,
286
+ 760
287
+ ],
288
+ "size": [
289
+ 300,
290
+ 120
291
+ ],
292
+ "flags": {},
293
+ "order": 6,
294
+ "mode": 0,
295
+ "inputs": [
296
+ {
297
+ "localized_name": "clip",
298
+ "name": "clip",
299
+ "type": "CLIP",
300
+ "link": 3
301
+ },
302
+ {
303
+ "localized_name": "text",
304
+ "name": "text",
305
+ "type": "STRING",
306
+ "widget": {
307
+ "name": "text"
308
+ },
309
+ "link": null
310
+ }
311
+ ],
312
+ "outputs": [
313
+ {
314
+ "localized_name": "CONDITIONING",
315
+ "name": "CONDITIONING",
316
+ "type": "CONDITIONING",
317
+ "slot_index": 0,
318
+ "links": [
319
+ 13,
320
+ 21
321
+ ]
322
+ }
323
+ ],
324
+ "properties": {
325
+ "Node name for S&R": "CLIPTextEncode"
326
+ },
327
+ "widgets_values": [
328
+ "worst quality, low quality, score_1, score_2, blurry, jpeg artifacts"
329
+ ],
330
+ "title": "negative"
331
+ },
332
+ {
333
+ "id": 7,
334
+ "type": "EmptyLatentImage",
335
+ "pos": [
336
+ 40,
337
+ 960
338
+ ],
339
+ "size": [
340
+ 300,
341
+ 120
342
+ ],
343
+ "flags": {},
344
+ "order": 7,
345
+ "mode": 0,
346
+ "inputs": [
347
+ {
348
+ "localized_name": "width",
349
+ "name": "width",
350
+ "type": "INT",
351
+ "widget": {
352
+ "name": "width"
353
+ },
354
+ "link": null
355
+ },
356
+ {
357
+ "localized_name": "height",
358
+ "name": "height",
359
+ "type": "INT",
360
+ "widget": {
361
+ "name": "height"
362
+ },
363
+ "link": null
364
+ },
365
+ {
366
+ "localized_name": "batch_size",
367
+ "name": "batch_size",
368
+ "type": "INT",
369
+ "widget": {
370
+ "name": "batch_size"
371
+ },
372
+ "link": null
373
+ }
374
+ ],
375
+ "outputs": [
376
+ {
377
+ "localized_name": "LATENT",
378
+ "name": "LATENT",
379
+ "type": "LATENT",
380
+ "slot_index": 0,
381
+ "links": [
382
+ 14,
383
+ 22
384
+ ]
385
+ }
386
+ ],
387
+ "properties": {
388
+ "Node name for S&R": "EmptyLatentImage"
389
+ },
390
+ "widgets_values": [
391
+ 768,
392
+ 768,
393
+ 1
394
+ ]
395
+ },
396
+ {
397
+ "id": 8,
398
+ "type": "LoadImage",
399
+ "pos": [
400
+ 380,
401
+ 120
402
+ ],
403
+ "size": [
404
+ 300,
405
+ 314
406
+ ],
407
+ "flags": {},
408
+ "order": 8,
409
+ "mode": 0,
410
+ "inputs": [
411
+ {
412
+ "localized_name": "image",
413
+ "name": "image",
414
+ "type": "COMBO",
415
+ "widget": {
416
+ "name": "image"
417
+ },
418
+ "link": null
419
+ },
420
+ {
421
+ "localized_name": "choose file to upload",
422
+ "name": "upload",
423
+ "type": "IMAGEUPLOAD",
424
+ "widget": {
425
+ "name": "upload"
426
+ },
427
+ "link": null
428
+ }
429
+ ],
430
+ "outputs": [
431
+ {
432
+ "localized_name": "IMAGE",
433
+ "name": "IMAGE",
434
+ "type": "IMAGE",
435
+ "slot_index": 0,
436
+ "links": [
437
+ 4
438
+ ]
439
+ },
440
+ {
441
+ "localized_name": "MASK",
442
+ "name": "MASK",
443
+ "type": "MASK",
444
+ "slot_index": 1,
445
+ "links": []
446
+ }
447
+ ],
448
+ "properties": {
449
+ "Node name for S&R": "LoadImage"
450
+ },
451
+ "widgets_values": [
452
+ "cmp_source.png",
453
+ "image"
454
+ ],
455
+ "title": "reference PHOTO"
456
+ },
457
+ {
458
+ "id": 9,
459
+ "type": "AnimaPoseControl",
460
+ "pos": [
461
+ 680,
462
+ 120
463
+ ],
464
+ "size": [
465
+ 260,
466
+ 200
467
+ ],
468
+ "flags": {},
469
+ "order": 9,
470
+ "mode": 0,
471
+ "properties": {
472
+ "Node name for S&R": "AnimaPoseControl"
473
+ },
474
+ "widgets_values": [
475
+ "R0_thin",
476
+ true,
477
+ true,
478
+ true,
479
+ true,
480
+ 768,
481
+ ""
482
+ ],
483
+ "inputs": [
484
+ {
485
+ "name": "image",
486
+ "type": "IMAGE",
487
+ "link": 4
488
+ }
489
+ ],
490
+ "outputs": [
491
+ {
492
+ "name": "skeleton",
493
+ "type": "IMAGE",
494
+ "links": [
495
+ 5,
496
+ 26
497
+ ],
498
+ "slot_index": 0
499
+ },
500
+ {
501
+ "name": "keypoints",
502
+ "type": "POSE_KEYPOINT",
503
+ "links": [],
504
+ "slot_index": 1
505
+ }
506
+ ],
507
+ "title": "POSE: detect + style",
508
+ "color": "#533",
509
+ "bgcolor": "#223"
510
+ },
511
+ {
512
+ "id": 10,
513
+ "type": "ImageScale",
514
+ "pos": [
515
+ 980,
516
+ 120
517
+ ],
518
+ "size": [
519
+ 300,
520
+ 130
521
+ ],
522
+ "flags": {},
523
+ "order": 10,
524
+ "mode": 0,
525
+ "inputs": [
526
+ {
527
+ "localized_name": "image",
528
+ "name": "image",
529
+ "type": "IMAGE",
530
+ "link": 5
531
+ },
532
+ {
533
+ "localized_name": "upscale_method",
534
+ "name": "upscale_method",
535
+ "type": "COMBO",
536
+ "widget": {
537
+ "name": "upscale_method"
538
+ },
539
+ "link": null
540
+ },
541
+ {
542
+ "localized_name": "width",
543
+ "name": "width",
544
+ "type": "INT",
545
+ "widget": {
546
+ "name": "width"
547
+ },
548
+ "link": null
549
+ },
550
+ {
551
+ "localized_name": "height",
552
+ "name": "height",
553
+ "type": "INT",
554
+ "widget": {
555
+ "name": "height"
556
+ },
557
+ "link": null
558
+ },
559
+ {
560
+ "localized_name": "crop",
561
+ "name": "crop",
562
+ "type": "COMBO",
563
+ "widget": {
564
+ "name": "crop"
565
+ },
566
+ "link": null
567
+ }
568
+ ],
569
+ "outputs": [
570
+ {
571
+ "localized_name": "IMAGE",
572
+ "name": "IMAGE",
573
+ "type": "IMAGE",
574
+ "slot_index": 0,
575
+ "links": [
576
+ 6
577
+ ]
578
+ }
579
+ ],
580
+ "properties": {
581
+ "Node name for S&R": "ImageScale"
582
+ },
583
+ "widgets_values": [
584
+ "nearest-exact",
585
+ 768,
586
+ 768,
587
+ "disabled"
588
+ ]
589
+ },
590
+ {
591
+ "id": 11,
592
+ "type": "VAEEncode",
593
+ "pos": [
594
+ 1280,
595
+ 120
596
+ ],
597
+ "size": [
598
+ 300,
599
+ 120
600
+ ],
601
+ "flags": {},
602
+ "order": 11,
603
+ "mode": 0,
604
+ "inputs": [
605
+ {
606
+ "localized_name": "pixels",
607
+ "name": "pixels",
608
+ "type": "IMAGE",
609
+ "link": 6
610
+ },
611
+ {
612
+ "localized_name": "vae",
613
+ "name": "vae",
614
+ "type": "VAE",
615
+ "link": 7
616
+ }
617
+ ],
618
+ "outputs": [
619
+ {
620
+ "localized_name": "LATENT",
621
+ "name": "LATENT",
622
+ "type": "LATENT",
623
+ "slot_index": 0,
624
+ "links": [
625
+ 9
626
+ ]
627
+ }
628
+ ],
629
+ "properties": {
630
+ "Node name for S&R": "VAEEncode"
631
+ },
632
+ "widgets_values": []
633
+ },
634
+ {
635
+ "id": 12,
636
+ "type": "AnimaControlApply",
637
+ "pos": [
638
+ 1580,
639
+ 120
640
+ ],
641
+ "size": [
642
+ 300,
643
+ 120
644
+ ],
645
+ "flags": {},
646
+ "order": 12,
647
+ "mode": 0,
648
+ "inputs": [
649
+ {
650
+ "localized_name": "model",
651
+ "name": "model",
652
+ "type": "MODEL",
653
+ "link": 8
654
+ },
655
+ {
656
+ "localized_name": "control_latent",
657
+ "name": "control_latent",
658
+ "type": "LATENT",
659
+ "link": 9
660
+ },
661
+ {
662
+ "localized_name": "control_embedder_path",
663
+ "name": "control_embedder_path",
664
+ "type": "STRING",
665
+ "widget": {
666
+ "name": "control_embedder_path"
667
+ },
668
+ "link": null
669
+ },
670
+ {
671
+ "localized_name": "strength",
672
+ "name": "strength",
673
+ "type": "FLOAT",
674
+ "widget": {
675
+ "name": "strength"
676
+ },
677
+ "link": null
678
+ }
679
+ ],
680
+ "outputs": [
681
+ {
682
+ "localized_name": "MODEL",
683
+ "name": "MODEL",
684
+ "type": "MODEL",
685
+ "slot_index": 0,
686
+ "links": [
687
+ 10
688
+ ]
689
+ }
690
+ ],
691
+ "properties": {
692
+ "Node name for S&R": "AnimaControlApply"
693
+ },
694
+ "widgets_values": [
695
+ "anima_pose_preview2.safetensors",
696
+ 1
697
+ ]
698
+ },
699
+ {
700
+ "id": 13,
701
+ "type": "CFGZeroStar",
702
+ "pos": [
703
+ 1880,
704
+ 120
705
+ ],
706
+ "size": [
707
+ 300,
708
+ 120
709
+ ],
710
+ "flags": {},
711
+ "order": 13,
712
+ "mode": 0,
713
+ "inputs": [
714
+ {
715
+ "localized_name": "model",
716
+ "name": "model",
717
+ "type": "MODEL",
718
+ "link": 10
719
+ }
720
+ ],
721
+ "outputs": [
722
+ {
723
+ "localized_name": "patched_model",
724
+ "name": "patched_model",
725
+ "type": "MODEL",
726
+ "slot_index": 0,
727
+ "links": [
728
+ 11
729
+ ]
730
+ }
731
+ ],
732
+ "properties": {
733
+ "Node name for S&R": "CFGZeroStar"
734
+ },
735
+ "widgets_values": []
736
+ },
737
+ {
738
+ "id": 14,
739
+ "type": "KSampler",
740
+ "pos": [
741
+ 2180,
742
+ 120
743
+ ],
744
+ "size": [
745
+ 300,
746
+ 262
747
+ ],
748
+ "flags": {},
749
+ "order": 14,
750
+ "mode": 0,
751
+ "inputs": [
752
+ {
753
+ "localized_name": "model",
754
+ "name": "model",
755
+ "type": "MODEL",
756
+ "link": 11
757
+ },
758
+ {
759
+ "localized_name": "positive",
760
+ "name": "positive",
761
+ "type": "CONDITIONING",
762
+ "link": 12
763
+ },
764
+ {
765
+ "localized_name": "negative",
766
+ "name": "negative",
767
+ "type": "CONDITIONING",
768
+ "link": 13
769
+ },
770
+ {
771
+ "localized_name": "latent_image",
772
+ "name": "latent_image",
773
+ "type": "LATENT",
774
+ "link": 14
775
+ },
776
+ {
777
+ "localized_name": "seed",
778
+ "name": "seed",
779
+ "type": "INT",
780
+ "widget": {
781
+ "name": "seed"
782
+ },
783
+ "link": null
784
+ },
785
+ {
786
+ "localized_name": "steps",
787
+ "name": "steps",
788
+ "type": "INT",
789
+ "widget": {
790
+ "name": "steps"
791
+ },
792
+ "link": null
793
+ },
794
+ {
795
+ "localized_name": "cfg",
796
+ "name": "cfg",
797
+ "type": "FLOAT",
798
+ "widget": {
799
+ "name": "cfg"
800
+ },
801
+ "link": null
802
+ },
803
+ {
804
+ "localized_name": "sampler_name",
805
+ "name": "sampler_name",
806
+ "type": "COMBO",
807
+ "widget": {
808
+ "name": "sampler_name"
809
+ },
810
+ "link": null
811
+ },
812
+ {
813
+ "localized_name": "scheduler",
814
+ "name": "scheduler",
815
+ "type": "COMBO",
816
+ "widget": {
817
+ "name": "scheduler"
818
+ },
819
+ "link": null
820
+ },
821
+ {
822
+ "localized_name": "denoise",
823
+ "name": "denoise",
824
+ "type": "FLOAT",
825
+ "widget": {
826
+ "name": "denoise"
827
+ },
828
+ "link": null
829
+ }
830
+ ],
831
+ "outputs": [
832
+ {
833
+ "localized_name": "LATENT",
834
+ "name": "LATENT",
835
+ "type": "LATENT",
836
+ "slot_index": 0,
837
+ "links": [
838
+ 15
839
+ ]
840
+ }
841
+ ],
842
+ "properties": {
843
+ "Node name for S&R": "KSampler"
844
+ },
845
+ "widgets_values": [
846
+ 2024,
847
+ "fixed",
848
+ 30,
849
+ 4,
850
+ "er_sde",
851
+ "simple",
852
+ 1
853
+ ]
854
+ },
855
+ {
856
+ "id": 15,
857
+ "type": "VAEDecode",
858
+ "pos": [
859
+ 2480,
860
+ 120
861
+ ],
862
+ "size": [
863
+ 300,
864
+ 120
865
+ ],
866
+ "flags": {},
867
+ "order": 15,
868
+ "mode": 0,
869
+ "inputs": [
870
+ {
871
+ "localized_name": "samples",
872
+ "name": "samples",
873
+ "type": "LATENT",
874
+ "link": 15
875
+ },
876
+ {
877
+ "localized_name": "vae",
878
+ "name": "vae",
879
+ "type": "VAE",
880
+ "link": 16
881
+ }
882
+ ],
883
+ "outputs": [
884
+ {
885
+ "localized_name": "IMAGE",
886
+ "name": "IMAGE",
887
+ "type": "IMAGE",
888
+ "slot_index": 0,
889
+ "links": [
890
+ 17
891
+ ]
892
+ }
893
+ ],
894
+ "properties": {
895
+ "Node name for S&R": "VAEDecode"
896
+ },
897
+ "widgets_values": []
898
+ },
899
+ {
900
+ "id": 16,
901
+ "type": "SaveImage",
902
+ "pos": [
903
+ 2780,
904
+ 120
905
+ ],
906
+ "size": [
907
+ 300,
908
+ 270
909
+ ],
910
+ "flags": {},
911
+ "order": 16,
912
+ "mode": 0,
913
+ "inputs": [
914
+ {
915
+ "localized_name": "images",
916
+ "name": "images",
917
+ "type": "IMAGE",
918
+ "link": 17
919
+ },
920
+ {
921
+ "localized_name": "filename_prefix",
922
+ "name": "filename_prefix",
923
+ "type": "STRING",
924
+ "widget": {
925
+ "name": "filename_prefix"
926
+ },
927
+ "link": null
928
+ }
929
+ ],
930
+ "outputs": [],
931
+ "properties": {
932
+ "Node name for S&R": "SaveImage"
933
+ },
934
+ "widgets_values": [
935
+ "anima_pose_control"
936
+ ],
937
+ "title": "GENERATION"
938
+ },
939
+ {
940
+ "id": 17,
941
+ "type": "CFGZeroStar",
942
+ "pos": [
943
+ 1880,
944
+ 580
945
+ ],
946
+ "size": [
947
+ 300,
948
+ 120
949
+ ],
950
+ "flags": {},
951
+ "order": 17,
952
+ "mode": 0,
953
+ "inputs": [
954
+ {
955
+ "localized_name": "model",
956
+ "name": "model",
957
+ "type": "MODEL",
958
+ "link": 18
959
+ }
960
+ ],
961
+ "outputs": [
962
+ {
963
+ "localized_name": "patched_model",
964
+ "name": "patched_model",
965
+ "type": "MODEL",
966
+ "slot_index": 0,
967
+ "links": [
968
+ 19
969
+ ]
970
+ }
971
+ ],
972
+ "properties": {
973
+ "Node name for S&R": "CFGZeroStar"
974
+ },
975
+ "widgets_values": []
976
+ },
977
+ {
978
+ "id": 18,
979
+ "type": "KSampler",
980
+ "pos": [
981
+ 2180,
982
+ 580
983
+ ],
984
+ "size": [
985
+ 300,
986
+ 262
987
+ ],
988
+ "flags": {},
989
+ "order": 18,
990
+ "mode": 0,
991
+ "inputs": [
992
+ {
993
+ "localized_name": "model",
994
+ "name": "model",
995
+ "type": "MODEL",
996
+ "link": 19
997
+ },
998
+ {
999
+ "localized_name": "positive",
1000
+ "name": "positive",
1001
+ "type": "CONDITIONING",
1002
+ "link": 20
1003
+ },
1004
+ {
1005
+ "localized_name": "negative",
1006
+ "name": "negative",
1007
+ "type": "CONDITIONING",
1008
+ "link": 21
1009
+ },
1010
+ {
1011
+ "localized_name": "latent_image",
1012
+ "name": "latent_image",
1013
+ "type": "LATENT",
1014
+ "link": 22
1015
+ },
1016
+ {
1017
+ "localized_name": "seed",
1018
+ "name": "seed",
1019
+ "type": "INT",
1020
+ "widget": {
1021
+ "name": "seed"
1022
+ },
1023
+ "link": null
1024
+ },
1025
+ {
1026
+ "localized_name": "steps",
1027
+ "name": "steps",
1028
+ "type": "INT",
1029
+ "widget": {
1030
+ "name": "steps"
1031
+ },
1032
+ "link": null
1033
+ },
1034
+ {
1035
+ "localized_name": "cfg",
1036
+ "name": "cfg",
1037
+ "type": "FLOAT",
1038
+ "widget": {
1039
+ "name": "cfg"
1040
+ },
1041
+ "link": null
1042
+ },
1043
+ {
1044
+ "localized_name": "sampler_name",
1045
+ "name": "sampler_name",
1046
+ "type": "COMBO",
1047
+ "widget": {
1048
+ "name": "sampler_name"
1049
+ },
1050
+ "link": null
1051
+ },
1052
+ {
1053
+ "localized_name": "scheduler",
1054
+ "name": "scheduler",
1055
+ "type": "COMBO",
1056
+ "widget": {
1057
+ "name": "scheduler"
1058
+ },
1059
+ "link": null
1060
+ },
1061
+ {
1062
+ "localized_name": "denoise",
1063
+ "name": "denoise",
1064
+ "type": "FLOAT",
1065
+ "widget": {
1066
+ "name": "denoise"
1067
+ },
1068
+ "link": null
1069
+ }
1070
+ ],
1071
+ "outputs": [
1072
+ {
1073
+ "localized_name": "LATENT",
1074
+ "name": "LATENT",
1075
+ "type": "LATENT",
1076
+ "slot_index": 0,
1077
+ "links": [
1078
+ 23
1079
+ ]
1080
+ }
1081
+ ],
1082
+ "properties": {
1083
+ "Node name for S&R": "KSampler"
1084
+ },
1085
+ "widgets_values": [
1086
+ 2024,
1087
+ "fixed",
1088
+ 30,
1089
+ 4,
1090
+ "er_sde",
1091
+ "simple",
1092
+ 1
1093
+ ]
1094
+ },
1095
+ {
1096
+ "id": 19,
1097
+ "type": "VAEDecode",
1098
+ "pos": [
1099
+ 2480,
1100
+ 580
1101
+ ],
1102
+ "size": [
1103
+ 300,
1104
+ 120
1105
+ ],
1106
+ "flags": {},
1107
+ "order": 19,
1108
+ "mode": 0,
1109
+ "inputs": [
1110
+ {
1111
+ "localized_name": "samples",
1112
+ "name": "samples",
1113
+ "type": "LATENT",
1114
+ "link": 23
1115
+ },
1116
+ {
1117
+ "localized_name": "vae",
1118
+ "name": "vae",
1119
+ "type": "VAE",
1120
+ "link": 24
1121
+ }
1122
+ ],
1123
+ "outputs": [
1124
+ {
1125
+ "localized_name": "IMAGE",
1126
+ "name": "IMAGE",
1127
+ "type": "IMAGE",
1128
+ "slot_index": 0,
1129
+ "links": [
1130
+ 25
1131
+ ]
1132
+ }
1133
+ ],
1134
+ "properties": {
1135
+ "Node name for S&R": "VAEDecode"
1136
+ },
1137
+ "widgets_values": []
1138
+ },
1139
+ {
1140
+ "id": 20,
1141
+ "type": "SaveImage",
1142
+ "pos": [
1143
+ 2780,
1144
+ 580
1145
+ ],
1146
+ "size": [
1147
+ 300,
1148
+ 270
1149
+ ],
1150
+ "flags": {},
1151
+ "order": 20,
1152
+ "mode": 0,
1153
+ "inputs": [
1154
+ {
1155
+ "localized_name": "images",
1156
+ "name": "images",
1157
+ "type": "IMAGE",
1158
+ "link": 25
1159
+ },
1160
+ {
1161
+ "localized_name": "filename_prefix",
1162
+ "name": "filename_prefix",
1163
+ "type": "STRING",
1164
+ "widget": {
1165
+ "name": "filename_prefix"
1166
+ },
1167
+ "link": null
1168
+ }
1169
+ ],
1170
+ "outputs": [],
1171
+ "properties": {
1172
+ "Node name for S&R": "SaveImage"
1173
+ },
1174
+ "widgets_values": [
1175
+ "anima_pose_BASE"
1176
+ ],
1177
+ "title": "BASE (no control)"
1178
+ },
1179
+ {
1180
+ "id": 21,
1181
+ "type": "SaveImage",
1182
+ "pos": [
1183
+ 980,
1184
+ 580
1185
+ ],
1186
+ "size": [
1187
+ 300,
1188
+ 270
1189
+ ],
1190
+ "flags": {},
1191
+ "order": 21,
1192
+ "mode": 0,
1193
+ "inputs": [
1194
+ {
1195
+ "localized_name": "images",
1196
+ "name": "images",
1197
+ "type": "IMAGE",
1198
+ "link": 26
1199
+ },
1200
+ {
1201
+ "localized_name": "filename_prefix",
1202
+ "name": "filename_prefix",
1203
+ "type": "STRING",
1204
+ "widget": {
1205
+ "name": "filename_prefix"
1206
+ },
1207
+ "link": null
1208
+ }
1209
+ ],
1210
+ "outputs": [],
1211
+ "properties": {
1212
+ "Node name for S&R": "SaveImage"
1213
+ },
1214
+ "widgets_values": [
1215
+ "anima_pose_SKELETON"
1216
+ ],
1217
+ "title": "SKELETON (control image)"
1218
+ }
1219
+ ],
1220
+ "links": [
1221
+ [
1222
+ 1,
1223
+ 1,
1224
+ 0,
1225
+ 2,
1226
+ 0,
1227
+ "MODEL"
1228
+ ],
1229
+ [
1230
+ 2,
1231
+ 3,
1232
+ 0,
1233
+ 5,
1234
+ 0,
1235
+ "CLIP"
1236
+ ],
1237
+ [
1238
+ 3,
1239
+ 3,
1240
+ 0,
1241
+ 6,
1242
+ 0,
1243
+ "CLIP"
1244
+ ],
1245
+ [
1246
+ 4,
1247
+ 8,
1248
+ 0,
1249
+ 9,
1250
+ 0,
1251
+ "IMAGE"
1252
+ ],
1253
+ [
1254
+ 5,
1255
+ 9,
1256
+ 0,
1257
+ 10,
1258
+ 0,
1259
+ "IMAGE"
1260
+ ],
1261
+ [
1262
+ 6,
1263
+ 10,
1264
+ 0,
1265
+ 11,
1266
+ 0,
1267
+ "IMAGE"
1268
+ ],
1269
+ [
1270
+ 7,
1271
+ 4,
1272
+ 0,
1273
+ 11,
1274
+ 1,
1275
+ "VAE"
1276
+ ],
1277
+ [
1278
+ 8,
1279
+ 2,
1280
+ 0,
1281
+ 12,
1282
+ 0,
1283
+ "MODEL"
1284
+ ],
1285
+ [
1286
+ 9,
1287
+ 11,
1288
+ 0,
1289
+ 12,
1290
+ 1,
1291
+ "LATENT"
1292
+ ],
1293
+ [
1294
+ 10,
1295
+ 12,
1296
+ 0,
1297
+ 13,
1298
+ 0,
1299
+ "MODEL"
1300
+ ],
1301
+ [
1302
+ 11,
1303
+ 13,
1304
+ 0,
1305
+ 14,
1306
+ 0,
1307
+ "MODEL"
1308
+ ],
1309
+ [
1310
+ 12,
1311
+ 5,
1312
+ 0,
1313
+ 14,
1314
+ 1,
1315
+ "CONDITIONING"
1316
+ ],
1317
+ [
1318
+ 13,
1319
+ 6,
1320
+ 0,
1321
+ 14,
1322
+ 2,
1323
+ "CONDITIONING"
1324
+ ],
1325
+ [
1326
+ 14,
1327
+ 7,
1328
+ 0,
1329
+ 14,
1330
+ 3,
1331
+ "LATENT"
1332
+ ],
1333
+ [
1334
+ 15,
1335
+ 14,
1336
+ 0,
1337
+ 15,
1338
+ 0,
1339
+ "LATENT"
1340
+ ],
1341
+ [
1342
+ 16,
1343
+ 4,
1344
+ 0,
1345
+ 15,
1346
+ 1,
1347
+ "VAE"
1348
+ ],
1349
+ [
1350
+ 17,
1351
+ 15,
1352
+ 0,
1353
+ 16,
1354
+ 0,
1355
+ "IMAGE"
1356
+ ],
1357
+ [
1358
+ 18,
1359
+ 1,
1360
+ 0,
1361
+ 17,
1362
+ 0,
1363
+ "MODEL"
1364
+ ],
1365
+ [
1366
+ 19,
1367
+ 17,
1368
+ 0,
1369
+ 18,
1370
+ 0,
1371
+ "MODEL"
1372
+ ],
1373
+ [
1374
+ 20,
1375
+ 5,
1376
+ 0,
1377
+ 18,
1378
+ 1,
1379
+ "CONDITIONING"
1380
+ ],
1381
+ [
1382
+ 21,
1383
+ 6,
1384
+ 0,
1385
+ 18,
1386
+ 2,
1387
+ "CONDITIONING"
1388
+ ],
1389
+ [
1390
+ 22,
1391
+ 7,
1392
+ 0,
1393
+ 18,
1394
+ 3,
1395
+ "LATENT"
1396
+ ],
1397
+ [
1398
+ 23,
1399
+ 18,
1400
+ 0,
1401
+ 19,
1402
+ 0,
1403
+ "LATENT"
1404
+ ],
1405
+ [
1406
+ 24,
1407
+ 4,
1408
+ 0,
1409
+ 19,
1410
+ 1,
1411
+ "VAE"
1412
+ ],
1413
+ [
1414
+ 25,
1415
+ 19,
1416
+ 0,
1417
+ 20,
1418
+ 0,
1419
+ "IMAGE"
1420
+ ],
1421
+ [
1422
+ 26,
1423
+ 9,
1424
+ 0,
1425
+ 21,
1426
+ 0,
1427
+ "IMAGE"
1428
+ ]
1429
+ ],
1430
+ "groups": [
1431
+ {
1432
+ "id": 1,
1433
+ "title": "CONTROL (pose LoRA)",
1434
+ "bounding": [
1435
+ 1560,
1436
+ 60,
1437
+ 1260,
1438
+ 300
1439
+ ],
1440
+ "color": "#2a3f2a",
1441
+ "font_size": 22,
1442
+ "flags": {}
1443
+ },
1444
+ {
1445
+ "id": 2,
1446
+ "title": "BASE (no control) \u2014 same seed/prompt",
1447
+ "bounding": [
1448
+ 1560,
1449
+ 520,
1450
+ 1260,
1451
+ 300
1452
+ ],
1453
+ "color": "#3f2a2a",
1454
+ "font_size": 22,
1455
+ "flags": {}
1456
+ }
1457
+ ],
1458
+ "config": {},
1459
+ "extra": {
1460
+ "ds": {
1461
+ "scale": 1.2284597357367357,
1462
+ "offset": [
1463
+ -896.6673282988922,
1464
+ -2098.6519356376084
1465
+ ]
1466
+ }
1467
+ },
1468
+ "version": 0.4
1469
+ }
pose_control_edit.json ADDED
@@ -0,0 +1,1082 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "id": "pose_control_edit",
3
+ "revision": 0,
4
+ "last_node_id": 16,
5
+ "last_link_id": 17,
6
+ "nodes": [
7
+ {
8
+ "id": 1,
9
+ "type": "UNETLoader",
10
+ "pos": [
11
+ 20,
12
+ 20
13
+ ],
14
+ "size": [
15
+ 300,
16
+ 120
17
+ ],
18
+ "flags": {},
19
+ "order": 1,
20
+ "mode": 0,
21
+ "inputs": [
22
+ {
23
+ "localized_name": "unet_name",
24
+ "name": "unet_name",
25
+ "type": "COMBO",
26
+ "widget": {
27
+ "name": "unet_name"
28
+ },
29
+ "link": null
30
+ },
31
+ {
32
+ "localized_name": "weight_dtype",
33
+ "name": "weight_dtype",
34
+ "type": "COMBO",
35
+ "widget": {
36
+ "name": "weight_dtype"
37
+ },
38
+ "link": null
39
+ }
40
+ ],
41
+ "outputs": [
42
+ {
43
+ "localized_name": "MODEL",
44
+ "name": "MODEL",
45
+ "type": "MODEL",
46
+ "slot_index": 0,
47
+ "links": [
48
+ 1
49
+ ]
50
+ }
51
+ ],
52
+ "properties": {
53
+ "Node name for S&R": "UNETLoader"
54
+ },
55
+ "widgets_values": [
56
+ "anima-base-v1.0.safetensors",
57
+ "default"
58
+ ]
59
+ },
60
+ {
61
+ "id": 2,
62
+ "type": "CLIPLoader",
63
+ "pos": [
64
+ 20,
65
+ 160
66
+ ],
67
+ "size": [
68
+ 300,
69
+ 120
70
+ ],
71
+ "flags": {},
72
+ "order": 2,
73
+ "mode": 0,
74
+ "inputs": [
75
+ {
76
+ "localized_name": "clip_name",
77
+ "name": "clip_name",
78
+ "type": "COMBO",
79
+ "widget": {
80
+ "name": "clip_name"
81
+ },
82
+ "link": null
83
+ },
84
+ {
85
+ "localized_name": "type",
86
+ "name": "type",
87
+ "type": "COMBO",
88
+ "widget": {
89
+ "name": "type"
90
+ },
91
+ "link": null
92
+ },
93
+ {
94
+ "localized_name": "device",
95
+ "name": "device",
96
+ "shape": 7,
97
+ "type": "COMBO",
98
+ "widget": {
99
+ "name": "device"
100
+ },
101
+ "link": null
102
+ }
103
+ ],
104
+ "outputs": [
105
+ {
106
+ "localized_name": "CLIP",
107
+ "name": "CLIP",
108
+ "type": "CLIP",
109
+ "slot_index": 0,
110
+ "links": [
111
+ 2,
112
+ 3
113
+ ]
114
+ }
115
+ ],
116
+ "properties": {
117
+ "Node name for S&R": "CLIPLoader"
118
+ },
119
+ "widgets_values": [
120
+ "qwen_3_06b_base.safetensors",
121
+ "stable_diffusion",
122
+ "default"
123
+ ]
124
+ },
125
+ {
126
+ "id": 3,
127
+ "type": "VAELoader",
128
+ "pos": [
129
+ 20,
130
+ 300
131
+ ],
132
+ "size": [
133
+ 300,
134
+ 120
135
+ ],
136
+ "flags": {},
137
+ "order": 3,
138
+ "mode": 0,
139
+ "inputs": [
140
+ {
141
+ "localized_name": "vae_name",
142
+ "name": "vae_name",
143
+ "type": "COMBO",
144
+ "widget": {
145
+ "name": "vae_name"
146
+ },
147
+ "link": null
148
+ }
149
+ ],
150
+ "outputs": [
151
+ {
152
+ "localized_name": "VAE",
153
+ "name": "VAE",
154
+ "type": "VAE",
155
+ "slot_index": 0,
156
+ "links": [
157
+ 7,
158
+ 16
159
+ ]
160
+ }
161
+ ],
162
+ "properties": {
163
+ "Node name for S&R": "VAELoader"
164
+ },
165
+ "widgets_values": [
166
+ "qwen_image_vae.safetensors"
167
+ ]
168
+ },
169
+ {
170
+ "id": 4,
171
+ "type": "LoraLoaderModelOnly",
172
+ "pos": [
173
+ 20,
174
+ 410
175
+ ],
176
+ "size": [
177
+ 300,
178
+ 120
179
+ ],
180
+ "flags": {},
181
+ "order": 4,
182
+ "mode": 0,
183
+ "inputs": [
184
+ {
185
+ "localized_name": "model",
186
+ "name": "model",
187
+ "type": "MODEL",
188
+ "link": 1
189
+ },
190
+ {
191
+ "localized_name": "lora_name",
192
+ "name": "lora_name",
193
+ "type": "COMBO",
194
+ "widget": {
195
+ "name": "lora_name"
196
+ },
197
+ "link": null
198
+ },
199
+ {
200
+ "localized_name": "strength_model",
201
+ "name": "strength_model",
202
+ "type": "FLOAT",
203
+ "widget": {
204
+ "name": "strength_model"
205
+ },
206
+ "link": null
207
+ }
208
+ ],
209
+ "outputs": [
210
+ {
211
+ "localized_name": "MODEL",
212
+ "name": "MODEL",
213
+ "type": "MODEL",
214
+ "slot_index": 0,
215
+ "links": [
216
+ 8
217
+ ]
218
+ }
219
+ ],
220
+ "properties": {
221
+ "Node name for S&R": "LoraLoaderModelOnly"
222
+ },
223
+ "widgets_values": [
224
+ "anima_pose_preview2.safetensors",
225
+ 1
226
+ ]
227
+ },
228
+ {
229
+ "id": 5,
230
+ "type": "CLIPTextEncode",
231
+ "pos": [
232
+ 20,
233
+ 540
234
+ ],
235
+ "size": [
236
+ 300,
237
+ 120
238
+ ],
239
+ "flags": {},
240
+ "order": 5,
241
+ "mode": 0,
242
+ "inputs": [
243
+ {
244
+ "localized_name": "clip",
245
+ "name": "clip",
246
+ "type": "CLIP",
247
+ "link": 2
248
+ },
249
+ {
250
+ "localized_name": "text",
251
+ "name": "text",
252
+ "type": "STRING",
253
+ "widget": {
254
+ "name": "text"
255
+ },
256
+ "link": null
257
+ }
258
+ ],
259
+ "outputs": [
260
+ {
261
+ "localized_name": "CONDITIONING",
262
+ "name": "CONDITIONING",
263
+ "type": "CONDITIONING",
264
+ "slot_index": 0,
265
+ "links": [
266
+ 12
267
+ ]
268
+ }
269
+ ],
270
+ "properties": {
271
+ "Node name for S&R": "CLIPTextEncode"
272
+ },
273
+ "widgets_values": [
274
+ "newest, masterpiece, best quality, score_9, safe\n\n1girl, solo, simple background"
275
+ ]
276
+ },
277
+ {
278
+ "id": 6,
279
+ "type": "CLIPTextEncode",
280
+ "pos": [
281
+ 20,
282
+ 740
283
+ ],
284
+ "size": [
285
+ 300,
286
+ 120
287
+ ],
288
+ "flags": {},
289
+ "order": 6,
290
+ "mode": 0,
291
+ "inputs": [
292
+ {
293
+ "localized_name": "clip",
294
+ "name": "clip",
295
+ "type": "CLIP",
296
+ "link": 3
297
+ },
298
+ {
299
+ "localized_name": "text",
300
+ "name": "text",
301
+ "type": "STRING",
302
+ "widget": {
303
+ "name": "text"
304
+ },
305
+ "link": null
306
+ }
307
+ ],
308
+ "outputs": [
309
+ {
310
+ "localized_name": "CONDITIONING",
311
+ "name": "CONDITIONING",
312
+ "type": "CONDITIONING",
313
+ "slot_index": 0,
314
+ "links": [
315
+ 13
316
+ ]
317
+ }
318
+ ],
319
+ "properties": {
320
+ "Node name for S&R": "CLIPTextEncode"
321
+ },
322
+ "widgets_values": [
323
+ "worst quality, low quality, score_1, score_2, blurry, jpeg artifacts"
324
+ ]
325
+ },
326
+ {
327
+ "id": 7,
328
+ "type": "EmptyLatentImage",
329
+ "pos": [
330
+ 20,
331
+ 940
332
+ ],
333
+ "size": [
334
+ 300,
335
+ 120
336
+ ],
337
+ "flags": {},
338
+ "order": 7,
339
+ "mode": 0,
340
+ "inputs": [
341
+ {
342
+ "localized_name": "width",
343
+ "name": "width",
344
+ "type": "INT",
345
+ "widget": {
346
+ "name": "width"
347
+ },
348
+ "link": null
349
+ },
350
+ {
351
+ "localized_name": "height",
352
+ "name": "height",
353
+ "type": "INT",
354
+ "widget": {
355
+ "name": "height"
356
+ },
357
+ "link": null
358
+ },
359
+ {
360
+ "localized_name": "batch_size",
361
+ "name": "batch_size",
362
+ "type": "INT",
363
+ "widget": {
364
+ "name": "batch_size"
365
+ },
366
+ "link": null
367
+ }
368
+ ],
369
+ "outputs": [
370
+ {
371
+ "localized_name": "LATENT",
372
+ "name": "LATENT",
373
+ "type": "LATENT",
374
+ "slot_index": 0,
375
+ "links": [
376
+ 14
377
+ ]
378
+ }
379
+ ],
380
+ "properties": {
381
+ "Node name for S&R": "EmptyLatentImage"
382
+ },
383
+ "widgets_values": [
384
+ 768,
385
+ 768,
386
+ 1
387
+ ]
388
+ },
389
+ {
390
+ "id": 8,
391
+ "type": "LoadImage",
392
+ "pos": [
393
+ 360,
394
+ 160
395
+ ],
396
+ "size": [
397
+ 300,
398
+ 314
399
+ ],
400
+ "flags": {},
401
+ "order": 8,
402
+ "mode": 0,
403
+ "inputs": [
404
+ {
405
+ "localized_name": "image",
406
+ "name": "image",
407
+ "type": "COMBO",
408
+ "widget": {
409
+ "name": "image"
410
+ },
411
+ "link": null
412
+ },
413
+ {
414
+ "localized_name": "choose file to upload",
415
+ "name": "upload",
416
+ "type": "IMAGEUPLOAD",
417
+ "widget": {
418
+ "name": "upload"
419
+ },
420
+ "link": null
421
+ }
422
+ ],
423
+ "outputs": [
424
+ {
425
+ "localized_name": "IMAGE",
426
+ "name": "IMAGE",
427
+ "type": "IMAGE",
428
+ "slot_index": 0,
429
+ "links": [
430
+ 4
431
+ ]
432
+ },
433
+ {
434
+ "localized_name": "MASK",
435
+ "name": "MASK",
436
+ "type": "MASK",
437
+ "slot_index": 1,
438
+ "links": []
439
+ }
440
+ ],
441
+ "properties": {
442
+ "Node name for S&R": "LoadImage"
443
+ },
444
+ "widgets_values": [
445
+ "cmp_source.png",
446
+ "image"
447
+ ],
448
+ "title": "reference PHOTO"
449
+ },
450
+ {
451
+ "id": 9,
452
+ "type": "AnimaPoseControl",
453
+ "pos": [
454
+ 680,
455
+ 160
456
+ ],
457
+ "size": [
458
+ 250,
459
+ 180
460
+ ],
461
+ "flags": {},
462
+ "order": 9,
463
+ "mode": 0,
464
+ "properties": {
465
+ "Node name for S&R": "AnimaPoseControl"
466
+ },
467
+ "widgets_values": [
468
+ "R0_thin",
469
+ true,
470
+ true,
471
+ true,
472
+ true,
473
+ 768,
474
+ ""
475
+ ],
476
+ "inputs": [
477
+ {
478
+ "name": "image",
479
+ "type": "IMAGE",
480
+ "link": 4
481
+ }
482
+ ],
483
+ "outputs": [
484
+ {
485
+ "name": "skeleton",
486
+ "type": "IMAGE",
487
+ "links": [
488
+ 5
489
+ ],
490
+ "slot_index": 0
491
+ },
492
+ {
493
+ "name": "keypoints",
494
+ "type": "POSE_KEYPOINT",
495
+ "links": [],
496
+ "slot_index": 1
497
+ }
498
+ ],
499
+ "title": "POSE: detect + style",
500
+ "color": "#533",
501
+ "bgcolor": "#223"
502
+ },
503
+ {
504
+ "id": 10,
505
+ "type": "ImageScale",
506
+ "pos": [
507
+ 1010,
508
+ 160
509
+ ],
510
+ "size": [
511
+ 300,
512
+ 130
513
+ ],
514
+ "flags": {},
515
+ "order": 10,
516
+ "mode": 0,
517
+ "inputs": [
518
+ {
519
+ "localized_name": "image",
520
+ "name": "image",
521
+ "type": "IMAGE",
522
+ "link": 5
523
+ },
524
+ {
525
+ "localized_name": "upscale_method",
526
+ "name": "upscale_method",
527
+ "type": "COMBO",
528
+ "widget": {
529
+ "name": "upscale_method"
530
+ },
531
+ "link": null
532
+ },
533
+ {
534
+ "localized_name": "width",
535
+ "name": "width",
536
+ "type": "INT",
537
+ "widget": {
538
+ "name": "width"
539
+ },
540
+ "link": null
541
+ },
542
+ {
543
+ "localized_name": "height",
544
+ "name": "height",
545
+ "type": "INT",
546
+ "widget": {
547
+ "name": "height"
548
+ },
549
+ "link": null
550
+ },
551
+ {
552
+ "localized_name": "crop",
553
+ "name": "crop",
554
+ "type": "COMBO",
555
+ "widget": {
556
+ "name": "crop"
557
+ },
558
+ "link": null
559
+ }
560
+ ],
561
+ "outputs": [
562
+ {
563
+ "localized_name": "IMAGE",
564
+ "name": "IMAGE",
565
+ "type": "IMAGE",
566
+ "slot_index": 0,
567
+ "links": [
568
+ 6
569
+ ]
570
+ }
571
+ ],
572
+ "properties": {
573
+ "Node name for S&R": "ImageScale"
574
+ },
575
+ "widgets_values": [
576
+ "nearest-exact",
577
+ 768,
578
+ 768,
579
+ "disabled"
580
+ ]
581
+ },
582
+ {
583
+ "id": 11,
584
+ "type": "VAEEncode",
585
+ "pos": [
586
+ 1210,
587
+ 160
588
+ ],
589
+ "size": [
590
+ 300,
591
+ 120
592
+ ],
593
+ "flags": {},
594
+ "order": 11,
595
+ "mode": 0,
596
+ "inputs": [
597
+ {
598
+ "localized_name": "pixels",
599
+ "name": "pixels",
600
+ "type": "IMAGE",
601
+ "link": 6
602
+ },
603
+ {
604
+ "localized_name": "vae",
605
+ "name": "vae",
606
+ "type": "VAE",
607
+ "link": 7
608
+ }
609
+ ],
610
+ "outputs": [
611
+ {
612
+ "localized_name": "LATENT",
613
+ "name": "LATENT",
614
+ "type": "LATENT",
615
+ "slot_index": 0,
616
+ "links": [
617
+ 9
618
+ ]
619
+ }
620
+ ],
621
+ "properties": {
622
+ "Node name for S&R": "VAEEncode"
623
+ },
624
+ "widgets_values": []
625
+ },
626
+ {
627
+ "id": 12,
628
+ "type": "AnimaControlApply",
629
+ "pos": [
630
+ 1390,
631
+ 160
632
+ ],
633
+ "size": [
634
+ 300,
635
+ 120
636
+ ],
637
+ "flags": {},
638
+ "order": 12,
639
+ "mode": 0,
640
+ "inputs": [
641
+ {
642
+ "localized_name": "model",
643
+ "name": "model",
644
+ "type": "MODEL",
645
+ "link": 8
646
+ },
647
+ {
648
+ "localized_name": "control_latent",
649
+ "name": "control_latent",
650
+ "type": "LATENT",
651
+ "link": 9
652
+ },
653
+ {
654
+ "localized_name": "control_embedder_path",
655
+ "name": "control_embedder_path",
656
+ "type": "STRING",
657
+ "widget": {
658
+ "name": "control_embedder_path"
659
+ },
660
+ "link": null
661
+ },
662
+ {
663
+ "localized_name": "strength",
664
+ "name": "strength",
665
+ "type": "FLOAT",
666
+ "widget": {
667
+ "name": "strength"
668
+ },
669
+ "link": null
670
+ }
671
+ ],
672
+ "outputs": [
673
+ {
674
+ "localized_name": "MODEL",
675
+ "name": "MODEL",
676
+ "type": "MODEL",
677
+ "slot_index": 0,
678
+ "links": [
679
+ 10
680
+ ]
681
+ }
682
+ ],
683
+ "properties": {
684
+ "Node name for S&R": "AnimaControlApply"
685
+ },
686
+ "widgets_values": [
687
+ "anima_pose_preview2.safetensors",
688
+ 1
689
+ ]
690
+ },
691
+ {
692
+ "id": 13,
693
+ "type": "CFGZeroStar",
694
+ "pos": [
695
+ 1630,
696
+ 160
697
+ ],
698
+ "size": [
699
+ 300,
700
+ 120
701
+ ],
702
+ "flags": {},
703
+ "order": 13,
704
+ "mode": 0,
705
+ "inputs": [
706
+ {
707
+ "localized_name": "model",
708
+ "name": "model",
709
+ "type": "MODEL",
710
+ "link": 10
711
+ }
712
+ ],
713
+ "outputs": [
714
+ {
715
+ "localized_name": "patched_model",
716
+ "name": "patched_model",
717
+ "type": "MODEL",
718
+ "slot_index": 0,
719
+ "links": [
720
+ 11
721
+ ]
722
+ }
723
+ ],
724
+ "properties": {
725
+ "Node name for S&R": "CFGZeroStar"
726
+ },
727
+ "widgets_values": []
728
+ },
729
+ {
730
+ "id": 14,
731
+ "type": "KSampler",
732
+ "pos": [
733
+ 1790,
734
+ 160
735
+ ],
736
+ "size": [
737
+ 300,
738
+ 262
739
+ ],
740
+ "flags": {},
741
+ "order": 14,
742
+ "mode": 0,
743
+ "inputs": [
744
+ {
745
+ "localized_name": "model",
746
+ "name": "model",
747
+ "type": "MODEL",
748
+ "link": 11
749
+ },
750
+ {
751
+ "localized_name": "positive",
752
+ "name": "positive",
753
+ "type": "CONDITIONING",
754
+ "link": 12
755
+ },
756
+ {
757
+ "localized_name": "negative",
758
+ "name": "negative",
759
+ "type": "CONDITIONING",
760
+ "link": 13
761
+ },
762
+ {
763
+ "localized_name": "latent_image",
764
+ "name": "latent_image",
765
+ "type": "LATENT",
766
+ "link": 14
767
+ },
768
+ {
769
+ "localized_name": "seed",
770
+ "name": "seed",
771
+ "type": "INT",
772
+ "widget": {
773
+ "name": "seed"
774
+ },
775
+ "link": null
776
+ },
777
+ {
778
+ "localized_name": "steps",
779
+ "name": "steps",
780
+ "type": "INT",
781
+ "widget": {
782
+ "name": "steps"
783
+ },
784
+ "link": null
785
+ },
786
+ {
787
+ "localized_name": "cfg",
788
+ "name": "cfg",
789
+ "type": "FLOAT",
790
+ "widget": {
791
+ "name": "cfg"
792
+ },
793
+ "link": null
794
+ },
795
+ {
796
+ "localized_name": "sampler_name",
797
+ "name": "sampler_name",
798
+ "type": "COMBO",
799
+ "widget": {
800
+ "name": "sampler_name"
801
+ },
802
+ "link": null
803
+ },
804
+ {
805
+ "localized_name": "scheduler",
806
+ "name": "scheduler",
807
+ "type": "COMBO",
808
+ "widget": {
809
+ "name": "scheduler"
810
+ },
811
+ "link": null
812
+ },
813
+ {
814
+ "localized_name": "denoise",
815
+ "name": "denoise",
816
+ "type": "FLOAT",
817
+ "widget": {
818
+ "name": "denoise"
819
+ },
820
+ "link": null
821
+ }
822
+ ],
823
+ "outputs": [
824
+ {
825
+ "localized_name": "LATENT",
826
+ "name": "LATENT",
827
+ "type": "LATENT",
828
+ "slot_index": 0,
829
+ "links": [
830
+ 15
831
+ ]
832
+ }
833
+ ],
834
+ "properties": {
835
+ "Node name for S&R": "KSampler"
836
+ },
837
+ "widgets_values": [
838
+ 2024,
839
+ "fixed",
840
+ 30,
841
+ 4,
842
+ "er_sde",
843
+ "simple",
844
+ 1
845
+ ]
846
+ },
847
+ {
848
+ "id": 15,
849
+ "type": "VAEDecode",
850
+ "pos": [
851
+ 2050,
852
+ 160
853
+ ],
854
+ "size": [
855
+ 300,
856
+ 120
857
+ ],
858
+ "flags": {},
859
+ "order": 15,
860
+ "mode": 0,
861
+ "inputs": [
862
+ {
863
+ "localized_name": "samples",
864
+ "name": "samples",
865
+ "type": "LATENT",
866
+ "link": 15
867
+ },
868
+ {
869
+ "localized_name": "vae",
870
+ "name": "vae",
871
+ "type": "VAE",
872
+ "link": 16
873
+ }
874
+ ],
875
+ "outputs": [
876
+ {
877
+ "localized_name": "IMAGE",
878
+ "name": "IMAGE",
879
+ "type": "IMAGE",
880
+ "slot_index": 0,
881
+ "links": [
882
+ 17
883
+ ]
884
+ }
885
+ ],
886
+ "properties": {
887
+ "Node name for S&R": "VAEDecode"
888
+ },
889
+ "widgets_values": []
890
+ },
891
+ {
892
+ "id": 16,
893
+ "type": "SaveImage",
894
+ "pos": [
895
+ 2230,
896
+ 160
897
+ ],
898
+ "size": [
899
+ 300,
900
+ 270
901
+ ],
902
+ "flags": {},
903
+ "order": 16,
904
+ "mode": 0,
905
+ "inputs": [
906
+ {
907
+ "localized_name": "images",
908
+ "name": "images",
909
+ "type": "IMAGE",
910
+ "link": 17
911
+ },
912
+ {
913
+ "localized_name": "filename_prefix",
914
+ "name": "filename_prefix",
915
+ "type": "STRING",
916
+ "widget": {
917
+ "name": "filename_prefix"
918
+ },
919
+ "link": null
920
+ }
921
+ ],
922
+ "outputs": [],
923
+ "properties": {
924
+ "Node name for S&R": "SaveImage"
925
+ },
926
+ "widgets_values": [
927
+ "pose_edit_out"
928
+ ],
929
+ "title": "GENERATION (v2)"
930
+ }
931
+ ],
932
+ "links": [
933
+ [
934
+ 1,
935
+ 1,
936
+ 0,
937
+ 4,
938
+ 0,
939
+ "MODEL"
940
+ ],
941
+ [
942
+ 2,
943
+ 2,
944
+ 0,
945
+ 5,
946
+ 0,
947
+ "CLIP"
948
+ ],
949
+ [
950
+ 3,
951
+ 2,
952
+ 0,
953
+ 6,
954
+ 0,
955
+ "CLIP"
956
+ ],
957
+ [
958
+ 4,
959
+ 8,
960
+ 0,
961
+ 9,
962
+ 0,
963
+ "IMAGE"
964
+ ],
965
+ [
966
+ 5,
967
+ 9,
968
+ 0,
969
+ 10,
970
+ 0,
971
+ "IMAGE"
972
+ ],
973
+ [
974
+ 6,
975
+ 10,
976
+ 0,
977
+ 11,
978
+ 0,
979
+ "IMAGE"
980
+ ],
981
+ [
982
+ 7,
983
+ 3,
984
+ 0,
985
+ 11,
986
+ 1,
987
+ "VAE"
988
+ ],
989
+ [
990
+ 8,
991
+ 4,
992
+ 0,
993
+ 12,
994
+ 0,
995
+ "MODEL"
996
+ ],
997
+ [
998
+ 9,
999
+ 11,
1000
+ 0,
1001
+ 12,
1002
+ 1,
1003
+ "LATENT"
1004
+ ],
1005
+ [
1006
+ 10,
1007
+ 12,
1008
+ 0,
1009
+ 13,
1010
+ 0,
1011
+ "MODEL"
1012
+ ],
1013
+ [
1014
+ 11,
1015
+ 13,
1016
+ 0,
1017
+ 14,
1018
+ 0,
1019
+ "MODEL"
1020
+ ],
1021
+ [
1022
+ 12,
1023
+ 5,
1024
+ 0,
1025
+ 14,
1026
+ 1,
1027
+ "CONDITIONING"
1028
+ ],
1029
+ [
1030
+ 13,
1031
+ 6,
1032
+ 0,
1033
+ 14,
1034
+ 2,
1035
+ "CONDITIONING"
1036
+ ],
1037
+ [
1038
+ 14,
1039
+ 7,
1040
+ 0,
1041
+ 14,
1042
+ 3,
1043
+ "LATENT"
1044
+ ],
1045
+ [
1046
+ 15,
1047
+ 14,
1048
+ 0,
1049
+ 15,
1050
+ 0,
1051
+ "LATENT"
1052
+ ],
1053
+ [
1054
+ 16,
1055
+ 3,
1056
+ 0,
1057
+ 15,
1058
+ 1,
1059
+ "VAE"
1060
+ ],
1061
+ [
1062
+ 17,
1063
+ 15,
1064
+ 0,
1065
+ 16,
1066
+ 0,
1067
+ "IMAGE"
1068
+ ]
1069
+ ],
1070
+ "groups": [],
1071
+ "config": {},
1072
+ "extra": {
1073
+ "ds": {
1074
+ "scale": 1.2284597357367357,
1075
+ "offset": [
1076
+ -896.6673282988922,
1077
+ -2098.6519356376084
1078
+ ]
1079
+ }
1080
+ },
1081
+ "version": 0.4
1082
+ }
samples/grid.png ADDED

Git LFS Details

  • SHA256: fb79ff8d1578e0e3e47efb3918831dbdb94602e01322aa7c06afed3b30a89395
  • Pointer size: 132 Bytes
  • Size of remote file: 5.89 MB
scripts/render_skeletons.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Render full-body DWPose skeletons (COCO-WholeBody 133-kpt, black background) as control images.
2
+ Reuses the same DWPose inference as foot_adetailer/scripts/autolabel_dwpose.py.
3
+ NOTE: rtmlib's draw_skeleton only supports openpose_skeleton=True for 17/18/134/26 kpts; the
4
+ Wholebody 133-kpt output must be drawn with openpose_skeleton=False (train + infer on the same style)."""
5
+ import argparse, glob, os
6
+ import numpy as np
7
+
8
+
9
+ def render_one(img, pose_fn, draw_fn, out_path, kp_thr=0.3):
10
+ import cv2 # lazy import so the module stays importable without opencv installed
11
+ keypoints, scores = pose_fn(img)
12
+ canvas = np.zeros_like(img)
13
+ canvas = draw_fn(canvas, keypoints, scores, openpose_skeleton=False, kpt_thr=kp_thr)
14
+ cv2.imwrite(str(out_path), canvas)
15
+
16
+
17
+ def main():
18
+ ap = argparse.ArgumentParser()
19
+ ap.add_argument('--imgs', required=True)
20
+ ap.add_argument('--out', required=True)
21
+ ap.add_argument('--kp-thr', type=float, default=0.3)
22
+ ap.add_argument('--device', default='cuda')
23
+ ap.add_argument('--limit', type=int, default=0)
24
+ args = ap.parse_args()
25
+
26
+ import cv2
27
+ from rtmlib import Wholebody, draw_skeleton # lazy: not in local .venv
28
+ pose = Wholebody(to_openpose=False, mode='balanced', backend='onnxruntime', device=args.device)
29
+ os.makedirs(args.out, exist_ok=True)
30
+ files = sorted(sum((glob.glob(os.path.join(args.imgs, f'*.{e}')) for e in ('jpg', 'jpeg', 'png', 'webp')), []))
31
+ if args.limit:
32
+ files = files[:args.limit]
33
+ for i, fp in enumerate(files):
34
+ img = cv2.imread(fp)
35
+ if img is None:
36
+ continue
37
+ stem = os.path.splitext(os.path.basename(fp))[0]
38
+ render_one(img, lambda im: pose(im), draw_skeleton, os.path.join(args.out, stem + '.png'), args.kp_thr)
39
+ if i % 200 == 0:
40
+ print(f'{i}/{len(files)}')
41
+
42
+
43
+ if __name__ == '__main__':
44
+ main()