diff --git a/README.md b/README.md index 324f71c..1b812e6 100644 --- a/README.md +++ b/README.md @@ -1,937 +1,2372 @@ -# ComfyUI-Toggle-Pass - -[English](#english) | [中文](#中文) - ---- - - -## English - -Toggle-Pass node collection — toggle controls, image load/save/preview, privacy mask, dynamic multi-reference image encoding, unified model loader, and an all-in-one sampler. - -### Nodes - -#### ToggleUnifiedLoader — Unified Model + LoRA Loader - -All-in-one model loading node: UNet + CLIP + VAE + multiple LoRAs in a single node. - -**Loader mode** (`加载模式`) — one node, two ways to load: - -| Mode | What it does | Parameters shown | -|---|---|---| -| `分离组件 (UNet+CLIP+VAE)` (default) | Pick UNet / CLIP / VAE separately | `unet_name`, `clip_name`, `vae_name`, `clip_type` | -| `Checkpoint 一体包` | Load an all-in-one checkpoint (same as the official **CheckpointLoaderSimple**): UNet + CLIP + VAE are extracted automatically by guessing the config | `ckpt_name` only | - -- **The mode is a two-segment switch — `UNet | Checkpoint`**, not a dropdown. Click the left half for - separate components, the right half for an all-in-one checkpoint; the current side is highlighted -- The switch sits **on the node's top row, level with the `模型 / MODEL` output slot**, and its left - edge lines up with the dropdown widgets below -- The `加载模式` value is still stored and serialised normally, so **existing workflows and API calls - keep working** — the switch only takes over how it is drawn and clicked -- Under the Vue node renderer ("modern node design") the switch is drawn inside the combo widget instead -- In `Checkpoint 一体包` mode the separate model dropdowns are hidden, so the node stays clean -- **LoRA works in both modes** — the LoRA groups are applied after loading, regardless of mode -- The VAE comes from the checkpoint itself (same as the official simple loader) -- **Widget order — the model comes first**: `ckpt_name` → `unet_name` → `clip_name` → `vae_name` → - `clip_type` → `加载模式` → LoRA groups → buttons. In `Checkpoint 一体包` mode the checkpoint - dropdown is literally the top row -- Old workflows load correctly: saved widget values are re-mapped **by parameter name** on load, so - nothing gets scrambled. Missing values fall back to the default mode (separate components) - -**Inputs**: -- `ckpt_name` — checkpoint file from `models/checkpoints` (only in `Checkpoint 一体包` mode) -- `unet_name` — UNet model file -- `clip_name` — CLIP text encoder file -- `vae_name` — VAE model file -- `clip_type` — CLIP type (auto-detect from UNet, or manually select: SD, SD3, FLUX, FLUX2, `qwen_image`, etc.) - - Auto-detection recognises the Qwen-Image-2.1 UNet class (`QwenImage21`) and maps it to `qwen_image`. - ⚠️ This is mandatory for 2.1: only `CLIPType.QWEN_IMAGE` loads the dedicated text encoder (Qwen3-VL 8B) - that produces `image_slots`. Without it the generic Qwen3-VL encoder is used and **reference images are silently dropped**. - - Manual override available: select `qwen_image` explicitly (recommended if you suspect auto-detection failed) -- `+ Add LoRA` button — Click to add LoRA slots one by one (up to 10) -- `- Remove LoRA` button — Click to remove LoRA slots from the last group (up to 10) - -**LoRA Controls** (added via button, up to 10 groups): -- Select a LoRA file → one `Strength` slider appears automatically -- Select "none" → the slider hides -- All LoRAs are applied sequentially - -> **One strength slider, on purpose.** The CLIP side always follows the MODEL side, so the strength you set is exactly what takes effect. - -**LoRA status on the button** — after a run the loader reports back what it actually did, right on the -`+ Add LoRA` button, so you never have to guess: - -| Button text | Meaning | -|---|---| -| `· 224p` | the LoRA really was patched into the model — 224 patches (count produced by Python) | -| `· 192/224p` | 192 of this LoRA's 224 modules landed; the remaining 32 have no target layer in the base checkpoint. Typical for **repacked INT8 all-in-one checkpoints** (e.g. `img_mlp.gate_layer` was fused into `gate_up`), not a node bug | -| `· ⚠️未写入` | nothing was patched — wrong architecture / incompatible file | -| `· ⚠️N不匹配` | N LoRAs matched zero weights (wrong base model) | -| `· ⚠️N跳过` | N LoRAs were skipped (file missing) | -| `· ⚠️N个强度0` | N selected LoRAs have strength 0 — they do nothing | -| `· ⚠️CLIP不符` | the text encoder that got built doesn't match the model (split mode: wrong CLIP file / clip type) — conditioning is silently useless | - -The label is kept short on purpose (a long one would overflow a narrow node); hover the button to see -the full per-LoRA breakdown (module coverage, CLIP check result, per-slot patch counts). The label is -also cleared as soon as you add/remove/switch a LoRA, so a stale count from a previous run never lingers. -Note this reports whether the patch was **written**, not whether it is visible in the picture — -a quantized base, a reference-image-dominated edit, or a very subtle LoRA can all make the effect hard to see. - -**Outputs**: `MODEL`, `CLIP`, `VAE` - -**Global broadcast** (`全局广播` switch, built in — no extra plugin needed): - -Turn it **on** and the node's three outputs are automatically wired to every **empty** `MODEL` / `CLIP` / -`VAE` input in the graph when you press Run. No dragging cables through half the canvas. -Turn it **off** (default) and nothing changes — you wire everything yourself. - -- The real wires are made **only while the prompt is being built** and removed immediately afterwards, so - they never get saved into your workflow -- **While the switch is on, the canvas draws a violet preview curve** for every wire that will be created - at run time, with a small dot at both ends landing exactly on the output/input slots. The curves are pure - overlay — they create no real links, are not serializable, and disappear as soon as you switch it off -- **The curves pass behind the nodes**: they are drawn on the background layer, so they show up in the empty - space between nodes and are naturally hidden where they cross a node — titles and parameters stay readable - (on a very tightly packed graph you will see less of the line, which is the intended trade-off) -- **It only fills empty inputs.** Anything you connected by hand is left untouched — which is why - "auto" and "manual" can coexist in the same graph -- Covers `MODEL` / `CLIP` / `VAE` only (the node's three outputs) -- If more than one loader has the switch on, the first one wins for each type and a warning is logged -- **The switch lives at the top of the node**: directly **below** the `UNet / Checkpoint` pill, on its - left half (a small pill labelled `广播` / "broadcast") — click it to toggle. It no longer takes up a - full row at the bottom; the bottom now only holds the two LoRA buttons -- Its size matches the pill: **width = half of the pill**, **height identical to the pill** (14px, edges aligned) -- The switch state is stored in the node's `properties`, so it is **not** part of `widgets_values` — - old workflows keep every parameter in its original position, and the switch simply defaults to off -- Works alongside `cg-use-everywhere` (it does not touch that plugin's `ue_convert` flag) - -> **Limitation**: the broadcast happens on the front-end, so it applies when you press Run or export the -> API format from the UI. A raw `POST /prompt` with a hand-written API JSON never passes through the -> front-end, so no auto-wiring happens there — export the API format once and the JSON already has the links. - ---- - -#### SaveLoadImage — Save/Load Toggle - -Image save node with Save/Load mode toggle. -- **Save mode**: Save image to output directory, output IMAGE and MASK -- **Load mode**: Reuse the last saved image, skip saving -- Click 👁 icon in the title bar to toggle privacy mask (hide/show image preview) - -#### ToggleLoadImage — Load Image - -Custom image loading node, same functionality as built-in LoadImage, with privacy mask support. -- Click 👁 icon in the title bar to toggle privacy mask - -#### TogglePreviewImage — Preview Image - -Custom image preview node, saves to temp (not output), with privacy mask support. -- Click 👁 icon in the title bar to toggle privacy mask - -#### ToggleEmptyLatent — Toggle Empty Latent - -Toggleable empty Latent generation node. -- **ON**: Use width/height parameters -- **OFF**: Use fallback_width/fallback_height parameters (useful for A/B size comparison) - ---- - -#### DynamicRefIndependent — Multi-Reference Independent Encoding (Core Node) - -Each reference image is independently VAE-encoded, outputting separate CONDITIONING and LATENT pairs. Ideal for scenarios where multiple images control style/content independently. - -**Inputs** (dynamic, controlled by `num_images`): -- `clip` — CLIP model -- `vae` — VAE model -- `num_images` — Number of reference images (1~10) -- `instruction` — System prompt (leave empty for default) -- `image1` ~ `imageN` — Reference images -- `prompt1` ~ `promptN` — Per-image prompts (collapsible widgets inside node) - -**Model type**: `Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL` -- Selecting `Qwen Image 2.1` reveals its own parameter group (see [Qwen Image 2.1](#qwen-image-21-support)) -- Selecting `Qwen Layered` reveals `layers`; latent output is layered (`[1, 16, layers+1, h/8, w/8]`) -- Selecting `Flux2` / `SD / SDXL` only shows the classic `输出宽度/高度` (old behaviour, unchanged) - -**Outputs** (dynamic, N×2): -- `cond_1`, `latent1`, `cond_2`, `latent2`, ... `cond_N`, `latentN` - -**Usage**: -1. Drag in the node, default is 1 reference image -2. Adjust `num_images` to desired count (1~10), input/output slots auto-adjust -3. Connect each reference image and fill in corresponding prompts -4. Connect `cond_N` to sampler's conditioning, `latentN` to VAE Encode's latent - ---- - -#### DynamicRefImageEncode — Dynamic Reference Image Encoding - -Single prompt control, dynamically add/remove reference image input slots. - -**Inputs**: `clip`, `num_images`, `prompt`, `image1` ~ `imageN` -**Outputs**: `CONDITIONING`, `LATENT` (all images share the same conditioning, latents output separately) - -**Model type**: `Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL` -- `Qwen Layered`: Adds a `layers` parameter; latent output is a layered latent (`[1, 16, layers+1, h/8, w/8]`), directly connectable to Ksampler's latent input (replaces `EmptyQwenImageLayeredLatentImage`) -- `Qwen Image 2.1`: Adds its own parameter group for editing + resolution control (see below) -- Every model type only shows the parameters it actually uses — switching the dropdown hides the rest, so the node stays clean -- When `匹配原图尺寸` = ON, uses the actual image size; when OFF, uses the 2.1 resolution parameters (or `输出宽度/高度` for other models) - -#### DynamicRefLatentInput — Dynamic Latent Input - -Dynamically add/remove LATENT input slots, for use with DynamicRef series. - -#### ImageBatcher — Image Batcher - -Dynamically add/remove IMAGE input slots, batch multiple images together. - -#### ToggleImageCompare — 图片对比 - -Compare multiple "source" images against multiple "result" images by composing them into a single -side-by-side sheet, previewed right inside the node. - -**Inputs**: `num_sources`, `num_results`, `source1`~`source10`, `result1`~`result10` -- `num_sources` / `num_results` — how many slots to show for each group (1~10), adjusted independently, - so **N sources + 1 result** and **N sources + N results** are both supported -- `source1`~`source10` — the "before" / original images -- `result1`~`result10` — the "after" / generated images - -> In the node UI these are shown in Chinese: slots as `原图1`~`原图10` / `结果1`~`结果10`, -> counters as `原图数` / `结果数`, and the output as `对比图`. The English keys above are kept -> unchanged so existing workflows keep loading. - -**Parameters** -- `排版` (layout) — `自动` (auto) / `成对并排` (paired) / `上下两排` (stacked) / `自动网格` (grid) - - `自动` picks paired when the two groups have equal counts, otherwise stacked -- `标签` (labels) — burn `原1 / 结1 …` badges on each tile, or hide them - -**Outputs**: `comparison` — one composed IMAGE (feed it into `SaveLoadImage` or a preview node) - -Layout is decided by the images **actually connected**, not by how many slots you enabled, so you -never have to touch the settings when the counts change. Images of different sizes are scaled to a -common row height (aspect ratio preserved). - -#### OneImageMultiPrompt — One Image Multiple Prompts - -One reference image with multiple prompts, output separate conditionings (up to 8), sharing a single latent. - -**Inputs**: `clip`, `image`, `prompt数量`, `prompt1` ~ `prompt8` -- `prompt数量` — how many prompts to use (2~8); unused prompt boxes are hidden automatically -- `模型类型` — `Flux2` / `Qwen Image 2.1` / `SD / SDXL` / `Krea2`. Selecting `Qwen Image 2.1` adds the - full resolution parameter group, so one photo can be rendered from multiple viewpoints / edits at once. - -**Outputs**: `cond_1` ~ `cond_8`, `latent` - ---- - -#### ToggleSampler — All-in-one Sampler (采样器(一体)) - -Collapses the official four-node chain into a single node: - -``` -RandomNoise + CFGGuider + KSamplerSelect + (BasicScheduler | ManualSigmas) -> SamplerCustomAdvanced -``` - -**Inputs**: `模型` (MODEL), `正面条件` / `负面条件` (CONDITIONING), `Latent图像` (LATENT) -**Parameters**: `采样方案`, `采样器`, `调度器`, `步数`, `CFG`, `降噪`, `噪波随机种`, `自定义Sigma表` -**Outputs**: `Latent`, `降噪Latent` - -Model / conditioning / latent stay as **sockets on purpose** — the only thing that really differs -between models is the sigma curve, so switching models never needs a new node. `采样方案` comes in -three flavours: - -| Scheme | What it does | Which parameters matter | -|---|---|---| -| `自动(按步数 + 调度器)` | computes sigmas live — numerically identical to official `BasicScheduler` | `步数` + `调度器` | -| Preset tables: `Qwen-Image-2.1 turbo 8步`, `LTX-2 视频 8步(蒸馏)`, `LTX-2 视频 3步(低噪)` | fixed distillation trajectory | none — the step count is baked into the table | -| `自定义表` | hand-typed sigma list | `自定义Sigma表` | - -A sigma table must be comma separated, **strictly decreasing**, **end with 0**, and `N` values = `N-1` -steps (9 values = 8 steps). - -Parameters that a preset makes irrelevant are greyed out *and* locked: `步数` flips to the preset's real -value (still readable, just not editable), and switching back to `自动` restores your own step count. -`降噪` < 1.0 trims the tail of the table, so low-denoise refinement works with presets too. - -For distilled turbo models use `采样器` = `euler` and `CFG` = `1.0`. - ---- - - -### Qwen Image 2.1 Support - -`DynamicRefImageEncode`, `DynamicRefIndependent` and `OneImageMultiPrompt` all support **Qwen-Image-2.1** -image editing / multi-view generation. Select `Qwen Image 2.1` in `模型类型` and these parameters appear: - -| Parameter | Meaning | -|---|---| -| `宽高比` (Aspect ratio) | Preset ratios (1:1 / 3:2 / 16:9 / 21:9 ...), or `自定义(用输出宽度/高度)` | -| `百万像素` (Megapixels) | Total pixel budget, e.g. `1.0` ≈ 1024×1024, `2.6` ≈ 2016×1344. Range 0.1~16, **do not fill 1024 here** | -| `倍数` (Multiple) | Alignment step, fixed ≥ **32** (16 will break shapes) | -| `参考图分辨率` (Ref resolution) | How large the *reference* image is fed to the model (area target). `0` = keep original size | -| `尺寸适配` (Ref fit mode) | `参考图保比例` (default, no distortion) / `参考图裁剪` / `参考图拉伸` | - -Key rules learned from aligning with the official `TextEncodeQwenImage21`: - -- **Output size and reference size are independent.** `qwen_image` uses `default_ref_method = "index"`, - so the reference and the output live on separate RoPE planes and need not be the same shape. - Changing `参考图分辨率` does **not** change the output size. -- **Instructions must go into the prompt text, not the `instruction` field.** - `comfy/text_encoders/qwen_image21.py` drops the system turn, so anything written into `instruction` - is silently discarded for 2.1 — the node merges it into the user text automatically. - The default Flux-era English instruction is ignored (it would pollute the prompt). -- **The latent output is all-zero.** Feeding the reference image's real latent turns editing into img2img - (nothing changes). The real latent only goes into `reference_latents` in the conditioning. -- Images must be multiples of **32**; RGBA reference images are composited on white for the vision tower. - -Recommended setup for editing: `匹配原图尺寸` = **OFF**, `尺寸适配` = `参考图保比例`, -`百万像素` = 1.0, `倍数` = 32, `参考图分辨率` = 1024. - ---- - - -### Krea2 Support - -`ToggleUnifiedLoader`, `DynamicRefImageEncode`, `DynamicRefIndependent` and `OneImageMultiPrompt` -all support **Krea2**. The loader detects `Krea2` from the UNet automatically and picks -`CLIPType.KREA2` + the `Krea2TEModel` text encoder; the three encoding nodes just need -`模型类型` = `Krea2`. - -⚠️ **VAE must match the model.** This is the single most common failure — mixing them up does not -fail at load time, it fails deep inside `VAEDecode`: - -| Model | VAE file | latent | -|---|---|---| -| Qwen-Image **2.1** | `qwen_image_2.1_vae_bf16.safetensors` | 64 ch / 16x / RGBA | -| **Krea2** | `qwen_image_vae.safetensors` | 16 ch / 8x / RGB | - -A wrong VAE is silently padded by `fix_empty_latent_channels` (16 → 64), sampling still finishes, and -then decode dies with `IndexError: tuple index out of range` from the Wan 2.1 branch. -The loader now compares `latent_channels` / `latent_dimensions` at load time and prints the exact file -you should use instead. - -Key rules learned from aligning with the official `TextEncodeQwenImageEditPlus`: - -- **Reference latent size ≠ output size.** Reference images are VAE-encoded at ~1 MP (multiples of 8), - the vision tower gets a ~384 px thumbnail. -- **The VAE only takes RGB** — alpha is dropped, not composited. -- **Vision placeholders must be written by hand.** With an explicit `llama_template` the Qwen3-VL - tokenizer does *not* auto-insert them, so the node emits - `Picture N: <|vision_start|><|image_pad|><|vision_end|>`. Without it the reference image is - completely invisible to the model. -- **`reference_latents_method` is mandatory.** Krea2's `default_ref_method` is `None`, so references - are *silently ignored* unless the method is set; the node always sets `index_timestep_zero` - (same as the official style-reference template). -- **The latent output is all-zero** (16 ch / 8x) — same "editing, not img2img" rule as 2.1. -- **Sigma curve:** Krea2 turbo uses the `自动(按步数 + 调度器)` scheme in `采样器(一体)`. - The `Qwen-Image-2.1 turbo 8步` table is *not* interchangeable with it. - ---- - -### Canvas Menu Entry - -All Toggle-Pass nodes are also reachable from the canvas menu (same place as KJNodes / rgthree entries): - -``` -🔄 Toggle-Pass ▸ - ├ 采样器(一体) - ├ Image Batcher - ├ Multi Ref Latent Input - ├ One Image Multi Prompt - ├ Ref Image Encode - ├ Ref Independent - └ ... -``` - -- The list is **collected at runtime** — new nodes show up automatically, no code change needed -- Clicking an item spawns the node **at your pointer position** - ---- - -### Privacy Mask - -SaveLoadImage, ToggleLoadImage, and TogglePreviewImage support privacy mask: -- Title bar shows 👁 (show image) / 🫣 (hide image) icon -- Click icon to toggle privacy state; when hidden, image preview area is blank -- Privacy state is saved/restored with workflow, does not affect image generation - ---- - -### Example Workflows - -Ready-to-load graphs live in [`example_workflows/`](example_workflows/) — drag a `.json` onto the -canvas, or open it from the workflow menu. - -| File | What it demonstrates | Extra deps | -| --- | --- | --- | -| `All-in-One Demo.json` | Every Toggle-Pass node in one graph: `ToggleUnifiedLoader`, `ToggleSampler`, `ToggleLoadImage` ×2, `ToggleImageCompare`, `TogglePreviewImage`, `DynamicRefImageEncode`, `SaveLoadImage` + `VAEDecode`. **Best place to start** — needs no third-party nodes. | — | -| `Graphic-Text Integration Editing.json` | Text + single reference image editing through `DynamicRefImageEncode`, saved by `SaveLoadImage`. | — | -| `Batch Editing.json` | Six input images batched into one reference set for batch editing. | `RTXVideoSuperResolution` | -| `Lazy Person's Multi-angle View.json` | One image + `OneImageMultiPrompt` ("一图多视角") to generate several camera angles in one run. | `CR Upscale Image` | - -> The model filenames inside these graphs reflect the author's local setup. If a loader shows red -> after loading, point it at your own checkpoint / text encoder / VAE. - ---- - -### Notes - -- When `num_images` changes, input/output slots auto-adjust, **existing connections are not broken** -- Switching pages and back, nodes auto-restore to correct slot count -- Requires Qwen2.5-VL or compatible CLIP model; Qwen-Image-2.1 requires Qwen3-VL 8B + `qwen_image` clip type -- Default instruction is for Qwen-Image-Edit models, modify as needed -- Only parameters relevant to the selected `模型类型` are shown; the rest are hidden -- Illegal widget values (e.g. `倍数 = NaN`) fall back to safe defaults on load. **After upgrading, - restart ComfyUI and hard-refresh (Ctrl+F5) once**, then save your workflow -- ⚠️ Modern node design (Vue nodes) breaks `widget.hidden` and custom drawing — with it enabled every - parameter stays visible and the privacy icon disappears. Turn it off in ComfyUI settings. -- ⚠️ On quantized checkpoints (INT8/FP8) a LoRA still takes effect, but it comes out "blurrier": ComfyUI - dequantizes → patches → re-quantizes with stochastic rounding, so the delta keeps its magnitude - (~115%) while its direction picks up noise (cosine 0.4–0.7). Pose/structure LoRAs stay visible, - very subtle style LoRAs may not. This is upstream behavior — official `LoraLoader` is identical - (A/B with the same seed gave **pixel-identical** output, meanAbsDiff = 0.00) -- The loader reports how many patches each LoRA actually wrote **plus module coverage** - (`192/224p`) — see the button labels above. A missing fraction usually means the checkpoint was - repacked and those layers don't exist in it, not that the LoRA failed to load -- ⚠️ **CLIP check (split mode)**: after loading, the loader verifies the text-encoder class it actually - built (e.g. `QwenImage21TEModel_` vs a wrong `QwenImageTEModel_` / `Flux2TEModel_`). A mismatched CLIP - file still runs silently but makes the conditioning useless; the button then shows `⚠️CLIP不符` - and the log prints the expected class + what to do -- ⚠️ **VAE check (split mode)**: the loader also compares latent channels / dimensions against the model. - A mismatched VAE never fails at load time — it dies later inside `VAEDecode` - (`IndexError: tuple index out of range`), so the loader now warns immediately and names the file to use -- Hiding/collapsing a LoRA group **reclaims the node height**, so the node never stays as a long empty box -- **Selection box on canvas follows the mouse again**: ComfyUI 1.57.x clamps the drag-selection rectangle to - `.graph-canvas-panel`, which only covers the lower part of the canvas — dragging in the upper half pushed the - box's top edge down (and squashed its height to 0), so the box seemed to appear "somewhere else". - `js/selection_rect_fix.js` rewrites that box's position from the real mouse points. Disable it with - `localStorage.setItem("tp_selrect_fix", "off")` in the browser console + refresh -- Python changes require a **ComfyUI restart**; pure JS changes only need Ctrl+F5 - ---- - - -## 中文 - -Toggle-Pass 系列节点——开关控制、图片加载/保存/预览、隐私遮罩、多参考图动态编码、统一模型加载、一体化采样器。 - -### 节点说明 - -#### ToggleUnifiedLoader — 统一模型 + LoRA 加载器 - -一体化模型加载节点:UNet + CLIP + VAE + 多 LoRA 整合到一个节点中。 - -**加载模式**(`加载模式`)— 一个节点,两种加载方式: - -| 模式 | 作用 | 显示的参数 | -|---|---|---| -| `分离组件 (UNet+CLIP+VAE)`(默认) | UNet / CLIP / VAE 分别指定 | `unet_name`、`clip_name`、`vae_name`、`clip_type` | -| `Checkpoint 一体包` | 加载一体化 checkpoint(等同官方 **CheckpointLoaderSimple**):自动猜配置,UNet + CLIP + VAE 一次出齐 | 只显示 `ckpt_name` | - -- **加载模式做成了一个两段式开关 `UNet | Checkpoint`**(不再是下拉框):点左半是分离组件、点右半是一体包, - 当前档高亮。开关位于**节点顶部第一行,与输出插槽 `模型 / MODEL` 同一行**,左端与**下方所有下拉框的 - 左边缘对齐** -- 底层 `加载模式` 的值照常保存与序列化,**旧工作流与 API 调用完全不受影响** —— 开关只是接管了绘制与点击 -- 「现代节点设计」(Vue 节点渲染)下,开关会改为画在下拉框内部 -- 选 `Checkpoint 一体包` 时,分离的三个模型下拉会自动隐藏,界面不眼花 -- **两种模式都能加 LoRA** —— LoRA 组在加载完成后统一应用 -- VAE 用一体包自带的(与官方简易版一致) -- **参数顺序:模型在最前** —— `ckpt_name` → `unet_name` → `clip_name` → `vae_name` → `clip_type` - → `加载模式` → LoRA 组 → 按钮。一体包模式下第一行就是 checkpoint 下拉框 -- 旧工作流能正常加载:加载时会按**参数名**把保存的值对回去,不会串位 -- 缺失的值仍然回退到默认模式(分离组件) - -**输入**: -- `ckpt_name` — `models/checkpoints` 里的 checkpoint 文件(只在「Checkpoint 一体包」模式下显示) -- `unet_name` — UNet 模型文件 -- `clip_name` — CLIP 文本编码器文件 -- `vae_name` — VAE 模型文件 -- `clip_type` — CLIP 类型(支持 auto 从 UNet 自动检测,也可手动选择:SD、SD3、FLUX、FLUX2、`qwen_image` 等) - - 自动检测能识别 Qwen-Image-2.1 的 UNet 类名(`QwenImage21`)并映射到 `qwen_image` - - ⚠️ **这是 2.1 的必备条件**:只有 `CLIPType.QWEN_IMAGE` 才能加载 2.1 专用文本编码器(Qwen3-VL 8B), - 它会生成 `image_slots`;否则会退回通用 Qwen3-VL 编码器,**参考图被静默丢弃** - - 也支持手动指定:怀疑自动检测没生效时直接选 `qwen_image` -- `+ 添加 LoRA` 按钮 — 点击逐个添加 LoRA 槽位(最多 10 组) -- `- 移除 LoRA` 按钮 — 点击从最后一组开始移除(最多 10 组) - -**LoRA 控件**(通过按钮添加,最多 10 组): -- 选择 LoRA 文件 → 自动展开**一个**「强度」滑块 -- 选择 "none" → 自动隐藏滑块 -- 多个 LoRA 按顺序依次应用 - -> **只有一个强度滑块是有意为之**:CLIP 侧**始终跟随 MODEL 侧**,保证「看到的强度 = 实际生效强度」。 - -**跑完之后按钮上直接告诉你 LoRA 到底写没写进去**(后端回传,不用再猜): - -| 按钮文案 | 含义 | -|---|---| -| `· 224p` | LoRA **确实写进了模型**,共 224 个 patch(数字是 Python 侧统计的真实值) | -| `· 192/224p` | 这份 LoRA 的 224 个模块里只落下 192 个,剩下 32 个在当前底座上**没有对应层**。典型于**被 repack 过的 INT8 一体包**(如 `img_mlp.gate_layer` 被融进 `gate_up`),不是节点的问题 | -| `· ⚠️未写入` | 一个 patch 都没挂上 —— 架构不匹配 / 文件不对 | -| `· ⚠️N不匹配` | N 个 LoRA 的键名跟底座完全对不上(拿错底座的 LoRA) | -| `· ⚠️N跳过` | N 个 LoRA 被跳过(文件找不到) | -| `· ⚠️N个强度0` | 有 N 个已选 LoRA 强度是 0 —— 等于没加 | -| `· ⚠️CLIP不符` | 建出的文本编码器与模型不配套(分体模式下换错 CLIP 文件 / 选错 clip 类型)—— 提示词会被错误编码,跑得通但什么都不生效 | - -按钮文案故意写得很短(太长会溢出窄节点),鼠标悬停在按钮上能看到**每个 LoRA 的完整明细** -(模块覆盖率、CLIP 校验结果、每个槽位实际写入的 patch 数); -另外只要增删/切换 LoRA,上一次运行的数字会立刻清掉,不会留一个过期读数误导你。 -注意它反映的是「patch 有没有写进去」,不等于「画面上一定看得出来」——量化底座、参考图主导的编辑、过于细微的 LoRA,都会让效果不明显。 - -**输出**:`MODEL`、`CLIP`、`VAE` - -**全局广播**(节点自带开关,不需要装任何额外插件): - -打开后,点「运行」时会把这三个输出**自动接到图里所有空着的** `MODEL` / `CLIP` / `VAE` 输入上, -不用再横跨半张画布拉线。关掉(默认)就完全保持原样,自己连线。 - -- 这些线**只在提交的那一刻真实存在**,提交完立刻拆掉 —— 不会被存进工作流 -- **开关打开时,画布上会用紫色曲线画出「运行时会自动接上的每一条线」**,起点/终点各有一个小圆点, - 精确落在输出口和输入口上。曲线只是视觉预览:不创建真实连线、不参与序列化,关掉开关立刻消失 -- **曲线从节点背后穿过**:画在节点下层,节点之间的空白处正常显示,穿过节点的地方被节点自然遮住, - 所以永远不会盖住节点标题和参数(节点排得密时可见部分会少一些,这是刻意的取舍) -- **只补空位**:凡是已经手连的输入一律不动,所以「自动」和「手动」可以在同一张图里混用 -- 只覆盖 `MODEL` / `CLIP` / `VAE`(也就是本节点的三个输出) -- 如果图里有多个加载器都开了广播,同一类型只取第一个,并在控制台给出提示 -- **开关在节点顶部**:就在 `加载模式` 那个 `UNet / Checkpoint` 胶囊的**正下方、左半边**(一个小胶囊, - 左边写「广播」)—— 点一下切换。它不再占用节点底部一整行,底部只剩 LoRA 那两个按钮 -- 开关状态存在节点的 `properties` 里,**不占 `widgets_values`** —— 旧工作流的每一项参数位置都不变, - 开关默认关闭 -- 与 `cg-use-everywhere` 共存,不碰它那套 `ue_convert` 标记 - -> **限制**:广播发生在前端,所以「界面里点运行」和「从界面导出 API 格式」都算数; -> 但直接 `POST /prompt` 提交手写的 API JSON 不经过前端,就不会自动接线 —— -> 需要的话在界面里导出一次 API 格式,导出的 JSON 里线已经带好了。 - ---- - -#### SaveLoadImage — 保存/加载切换 - -图片保存节点,支持 Save/Load 模式切换。 -- **Save 模式**:保存图片到 output 目录,同时输出 IMAGE 和 MASK -- **Load 模式**:直接复用上次保存的图片,跳过保存流程 -- 点击标题栏 👁 图标可切换隐私遮罩(隐藏/显示图片预览) - -#### ToggleLoadImage — 加载图片 - -自定义加载图像节点,和原生 LoadImage 功能一致,额外支持隐私遮罩。 -- 点击标题栏 👁 图标可切换隐私遮罩(隐藏/显示图片预览) - -#### TogglePreviewImage — 预览图片 - -自定义预览图像节点,不保存到 output 目录(保存到 temp),支持隐私遮罩。 -- 点击标题栏 👁 图标可切换隐私遮罩(隐藏/显示图片预览) - -#### ToggleEmptyLatent — 开关空 Latent - -可切换的空 Latent 生成节点。 -- **ON**:使用 width/height 参数生成 -- **OFF**:使用 fallback_width/fallback_height 参数(可用于 A/B 尺寸对比) - ---- - -#### DynamicRefIndependent — 多参考图独立编码(核心节点) - -每张参考图独立 VAE 编码,输出各自独立的 CONDITIONING 和 LATENT,适合多图各自控制风格/内容的场景。 - -**输入**(动态,由 `num_images` 控制): -- `clip` — CLIP 模型 -- `vae` — VAE 模型 -- `num_images` — 参考图数量(1~10) -- `instruction` — 系统提示词(可留空使用默认) -- `image1` ~ `imageN` — 参考图 -- `prompt1` ~ `promptN` — 每张图对应的提示词(控件在节点内,可折叠) - -**模型类型**:`Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL` -- 选择 `Qwen Image 2.1` 会展开 2.1 专属参数组(见 [Qwen Image 2.1 支持](#qwen-image-21-支持)) -- 选择 `Qwen Layered` 会展开「图层数」 -- 每种模型只显示自己用得上的参数,其余自动隐藏,界面不会眼花 - -**输出**(动态,N×2 个): -- `cond_1`, `latent1`, `cond_2`, `latent2`, ... `cond_N`, `latentN` - -**用法**: -1. 拖入节点,默认 1 张参考图 -2. 调整 `num_images` 到需要的数量(1~10),输入槽和输出槽自动增减 -3. 每张图连接自己的参考图,填写对应 prompt -4. `cond_N` 连到 sampler 的 conditioning,`latentN` 连到 VAE Encode 的 latent(供参考图编码使用) - ---- - -#### DynamicRefImageEncode — 动态参考图编码 - -单张 prompt 控制,动态增删参考图输入槽。 - -**输入**:`clip`, `num_images`, `prompt`, `image1` ~ `imageN` -**输出**:`CONDITIONING`, `LATENT`(所有图共享同一份 conditioning,分别输出 latent) - -**模型类型**:`Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL` -- `Qwen Layered`:增加「图层数」参数;输出的 latent 为分层格式(`[1, 16, layers+1, h/8, w/8]`),可直接接到 K采样器的 latent 输入(省掉 `EmptyQwenImageLayeredLatentImage` 节点) -- `Qwen Image 2.1`:增加 2.1 专属的分辨率参数组(详见下方小节) -- 每个模型类型只显示自己需要的参数,切换下拉框即自动隐藏其余的 -- 「匹配原图尺寸」= ON 时,使用图片实际尺寸;= OFF 时,2.1 走分辨率参数组,其他模型仍用「输出宽度/高度」(旧行为不变) - -#### DynamicRefLatentInput — 动态 Latent 输入 - -动态增删 LATENT 输入槽,配合 DynamicRef 系列使用。 - -#### ImageBatcher — 图像批处理 - -动态增删 IMAGE 输入槽,将多张图打包成批次。 - -#### ToggleImageCompare — 图片对比 - -把多张「原图」与多张「结果」拼成一张对比图,节点内直接预览。 - -**输入**:`num_sources`、`num_results`、`source1`~`source10`、`result1`~`result10` -- `num_sources` / `num_results` — 每组显示几个槽(1~10),两组各自独立, - 所以 **N 张原图 + 1 张结果** 和 **N 张原图 + N 张结果** 都支持 -- `source1`~`source10` — 原图(before) -- `result1`~`result10` — 结果(after) - -> 节点上显示为 `原图1`~`原图10` / `结果1`~`结果10`、`原图数` / `结果数`、输出 `对比图`; -> 上面这些英文 key 保持不变,为了兼容已保存的工作流。 - -**参数** -- `排版` — `自动` / `成对并排` / `上下两排` / `自动网格` - - `自动`:两组数量相等时用「成对并排」,不等时用「上下两排」 -- `标签` — 在每张图上烧 `原1 / 结1 …` 角标,或隐藏 - -**输出**:`comparison` —— 一张合成图(可直接接 `SaveLoadImage` 或预览节点) - -排版按**实际接上的图**算,而不是你开了几个槽,所以数量变了也不用改设置。尺寸不一样的图会 -按行统一高度缩放(保持宽高比)。 - -#### OneImageMultiPrompt — 单图多提示词(一图多视角) - -一张参考图对应多个提示词,分别输出各自的 conditioning(最多 8 组),共享同一个 latent。 - -**输入**:`clip`、`image`、`prompt数量`、`prompt1` ~ `prompt8` -- `prompt数量` — 用几个提示词(2~8),多余的 prompt 框会自动隐藏 -- `模型类型` — `Flux2` / `Qwen Image 2.1` / `SD / SDXL` / `Krea2`。选 `Qwen Image 2.1` 会展开完整的分辨率参数组, - 适合「一张图出多个视角 / 多种编辑」。 - -**输出**:`cond_1` ~ `cond_8`、`latent` - ---- - -#### ToggleSampler — 采样器(一体) - -把官方四件套收进一个节点: - -``` -随机噪波 + CFG引导器 + K采样器选择 + (基础调度器 | 手动Sigmas) -> SamplerCustomAdvanced -``` - -**输入**:`模型`(MODEL)、`正面条件` / `负面条件`(CONDITIONING)、`Latent图像`(LATENT) -**参数**:`采样方案`、`采样器`、`调度器`、`步数`、`CFG`、`降噪`、`噪波随机种`、`自定义Sigma表` -**输出**:`Latent`、`降噪Latent` - -模型 / 条件 / Latent **故意保留成插槽**——真正随模型变的只有 sigma 曲线,所以换模型不用换节点。 -`采样方案` 分三类: - -| 方案 | 作用 | 生效参数 | -|---|---|---| -| `自动(按步数 + 调度器)` | 现场算 sigma,与官方 `BasicScheduler` 数值完全一致 | `步数` + `调度器` | -| 预置表:`Qwen-Image-2.1 turbo 8步`、`LTX-2 视频 8步(蒸馏)`、`LTX-2 视频 3步(低噪)` | 蒸馏模型专用的固定轨迹 | 无——步数已写进表里 | -| `自定义表` | 手填一串 sigma | `自定义Sigma表` | - -sigma 表规则:逗号分隔、**严格递减**、**末值必须是 0**、`N` 个点 = `N-1` 步(9 个点 = 8 步)。 - -选了预置表之后失效的参数会自动变灰**并锁住**:`步数` 会跳到该表真实的步数(看得见但改不动), -切回 `自动` 会还回你自己设的步数。`降噪` < 1.0 会裁掉表的尾部,所以预置表也能做低降噪细化。 - -蒸馏 turbo 模型推荐 `采样器` = `euler`、`CFG` = `1.0`。 - ---- - - -### Qwen Image 2.1 支持 - -`DynamicRefImageEncode`(Ref Image Encode)、`DynamicRefIndependent`(Ref Independent)、 -`OneImageMultiPrompt`(一图多视角)均已支持 **Qwen-Image-2.1** 图像编辑 / 多视角生成。 -把「模型类型」选成 `Qwen Image 2.1`,会展开下面这组参数: - -| 参数 | 含义 | -|---|---| -| `宽高比` | 预设比例(1:1 / 3:2 / 16:9 / 21:9 …),或 `自定义(用输出宽度/高度)` | -| `百万像素` | 总像素预算:`1.0` ≈ 1024×1024,`2.6` ≈ 2016×1344。范围 0.1~16,**别在这里填 1024** | -| `倍数` | 对齐步长,硬下限 **32**(填 16 会算出非法形状,例如 5024×3344) | -| `参考图分辨率` | 参考图喂给模型前被缩到多大(面积基准);`0` = 保持原尺寸 | -| `尺寸适配` | `参考图保比例`(默认,不变形)/ `参考图裁剪` / `参考图拉伸` | - -对齐官方 `TextEncodeQwenImage21` 时总结出的几条关键规则: - -- **出图尺寸和参考图尺寸互不影响。** `qwen_image` 用的是 `default_ref_method = "index"`, - 参考图和输出各占独立的位置平面,不需要同形。改「参考图分辨率」**不会**让出图变大变小。 -- **指令要写进提示词文本,不能写在 `instruction` 里。** - `comfy/text_encoders/qwen_image21.py` 会丢弃 system 段,写进 `instruction` 的内容在 2.1 下会被静默丢弃; - 节点已自动把它并进 user 段(Flux 时代那句默认英文 instruction 会被忽略,免得污染提示词)。 -- **latent 输出是全零。** 如果把参考图的真实 latent 当采样起点,编辑就会退化成 img2img(内容完全不变); - 真实 latent 只进 conditioning 的 `reference_latents`。 -- 图片必须是 **32 的倍数**;带 alpha 的参考图会先合成到白底再送进视觉塔。 - -推荐设置(2.1 图像编辑):`匹配原图尺寸` = **OFF**、`尺寸适配` = `参考图保比例`、 -`百万像素` = 1.0、`倍数` = 32、`参考图分辨率` = 1024。 - ---- - - -### Krea2 支持 - -`ToggleUnifiedLoader`(统一加载器)、`DynamicRefImageEncode`(Ref Image Encode)、 -`DynamicRefIndependent`(Ref Independent)、`OneImageMultiPrompt`(一图多视角)均已支持 **Krea2**。 -加载器会从 UNet 自动认出 `Krea2`,直接配 `CLIPType.KREA2` + `Krea2TEModel` 文本编码器; -三个编码节点只要把「模型类型」选成 `Krea2` 即可。 - -⚠️ **VAE 必须和模型配套。** 这是最常见的翻车点——配错不会在加载时报错,而是在 `VAEDecode` 深处炸: - -| 模型 | VAE 文件 | latent | -|---|---|---| -| Qwen-Image **2.1** | `qwen_image_2.1_vae_bf16.safetensors` | 64 通道 / 16x / RGBA | -| **Krea2** | `qwen_image_vae.safetensors` | 16 通道 / 8x / RGB | - -配错时 `fix_empty_latent_channels` 会静默把 16 通道补成 64,采样照样跑完, -然后解码落进 Wan 2.1 分支报 `IndexError: tuple index out of range`。 -现在加载器会在加载时比对 `latent_channels` / `latent_dimensions`,直接把该换哪个文件打到日志里。 - -对齐官方 `TextEncodeQwenImageEditPlus` 后总结的几条规则: - -- **参考图尺寸和出图尺寸无关。** 参考图按约 1 MP(对齐 8 倍数)编码进 VAE, - 视觉塔只吃约 384 px 的缩略图。 -- **VAE 只吃 RGB** —— alpha 是丢掉,不是合成。 -- **视觉占位符必须手写。** 传了显式 `llama_template` 时 Qwen3-VL 的 tokenizer **不会**自动插占位符, - 节点会自己拼 `Picture N: <|vision_start|><|image_pad|><|vision_end|>`; - 漏了就相当于参考图对模型完全不可见。 -- **`reference_latents_method` 必须显式给。** Krea2 的 `default_ref_method` 是 `None`, - 不设方法时参考图会被**静默忽略**(不报错,只是没效果);节点固定设为 `index_timestep_zero` - (与官方风格参考模板一致)。 -- **latent 输出是全零**(16 通道 / 8x)——和 2.1 一样是「编辑而不是 img2img」。 -- **sigma 曲线:** Krea2 turbo 在 `采样器(一体)` 里用 `自动(按步数 + 调度器)` 方案, - `Qwen-Image-2.1 turbo 8步` 那张表不能套过来用。 - ---- - -### 画布菜单入口 - -本插件全部节点也能从画布菜单里直接添加(和 KJNodes / rgthree 的入口在同一处): - -``` -🔄 Toggle-Pass ▸ - ├ 采样器(一体) - ├ Image Batcher - ├ Multi Ref Latent Input - ├ One Image Multi Prompt - ├ Ref Image Encode - ├ Ref Independent - └ ... -``` - -- 列表是**运行时自动收集**的,以后新增节点自动出现,不用改代码 -- 点击任意一项,节点落在**鼠标所在位置** - ---- - -### 隐私遮罩功能 - -SaveLoadImage、ToggleLoadImage、TogglePreviewImage 三个节点均支持隐私遮罩: -- 标题栏右侧显示 👁(显示图片)/ 🫣(隐藏图片)图标 -- 点击图标切换隐私状态,隐藏时图片预览区域留空 -- 隐私状态随工作流自动保存/恢复,不影响生图流程 - ---- - -### 示例工作流 - -现成的图都在 [`example_workflows/`](example_workflows/) 里,把 `.json` 拖到画布上就能打开。 - -| 文件 | 演示什么 | 额外依赖 | -| --- | --- | --- | -| `All-in-One Demo.json` | 一个图里放齐本插件全部节点:`ToggleUnifiedLoader`、`ToggleSampler`、`ToggleLoadImage` ×2、`ToggleImageCompare`、`TogglePreviewImage`、`DynamicRefImageEncode`、`SaveLoadImage` + `VAEDecode`。**想快速上手就从这张开始** —— 不需要任何第三方节点。 | 无 | -| `Graphic-Text Integration Editing.json` | 单张参考图的「文字 + 参考图」编辑,用 `DynamicRefImageEncode` 编码、`SaveLoadImage` 保存。 | 无 | -| `Batch Editing.json` | 六张输入图经批处理组成一组参考图,做批量编辑。 | `RTXVideoSuperResolution` | -| `Lazy Person's Multi-angle View.json` | 一张图 + `OneImageMultiPrompt`(一图多视角),一次生成多个机位。 | `CR Upscale Image` | - -> 这些图里的模型文件名是作者本机的配置。加载后如果有加载器变红,在对应节点里改成你自己的 -> checkpoint / 文本编码器 / VAE 即可。 - ---- - -### 注意事项 - -- `num_images` 调整时,输入/输出槽会自动增减,**已有连线不会被断开** -- 切换页面再回来,节点会自动恢复到正确的槽位数量 -- 需要 Qwen2.5-VL 或兼容的 CLIP 模型;用 Qwen-Image-2.1 时需要 Qwen3-VL 8B + `qwen_image` 类型的 clip -- 默认 instruction 适用于 Qwen-Image-Edit 类模型,可按需修改(2.1 下会自动并进提示词文本) -- 界面只显示当前「模型类型」用得上的参数,其余自动隐藏 -- 非法的参数值(如 `倍数 = NaN`、`百万像素 = 1024`)在加载时会自动回退到安全默认值。 - **升级后请重启 ComfyUI + 强刷一次(Ctrl+F5)**,然后保存工作流即可固化 -- ⚠️ 「现代节点设计(Vue 节点)」会导致 `widget.hidden` 与自定义绘制失效 —— 开启后所有参数都会展开、 - 隐私开关图标也会消失。请在 ComfyUI 设置里关掉它 -- ⚠️ 量化底座(INT8/FP8)上 LoRA **依然生效,只是更"糊"**:ComfyUI 走「反量化 → 叠加 patch → - 再量化回 int8」,但用的是**随机舍入 + 重算 scale**,增量幅度能保留约 113%~120%,代价是方向带噪声 - (余弦 0.4~0.7)。姿态/结构类 LoRA 看得出来,特别细微的风格类可能看不出来。 - 这是上游行为,官方 `LoraLoader` 一模一样(同 seed A/B 实测:本节点与 - `CheckpointLoaderSimple + LoraLoader` 输出逐像素完全一致,meanAbsDiff = 0.00) -- 加载器会把每个 LoRA 实际写入了多少 patch **以及模块覆盖率**(`192/224p`)回传到按钮上 - (见上面那张表)。覆盖率不满一般是底座被 repack、那几层不存在,而不是 LoRA 没加载 -- ⚠️ **分体模式的 CLIP 校验**:加载完 CLIP 后会比对实际建出的文本编码器类名与模型是否配套 - (正确类名如 `QwenImage21TEModel_` / `QwenImageTEModel_` / `Flux2TEModel_`,日志会打印)。 - 不配套时按钮显示 `⚠️CLIP不符`,日志会给出预期类名和处理建议 —— - 否则这种情况会「跑得通但什么都不生效」,极难自查 -- ⚠️ **分体模式的 VAE 校验**:加载器还会比对 latent 通道数 / 维度与模型是否配套。 - 配错的 VAE 在加载时不报错,一路跑到 `VAEDecode` 才炸(`IndexError: tuple index out of range`), - 所以现在加载时就直接提示,并告诉该换哪个 VAE 文件 -- 隐藏/收起 LoRA 组后会自动**回收节点高度**,节点不会留成一大条空框 -- **画布拖框现在会跟着鼠标走**:ComfyUI 1.57.x 会把拖拽选择框裁剪到 `.graph-canvas-panel` - (实测这个容器只覆盖画布中下部),在画布上半部分拖框时框的顶边被强行下压、高度被压成 0, - 表现就是「鼠标在左上角拉、框却出现在中间/下面」。`js/selection_rect_fix.js` 按真实鼠标点 - 重写框的位置,只改显示、不动画布状态。要关掉:浏览器控制台执行 - `localStorage.setItem("tp_selrect_fix", "off")` 后刷新 -- Python 改动需要**重启 ComfyUI**,纯 JS 改动只需 Ctrl+F5 - ---- - -## 更新日志 / Changelog - -> 按时间记录**新增 / 变更的功能**,以及怎么用。 - -### 2026-10-25 - -- **新增示例工作流 `example_workflows/All-in-One Demo.json`**:一个图里放齐本插件全部交互节点 - (`ToggleUnifiedLoader` / `ToggleSampler` / `ToggleLoadImage` ×2 / `ToggleImageCompare` / - `TogglePreviewImage` / `DynamicRefImageEncode` / `SaveLoadImage` + `VAEDecode`), - **不依赖任何第三方节点**,拖进画布即可跑通;原 `Toggle-Pass-Test.json` 已改名为它 -- **README 新增「示例工作流」小节**(中英双语):列出 `example_workflows/` 里 4 个示例分别演示什么、 - 各自需要哪些额外依赖 —— 此前 README 对示例目录零引用,用户不知道这些文件存在 - -### 2026-10-24 - -- **「全局广播」开关搬到节点顶部**:从 widget 列表末尾那整行,移到 `加载模式` 的 `UNet / Checkpoint` - 胶囊**正下方、左半边**,缩成一个小胶囊(左写「广播」,右侧是开关轨道) - - 尺寸与胶囊对齐:**宽度 = 胶囊的一半**,**高度与胶囊完全相同**(都是 14px,上下边沿齐平) - - 外观与节点其它控件同语言:淡色托底 + 细轨道 + 白滑块,开启时转高亮蓝(和 `UNet` 选中态呼应), - 鼠标悬停时托底提亮并浮出一道细描边 - - 改法是「原生 toggle 保留但隐藏 + 自绘」:widget 对象、名字、`properties` 存储、`serialize:false` - 全部原样不动 —— `widgets_values` 一项都不动,旧工作流零影响 - - 顺带节点底部少了一整行,只剩「添加 / 移除 LoRA」两个按钮 - - 纯前端改动,**不用重启 ComfyUI**,`Ctrl+F5` 即可 -- **修复画布拖框「框不在鼠标那里」**:ComfyUI 1.57.x 会把选择框裁剪到 `.graph-canvas-panel` - (实测该容器只覆盖画布中下部 `[64,488,...]`),在画布上半部分拖框时框的顶边被强行压到 488、 - 高度被压成 0,看起来像「鼠标在左上角拉、框跑到中间」。新增 `js/selection_rect_fix.js` - 按真实鼠标点重写框的位置,纯显示层修正,不改画布状态 - - 关闭方法:控制台 `localStorage.setItem("tp_selrect_fix", "off")` 后刷新 -- **预览曲线改为从节点背后穿过**:曲线画在背景层(节点下层),节点之间的空白处正常显示, - 穿过节点的地方被节点自然遮住 —— 不会再盖住节点标题和参数。节点排得密时可见部分会少一些,属正常 - -### 2026-10-23 - -- **新增 `ToggleUnifiedLoader` 的「全局广播」开关**(节点自带,不依赖 `cg-use-everywhere`) - - 打开后点「运行」自动把 `MODEL` / `CLIP` / `VAE` 接到图里所有**空着的**同类型输入上, - 提交完立刻拆线,不会被存进工作流 - - 开关打开期间,画布上用**紫色曲线**画出「运行时会自动接上的线」,两端带小圆点, - 方便一眼核对接去哪(曲线只是预览,不建真实连线、不参与保存) - - 曲线从节点**背后**穿过(画在节点下层):空白处可见,节点上一根线都不落 —— 不挡标题和参数 - - 只补空位,手连的一根都不动;关掉就是完全手动 - - 开关状态存在节点 `properties` 里,**不占 `widgets_values`**,旧工作流参数位置一项不变 - - 与 `cg-use-everywhere` 共存(不动它的 `ue_convert`) - - 纯前端改动,**不用重启 ComfyUI**,`Ctrl+F5` 即可 -- **`采样器(一体)` 初始宽度改为 300**(高度不变),「自动(按步数 + 调度器)」这类长值不再被截断 - -### 2026-10-21 - -- **新增 `采样器(一体)`(`ToggleSampler`)** —— 把官方「随机噪波 + CFG引导器 + K采样器选择 + - 基础调度器/手动Sigmas → SamplerCustomAdvanced」四件套收进一个节点。 - - 模型 / 条件 / Latent 仍是插槽,换模型不用换节点 - - `采样方案` 三档:`自动`(= 官方 BasicScheduler,数值等价)、预置表(Qwen-Image-2.1 turbo 8步、 - LTX-2 视频 8步/3步)、`自定义表`(手填 sigma,接新模型不用改代码) - - 选预置表时 `步数` / `调度器` 会变灰并锁住,`步数` 显示该表真实步数;切回 `自动` 自动还原你原来设的步数 - - sigma 表规则:逗号分隔、严格递减、末值必须是 0、N 个点 = N-1 步 -- **新增 Krea2 支持** —— `ToggleUnifiedLoader`、`DynamicRefImageEncode`、`DynamicRefIndependent`、 - `OneImageMultiPrompt` 全都能跑 Krea2 - - 加载器从 UNet 自动识别 `Krea2` → `CLIPType.KREA2` + `Krea2TEModel`,无需手选 clip 类型 - - 三个编码节点的「模型类型」新增 `Krea2`:参考图按约 1 MP 编码、VAE 只吃 RGB、 - 自动补视觉占位符、自动设 `reference_latents_method = index_timestep_zero`、输出全零 16 通道 latent -- **加载器改进** - - CLIP 类型改为**由模型类推导**,不再二次读取 UNet 去猜(省一次 6.9 GB 读取,也不会再静默失败) - - 新增 **VAE 匹配检查**:加载时比对 latent 通道 / 维度,配错直接提示该换哪个 VAE 文件 - (否则会在 `VAEDecode` 报 `IndexError: tuple index out of range`,很难自查) - -### 2026-10-10 - -- **新增 `ToggleImageCompare` 图片对比节点** —— 把多张原图与多张结果拼成一张对比图,节点内直接预览。 - 两组动态输入(原图 `source1~10`、结果 `result1~10`)各自独立增减,**N 原图 + 1 结果** 与 - **N 原图 + N 结果** 都支持;排版 `自动` 会按数量自动在「成对并排」和「上下两排」之间选, - 另有「自动网格」;可给每张图烧 `原1 / 结1` 角标。 - - **怎么用**:把原图接到 `source*`、结果接到 `result*`,输出直接给 `SaveLoadImage` 或预览节点; - 排版按**实际接上的图**算,数量变了不用改设置。 -- **加载模式开关(外观与交互定型)** —— `ToggleUnifiedLoader` 的 `加载模式` 在下拉框基础上改成 - **两段式开关 `UNet | Checkpoint`**:点左半 = 分离组件、点右半 = 一体包,当前档用蓝色滑块高亮, - 另一半悬停时有淡色反馈。 - 位置在**节点顶部第一行,与输出插槽 `模型 / MODEL` 同一行**;左端与下方所有下拉框的左边缘对齐, - 宽度固定、两档同宽(切档不跳动),右侧给插槽文字留出安全距离。 - - **怎么用**:直接点开关左半 / 右半切换,不再弹出下拉菜单;当前档一眼可见。 - - 底层 `加载模式` 参数照常保存与序列化,**旧工作流与 API 调用零影响** —— 开关只接管绘制与点击, - 没有新增或删除任何参数。 -- **开关交互修复**:① 点击分界与绘制统一为同一套几何(此前节点较宽时点中段会切错档、点开关右侧空白会误切); - ② 挂在节点上的绘制 / 点击钩子改为**链式调用**,不再覆盖别的插件挂的同名钩子; - ③ 鼠标移出开关后悬停高亮不再残留。 - -### 2026-10-09 - -- **加载模式开关上线**:`UNet`(分离组件)/ `Checkpoint`(一体包)两段切换,替代原来的下拉框。 -- **模型参数置顶**:`ckpt_name` / `unet_name` / `clip_name` / `vae_name` / `clip_type` 排到参数列表最前, - 一体包模式下一眼就能看到 checkpoint 行。旧工作流加载时**按参数名自动迁移**,不受顺序变化影响。 -- **LoRA 状态提示**:按钮回传每个 LoRA 实际写入的 patch 数与模块覆盖率(如 `192/224p`); - 分体模式下还会比对 CLIP 实例类名与模型是否配套,不匹配时显示 `⚠️CLIP不符`。 - -### 2026-10-08 - -- **一体包加载模式**:`ToggleUnifiedLoader` 融合 Checkpoint 加载器,新增 `加载模式` 参数 —— - `分离组件 (UNet+CLIP+VAE)`(默认)/ `Checkpoint 一体包`,两种模式都能挂 LoRA。 -- **LoRA 强度合并为一个滑块**:`model` 与 `clip` 两个强度合并显示,CLIP 侧自动跟随 MODEL 侧 —— - 界面上看到的强度就是实际生效的强度。 -- **LoRA 诊断**:按钮显示已启用的 LoRA 数量与「强度为 0」告警;控制台打印每个 LoRA 最终挂上了多少 patch。 -- 修复:LoRA 组全部移除后节点自动**回收高度**(不再留一大条空框);「- 移除 LoRA」不再把强度清成 0。 - -### 2026-10-03 - -- 修复画布菜单新建节点的落点:改为**鼠标所在位置**(原来是画布可视中心)。 - -### 2026-09-25 - -- **画布菜单入口**「🔄 Toggle-Pass」:在画布右键菜单里即可添加本插件的节点,节点列表运行时自动收集。 - - **怎么用**:画布空白处右键 → 菜单里选 `🔄 Toggle-Pass`。 -- `OneImageMultiPrompt` 支持 **Qwen Image 2.1**;`prompt数量` 自动收起多余的 prompt 输入框。 - -### 2026-09-24 - -- `DynamicRefImageEncode` / `DynamicRefIndependent` 支持 **Qwen Image 2.1**。 -- **分辨率控制**:新增 `宽高比` + `百万像素` + `倍数`,以及 `参考图分辨率`、`尺寸适配`。 -- 修复 CLIP 类型检测(此前 Qwen Image 2.1 的专用文本编码器无法加载,参考图会被静默丢弃)。 -- 界面按「模型类型」自动显隐参数;旧工作流的错位脏值自动归位;`倍数` 下限由 16 提到 32。 - -### 2026-05-12 - -- `DynamicRefImageEncode` 新增 `Qwen Layered` 模型类型:选中后显示「图层数」,输出分层 latent。 -- `ToggleUnifiedLoader` 新增「- 移除 LoRA」按钮(从最后一组开始移除)。 - -### 2026-05-10 - -- 新增 **`ToggleUnifiedLoader`**(统一模型 + LoRA 加载器):把 UNet / CLIP / VAE / 多 LoRA 整合到单一节点, - 最多 10 组 LoRA 槽位(选了才显示),支持自动检测 CLIP 类型。 - -### 2026-05-08 - -- 新增节点:`SaveLoadImage`(保存/加载切换)、`ToggleLoadImage`、`TogglePreviewImage`、`ToggleEmptyLatent`。 -- 新增**隐私遮罩**(👁 / 🫣 切换,适用于图片类节点)。 -- 新增 **DynamicRef 系列**:`DynamicRefIndependent`、`DynamicRefImageEncode`、`DynamicRefLatentInput`、 - `ImageBatcher`、`OneImageMultiPrompt`。 - ---- - -## 安装 / Installation - -Place this folder under `ComfyUI/custom_nodes/` and restart ComfyUI. - -把本文件夹放到 `ComfyUI/custom_nodes/` 目录下,重启 ComfyUI 即可。 +# ComfyUI-Toggle-Pass + +**v1.0.0** · [English](#english) | [中文](#中文) + +--- + + +## English + +Toggle-Pass node collection — toggle controls, image load/save/preview, privacy mask, dynamic multi-reference image encoding, unified model loader, and an all-in-one sampler. + +### Nodes + +#### ToggleUnifiedLoader — Unified Model + LoRA Loader + +All-in-one model loading node: UNet + CLIP + VAE + multiple LoRAs in a single node. + +**Loader mode** (`加载模式`) — one node, two ways to load: + +| Mode | What it does | Parameters shown | +|---|---|---| +| `分离组件 (UNet+CLIP+VAE)` (default) | Pick UNet / CLIP / VAE separately | `unet_name`, `clip_name`, `vae_name`, `clip_type` | +| `Checkpoint 一体包` | Load an all-in-one checkpoint (same as the official **CheckpointLoaderSimple**): UNet + CLIP + VAE are extracted automatically by guessing the config | `ckpt_name` only | + +- **The mode is a two-segment switch — `UNet | Checkpoint`**, not a dropdown. Click the left half for + separate components, the right half for an all-in-one checkpoint; the current side is highlighted +- The switch sits **on the node's top row, level with the `模型 / MODEL` output slot**, and its left + edge lines up with the dropdown widgets below +- The `加载模式` value is still stored and serialised normally, so **existing workflows and API calls + keep working** — the switch only takes over how it is drawn and clicked +- Under the Vue node renderer ("modern node design") the switch is drawn inside the combo widget instead +- In `Checkpoint 一体包` mode the separate model dropdowns are hidden, so the node stays clean +- **LoRA works in both modes** — the LoRA groups are applied after loading, regardless of mode +- The VAE comes from the checkpoint itself (same as the official simple loader) +- **Widget order — the model comes first**: `ckpt_name` → `unet_name` → `clip_name` → `vae_name` → + `clip_type` → `加载模式` → LoRA groups → buttons. In `Checkpoint 一体包` mode the checkpoint + dropdown is literally the top row +- Old workflows load correctly: saved widget values are re-mapped **by parameter name** on load, so + nothing gets scrambled. Missing values fall back to the default mode (separate components) + +**Inputs**: +- `ckpt_name` — checkpoint file from `models/checkpoints` (only in `Checkpoint 一体包` mode) +- `unet_name` — UNet model file +- `clip_name` — CLIP text encoder file +- `vae_name` — VAE model file +- `clip_type` — CLIP type (auto-detect from UNet, or manually select: SD, SD3, FLUX, FLUX2, `qwen_image`, etc.) + - Auto-detection recognises the Qwen-Image-2.1 UNet class (`QwenImage21`) and maps it to `qwen_image`. + ⚠️ This is mandatory for 2.1: only `CLIPType.QWEN_IMAGE` loads the dedicated text encoder (Qwen3-VL 8B) + that produces `image_slots`. Without it the generic Qwen3-VL encoder is used and **reference images are silently dropped**. + - Manual override available: select `qwen_image` explicitly (recommended if you suspect auto-detection failed) + - `fibo2` and `moss_image` are supported as well (auto-detected from the `Fibo2` / `MOSSImage` UNet class). + Both share weight files with `krea2` (FIBO 2.0 uses the same Qwen3-VL-4B; MOSS-Image uses Qwen3.5-**9B**), + but they tap completely different layers — a wrong type is not "slightly worse", the conditioning width + stops matching. The loader also validates the text encoder class (`Fibo2TEModel_` / `MOSSImageTEModel_`) + and the VAE (both use the Flux2 latent, so `flux2-vae*`, never a Qwen VAE). +- `+ Add LoRA` button — Click to add LoRA slots one by one (up to 10) +- `- Remove LoRA` button — Click to remove LoRA slots from the last group (up to 10) + +**LoRA Controls** (added via button, up to 10 groups): +- Select a LoRA file → one `Strength` slider appears automatically +- Select "none" → the slider hides +- All LoRAs are applied sequentially + +> **One strength slider, on purpose.** The CLIP side always follows the MODEL side, so the strength you set is exactly what takes effect. + +**LoRA status on the button** — after a run the loader reports back what it actually did, right on the +`+ Add LoRA` button, so you never have to guess: + +| Button text | Meaning | +|---|---| +| `· 224p` | the LoRA really was patched into the model — 224 patches (count produced by Python) | +| `· 192/224p` | 192 of this LoRA's 224 modules landed; the remaining 32 have no target layer in the base checkpoint. Typical for **repacked INT8 all-in-one checkpoints** (e.g. `img_mlp.gate_layer` was fused into `gate_up`), not a node bug | +| `· ⚠️未写入` | nothing was patched — wrong architecture / incompatible file | +| `· ⚠️N不匹配` | N LoRAs matched zero weights (wrong base model) | +| `· ⚠️N跳过` | N LoRAs were skipped (file missing) | +| `· ⚠️N个强度0` | N selected LoRAs have strength 0 — they do nothing | +| `· ⚠️CLIP不符` | the text encoder that got built doesn't match the model (split mode: wrong CLIP file / clip type) — conditioning is silently useless | + +The label is kept short on purpose (a long one would overflow a narrow node); hover the button to see +the full per-LoRA breakdown (module coverage, CLIP check result, per-slot patch counts). The label is +also cleared as soon as you add/remove/switch a LoRA, so a stale count from a previous run never lingers. +Note this reports whether the patch was **written**, not whether it is visible in the picture — +a quantized base, a reference-image-dominated edit, or a very subtle LoRA can all make the effect hard to see. + +**Outputs**: `MODEL`, `CLIP`, `VAE` + +**Global broadcast** (`全局广播` switch, built in — no extra plugin needed): + +Turn it **on** and the node's three outputs are automatically wired to every **empty** `MODEL` / `CLIP` / +`VAE` input in the graph when you press Run. No dragging cables through half the canvas. +Turn it **off** (default) and nothing changes — you wire everything yourself. + +- The real wires are made **only while the prompt is being built** and removed immediately afterwards, so + they never get saved into your workflow +- **While the switch is on, the canvas draws a violet preview curve** for every wire that will be created + at run time, with a small dot at both ends landing exactly on the output/input slots. The curves are pure + overlay — they create no real links, are not serializable, and disappear as soon as you switch it off +- **The slots that will be wired get "lit up"**: those inputs are still empty (no real link), so ComfyUI + renders them as hollow rings. While the switch is on they get a **solid dot** in the official type colour, + matching how a manually connected slot looks — so you can see at a glance which inputs will be wired + automatically and which are already connected. Switching it off restores the hollow look +- **The curves and their end dots both pass behind the nodes**: they are drawn on the background layer, so + they show up in the empty space between nodes and are naturally hidden where they cross a node — including + the half of each end dot that sits under the node edge. Titles and parameters stay readable, and nothing + leaks out when you park a node on top of a wire as a mask + (on a very tightly packed graph you will see less of the line, which is the intended trade-off) + - Want the old look (dots always on top)? Run `localStorage.tp_dots_layer = "front"` in the console and reload +- **It only fills empty inputs.** Anything you connected by hand is left untouched — which is why + "auto" and "manual" can coexist in the same graph +- Covers `MODEL` / `CLIP` / `VAE` only (the node's three outputs) +- If more than one loader has the switch on, the first one wins for each type and a warning is logged +- **The switch lives at the top of the node**: directly **below** the `UNet / Checkpoint` pill, on its + left half (a small pill labelled `广播` / "broadcast") — click it to toggle. It no longer takes up a + full row at the bottom; the bottom now only holds the two LoRA buttons +- Its size matches the pill: **width = half of the pill**, **height identical to the pill** (14px, edges aligned) +- The switch state is stored in the node's `properties`, so it is **not** part of `widgets_values` — + old workflows keep every parameter in its original position, and the switch simply defaults to off +- Works alongside `cg-use-everywhere` (it does not touch that plugin's `ue_convert` flag) + +> **Limitation**: the broadcast happens on the front-end, so it applies when you press Run or export the +> API format from the UI. A raw `POST /prompt` with a hand-written API JSON never passes through the +> front-end, so no auto-wiring happens there — export the API format once and the JSON already has the links. + +--- + +#### SaveLoadImage — Save/Load Toggle + +Image save node with Save/Load mode toggle. +- **Save mode**: Save image to output directory, output IMAGE and MASK +- **Load mode**: Reuse the last saved image, skip saving +- Click 👁 icon in the title bar to toggle privacy mask (hide/show image preview) + +#### ToggleLoadImage — Load Image + +Custom image loading node, same functionality as built-in LoadImage, with privacy mask support. +- Click 👁 icon in the title bar to toggle privacy mask + +#### TogglePreviewImage — Preview Image + +Custom image preview node, saves to temp (not output), with privacy mask support. +- Click 👁 icon in the title bar to toggle privacy mask + +#### ToggleEmptyLatent — Toggle Empty Latent + +Toggleable empty Latent generation node. +- **ON**: Use width/height parameters +- **OFF**: Use fallback_width/fallback_height parameters (useful for A/B size comparison) +- **`latent_type`** — channels and spatial scale, must match the base model's `latent_format`: + | Option | Channels | Scale | Models | + |---|---|---|---| + | `SD / SDXL(4 通道 · 8×)` | 4 | 8× | SD 1.5 / SDXL / Pony | + | `SD3 / Flux / Krea 2(16 通道 · 8×)` | 16 | 8× | SD3, Flux.1, **Krea 2** (Wan21 format, `latent_dimensions=3`) | + | `Qwen-Image 2.1(64 通道 · 16×)` | 64 | 16× | Qwen-Image 2.1 | + | `Flux2(128 通道 · 16×)` | 128 | 16× | FLUX.2 | + + Default is `SD / SDXL` so existing workflows keep their old behaviour. Picking the wrong + row does **not** raise an error — KSampler's `fix_empty_latent_channels` silently pads the + channels when the latent is all zeros, but any node that consumes the latent directly + (without going through a sampler) will get the wrong shape. With the matching row the + output is byte-identical to the official `EmptySD3LatentImage` (verified: same shape, + dtype, `downscale_ratio_spacial`, tensor diff = 0). + +--- + +#### DynamicRefIndependent — Multi-Reference Independent Encoding (Core Node) + +Each reference image is independently VAE-encoded, outputting separate CONDITIONING and LATENT pairs. Ideal for scenarios where multiple images control style/content independently. + +**Inputs** (dynamic, controlled by `num_images`): +- `clip` — CLIP model +- `vae` — VAE model +- `num_images` — Number of reference images (1~10) +- `instruction` — System prompt (leave empty for default) +- `image1` ~ `imageN` — Reference images +- `prompt1` ~ `promptN` — Per-image prompts (collapsible widgets inside node) + +**Model type**: `Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL / Z-Image` +- Selecting `Qwen Image 2.1` reveals its own parameter group (see [Qwen Image 2.1](#qwen-image-21-support)) +- Selecting `Qwen Layered` reveals `layers`; latent output is layered (`[1, 16, layers+1, h/8, w/8]`) +- Selecting `Flux2` / `SD / SDXL / Z-Image` only shows the classic `输出宽度/高度` (old behaviour, unchanged) + +**Outputs** (dynamic, N×2): +- `cond_1`, `latent1`, `cond_2`, `latent2`, ... `cond_N`, `latentN` + +**Usage**: +1. Drag in the node, default is 1 reference image +2. Adjust `num_images` to desired count (1~10), input/output slots auto-adjust +3. Connect each reference image and fill in corresponding prompts +4. Connect `cond_N` to sampler's conditioning, `latentN` to VAE Encode's latent + +--- + +#### DynamicRefImageEncode — Dynamic Reference Image Encoding + +Single prompt control, dynamically add/remove reference image input slots. + +**Inputs**: `clip`, `num_images`, `prompt`, `image1` ~ `imageN` +**Outputs**: `CONDITIONING`, `LATENT`, `NEGATIVE` (all images share the same conditioning, latents output separately). +The second output is a ready-made **empty-text negative** encoded from the same CLIP — wire it into the +sampler's negative input. Use it instead of `ConditioningZeroOut` on the positive conditioning: at +CFG = 1.0 both look identical, but as soon as CFG > 1 the zeroed version corrupts the whole frame. +This output exists only on `Ref Image Encode`; for `Ref Independent` / `OneImageMultiPrompt` +with CFG > 1, wire a plain empty `CLIPTextEncode` into the negative input. + +**Model type**: `Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL / Z-Image` / `Krea2` +- `Qwen Layered`: Adds a `layers` parameter; latent output is a layered latent (`[1, 16, layers+1, h/8, w/8]`), directly connectable to Ksampler's latent input (replaces `EmptyQwenImageLayeredLatentImage`) +- `Qwen Image 2.1`: Adds its own parameter group for editing + resolution control (see below) +- `SD / SDXL / Z-Image`: Generic fallback — emits a 4-channel all-zero latent, which core + `fix_empty_latent_channels` pads to whatever channel count the model needs. **This is the correct + setting for text-to-image-only models such as Z-Image** (see [Z-Image usage](#z-image-usage)). + For those models leave every `imageN` input empty — they have no reference-image path and will + output a blocky mosaic if you connect one. +- `Krea2`: Wan21 latent (16 channels / 8x, `qwen_image_vae`). References go to `reference_latents` only, + the sampling start is an all-zero latent, and `reference_latents_method=index` is set automatically + (without it the references are silently ignored). **Deliberately not `index_timestep_zero`** — that + gives the reference tokens their own t=0 adaLN modulation, which does not match how the krea2_edit + LoRAs were trained (one shared tvec for the whole sequence). Measured: with `index_timestep_zero` a + line-art reference gets *drawn into* the frame (contour lines on the face); with `index` it is clean. + Reference latents are also fitted to the output grid — see the Krea 2 section below. +- **For `MOSS-Image` / `FIBO 2.0`, pick `Flux2`** — all three share the same latent (128 channels / 16x, `flux2-vae`). + Measured: feeding the pose sheet as a second image does re-pose the subject (MOSS 16.7 s / FIBO 10.6 s, + no sketch figure left in the frame). What this node does **not** give you is MOSS's `edit_format` + (three training layouts that must match the LoRA) / `image_strength`, or FIBO's `negative_prompt`. + For those, use the native encoders `TextEncodeMOSSImageEdit` / `TextEncodeFibo2` instead — + they take AUTOGROW image inputs, so this node's output still plugs straight in. +- Every model type only shows the parameters it actually uses — switching the dropdown hides the rest, so the node stays clean +- When `匹配原图尺寸` = ON, uses the actual image size; when OFF, uses the 2.1 resolution parameters (or `输出宽度/高度` for other models) + +#### DynamicRefLatentInput — Dynamic Latent Input + +Dynamically add/remove LATENT input slots, for use with DynamicRef series. + +#### ImageBatcher — Image Batcher + +Dynamically add/remove IMAGE input slots, batch multiple images together. + +#### ToggleImageCompare — 图片对比 + +Compare multiple "source" images against multiple "result" images by composing them into a single +side-by-side sheet, previewed right inside the node. + +**Inputs**: `num_sources`, `num_results`, `source1`~`source10`, `result1`~`result10` +- `num_sources` / `num_results` — how many slots to show for each group (1~10), adjusted independently, + so **N sources + 1 result** and **N sources + N results** are both supported +- `source1`~`source10` — the "before" / original images +- `result1`~`result10` — the "after" / generated images + +> In the node UI these are shown in Chinese: slots as `原图1`~`原图10` / `结果1`~`结果10`, +> counters as `原图数` / `结果数`, and the output as `对比图`. The English keys above are kept +> unchanged so existing workflows keep loading. + +**Parameters** +- `排版` (layout) — `自动` (auto) / `成对并排` (paired) / `上下两排` (stacked) / `自动网格` (grid) + - `自动` picks paired when the two groups have equal counts, otherwise stacked +- `标签` (labels) — burn `原1 / 结1 …` badges on each tile, or hide them + +**Outputs**: `comparison` — one composed IMAGE (feed it into `SaveLoadImage` or a preview node) + +Layout is decided by the images **actually connected**, not by how many slots you enabled, so you +never have to touch the settings when the counts change. Images of different sizes are scaled to a +common row height (aspect ratio preserved). + +#### OneImageMultiPrompt — One Image Multiple Prompts + +One reference image with multiple prompts, output separate conditionings (up to 8), sharing a single latent. + +**Inputs**: `clip`, `image`, `prompt数量`, `prompt1` ~ `prompt8` +- `prompt数量` — how many prompts to use (2~8); unused prompt boxes are hidden automatically +- `模型类型` — `Flux2` / `Qwen Image 2.1` / `SD / SDXL / Z-Image` / `Krea2`. Selecting `Qwen Image 2.1` adds the + full resolution parameter group, so one photo can be rendered from multiple viewpoints / edits at once. + +**Outputs**: `cond_1` ~ `cond_8`, `latent` + +--- + +#### ToggleSampler — All-in-one Sampler (采样器(一体)) + +Collapses the official four-node chain into a single node: + +``` +RandomNoise + CFGGuider + KSamplerSelect + (BasicScheduler | ManualSigmas) -> SamplerCustomAdvanced +``` + +**Inputs**: `模型` (MODEL), `正面条件` / `负面条件` (CONDITIONING), `Latent图像` (LATENT) +**Parameters** (in on-node order): `⚡预设`, `Sigma 曲线`, `采样器`, `调度器`, `步数`, `CFG`, `降噪`, `噪波随机种`, `自定义Sigma表` +**Outputs**: `Latent`, `降噪Latent` + +> Display label and internal name are deliberately separate: `⚡预设` is internally `模型预设`, and +> `Sigma 曲线` is internally `采样方案`. Only the label is changed — `widgets_values_named` and the +> `/prompt` `inputs` are keyed by name, so renaming the name would orphan every saved workflow. + +Model / conditioning / latent stay as **sockets on purpose** — the only thing that really differs +between models is the sigma curve, so switching models never needs a new node. `Sigma 曲线` (internal +name `采样方案`) comes in three flavours: + +| Scheme | What it does | Which parameters matter | +|---|---|---| +| `自动(按步数 + 调度器)` | computes sigmas live — numerically identical to official `BasicScheduler` | `步数` + `调度器` | +| Preset tables: `Qwen-Image-2.1 turbo 8步`, `LTX-2 视频 8步(蒸馏)`, `LTX-2 视频 3步(低噪)` | fixed distillation trajectory | none — the step count is baked into the table | +| `自定义表` | hand-typed sigma list | `自定义Sigma表` | + +A sigma table must be comma separated, **strictly decreasing**, **end with 0**, and `N` values = `N-1` +steps (9 values = 8 steps). + +Parameters that a preset makes irrelevant are greyed out *and* locked: `步数` flips to the preset's real +value (still readable, just not editable), and switching back to `自动` restores your own step count. +`降噪` < 1.0 trims the tail of the table, so low-denoise refinement works with presets too. + +For distilled turbo models use `采样器` = `euler` and `CFG` = `1.0`. + +#### ⚡预设 (fill in the usual numbers in one click) + +The `⚡预设` dropdown at the **top** of the node is a **one-shot filler**: pick a model and it sets +`Sigma 曲线 / 采样器 / 调度器 / 步数 / CFG` in one go. `降噪` and `噪波随机种` are left alone +(they depend on the task, not the model). + +It sits at the top because that is the real order of use — pick the model, then fine-tune. The two +dropdowns also used to be easy to mistake for duplicates, so they are named apart now: `⚡预设` covers +a whole parameter set, `Sigma 曲线` only the noise trajectory. + +| Preset | Sigma curve | Sampler | Scheduler | Steps | CFG | +|---|---|---|---|---|---| +| Qwen-Image 2.1 (25 steps) | auto | euler | simple | 25 | 1.0 | +| Qwen-Image 2.1 turbo (8 steps, fixed table) | preset table | euler | simple | 8 | 1.0 | +| Krea 2 turbo (8 steps) | auto | euler | simple | 8 | 1.0 | +| Krea 2 turbo · detail (12 steps) | auto | euler | simple | 12 | 1.0 | +| FLUX.2 klein (4 steps · beta) | auto | euler | beta | 4 | 1.0 | +| FLUX.2 klein · upscale refine (4 steps) | auto | euler_ancestral | simple | 4 | 1.0 | +| Z-Image turbo (8 steps) | auto | euler_ancestral | simple | 8 | 1.0 | +| Qwen-Image Layered (9 steps · CFG 2.5) | auto | euler | simple | 9 | 2.5 | +| Qwen-Image Edit 2511 AIO (4 steps) | auto | euler_ancestral | beta | 4 | 1.0 | +| FIBO 2.0 turbo (4 steps) | auto | euler | simple | 4 | 1.0 | +| MOSS-Image (30 steps · CFG 4) | auto | euler | normal | 30 | 4.0 | +| Manual (off) | — | — | — | — | — | + +It **fills once, it does not lock**: touch any of those five parameters afterwards and the dropdown +falls back to `手动(不套用)` by itself. The control therefore always reflects the truth — you will +never see "Qwen preset" selected while the node is actually running 40 steps. + +The table lives only in `MODEL_PRESETS` inside `sampler.py`; the frontend fetches it from +`GET /toggle_pass/sampler_presets` and keeps **no second copy**, so adding a model touches one file. +When renaming an entry, add an "old → new" pair to `PRESET_ALIASES`, otherwise workflows saved with +the old value show a blank dropdown. + +Every row was taken from a workflow that actually runs on this machine (the source file is noted in +the `sampler.py` comments next to each entry) — run it once before changing a number. + +--- + + +### Pose Reference + +`PoseReference` (参考姿势) picks one pose sheet out of a local library and hands it to any editing +model's image input as a plain `IMAGE` — no ControlNet, no extra model. + +**Library layout** — the node merges up to three roots and de-duplicates by name. Earlier roots win, +so a sheet of yours with the same name overrides the bundled copy: + +| Order | Root | Notes | +|---|---|---| +| 1 | `$TP_POSE_ROOT` | only if you set it; point it at your own collection | +| 2 | `ComfyUI/models/pose_reference/` | recommended home for private sheets — travels with your `models` backup | +| 3 | `custom_nodes/ComfyUI-Toggle-Pass/pose_assets/` | bundled, ships with the plugin | + +Every root uses the same layout: + +``` +\ +├─ 01_AI线稿姿势\ lineart set +│ └─ \\\.webp +└─ 02_AI深度姿势库\ depth set (same paths, same filenames) +``` + +The two sets are path-for-path identical, so the node indexes one and resolves the other by the +`source` switch. Drop a new folder in and it shows up in the dropdowns within ~15 seconds — no restart, +no page refresh. + +**Inputs** + +| Name | What | +|---|---| +| `category` | 上半身单人 / 全身单人・标准系 / 全身单人・性感系 / 双人缠绵 | +| `group` | pose group, e.g. 站姿 / 坐姿 / 蹲姿 (30 in total) | +| `pose` | `P###_名称`, 288 in total. P-numbers repeat across categories, so the full folder name is the key | +| `view` | 正面 / 侧面 / 斜侧 / 俯视 / 仰视 | +| `source` | `线稿` (default) or `深度` | +| `long_edge` | output long edge, default 1024 — the source sheets are only 300×400. The result is down-aligned to a multiple of 16 (VAE requirement), so the real long edge can be up to 15 px smaller | +| `flip` | mirror horizontally, so you do not need a second sheet for the mirrored pose | + +The first three dropdowns cascade: picking a category narrows `group`, picking a group narrows `pose`. +**Changing any dropdown repaints the node in place** — the thumbnail of the selected sheet appears right +below the widgets, no prompt needs to be queued. The node grows itself on first load to make room; +drag its lower-right corner if you want the picture bigger. + +**Wiring** + +``` +[Pose Reference] ──image──▶ [TextEncodeQwenImage21] .images ─┐ + ├─▶ KSampler ─▶ VAEDecode ─▶ SaveImage +[UNet loader] [CLIP loader] [VAE loader] ──────────────────┘ +``` + +1. Double-click the canvas and search `Pose Reference` (category `Toggle-Pass`). +2. Pick 类别 → 姿势组 → 姿势 → 视角. The sheet shows up on the node as you click. +3. Wire `image` into the `images` input of your edit encoder (`TextEncodeQwenImage21`, + `TextEncodeFibo2`, …). The rest of the graph is your usual txt2img / edit graph. +4. `长边` sets the resolution fed to the encoder — 1024 is plenty, the sheets are only 300×400. The output is aligned down to a multiple of 16 so `VAEEncode` never has to pad or crop it (a half-pixel shift is very visible on line art). +5. Set `翻转` to `开` when you need the mirrored version of the same pose. + +**⚠️ Editing models (2511 / FLUX.2 / MOSS-Image / FIBO 2.0) need two images** + +Wiring a single sheet into these models **runs fine and produces an image, but the pose never changes**. +This is not a compatibility problem, it is semantics: the model treats `image1` of the edit encoder as +"the picture to be modified", so a lineart sheet in `image1` degrades the task into "redraw this lineart +photorealistically" and nothing in the prompt can bring the original subject back. + +Use multi-image editing instead: the **source photo goes to `image1`**, the **pose sheet goes to `image2`**. + +``` +[Load Image] ────image───▶ .image1 ┐ + ├─▶ [TextEncodeQwenImageEditPlus] ─▶ KSampler +[Pose Reference] ─image──▶ .image2 ┘ prompt: keep the subject and outfit of image1, + change the pose to the one in image2 +``` + +`image1 / image2 / image3` on `TextEncodeQwenImageEditPlus` are all plain `IMAGE` inputs, so the node +drops straight in with no converter. Verified on both 2511 and FLUX.2 — the subject is re-posed from +the `image2` skeleton. + +MOSS-Image and FIBO 2.0 work the same way, only the slots are the auto-growing +`image_0/image_1` (MOSS) and `image_1/image_2` (FIBO): + +``` +[Load Image] ────image───▶ .image_0 ┐ + ├─▶ TextEncodeMOSSImageEdit ─▶ KSampler +[Pose Reference] ─image──▶ .image_1 ┘ edit_format must match the edit LoRA's training format +``` + +Measured: both turn a standing photo into the seated pose of the sheet (MOSS 20.2 s, FIBO 16.1 s) +while keeping face, hair, outfit and background. ⚠️ MOSS only edits when +`moss_image_edit_lora_bf16` is loaded — without it you get the SFT base and the instruction barely moves. + +**Krea 2 — our own nodes can do it; two external packs exist if you need them** + +**Start here: no external pack required.** `Ref Image Encode` with `模型类型 = Krea2` reproduces what +`ComfyUI-krea2Edit` does with two nodes, because ComfyUI's native krea2 `_forward` *already has* the +in-context reference path (`ref_latents` → clean tokens at frame 1..N, target at frame 0) that +`Krea2EditModelPatch` rebuilds by hand. Two conditions must hold, and the node now handles both: + +1. `reference_latents_method = index` — **not** `index_timestep_zero` (that splits the adaLN + modulation into two timesteps and the reference gets traced into the frame). +2. Every reference latent is fitted to the output grid before VAE encoding — `h/w` identical to the + sampling start, so the RoPE positions differ only on the frame axis. + +``` +[Pose Reference] ─image─▶ .image1 ┐ + ├─▶ Ref Image Encode (模型类型 = Krea2) ─cond─▶ ToggleSampler ─▶ VAEDecode +[Load Image] ────image─▶ .image2 ┘ └latent (all-zero, 16 ch) ┘ +prompt: the woman from image 2, kneeling upright leaning back, chest lifted, back arched, + both hands reaching down and back to touch her heels, three-quarter rear-side view; + keep face / hair / outfit / background — see the warning below, do NOT shorten this +``` + +It also has a dedicated `negative` output (empty-text encode from the same CLIP) — wire that into the +sampler's negative input, so raising CFG later never corrupts the frame. + +⚠️ **Order is a hard convention: the LAST reference is the subject.** Sheet in `image1`, photo in +`image2`. Swapped, the model renders a line-art mannequin (measured) — the sheet is treated as the +thing to draw rather than the condition. Measured 8 steps at 720×1440: 70 s, seated pose, clean frame, +likeness kept, no external nodes. + +⚠️⚠️ **The prompt must describe the pose concretely — this is the easiest trap.** +A vague line like `图二美女参考图一的姿势,重新摆pose` ("the girl in image 2, follow the pose in +image 1, re-pose") does not make the model *read* the sheet. Measured with identical parameters and +seed: it treats the mannequin as a **second subject** and outputs a side-by-side collage of +"real person on the left + line-art mannequin on the right". The pose does not move at all. + +Same pose (P068 kneeling, leaning back, hands to heels, three-quarter view), three prompts: + +| Prompt | Result | +| --- | --- | +| `图二美女参考图一的姿势,重新摆pose` | ❌ person + mannequin collage, pose unchanged | +| `让图二中的女人摆出图一那个姿势:跪立、身体向后仰、胸部抬起、背部拱起,双手向后下方伸去触摸脚跟,头部微微后仰,采用四分之三侧后方视角。保持她的脸、发型、深蓝色泳装和海滩背景不变。` | ✅ single subject, pose correct | +| Same in English | ✅ single subject, pose correct (hands slightly closer to the heels) | + +Three mandatory parts: +1. **Name the subject** — "the woman from image 2", not "image 2's beauty" +2. **Anatomically describe the pose** — torso direction, where each limb goes, where the hands land, + head tilt, camera angle. "Follow the pose in image 1" alone conveys nothing +3. **List what must stay** — face, hair, outfit, background, item by item + +Chinese works fine; you do not have to write English. The point is specificity, not language. + +⚠️ Use `DynamicRefImageEncode` (`Ref Image Encode`), not `DynamicRefIndependent`: the latter encodes +each image into its **own** conditioning (that is the design for Qwen 2.1's per-image index planes), +and merging those does not give Krea2 one coherent reference sequence — measured line-art bleed plus a +wrong pose. + +**If you do reach for an external pack**, these two are mutually incompatible with each other and with +the two-input semantics above. Mixing them up gives "no error, but the line art gets painted into the +picture" — a wasted run: + +| Node pack | Encoder | Patch node | Where the pose sheet goes | Result | +| --- | --- | --- | --- | --- | +| `ComfyUI-Krea2-Ostris-Edit` | `TextEncodeKrea2OstrisEdit` | `Krea2OstrisEditModelPatch` | `image2` (with `image1` = photo) | ✅ skeleton-driven, no line art bleed | +| `ComfyUI-krea2Edit` | `Krea2EditGroundedEncode` | `Krea2EditModelPatch` | `image_b` + `source_latent_b` | ❌ the sheet is treated as a *second subject* and rendered | + +**The Ostris pack is the one that takes a skeleton:** + +``` +[Load Image] ─image─▶ [FluxKontextImageScale] ─▶ .image1 ┐ + ├─▶ TextEncodeKrea2OstrisEdit ─┐ +[Pose Reference] ─image─▶ [FluxKontextImageScale] ─▶ .image2 ┘ (one encoder each, pos/neg) │ + ▼ +[Load Diffusion Model] ─▶ [Krea2OstrisEditModelPatch] ─▶ [Load LoRA] ─▶ KSampler (8 steps, euler/simple, CFG 1) +``` + +`image1 / image2 / image3` are plain `IMAGE`, so the pose output drops straight into `image2`. +Measured with `krea_outfittransfer` + `kv_cache` on, same beach photo and sheet `P017`: 8 steps in +36.1 s, seated on the sand, **no line art left in frame**, face / hair / swimsuit / background intact. + +⚠️ Three things that have to match: +1. **`kv_cache` must match how the LoRA was trained.** LoRAs trained with ai-toolkit's `kv_cache` + kwarg (e.g. `krea_outfittransfer`) need it on; normally trained edit LoRAs drift when it is on. +2. **The LoRA must match the node pack.** Feeding `krea2_identity_edit_v2` (a krea2Edit-weight) into + the Ostris nodes also bleeds the sheet into the image — measured; the two use different geometry. +3. **Wrap both conditionings in `FluxKontextMultiReferenceLatentMethod`** (`index_timestep_zero`), + as the official workflow does. + +With only krea2Edit-family LoRAs you can still change the pose, but **by prompt only** — no skeleton image: + +``` +[Load Image] ─▶ source_latent / image ─▶ Krea2EditModelPatch ─▶ KSampler (8 steps, euler/simple, CFG 1) +prompt: have her sit on the sand, chest lifted and leaning back, hands braced beside her hips +``` + +Measured: `krea2_identity_edit_v2` took that prompt and turned the standing photo into a seated one, +but wiring the sheet into `image_b` renders the mannequin too. So: **need a skeleton → Ostris pack; +only krea2Edit weights → describe the pose in words.** + +**Can krea2Edit take a skeleton at all? Four wirings tested, none of them works** + +| Wiring | Pose follows the sheet? | Clean frame? | +|---|---|---| +| Sheet → `image_b` (+ `source_latent_b`) | yes | ❌ a white mannequin / transparent wireframe gets rendered into the shot, worse as `ref_boost` rises | +| `source_latent_b` only (no `image_b`, the TE never sees it) | ❌ no effect at all | yes | +| Sheet as the **main** image, photo as `image_b` (swapped roles) | yes | ❌ outline lines stay on the body | +| Convert the sheet to a **grey silhouette** (PIL) then feed `image_b` | ❌ pose unchanged | yes | + +Rows 2 and 4 were control experiments — the pose sentence was deleted from the prompt entirely, +and the output stayed in the photo's standing pose, proving all pose change came from the prompt +and not from the skeleton. Row 4 only fixes the dirty frame, not the driving. + +**The likeness difference is measured**: same source photo, same pose target — +`krea2Edit + krea2_identity_edit_v2` keeps the **same face**, while +`Ostris + krea_outfittransfer` clearly swaps the person (that LoRA is for outfit transfer). +So they are not interchangeable: + +- **Both at once** — identity kept *and* the pose driven by a sheet → `Ref Image Encode` + (`模型类型 = Krea2`) exactly as shown at the top of this section. No external pack, no second pass. +- **Identity preserved**, text-only edit (restage, outfit change, local edit) → this plugin's Krea2 path + or `krea2Edit` + describe the pose in words; both keep the face +- **Hardest possible skeleton lock**, and you can trade likeness → the `Ostris` pack +- Only if you already work in the krea2Edit pack and cannot switch → Ostris for the pose, then one + `krea2Edit` pass to recover the face + +⚠️ `ref_boost` / `grounding_px` are not "higher is better": `ref_boost=1.3` with `grounding_px=1024` +actually replaced the beach background with seaside rocks. Keep 1.0 / 768 and only nudge up if the face drifts. + +**Where the sheets live — three layers, merged at runtime** + +| Layer | Location | Ships with the plugin | +| --- | --- | --- | +| Built-in | `custom_nodes/ComfyUI-Toggle-Pass/pose_assets/` | yes — 1,530 sheets, only the two non-sensitive categories (`上半身单人`, `全身单人・标准系`) | +| Private | `ComfyUI/models/pose_reference/` | no — recommended home for your own and private sheets; it travels with your `models` backup | +| Custom | the `TP_POSE_ROOT` env var | no — only when you keep them somewhere else entirely | + +Lookup order is **`TP_POSE_ROOT` → `models/pose_reference` → built-in**, so a sheet of yours wins over +the built-in one of the same name. Installing the node is enough to browse and generate with the +built-in set; anything you drop into the private folder is picked up automatically: + +- **Drop a new pose group into `models/pose_reference` and the dropdown grows within ~15 s** — no page + reload. Deleting it makes it disappear just as fast (the node polls a cheap fingerprint of the library). +- Need it right now? Right-click the canvas → `🔄 刷新姿势素材库`. +- A root that does not exist is simply skipped: the node reports where it looked instead of failing + silently. + +**The workflow carries the sheet with it.** The selected file is inlined into the node as a data URI +(`properties.tp_pose`), so the graph is self-contained: + +- Someone who downloads your workflow **sees the picture and can run it without any local library**; +- Cost is roughly **+8–14 KB per node** (the sheets are 300×400 webp, 5–10 KB each); +- When a local library exists it always wins — the inlined copy is only a fallback; +- If the parameters were changed while the library was missing, the node keeps showing the inlined + sheet and says so, rather than going blank. + +**Output**: `image` (`IMAGE`) — connect straight to the `images` input of `TextEncodeQwenImage21`, +`TextEncodeFibo2`, or any other edit encoder. + +A ready-made graph ships as `example_workflows/Pose Reference Editing.json` (Qwen-Image-2.1 turbo, +8 steps). **It carries the selected sheet inside the node** (`properties.tp_pose`, a ~8 KB data URI), +so it opens and generates even on a machine that has no pose library at all. Together with the built-in +`pose_assets/`, a fresh install can browse 153 sheets across 12 groups out of the box. + +**Why lineart is the default.** Measured on FIBO 2.0 and Qwen-Image-2.1, one pose, two camera angles: +the depth set fabricated footwear or pads in **3 of 3** runs, the lineart set in **1 of 3**. A depth map +has no boundary line — the sole and the floor sit at nearly the same brightness, so the model fills the +bright area in with an object that is not there. Lineart carries an explicit black contour, and +`lineart → photoreal` is a transform these models saw in training. Depth keeps one advantage: volume, +which disambiguates occlusion when limbs overlap. Switch to it only for tightly intertwined poses. + +--- + + +### Qwen Image 2.1 Support + +`DynamicRefImageEncode`, `DynamicRefIndependent` and `OneImageMultiPrompt` all support **Qwen-Image-2.1** +image editing / multi-view generation. Select `Qwen Image 2.1` in `模型类型` and these parameters appear: + +| Parameter | Meaning | +|---|---| +| `宽高比` (Aspect ratio) | Preset ratios (1:1 / 3:2 / 16:9 / 21:9 ...), or `自定义(用输出宽度/高度)` | +| `百万像素` (Megapixels) | Total pixel budget, e.g. `1.0` ≈ 1024×1024, `2.6` ≈ 2016×1344. Range 0.1~16, **do not fill 1024 here** | +| `倍数` (Multiple) | Alignment step, fixed ≥ **32** (16 will break shapes) | +| `参考图分辨率` (Ref resolution) | How large the *reference* image is fed to the model (area target). `0` = keep original size | +| `尺寸适配` (Ref fit mode) | `参考图保比例` (default, no distortion) / `参考图裁剪` / `参考图拉伸` | + +Key rules learned from aligning with the official `TextEncodeQwenImage21`: + +- **Output size and reference size are independent.** `qwen_image` uses `default_ref_method = "index"`, + so the reference and the output live on separate RoPE planes and need not be the same shape. + Changing `参考图分辨率` does **not** change the output size. +- **Instructions must go into the prompt text, not the `instruction` field.** + `comfy/text_encoders/qwen_image21.py` drops the system turn, so anything written into `instruction` + is silently discarded for 2.1 — the node merges it into the user text automatically. + The default Flux-era English instruction is ignored (it would pollute the prompt). +- **The latent output is all-zero.** Feeding the reference image's real latent turns editing into img2img + (nothing changes). The real latent only goes into `reference_latents` in the conditioning. +- Images must be multiples of **32**; RGBA reference images are composited on white for the vision tower. + +Recommended setup for editing: `匹配原图尺寸` = **OFF**, `尺寸适配` = `参考图保比例`, +`百万像素` = 1.0, `倍数` = 32, `参考图分辨率` = 1024. + +✅ **The negative is already solved — `Ref Image Encode` has a dedicated `negative` output.** +Wire it straight into the sampler's negative input. It is a real empty-text encode from the same CLIP, +so it stays correct at **any** CFG (verified pixel-identical to a plain empty `CLIPTextEncode`). + +⚠️ Do **not** zero out the positive conditioning with `ConditioningZeroOut` and use that as the +negative. At CFG = 1.0 the negative is never evaluated, so it looks harmless; raise CFG and the frame +comes out **fully corrupted** (measured: green/purple blotches at 20 steps / CFG 2.5, both fp8 and +int8). Older builds of this node only had two outputs and the example workflow used +`ConditioningZeroOut` — that is exactly what bit people. + +**For pose editing, add `VNCCS_QI2_PoseStudioV2`** (`models/loras/Qwen/`, 152 MB, ai-toolkit, +base = `qwen_image_2`; `LoraLoaderModelOnly` is enough — pure `diffusion_model` keys). +Same prompt, across the Qwen 2.1 LoRAs on this machine: + +| LoRA | Result | +| --- | --- | +| bare model | works, 15 s at 8 steps | +| `VNCCS_QI2_PoseStudioV2` | ✅ **best**: pose tracked most accurately, richest detail, no line-art bleed | +| `QI2.1_AnyAngle` | ❌ line-art bleed on face/neck (reference gets painted into frame) | +| `qwen_image_2.1_turbo_lora_avg_rank_178` | usable but skin texture degrades; little pose help | + +Two verified setups: +- **turbo int8 + 8 steps + CFG 1.0** → 16.7 s, fast, good enough +- **`qwen-image-2.1-UC-fp8` + 20 steps + CFG 2.5** → 43.9 s, full body, best detail (empty-text negative) + +--- + + +### Krea2 Support + +`ToggleUnifiedLoader`, `DynamicRefImageEncode`, `DynamicRefIndependent` and `OneImageMultiPrompt` +all support **Krea2**. The loader detects `Krea2` from the UNet automatically and picks +`CLIPType.KREA2` + the `Krea2TEModel` text encoder; the three encoding nodes just need +`模型类型` = `Krea2`. + +⚠️ **VAE must match the model.** This is the single most common failure — mixing them up does not +fail at load time, it fails deep inside `VAEDecode`: + +| Model | VAE file | latent | +|---|---|---| +| Qwen-Image **2.1** | `qwen_image_2.1_vae_bf16.safetensors` | 64 ch / 16x / RGBA | +| **Krea2** | `qwen_image_vae.safetensors` | 16 ch / 8x / RGB | + +A wrong VAE is silently padded by `fix_empty_latent_channels` (16 → 64), sampling still finishes, and +then decode dies with `IndexError: tuple index out of range` from the Wan 2.1 branch. +The loader now compares `latent_channels` / `latent_dimensions` at load time and prints the exact file +you should use instead. + +Key rules learned from aligning with the official `TextEncodeQwenImageEditPlus`: + +- **Reference latent size = output size.** References are centre-cropped to the output aspect ratio and + resized to the exact output pixel grid *before* VAE encoding, so the reference latent matches the + sampling start dimension-for-dimension and the RoPE positions differ only on the frame axis — which is + the geometry the krea2_edit LoRAs were trained on. The vision tower still gets a ~384 px thumbnail. +- **The VAE only takes RGB** — alpha is dropped, not composited. +- **Vision placeholders must be written by hand.** With an explicit `llama_template` the Qwen3-VL + tokenizer does *not* auto-insert them, so the node emits + `Picture N: <|vision_start|><|image_pad|><|vision_end|>`. Without it the reference image is + completely invisible to the model. +- **`reference_latents_method` is mandatory, and it must be `index`.** Krea2's `default_ref_method` is + `None`, so references are *silently ignored* unless the method is set. `index_timestep_zero` runs but + is wrong for krea2_edit LoRAs: it splits the adaLN modulation into two timesteps (target = current t, + references = t=0) while training used a single shared tvec — a line-art reference then gets traced + into the frame. `index` keeps one tvec for the whole sequence and is the one that matches training. +- **The latent output is all-zero** (16 ch / 8x) — same "editing, not img2img" rule as 2.1. +- **Sigma curve:** Krea2 turbo uses the `自动(按步数 + 调度器)` scheme in `采样器(一体)`. + The `Qwen-Image-2.1 turbo 8步` table is *not* interchangeable with it. + +--- + + +### MOSS-Image / FIBO 2.0 Support + +`ToggleUnifiedLoader` picks both up automatically — `clip_type` now offers `moss_image` and `fibo2` +directly (`auto` also detects them from the UNet). Both are **Flux2-latent** models +(128 channels / 16x, `flux2-vae`), which is why `Ref Image Encode` needs **no extra model type: +just pick `Flux2`**. + +Measured with the pose sheet as the second image (standing beach photo → seated sheet): + +| Model | Native encoder | `Ref Image Encode` (Flux2) | +|---|---|---| +| MOSS-Image, 20 steps / CFG 4 | 19.6 s — seated, hands on the sand | 16.7 s — seated ✅ | +| FIBO 2.0, 4 steps / CFG 1 | 15.4 s — kneeling | 10.6 s — kneeling ✅ | + +No sketch figure leaked into either frame. What you give up by not using the native encoders: + +- **MOSS `edit_format`** — the reference method must match how the edit LoRA was trained + (`ai-toolkit` → `index_timestep_zero_isolated`, `ai-toolkit (kv_cache off)` → `index_timestep_zero`, + `Moss-Image-Edit` → `index_timestep_zero_text_start`). Picking the wrong one runs fine but edits + nothing. `Ref Image Encode` sets no method at all. +- **MOSS `image_strength`** and **FIBO `negative_prompt`** — neither is exposed there. +- Both native encoders take **AUTOGROW** image inputs, so a node output still plugs straight in: + `TextEncodeMOSSImageEdit` → `images.image_0 / image_1 …`, `TextEncodeFibo2` → `images.image_1 … image_16`. + +⚠️ `TextEncodeMOSSImageEdit` has a **single** conditioning output — encode the positive and the +negative with two separate nodes (the official template does exactly that). Writing `["node", 1]` +throws `list index out of range`, and the error points at the sampler rather than at the encoder. + +Sampler presets: `MOSS-Image(30步·CFG4)` and `FIBO 2.0 turbo(4步)`. + +--- + + +### Which dropdown do I pick? (`模型类型` vs `clip_type`) + +Two dropdowns look like they mean the same thing but are not: + +- **`模型类型`** lives on the reference-image encoders. It only decides **which latent shape comes out** + (and, for Krea 2, which `reference_latents_method` is used). +- **`clip_type`** lives on `Toggle Unified Loader`. It decides **how the text encoder is built**. + +Getting either one wrong usually fails silently (wrong channel count, wrong conditioning width, or a +clean-looking image with the prompt ignored). + +| Loading | `模型类型` (encoder) | `clip_type` (Unified Loader) | VAE | +|---|---|---|---| +| Qwen-Image **Layered** | `Qwen Layered` (+ `图层数`) | `qwen_image` | `qwen_image_layered_vae.safetensors` | +| Qwen-Image **2.1** | `Qwen Image 2.1` | `qwen_image` | `qwen_image_2.1_vae_bf16.safetensors` | +| **Krea 2** | `Krea2` | `krea2` | `qwen_image_vae.safetensors` | +| **FLUX.2 / MOSS-Image / FIBO 2.0** | `Flux2` | `flux2` / `moss_image` / `fibo2` | `flux2-vae.safetensors` | +| **Z-Image** | `SD / SDXL / Z-Image` | `stable_diffusion` (or `auto`) — **never `flux` / `flux2`** | `ae.safetensors` | +| **SD 1.5 / SDXL / Pony** | `SD / SDXL / Z-Image` | `stable_diffusion` | the checkpoint's own VAE | + +`SD / SDXL / Z-Image` is the *generic* slot on purpose: whenever the encoder takes an image anyway the +latent comes from `ref_latents[0]`, so this setting behaves the same for SD, SDXL, Pony, Z-Image and +Qwen-Image 1.0. It only means something ("4-channel all-zero latent") when nothing is connected. + +**Qwen-Image Layered specifics** (read off the official `image_qwen_image_layered.json`): + +- Text encoder is `qwen_2.5_vl_7b_fp8_scaled` — the **same** encoder as Qwen-Image 1.0 ⇒ `clip_type` = `qwen_image` +- VAE is **`qwen_image_layered_vae`**, not `qwen_image_vae`. Both are 16-channel, so a mismatch is + invisible until `VAEDecode` +- Latent is 5-D: `[B, 16, layers+1, h/8, w/8]` — exactly what `模型类型 = Qwen Layered` emits, + i.e. it replaces the official `EmptyQwenImageLayeredLatentImage` +- The bundled template actually runs **20 steps / CFG 2.5 / euler / simple / denoise 1** at 640 px with + `layers = 2`; its on-canvas note says the *original* settings were 50 steps / CFG 4.0 (even slower). +- Two variants ship: one starts from `EmptyQwenImageLayeredLatentImage`, the other from `VAE Encode(photo)`. + Both use `denoise 1`, so the start latent gets overwritten either way — what actually changes the + result is the `layers` count (latent dim 2 = `layers + 1`). **Only** when you want partial-denoise + refinement does the start latent matter, and then the encoder's all-zero latent is not what you want. + +**Z-Image warning:** do **not** set `clip_type` to `flux` / `flux2`. Z-Image's TE is Qwen3-4B, and +`comfy/sd.py` routes Qwen3-4B to the Flux encoder when `clip_type` is FLUX/FLUX2 — you get a different +TE class and the prompt is encoded wrong, with no error. + +Measured 2026-11-06 (same Z-Image unet, same `qwen_3_4b` + `ae`, only `clip_type` changed): + +| `clip_type` | text encoder actually built | | +|---|---|---| +| `stable_diffusion` | `ZImageTEModel_` | ✅ recommended | +| `auto` | `ZImageTEModel_` | ✅ (detects the class as `Lumina2`) | +| `qwen_image` | `ZImageTEModel_` | ⚠️ works by luck — Qwen3-4B is dispatched by TE type, not by this value | +| `flux` | `Flux2TEModel_` | ❌ wrong encoder class, silently bad prompt encoding | + +So `qwen_image` will *not* break Z-Image, but pick `stable_diffusion` (or `auto`) so the setting means +what it says. + + +### Is `clip_type = auto` reliable? + +**All 5 local models verified correct by real loading; 106 of 108 model classes agree in a static sweep.** +`auto` does not guess: + +1. It **actually loads the UNet** (not a header sniff) and reads the real class name — Qwen-Layered + comes out as `QwenImage`, Z-Image as its parent class `Lumina2`; +2. It resolves `CLIPType` in three layers — **exact table → MRO (base classes) → prefix rules**: + - the exact table only lists models where `clip_type` **actually changes the outcome** (table below); + - MRO catches subclasses: `FluxSchnell → Flux`, `KOALA_1B → SDXL`, `ZImagePixelSpace → ZImage`; + - prefix rules catch variants: `WAN21_I2V` / `WAN22_S2V` / `WAN_Animate2` … 16 WAN classes → `wan` (2 more are in the exact table); +3. Anything left falls back to `stable_diffusion` — **which is not a wrong guess**, because for that + third of the model set ComfyUI never looks at `clip_type` (the TE weights themselves already + determine which encoder gets built). + +**`clip_type` only matters when one TE weight file can go several ways.** Reading +`load_text_encoder_state_dicts` in `comfy/sd.py`, only these families are affected: + +| TE weights | Needs `clip_type` to distinguish | What you get if it's wrong | +|---|---|---| +| T5-XXL | SD3 / LTXV / WAN / CHROMA / PIXART / COGVIDEOX / MOCHI | falls into the `else` branch → **Mochi** TE | +| Qwen3-VL-8B | QWEN_IMAGE / IDEOGRAM4 / BOOGU / JOYIMAGE | generic `Qwen3VLTEModel_`; Qwen-Image 2.1 loses `image_slots` | +| Qwen3-VL-4B | KREA2 / FIBO2 / FLUX3 / MAGE / MINIMAX | same, generic Qwen3-VL | +| Qwen3-4B | FLUX / FLUX2 | Flux-family `Flux2TEModel_` (this is the Z-Image trap) | +| CLIP-G | SD3 / STABLE_CASCADE / HIDREAM | `SDXLRefinerClipModel` | +| Qwen2.5-7B | HUNYUAN_IMAGE / LONGCAT_IMAGE | the `qwen_image` TE | + +Everything else (Anima / AuraFlow / Cosmos / Lens / OmniGen2 / StableAudio / SAM / the 3D ones) +behaves identically whatever you pass, so the `auto` fallback is harmless there. + +**Measured 2026-11-06 (`clip_type = auto`, real loading):** + +| Model | What `auto` decided | TE actually built | | +|---|---|---|---| +| Qwen-Image Layered | exact `QwenImage` → `QWEN_IMAGE` | `QwenImageTEModel_` | ✅ | +| Z-Image | exact `Lumina2` → `STABLE_DIFFUSION` | `ZImageTEModel_` | ✅ | +| Krea2 | exact `Krea2` → `KREA2` | `Krea2TEModel_` | ✅ | +| FIBO 2.0 | exact `Fibo2` → `FIBO2` | `Fibo2TEModel_` | ✅ | +| MOSS-Image | exact `MOSSImage` → `MOSS_IMAGE` | `MOSSImageTEModel_` | ✅ | + +**Second safety net: the TE is validated right after loading.** If `auto` ever decides wrong (or +upstream adds a model class), it will not fail silently — the loader asks the model itself which +encoder it wants (`model_config.clip_target()`; answerable for 106 of 108 classes) and compares that +with the class actually built: + +``` +[ToggleUnifiedLoader] ⚠️ CLIP 校验失败:模型是 Krea2,但文本编码器建成了 Qwen3VLTEModel_ +(预期 Krea2TEModel,依据 手工表)。... +``` + +That check is not decoration: when `auto` gets it wrong, you see it **immediately**, instead of +discovering later that prompts "just don't work". + +**When not to use `auto`:** only if you deliberately want to pair a model with a mismatched encoder +for testing. In normal use `auto` beats hand-picking, which requires memorising the six rows above. + + +--- + + +### Z-Image: text-to-image only — pick `SD / SDXL / Z-Image`, never connect a reference image + +⚠️ Bottom line: **Z-Image has no reference-image capability. Leave `image1`–`image10` empty.** + +Evidence (measured, not guessed): + +- Of the five official `z_image` templates, `image_z_image` / `_int8` / `_turbo` / `_turbo_int8` + contain **no `LoadImage` at all** — pure text-to-image. The only one taking an image, + `image_z_image_turbo_fun_union_controlnet`, drives it through **ControlNet (Canny 0.1 / 0.32)**, + a line-art conditioning path completely different from reference-image editing. +- Z-Image is Lumina2 / NextDiT based and was never trained on reference tokens. If you do connect + `image1`, `reference_latents` is still injected into the conditioning, but the model has no matching + `reference_latents_text_embeds`, and the output becomes **a full frame of blocky mosaic** — + same result across seeds, size buckets and sampling start latents. + +**Correct usage:** `模型类型` = `SD / SDXL / Z-Image`, `image1` empty. + +This is not a workaround. With no reference images that branch emits a 4-channel all-zero +latent, which the core `fix_empty_latent_channels` pads to 16 channels — exactly the empty start Z-Image +needs. At a fixed seed it is pixel-identical to the native +`UNETLoader + CLIPLoader + VAELoader` graph (all four metrics equal: 51.5 / 214.5 / 46.9). + +**If you want Z-Image img2img:** use the native `LoadImage → VAE Encode → sampler (denoise < 1)` +instead. Prompt and denoise control the amount of change; the photo is the starting latent. + +**Reminder built in:** wire it wrong and the log says so (informational only, nothing is changed): + +``` +[Toggle-Pass][Ref Image Encode] ⚠️ 文本编码器 = ZImageTEModel_,已接入 1 张参考图, +但这个底座没有参考图通路。 +``` + +Z-Image has no separate entry in the `模型类型` dropdown by design — its behaviour is identical to the +generic `SD / SDXL` one, so the two were merged into the single name `SD / SDXL / Z-Image` instead of +adding an entry that would imply "pick this one and you can attach images". + +> Renamed 2026-11-06: the old value was `SD / SDXL`. Saved workflows are migrated automatically on +> load (front-end rewrites the widget value, back end also normalises the alias), so old graphs keep +> working unchanged. + +--- + +### Canvas Menu Entry + +All Toggle-Pass nodes are also reachable from the canvas menu (same place as KJNodes / rgthree entries): + +``` +🔄 Toggle-Pass ▸ + ├ 采样器(一体) + ├ Image Batcher + ├ Multi Ref Latent Input + ├ One Image Multi Prompt + ├ Ref Image Encode + ├ Ref Independent + └ ... +``` + +- The list is **collected at runtime** — new nodes show up automatically, no code change needed +- Clicking an item spawns the node **at your pointer position** + +--- + +### Privacy Mask + +SaveLoadImage, ToggleLoadImage, and TogglePreviewImage support privacy mask: +- Title bar shows 👁 (show image) / 🫣 (hide image) icon +- Click icon to toggle privacy state; when hidden, image preview area is blank +- Privacy state is saved/restored with workflow, does not affect image generation + +--- + +### Example Workflows + +Ready-to-load graphs live in [`example_workflows/`](example_workflows/) — drag a `.json` onto the +canvas, or open it from the workflow menu. + +| File | What it demonstrates | Extra deps | +| --- | --- | --- | +| `All-in-One Demo.json` | Every Toggle-Pass node in one graph: `ToggleUnifiedLoader`, `ToggleSampler`, `ToggleLoadImage` ×2, `ToggleImageCompare`, `TogglePreviewImage`, `DynamicRefImageEncode`, `SaveLoadImage` + `VAEDecode`. **Best place to start** — needs no third-party nodes. | — | +| `Graphic-Text Integration Editing.json` | Text + single reference image editing through `DynamicRefImageEncode`, saved by `SaveLoadImage`. | — | +| `Batch Editing.json` | Six input images batched into one reference set for batch editing. | `RTXVideoSuperResolution` | +| `Lazy Person's Multi-angle View.json` | One image + `OneImageMultiPrompt` ("一图多视角") to generate several camera angles in one run. | `CR Upscale Image` | +| `Pose Reference Editing.json` | `PoseReference` feeding a Qwen-Image-2.1 turbo edit graph (8 steps). **The selected sheet is embedded in the node**, so it opens and runs with no pose library installed. | — | +| `Krea2 Pose Editing.json` | 9 nodes, **7 of them from this plugin and zero external packs**: `ToggleUnifiedLoader` (UNet + CLIP + VAE + `krea2_identity_edit_v2` LoRA in one node) + `ToggleLoadImage` + `PoseReference` → `Ref Image Encode` (`模型类型 = Krea2`; pose sheet into `image1`, photo into `image2`, latent and negative both taken from its own outputs) → `ToggleSampler` on the `Krea 2 turbo(8步)` preset → `ToggleImageCompare` / `SaveLoadImage`. Measured 8 steps / 720×1440: ~70 s, standing → seated, no line-art bleed, likeness kept. | none | +> The model filenames inside these graphs reflect the author's local setup. If a loader shows red +> after loading, point it at your own checkpoint / text encoder / VAE. + +--- + +### Notes + +- When `num_images` changes, input/output slots auto-adjust, **existing connections are not broken** +- Switching pages and back, nodes auto-restore to correct slot count +- Requires Qwen2.5-VL or compatible CLIP model; Qwen-Image-2.1 requires Qwen3-VL 8B + `qwen_image` clip type +- Default instruction is for Qwen-Image-Edit models, modify as needed +- Only parameters relevant to the selected `模型类型` are shown; the rest are hidden +- Illegal widget values (e.g. `倍数 = NaN`) fall back to safe defaults on load. **After upgrading, + restart ComfyUI and hard-refresh (Ctrl+F5) once**, then save your workflow +- ⚠️ Modern node design (Vue nodes) breaks `widget.hidden` and custom drawing — with it enabled every + parameter stays visible and the privacy icon disappears. Turn it off in ComfyUI settings. +- ⚠️ On quantized checkpoints (INT8/FP8) a LoRA still takes effect, but it comes out "blurrier": ComfyUI + dequantizes → patches → re-quantizes with stochastic rounding, so the delta keeps its magnitude + (~115%) while its direction picks up noise (cosine 0.4–0.7). Pose/structure LoRAs stay visible, + very subtle style LoRAs may not. This is upstream behavior — official `LoraLoader` is identical + (A/B with the same seed gave **pixel-identical** output, meanAbsDiff = 0.00) +- The loader reports how many patches each LoRA actually wrote **plus module coverage** + (`192/224p`) — see the button labels above. A missing fraction usually means the checkpoint was + repacked and those layers don't exist in it, not that the LoRA failed to load +- ⚠️ **CLIP check (split mode)**: after loading, the loader verifies the text-encoder class it actually + built (e.g. `QwenImage21TEModel_` vs a wrong `QwenImageTEModel_` / `Flux2TEModel_`). A mismatched CLIP + file still runs silently but makes the conditioning useless; the button then shows `⚠️CLIP不符` + and the log prints the expected class + what to do +- ⚠️ **VAE check (split mode)**: the loader also compares latent channels / dimensions against the model. + A mismatched VAE never fails at load time — it dies later inside `VAEDecode` + (`IndexError: tuple index out of range`), so the loader now warns immediately and names the file to use +- Hiding/collapsing a LoRA group **reclaims the node height**, so the node never stays as a long empty box +- **Selection box on canvas follows the mouse again**: ComfyUI 1.57.x clamps the drag-selection rectangle to + `.graph-canvas-panel`, which only covers the lower part of the canvas — dragging in the upper half pushed the + box's top edge down (and squashed its height to 0), so the box seemed to appear "somewhere else". + `js/selection_rect_fix.js` rewrites that box's position from the real mouse points. Disable it with + `localStorage.setItem("tp_selrect_fix", "off")` in the browser console + refresh +- Python changes require a **ComfyUI restart**; pure JS changes only need Ctrl+F5 + +--- + + +## 中文 + +Toggle-Pass 系列节点——开关控制、图片加载/保存/预览、隐私遮罩、多参考图动态编码、统一模型加载、一体化采样器。 + +### 节点说明 + +#### ToggleUnifiedLoader — 统一模型 + LoRA 加载器 + +一体化模型加载节点:UNet + CLIP + VAE + 多 LoRA 整合到一个节点中。 + +**加载模式**(`加载模式`)— 一个节点,两种加载方式: + +| 模式 | 作用 | 显示的参数 | +|---|---|---| +| `分离组件 (UNet+CLIP+VAE)`(默认) | UNet / CLIP / VAE 分别指定 | `unet_name`、`clip_name`、`vae_name`、`clip_type` | +| `Checkpoint 一体包` | 加载一体化 checkpoint(等同官方 **CheckpointLoaderSimple**):自动猜配置,UNet + CLIP + VAE 一次出齐 | 只显示 `ckpt_name` | + +- **加载模式做成了一个两段式开关 `UNet | Checkpoint`**(不再是下拉框):点左半是分离组件、点右半是一体包, + 当前档高亮。开关位于**节点顶部第一行,与输出插槽 `模型 / MODEL` 同一行**,左端与**下方所有下拉框的 + 左边缘对齐** +- 底层 `加载模式` 的值照常保存与序列化,**旧工作流与 API 调用完全不受影响** —— 开关只是接管了绘制与点击 +- 「现代节点设计」(Vue 节点渲染)下,开关会改为画在下拉框内部 +- 选 `Checkpoint 一体包` 时,分离的三个模型下拉会自动隐藏,界面不眼花 +- **两种模式都能加 LoRA** —— LoRA 组在加载完成后统一应用 +- VAE 用一体包自带的(与官方简易版一致) +- **参数顺序:模型在最前** —— `ckpt_name` → `unet_name` → `clip_name` → `vae_name` → `clip_type` + → `加载模式` → LoRA 组 → 按钮。一体包模式下第一行就是 checkpoint 下拉框 +- 旧工作流能正常加载:加载时会按**参数名**把保存的值对回去,不会串位 +- 缺失的值仍然回退到默认模式(分离组件) + +**输入**: +- `ckpt_name` — `models/checkpoints` 里的 checkpoint 文件(只在「Checkpoint 一体包」模式下显示) +- `unet_name` — UNet 模型文件 +- `clip_name` — CLIP 文本编码器文件 +- `vae_name` — VAE 模型文件 +- `clip_type` — CLIP 类型(支持 auto 从 UNet 自动检测,也可手动选择:SD、SD3、FLUX、FLUX2、`qwen_image` 等) + - 自动检测能识别 Qwen-Image-2.1 的 UNet 类名(`QwenImage21`)并映射到 `qwen_image` + - ⚠️ **这是 2.1 的必备条件**:只有 `CLIPType.QWEN_IMAGE` 才能加载 2.1 专用文本编码器(Qwen3-VL 8B), + 它会生成 `image_slots`;否则会退回通用 Qwen3-VL 编码器,**参考图被静默丢弃** + - 也支持手动指定:怀疑自动检测没生效时直接选 `qwen_image` + - 现已支持 `fibo2` / `moss_image`(按 UNet 类名 `Fibo2` / `MOSSImage` 自动识别)。 + 这两个和 `krea2` **共用同一批权重文件**(FIBO 2.0 用 Qwen3-VL-4B,MOSS-Image 用 Qwen3.5-**9B**), + 但**取层方式完全不同** —— 选错不是「效果差一点」,而是 conditioning 维度对不上。 + 加载器同时校验文本编码器类名(`Fibo2TEModel_` / `MOSSImageTEModel_`)和 VAE + (两者都走 Flux2 latent,必须用 `flux2-vae*`,不能用任何 qwen VAE)。 +- `+ 添加 LoRA` 按钮 — 点击逐个添加 LoRA 槽位(最多 10 组) +- `- 移除 LoRA` 按钮 — 点击从最后一组开始移除(最多 10 组) + +**LoRA 控件**(通过按钮添加,最多 10 组): +- 选择 LoRA 文件 → 自动展开**一个**「强度」滑块 +- 选择 "none" → 自动隐藏滑块 +- 多个 LoRA 按顺序依次应用 + +> **只有一个强度滑块是有意为之**:CLIP 侧**始终跟随 MODEL 侧**,保证「看到的强度 = 实际生效强度」。 + +**跑完之后按钮上直接告诉你 LoRA 到底写没写进去**(后端回传,不用再猜): + +| 按钮文案 | 含义 | +|---|---| +| `· 224p` | LoRA **确实写进了模型**,共 224 个 patch(数字是 Python 侧统计的真实值) | +| `· 192/224p` | 这份 LoRA 的 224 个模块里只落下 192 个,剩下 32 个在当前底座上**没有对应层**。典型于**被 repack 过的 INT8 一体包**(如 `img_mlp.gate_layer` 被融进 `gate_up`),不是节点的问题 | +| `· ⚠️未写入` | 一个 patch 都没挂上 —— 架构不匹配 / 文件不对 | +| `· ⚠️N不匹配` | N 个 LoRA 的键名跟底座完全对不上(拿错底座的 LoRA) | +| `· ⚠️N跳过` | N 个 LoRA 被跳过(文件找不到) | +| `· ⚠️N个强度0` | 有 N 个已选 LoRA 强度是 0 —— 等于没加 | +| `· ⚠️CLIP不符` | 建出的文本编码器与模型不配套(分体模式下换错 CLIP 文件 / 选错 clip 类型)—— 提示词会被错误编码,跑得通但什么都不生效 | + +按钮文案故意写得很短(太长会溢出窄节点),鼠标悬停在按钮上能看到**每个 LoRA 的完整明细** +(模块覆盖率、CLIP 校验结果、每个槽位实际写入的 patch 数); +另外只要增删/切换 LoRA,上一次运行的数字会立刻清掉,不会留一个过期读数误导你。 +注意它反映的是「patch 有没有写进去」,不等于「画面上一定看得出来」——量化底座、参考图主导的编辑、过于细微的 LoRA,都会让效果不明显。 + +**输出**:`MODEL`、`CLIP`、`VAE` + +**全局广播**(节点自带开关,不需要装任何额外插件): + +打开后,点「运行」时会把这三个输出**自动接到图里所有空着的** `MODEL` / `CLIP` / `VAE` 输入上, +不用再横跨半张画布拉线。关掉(默认)就完全保持原样,自己连线。 + +- 这些线**只在提交的那一刻真实存在**,提交完立刻拆掉 —— 不会被存进工作流 +- **开关打开时,画布上会用紫色曲线画出「运行时会自动接上的每一条线」**,起点/终点各有一个小圆点, + 精确落在输出口和输入口上。曲线只是视觉预览:不创建真实连线、不参与序列化,关掉开关立刻消失 +- **会被接上的槽位会「点亮」**:这些口还是空的(没有真实连线),官方按「未连接」画成空心圈, + 所以广播开着时会给它们补一个**实心点**,颜色就是该槽位类型的官方配色 —— 和手动连线后的观感一致, + 一眼就能看出「哪些口会被自动接上」、哪些本来就连好了。关掉开关就恢复空心 +- **曲线和圆点都从节点背后穿过**:画在节点下层,节点之间的空白处正常显示,穿过节点的地方(含端点圆点 + 被节点压住的那半边)被节点自然遮住,所以永远不会盖住节点标题和参数,也不会在你拿节点当遮罩时透出来 + (节点排得密时可见部分会少一些,这是刻意的取舍) + - 想回到「圆点永远画在最上层」的旧观感:控制台执行 `localStorage.tp_dots_layer = "front"` 再刷新 +- **只补空位**:凡是已经手连的输入一律不动,所以「自动」和「手动」可以在同一张图里混用 +- 只覆盖 `MODEL` / `CLIP` / `VAE`(也就是本节点的三个输出) +- 如果图里有多个加载器都开了广播,同一类型只取第一个,并在控制台给出提示 +- **开关在节点顶部**:就在 `加载模式` 那个 `UNet / Checkpoint` 胶囊的**正下方、左半边**(一个小胶囊, + 左边写「广播」)—— 点一下切换。它不再占用节点底部一整行,底部只剩 LoRA 那两个按钮 +- 开关状态存在节点的 `properties` 里,**不占 `widgets_values`** —— 旧工作流的每一项参数位置都不变, + 开关默认关闭 +- 与 `cg-use-everywhere` 共存,不碰它那套 `ue_convert` 标记 + +> **限制**:广播发生在前端,所以「界面里点运行」和「从界面导出 API 格式」都算数; +> 但直接 `POST /prompt` 提交手写的 API JSON 不经过前端,就不会自动接线 —— +> 需要的话在界面里导出一次 API 格式,导出的 JSON 里线已经带好了。 + +--- + +#### SaveLoadImage — 保存/加载切换 + +图片保存节点,支持 Save/Load 模式切换。 +- **Save 模式**:保存图片到 output 目录,同时输出 IMAGE 和 MASK +- **Load 模式**:直接复用上次保存的图片,跳过保存流程 +- 点击标题栏 👁 图标可切换隐私遮罩(隐藏/显示图片预览) + +#### ToggleLoadImage — 加载图片 + +自定义加载图像节点,和原生 LoadImage 功能一致,额外支持隐私遮罩。 +- 点击标题栏 👁 图标可切换隐私遮罩(隐藏/显示图片预览) + +#### TogglePreviewImage — 预览图片 + +自定义预览图像节点,不保存到 output 目录(保存到 temp),支持隐私遮罩。 +- 点击标题栏 👁 图标可切换隐私遮罩(隐藏/显示图片预览) + +#### ToggleEmptyLatent — 开关空 Latent + +可切换的空 Latent 生成节点。 +- **ON**:使用 width/height 参数生成 +- **OFF**:使用 fallback_width/fallback_height 参数(可用于 A/B 尺寸对比) +- **`latent类型`** — 通道数与空间压缩比,必须和底模的 `latent_format` 对齐: + | 选项 | 通道 | 压缩比 | 适用模型 | + |---|---|---|---| + | `SD / SDXL(4 通道 · 8×)` | 4 | 8× | SD 1.5 / SDXL / Pony | + | `SD3 / Flux / Krea 2(16 通道 · 8×)` | 16 | 8× | SD3、Flux.1、**Krea 2**(走 Wan21 格式,`latent_dimensions=3`)| + | `Qwen-Image 2.1(64 通道 · 16×)` | 64 | 16× | Qwen-Image 2.1 | + | `Flux2(128 通道 · 16×)` | 128 | 16× | FLUX.2 | + + 默认是 `SD / SDXL`,老工作流行为不变。选错**不会报错** —— K采样器发现 latent 全零时 + 会用 `fix_empty_latent_channels` 悄悄补齐通道,但绕过采样器直接用 latent 的节点拿到的形状就是错的。 + 选对时输出与官方 `EmptySD3LatentImage` 完全一致(实测 shape、dtype、`downscale_ratio_spacial` 全等,张量差为 0)。 + +--- + +#### DynamicRefIndependent — 多参考图独立编码(核心节点) + +每张参考图独立 VAE 编码,输出各自独立的 CONDITIONING 和 LATENT,适合多图各自控制风格/内容的场景。 + +**输入**(动态,由 `num_images` 控制): +- `clip` — CLIP 模型 +- `vae` — VAE 模型 +- `num_images` — 参考图数量(1~10) +- `instruction` — 系统提示词(可留空使用默认) +- `image1` ~ `imageN` — 参考图 +- `prompt1` ~ `promptN` — 每张图对应的提示词(控件在节点内,可折叠) + +**模型类型**:`Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL / Z-Image` +- 选择 `Qwen Image 2.1` 会展开 2.1 专属参数组(见 [Qwen Image 2.1 支持](#qwen-image-21-支持)) +- 选择 `Qwen Layered` 会展开「图层数」 +- `SD / SDXL / Z-Image` 是通用档;**纯文生图模型(如 Z-Image)用它,且参考图槽别接**(见 [Z-Image 用法](#z-image-用法)) +- 每种模型只显示自己用得上的参数,其余自动隐藏,界面不会眼花 + +**输出**(动态,N×2 个): +- `cond_1`, `latent1`, `cond_2`, `latent2`, ... `cond_N`, `latentN` + +**用法**: +1. 拖入节点,默认 1 张参考图 +2. 调整 `num_images` 到需要的数量(1~10),输入槽和输出槽自动增减 +3. 每张图连接自己的参考图,填写对应 prompt +4. `cond_N` 连到 sampler 的 conditioning,`latentN` 连到 VAE Encode 的 latent(供参考图编码使用) + +--- + +#### DynamicRefImageEncode — 动态参考图编码 + +单张 prompt 控制,动态增删参考图输入槽。 + +**输入**:`clip`, `num_images`, `prompt`, `image1` ~ `imageN` +**输出**:`CONDITIONING`, `LATENT`, `NEGATIVE`(所有图共享同一份 conditioning,分别输出 latent)。 +第二个输出是**现成的空文本负条件**(用同一个 CLIP 编码),直接接采样器的「负面条件」即可。 +用它替代「把正面条件 `ConditioningZeroOut` 清零当负面」:CFG=1.0 时两者完全一样, +但 CFG 一超过 1,清零版会把整张图弄花。 +这个输出只在 `Ref Image Encode` 上有;`Ref Independent` / `一图多视角` 要用 CFG>1 时, +请自己接一个空文本的 `CLIPTextEncode` 到负面。 + +**模型类型**:`Flux2` / `Qwen Layered` / `Qwen Image 2.1` / `SD / SDXL / Z-Image` / `Krea2` +- `SD / SDXL / Z-Image`:通用档,输出 4 通道全零 latent,由官方 `fix_empty_latent_channels` 补到模型需要的 + 通道数。**纯文生图模型(如 Z-Image)就用这个档,参考图槽一个都别接** —— Z-Image 没有参考图通路, + 接上必出方块马赛克,详见 [Z-Image 用法](#z-image-用法) +- `Qwen Layered`:增加「图层数」参数;输出的 latent 为分层格式(`[1, 16, layers+1, h/8, w/8]`),可直接接到 K采样器的 latent 输入(省掉 `EmptyQwenImageLayeredLatentImage` 节点) +- `Qwen Image 2.1`:增加 2.1 专属的分辨率参数组(详见下方小节) +- `Krea2`:latent 走 Wan21(16 通道 / 8x,VAE 是 `qwen_image_vae`);参考图只进 `reference_latents`, + 采样起点是全零 latent,并自动补 `reference_latents_method=index`(不给就会被静默忽略)。 + **故意不用 `index_timestep_zero`** —— 那会给参考图单独一套 t=0 的 adaLN 调制,与 krea2_edit 系 LoRA + 的训练方式(全序列共用一个 tvec)不符。实测:用 `index_timestep_zero` 时参考线稿会被「描」进画面 + (脸上出现轮廓线),用 `index` 则干净。参考图的 latent 还会 fit 到出图网格,详见下方 Krea 2 小节 +- **`MOSS-Image` / `FIBO 2.0` 请直接选 `Flux2`** —— 三者 latent 完全同族(128 通道 / 16x,都用 `flux2-vae`)。 + 实测把参考姿势节点接成第二张图能正常改姿势(MOSS 16.7s / FIBO 10.6s,画面内无线稿残留)。 + 但 MOSS 的 `edit_format`(三档训练格式,必须与 LoRA 配对)、`image_strength`, + 以及 FIBO 的 `negative_prompt` 本节点都不提供 —— 需要精确控制这三项时, + 请改用官方编码器 `TextEncodeMOSSImageEdit` / `TextEncodeFibo2`(它们是多图 AUTOGROW,本节点接哪个都能直接插) +- 每个模型类型只显示自己需要的参数,切换下拉框即自动隐藏其余的 +- 「匹配原图尺寸」= ON 时,使用图片实际尺寸;= OFF 时,2.1 走分辨率参数组,其他模型仍用「输出宽度/高度」(旧行为不变) + +#### DynamicRefLatentInput — 动态 Latent 输入 + +动态增删 LATENT 输入槽,配合 DynamicRef 系列使用。 + +#### ImageBatcher — 图像批处理 + +动态增删 IMAGE 输入槽,将多张图打包成批次。 + +#### ToggleImageCompare — 图片对比 + +把多张「原图」与多张「结果」拼成一张对比图,节点内直接预览。 + +**输入**:`num_sources`、`num_results`、`source1`~`source10`、`result1`~`result10` +- `num_sources` / `num_results` — 每组显示几个槽(1~10),两组各自独立, + 所以 **N 张原图 + 1 张结果** 和 **N 张原图 + N 张结果** 都支持 +- `source1`~`source10` — 原图(before) +- `result1`~`result10` — 结果(after) + +> 节点上显示为 `原图1`~`原图10` / `结果1`~`结果10`、`原图数` / `结果数`、输出 `对比图`; +> 上面这些英文 key 保持不变,为了兼容已保存的工作流。 + +**参数** +- `排版` — `自动` / `成对并排` / `上下两排` / `自动网格` + - `自动`:两组数量相等时用「成对并排」,不等时用「上下两排」 +- `标签` — 在每张图上烧 `原1 / 结1 …` 角标,或隐藏 + +**输出**:`comparison` —— 一张合成图(可直接接 `SaveLoadImage` 或预览节点) + +排版按**实际接上的图**算,而不是你开了几个槽,所以数量变了也不用改设置。尺寸不一样的图会 +按行统一高度缩放(保持宽高比)。 + +#### OneImageMultiPrompt — 单图多提示词(一图多视角) + +一张参考图对应多个提示词,分别输出各自的 conditioning(最多 8 组),共享同一个 latent。 + +**输入**:`clip`、`image`、`prompt数量`、`prompt1` ~ `prompt8` +- `prompt数量` — 用几个提示词(2~8),多余的 prompt 框会自动隐藏 +- `模型类型` — `Flux2` / `Qwen Image 2.1` / `SD / SDXL / Z-Image` / `Krea2`。选 `Qwen Image 2.1` 会展开完整的分辨率参数组, + 适合「一张图出多个视角 / 多种编辑」。纯文生图模型(如 Z-Image)选 `SD / SDXL / Z-Image` 且不接参考图, + 见 [Z-Image 用法](#z-image-用法)。 + +**输出**:`cond_1` ~ `cond_8`、`latent` + +--- + +#### ToggleSampler — 采样器(一体) + +把官方四件套收进一个节点: + +``` +随机噪波 + CFG引导器 + K采样器选择 + (基础调度器 | 手动Sigmas) -> SamplerCustomAdvanced +``` + +**输入**:`模型`(MODEL)、`正面条件` / `负面条件`(CONDITIONING)、`Latent图像`(LATENT) +**参数**(按节点上的显示顺序):`⚡预设`、`Sigma 曲线`、`采样器`、`调度器`、`步数`、`CFG`、`降噪`、`噪波随机种`、`自定义Sigma表` +**输出**:`Latent`、`降噪Latent` + +> 控件的**显示名**和内部参数名是分开的:`⚡预设` 的内部名是 `模型预设`,`Sigma 曲线` 的内部名是 +> `采样方案`。之所以只改 label 不改 name —— 存档的 `widgets_values_named` 和 `/prompt` 的 `inputs` +> 都按 name 走,改 name 等于让所有已存工作流失联。 + +模型 / 条件 / Latent **故意保留成插槽**——真正随模型变的只有 sigma 曲线,所以换模型不用换节点。 +`Sigma 曲线` 分三类: + +| 方案 | 作用 | 生效参数 | +|---|---|---| +| `自动(按步数 + 调度器)` | 现场算 sigma,与官方 `BasicScheduler` 数值完全一致 | `步数` + `调度器` | +| 预置表:`Qwen-Image-2.1 turbo 8步`、`LTX-2 视频 8步(蒸馏)`、`LTX-2 视频 3步(低噪)` | 蒸馏模型专用的固定轨迹 | 无——步数已写进表里 | +| `自定义表` | 手填一串 sigma | `自定义Sigma表` | + +sigma 表规则:逗号分隔、**严格递减**、**末值必须是 0**、`N` 个点 = `N-1` 步(9 个点 = 8 步)。 + +选了预置表之后失效的参数会自动变灰**并锁住**:`步数` 会跳到该表真实的步数(看得见但改不动), +切回 `自动` 会还回你自己设的步数。`降噪` < 1.0 会裁掉表的尾部,所以预置表也能做低降噪细化。 + +蒸馏 turbo 模型推荐 `采样器` = `euler`、`CFG` = `1.0`。 + +#### ⚡预设(一键填好常用参数) + +节点**最上面**的 `⚡预设` 是一个快捷填充:选中某个模型,它会把 +`Sigma 曲线 / 采样器 / 调度器 / 步数 / CFG` 五项一次性改好,不用每次手动调。 +`降噪` 和 `噪波随机种` 不归它管(那两项取决于任务,不是模型)。 + +放在最上面而不是最下面,是因为真实顺序就是「先定模型、再微调」;两个下拉挨着也容易 +被误认为重复,所以名字也分开了:`⚡预设` 管一整套参数,`Sigma 曲线` 只管噪声轨迹。 + +| 预设 | Sigma 曲线 | 采样器 | 调度器 | 步数 | CFG | +|---|---|---|---|---|---| +| Qwen-Image 2.1(25步) | 自动 | euler | simple | 25 | 1.0 | +| Qwen-Image 2.1 turbo(8步·固定表) | 预置表 | euler | simple | 8 | 1.0 | +| Krea 2 turbo(8步) | 自动 | euler | simple | 8 | 1.0 | +| Krea 2 turbo・细节增强(12步) | 自动 | euler | simple | 12 | 1.0 | +| FLUX.2 klein(4步·beta) | 自动 | euler | beta | 4 | 1.0 | +| FLUX.2 klein・高清修复(4步) | 自动 | euler_ancestral | simple | 4 | 1.0 | +| Z-Image turbo(8步) | 自动 | euler_ancestral | simple | 8 | 1.0 | +| Qwen-Image Layered(9步·CFG2.5) | 自动 | euler | simple | 9 | 2.5 | +| Qwen-Image Edit 2511 AIO(4步) | 自动 | euler_ancestral | beta | 4 | 1.0 | +| FIBO 2.0 turbo(4步) | 自动 | euler | simple | 4 | 1.0 | +| MOSS-Image(30步·CFG4) | 自动 | euler | normal | 30 | 4.0 | +| 手动(不套用) | — | — | — | — | — | + +**语义是「一键填充」,不是「持续锁定」**:套完预设后你手动改这五项里的任何一个, +下拉会自己退回 `手动(不套用)`——所以控件显示的永远是真实状态, +不会出现「写着 Qwen 预设、其实在跑 40 步」。 + +预设表只写在 `sampler.py` 的 `MODEL_PRESETS` 里,前端通过 +`GET /toggle_pass/sampler_presets` 拉取,**不在 JS 里另抄一份**;加模型只改 Python 一处。 +改名时请在 `PRESET_ALIASES` 里补一条「旧名 → 新名」,否则已经存过旧值的存档会显示空白。 + +数值全部取自本机 `user/default/workflows/` 里实际跑通的工作流(每个预设的上游文件 +写在 `sampler.py` 的注释里),改之前请先跑一遍再回头调这张表。 + +--- + + +### 参考姿势(Pose Reference) + +`PoseReference` 从本地姿势素材库里挑一张参考图,以普通 `IMAGE` 的形式交给任意编辑模型的图像输入—— +不需要 ControlNet,也不需要额外模型。 + +**素材目录结构**——节点会合并最多三个根目录,按名字去重,同名以靠前的为准: + +| 顺序 | 根目录 | 说明 | +|---|---|---| +| 1 | `TP_POSE_ROOT` 环境变量 | 只有你设了才生效,指向完全自定义的位置 | +| 2 | `ComfyUI/models/pose_reference/` | 推荐放自己的和私密素材——备份 `models` 时会一起带走 | +| 3 | `custom_nodes/ComfyUI-Toggle-Pass/pose_assets/` | 插件自带,随插件分发 | + +每个根目录内部结构一样: + +``` +<根目录>\ +├─ 01_AI线稿姿势\ 线稿套 +│ └─ <大类>\<姿势组>\\.webp +└─ 02_AI深度姿势库\ 深度套(路径、文件名与线稿套一一对应) +``` + +两套完全对应,所以节点只索一套,取图时再按 `源` 决定去哪个根目录拿。 +丢一个新目录进去,约 15 秒内下拉里就会自己出现——不用重启,也不用刷新页面。 + +**输入** + +| 参数 | 说明 | +|---|---| +| `类别` | 上半身单人 / 全身单人・标准系 / 全身单人・性感系 / 双人缠绵 | +| `姿势组` | 站姿 / 坐姿 / 蹲姿 等,共 30 组 | +| `姿势` | `P###_名称`,共 288 个。编号在不同大类里会重复,所以以完整目录名为准 | +| `视角` | 正面 / 侧面 / 斜侧 / 俯视 / 仰视 | +| `源` | `线稿`(默认)或 `深度` | +| `长边` | 输出图长边,默认 1024——素材原始只有 300×400。缩放后会向下对齐到 **16 的倍数**(VAE 下采样要求),所以实际长边可能比设定值小最多 15px | +| `翻转` | 水平镜像,左右相反的姿势不用另找素材 | + +前三个下拉是联动的:选了大类只列该类下的姿势组,选了组只列该组下的姿势。 +**任意一个下拉一改,节点下半部分立刻重画**——选中的那张素材直接显示在参数下面,不用先执行工作流。 +节点首次加载时会自动撑高给图片腾位置;想看得更大就把节点右下角往下拉。 + +**怎么接** + +``` +[参考姿势 Pose Reference] ──image──▶ [文本编码器 Qwen Image 2.1] .images ─┐ + ├─▶ K采样器 ─▶ VAE解码 ─▶ 保存图像 +[UNet 加载器] [CLIP 加载器] [VAE 加载器] ────────────────────────────────┘ +``` + +1. 画布空白处双击,搜 `Pose Reference`(分类 `Toggle-Pass`),或用右键菜单 新建节点 → Toggle-Pass → 参考姿势。 +2. 依次选 `类别` → `姿势组` → `姿势` → `视角`,每选一次节点上的图就跟着换,选到满意为止。 +3. 把 `image` 输出接到编辑编码器(`TextEncodeQwenImage21`、`TextEncodeFibo2` 等)的 `images` 输入, + 其余节点跟你平时的文生图/图编辑工作流完全一样。 +4. `长边` 决定送进编码器的分辨率,1024 足够(素材本身只有 300×400)。输出会自动向下对齐到 16 的倍数,这样 `VAEEncode` 不需要自己 pad/crop——线稿对半像素位移特别敏感,错一点整个人就歪了。 +5. 需要左右镜像的同一姿势,把 `翻转` 设成 `开`,不用另找素材。 + +**⚠️ 接「编辑模型」(2511 / FLUX.2 / MOSS-Image / FIBO 2.0)必须接两张图** + +单张接法在这些模型上**不报错、能出图,但人物姿势一点都不变**——这跟兼容性无关,是语义问题: +编辑编码器的 `image1` 被模型当成「这张就是要被修改的原图」,你把线稿接到 `image1`, +任务就退化成「把这张线稿重绘成真人」,提示词里再怎么描述动作都没用。 + +正确画法是**多图编辑**:待修改的原图接 `image1`,参考姿势接 `image2`。 + +``` +[加载图像] ────image───▶ .image1 ┐ + ├─▶ [文本编码器 Qwen Image Edit 2511] ─▶ K采样器 +[参考姿势] ────image───▶ .image2 ┘ 提示词:保持 image1 的人物和服装,把姿势改成 image2 的姿势 +``` + +`TextEncodeQwenImageEditPlus` 的 `image1 / image2 / image3` 都是 `IMAGE` 类型,本节点输出可以直接接, +不用加任何转换节点。实测 2511 与 FLUX.2 在多图接法下都会按 `image2` 的骨架重摆人物。 + +MOSS-Image 与 FIBO 2.0 同理,只是插槽叫自动增长的 `image_0/image_1`、`image_1/image_2`: + +``` +[加载图像] ──▶ .image_0 ┐ + ├─▶ TextEncodeMOSSImageEdit ─▶ K采样器 +[参考姿势] ──▶ .image_1 ┘ edit_format 必须与 edit LoRA 的训练格式一致 +``` + +实测这两个模型都能把一张站姿照片改成素材里的坐姿(MOSS 20.2s / FIBO 16.1s), +人脸、发型、服装、背景均保持不变。⚠️ MOSS 的编辑能力来自 `moss_image_edit_lora_bf16`, +不加载它就只有 SFT 底座,指令基本不生效。 + +**Krea 2:先看本插件的节点;装了两套外部节点包的话再往下看** + +**本插件自己的节点就够了,不需要任何外部插件。** `Ref Image Encode` 把「模型类型」选成 `Krea2`, +就能复现 `ComfyUI-krea2Edit` 两个节点做的事 —— 因为 ComfyUI 原生 krea2 的 `_forward` **本来就有** +这条 in-context 参考通路(`ref_latents` → 干净 tokens 放 frame 1..N,target 放 frame 0), +`Krea2EditModelPatch` 只是手工把它重建了一遍。两个前提,节点现在都替你处理了: + +1. `reference_latents_method = index`,**不是** `index_timestep_zero`(后者把 adaLN 调制拆成两个 + 时间步,参考线稿会被描进画面); +2. 每张参考图的 latent 在 VAE 编码前先 fit 到出图网格 —— `h/w` 与采样起点逐维相同, + RoPE 位置只在 frame 轴上不同。 + +``` +[参考姿势] ─image─▶ .image1 ┐ + ├─▶ [Ref Image Encode(模型类型 = Krea2)] ─条件─▶ [采样器(一体)] ─▶ [VAE解码] +[加载图像] ────image─▶ .image2 ┘ └latent(全零 16 通道)┘ +``` + +它还有一个专门的 `negative` 输出(用同一个 CLIP 编出来的空文本条件)—— 接到采样器的「负面条件」, +这样以后想把 CFG 提上去也不会花屏。 + +⚠️ **顺序是硬约定:最后一个参考图 = 主体。** 姿势线稿放 `image1`、原照片放 `image2`。 +反过来会直接渲成一个线稿人偶(实测)—— 因为模型会把线稿当成「要画的东西」而不是「条件」。 +实测 8 步 720×1440:70s 出图,坐姿正确、画面干净、人物一致性保持,全程不用外部节点。 + +⚠️⚠️ **提示词必须把姿势写具体,这是最容易踩的坑。** +只写「图二美女参考图一的姿势,重新摆pose」这种笼统句子(同参数、同 seed 实测)—— +模型不会去「理解」线稿,而是把线稿人偶当成画面里的**第二个主体**,直接输出 +「左边真人 + 右边线稿人偶」的并排拼贴图。姿势一个字都不会动。 + +同一个姿势(P068 跪立后仰・手触脚跟 / 斜侧),三种写法实测: + +| 提示词 | 结果 | +| --- | --- | +| `图二美女参考图一的姿势,重新摆pose` | ❌ 左人+右线稿人偶的拼贴,姿势未变 | +| `让图二中的女人摆出图一那个姿势:跪立、身体向后仰、胸部抬起、背部拱起,双手向后下方伸去触摸脚跟,头部微微后仰,采用四分之三侧后方视角。保持她的脸、发型、深蓝色泳装和海滩背景不变。` | ✅ 单人物,姿势到位 | +| 同上的英文版 | ✅ 单人物,姿势到位(手更贴脚跟一点) | + +写提示词的三个必填项: +1. **主体指认** —— 明确「图二中的女人」(不是「图二美女」) +2. **姿势的解剖描述** —— 躯干方向、四肢位置、手放哪里、头朝哪、机位角度。 + 光说「参考图一的姿势」等于没说 +3. **保持不变的东西** —— 脸/发型/服装/背景逐项列出 + +中文可用,不必强行写英文;但**姿势动作词越具体越准**。 + +⚠️ 请用 `DynamicRefImageEncode`(即 `Ref Image Encode`),不要用 `DynamicRefIndependent`: +后者把每张图编进**各自独立**的 conditioning(那是为 Qwen 2.1 的每图独立 index 平面设计的), +合并起来给不了 Krea2 一条连贯的参考序列 —— 实测会线稿残留 + 姿势跑偏。 + +**如果你要用外部节点包**,本机这两套**互不兼容**,插槽语义完全不同, +混用会得到「不报错、但线稿被画进画面」的结果。选错节点包 ≈ 白跑: + +| 节点包 | 编码器 | patch 节点 | 参考姿势该接哪 | 结果 | +| --- | --- | --- | --- | --- | +| `ComfyUI-Krea2-Ostris-Edit` | `TextEncodeKrea2OstrisEdit` | `Krea2OstrisEditModelPatch` | `image2`(配 `image1`=原图) | ✅ 骨架驱动,线稿不进画面 | +| `ComfyUI-krea2Edit` | `Krea2EditGroundedEncode` | `Krea2EditModelPatch` | `image_b` + `source_latent_b` | ❌ 线稿被当成「第二个主体」画进画面 | + +**能用骨架图的是 Ostris 那套**: + +``` +[加载图像] ─image─▶ [FluxKontextImageScale] ─▶ .image1 ┐ + ├─▶ TextEncodeKrea2OstrisEdit ─┐ +[参考姿势] ─image─▶ [FluxKontextImageScale] ─▶ .image2 ┘ (正/负各一个编码器) │ + ▼ +[加载扩散模型] ─▶ [Krea2OstrisEditModelPatch] ─▶ [加载 LoRA] ─▶ K采样器(8步 euler simple CFG1) +``` + +`TextEncodeKrea2OstrisEdit` 的 `image1 / image2 / image3` 都是 `IMAGE`,本节点输出直插 `image2`。 +实测(同一张海边站姿照片 + 素材 `P017_正坐・挺胸后仰`):`krea_outfittransfer` + `kv_cache=开`, +8 步 36.1s 变成沙滩坐姿,**画面里没有线稿残留**,脸/发型/比基尼/背景均保持。 + +⚠️ 三个必须配对的点: +1. **`kv_cache` 必须跟 LoRA 的训练方式一致**。ai-toolkit 用 `kv_cache` 训练的(如 + `krea_outfittransfer`)要开;普通训练的编辑 LoRA 开了会跑偏。 +2. **LoRA 必须和节点包配套**。把 `krea2_identity_edit_v2`(krea2Edit 系)接到 Ostris 节点上, + 线稿同样会被当成主体贴上去——实测过,两者几何不一致。 +3. **条件上要包一层 `FluxKontextMultiReferenceLatentMethod`**(`index_timestep_zero`), + 正负各一份,官方工作流就是这么接的。 + +只有 krea2Edit 系 LoRA 时也能改姿势,但只能**用文字描述**,不能给骨架图: + +``` +[加载图像] ─▶ source_latent / image ─▶ Krea2EditModelPatch ─▶ K采样器(8步 euler simple CFG1) +提示词:让她坐在沙滩上,挺胸后仰,双手撑在身侧 +``` + +实测 `krea2_identity_edit_v2` 靠这句文字把站姿改成了跪坐/坐姿,但把线稿接到 `image_b` +就会连人偶一起画出来。所以:**只有 krea2Edit 那套节点时,姿势只能写字描述; +用本插件的 `Ref Image Encode` 就能直接吃骨架图。** + +**krea2Edit 到底能不能吃骨架图:四条路都试过了,都不能** + +| 接法 | 姿势跟着骨架变? | 画面干净? | +|---|---|---| +| 线稿 → `image_b`(+ `source_latent_b`) | 是 | ❌ 白色人偶 / 透明线框被实打实画进画面,`ref_boost` 越高越明显 | +| 只接 `source_latent_b`(不给 `image_b`,TE 不看它) | ❌ 完全不生效 | 是 | +| 骨架当**主图**、原图当 `image_b`(方向对调) | 是 | ❌ 轮廓线残留在人物身上 | +| 先用 PIL 把线稿做成**灰度剪影**再喂 `image_b` | ❌ 姿势不动 | 是 | + +第 2、4 条都做了控制实验(把提示词里的姿势描述整段删掉):结果图仍然是原图的站姿, +说明姿势变化全部来自提示词,骨架本身没起作用。第 4 条只解决"脏画面",不解决"驱动"。 + +**一致性的差异是实测的**:同一张原图、同一个姿势目标,`krea2Edit + krea2_identity_edit_v2` +出来是**同一张脸**;`Ostris + krea_outfittransfer` 出来的脸明显换人(那张 LoRA 是换装用途)。 +所以两者不是"谁替代谁": + +- **两者都要**(人物一致 + 骨架图驱动姿势)→ 本插件 `Ref Image Encode`(模型类型 = Krea2), + 顶部那条接法就是,一个节点搞定、不用外部插件、也不用二次回收 +- 要**人物一致**、纯文字改图(换姿势/换装/局部改)→ 本插件 Krea2 通路,或 `krea2Edit` + 文字描述 +- 要**极限锁骨架**、可以接受脸飘 → `Ostris` 那套 +- 已经在 krea2Edit 那套里出不了坑 → 先 Ostris 定姿势,再用 `krea2Edit` 做一次身份回收 + +⚠️ `ref_boost` / `grounding_px` 不是"越高越像":实测 `ref_boost=1.3` + `grounding_px=1024` +反而把背景从海边换成了礁石。建议先保持 1.0 / 768,只在掉脸时小步上调。 + +**素材放哪:分三层,运行时合并** + +| 层 | 位置 | 是否随插件分发 | +| --- | --- | --- | +| 插件自带 | `custom_nodes/ComfyUI-Toggle-Pass/pose_assets/` | 是 —— 1530 张,只含两个非敏感大类(`上半身单人`、`全身单人・标准系`) | +| 本地私有 | `ComfyUI/models/pose_reference/` | 否 —— 推荐放自己的和私密素材,跟着 `models` 备份走 | +| 自定义 | `TP_POSE_ROOT` 环境变量 | 否 —— 只有你把素材放到别处时才用 | + +查找顺序是 **`TP_POSE_ROOT` → `models/pose_reference` → 插件自带**,同名素材以靠前的为准。 +所以**只装节点就能用**,往私有目录里丢东西也会自己长出来: + +- **把新的姿势组丢进 `models/pose_reference`,约 15 秒内下拉里自动出现**,不用刷新页面;删掉同样会 + 自己消失(节点会轮询一个很轻的素材指纹)。 +- 想立刻生效:画布右键 → `🔄 刷新姿势素材库`。 +- 不存在的那一层直接跳过,不会因此报错;真找不到素材时,报错里会列出都搜过哪些路径。 + +**工作流自带参考图,可以直接分享。** 选中的素材会以 data URI 写进节点属性(`properties.tp_pose`), +跟着工作流一起走: + +- 别人下载你的工作流,**本机完全没有素材库也能看到这张图,也能直接出图**; +- 代价约 **+8~14KB/节点**(素材本身就是 300×400 的 webp,单张 5~10KB); +- 本机素材库存在时永远优先读素材库,内嵌数据只做兜底; +- 如果素材库不在了、参数又被改过,节点会继续显示内嵌的那张并给出提示,不会变成空白。 + +**输出**:`image`(`IMAGE`)——直接接 `TextEncodeQwenImage21`、`TextEncodeFibo2` 或任何编辑编码器的 +`images` 输入。 + +现成的工作流在 `example_workflows/Pose Reference Editing.json`(Qwen-Image-2.1 turbo,8 步)。 +**素材是跟着节点走的**(`properties.tp_pose`,约 8KB data URI):别人下载后在**完全没有姿势素材库** +的机器上也能看到图、也能出图。再加上插件自带的 `pose_assets/`,全新安装就能直接浏览 +两个大类共 153 个姿势 / 12 个组。 + +**为什么默认线稿。** 用 FIBO 2.0 和 Qwen-Image-2.1 各跑两组对照(同一姿势、同一指令、不同视角): +深度套 **3/3** 都自己补出了不存在的鞋或护具,线稿套只有 **1/3** 出现小瑕疵。原因是深度图没有边界线, +脚底和地面亮度几乎相同,模型就把亮部填成了一个物件;线稿有一圈明确黑线,而且「线稿 → 真人」这个变换 +在这类模型的训练数据里大量存在。深度唯一的优势是有体积感,肢体交叠时能分清前后遮挡关系,所以只在 +复杂缠绕姿势时切过去。 + +--- + + +### Qwen Image 2.1 支持 + +`DynamicRefImageEncode`(Ref Image Encode)、`DynamicRefIndependent`(Ref Independent)、 +`OneImageMultiPrompt`(一图多视角)均已支持 **Qwen-Image-2.1** 图像编辑 / 多视角生成。 +把「模型类型」选成 `Qwen Image 2.1`,会展开下面这组参数: + +| 参数 | 含义 | +|---|---| +| `宽高比` | 预设比例(1:1 / 3:2 / 16:9 / 21:9 …),或 `自定义(用输出宽度/高度)` | +| `百万像素` | 总像素预算:`1.0` ≈ 1024×1024,`2.6` ≈ 2016×1344。范围 0.1~16,**别在这里填 1024** | +| `倍数` | 对齐步长,硬下限 **32**(填 16 会算出非法形状,例如 5024×3344) | +| `参考图分辨率` | 参考图喂给模型前被缩到多大(面积基准);`0` = 保持原尺寸 | +| `尺寸适配` | `参考图保比例`(默认,不变形)/ `参考图裁剪` / `参考图拉伸` | + +对齐官方 `TextEncodeQwenImage21` 时总结出的几条关键规则: + +- **出图尺寸和参考图尺寸互不影响。** `qwen_image` 用的是 `default_ref_method = "index"`, + 参考图和输出各占独立的位置平面,不需要同形。改「参考图分辨率」**不会**让出图变大变小。 +- **指令要写进提示词文本,不能写在 `instruction` 里。** + `comfy/text_encoders/qwen_image21.py` 会丢弃 system 段,写进 `instruction` 的内容在 2.1 下会被静默丢弃; + 节点已自动把它并进 user 段(Flux 时代那句默认英文 instruction 会被忽略,免得污染提示词)。 +- **latent 输出是全零。** 如果把参考图的真实 latent 当采样起点,编辑就会退化成 img2img(内容完全不变); + 真实 latent 只进 conditioning 的 `reference_latents`。 +- 图片必须是 **32 的倍数**;带 alpha 的参考图会先合成到白底再送进视觉塔。 + +推荐设置(2.1 图像编辑):`匹配原图尺寸` = **OFF**、`尺寸适配` = `参考图保比例`、 +`百万像素` = 1.0、`倍数` = 32、`参考图分辨率` = 1024。 + +✅ **负面条件已经解决了 —— `Ref Image Encode` 现在有专门的 `negative` 输出**, +直接连到采样器的「负面条件」即可。它是用同一个 CLIP 编出来的真·空文本条件, +所以**任何 CFG 下都正确**(实测与手接一个空 `CLIPTextEncode` 逐像素相同)。 + +⚠️ **不要**再用 `ConditioningZeroOut` 把正面条件清零当负面。CFG = 1.0 时负面根本不参与计算, +所以看着没事;一提高 CFG 出图就**整张花屏**(实测 fp8 / int8、20 步、CFG 2.5、挂姿势 LoRA, +绿紫斑块)。以前的版本这个节点只有两个输出、示例工作流接的正是 `ConditioningZeroOut` —— +坑就是从这里来的。 + +**姿势编辑推荐挂 `VNCCS_QI2_PoseStudioV2`**(`models/loras/Qwen/`,152 MB, +ai-toolkit 训练、base = `qwen_image_2`,`LoraLoaderModelOnly` 即可,纯 `diffusion_model` 键)。 +同一句提示词下实测这批 Qwen 2.1 LoRA: + +| LoRA | 结果 | +| --- | --- | +| 裸模型 | 可用,8 步 15 s | +| `VNCCS_QI2_PoseStudioV2` | ✅ **最好**:姿势跟得最准、画面最细腻、无线稿残留 | +| `QI2.1_AnyAngle` | ❌ 脸上/脖子出现线稿残留(参考图内容被「描」进画面) | +| `qwen_image_2.1_turbo_lora_avg_rank_178` | 可用但皮肤质感变糙,姿势帮助不明显 | + +两种跑法都验证过: +- **turbo int8 + 8 步 + CFG 1.0** → 16.7 s,快,画质够用 +- **`qwen-image-2.1-UC-fp8` + 20 步 + CFG 2.5** → 43.9 s,全身完整、细节最好(负面用空文本) + +--- + + +### Krea2 支持 + +`ToggleUnifiedLoader`(统一加载器)、`DynamicRefImageEncode`(Ref Image Encode)、 +`DynamicRefIndependent`(Ref Independent)、`OneImageMultiPrompt`(一图多视角)均已支持 **Krea2**。 +加载器会从 UNet 自动认出 `Krea2`,直接配 `CLIPType.KREA2` + `Krea2TEModel` 文本编码器; +三个编码节点只要把「模型类型」选成 `Krea2` 即可。 + +⚠️ **VAE 必须和模型配套。** 这是最常见的翻车点——配错不会在加载时报错,而是在 `VAEDecode` 深处炸: + +| 模型 | VAE 文件 | latent | +|---|---|---| +| Qwen-Image **2.1** | `qwen_image_2.1_vae_bf16.safetensors` | 64 通道 / 16x / RGBA | +| **Krea2** | `qwen_image_vae.safetensors` | 16 通道 / 8x / RGB | + +配错时 `fix_empty_latent_channels` 会静默把 16 通道补成 64,采样照样跑完, +然后解码落进 Wan 2.1 分支报 `IndexError: tuple index out of range`。 +现在加载器会在加载时比对 `latent_channels` / `latent_dimensions`,直接把该换哪个文件打到日志里。 + +对齐官方 `TextEncodeQwenImageEditPlus` 后总结的几条规则: + +- **参考图 latent 尺寸 = 出图尺寸。** 参考图先中心裁到出图宽高比、再缩到出图像素网格, + **然后**才进 VAE。这样参考图 latent 与采样起点逐维相等,RoPE 位置只在 frame 轴上不同 —— + 正是 krea2_edit 系 LoRA 的训练几何。视觉塔仍只吃约 384 px 的缩略图。 +- **VAE 只吃 RGB** —— alpha 是丢掉,不是合成。 +- **视觉占位符必须手写。** 传了显式 `llama_template` 时 Qwen3-VL 的 tokenizer **不会**自动插占位符, + 节点会自己拼 `Picture N: <|vision_start|><|image_pad|><|vision_end|>`; + 漏了就相当于参考图对模型完全不可见。 +- **`reference_latents_method` 必须显式给,而且必须是 `index`。** Krea2 的 `default_ref_method` + 是 `None`,不设方法时参考图会被**静默忽略**(不报错,只是没效果)。 + `index_timestep_zero` 能跑但是错的:它把 adaLN 调制拆成两个时间步(target 用当前 t、参考图用 t=0), + 而训练时全序列共用一个 tvec —— 结果参考线稿会被**描进画面**(脸上出现轮廓线)。 + `index` 全序列统一 tvec,才对得上训练。 +- **latent 输出是全零**(16 通道 / 8x)——和 2.1 一样是「编辑而不是 img2img」。 +- **sigma 曲线:** Krea2 turbo 在 `采样器(一体)` 里用 `自动(按步数 + 调度器)` 方案, + `Qwen-Image-2.1 turbo 8步` 那张表不能套过来用。 + +--- + + +### MOSS-Image / FIBO 2.0 支持 + +`ToggleUnifiedLoader`(统一加载器)会自动识别这两个模型——`CLIP 类型` 里已经能直接选 +`moss_image` / `fibo2`(选 `auto` 也能从 UNet 认出来)。 +两者都是 **Flux2 latent**(128 通道 / 16x,`flux2-vae`),所以 `Ref Image Encode`(参考图编码) +**不需要新增模型类型,直接选 `Flux2` 就行**。 + +实测(同一张海边站姿照 + `P017_正坐・挺胸后仰` 线稿作为第二张图): + +| 模型 | 官方编码器 | `Ref Image Encode`(选 Flux2) | +|---|---|---| +| MOSS-Image,20 步 / CFG 4 | 19.6s — 坐姿、手撑沙滩 | 16.7s — 坐姿 ✅ | +| FIBO 2.0,4 步 / CFG 1 | 15.4s — 跪坐 | 10.6s — 跪坐 ✅ | + +两组画面里都没有线稿残留。不换成官方编码器的代价是这几点: + +- **MOSS 的 `edit_format`** —— 参考方法必须与编辑 LoRA 的训练格式配对 + (`ai-toolkit` → `index_timestep_zero_isolated`、`ai-toolkit (kv_cache off)` → `index_timestep_zero`、 + `Moss-Image-Edit` → `index_timestep_zero_text_start`)。选错照样出图,但指令基本不生效。 + `Ref Image Encode` 完全不设这个字段。 +- **MOSS 的 `image_strength`** 和 **FIBO 的 `negative_prompt`** 它也没有。 +- 两个官方编码器的图片输入都是 **AUTOGROW**,所以本节点的输出照样能直插: + `TextEncodeMOSSImageEdit` → `images.image_0 / image_1 …`,`TextEncodeFibo2` → `images.image_1 … image_16`。 + +⚠️ `TextEncodeMOSSImageEdit` 只有**一个** conditioning 输出,正负条件必须用**两个节点**分别编码 +(官方模板就是两个)。写成 `["节点", 1]` 会报 `list index out of range`, +而且报错位置会指向采样器、不是编码器。 + +采样器预设:`MOSS-Image(30步·CFG4)`、`FIBO 2.0 turbo(4步)`。 + +--- + + +### 该选哪个?`模型类型` 和 `clip_type` 不是一回事 + +两个下拉长得像,作用完全不同: + +- **`模型类型`**(在参考图编码器上)只决定**输出什么形状的 latent**(以及 Krea2 走哪种 + `reference_latents_method`)。 +- **`clip_type`**(在 `Toggle Unified Loader` 上)决定**文本编码器怎么建**。 + +选错通常**不报错**:要么通道数不对、要么 conditioning 宽度不对、要么图看着挺干净但提示词没生效。 + +| 要加载的模型 | `模型类型`(编码器) | `clip_type`(统一加载器) | VAE | +|---|---|---|---| +| Qwen-Image **Layered** | `Qwen Layered`(+ `图层数`) | `qwen_image` | `qwen_image_layered_vae.safetensors` | +| Qwen-Image **2.1** | `Qwen Image 2.1` | `qwen_image` | `qwen_image_2.1_vae_bf16.safetensors` | +| **Krea 2** | `Krea2` | `krea2` | `qwen_image_vae.safetensors` | +| **FLUX.2 / MOSS-Image / FIBO 2.0** | `Flux2` | `flux2` / `moss_image` / `fibo2` | `flux2-vae.safetensors` | +| **Z-Image** | `SD / SDXL / Z-Image` | `stable_diffusion`(或 `auto`)—— **千万别选 `flux` / `flux2`** | `ae.safetensors` | +| **SD 1.5 / SDXL / Pony** | `SD / SDXL / Z-Image` | `stable_diffusion` | 用 checkpoint 自带的 | + +`SD / SDXL / Z-Image` 是**故意做成通用档**的:只要真接了参考图,latent 就来自 `ref_latents[0]`, +所以这个设置在 SD / SDXL / Pony / Z-Image / Qwen-Image 1.0 上表现一致;只有当**一张图都不接**时, +它才具体意味着「4 通道全零 latent」。 + +**Qwen-Image Layered 的具体参数**(照官方 `image_qwen_image_layered.json` 抄的): + +- 文本编码器是 `qwen_2.5_vl_7b_fp8_scaled` —— 和 Qwen-Image 1.0 **同一个**编码器 ⇒ `clip_type` 选 `qwen_image` +- VAE 是 **`qwen_image_layered_vae`**,不是 `qwen_image_vae`。两者都是 16 通道,选错了要等到 + `VAEDecode` 才炸 +- latent 是 5 维:`[B, 16, layers+1, h/8, w/8]` —— `模型类型 = Qwen Layered` 输出的就是它, + 等价于官方的 `EmptyQwenImageLayeredLatentImage` +- 官方模板里实际跑的是 **20 步 / CFG 2.5 / euler / simple / denoise 1**,640 px,`layers = 2`; + 画布上那段 Note 说的 50 步 / CFG 4.0 是「原始设置」(更慢) +- 模板给了两条支路:一条从 `EmptyQwenImageLayeredLatentImage` 起步,一条从 `VAE 编码(照片)` 起步。 + 两者都是 `denoise 1`,起点会被完全覆盖 ⇒ 真正决定结果的是 `layers`(latent 第 3 维 = `layers+1`)。 + **只有**想做「低 denoise 精修」时起点才重要,那时编码器给的全零 latent 就不是你要的 + +**Z-Image 特别提醒**:`clip_type` **别选 `flux` / `flux2`**。Z-Image 的 TE 是 Qwen3-4B,而 +`comfy/sd.py` 在 `clip_type` 为 FLUX/FLUX2 时会把 Qwen3-4B 建成 Flux 系的编码器 —— +类都不一样,提示词编码全变,而且不报错。 + +2026-11-06 实测(同一个 Z-Image unet、同样 `qwen_3_4b` + `ae`,**只改 `clip_type`**): + +| `clip_type` | 实际建出的文本编码器 | | +|---|---|---| +| `stable_diffusion` | `ZImageTEModel_` | ✅ 推荐 | +| `auto` | `ZImageTEModel_` | ✅(模型类识别成 `Lumina2`,走同一档) | +| `qwen_image` | `ZImageTEModel_` | ⚠️ 撞对的 —— ComfyUI 是按 TE 类型分派,跟这个值无关 | +| `flux` | `Flux2TEModel_` | ❌ 编码器类不对,提示词静默失效 | + + +### `clip_type = auto` 到底准不准 + +**本地 5 个模型实测全对,108 个模型类静态核对 106 个一致。** auto 不是瞎猜,它做的是: + +1. **真加载 UNet**(不是读 header 猜),拿模型对象的真实类名 —— Qwen-Layered 加载出来是 + `QwenImage`,Z-Image 是父类 `Lumina2`; +2. 按「**精确表 → 继承链 → 前缀规则**」三层查 `CLIPType`: + - 精确表只登记「`clip_type` 真的改变结果」的模型(见下表); + - 继承链兜子类:`FluxSchnell → Flux`、`KOALA_1B → SDXL`、`ZImagePixelSpace → ZImage`; + - 前缀规则兜变体:`WAN21_I2V` / `WAN22_S2V` / `WAN_Animate2` … 16 个 WAN 类 → `wan`(另有 2 个在精确表); +3. 剩下的用 `stable_diffusion` 兜底 —— **这不算猜错**,因为那三分之一的模型 ComfyUI 压根 + 不看 `clip_type`(TE 权重本身就唯一确定了是哪种编码器)。 + +**`clip_type` 只在「同一个 TE 权重能走多条路」时才真正起作用。** 读 `comfy/sd.py` 的 +`load_text_encoder_state_dicts` 可以确认只有这几族: + +| TE 权重 | 需要 `clip_type` 区分 | 选错的下场 | +|---|---|---| +| T5-XXL | SD3 / LTXV / WAN / CHROMA / PIXART / COGVIDEOX / MOCHI | 掉进 `else` 建成 **Mochi** 的 TE | +| Qwen3-VL-8B | QWEN_IMAGE / IDEOGRAM4 / BOOGU / JOYIMAGE | 建成通用 `Qwen3VLTEModel_`,Qwen-Image 2.1 的 `image_slots` 丢失 | +| Qwen3-VL-4B | KREA2 / FIBO2 / FLUX3 / MAGE / MINIMAX | 同上,通用 Qwen3-VL | +| Qwen3-4B | FLUX / FLUX2 | 建成 Flux 系 `Flux2TEModel_`(Z-Image 就踩这个) | +| CLIP-G | SD3 / STABLE_CASCADE / HIDREAM | 建成 `SDXLRefinerClipModel` | +| Qwen2.5-7B | HUNYUAN_IMAGE / LONGCAT_IMAGE | 建成 `qwen_image` 的 TE | + +其余模型(Anima / AuraFlow / Cosmos / Lens / OmniGen2 / StableAudio / SAM / 3D 那些) +`clip_type` 传什么都一样,auto 用兜底值无害。 + +**实测(2026-11-06,`clip_type = auto`,真加载)**: + +| 模型 | auto 判定 | 建出的文本编码器 | | +|---|---|---|---| +| Qwen-Image Layered | 精确匹配 `QwenImage` → `QWEN_IMAGE` | `QwenImageTEModel_` | ✅ | +| Z-Image | 精确匹配 `Lumina2` → `STABLE_DIFFUSION` | `ZImageTEModel_` | ✅ | +| Krea2 | 精确匹配 `Krea2` → `KREA2` | `Krea2TEModel_` | ✅ | +| FIBO 2.0 | 精确匹配 `Fibo2` → `FIBO2` | `Fibo2TEModel_` | ✅ | +| MOSS-Image | 精确匹配 `MOSSImage` → `MOSS_IMAGE` | `MOSSImageTEModel_` | ✅ | + +**双保险:加载完立刻校验 TE。** auto 万一判错(或上游加了新模型类),不会静默 —— +加载器会向模型自己要「我该配哪个编码器」(`model_config.clip_target()`,108 个类里 106 个问得到), +跟实际建出来的类名比对,不一致就打印: + +``` +[ToggleUnifiedLoader] ⚠️ CLIP 校验失败:模型是 Krea2,但文本编码器建成了 Qwen3VLTEModel_ +(预期 Krea2TEModel,依据 手工表)。这个 CLIP 文件与模型不配套 → 提示词会被错误编码 +(跑得通但什么都不生效)。请更换 CLIP 文件,或检查『CLIP 类型』是否选对。 +``` + +这条校验不是装饰:auto 判错时它会**当场**报出来,而不是等你出图发现「提示词不生效」再回头排查。 + +**什么时候别用 auto**:只有一种情况 —— 你要故意手选一个与模型不匹配的编码器做实验。 +正常使用 `auto` 比手选更靠谱,因为手选需要记住上表 6 行。 + + +所以 `qwen_image` 不会把 Z-Image 弄坏,但还是选 `stable_diffusion`(或 `auto`),让设置名副其实。 + +--- + + +### Z-Image:纯文生图,模型类型选 `SD / SDXL / Z-Image`,不要接参考图 + +⚠️ 先说结论:**Z-Image 没有参考图编辑能力,`image1`~`image10` 一个都别接。** + +依据(实测,不是猜的): + +- 官方 5 个 `z_image` 模板里,`image_z_image` / `_int8` / `_turbo` / `_turbo_int8` **全都没有 + `LoadImage`**,是纯文生图;唯一带图输入的 `image_z_image_turbo_fun_union_controlnet` 走的是 + **ControlNet(Canny 0.1 / 0.32)**,属于"线条控图",和参考图编辑是两条完全不同的通路。 +- Z-Image 是 Lumina2 / NextDiT 系,训练时没有参考图 token。真接了 `image1` 之后, + `reference_latents` 照样会进 conditioning,但模型缺配套的 `reference_latents_text_embeds` + ⇒ 实测出图是**满屏方块马赛克**。换 seed、换尺寸桶、换采样起点都一样。 + +**正确用法**:`模型类型` 选 `SD / SDXL / Z-Image`,`image1` 空着。 + +这不是"凑合"。不接图时这个分支输出的就是 4 通道全零 latent,再由官方 +`fix_empty_latent_channels` 补到 16 通道,正是 Z-Image 需要的空起点。同 seed 下与官方 +`UNETLoader + CLIPLoader + VAELoader` 原生链路**逐像素一致**(51.5 / 214.5 / 46.9 四项全等)。 + +**想要 Z-Image 的图生图**:别用这个节点,走官方的 +`加载图像 → VAE 编码 → 采样器(denoise < 1)`。提示词 + denoise 控制改动力度,照片当采样起点。 + +**防忘机制**:接反了会在日志里打一条警告(只提示,不改任何行为): + +``` +[Toggle-Pass][Ref Image Encode] ⚠️ 文本编码器 = ZImageTEModel_,已接入 1 张参考图, +但这个底座没有参考图通路。 +``` + +`模型类型` 下拉里**没有单独的 Z-Image 项** —— 它的行为和通用档 `SD / SDXL` 完全一样,所以两项 +直接合并成一个名字 `SD / SDXL / Z-Image`,而不是再加一项让人误以为"选了它就能接图"。 + +> 2026-11-06 改名:旧值是 `SD / SDXL`。老工作流**加载时自动迁移**(前端直接改写 widget 值, +> 后端收到旧别名也会归一),存过的图不用手动改。 + +--- + +### 画布菜单入口 + +本插件全部节点也能从画布菜单里直接添加(和 KJNodes / rgthree 的入口在同一处): + +``` +🔄 Toggle-Pass ▸ + ├ 采样器(一体) + ├ Image Batcher + ├ Multi Ref Latent Input + ├ One Image Multi Prompt + ├ Ref Image Encode + ├ Ref Independent + └ ... +``` + +- 列表是**运行时自动收集**的,以后新增节点自动出现,不用改代码 +- 点击任意一项,节点落在**鼠标所在位置** + +--- + +### 隐私遮罩功能 + +SaveLoadImage、ToggleLoadImage、TogglePreviewImage 三个节点均支持隐私遮罩: +- 标题栏右侧显示 👁(显示图片)/ 🫣(隐藏图片)图标 +- 点击图标切换隐私状态,隐藏时图片预览区域留空 +- 隐私状态随工作流自动保存/恢复,不影响生图流程 + +--- + +### 示例工作流 + +现成的图都在 [`example_workflows/`](example_workflows/) 里,把 `.json` 拖到画布上就能打开。 + +| 文件 | 演示什么 | 额外依赖 | +| --- | --- | --- | +| `All-in-One Demo.json` | 一个图里放齐本插件全部节点:`ToggleUnifiedLoader`、`ToggleSampler`、`ToggleLoadImage` ×2、`ToggleImageCompare`、`TogglePreviewImage`、`DynamicRefImageEncode`、`SaveLoadImage` + `VAEDecode`。**想快速上手就从这张开始** —— 不需要任何第三方节点。 | 无 | +| `Graphic-Text Integration Editing.json` | 单张参考图的「文字 + 参考图」编辑,用 `DynamicRefImageEncode` 编码、`SaveLoadImage` 保存。 | 无 | +| `Batch Editing.json` | 六张输入图经批处理组成一组参考图,做批量编辑。 | `RTXVideoSuperResolution` | +| `Lazy Person's Multi-angle View.json` | 一张图 + `OneImageMultiPrompt`(一图多视角),一次生成多个机位。 | `CR Upscale Image` | +| `Pose Reference Editing.json` | `PoseReference` 接 Qwen-Image-2.1 turbo 编辑(8 步)。**选中的素材已内嵌在节点里**,没装姿势素材库也能打开、也能直接跑。 | 无 | +| `Krea2 Pose Editing.json` | 9 个节点,**7 个是本插件的,外部插件 0 个**:`统一加载器`(UNet + CLIP + VAE + `krea2_identity_edit_v2` LoRA 一个节点搞定)+ `加载图像` + `参考姿势` → `Ref Image Encode`(模型类型 = Krea2;姿势线稿接 `image1`、原照片接 `image2`,latent 和 negative 都直接取它自己的输出)→ `采样器(一体)` 选 `Krea 2 turbo(8步)` → `图像对比` / `保存图像`。实测 720×1440、8 步、70s,站姿改坐姿,线稿不进画面,人物一致性保持。 | 无 | +> 这些图里的模型文件名是作者本机的配置。加载后如果有加载器变红,在对应节点里改成你自己的 +> checkpoint / 文本编码器 / VAE 即可。 + +--- + +### 注意事项 + +- `num_images` 调整时,输入/输出槽会自动增减,**已有连线不会被断开** +- 切换页面再回来,节点会自动恢复到正确的槽位数量 +- 需要 Qwen2.5-VL 或兼容的 CLIP 模型;用 Qwen-Image-2.1 时需要 Qwen3-VL 8B + `qwen_image` 类型的 clip +- 默认 instruction 适用于 Qwen-Image-Edit 类模型,可按需修改(2.1 下会自动并进提示词文本) +- 界面只显示当前「模型类型」用得上的参数,其余自动隐藏 +- 非法的参数值(如 `倍数 = NaN`、`百万像素 = 1024`)在加载时会自动回退到安全默认值。 + **升级后请重启 ComfyUI + 强刷一次(Ctrl+F5)**,然后保存工作流即可固化 +- ⚠️ 「现代节点设计(Vue 节点)」会导致 `widget.hidden` 与自定义绘制失效 —— 开启后所有参数都会展开、 + 隐私开关图标也会消失。请在 ComfyUI 设置里关掉它 +- ⚠️ 量化底座(INT8/FP8)上 LoRA **依然生效,只是更"糊"**:ComfyUI 走「反量化 → 叠加 patch → + 再量化回 int8」,但用的是**随机舍入 + 重算 scale**,增量幅度能保留约 113%~120%,代价是方向带噪声 + (余弦 0.4~0.7)。姿态/结构类 LoRA 看得出来,特别细微的风格类可能看不出来。 + 这是上游行为,官方 `LoraLoader` 一模一样(同 seed A/B 实测:本节点与 + `CheckpointLoaderSimple + LoraLoader` 输出逐像素完全一致,meanAbsDiff = 0.00) +- 加载器会把每个 LoRA 实际写入了多少 patch **以及模块覆盖率**(`192/224p`)回传到按钮上 + (见上面那张表)。覆盖率不满一般是底座被 repack、那几层不存在,而不是 LoRA 没加载 +- ⚠️ **分体模式的 CLIP 校验**:加载完 CLIP 后会比对实际建出的文本编码器类名与模型是否配套 + (正确类名如 `QwenImage21TEModel_` / `QwenImageTEModel_` / `Flux2TEModel_`,日志会打印)。 + 不配套时按钮显示 `⚠️CLIP不符`,日志会给出预期类名和处理建议 —— + 否则这种情况会「跑得通但什么都不生效」,极难自查 +- ⚠️ **分体模式的 VAE 校验**:加载器还会比对 latent 通道数 / 维度与模型是否配套。 + 配错的 VAE 在加载时不报错,一路跑到 `VAEDecode` 才炸(`IndexError: tuple index out of range`), + 所以现在加载时就直接提示,并告诉该换哪个 VAE 文件 +- 隐藏/收起 LoRA 组后会自动**回收节点高度**,节点不会留成一大条空框 +- **画布拖框现在会跟着鼠标走**:ComfyUI 1.57.x 会把拖拽选择框裁剪到 `.graph-canvas-panel` + (实测这个容器只覆盖画布中下部),在画布上半部分拖框时框的顶边被强行下压、高度被压成 0, + 表现就是「鼠标在左上角拉、框却出现在中间/下面」。`js/selection_rect_fix.js` 按真实鼠标点 + 重写框的位置,只改显示、不动画布状态。要关掉:浏览器控制台执行 + `localStorage.setItem("tp_selrect_fix", "off")` 后刷新 +- Python 改动需要**重启 ComfyUI**,纯 JS 改动只需 Ctrl+F5 + +--- + +## 更新日志 / Changelog + +> 按时间记录**新增 / 变更的功能**,以及怎么用。 + +### 2026-11-07 + +- **🏷️ 起版本号:`v1.0.0`**。之前一直没有版本标识,用户装了哪一版只能靠 commit 猜。 + 现在三处对齐:`pyproject.toml` 的 `[project].version`(ComfyUI-Manager / Comfy Registry 认这个)、 + `__init__.py` 的 `__version__`、README 顶部。启动日志会打一行 + `[Toggle-Pass] v1.0.0 loaded — 13 nodes`,排查「装的是不是新版」一眼就能确认。 + 后续按语义化版本:加功能进 minor,只修 bug 进 patch。 +- **🧹 移除示例 `Krea2 Pose Editing (Ostris).json`**。它硬依赖外部节点包 + `ComfyUI-Krea2-Ostris-Edit`,而那套接法**会换人**(`krea_outfittransfer` 本质是换装 LoRA)。 + 留着容易让人误以为这是推荐路线。骨架驱动的技术说明仍保留在上面的对照表里,要复现照链路自己接; + 常态需求用 `Krea2 Pose Editing.json`(零外部依赖,人物一致性保持得住)。 + +### 2026-11-06 + +- **🔀 `Ref Image Encode` 输出口顺序调整:`negative` 挪到 `latent` 上面** + (顺序变为 `conditioning` / `negative` / `latent`)。 + - **老工作流自动迁移**:加载时前端按「连线的类型」把线重新归位 —— + `LATENT` 的线接到 `latent` 口、`CONDITIONING` 的线接到 `negative` 口, + **已存的工作流不用手动改线**。实测两个老样本(2 输出时代的 `All-in-One Demo`、 + 3 输出旧布局的 `Krea2 Pose Editing`)加载后:正面→0、负面→1、latent→2 全部正确, + 且「保存后重新加载」不会被二次交换。 + - 迁移**幂等**:靠 link 的类型判断,不依赖存盘标记,加载几次结果都一样。 + - **连线归位要等 `graph.links` 建好,所以走阶梯重试**:ComfyUI 加载完成后 `graph.links` + 要几百毫秒才填满(实测 200ms 时还是空表)。改名可以同步做(抢在渲染连线之前), + 但搬线不能 —— 早期版本只等一帧就搬,结果「槽位名字换了、线没跟着走」, + 画布上看着就像 `negative` 口插着 `latent` 的线。现在改名同步执行,连线归位按 + 0/50/120/260/550/1000/1800/3000ms 阶梯重试,一旦「0 条需要改」立刻收手, + 不会干扰你之后的手动接线。 + - ⚠️ 走 **API / 手写 JSON** 的调用(不经过前端)不会自动迁移 —— 这类调用要把 + `latent` 从 `["节点", 1]` 改成 `["节点", 2]`、`negative` 从 `2` 改成 `1`。 +- **🎯 `clip_type = auto` 重做,不再靠一张追不上的手工表**。原来 auto 只认 20 个模型类名字面量, + ComfyUI 的 `supported_models` 一共有 **108** 个类,没认出来的会静默回落 `stable_diffusion` —— + 其中 WAN 全系变体(16 个走前缀、2 个在精确表)、Chroma、CogVideoX 正好都在「会建错 TE」那一族里 + (T5-XXL 的 `else` 分支是 **Mochi** 的编码器)。现在改成三层: + - **精确表 → 继承链 → 前缀规则**。精确表只登记「`clip_type` 真的改变结果」的歧义模型; + 子类走 MRO(`FluxSchnell → Flux`、`KOALA_1B → SDXL`);WAN 的 17 个变体走前缀规则。 + 静态核对 108 个类:精确 42 / 继承链 17 / 前缀 16 / 通用兜底 33(这 33 个 `clip_type` + 本来就不参与判断,兜底无害)。 + - **`auto` 现在会真加载 UNet 拿真实类名**(`load_unet` 返回 `ModelPatcher`,真实模型在 + `.model` 里;直接 `type(model)` 只会拿到 `ModelPatcher`,实测会让所有模型都推不出来)。 +- **🛡️ CLIP 校验加固:手工表没登记的模型,直接问模型自己要答案**。以前只按 8 条手工前缀表 + 校验,没登记的模型一律「宁可漏报」跳过;现在先查手工表(经过实测,优先),查不到就用 + `model_config.clip_target()` 反查「这个模型该配哪个编码器」——108 个类里 **106 个问得到**, + 等于给全部模型类都上了校验。 + - 实测价值:改代码时一次回归让 auto 全线退化成 `stable_diffusion`, + Krea2 / FIBO / MOSS 三个都被这条校验**当场**抓住,没有一个静默出错。 + - 校验失败的日志会带上「依据 手工表 / 模型自述」,便于区分是表不准还是文件选错。 +- **🔤 `模型类型` 改名:`SD / SDXL` → `SD / SDXL / Z-Image`**。两者 latent 行为完全一样 + (不接参考图时都输出 4 通道全零 latent,交给官方 `fix_empty_latent_channels` 补通道), + 合成一个名字省得再开一项,也省得每次去想「Z-Image 到底选哪个」。 + - 老工作流**自动迁移**:加载时前端直接把控件值从旧名字改成新名字(控制台会打一行 + `模型类型 已迁移`);后端也认旧别名,第三方节点转存 / 手改 JSON 一样能走对分支。 + - 三个编码节点(`Ref Image Encode` / `一图多Prompt` / `Ref Independent`)统一生效。 + - `ToggleEmptyLatent` 的 `latent类型` **没改**(那个本来就把通道数写在名字里),Z-Image 用 + `SD / SDXL(4 通道 · 8×)` 那一档即可。 +- **➕ 统一加载器的 `clip_type` 下拉补齐**:原来只登记了 14 项,现在把 ComfyUI 支持的其它类型 + 全追加在末尾(`hunyuan_video` / `lumina2` / `chroma` / `ideogram4` / `flux3` 等 26 项)。 + 用 `getattr` 取枚举,旧版 ComfyUI 少哪个成员就跳过哪个,不会把插件带崩;已有项位置不动, + 老工作流位置序列化不受影响。 + - 顺带补了 Z-Image 的自动识别(`ZImage → stable_diffusion` + TE 前缀 `ZImageTEModel`), + `clip_type = auto` 时不会再打「未登记映射」的告警。 +- **📋 README 新增「该选哪个?」对照表**(`模型类型` vs `clip_type`),把 Qwen-Image Layered / + 2.1 / Krea2 / Flux2 系 / Z-Image / SD 各自选什么、配哪个 VAE 一张表列全。 + 见 [模型类型对照表](#模型类型对照表) / [cheat sheet](#model-type-cheatsheet)。 + - **Qwen-Image Layered → `clip_type` 选 `qwen_image`**:它的 TE 和 Qwen-Image 1.0 是同一个 + `qwen_2.5_vl_7b_fp8_scaled`,VAE 必须是 `qwen_image_layered_vae`(同为 16 通道,选错要到 + `VAEDecode` 才炸);latent 5 维 `[B,16,layers+1,h/8,w/8]` 正好等于 `模型类型 = Qwen Layered`。 + - **Z-Image → 别选 `flux` / `flux2`**:`comfy/sd.py` 在 FLUX/FLUX2 下会把 Qwen3-4B 建成 Flux + Klein 的编码器,类都不一样,提示词全废且不报错。 +- **⚠️ 接错参考图会报警了:Z-Image / Lumina2 系没有参考图通路**。三个编码节点一旦检测到 + 文本编码器是 `ZImageTEModel_` **且**接了 `image1`,日志里会打一条明确警告(含正确做法), + **只打印,不改任何参数和接线**。同一个(节点 + 编码器)每次启动只打一次,不会刷日志。 + - Z-Image 是**纯文生图**模型:官方 5 个 `z_image` 模板里 4 个连 `LoadImage` 都没有, + 唯一带图的 `fun_union_controlnet` 走的是 **ControlNet**,不是参考图编辑。 + - 硬接 `image1` 的后果实测是**满屏方块马赛克**(换 seed / 尺寸桶 / 采样起点都一样)。 + - 正确用法:`模型类型` 选 `SD / SDXL / Z-Image`、`image1` 空着 —— 空 latent 会自动补到 16 通道, + 同 seed 下与官方原生链路逐像素一致。要图生图请用 `VAE 编码 + 采样器 denoise < 1`。 + - 下拉里**不单独设 Z-Image 项**(行为和通用档完全一样),已合并进 `SD / SDXL / Z-Image`。 + 详见 [Z-Image 用法](#z-image-用法)。 +- **💡 广播打开时,会被自动接上的槽位小点会「点亮」**(补成实心、用该槽位类型的官方配色, + 和手动连线后的样子一致)。以前只有紫线画过去、槽位却还是空心圈 —— 因为广播是纯预览, + 提交前不建真实连线,官方就一直按「未连接」渲染。 + - 只点亮**空着的**槽位;本来就有真实连线的口不重复画(官方自己就是实心)。 + - 会被**后绘制的节点压住**的槽位不点亮(按 `graph._nodes` 绘制顺序判断), + 所以拿节点当遮罩盖内容时不会再有假点透出来。 + - 节点折叠、槽位位置未确定(`boundingRect` 无效)时跳过。 + - 实测(无头 Edge,`probe_slot_lit_guard.mjs` 5/5):点亮后槽位中心色 `255,213,0` + **与手动真连线完全相同**;被节点盖住时 `102,85,51`(不点亮);关掉开关回到 `193,192,0`(空心)。 +- **🐛 修掉「一根紫线往空白处伸出去就断掉」**。原因:广播线的端点优先取槽位的 + `boundingRect`(官方渲染时算出来的真实盒子),但**节点只要不在可视区内、从没被渲染过**, + 这个盒子就是 `[0,0,0,0]`,旧代码对零尺寸照样取中心 ⇒ 端点被算成**图坐标原点**, + 线就画到画布原点那片空白里,看着像一根悬空紫线。 + - 触发条件:目标节点被拖到视野外(尤其画布上方 `y<0` 那种「半个节点探出去」的情况)。 + 实测 `Toggle-Pass-Test.json` 里的 `VAE解码`(pos.y = -66)就踩中。 + - 修法:零尺寸一律视为「未布局」,退回 `getConnectionPos` 估算 —— 端点从 `(0,0)` + 变成真实槽位位置(实测 `(0,0)` → `(1362,-32)`、`(0,0)` → `(955,-52)`,都落回节点内)。 + - 有 `boundingRect` 的正常槽位行为完全不变(同图另外两条线端点一字未动)。 + - 纯前端改动,**不用重启**,`Ctrl+F5` 即可。 +- **➕ 新增诊断命令 `__tpAudit()`**(控制台执行):把当前每一根广播线的**两端坐标 / + 归属节点 / 是否落在自己节点范围内 / 目标槽 boundingRect** 打成表格,悬空端点会红字警告。 + 以后再遇到「线跑到奇怪的地方」,先跑这个,一眼看出是哪条 pair 算错。 +- **🔧 广播预览的端点圆点改成和线同层(节点能盖住了)**。以前圆点画在 `draw()` 末尾 = 全画布最上层, + 所以把节点拖到线上当遮罩时,一串紫点会穿出节点浮在上面(一列三颗、看着像脏点)。 + 现在圆点和线一起画进背景层(`bgcanvas`),**节点盖住线的同时把点一起盖住**,观感统一成 + 「线从节点边缘伸出来」,和官方连线一个样子。 + - 视觉代价:槽位点本身压在节点边线上,所以露在外面的只剩半个圆点(另一半被节点吃掉)。 + - 想回到旧观感:`localStorage.tp_dots_layer = "front"` 再刷新;删掉这个键就恢复默认。 + - 纯前端改动,**不用重启**,`Ctrl+F5` 即可。 + - 实测(无头 Edge 像素级):同一布局下节点框内新增紫色像素 —— 旧行为 39 px(复现问题)、 + 新默认 **0 px**;bgcanvas 里圆点仍在(两个端点各 20 px);节点之间空白处的线 200 px 不变。 + +### 2026-11-05 + +- **✅ `Ref Image Encode` 新增第三个输出 `negative`(自动生成,不用再接 `ConditioningZeroOut`)**。 + 它是用同一个 CLIP 编码出来的真·空文本负条件,**CFG 调多高都正确**。 + - 怎么用:`Ref Image Encode` 的 `negative` 口 → 采样器「负面条件」,完事。 + - 为什么加:之前示例工作流用 `ConditioningZeroOut` 把正面清零当负面,CFG=1.0 时看不出问题, + **CFG>1 就整张花屏**(绿紫斑块)。 + - 兼容:第三个口是**追加在末尾**的,旧工作流的 `conditioning` / `latent` 两个口完全不受影响。 + - 实测:与手接空 `CLIPTextEncode` **逐像素完全相同**(Qwen 2.1 fp8 / 20 步 / CFG 2.5,max diff 0); + Krea 2 CFG 1.0 下新旧接法差异落在模型自身的重跑随机范围内(同配置重跑 max 142 vs 新旧 139)。 + - `example_workflows/Krea2 Pose Editing.json` 已改成这个接法(节点数 10 → 9)。 +- **⚠️ CFG > 1 时负面条件不要接 `ConditioningZeroOut`,会整张花屏**。实测(fp8 / int8、20 步、 + CFG 2.5、挂姿势 LoRA):把正面条件清零当负面 ⇒ 出图绿紫斑块、完全不可用;改成空文本 + `CLIPTextEncode` 就正常。CFG 1.0 时负面不参与计算,所以 turbo 8 步的示例一直没暴露这个坑。 + → 现在直接用 `Ref Image Encode` 的 `negative` 输出即可。 +- **Qwen 2.1 姿势编辑推荐挂 `VNCCS_QI2_PoseStudioV2`**(`models/loras/Qwen/`,152 MB, + ai-toolkit 训练、base = `qwen_image_2`,`LoraLoaderModelOnly` 即可)。同 prompt 实测: + 它姿势跟得最准、画面最细腻、无线稿残留;`QI2.1_AnyAngle` 反而在脸上/脖子画出线稿残留; + `qwen_image_2.1_turbo_lora` 皮肤变糙、姿势帮助不大。两种跑法:turbo int8 8 步 16.7s; + `UC-fp8` 20 步 CFG 2.5 43.9s(全身最完整)。 +- **⚠️ 提示词必须写具体姿势,否则 Krea 2 会把线稿人偶画进画面**。这是今天实测出来的第二大坑: + 同参数、同 seed,只写「图二美女参考图一的姿势,重新摆pose」时,模型不读线稿,而是把线稿人偶 + 当成**第二个主体**,直接输出「左边真人 + 右边线稿人偶」的并排拼贴,姿势一点不动。 + 提示词换成「让图二中的女人摆出图一那个姿势:跪立、身体向后仰、胸部抬起、背部拱起, + 双手向后下方伸去触摸脚跟,头部微微后仰,采用四分之三侧后方视角。保持脸/发型/服装/背景不变」 + 就正常了。**中文完全可用**,关键是三段:主体指认 + 姿势解剖描述 + 保持不变的内容。 + → README 中英各加一节「提示词怎么写」,并修掉原来那句会误导人的简短示例。 +- **Krea 2 编辑不用再装 `ComfyUI-krea2Edit` 了**:`Ref Image Encode` 把「模型类型」选成 `Krea2`, + 就能直接做「保身份 + 换姿势」,姿势线稿接 `image1`、原照片接 `image2`。 + 原因是 ComfyUI 原生 krea2 的 `_forward` 本来就有 in-context 参考通路(`ref_latents`), + `Krea2EditModelPatch` 只是手工重建了同一件事。实测 8 步 720×1440:70s 出图,坐姿正确、 + 画面干净、人物一致性保持。 + → 新增示例 `example_workflows/Krea2 Pose Editing.json`(10 节点,**外部插件 0 个**); + 原来的 Ostris 版改名为 `Krea2 Pose Editing (Ostris).json`,用途变成「极限锁骨架」。 +- **修 `reference_latents_method`:`index_timestep_zero` → `index`**(Krea2 三处编码节点全改)。 + `index_timestep_zero` 会给参考图单独一套 **t=0 的 adaLN 调制**,而 krea2_edit 系 LoRA 训练时 + 全序列共用一个 tvec ⇒ 参考线稿会被**「描」进画面**(实测:脸上出现轮廓线和腰线, + 换 `index` 后完全干净)。这个坑很隐蔽:不报错、能出图、姿势也对,只有画面脏。 +- **Krea2 参考图 latent 改为 fit 到出图网格**:原来是缩到约 1 MP 保持原比例, + 于是 ref latent 的 `h/w` 与采样起点不同 ⇒ 模型把参考图当「另一块画布」,边缘特征会渗进画面。 + 现在先中心裁到出图宽高比、再 bicubic(**antialias**)缩到出图像素尺寸, + ref latent 与零 latent 逐维相等,RoPE 位置只差 frame 轴 —— 与训练几何一致。 +- **★ 顺序是硬约定:最后一个参考图 = 主体。** 姿势线稿放 `image1`、原照片放 `image2`; + 反过来会渲成一个线稿人偶(实测)。提示词里按 `image 1 / image 2` 指代即可。 +- **`DynamicRefIndependent` 不适合 Krea2**:它把每张图编进各自独立的 conditioning + (那是 Qwen 2.1 每图独立 index 平面的设计),合并后给不了 Krea2 一条连贯的参考序列 —— + 实测线稿残留 + 姿势跑偏。Krea2 请用 `Ref Image Encode`(`DynamicRefImageEncode`)。 + +### 2026-11-04 + +- **`空 Latent` 新增 `latent类型`(4 档通道 / 压缩比)**:原来写死 4 通道 · 8×, + 接 Krea 2(Wan21,16 通道)或 Flux2(128 通道 · 16×)只能靠 K采样器的 + `fix_empty_latent_channels` 隐式补通道。现在可选 `SD / SDXL`、`SD3 / Flux / Krea 2`、 + `Qwen-Image 2.1`、`Flux2`,默认仍是 4 通道(老工作流不变)。 + 选对时与官方 `EmptySD3LatentImage` 输出完全一致(实测 shape / dtype / + `downscale_ratio_spacial` 全等,张量差 = 0)。 +- **示例 `Krea2 Pose Editing (Ostris).json` 重做为「本插件节点为主」**:16 个节点里 7 个是本插件的 + (`统一加载器` / `读图` / `参考姿势` / `空 Latent` / `采样器(一体)` / `图像对比` / `存图`), + 余下 6 个是 ComfyUI 内置(`VAEDecode`、`FluxKontextImageScale`、`FluxKontextMultiReferenceLatentMethod`), + 只有 3 个来自外部插件 `ComfyUI-Krea2-Ostris-Edit`。画布内新增 `Note` 节点, + 写明「用到了哪个插件、三个必须配对的条件」,打开就知道缺什么。 + 原版本是从官方模板改的,19 个节点里只有 1 个是本插件的,已作废。 +- **`Ref Image Encode` 接 MOSS-Image / FIBO 2.0:模型类型选 `Flux2`(下拉未新增)**。 + 两者 latent 与 Flux2 同族(128 通道 / 16x,都用 `flux2-vae`),实测参考图能真正生效: + MOSS 20 步 16.7s / FIBO 4 步 10.6s 都能把站姿改成素材里的坐姿,画面无线稿残留 + (对照组用官方编码器分别是 19.6s / 15.4s)。不新增专用类型的理由:MOSS 要 `edit_format` + (三档训练格式)+ `image_strength`、FIBO 要 `negative_prompt`,塞进一个类型会变成一半参数无效; + 需要精确控制这些时直接用 `TextEncodeMOSSImageEdit` / `TextEncodeFibo2`。 +- **修正三处 Flux2 空 latent 的通道 / 尺寸**(`Ref Image Encode`、`OneImageMultiPrompt`、`Ref Independent`): + - `Ref Image Encode` 和 `OneImageMultiPrompt` 的「纯文生图」分支原来写死 4 通道(SD 的 latent), + Flux2 实际是 128 通道。走 KSampler 时 `fix_empty_latent_channels` 会自动补齐 + (4→128 平铺 + 8x→16x 缩放),所以**出图结果完全一致(实测 max abs diff = 0)**; + 但这是隐式兜底,不经过 KSampler 的场景不会修。 + - `Ref Independent` 的「空槽兜底」原来是 `torch.zeros(1, 4, 1, 1)`,这是**真的会出问题**: + auto-fix 只补通道、不改尺寸,采样照常跑完,最后解码出一张 **16×16 的废图**(不报错,很难查)。 + 已改为按模型类型给正确的通道与尺寸 —— 实测与官方 `EmptyFlux2LatentImage` 逐像素一致 + (max abs diff = 0),出图从 16×16 恢复成 512×1024。 +- **`参考姿势` 已确认可驱动 Krea 2 编辑(骨架驱动)**,但**只有 Ostris 那套节点能吃骨架图**: + `TextEncodeKrea2OstrisEdit` 的 `image1/2/3` 都是 `IMAGE`,原图接 `image1`、参考姿势接 `image2` + 即可,线稿不会被画进画面。实测 `krea_outfittransfer` + `kv_cache=开`、8 步 euler/simple CFG1, + 36.1s 把站姿改成素材里的坐姿,脸/发型/服装/背景不变。 + ⚠️ 另一套 `ComfyUI-krea2Edit`(`Krea2EditGroundedEncode` / `Krea2EditModelPatch`)的 + `image_b` / `source_latent_b` 语义是「**第二个主体,要放进画面**」,接参考姿势会把人偶一起画出来 + (实测);它只能靠文字描述改姿势。**两套节点包不能混用**:把 krea2Edit 系 LoRA + (`krea2_identity_edit_v2`)接到 Ostris 节点上同样会贴线稿,几何不一致。 + 另:`kv_cache` 必须与 LoRA 训练方式一致,条件上要包 `FluxKontextMultiReferenceLatentMethod`。 + 当时附过示例 `Krea2 Pose Editing (Ostris).json`(实测 8 步出图,首次含模型加载约 86s), + 但它对外部节点包有硬依赖、而且会换人,**已在 2026-11-06 移除**。要复现请照上面的链路自己接; + 常态需求建议直接用 `Krea2 Pose Editing.json`(零外部依赖,人物一致性保持得住)。 +- **`统一加载器` 加载 Krea 2 编辑链已实测**:`clip_type=auto` 正确识别 `Krea2 → CLIPType.KREA2`, + TE 建成 `Krea2TEModel_`、VAE 校验 16 通道 / 3 维,LoRA 槽可直接加载 `krea_outfittransfer` 等编辑 LoRA + (256 个 patch)。与原生 `UNETLoader + LoraLoaderModelOnly` 对比:**无 LoRA 时逐像素一致(max 0)**; + 带 LoRA 时 LoRA 影响幅度一致(平均差 60.66 vs 60.69),仅 4.6% 像素有细微差异,画面等效。 +- **`统一加载器` 支持 FIBO 2.0 与 MOSS-Image**:`CLIP 类型` 新增 `fibo2`、`moss_image`, + auto 模式按 UNet 类名(`Fibo2` / `MOSSImage`)自动识别。这两个和 `krea2` 共用权重文件, + 但取层方式完全不同(`fibo2` 取 15 层中段 → 6×7680;`moss_image` 用 Qwen3.5-9B 的 last hidden state), + 所以选错不是画质问题,是 conditioning 维度直接对不上。加载器同时校验 TE 类名 + (`Fibo2TEModel_` / `MOSSImageTEModel_`)与 VAE(都走 Flux2 latent,必须 `flux2-vae*`)。 + 实测:同一 seed 下,统一加载器 vs 原生 `UNETLoader + CLIPLoader + VAELoader` + **逐像素完全一致**(max abs diff = 0,fibo2 与 moss-image 各一组,moss 的 edit LoRA 走加载器 LoRA 槽同样一致)。 +- **`采样器(一体)` 预设新增两条**:`FIBO 2.0 turbo(4步)`(euler/simple/CFG1)、 + `MOSS-Image(30步·CFG4)`(euler/normal/CFG4)。FIBO 是 4 步蒸馏、给大反而崩; + MOSS 是 SFT 不是蒸馏,30 步 + CFG4 才是训练配置,降到 4 步会糊。数值取自 + `FIBO2-文生图+图编辑.json` 与 `image_moss_image_edit.json`。 +- **`参考姿势` 已确认可驱动 MOSS-Image / FIBO 2.0 编辑**:这两个编码器的 `images` 都是 + 自动增长输入(MOSS `image_0..image_9`、FIBO `image_1..image_16`), + 接法和 2511 一样——**原图接第一张、参考姿势接第二张**。实测两个模型都能把站姿照片改成素材里的坐姿, + 人脸/发型/服装/背景保持不变(MOSS 30 步 20.2s、FIBO 4 步 16.1s)。 + ⚠️ MOSS 的编辑能力来自 `moss_image_edit_lora_bf16`,且 `edit_format` 必须与 LoRA 训练格式配对 + (`Moss-Image-Edit` / `ai-toolkit` / `ai-toolkit (kv_cache off)`),选错同样「出图但没改」。 +- **`参考姿势` 接 2511 / FLUX.2 这类编辑模型改为「多图编辑」接法**(README 补说明,代码无改动): + 之前单张接 `image1` 时**不报错、能出图,但人物姿势完全不变**——编辑模型把 `image1` 当作 + 「待修改的原图」,线稿进了 `image1` 就等于让它「重绘这张线稿」,提示词失效。 + 现在明确写清:原图接 `image1`、参考姿势接 `image2`,提示词写「保持 image1 的人物,姿势改成 image2」。 + 实测 2511 与 FLUX.2 在多图接法下都能按骨架重摆人物,**不需要 ControlNet,也不需要额外模型**。 +- **`参考姿势` 输出尺寸强制对齐 16 的倍数**:原来只按长边等比缩放,遇到异形比例(如 + `1234×1000` → `1024×830`)会得到非 16 倍数的宽高,`VAEEncode` 只能自己 pad/crop, + 边缘产生半像素位移——线稿和深度图对这种位移特别敏感,表现成「人物整体歪了一点」。 + 现在缩放后统一向下对齐到 16 的倍数(宁可少 15px 也不超出设定长边),用缩放而不是裁切, + 避免切掉脚尖或手指。 + 实测现有 2878 张素材在 512/768/1024/1536 四个档位下**原本就全部对齐**,所以这一条对存量 + 素材没有任何变化,纯粹是给以后自己塞异形比例的图兜底。 + +### 2026-11-03 + +- **`采样器(一体)` 新增「⚡预设」下拉**(当天晚些时候由「模型预设」改名并挪到第一行,见下条): + 选中模型就把 `Sigma 曲线 / 采样器 / 调度器 / 步数 / CFG` 五项一次填好,不用每次手调。 + 当时 9 个预设:`Qwen-Image 2.1(25步)`、`Qwen-Image 2.1 turbo(8步·固定表)`、`Krea 2 turbo(8步)`、 + `Krea 2 turbo・细节增强(12步)`、`FLUX.2 klein(4步·beta)`、`FLUX.2 klein・高清修复(4步)`、`Z-Image turbo(8步)`、 + `Qwen-Image Layered(9步·CFG2.5)`、`Qwen-Image Edit 2511 AIO(4步)`,外加一个 `手动(不套用)`。 + `降噪` 与 `噪波随机种` 不受预设影响 —— 那两项取决于任务而不是模型。 +- **预设是「一键填充」不是「持续锁定」**:套完预设后手改这五项里的任何一个,下拉会自动退回 + `手动(不套用)`。这样控件显示永远是真实状态,不会出现「写着 Qwen 预设、其实在跑 40 步」。 +- **预设表只有一份**:写在 `sampler.py` 的 `MODEL_PRESETS`,前端通过 + `GET /toggle_pass/sampler_presets` 拉取,不在 JS 里另抄一份,以后加模型只改 Python。 + 每一条的数值都来自本机 `user/default/workflows/` 里实际跑通的工作流,来源文件写在 + `sampler.py` 的注释里。 +- **`⚡预设` 挪到参数控件第一行,并和 `Sigma 曲线` 分了名**:原来叫「模型预设」、排在最后一位, + 结果两个问题叠在一起 —— 一是名字太长,窄节点上左边的标题被右边的值整个盖住, + 看着像个无名下拉;二是紧挨着的 `采样方案` 选项也全是「模型名 + 步数」,两个下拉极易被 + 当成重复。现在改名为 `⚡预设` / `Sigma 曲线`(**只改 label,内部 name 一个都没动**), + 位置换到所有参数控件的最前面。 +- **预设名保持完整模型名,靠节点宽度让标题露出来**:名字一旦缩成 `2511 AIO · 4步` 这种, + 模型一多就分不清谁是谁,所以预设仍用 `Qwen-Image Edit 2511 AIO(4步)` 这类全名。 + 实测最长一条 `Qwen-Image Layered(9步·CFG2.5)` 占 238px,加上左侧 47px 的 `⚡预设`, + 节点至少要 350px 宽才不会重叠 ⇒ 新建节点宽度 350,老存档(280/300/340)加载时自动补到 350 + (只加宽不缩窄)。宽度不够时 litegraph 的值是右对齐画的,会把标题整个盖掉,这正是当初 + 「看着像没有名字」的真正原因。 +- **挪位置不迁移老存档也安全**:1.57 的存档带 `widgets_values_named`(按名字恢复,与顺序无关); + 更早的纯位置存档交给 `nodeData.fallbackWidgetsValuesNames` 按老顺序重新对号;万一还是有错位, + 加载时发现「模型预设」拿到了采样方案的值会自动退回 `手动(不套用)`。 + 已实测四种存档(新建 / 带名字 / 纯位置 10 项 / 纯位置 9 项),七个参数全部各就各位。 + 预设改名同样有 `PRESET_ALIASES` 兜底(现在方向是「中途那版短名 → 当前全名」, + 权威副本在 `sampler.py`,由接口下发,前端只留一份启动兜底),存过短名的工作流会自动换回全名。 + +### 2026-11-02 + +- **新增节点 `PoseReference`(参考姿势)**:从姿势素材库里选一张参考图,输出标准 `IMAGE`, + 直接接任意编辑模型的 `images` 输入。素材根目录支持三层合并(`TP_POSE_ROOT` 环境变量 → + `models/pose_reference` → 插件自带 `pose_assets`),同名以靠前的为准。 + `类别 / 姿势组 / 姿势` 三级联动下拉(4 大类、30 组、288 个姿势、5 个视角), + `源` 可在线稿与深度两套之间切换,`长边` 默认把 300×400 的素材放大到 1024, + `翻转` 做水平镜像。 +- **节点内缩略图(不用执行就能看图)**:任意下拉一改,节点下半部分立刻换成新的姿势图—— + `类别/姿势组/姿势/视角/源/翻转` 六个参数都会触发,120ms 防抖,切得快也不会卡。 + 首次加载自动把节点撑高到够放下整张图,之后随节点大小自适应缩放。 + 图由新增的 `GET /toggle_pass/pose_image` 路由按参数实时渲染(带浏览器缓存), + 不走 `node.imgs`,因此不依赖前端内部绘制逻辑,换 ComfyUI 版本也不会失效。 +- **工作流自带参考图**:选中的素材以 data URI 内嵌进 `properties.tp_pose`,随工作流保存。 + 别人下载后即使没有 `D:\pose`,也能看到图并直接出图(后端在素材库取图失败时用 + `extra_pnginfo` 读回内嵌数据)。代价约 +8~14KB/节点;本机素材库存在时优先读素材库。 + 缩略图同时改走 `raw=1` 返回素材原文件,单次 6KB(原先渲染成 512 PNG 要 80KB)。 +- **示例工作流改为随插件分发**:`example_workflows/Pose Reference Editing.json`。因为素材已经内嵌, + 它不再依赖 `D:\pose`,可直接拖进画布跑通;原先那句「故意不放进 example_workflows」的说法作废。 + 注意:内嵌数据只在**保存工作流**时落盘,改动前保存的旧工作流打开后会自动补上,但需要再存一次。 +- **素材分成两层,插件自带一份可以直接分发**:新增 `pose_assets/`(1530 张 / 9.6MB),只放 + `上半身单人`、`全身单人・标准系` 两个大类;私密或自建素材留在私有目录。运行时合并成一个索引, + 查找顺序是 **`TP_POSE_ROOT` → `models/pose_reference` → 插件自带**,同名以靠前的为准。 + 别人装完节点就有 153 个姿势可用,不需要额外下载任何东西。 +- **素材统一收进 `models/pose_reference`**:原先放在 `D:\pose` 的 + `全身单人・性感系`、`双人缠绵` 两个大类(1348 张 / 8.9MB)迁到 + `ComfyUI/models/pose_reference/`,与插件自带的两个大类正好互补、互不重叠, + 合并后仍是 4 类 30 组 288 姿势。这样素材跟着 `models` 备份走,`D:\pose` 不再需要。 +- **素材热更新**:新增 `GET /toggle_pass/pose_stamp` 轻量指纹接口,前端每 15 秒比对一次 + (画布上没有本节点时直接跳过)。往 `models/pose_reference` 里丢新姿势组,**约 15 秒内下拉自动出现**, + 删掉同样自动消失,全程不用刷新页面;画布右键另加了 `🔄 刷新姿势素材库` 手动兜底。 + 指纹扫到「大类/姿势组」这一层,只看根目录 mtime 是发现不了往已有大类里加新组的。 +- **修复「素材更新后下拉切不动、必须重启」**:下拉回调原来在挂载时闭包捕获了当时的素材树, + 素材库热更新后 `node._tpPoseSync` 换了新树,回调却还在用旧的 —— 新增的类别/组切不过去, + 切走再切回会跳回旧内容。改成回调里每次现取 `node._tpPoseSync`。 +- **修复「换了素材图不变」**:`pose_image` 原来发 `Cache-Control: public, max-age=86400` 且无 + ETag,浏览器 24 小时内不回源,同名替换素材后永远显示旧图。改成 `no-cache` + `ETag` + (mtime+size+参数),没变返回 304,变了立刻拿到新内容;同时刷新素材库时会清掉前端的 + URL 去重,让图真的重取。 +- **修复「拉目录树失败一次就永久没有联动」**:`fetchTree()` 的 Promise 在失败时会把 `null` + 缓存住,之后所有新建节点都拿这个 `null`,只能刷新页面才恢复。改成失败不留在缓存里, + 下一次自动重试;取图失败时也不再锁住 URL,后端恢复后切回同一姿势会重新请求。 +- **修复「生图一开始节点就再也切不动」**:ComfyUI 1.57 前端看到节点有 `node.imgs`, + 就会自动挂一个 `$$canvas-image-preview` 的官方预览 widget —— 它占掉节点底部一行, + 并把执行输出的那张 PNG **画在节点预览区上面**。于是从第一次生成开始,节点下部就被 + 一张定死的图盖住:下拉照点、节点自己画的预览在背面也确实换了,但画面上永远不动, + 看着就是"卡死了,只能重启"。现在 `load()` 不再返回 `ui.images`(从根上不产生 `node.imgs`), + 前端另外在 `onExecuted` 和 300ms 巡检里把已挂上的官方预览摘掉, + 已经跑过的工作流不用重建节点也会自己恢复。 +- **修复「切下拉图不换,要重启才变」**:以前预览图只靠下拉的 `callback` 通知刷新, + 一旦这条通知漏掉(第三方扩展重写回调、程序化改值、前端版本差异),节点就永远停在上一张图上。 + 现在加了两道不依赖回调的自检:绘制时比对参数、以及每 300ms 一次的轻量巡检, + 参数和已加载的图对不上就自己重取。不管是点下拉、拖参数、加载工作流还是脚本改值,图都会跟上。 +- **修复「取不到图时假装没事」**:以前任何一次取图失败都会静默退回内嵌图,看起来就是"点了没反应"。 + 现在只有内嵌的那张**正好等于当前所选**时才用它兜底,否则节点上直接显示 + `这张没取到(素材库缺失)`,控制台同步打一条 `[PoseReference] 取图失败`,一眼看出卡在哪。 +- **排查入口**:浏览器控制台敲 `__tpPoseDiag()`,用表格打印每个节点的选中值、上次请求的 URL、 + 已加载图的尺寸、是否来自网络、错误信息。 +- 素材库不存在时不再报一句含糊的错:`build_path` 逐根查找,失败信息会列出每个搜过的路径 + 以及具体原因(没有该套 / 没有该视角),换机器排查快得多。 +- **默认选线稿**:FIBO 2.0 / Qwen-Image-2.1 各两组对照,深度套 3/3 都会自己补出不存在的鞋或护具 + (深度图没有边界线,脚底与地面亮度太接近),线稿套只有 1/3 出现小瑕疵。 +- 素材索引带 mtime 缓存,首次扫描约 10ms、之后 0.1ms,增删素材会自动重建。 + +### 2026-10-25 + +- **新增示例工作流 `example_workflows/All-in-One Demo.json`**:一个图里放齐本插件全部交互节点 + (`ToggleUnifiedLoader` / `ToggleSampler` / `ToggleLoadImage` ×2 / `ToggleImageCompare` / + `TogglePreviewImage` / `DynamicRefImageEncode` / `SaveLoadImage` + `VAEDecode`), + **不依赖任何第三方节点**,拖进画布即可跑通;原 `Toggle-Pass-Test.json` 已改名为它 +- **README 新增「示例工作流」小节**(中英双语):列出 `example_workflows/` 里 4 个示例分别演示什么、 + 各自需要哪些额外依赖 —— 此前 README 对示例目录零引用,用户不知道这些文件存在 + +### 2026-10-24 + +- **「全局广播」开关搬到节点顶部**:从 widget 列表末尾那整行,移到 `加载模式` 的 `UNet / Checkpoint` + 胶囊**正下方、左半边**,缩成一个小胶囊(左写「广播」,右侧是开关轨道) + - 尺寸与胶囊对齐:**宽度 = 胶囊的一半**,**高度与胶囊完全相同**(都是 14px,上下边沿齐平) + - 外观与节点其它控件同语言:淡色托底 + 细轨道 + 白滑块,开启时转高亮蓝(和 `UNet` 选中态呼应), + 鼠标悬停时托底提亮并浮出一道细描边 + - 改法是「原生 toggle 保留但隐藏 + 自绘」:widget 对象、名字、`properties` 存储、`serialize:false` + 全部原样不动 —— `widgets_values` 一项都不动,旧工作流零影响 + - 顺带节点底部少了一整行,只剩「添加 / 移除 LoRA」两个按钮 + - 纯前端改动,**不用重启 ComfyUI**,`Ctrl+F5` 即可 +- **修复画布拖框「框不在鼠标那里」**:ComfyUI 1.57.x 会把选择框裁剪到 `.graph-canvas-panel` + (实测该容器只覆盖画布中下部 `[64,488,...]`),在画布上半部分拖框时框的顶边被强行压到 488、 + 高度被压成 0,看起来像「鼠标在左上角拉、框跑到中间」。新增 `js/selection_rect_fix.js` + 按真实鼠标点重写框的位置,纯显示层修正,不改画布状态 + - 关闭方法:控制台 `localStorage.setItem("tp_selrect_fix", "off")` 后刷新 +- **预览曲线改为从节点背后穿过**:曲线画在背景层(节点下层),节点之间的空白处正常显示, + 穿过节点的地方被节点自然遮住 —— 不会再盖住节点标题和参数。节点排得密时可见部分会少一些,属正常 + +### 2026-10-23 + +- **新增 `ToggleUnifiedLoader` 的「全局广播」开关**(节点自带,不依赖 `cg-use-everywhere`) + - 打开后点「运行」自动把 `MODEL` / `CLIP` / `VAE` 接到图里所有**空着的**同类型输入上, + 提交完立刻拆线,不会被存进工作流 + - 开关打开期间,画布上用**紫色曲线**画出「运行时会自动接上的线」,两端带小圆点, + 方便一眼核对接去哪(曲线只是预览,不建真实连线、不参与保存) + - 曲线从节点**背后**穿过(画在节点下层):空白处可见,节点上一根线都不落 —— 不挡标题和参数 + - 只补空位,手连的一根都不动;关掉就是完全手动 + - 开关状态存在节点 `properties` 里,**不占 `widgets_values`**,旧工作流参数位置一项不变 + - 与 `cg-use-everywhere` 共存(不动它的 `ue_convert`) + - 纯前端改动,**不用重启 ComfyUI**,`Ctrl+F5` 即可 +- **`采样器(一体)` 初始宽度改为 300**(高度不变),「自动(按步数 + 调度器)」这类长值不再被截断 + +### 2026-10-21 + +- **新增 `采样器(一体)`(`ToggleSampler`)** —— 把官方「随机噪波 + CFG引导器 + K采样器选择 + + 基础调度器/手动Sigmas → SamplerCustomAdvanced」四件套收进一个节点。 + - 模型 / 条件 / Latent 仍是插槽,换模型不用换节点 + - `采样方案` 三档:`自动`(= 官方 BasicScheduler,数值等价)、预置表(Qwen-Image-2.1 turbo 8步、 + LTX-2 视频 8步/3步)、`自定义表`(手填 sigma,接新模型不用改代码) + - 选预置表时 `步数` / `调度器` 会变灰并锁住,`步数` 显示该表真实步数;切回 `自动` 自动还原你原来设的步数 + - sigma 表规则:逗号分隔、严格递减、末值必须是 0、N 个点 = N-1 步 +- **新增 Krea2 支持** —— `ToggleUnifiedLoader`、`DynamicRefImageEncode`、`DynamicRefIndependent`、 + `OneImageMultiPrompt` 全都能跑 Krea2 + - 加载器从 UNet 自动识别 `Krea2` → `CLIPType.KREA2` + `Krea2TEModel`,无需手选 clip 类型 + - 三个编码节点的「模型类型」新增 `Krea2`:参考图按约 1 MP 编码、VAE 只吃 RGB、 + 自动补视觉占位符、自动设 `reference_latents_method = index_timestep_zero`、输出全零 16 通道 latent +- **加载器改进** + - CLIP 类型改为**由模型类推导**,不再二次读取 UNet 去猜(省一次 6.9 GB 读取,也不会再静默失败) + - 新增 **VAE 匹配检查**:加载时比对 latent 通道 / 维度,配错直接提示该换哪个 VAE 文件 + (否则会在 `VAEDecode` 报 `IndexError: tuple index out of range`,很难自查) + +### 2026-10-10 + +- **新增 `ToggleImageCompare` 图片对比节点** —— 把多张原图与多张结果拼成一张对比图,节点内直接预览。 + 两组动态输入(原图 `source1~10`、结果 `result1~10`)各自独立增减,**N 原图 + 1 结果** 与 + **N 原图 + N 结果** 都支持;排版 `自动` 会按数量自动在「成对并排」和「上下两排」之间选, + 另有「自动网格」;可给每张图烧 `原1 / 结1` 角标。 + - **怎么用**:把原图接到 `source*`、结果接到 `result*`,输出直接给 `SaveLoadImage` 或预览节点; + 排版按**实际接上的图**算,数量变了不用改设置。 +- **加载模式开关(外观与交互定型)** —— `ToggleUnifiedLoader` 的 `加载模式` 在下拉框基础上改成 + **两段式开关 `UNet | Checkpoint`**:点左半 = 分离组件、点右半 = 一体包,当前档用蓝色滑块高亮, + 另一半悬停时有淡色反馈。 + 位置在**节点顶部第一行,与输出插槽 `模型 / MODEL` 同一行**;左端与下方所有下拉框的左边缘对齐, + 宽度固定、两档同宽(切档不跳动),右侧给插槽文字留出安全距离。 + - **怎么用**:直接点开关左半 / 右半切换,不再弹出下拉菜单;当前档一眼可见。 + - 底层 `加载模式` 参数照常保存与序列化,**旧工作流与 API 调用零影响** —— 开关只接管绘制与点击, + 没有新增或删除任何参数。 +- **开关交互修复**:① 点击分界与绘制统一为同一套几何(此前节点较宽时点中段会切错档、点开关右侧空白会误切); + ② 挂在节点上的绘制 / 点击钩子改为**链式调用**,不再覆盖别的插件挂的同名钩子; + ③ 鼠标移出开关后悬停高亮不再残留。 + +### 2026-10-09 + +- **加载模式开关上线**:`UNet`(分离组件)/ `Checkpoint`(一体包)两段切换,替代原来的下拉框。 +- **模型参数置顶**:`ckpt_name` / `unet_name` / `clip_name` / `vae_name` / `clip_type` 排到参数列表最前, + 一体包模式下一眼就能看到 checkpoint 行。旧工作流加载时**按参数名自动迁移**,不受顺序变化影响。 +- **LoRA 状态提示**:按钮回传每个 LoRA 实际写入的 patch 数与模块覆盖率(如 `192/224p`); + 分体模式下还会比对 CLIP 实例类名与模型是否配套,不匹配时显示 `⚠️CLIP不符`。 + +### 2026-10-08 + +- **一体包加载模式**:`ToggleUnifiedLoader` 融合 Checkpoint 加载器,新增 `加载模式` 参数 —— + `分离组件 (UNet+CLIP+VAE)`(默认)/ `Checkpoint 一体包`,两种模式都能挂 LoRA。 +- **LoRA 强度合并为一个滑块**:`model` 与 `clip` 两个强度合并显示,CLIP 侧自动跟随 MODEL 侧 —— + 界面上看到的强度就是实际生效的强度。 +- **LoRA 诊断**:按钮显示已启用的 LoRA 数量与「强度为 0」告警;控制台打印每个 LoRA 最终挂上了多少 patch。 +- 修复:LoRA 组全部移除后节点自动**回收高度**(不再留一大条空框);「- 移除 LoRA」不再把强度清成 0。 + +### 2026-10-03 + +- 修复画布菜单新建节点的落点:改为**鼠标所在位置**(原来是画布可视中心)。 + +### 2026-09-25 + +- **画布菜单入口**「🔄 Toggle-Pass」:在画布右键菜单里即可添加本插件的节点,节点列表运行时自动收集。 + - **怎么用**:画布空白处右键 → 菜单里选 `🔄 Toggle-Pass`。 +- `OneImageMultiPrompt` 支持 **Qwen Image 2.1**;`prompt数量` 自动收起多余的 prompt 输入框。 + +### 2026-09-24 + +- `DynamicRefImageEncode` / `DynamicRefIndependent` 支持 **Qwen Image 2.1**。 +- **分辨率控制**:新增 `宽高比` + `百万像素` + `倍数`,以及 `参考图分辨率`、`尺寸适配`。 +- 修复 CLIP 类型检测(此前 Qwen Image 2.1 的专用文本编码器无法加载,参考图会被静默丢弃)。 +- 界面按「模型类型」自动显隐参数;旧工作流的错位脏值自动归位;`倍数` 下限由 16 提到 32。 + +### 2026-05-12 + +- `DynamicRefImageEncode` 新增 `Qwen Layered` 模型类型:选中后显示「图层数」,输出分层 latent。 +- `ToggleUnifiedLoader` 新增「- 移除 LoRA」按钮(从最后一组开始移除)。 + +### 2026-05-10 + +- 新增 **`ToggleUnifiedLoader`**(统一模型 + LoRA 加载器):把 UNet / CLIP / VAE / 多 LoRA 整合到单一节点, + 最多 10 组 LoRA 槽位(选了才显示),支持自动检测 CLIP 类型。 + +### 2026-05-08 + +- 新增节点:`SaveLoadImage`(保存/加载切换)、`ToggleLoadImage`、`TogglePreviewImage`、`ToggleEmptyLatent`。 +- 新增**隐私遮罩**(👁 / 🫣 切换,适用于图片类节点)。 +- 新增 **DynamicRef 系列**:`DynamicRefIndependent`、`DynamicRefImageEncode`、`DynamicRefLatentInput`、 + `ImageBatcher`、`OneImageMultiPrompt`。 + +--- + +## 安装 / Installation + +Place this folder under `ComfyUI/custom_nodes/` and restart ComfyUI. + +把本文件夹放到 `ComfyUI/custom_nodes/` 目录下,重启 ComfyUI 即可。 diff --git a/__init__.py b/__init__.py index 5eb0bd2..9d974c4 100644 --- a/__init__.py +++ b/__init__.py @@ -2,9 +2,14 @@ ComfyUI Toggle Pass - Toggle nodes + Image IO + Multi-Ref Encode Author: Clever """ +# 版本号:与 pyproject.toml 的 [project].version 保持一致。 +# ComfyUI-Manager / Comfy Registry 读 pyproject.toml;这里供运行时打印、方便看日志排查。 +__version__ = "1.0.0" + from .multi_ref_encode import NODE_CLASS_MAPPINGS as MULTI_REF_NODES, NODE_DISPLAY_NAME_MAPPINGS as MULTI_REF_NAMES from .unified_loader import NODE_CLASS_MAPPINGS as UNIFIED_NODES, NODE_DISPLAY_NAME_MAPPINGS as UNIFIED_NAMES from .sampler import NODE_CLASS_MAPPINGS as SAMPLER_NODES, NODE_DISPLAY_NAME_MAPPINGS as SAMPLER_NAMES +from .pose_reference import NODE_CLASS_MAPPINGS as POSE_NODES, NODE_DISPLAY_NAME_MAPPINGS as POSE_NAMES import os import json @@ -298,6 +303,25 @@ class SaveLoadImage: class ToggleEmptyLatent: + """开关空 Latent。 + + `latent类型` 决定通道数与空间压缩比,必须和底模的 latent_format 对齐: + · SD / SDXL 4 通道 8× + · SD3 / Flux / Krea 2 16 通道 8× (Krea2 走 Wan21 格式,latent_dimensions=3) + · Qwen-Image 2.1 64 通道 16× + · Flux2 128 通道 16× + 通道给错不会立刻报错 —— K采样器里的 fix_empty_latent_channels 只会在 + 「latent 全零」时按模型补齐通道,属于隐式兜底;直接接别的 latent 处理节点就不会修。 + """ + + LATENT_PRESETS = { + "SD / SDXL(4 通道 · 8×)": (4, 8), + "SD3 / Flux / Krea 2(16 通道 · 8×)": (16, 8), + "Qwen-Image 2.1(64 通道 · 16×)": (64, 16), + "Flux2(128 通道 · 16×)": (128, 16), + } + DEFAULT_LATENT = "SD / SDXL(4 通道 · 8×)" + @classmethod def INPUT_TYPES(cls): return { @@ -310,6 +334,12 @@ class ToggleEmptyLatent: "optional": { "fallback_width": ("INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}), "fallback_height": ("INT", {"default": 1024, "min": 16, "max": 16384, "step": 8}), + # ⚠️ 必须放在 fallback_height 之后 —— 前端控件顺序是 required 全部 + optional, + # 老存档的 widgets_values 是 [width,height,batch_size,enabled,fb_w,fb_h] 六项, + # 早先把它插在 enabled 后面(fb_w 之前),老图加载时 fb_w 的 1024 会灌进来, + # 点运行直接 value_not_in_list: latent类型 1024 ⇒ 400,看着就是「跑不了」。 + # 放最后 ⇒ 老图前 6 位对得上,这一项拿 default(4 通道,即老行为)。 + "latent类型": (list(cls.LATENT_PRESETS.keys()), {"default": cls.DEFAULT_LATENT}), }, } @@ -318,7 +348,8 @@ class ToggleEmptyLatent: FUNCTION = "generate" CATEGORY = "Toggle-Pass" - def generate(self, width, height, batch_size=1, enabled="ON", fallback_width=None, fallback_height=None): + def generate(self, width, height, batch_size=1, enabled="ON", latent类型=None, + fallback_width=None, fallback_height=None): if fallback_width is None: fallback_width = 1024 if fallback_height is None: @@ -326,10 +357,14 @@ class ToggleEmptyLatent: if enabled != "ON": width = fallback_width height = fallback_height - latent = torch.zeros([batch_size, 4, height // 8, width // 8], + channels, scale = self.LATENT_PRESETS.get(latent类型, self.LATENT_PRESETS[self.DEFAULT_LATENT]) + # 宽高先向下对齐到压缩比的倍数,避免出现非整数网格 + h = max(1, height // scale) + w = max(1, width // scale) + latent = torch.zeros([batch_size, channels, h, w], device=comfy.model_management.intermediate_device(), dtype=comfy.model_management.intermediate_dtype()) - return ({"samples": latent, "downscale_ratio_spacial": 8},) + return ({"samples": latent, "downscale_ratio_spacial": scale},) # ==================== Image Compare ==================== @@ -579,6 +614,7 @@ NODE_CLASS_MAPPINGS = { **MULTI_REF_NODES, **UNIFIED_NODES, **SAMPLER_NODES, + **POSE_NODES, "ToggleEmptyLatent": ToggleEmptyLatent, "SaveLoadImage": SaveLoadImage, "ToggleLoadImage": ToggleLoadImage, @@ -590,9 +626,12 @@ NODE_DISPLAY_NAME_MAPPINGS = { **MULTI_REF_NAMES, **UNIFIED_NAMES, **SAMPLER_NAMES, + **POSE_NAMES, "ToggleEmptyLatent": "Toggle Empty Latent", "SaveLoadImage": "Save/Load Image", "ToggleLoadImage": "Toggle Load Image", "TogglePreviewImage": "Toggle Preview Image", "ToggleImageCompare": "图片对比", } + +print(f"[Toggle-Pass] v{__version__} loaded — {len(NODE_CLASS_MAPPINGS)} nodes") diff --git a/example_workflows/All-in-One Demo.json b/example_workflows/All-in-One Demo.json index de521ef..58ad7a8 100644 --- a/example_workflows/All-in-One Demo.json +++ b/example_workflows/All-in-One Demo.json @@ -1 +1 @@ -{"id":"a6469650-cb96-4ae7-87a1-fd6014dd3877","revision":0,"last_node_id":32,"last_link_id":66,"nodes":[{"id":1,"type":"DynamicRefImageEncode","pos":[548.2320130660914,-65.8117662047309],"size":[270,462],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":null},{"localized_name":"vae","name":"vae","type":"VAE","link":null},{"localized_name":"image1","name":"image1","shape":7,"type":"IMAGE","link":32},{"localized_name":"num_images","name":"num_images","type":"INT","widget":{"name":"num_images"},"link":null},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"instruction","name":"instruction","type":"STRING","widget":{"name":"instruction"},"link":null},{"localized_name":"模型类型","name":"模型类型","shape":7,"type":"COMBO","widget":{"name":"模型类型"},"link":null},{"localized_name":"匹配原图尺寸","name":"匹配原图尺寸","shape":7,"type":"COMBO","widget":{"name":"匹配原图尺寸"},"link":null},{"localized_name":"输出宽度","name":"输出宽度","shape":7,"type":"INT","widget":{"name":"输出宽度"},"link":null},{"localized_name":"输出高度","name":"输出高度","shape":7,"type":"INT","widget":{"name":"输出高度"},"link":null},{"localized_name":"尺寸适配","name":"尺寸适配","shape":7,"type":"COMBO","widget":{"name":"尺寸适配"},"link":null},{"localized_name":"图层数","name":"图层数","shape":7,"type":"INT","widget":{"name":"图层数"},"link":null},{"localized_name":"宽高比","name":"宽高比","shape":7,"type":"COMBO","widget":{"name":"宽高比"},"link":null},{"localized_name":"百万像素","name":"百万像素","shape":7,"type":"FLOAT","widget":{"name":"百万像素"},"link":null},{"localized_name":"倍数","name":"倍数","shape":7,"type":"INT","widget":{"name":"倍数"},"link":null},{"localized_name":"参考图分辨率","name":"参考图分辨率","shape":7,"type":"INT","widget":{"name":"参考图分辨率"},"link":null},{"name":"image2","type":"IMAGE","link":33},{"name":"image3","type":"IMAGE","link":null}],"outputs":[{"localized_name":"conditioning","name":"conditioning","type":"CONDITIONING","links":[1,3]},{"localized_name":"latent","name":"latent","type":"LATENT","links":[2]}],"properties":{"Node name for S&R":"DynamicRefImageEncode","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":[3,"","Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.","Qwen Image 2.1","ON",1920,1080,"参考图保比例",3,"自定义(用输出宽度/高度)",1,32,1024],"widgets_values_named":{"num_images":3,"prompt":"","instruction":"Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.","模型类型":"Qwen Image 2.1","匹配原图尺寸":"ON","输出宽度":1920,"输出高度":1080,"尺寸适配":"参考图保比例","图层数":3,"宽高比":"自定义(用输出宽度/高度)","百万像素":1,"倍数":32,"参考图分辨率":1024},"bgcolor":"rgba(0,0,0,0)"},{"id":2,"type":"ToggleSampler","pos":[945.195075140908,-65.8117662047309],"size":[280,340],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"模型","name":"模型","type":"MODEL","link":null},{"localized_name":"正面条件","name":"正面条件","type":"CONDITIONING","link":1},{"localized_name":"负面条件","name":"负面条件","type":"CONDITIONING","link":3},{"localized_name":"Latent图像","name":"Latent图像","type":"LATENT","link":2},{"localized_name":"采样方案","name":"采样方案","type":"COMBO","widget":{"name":"采样方案"},"link":null},{"localized_name":"采样器","name":"采样器","type":"COMBO","widget":{"name":"采样器"},"link":null},{"localized_name":"调度器","name":"调度器","type":"COMBO","widget":{"name":"调度器"},"link":null},{"localized_name":"步数","name":"步数","type":"INT","widget":{"name":"步数"},"link":null},{"localized_name":"CFG","name":"CFG","type":"FLOAT","widget":{"name":"CFG"},"link":null},{"localized_name":"降噪","name":"降噪","type":"FLOAT","widget":{"name":"降噪"},"link":null},{"localized_name":"噪波随机种","name":"噪波随机种","type":"INT","widget":{"name":"噪波随机种"},"link":null},{"localized_name":"自定义Sigma表","name":"自定义Sigma表","type":"STRING","widget":{"name":"自定义Sigma表"},"link":null}],"outputs":[{"localized_name":"Latent","name":"Latent","type":"LATENT","links":[7]},{"localized_name":"降噪Latent","name":"降噪Latent","type":"LATENT","links":null}],"properties":{"Node name for S&R":"ToggleSampler","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["自动(按步数 + 调度器)","euler","simple",25,1,1,971656685632169,"randomize","1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0"],"widgets_values_named":{"采样方案":"自动(按步数 + 调度器)","采样器":"euler","调度器":"simple","步数":25,"CFG":1,"降噪":1,"噪波随机种":971656685632169,"control_after_generate":"randomize","自定义Sigma表":"1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0"},"bgcolor":"rgba(0,0,0,0)"},{"id":3,"type":"ToggleUnifiedLoader","pos":[193.50137286627495,-65.8117662047309],"size":[235,218],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"unet_name","name":"unet_name","type":"COMBO","widget":{"name":"unet_name"},"link":null},{"localized_name":"clip_name","name":"clip_name","type":"COMBO","widget":{"name":"clip_name"},"link":null},{"localized_name":"vae_name","name":"vae_name","type":"COMBO","widget":{"name":"vae_name"},"link":null},{"localized_name":"clip_type","name":"clip_type","type":"COMBO","widget":{"name":"clip_type"},"link":null},{"localized_name":"lora_name_1","name":"lora_name_1","type":"COMBO","widget":{"name":"lora_name_1"},"link":null},{"localized_name":"lora_strength_model_1","name":"lora_strength_model_1","type":"FLOAT","widget":{"name":"lora_strength_model_1"},"link":null},{"localized_name":"lora_strength_clip_1","name":"lora_strength_clip_1","type":"FLOAT","widget":{"name":"lora_strength_clip_1"},"link":null},{"localized_name":"lora_name_2","name":"lora_name_2","type":"COMBO","widget":{"name":"lora_name_2"},"link":null},{"localized_name":"lora_strength_model_2","name":"lora_strength_model_2","type":"FLOAT","widget":{"name":"lora_strength_model_2"},"link":null},{"localized_name":"lora_strength_clip_2","name":"lora_strength_clip_2","type":"FLOAT","widget":{"name":"lora_strength_clip_2"},"link":null},{"localized_name":"lora_name_3","name":"lora_name_3","type":"COMBO","widget":{"name":"lora_name_3"},"link":null},{"localized_name":"lora_strength_model_3","name":"lora_strength_model_3","type":"FLOAT","widget":{"name":"lora_strength_model_3"},"link":null},{"localized_name":"lora_strength_clip_3","name":"lora_strength_clip_3","type":"FLOAT","widget":{"name":"lora_strength_clip_3"},"link":null},{"localized_name":"lora_name_4","name":"lora_name_4","type":"COMBO","widget":{"name":"lora_name_4"},"link":null},{"localized_name":"lora_strength_model_4","name":"lora_strength_model_4","type":"FLOAT","widget":{"name":"lora_strength_model_4"},"link":null},{"localized_name":"lora_strength_clip_4","name":"lora_strength_clip_4","type":"FLOAT","widget":{"name":"lora_strength_clip_4"},"link":null},{"localized_name":"lora_name_5","name":"lora_name_5","type":"COMBO","widget":{"name":"lora_name_5"},"link":null},{"localized_name":"lora_strength_model_5","name":"lora_strength_model_5","type":"FLOAT","widget":{"name":"lora_strength_model_5"},"link":null},{"localized_name":"lora_strength_clip_5","name":"lora_strength_clip_5","type":"FLOAT","widget":{"name":"lora_strength_clip_5"},"link":null},{"localized_name":"lora_name_6","name":"lora_name_6","type":"COMBO","widget":{"name":"lora_name_6"},"link":null},{"localized_name":"lora_strength_model_6","name":"lora_strength_model_6","type":"FLOAT","widget":{"name":"lora_strength_model_6"},"link":null},{"localized_name":"lora_strength_clip_6","name":"lora_strength_clip_6","type":"FLOAT","widget":{"name":"lora_strength_clip_6"},"link":null},{"localized_name":"lora_name_7","name":"lora_name_7","type":"COMBO","widget":{"name":"lora_name_7"},"link":null},{"localized_name":"lora_strength_model_7","name":"lora_strength_model_7","type":"FLOAT","widget":{"name":"lora_strength_model_7"},"link":null},{"localized_name":"lora_strength_clip_7","name":"lora_strength_clip_7","type":"FLOAT","widget":{"name":"lora_strength_clip_7"},"link":null},{"localized_name":"lora_name_8","name":"lora_name_8","type":"COMBO","widget":{"name":"lora_name_8"},"link":null},{"localized_name":"lora_strength_model_8","name":"lora_strength_model_8","type":"FLOAT","widget":{"name":"lora_strength_model_8"},"link":null},{"localized_name":"lora_strength_clip_8","name":"lora_strength_clip_8","type":"FLOAT","widget":{"name":"lora_strength_clip_8"},"link":null},{"localized_name":"lora_name_9","name":"lora_name_9","type":"COMBO","widget":{"name":"lora_name_9"},"link":null},{"localized_name":"lora_strength_model_9","name":"lora_strength_model_9","type":"FLOAT","widget":{"name":"lora_strength_model_9"},"link":null},{"localized_name":"lora_strength_clip_9","name":"lora_strength_clip_9","type":"FLOAT","widget":{"name":"lora_strength_clip_9"},"link":null},{"localized_name":"lora_name_10","name":"lora_name_10","type":"COMBO","widget":{"name":"lora_name_10"},"link":null},{"localized_name":"lora_strength_model_10","name":"lora_strength_model_10","type":"FLOAT","widget":{"name":"lora_strength_model_10"},"link":null},{"localized_name":"lora_strength_clip_10","name":"lora_strength_clip_10","type":"FLOAT","widget":{"name":"lora_strength_clip_10"},"link":null},{"localized_name":"加载模式","name":"加载模式","type":"COMBO","widget":{"name":"加载模式"},"link":null},{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"模型","name":"MODEL","type":"MODEL","links":[]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":[]},{"localized_name":"VAE","name":"VAE","type":"VAE","links":[]}],"properties":{"Node name for S&R":"ToggleUnifiedLoader","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"},"tp_broadcast":true},"widgets_values":["krea2-aio-fp8-checkpoint.safetensors","Qwen\\qwen_image_2.1_int8_convrot.safetensors","qwen\\qwen3vl_8b_int8_convrot.safetensors","qwen_image_2.1_vae_bf16.safetensors","qwen_image","分离组件 (UNet+CLIP+VAE)","none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,null,null],"widgets_values_named":{"ckpt_name":"krea2-aio-fp8-checkpoint.safetensors","unet_name":"Qwen\\qwen_image_2.1_int8_convrot.safetensors","clip_name":"qwen\\qwen3vl_8b_int8_convrot.safetensors","vae_name":"qwen_image_2.1_vae_bf16.safetensors","clip_type":"qwen_image","加载模式":"分离组件 (UNet+CLIP+VAE)","lora_name_1":"none","lora_strength_model_1":1,"lora_strength_clip_1":1,"lora_name_2":"none","lora_strength_model_2":1,"lora_strength_clip_2":1,"lora_name_3":"none","lora_strength_model_3":1,"lora_strength_clip_3":1,"lora_name_4":"none","lora_strength_model_4":1,"lora_strength_clip_4":1,"lora_name_5":"none","lora_strength_model_5":1,"lora_strength_clip_5":1,"lora_name_6":"none","lora_strength_model_6":1,"lora_strength_clip_6":1,"lora_name_7":"none","lora_strength_model_7":1,"lora_strength_clip_7":1,"lora_name_8":"none","lora_strength_model_8":1,"lora_strength_clip_8":1,"lora_name_9":"none","lora_strength_model_9":1,"lora_strength_clip_9":1,"lora_name_10":"none","lora_strength_model_10":1,"lora_strength_clip_10":1,"_tp_add_lora_btn":null,"_tp_rm_lora_btn":null},"bgcolor":"rgba(0,0,0,0)"},{"id":4,"type":"VAEDecode","pos":[1352.1581372157245,-65.8117662047309],"size":[140,46],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"Latent","name":"samples","type":"LATENT","link":7},{"localized_name":"vae","name":"vae","type":"VAE","link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[26,40]}],"properties":{"cnr_id":"comfy-core","ver":"0.41.3","Node name for S&R":"VAEDecode","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"bgcolor":"rgba(0,0,0,0)"},{"id":15,"type":"ToggleImageCompare","pos":[947.0558551183833,383.2807628933681],"size":[260,382],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"num_sources","name":"num_sources","type":"INT","widget":{"name":"num_sources"},"link":null},{"localized_name":"num_results","name":"num_results","type":"INT","widget":{"name":"num_results"},"link":null},{"localized_name":"排版","name":"排版","type":"COMBO","widget":{"name":"排版"},"link":null},{"localized_name":"标签","name":"标签","type":"COMBO","widget":{"name":"标签"},"link":null},{"label":"原图1","name":"source1","type":"IMAGE","link":38},{"label":"原图2","name":"source2","type":"IMAGE","link":39},{"label":"结果1","name":"result1","type":"IMAGE","link":40}],"outputs":[{"localized_name":"对比图","name":"对比图","type":"IMAGE","links":[58]}],"properties":{"Node name for S&R":"ToggleImageCompare","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":[2,1,"上下两排","显示"],"widgets_values_named":{"num_sources":2,"num_results":1,"排版":"上下两排","标签":"显示"},"bgcolor":"rgba(0,0,0,0)"},{"id":22,"type":"SaveLoadImage","pos":[1868.7911975827967,76.67050610637425],"size":[421,570],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":26},{"localized_name":"use_saved","name":"use_saved","type":"COMBO","widget":{"name":"use_saved"},"link":null},{"localized_name":"filename_prefix","name":"filename_prefix","shape":7,"type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":null},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"SaveLoadImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["Save","ComfyUI"],"widgets_values_named":{"use_saved":"Save","filename_prefix":"ComfyUI"},"bgcolor":"rgba(0,0,0,0)"},{"id":24,"type":"ToggleLoadImage","pos":[-203.4616892085416,-65.8117662047309],"size":[270,314],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[32,38]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"ToggleLoadImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["ComfyUI_00229_.png","image"],"widgets_values_named":{"image":"ComfyUI_00229_.png","upload":"image"},"bgcolor":"rgba(0,0,0,0)"},{"id":25,"type":"ToggleLoadImage","pos":[-203.4616892085416,378.669205833232],"size":[270,314],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[33,39]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":[]}],"properties":{"Node name for S&R":"ToggleLoadImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["CMP_full25_00002_.png","image"],"widgets_values_named":{"image":"CMP_full25_00002_.png","upload":"image"},"bgcolor":"rgba(0,0,0,0)"},{"id":29,"type":"TogglePreviewImage","pos":[1352.1581372157245,76.67050610637425],"size":[421,570],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":58}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[]}],"properties":{"ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"},"Node name for S&R":"TogglePreviewImage"},"widgets_values":[],"widgets_values_named":{},"bgcolor":"rgba(0,0,0,0)"}],"links":[[1,1,0,2,1,"CONDITIONING"],[2,1,1,2,3,"LATENT"],[3,1,0,2,2,"CONDITIONING"],[7,2,0,4,0,"LATENT"],[26,4,0,22,0,"IMAGE"],[32,24,0,1,2,"IMAGE"],[33,25,0,1,16,"IMAGE"],[38,24,0,15,4,"IMAGE"],[39,25,0,15,5,"IMAGE"],[40,4,0,15,6,"IMAGE"],[58,15,0,29,0,"IMAGE"]],"groups":[],"config":{},"extra":{"ue_links":[],"ds":{"scale":1.2284597357367515,"offset":[205.95097762416663,351.244434719383]},"links_added_by_ue":[]},"version":0.4} \ No newline at end of file +{"id":"a6469650-cb96-4ae7-87a1-fd6014dd3877","revision":0,"last_node_id":32,"last_link_id":70,"nodes":[{"id":1,"type":"DynamicRefImageEncode","pos":[548.2320130660914,-65.8117662047309],"size":[270,462],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":null},{"localized_name":"vae","name":"vae","type":"VAE","link":null},{"localized_name":"image1","name":"image1","shape":7,"type":"IMAGE","link":32},{"localized_name":"num_images","name":"num_images","type":"INT","widget":{"name":"num_images"},"link":null},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"instruction","name":"instruction","type":"STRING","widget":{"name":"instruction"},"link":null},{"localized_name":"模型类型","name":"模型类型","shape":7,"type":"COMBO","widget":{"name":"模型类型"},"link":null},{"localized_name":"匹配原图尺寸","name":"匹配原图尺寸","shape":7,"type":"COMBO","widget":{"name":"匹配原图尺寸"},"link":null},{"localized_name":"输出宽度","name":"输出宽度","shape":7,"type":"INT","widget":{"name":"输出宽度"},"link":null},{"localized_name":"输出高度","name":"输出高度","shape":7,"type":"INT","widget":{"name":"输出高度"},"link":null},{"localized_name":"尺寸适配","name":"尺寸适配","shape":7,"type":"COMBO","widget":{"name":"尺寸适配"},"link":null},{"localized_name":"图层数","name":"图层数","shape":7,"type":"INT","widget":{"name":"图层数"},"link":null},{"localized_name":"宽高比","name":"宽高比","shape":7,"type":"COMBO","widget":{"name":"宽高比"},"link":null},{"localized_name":"百万像素","name":"百万像素","shape":7,"type":"FLOAT","widget":{"name":"百万像素"},"link":null},{"localized_name":"倍数","name":"倍数","shape":7,"type":"INT","widget":{"name":"倍数"},"link":null},{"localized_name":"参考图分辨率","name":"参考图分辨率","shape":7,"type":"INT","widget":{"name":"参考图分辨率"},"link":null},{"name":"image2","type":"IMAGE","link":33},{"name":"image3","type":"IMAGE","link":null}],"outputs":[{"localized_name":"conditioning","name":"conditioning","type":"CONDITIONING","links":[1]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[70]},{"localized_name":"latent","name":"latent","type":"LATENT","links":[2]}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"DynamicRefImageEncode","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":[3,"","Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.","Qwen Image 2.1","ON",1920,1080,"参考图保比例",3,"自定义(用输出宽度/高度)",1,32,1024],"widgets_values_named":{"num_images":3,"prompt":"","instruction":"Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.","模型类型":"Qwen Image 2.1","匹配原图尺寸":"ON","输出宽度":1920,"输出高度":1080,"尺寸适配":"参考图保比例","图层数":3,"宽高比":"自定义(用输出宽度/高度)","百万像素":1,"倍数":32,"参考图分辨率":1024},"bgcolor":"rgba(0,0,0,0)"},{"id":2,"type":"ToggleSampler","pos":[945.195075140908,-65.8117662047309],"size":[350,364],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"模型","name":"模型","type":"MODEL","link":null},{"localized_name":"正面条件","name":"正面条件","type":"CONDITIONING","link":1},{"localized_name":"负面条件","name":"负面条件","type":"CONDITIONING","link":70},{"localized_name":"Latent图像","name":"Latent图像","type":"LATENT","link":2},{"localized_name":"模型预设","name":"模型预设","type":"COMBO","widget":{"name":"模型预设"},"link":null},{"localized_name":"采样方案","name":"采样方案","type":"COMBO","widget":{"name":"采样方案"},"link":null},{"localized_name":"采样器","name":"采样器","type":"COMBO","widget":{"name":"采样器"},"link":null},{"localized_name":"调度器","name":"调度器","type":"COMBO","widget":{"name":"调度器"},"link":null},{"localized_name":"步数","name":"步数","type":"INT","widget":{"name":"步数"},"link":null},{"localized_name":"CFG","name":"CFG","type":"FLOAT","widget":{"name":"CFG"},"link":null},{"localized_name":"降噪","name":"降噪","type":"FLOAT","widget":{"name":"降噪"},"link":null},{"localized_name":"噪波随机种","name":"噪波随机种","type":"INT","widget":{"name":"噪波随机种"},"link":null},{"localized_name":"自定义Sigma表","name":"自定义Sigma表","type":"STRING","widget":{"name":"自定义Sigma表"},"link":null}],"outputs":[{"localized_name":"Latent","name":"Latent","type":"LATENT","links":[7]},{"localized_name":"降噪Latent","name":"降噪Latent","type":"LATENT","links":null}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"ToggleSampler","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["手动(不套用)","自动(按步数 + 调度器)","euler","simple",25,1,1,971656685632169,"randomize","1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0"],"widgets_values_named":{"模型预设":"手动(不套用)","采样方案":"自动(按步数 + 调度器)","采样器":"euler","调度器":"simple","步数":25,"CFG":1,"降噪":1,"噪波随机种":971656685632169,"control_after_generate":"randomize","自定义Sigma表":"1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0"},"bgcolor":"rgba(0,0,0,0)"},{"id":3,"type":"ToggleUnifiedLoader","pos":[193.50137286627495,-65.8117662047309],"size":[210,218],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"unet_name","name":"unet_name","type":"COMBO","widget":{"name":"unet_name"},"link":null},{"localized_name":"clip_name","name":"clip_name","type":"COMBO","widget":{"name":"clip_name"},"link":null},{"localized_name":"vae_name","name":"vae_name","type":"COMBO","widget":{"name":"vae_name"},"link":null},{"localized_name":"clip_type","name":"clip_type","type":"COMBO","widget":{"name":"clip_type"},"link":null},{"localized_name":"lora_name_1","name":"lora_name_1","type":"COMBO","widget":{"name":"lora_name_1"},"link":null},{"localized_name":"lora_strength_model_1","name":"lora_strength_model_1","type":"FLOAT","widget":{"name":"lora_strength_model_1"},"link":null},{"localized_name":"lora_strength_clip_1","name":"lora_strength_clip_1","type":"FLOAT","widget":{"name":"lora_strength_clip_1"},"link":null},{"localized_name":"lora_name_2","name":"lora_name_2","type":"COMBO","widget":{"name":"lora_name_2"},"link":null},{"localized_name":"lora_strength_model_2","name":"lora_strength_model_2","type":"FLOAT","widget":{"name":"lora_strength_model_2"},"link":null},{"localized_name":"lora_strength_clip_2","name":"lora_strength_clip_2","type":"FLOAT","widget":{"name":"lora_strength_clip_2"},"link":null},{"localized_name":"lora_name_3","name":"lora_name_3","type":"COMBO","widget":{"name":"lora_name_3"},"link":null},{"localized_name":"lora_strength_model_3","name":"lora_strength_model_3","type":"FLOAT","widget":{"name":"lora_strength_model_3"},"link":null},{"localized_name":"lora_strength_clip_3","name":"lora_strength_clip_3","type":"FLOAT","widget":{"name":"lora_strength_clip_3"},"link":null},{"localized_name":"lora_name_4","name":"lora_name_4","type":"COMBO","widget":{"name":"lora_name_4"},"link":null},{"localized_name":"lora_strength_model_4","name":"lora_strength_model_4","type":"FLOAT","widget":{"name":"lora_strength_model_4"},"link":null},{"localized_name":"lora_strength_clip_4","name":"lora_strength_clip_4","type":"FLOAT","widget":{"name":"lora_strength_clip_4"},"link":null},{"localized_name":"lora_name_5","name":"lora_name_5","type":"COMBO","widget":{"name":"lora_name_5"},"link":null},{"localized_name":"lora_strength_model_5","name":"lora_strength_model_5","type":"FLOAT","widget":{"name":"lora_strength_model_5"},"link":null},{"localized_name":"lora_strength_clip_5","name":"lora_strength_clip_5","type":"FLOAT","widget":{"name":"lora_strength_clip_5"},"link":null},{"localized_name":"lora_name_6","name":"lora_name_6","type":"COMBO","widget":{"name":"lora_name_6"},"link":null},{"localized_name":"lora_strength_model_6","name":"lora_strength_model_6","type":"FLOAT","widget":{"name":"lora_strength_model_6"},"link":null},{"localized_name":"lora_strength_clip_6","name":"lora_strength_clip_6","type":"FLOAT","widget":{"name":"lora_strength_clip_6"},"link":null},{"localized_name":"lora_name_7","name":"lora_name_7","type":"COMBO","widget":{"name":"lora_name_7"},"link":null},{"localized_name":"lora_strength_model_7","name":"lora_strength_model_7","type":"FLOAT","widget":{"name":"lora_strength_model_7"},"link":null},{"localized_name":"lora_strength_clip_7","name":"lora_strength_clip_7","type":"FLOAT","widget":{"name":"lora_strength_clip_7"},"link":null},{"localized_name":"lora_name_8","name":"lora_name_8","type":"COMBO","widget":{"name":"lora_name_8"},"link":null},{"localized_name":"lora_strength_model_8","name":"lora_strength_model_8","type":"FLOAT","widget":{"name":"lora_strength_model_8"},"link":null},{"localized_name":"lora_strength_clip_8","name":"lora_strength_clip_8","type":"FLOAT","widget":{"name":"lora_strength_clip_8"},"link":null},{"localized_name":"lora_name_9","name":"lora_name_9","type":"COMBO","widget":{"name":"lora_name_9"},"link":null},{"localized_name":"lora_strength_model_9","name":"lora_strength_model_9","type":"FLOAT","widget":{"name":"lora_strength_model_9"},"link":null},{"localized_name":"lora_strength_clip_9","name":"lora_strength_clip_9","type":"FLOAT","widget":{"name":"lora_strength_clip_9"},"link":null},{"localized_name":"lora_name_10","name":"lora_name_10","type":"COMBO","widget":{"name":"lora_name_10"},"link":null},{"localized_name":"lora_strength_model_10","name":"lora_strength_model_10","type":"FLOAT","widget":{"name":"lora_strength_model_10"},"link":null},{"localized_name":"lora_strength_clip_10","name":"lora_strength_clip_10","type":"FLOAT","widget":{"name":"lora_strength_clip_10"},"link":null},{"localized_name":"加载模式","name":"加载模式","type":"COMBO","widget":{"name":"加载模式"},"link":null},{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"模型","name":"MODEL","type":"MODEL","links":[]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":[]},{"localized_name":"VAE","name":"VAE","type":"VAE","links":[]}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"ToggleUnifiedLoader","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"},"tp_broadcast":true},"widgets_values":["krea2-aio-fp8-checkpoint.safetensors","Qwen\\qwen_image_2.1_int8_convrot.safetensors","qwen\\qwen3vl_8b_int8_convrot.safetensors","qwen_image_2.1_vae_bf16.safetensors","qwen_image","分离组件 (UNet+CLIP+VAE)","none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,"none",1,1,null,null],"widgets_values_named":{"ckpt_name":"krea2-aio-fp8-checkpoint.safetensors","unet_name":"Qwen\\qwen_image_2.1_int8_convrot.safetensors","clip_name":"qwen\\qwen3vl_8b_int8_convrot.safetensors","vae_name":"qwen_image_2.1_vae_bf16.safetensors","clip_type":"qwen_image","加载模式":"分离组件 (UNet+CLIP+VAE)","lora_name_1":"none","lora_strength_model_1":1,"lora_strength_clip_1":1,"lora_name_2":"none","lora_strength_model_2":1,"lora_strength_clip_2":1,"lora_name_3":"none","lora_strength_model_3":1,"lora_strength_clip_3":1,"lora_name_4":"none","lora_strength_model_4":1,"lora_strength_clip_4":1,"lora_name_5":"none","lora_strength_model_5":1,"lora_strength_clip_5":1,"lora_name_6":"none","lora_strength_model_6":1,"lora_strength_clip_6":1,"lora_name_7":"none","lora_strength_model_7":1,"lora_strength_clip_7":1,"lora_name_8":"none","lora_strength_model_8":1,"lora_strength_clip_8":1,"lora_name_9":"none","lora_strength_model_9":1,"lora_strength_clip_9":1,"lora_name_10":"none","lora_strength_model_10":1,"lora_strength_clip_10":1,"_tp_add_lora_btn":null,"_tp_rm_lora_btn":null},"bgcolor":"rgba(0,0,0,0)"},{"id":4,"type":"VAEDecode","pos":[1352.1581372157245,-65.8117662047309],"size":[140,46],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"Latent","name":"samples","type":"LATENT","link":7},{"localized_name":"vae","name":"vae","type":"VAE","link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[26,69]}],"properties":{"cnr_id":"comfy-core","ver":"0.41.3","Node name for S&R":"VAEDecode","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"bgcolor":"rgba(0,0,0,0)"},{"id":15,"type":"ToggleImageCompare","pos":[947.0558551183833,383.2807628933681],"size":[260,170],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"num_sources","name":"num_sources","type":"INT","widget":{"name":"num_sources"},"link":null},{"localized_name":"num_results","name":"num_results","type":"INT","widget":{"name":"num_results"},"link":null},{"localized_name":"排版","name":"排版","type":"COMBO","widget":{"name":"排版"},"link":null},{"localized_name":"标签","name":"标签","type":"COMBO","widget":{"name":"标签"},"link":null},{"label":"原图1","name":"source1","type":"IMAGE","link":67},{"label":"原图2","name":"source2","type":"IMAGE","link":68},{"label":"结果1","name":"result1","type":"IMAGE","link":69}],"outputs":[{"localized_name":"对比图","name":"对比图","type":"IMAGE","links":[58]}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"ToggleImageCompare","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":[2,1,"上下两排","显示"],"widgets_values_named":{"num_sources":2,"num_results":1,"排版":"上下两排","标签":"显示"},"bgcolor":"rgba(0,0,0,0)"},{"id":22,"type":"SaveLoadImage","pos":[1868.7911975827967,76.67050610637425],"size":[421,570],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":26},{"localized_name":"use_saved","name":"use_saved","type":"COMBO","widget":{"name":"use_saved"},"link":null},{"localized_name":"filename_prefix","name":"filename_prefix","shape":7,"type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":null},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"SaveLoadImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["Save","ComfyUI"],"widgets_values_named":{"use_saved":"Save","filename_prefix":"ComfyUI"},"bgcolor":"rgba(0,0,0,0)"},{"id":24,"type":"ToggleLoadImage","pos":[-203.4616892085416,-65.8117662047309],"size":[270,314],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[32,67]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":null}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"ToggleLoadImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["ComfyUI_00229_.png","image"],"widgets_values_named":{"image":"ComfyUI_00229_.png","upload":"image"},"bgcolor":"rgba(0,0,0,0)"},{"id":25,"type":"ToggleLoadImage","pos":[-203.4616892085416,378.669205833232],"size":[270,314],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[33,68]},{"localized_name":"遮罩","name":"MASK","type":"MASK","links":[]}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"ToggleLoadImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"widgets_values":["CMP_full25_00002_.png","image"],"widgets_values_named":{"image":"CMP_full25_00002_.png","upload":"image"},"bgcolor":"rgba(0,0,0,0)"},{"id":29,"type":"TogglePreviewImage","pos":[1352.1581372157245,76.67050610637425],"size":[421,570],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":58}],"outputs":[{"localized_name":"图像","name":"IMAGE","type":"IMAGE","links":[]}],"properties":{"aux_id":"electricty00/ComfyUI-Toggle-Pass","ver":"60665017a9f0f1fb0cb53714f294d7ccee961066","Node name for S&R":"TogglePreviewImage","ue_properties":{"widget_ue_connectable":{},"input_ue_unconnectable":{},"version":"7.8"}},"bgcolor":"rgba(0,0,0,0)"}],"links":[[1,1,0,2,1,"CONDITIONING"],[7,2,0,4,0,"LATENT"],[26,4,0,22,0,"IMAGE"],[32,24,0,1,2,"IMAGE"],[33,25,0,1,16,"IMAGE"],[58,15,0,29,0,"IMAGE"],[67,24,0,15,4,"IMAGE"],[68,25,0,15,5,"IMAGE"],[69,4,0,15,6,"IMAGE"],[2,1,2,2,3,"LATENT"],[70,1,1,2,2,"CONDITIONING"]],"groups":[],"config":{},"extra":{"ue_links":[],"ds":{"scale":2.1762913579015386,"offset":[-446.7156120634379,179.77454293663703]},"links_added_by_ue":[]},"version":0.4} \ No newline at end of file diff --git a/example_workflows/Krea2 Pose Editing.json b/example_workflows/Krea2 Pose Editing.json new file mode 100644 index 0000000..4c3f580 --- /dev/null +++ b/example_workflows/Krea2 Pose Editing.json @@ -0,0 +1,1422 @@ +{ + "id": "ef71ff7c-e4bc-498d-b792-67032f8d0f50", + "revision": 0, + "last_node_id": 10, + "last_link_id": 14, + "nodes": [ + { + "id": 1, + "type": "ToggleUnifiedLoader", + "pos": [ + 60, + 120 + ], + "size": [ + 210, + 218 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "localized_name": "unet_name", + "name": "unet_name", + "type": "COMBO", + "widget": { + "name": "unet_name" + }, + "link": null + }, + { + "localized_name": "clip_name", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + }, + "link": null + }, + { + "localized_name": "vae_name", + "name": "vae_name", + "type": "COMBO", + "widget": { + "name": "vae_name" + }, + "link": null + }, + { + "localized_name": "clip_type", + "name": "clip_type", + "type": "COMBO", + "widget": { + "name": "clip_type" + }, + "link": null + }, + { + "localized_name": "lora_name_1", + "name": "lora_name_1", + "type": "COMBO", + "widget": { + "name": "lora_name_1" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_1", + "name": "lora_strength_model_1", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_1" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_1", + "name": "lora_strength_clip_1", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_1" + }, + "link": null + }, + { + "localized_name": "lora_name_2", + "name": "lora_name_2", + "type": "COMBO", + "widget": { + "name": "lora_name_2" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_2", + "name": "lora_strength_model_2", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_2" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_2", + "name": "lora_strength_clip_2", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_2" + }, + "link": null + }, + { + "localized_name": "lora_name_3", + "name": "lora_name_3", + "type": "COMBO", + "widget": { + "name": "lora_name_3" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_3", + "name": "lora_strength_model_3", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_3" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_3", + "name": "lora_strength_clip_3", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_3" + }, + "link": null + }, + { + "localized_name": "lora_name_4", + "name": "lora_name_4", + "type": "COMBO", + "widget": { + "name": "lora_name_4" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_4", + "name": "lora_strength_model_4", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_4" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_4", + "name": "lora_strength_clip_4", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_4" + }, + "link": null + }, + { + "localized_name": "lora_name_5", + "name": "lora_name_5", + "type": "COMBO", + "widget": { + "name": "lora_name_5" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_5", + "name": "lora_strength_model_5", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_5" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_5", + "name": "lora_strength_clip_5", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_5" + }, + "link": null + }, + { + "localized_name": "lora_name_6", + "name": "lora_name_6", + "type": "COMBO", + "widget": { + "name": "lora_name_6" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_6", + "name": "lora_strength_model_6", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_6" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_6", + "name": "lora_strength_clip_6", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_6" + }, + "link": null + }, + { + "localized_name": "lora_name_7", + "name": "lora_name_7", + "type": "COMBO", + "widget": { + "name": "lora_name_7" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_7", + "name": "lora_strength_model_7", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_7" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_7", + "name": "lora_strength_clip_7", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_7" + }, + "link": null + }, + { + "localized_name": "lora_name_8", + "name": "lora_name_8", + "type": "COMBO", + "widget": { + "name": "lora_name_8" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_8", + "name": "lora_strength_model_8", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_8" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_8", + "name": "lora_strength_clip_8", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_8" + }, + "link": null + }, + { + "localized_name": "lora_name_9", + "name": "lora_name_9", + "type": "COMBO", + "widget": { + "name": "lora_name_9" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_9", + "name": "lora_strength_model_9", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_9" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_9", + "name": "lora_strength_clip_9", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_9" + }, + "link": null + }, + { + "localized_name": "lora_name_10", + "name": "lora_name_10", + "type": "COMBO", + "widget": { + "name": "lora_name_10" + }, + "link": null + }, + { + "localized_name": "lora_strength_model_10", + "name": "lora_strength_model_10", + "type": "FLOAT", + "widget": { + "name": "lora_strength_model_10" + }, + "link": null + }, + { + "localized_name": "lora_strength_clip_10", + "name": "lora_strength_clip_10", + "type": "FLOAT", + "widget": { + "name": "lora_strength_clip_10" + }, + "link": null + }, + { + "localized_name": "加载模式", + "name": "加载模式", + "type": "COMBO", + "widget": { + "name": "加载模式" + }, + "link": null + }, + { + "localized_name": "ckpt_name", + "name": "ckpt_name", + "type": "COMBO", + "widget": { + "name": "ckpt_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "模型", + "name": "MODEL", + "type": "MODEL", + "links": [ + 6 + ] + }, + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [ + 1 + ] + }, + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 2, + 11 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "ToggleUnifiedLoader" + }, + "widgets_values": [ + "Qwen-Image-2.1-aio-unet.safetensors", + "krea2\\krea2_turbo_fp8_scaled.safetensors", + "krea2\\qwen3vl_4b_fp8_scaled.safetensors", + "qwen_image_vae.safetensors", + "auto", + "分离组件 (UNet+CLIP+VAE)", + "krea2\\krea2_identity_edit_v2.safetensors", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + "none", + 1, + 1, + null, + null + ], + "widgets_values_named": { + "ckpt_name": "Qwen-Image-2.1-aio-unet.safetensors", + "unet_name": "krea2\\krea2_turbo_fp8_scaled.safetensors", + "clip_name": "krea2\\qwen3vl_4b_fp8_scaled.safetensors", + "vae_name": "qwen_image_vae.safetensors", + "clip_type": "auto", + "加载模式": "分离组件 (UNet+CLIP+VAE)", + "lora_name_1": "krea2\\krea2_identity_edit_v2.safetensors", + "lora_strength_model_1": 1, + "lora_strength_clip_1": 1, + "lora_name_2": "none", + "lora_strength_model_2": 1, + "lora_strength_clip_2": 1, + "lora_name_3": "none", + "lora_strength_model_3": 1, + "lora_strength_clip_3": 1, + "lora_name_4": "none", + "lora_strength_model_4": 1, + "lora_strength_clip_4": 1, + "lora_name_5": "none", + "lora_strength_model_5": 1, + "lora_strength_clip_5": 1, + "lora_name_6": "none", + "lora_strength_model_6": 1, + "lora_strength_clip_6": 1, + "lora_name_7": "none", + "lora_strength_model_7": 1, + "lora_strength_clip_7": 1, + "lora_name_8": "none", + "lora_strength_model_8": 1, + "lora_strength_clip_8": 1, + "lora_name_9": "none", + "lora_strength_model_9": 1, + "lora_strength_clip_9": 1, + "lora_name_10": "none", + "lora_strength_model_10": 1, + "lora_strength_clip_10": 1, + "_tp_add_lora_btn": null, + "_tp_rm_lora_btn": null + } + }, + { + "id": 2, + "type": "ToggleLoadImage", + "pos": [ + 60, + 780 + ], + "size": [ + 270, + 102 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "image", + "name": "image", + "type": "COMBO", + "widget": { + "name": "image" + }, + "link": null + }, + { + "localized_name": "upload", + "name": "upload", + "type": "IMAGEUPLOAD", + "widget": { + "name": "upload" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "图像", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4, + 12 + ] + }, + { + "localized_name": "遮罩", + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "ToggleLoadImage" + }, + "widgets_values": [ + "20251213_210402.png", + "image" + ], + "widgets_values_named": { + "image": "20251213_210402.png", + "upload": "image" + } + }, + { + "id": 3, + "type": "PoseReference", + "pos": [ + 420, + 780 + ], + "size": [ + 340, + 508 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "localized_name": "category", + "name": "category", + "type": "COMBO", + "widget": { + "name": "category" + }, + "link": null + }, + { + "localized_name": "group", + "name": "group", + "type": "COMBO", + "widget": { + "name": "group" + }, + "link": null + }, + { + "localized_name": "pose", + "name": "pose", + "type": "COMBO", + "widget": { + "name": "pose" + }, + "link": null + }, + { + "localized_name": "view", + "name": "view", + "type": "COMBO", + "widget": { + "name": "view" + }, + "link": null + }, + { + "localized_name": "source", + "name": "source", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "source" + }, + "link": null + }, + { + "localized_name": "long_edge", + "name": "long_edge", + "shape": 7, + "type": "INT", + "widget": { + "name": "long_edge" + }, + "link": null + }, + { + "localized_name": "flip", + "name": "flip", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "flip" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 3 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "PoseReference", + "tp_pose": { + "key": "全身单人・性感系|坐姿|P017_正坐・挺胸后仰|正面|线稿", + "img": "data:image/webp;base64,UklGRg4nAABXRUJQVlA4IAInAAAQkwCdASosAZABPlEmkEYjoiGhJHI6mHAKCWlu/HyZN+tQx/2J/xfpM8BPyn9s8mfxv5/+2/l1/gfY9/xPGN5n+7f8D/Kepv8V+t34T+zf4T/lf3f2+/5PgP8lPmz2BfaP+z/te+J289AX28+w/6780/836KX+d/evUj84/sH+g/tnwA/yb+df4j+1ful/dv///8/uf/Sf8zxN/s/+8/6P+m+AL+M/0r/Nf3z94P8r///tu/jv+Z/iv9x+3Htu/Q/7h/xP8j/rf2d+xL+Yf1D/Zf3z8k//////vO9jn7I//T3Nv1u/3v5/lA8s3V/LYZg8q61GPCsjUzDpwP2JHcBa6uqvWgSvpWSvxTtdZNR0L2r1ZH246BPQHcH8f3Br5fscDrW371ovLAmym2EjslAvCz/PAlWms9ZPwajHRWSl8kiXxI19Y3A9jKBMrYmDyu/wOsT/hHeFWbgRs+W15n5aK5T88q60X+WJwwx76DISLtF7m9cAqoOIynFbKNkHw4hPFV2yS9SnLoBTj2A0bgOsqpdWkkWSODfHar2zPFsaPdGbtORGF1Hczs9wWHiMrumXKJnXq6YdfyXswedS6wc1o49KNmSz20js5yCcYS89TH90XhIMco41bZTYZiPfhLE2M7g272KtXXLiN0++3K99Egmv3V7aoPevzTuYoM+i8FOddmcAuRVdcVX5SGNtS06BVZ1KvLpUeWTZwHpPYzhCx9sB3MdTLJTNAUte9uXj6djWe7lxeXN4CEK3W7jzFj+JDcNFqjDch3aSvlPjsliGZPw3Mm0H3YYxpWDRrYvvFYsi6L2ysBAluFmBgUN91KDQvqPdMDYw8JgQYeR8p7kK6eQAFLIs1hCvzTj/38zdbj46KAlLorwpEBkM36AqgDOS/N4FvanZ5gT05dIaOafl3iyeN972u2GeOdhf8jmRIhZdu1F3E1lW2dw/RcuNDcrlp3TeS9O22wRf9eCBFSa4d9BJdf1jarh6oyj+kO+rDm0SmUaKtOlJxi4B4Ndqg074APfJ15s/PLJD5nA7SIjYhmlXts9JJeP/qkk5w/U0XF9upjCvGH7/A9XLGrk9r5ABZ+GNrVhe80VjTNm0+yy16PDuQIofmD2us93Lily+mEQUq7YRAOh+J++plLuXVLfYV74QmG0e/c91igtX72FcYlcldvxzyu/vw5gk9EonBIkDP79eQIi3pZDWWrByFO/wGSiYd8csgFi5G8QMt9UjfYeWmQlG2QZhBJVN/dG9cU8ZCpKybxKsr5OOzrVsOlUrwrW5iRYUSt7h6Zgc409a26x8gjzy8EcXwR1gEcq6ccSSSrEnlGJkk8YtNiTQkNZWVbUFyNv3VZ4eV3w4t9aIt4W/Gkh37+J8KVXIPKiSxsE4mfjpIxt+s9zywVPm/jQtY3bobAVwN+9TX2GeglWBVJYaW0foQhAMuu7bAIwGi4ag5mBYnREN8MTeqbnTX1yVXE4trZ2Lwl3VdwWL50et3TITQsw0UzL70US1aIxbL+sbVaAy1qhRwG8d68vbGwLvLFsQxMw/4Cfq0VzJgCnsn2XHdGQj6YnhfgVAHlQ/1EAA/v+uzpyU6NAE0oz+l6jgPD3pIfcHgby/3gxMTHKN1tmdD6kRiy0Bu7kY9SkVWmNcKncJJDLchTDTb65xddA5U93Pwti4i9gUQ371DftfV0HZoN9LJz230rWaHoAubob1i6fOBR5z/+h14R/lnWWRE6mFbC+hvzMaDLnDS8o8l37WdMVnb6x8gyl/mxgo2HTssMWEcEll52ruhRWBFAl8fo/1byYk4/VUOttgDhkymKpOqs7ZzEtyZYlzaQ9aX4MQL7HjbqfnngM+u7fCVg8fU+3NXyPNx3W1B59NqMDhHuFZaO+mjzREgiFbpc/Hwsrhj7SRj5FNuPe+NIt2Wz/FJFC6lUZXIA321xjTkqqCD4odl6gOrO241qsqjgD811wKdsM+7X+mySJLFTHZl8MtfGtwo8Vpo+7zuPWCdRsQOx6sEiFe0rzGn/2qu8Hp9BMOEavUXVbPUdLf+AG0ZLT1E7xxYaD3q0ni75fBRgtLgGghjPFZ0bDaefeCsye9+YjKm0/exKOvz+cqCirbPVQKij7+6w9KGhk6qrxBfkIEsQZbWWMuOIBEro8/ql4Koblkp4VVKptXGOsVhRTRU6uGKYZY6J9/WSQDArgK160rzmfWsGlitzzYGksGMe401+FMo4AJllHqq7UnBs7L6I828c6m5dF9TMdw/FgZrNYwQ1E0/QHu93lDwFixlKB5cMehajtuGZnwGOg2ep/UZIn1NVnyg6Y3jhh/NUP0TEAfClKtxPktBGRAZZHn9ZSLKisImpJAjWmwO167IVnM4l6x9Pm8wJ7t/UEtZ+Gx9GvcTThF19TyRZ0ee2Y4AzqmhmAGe4PhKu6zxvx7LuUiQZGfwJA0kR2NpfL/bg/2dmyTHUVDSWupliIj6Sz8wuDLAO+pqAYSRuB22udyDQYkh2B2wviRrjGq3mN95pTdUx+MhV8bhd6aBShhua2hDkClCRQ+2OwOxdjAVwmuSF/0nxJTUwXGwltmVohGqYKLJ72I+HyF5lth4DfUw7M8zPG7qIOAzxCUJL5qeB8g8bzQs1oThQU3In0QmpK3zrrVnAT3LwMJq0i/PbrCqiWthd+Fjhp5xEpOfCHXI/MNEDe/BwcN3xZ7NaO3fOZ6EvCg5ih7XnV9Mhk7tz1+pIsXwpArVN307GCGyK6L+lAAKOxd+Wu14VWSxVv1ZG4NRJrdQnojTpV04qkfP23imrGckOw6ML5IsyWmZdkZInEpiLhWGUBntkhcxfT2vENYWryqKE8UZLmvLjf9c+XZnHTyWes3KsfhzK6G32wylVqN5YO5nJBbdKca6uXgm+ib2o3LooyMVXtdWHEfKpcCFyvCu2KC4ymh8wUkt38w6Bkw9Wg5Nc4WEU4d4FK5pD8J+q9hD/4YZnHUvc2CoAHOoOMClGzUyCB8IrD5II+IUxN7pdC3tNIsumuxq20BdV38vqdLHQHMaf0vZo33PyRc7VwzNg2E017MLDhn+etxB+rpf0UAljxaxXYZWxBW3uP3wzDXX5/xIlB8mQ344sKvXYm0UNfpVdR6OVzm/wWiZ5049psGWtO219azOLVHV8+phE7/eKGpJRpcu9TErYtwWdn9tjmmqda14zdjpTcy3wl0yp0JkDL/X7cBjn76zBwhsJ3+qnbCjxqVgP76nH1UDR8kz0N/5EEBf7HgKRdrEybwUZKCLSfgFH3fs/0U1ggpwAwYNtDnwI4c9uJWL50OoY4OY6H/eYW7p9AAp6a8uIBKy4i1QKRu2ev5GvibhnC5FB98etWr8NCqkz0EB/uYuIK3w8IzvSycLJAg0Ss7yDmscFi7KwwAelS87PISFfpQoThty9f020Oq9Uy+YksGnD8xz/B4Pd2W4P3g93ElkZ35YrK20qPXYixvdo2m8Iy2fc9w9v1Qqh/E4BxguL2lCpIjOAObfDmK/yHBcAwDOetv0AV7a9gCKLdy4P8fn5ar6T9jM0Ml8/IODFRRoucQdxRkY47II+YBm0DvgC1DzdswmmGtjJj040Ar8ySEtkVMWH7vQplDaSAiOYaVi9GQOBCwRG0IqBryu10eNo2FOPdIrrQaxC8UixGWYMM1IpD5GNxK268IxfF+jOBKFdTOyG6PAvLr0yH5zQ1MgBlZdrknvrFsRTZWpVkQgwpAvSVA7iUeJLWd8U9QFbGEA6knqH49eE2Ub+cGwjLZfmb8FzqutfqxtZ5RXcijqX4h5hRG/HKx/8Eh5MzOPa6qQgLZ8yyST8mDuqkPg/fVfjRJoW2aqB0g5q24wOVkIap9EvQccyBHF/ISok1WF/7tlrpmmdP/K8pJA54NN2UKDMYjNga5PXXtNaRMMBpQAjtJZbaX4QVUlXLGW0GDzDWtvFOjWjjn1g67wbyLzVOFIPU99zwEs426ZhQ2J2Q9qZPrIyAfu5eyghrNo5PKM6tZ6p1nSIaPhoL+sg8Ppl6noeQ8BKqVwwSFc6mCc5BLDcrrYBgzHtAs8Zy5DnG53Xa/h2PismxH3n79vwyrqApodqvVf4Re92n8Yi76g2oUXlDX11UJiQZacmnb4X5tRoLlVzF+ghuq4aRuqMLy5Rymul8Js/KW0VVi+pcbs1RqucEpor6gkuzI0UXoxkG4qF166iaWQMffhB2tfREobqREgOBdf/pgD1UnEl13uNyDwgFl2LShl2Q9E7Ov895WtKSGJvg/ALpHefWMEX14k3ej8UVQG9VQA/ZQJaXLSz1Vy6pMojfUyGugyguX1Vm2zvJ/9M+EPsDXRhiJ7RBOZ4ZecvuiQlM1wAzFCJKG0AqafmSUYgeHekzXmlr6SM3ZjghOJSu3tP6LSRrYjA00dFuagcChy7h6eyytmaf4KZH/GNrvLLYjN3/EE93kAHmf2wMrK1PYVU/1pZuTeqC8aPRbIWVHXa/0tFei7L/m5BMTCzvIsYxXnVFkFE974gDclm83gOYfTowmJ10Yg1DvOtusEXknCuGVjzWQ+AD+CMtx93eJ3Ty9TM0E9p5t9PmUFVEeeGcW+51HSSa3Vmf/xc2mnwAPxgASMsVjBtLknbbT7gReyGMZTZCglsc6/fOPEVKxBs2R6vL9vTyt2XbcEGKXHMZXud3Y0JZJNxelhgm7ZCWXi+36YfDCDk24K3hMBK0d/iJBNDfqRZp6PlB96HJls3PbmJ8dwxmkZ9Q7vkMYEKcVOrzLtdmRCUACiZPWVsR+C5efXyXGJ6p0Ezvx2q8BzHu9dCbsUzBnX7tlmb3M/eDoXIOEhtBZ/J5AJQ26kRy/AR8N+q/9YK49kKGArGIPfBu5wYDtNpilPtWtv9+7nXCORCNyh0KpRgi/HIFbSGHEQ08PlJxWoyZGB7omi8Lzz8ah6065H49nO5vYROGajG0Xnfn+omOETDAhOJq22sdRGtGvtY68XO20Pv5mCIOvf0iA9WBoA80/PjpUHjNfwhNn5TDhU3AxreYG/iWB/NVnpWVnhYcKPEtCl5Ur49eRkINfHqpy+ZpLuZ7yS3ttKHSdAkHbShDkXqJuaOOnKW5+bs1r5c7pwD0ikzeGb8hCZWwDFa/tOegVC3e5oX7u2VqEGfZvehV3q+S8bKAbBFGqGYKSn5lIYN8laYuoAtT0zHi9Aesi3HJsGARSTg/JvuJwgeUtv0OKXI2CjlTWmTdJ47KSF3Pj3At1g8A/SgooMhp3ZGpQJyCeFR41GGmy7BgqufLyjtZ162cwowU0UDNrsqOt95EEP/YwhmxkO+i+kn9jIekzfp/xWsYGMtVRsZ3alRAaIpGzlSd/33UDXfwAmgf3x+vk2L83wcxtkOSlTJyD+lelKy94IB2ho8OKBAIDfRpriW8fJ/4j1d0qe9EHJZKwMPkc2G3Bn8aVPLhD1lXFI9BRL37b+Hb6xxYSwqS7qTRVBfu2ZwG8Z7GH82aehuPi9eI4EZaRy36egk5ZXmuiF7EzaoIt4tWx3gYcjT/31+6H/ebKQkULhCA0JAnte1iwbDWcvJL1BqvyCRXXllY193CGk8uWiqsXrAIs1pkvjme+nFCWma/OyttrBeHwjN6UDcEJ8kN7y08t/J2rG37b+EpuDWLabMqF4PdxPAW6q9csJTcKU3WFqQyjMvHZmdq1Gg8i0GC8JLF2HGW8SnHBvlUs6u89AyPMBpA6Z0NK5PDKC84HLE4ajJ3HE2O8tVwjf/NP1tLuk7KEmegNMJaNJG7c72l0xn7w+JpSPBah9AgjbfzuV/kjPH79Sd9+4+CuctjObk9LFWLN9j8B5QVUHFpHZGFjZESJxPiQRCjgv9b+WTopxHoq/y0bQE57Oc3EA4AMozn6ADlHq+grSF3lHORcY6/TfZBXzEU76zY2j89QH20eqRzr8mzzmBUu7Jjn4LiYPliKTCw4bvU6AC1Drsmyf5sXlp3sEp8BfF+aK+EQcFrszyU40OVdRvKqWKwvvE1KcbMY0gAA+jGx3vGDEanb7uzMLbn+N0VeX7fdFXokS6WcTunvFzN1gO3KoeuPBrNhEdD/TX612kTNOAeI3uiG2JPcr0VUyg5SXqPAXoGdy99GC1w/j6oONfsKm2Bwup+STPEE09MuO0Dg4NHb7SsvjN9ru4HJ+dqlDLgMHPHyqK/vsC1NwWsdbHeJWEeONNqfIVjmUbGwbdLD5pwCJBbHdRZASfUKAn7INO2G2s7Y5IbPwFBgJGOHyegiYYZlt2ppqRueL0Oqp7AnI+9PesJSEE/LPoB12lQ0RWeVeM6PMyiPALHbNGZYNK4ZhNW04Zzokl/XWR/ExKAy7mfOSY02oUlLsi19gFRMH8NrA11cyKVvg3wvjyHRBLJl/4kpWsSCe1BssoOUDRnXxabmmXil0nONFKmPh4Ax3LndlkAphSavV5MdOViD0CRlWN8o55uE/8cLx4H2x0wD3mBZ8qULS1cC3I76QcpLE4S5TNVtfwCxedkEL/9S2JySMWA+Jq6007v1SFndSrK3nIQa7WKEpJe0Z79VC4UMWDC8X9KcI43U1R9aLYDumXWR5VleMOcxK35Z7Or24BZIJowk4TTU9usuBNFw78HHQ9dkk5h5LaTRxGrVXrPaVd3ug/FevlBQBaIJUUmDV1RgCIxp9tMe5nd6p5pyReM8vFWBEMJDyms6mPWzdiUvtnp7C4Jx1JruQn5XX3VXrE1u7wB2M3Tvfm2CayYHNXP24SViyGL8KhERc8+m6khBnC+1GbGjVwF5e4M5fvTf9bP75raqfIpLOOBOSFAXfyYP7TSlWgPXIVbDAZ1WWDi4BN5qYR7HTJChaUj4s47yfCHko0GY5SXCl6rHuFrn73y/KsJnk9HNcloUw4C2zHgWsZSPzBYF9OToe9xsEkCvcI16NJ+drtoST+9wQOaz9qlkbQYUF64r3y7+vrraqF0+57beGYKFJ17dFXR6b2qfFZyaB0HQyGub47/asByrtqadXHvNLUP0jX5xnTHtXEHP9Uft9CZhxfrNifnjoawRf0p3f7hXNI3NP2DaKSpeHJc5h76zCoykIf0UBDMTG83FLOLEFOz+yi2GkVjFJhh4jcn1inp5PBY/dWLzszY7FbhXWz6Zge1g9u0RgMZwOFz4lM3LETDSxDADczB3g6XwhyXRwnGugNzXDNfG0BQOwpsmGAaYQUyqLvOn/RBPfc2Qff3mxlsL5XjZeJy19kvcwsUVUWxB4xtQf9rNNsjdLfBzfAbztfTiZVY0lxP782rxDeFKf9J+Pv5EJEQ87Gfg4yHZX4lLwvwuRZZ/zZJqvPxQ5luZIVHoYWBVKTTNFCbC1aUcpKOatB0keHoa9ynPqx1J8dk87sI9Ru/HbaU67/8kLVxFORVPRzE+/EGQikOgPc6MpH1alYnLOPHdkZQqsv+EPZeSwrmJCelmKp2GGwmopTztdZF6o0x5ss3nptg59Trt1Oy5ZA8IW2sA7I406Pa3q1BXwCr2Ze7/AGBgDa5yvxsp8ONz8AK2ew7GyrAYae9BxdMmHeqaTjeMNrgpdB1c5y8rGMNsKdzUtvO7uct9g4sJWJoQ/iEkyLpII/BVLSAu1IBj0BuF4xcXhJIsqiF48D3/q6CkEJlVylyHAvI2my34wlrFpfmYW2Zd7I7RDzmi7hBr7mFivwjPgZHfEfsX+brLrIwd0UFDYjgthIjgnOk27YcTCDIg1U+LatYjhDrF7ac966TIG63USJbHiaxTfZyV00Vwhzw/lFVZsEy3u7G4QmCx9pMLGIwf86Mjjp164XdgbnVh4hkrlVXuaeFyb7mq4XQRxxpyqem4QbuYiDfnaDE6Umds9cEOVHwX/J2HnhKmrsUQLV7EtmNaIptcndTWPEEaJmmN4d1HsQGw97VB6d8/d/30sTecLRCLDb3NhG1Cg1ShmZscougqFCeEWjYazZPpwGWU9Evut49kepOELVmmAwN+2n49fsjMe8gEUTF8qviuHy6dxvgFiWHIPTwewlwcOZyaKt453DE5/LwLN78fWpOX1qgCQezqHEe2WlPAT0gKiyUS73C9rGXo6X/An1pusAkP8HIKIw+J5rIcnxOh7kinLA8q1s/56IkyclYSUDy9QrxHqtkTGMzkskrXW2SnqWWXelfRowC/C+jmmyXx7iGVqqtHyC77HPgaNnBUSzCqHVUXH6ZqOlw7q6HbxxG1C9BTXs+QBv+Nb2XNpscE7jQC1f5ne54qeCyBgRWAsFs2+fDjirF5Id6eBam6mZoSpUEZiPW7YMFZOKPFX95nuZDf3zcTsDTBy1O0rrNcVfJqaOcSOmiRHB+aWokOW5fZW9JcQMLwgErE43/5Kb7sH8uPrJSg9fg5xZG4upe6/r90AFfrkF7t1qx9KyT0dhMrfyc8pLn3uAgcPAYVmUKKEnhWCCSMn+xgiZYZT4ISXU8WSBmMdnhrj9Tbjja86v01Qw+ES8MEGz+IRfA+7LOs+Qj/9w8gceRHYnstvO28ATtzZHwT4+3kvhbTAPhrb/54v0unRed1D/gmaXmOxcgcCq5O9npqg56x0iHV1EN4sUqAjXmYl1L3dXQnn959NoP0vB4/155gcmI67f0fEf5EPTcgHrszAtcVBLTj6cOtMVQ2dXbYfBMkPrrg79vnnQ3YpKl6qAlG0QOzHlCbVx84W4E44/cBtMuy3T6FjmY87TJEoaUSJcfxgPHIX+AJBRVat6lurnBXfMGJkpvCwUlwdwR9NUH2zZM+BWPbQEwpWNx0WFz/++Msi9UFH0PY8YslQVf+H5xXGb26kbRJ0GT4B81v7Vs0O6RRWi3XcZ/cNbLrp57elyomiBsLq1SrBd9OnPnXqwq+Rls+HaQo/dmoZ8iI3Pfc0HzZuW6uzFzwIWnSpU49f7no0I5pVLXsGpN3YyNX2WA1Rlf0DIV7vxn7lD6S3+u4fF+cY5C7jK0D3xVrXO0sJ/idrwLw3A8n4uP+MP2W+J3B2Lfc+iN1RobJvQNJ3SdX+fAk0MXXvSFKN0NMasyVtiTGCwLcjC8DmwIxrCL5Jx0mnUOf7Lsd+T9HhxVpkHXXWlguUiatts9WMBLmt8JUICNNbaNnrJCOvXRinnMG5FEEwMhfZgc8ZcTfWpJZ7XLUpqy1HE7wUO8Gs6XQnNsPRsM/Vy2zJdK6aCEDaBULZXhryroO1BpfQ8a8rNOVz5iKqgeYoKUTuw6w6+lhc5CZ/HGdVvqBOv68gGs7sBDRXdD2c8HzZU+3nkKJ0LR5bi2Q7AjXx8eV0olVc1b8ABOtk3SOmT99dyyWY+Q8FT8h6Db/SWJwskgMsQLnMnKGy9+jVM1zWsEpO7DsOnu/mZIBiZ3fK9iJRtW333c6f5ObL0oXlhup1M7uTTiGVOueE3Fp7ZI30ezEk/FfDAY6k6rPR4mqh6CnyEJSyhF+QYJQyn88kKvDsXF/4wFFNgsQSmbxnI5dVQpi29qy2ga1BKNa1xWTtXSrHjjMM+3MnKf+0uHDCDFy0wmZIskx87nkHzF504Uj99synjLeSC81xKAvwgsHO+PPq9c2+yuuclhQgmvJl4ofkEYxvfoXCWfRfJvxrFXg/TE+v1tL8K7xkWvtoL+KJEgGHk2T56zTAH2WybdEuaJHjfjevrp8PnWJfL1lZlTOcsk/hR/N4fIfPL+xgNpwGiiDKwl26reNVgNyhirnV7bf76UmP1P+zZSxOvBe1A2ZFd6QmYQu0z3jzhNcznQOxSQGhzAlBaUOo6suVwyUtl/v4ZsRniTDkTAXN5ZpLm7bt77ukpa6Fw4W4E4pstLYtv7GQHuvoY86Fqvz1Xca7aM96CSXU1jOSCDm8KkPj1Zm45khk/weGvVFiijyHtqGl/S//3D5GR0sclGqi9U880BjU6m+mDS4eNKZdX/Ye8mVmhYmIrktsYp+RNg1Z4s69Ui7Rt2xTREhSDcc2GZ2yp1Ra5QBZSyiuTJcy+328LBjMFFm4yU/rIOviPTKd21bqoowThvHLFZnzAizE/hrLYJvTUmWBJa5S8DpHrTAfa04LQyUzdIkmSbV4TfX+0JIp8vqXCPrOJfOXcFI6WsJ++5JAS80xU6h3TdsuP7oMwjJbZPYTE34uyCWBxulcCv6OYvdzhwU63ZNe5/WwYrDzsQeqJnPrqCSrKL+M7m7FfJscwZM8wBZ4E5TJpH0doJ0gLM01bffBglgLUkER/aC4KXGUk9m45V08hFApJqGMsosB8BhsXA1mbVMo/eghuKuZeKpp2NZw6HrL/kxNmoGCFYXwUvyM2KbeXGWhN5yfAm8xdVth54ttZTY7Z7E/50p+wSXFJcUYqRYQOYkMi9tsxARrxF/V/dUBcZfoGEmvoe/iQiJ7oOttHQn/2nq6QrhZjKaCazMvIF+skAq/Cdf+Bvc+pMmwdPNtDdLGRnNOEtsTny5j9m6Eg2PkjSvqi5G6iTneqKxsLfOyrUg2LBggacSb78Zlo7tQWuJMYbNTc0i2EEgODRlgJMU3s/+ETw6wI4XVvM3ANaWefeCVcZsX6kyZs4LlYWAc0nuO0waXKuoWP2k2Q+JGv9tvZWoXXDN15c57QB4oyHmZfB3JVopPJXeyNvOBNWcBp32imQTjynrnWVMadZYGlI750OlYHNIrDdMQQ5LG7MInoYpf4cR+Ej9ntY3R8Xzbpp76i/PR/kiXOXuEuuN2XZsfhfqzqyJbShncF/2WJBe30XYhnrT7rn6rskYDu55vDVtgte8/4yRVJNl31dFGQvRVOWCYESf3xtBJj6ZoeHuwC20y6/uWsc83tlSUy5Rji1YHDqW3665Wmm94rRTlHrfHwx1ttJ9GIvUfh9s+MeGKTL4+KTRJ/QzT/MSVPHcF6v6X7/D4sLlAurn/F0NKqPPPhTQXgoVjo9RuP1rjZgACC++8fS2H1iOawuYN5ZjEtZw0ZxLKtYmLvMyFzebSCgmPOQgvpQz2G8JXfvWHmUXt4mRUpVv+xjtIyOy1AX+x0daXACU8itdy1G47Lza+ozZqfOLWq2NMFePG4uY1b0CppHkxepqikwnPRmnuzQuHYFf+EdQ8lDI+JxhuyNal8huYus21RTjHBGkvtbm5aUQ2DpBUGVXZHJ5wlPGzDVF0BuyjbTkfQ2FsUQbWQs35Qh6WEB+6pW2SHrhiLPJoyJnUcACNTXi1azCUbIZZB4iQl5tm/HbO/7NYneHjVGHs1zOmuvUS4l0z/eoj8CZYZSlaK6FE+GjHY0I5yEHn2PCUw1kChOY4qEkhlYck0wRcsRea9NRCj7EiSOXVtz+Men9lE2q8os1PkcBE0I8BoWl+XaGnWZrUBjhUZoPz8eD31SUdEb1XJl7iXPrA9uYCr5jjZLcocCLLSTQEUcdQeXFLCjnJ9Cx6Nni26ke8LjpruOQ8oQan4UMvYnhdKFEoEhZogLImtgPtaiM6rh0wuGpatP1LQ7fmmkUYYjSz9w/dp+9Ay4oR+yuo3FE6bsc7bsdfjZDaIfp+M7mXbCnr4sJRkA0OKvkQhYxnQw1AU56wIN5qALPqb4f4GGQA+eKy9BOa9IrntxVq4QeJtmjlTvyCNXZ9gmsgRUPd3vOEAmCGSfvntqbESUeMNpEvi2QYs9bb+gFwV9AK4lsMWvpgiBpXLFEr5S7tgQh6tbsh/zCoTXp1OeD68MkIpZOpL5d90NcpaJi2jM9pQ2+iVTwr31z/NVjshzHi2Fg+FObd0vrvU9iZ228R1giiJGCmvgqhgjUy1nnnxTb2SmY1B2507Uya2tpfz0NvxzL5rabI6gn31tLC6Gc542K8kj0Kv96EBOVBRTgDtJUYx10pw7trwi/+d5xd7jRa0LXlxTkSvYVC6c/uR9/AGkb3JEQYfWSCFAVqH+LceJAI3HJSSdySSszlpBNUutvQN7wv4lEVCbOEMzngLXAtyR+y1dg36tD84ooSXfXIPeAf2l0L4IKjxntTA5FhLHCx9J3vF574FcTOz7OmXjx3/VXTne40UxpeYBdesUAxGCTW23py9cvcwOOu2IdJEpcAE8OJWpJ1ENhzTkvyzt04yWngKFZiJmuXcyjaILsZQu1yVPhBRgTa3dvaO+4ZRnZ98IEh57l8qUmdczHfKwxQt130cUGeWBnobbAp6fHyDyEoD6WUUQz/tZ25TYtsA9/QC275et6lJ5+MCZosi1g01jXGGHSzLB9XKmTTH6sSPSancykpq3GAHyk3eqzyiHGeyFmHRMDBIG9etPiDnXOA7CxYjmjPbl+Sos7uEtm0+xmGtYB9ieUyro7hrhqo90qogI7fTrqtWhRYPLRUxLgyw+YcccQF/7MBOEZX6OXbkZOT+oP2l+HPgUhX01YvwF9nJ+I4cz/lLNH7s3LwE9iiiuvob3bwCZ3bSj3Y3up7l1lmjYAJOzh5BnNt5234n3yz8i3JeB6C/cQkNYLpuHAH3bsUNjAPtaxZ6TF341nAt1+8uez1sNGSIwP/BD93kU6TI+BWK17W76cRISD0k8eXomQ1Yh9MARlNwSw6SXc420yoHAm+aZUAzeT+VfitREv4X5u/+ssSLq3nLuCZz2CkJy5fWuFZEeXFALOCMCBjjo5iSNYJzjn5WdtlJq3L9Vw2l4XTWfEdJr0Gy+KFGIPhMtWIH2aCJYpPrzBYVftxJDGmv7R+BtOVxt08xJoT8LMdhLVdVWH50IhsMiwYD7whA2vJbOJZeOofI8c31MeQKCA1lTihwC5+2c96DQAoDhXEMbbOtAOWEknZEIgH42Z0rllvv9Ye8r3vDKgDPlpcfck/5EBCbmYivP7b3nU3ExLgDDTHhv92attzbqoRPCe33iMb7yeAKxfSp9kpVJP38XWsiLFKJG4UTCw1in9N7i7hiB+pBVMjwwt3ZHrUWxgaXBFYFPhtLCUUsXAAdhUY3IQI0lvNXgKbM0nZ4xjk7Mk6YTmIWTwepNlC+yQQ9b34Nrgrhb6qWrRNhIQYNmVEKIWkO7XR9R7zv0vxm6Q91bBMZd49ZWP1hcdlbBbkfFyug2aZhKosuYbmXCLcJNZh7cTjYe9GkfkS1KVJjyrWEVthoiRyuEg6lj6A92uwXI/U3IvV3Dm2GPweueme4+q9sm41mdDSdYN/D76f9mP7CcLEN3Xzg6kXZNkOwOAicx0kpkHYV/Tq13DY8NG7OPCVc48dK4VvNjGCHkQPvSqPW4IorAe/aAlx6o1c/HtKIW1OdZ8hidQqlwNLRxHQbK0noYZ/1vOBYTj/f/BjJLKlRI1TXfUab4YOERgpl3UniJ/K2nN+h6+hzhZupiqFamBgFtqQCwu/yXwlGBnONdzbXTjMCfqQgwRSL79423j2WaniNrAk4vmzwDVtuExL/nEAAAAAA==" + } + }, + "widgets_values": [ + "全身单人・性感系", + "坐姿", + "P017_正坐・挺胸后仰", + "正面", + "线稿", + 1024, + "关" + ], + "widgets_values_named": { + "category": "全身单人・性感系", + "group": "坐姿", + "pose": "P017_正坐・挺胸后仰", + "view": "正面", + "source": "线稿", + "long_edge": 1024, + "flip": "关" + } + }, + { + "id": 4, + "type": "DynamicRefImageEncode", + "pos": [ + 780, + 300 + ], + "size": [ + 270, + 322 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 1 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 2 + }, + { + "localized_name": "image1", + "name": "image1", + "shape": 7, + "type": "IMAGE", + "link": 3 + }, + { + "localized_name": "num_images", + "name": "num_images", + "type": "INT", + "widget": { + "name": "num_images" + }, + "link": null + }, + { + "localized_name": "prompt", + "name": "prompt", + "type": "STRING", + "widget": { + "name": "prompt" + }, + "link": null + }, + { + "localized_name": "instruction", + "name": "instruction", + "type": "STRING", + "widget": { + "name": "instruction" + }, + "link": null + }, + { + "localized_name": "模型类型", + "name": "模型类型", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "模型类型" + }, + "link": null + }, + { + "localized_name": "匹配原图尺寸", + "name": "匹配原图尺寸", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "匹配原图尺寸" + }, + "link": null + }, + { + "localized_name": "输出宽度", + "name": "输出宽度", + "shape": 7, + "type": "INT", + "widget": { + "name": "输出宽度" + }, + "link": null + }, + { + "localized_name": "输出高度", + "name": "输出高度", + "shape": 7, + "type": "INT", + "widget": { + "name": "输出高度" + }, + "link": null + }, + { + "localized_name": "尺寸适配", + "name": "尺寸适配", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "尺寸适配" + }, + "link": null + }, + { + "localized_name": "图层数", + "name": "图层数", + "shape": 7, + "type": "INT", + "widget": { + "name": "图层数" + }, + "link": null + }, + { + "localized_name": "宽高比", + "name": "宽高比", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "宽高比" + }, + "link": null + }, + { + "localized_name": "百万像素", + "name": "百万像素", + "shape": 7, + "type": "FLOAT", + "widget": { + "name": "百万像素" + }, + "link": null + }, + { + "localized_name": "倍数", + "name": "倍数", + "shape": 7, + "type": "INT", + "widget": { + "name": "倍数" + }, + "link": null + }, + { + "localized_name": "参考图分辨率", + "name": "参考图分辨率", + "shape": 7, + "type": "INT", + "widget": { + "name": "参考图分辨率" + }, + "link": null + }, + { + "name": "image2", + "type": "IMAGE", + "link": 4 + } + ], + "outputs": [ + { + "localized_name": "conditioning", + "name": "conditioning", + "type": "CONDITIONING", + "links": [ + 7 + ] + }, + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "links": [ + 9 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 8 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "DynamicRefImageEncode" + }, + "widgets_values": [ + 2, + "Render the woman from image 2 in the exact pose of the mannequin in image 1: seated upright, chest lifted and leaning back, legs together, hands resting beside her hips. Keep her face, hair, white swimsuit and the beach background unchanged.", + "Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.", + "Krea2", + "OFF", + 720, + 1440, + "参考图保比例", + 3, + "1:1 (Square)", + 1, + 32, + 1024 + ], + "widgets_values_named": { + "num_images": 2, + "prompt": "Render the woman from image 2 in the exact pose of the mannequin in image 1: seated upright, chest lifted and leaning back, legs together, hands resting beside her hips. Keep her face, hair, white swimsuit and the beach background unchanged.", + "instruction": "Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.", + "模型类型": "Krea2", + "匹配原图尺寸": "OFF", + "输出宽度": 720, + "输出高度": 1440, + "尺寸适配": "参考图保比例", + "图层数": 3, + "宽高比": "1:1 (Square)", + "百万像素": 1, + "倍数": 32, + "参考图分辨率": 1024 + } + }, + { + "id": 6, + "type": "ToggleSampler", + "pos": [ + 1120, + 80 + ], + "size": [ + 350, + 364 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "localized_name": "模型", + "name": "模型", + "type": "MODEL", + "link": 6 + }, + { + "localized_name": "正面条件", + "name": "正面条件", + "type": "CONDITIONING", + "link": 7 + }, + { + "localized_name": "负面条件", + "name": "负面条件", + "type": "CONDITIONING", + "link": 8 + }, + { + "localized_name": "Latent图像", + "name": "Latent图像", + "type": "LATENT", + "link": 9 + }, + { + "localized_name": "模型预设", + "name": "模型预设", + "type": "COMBO", + "widget": { + "name": "模型预设" + }, + "link": null + }, + { + "localized_name": "采样方案", + "name": "采样方案", + "type": "COMBO", + "widget": { + "name": "采样方案" + }, + "link": null + }, + { + "localized_name": "采样器", + "name": "采样器", + "type": "COMBO", + "widget": { + "name": "采样器" + }, + "link": null + }, + { + "localized_name": "调度器", + "name": "调度器", + "type": "COMBO", + "widget": { + "name": "调度器" + }, + "link": null + }, + { + "localized_name": "步数", + "name": "步数", + "type": "INT", + "widget": { + "name": "步数" + }, + "link": null + }, + { + "localized_name": "CFG", + "name": "CFG", + "type": "FLOAT", + "widget": { + "name": "CFG" + }, + "link": null + }, + { + "localized_name": "降噪", + "name": "降噪", + "type": "FLOAT", + "widget": { + "name": "降噪" + }, + "link": null + }, + { + "localized_name": "噪波随机种", + "name": "噪波随机种", + "type": "INT", + "widget": { + "name": "噪波随机种" + }, + "link": null + }, + { + "localized_name": "自定义Sigma表", + "name": "自定义Sigma表", + "type": "STRING", + "widget": { + "name": "自定义Sigma表" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Latent", + "name": "Latent", + "type": "LATENT", + "links": [ + 10 + ] + }, + { + "localized_name": "降噪Latent", + "name": "降噪Latent", + "type": "LATENT", + "links": null + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "ToggleSampler" + }, + "widgets_values": [ + "Krea 2 turbo(8步)", + "自动(按步数 + 调度器)", + "euler", + "simple", + 8, + 1, + 1, + 0, + "randomize", + "1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0" + ], + "widgets_values_named": { + "模型预设": "Krea 2 turbo(8步)", + "采样方案": "自动(按步数 + 调度器)", + "采样器": "euler", + "调度器": "simple", + "步数": 8, + "CFG": 1, + "降噪": 1, + "噪波随机种": 0, + "control_after_generate": "randomize", + "自定义Sigma表": "1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0" + } + }, + { + "id": 7, + "type": "VAEDecode", + "pos": [ + 1120, + 560 + ], + "size": [ + 140, + 46 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "Latent", + "name": "samples", + "type": "LATENT", + "link": 10 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 11 + } + ], + "outputs": [ + { + "localized_name": "图像", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 13, + 14 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.44.0", + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 8, + "type": "ToggleImageCompare", + "pos": [ + 1120, + 760 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "num_sources", + "name": "num_sources", + "type": "INT", + "widget": { + "name": "num_sources" + }, + "link": null + }, + { + "localized_name": "num_results", + "name": "num_results", + "type": "INT", + "widget": { + "name": "num_results" + }, + "link": null + }, + { + "localized_name": "排版", + "name": "排版", + "type": "COMBO", + "widget": { + "name": "排版" + }, + "link": null + }, + { + "localized_name": "标签", + "name": "标签", + "type": "COMBO", + "widget": { + "name": "标签" + }, + "link": null + }, + { + "label": "原图1", + "name": "source1", + "type": "IMAGE", + "link": 12 + }, + { + "label": "结果1", + "name": "result1", + "type": "IMAGE", + "link": 13 + } + ], + "outputs": [ + { + "localized_name": "对比图", + "name": "对比图", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "ToggleImageCompare" + }, + "widgets_values": [ + 1, + 1, + "成对并排", + "显示" + ], + "widgets_values_named": { + "num_sources": 1, + "num_results": 1, + "排版": "成对并排", + "标签": "显示" + } + }, + { + "id": 9, + "type": "SaveLoadImage", + "pos": [ + 1480, + 560 + ], + "size": [ + 270, + 102 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "link": 14 + }, + { + "localized_name": "use_saved", + "name": "use_saved", + "type": "COMBO", + "widget": { + "name": "use_saved" + }, + "link": null + }, + { + "localized_name": "filename_prefix", + "name": "filename_prefix", + "shape": 7, + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "图像", + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "localized_name": "遮罩", + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "SaveLoadImage" + }, + "widgets_values": [ + "Save", + "krea2_pose" + ], + "widgets_values_named": { + "use_saved": "Save", + "filename_prefix": "krea2_pose" + } + }, + { + "id": 10, + "type": "Note", + "pos": [ + 60, + 40 + ], + "size": [ + 560, + 360 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Krea 2 保身份 + 参考姿势(全部用本插件节点,不依赖 krea2Edit 插件)\n\n【接线】\nPoseReference(线稿) → image1,原照片 → image2,两路一起进 Ref Image Encode。\n模型类型选 Krea2;Latent 直接用它的 latent 输出(16 通道零 latent)。\n\n【★ 顺序是硬约定,反了会渲成线稿人偶】\nKrea 2 的 index 方法里「最后一个参考图 = 主体」。所以主体照片必须放 image2,\n条件图(姿势/线稿/场景)放 image1。想换顺序就在提示词里改 image 编号,\n但接线顺序不要动。\n\n【LoRA 必须配对】\n保身份用 krea2_identity_edit_v2(已挂在加载器 LoRA 槽)。\nkrea_outfittransfer 是 Ostris 系的,配这套会换人。\n\n【为什么不用 index_timestep_zero】\n那会让参考图走单独一套 t=0 调制,参考线稿会被「描」进成图(脸上出轮廓线)。\n本节点已固定用 index。\n\n【★★ 提示词必须写具体姿势,否则模型把线稿人偶画进画面】\n实测同参数下:「图二美女参考图一的姿势,重新摆pose」这种笼统句 ⇒ 模型不读线稿,\n而是把线稿人偶当成第二个主体,输出「左边真人 + 右边线稿人偶」的并排拼贴,姿势一点都不动。\n正确写法(中文完全可用,关键是三段):\n ① 主体指认:让图二中的女人……\n ② 姿势解剖:跪立、身体向后仰、胸部抬起、背部拱起、双手向后下方伸去触摸脚跟、\n 头部微微后仰、四分之三侧后方视角\n ③ 保持不变:脸、发型、服装、背景逐项列出\n本工作流里已填好一版,换姿势时按上面三段改写即可。\n\n【负面条件已经接好了,CFG 随便调】\nRef Image Encode 的第三个输出「negative」就是空文本负条件,直接接到采样器的「负面条件」。\n★ 不要再用 ConditioningZeroOut 把正面清零当负面:CFG=1.0 时它不参与计算所以看不出,\n 一旦 CFG>1 就会崩(实测 Qwen 2.1 20 步 CFG2.5 整张花屏,换空文本即正常)。" + ], + "widgets_values_named": { + "text": "Krea 2 保身份 + 参考姿势(全部用本插件节点,不依赖 krea2Edit 插件)\n\n【接线】\nPoseReference(线稿) → image1,原照片 → image2,两路一起进 Ref Image Encode。\n模型类型选 Krea2;Latent 直接用它的 latent 输出(16 通道零 latent)。\n\n【★ 顺序是硬约定,反了会渲成线稿人偶】\nKrea 2 的 index 方法里「最后一个参考图 = 主体」。所以主体照片必须放 image2,\n条件图(姿势/线稿/场景)放 image1。想换顺序就在提示词里改 image 编号,\n但接线顺序不要动。\n\n【LoRA 必须配对】\n保身份用 krea2_identity_edit_v2(已挂在加载器 LoRA 槽)。\nkrea_outfittransfer 是 Ostris 系的,配这套会换人。\n\n【为什么不用 index_timestep_zero】\n那会让参考图走单独一套 t=0 调制,参考线稿会被「描」进成图(脸上出轮廓线)。\n本节点已固定用 index。" + }, + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 1, + 1, + 1, + 4, + 0, + "CLIP" + ], + [ + 2, + 1, + 2, + 4, + 1, + "VAE" + ], + [ + 3, + 3, + 0, + 4, + 2, + "IMAGE" + ], + [ + 4, + 2, + 0, + 4, + 16, + "IMAGE" + ], + [ + 6, + 1, + 0, + 6, + 0, + "MODEL" + ], + [ + 7, + 4, + 0, + 6, + 1, + "CONDITIONING" + ], + [ + 8, + 4, + 2, + 6, + 2, + "CONDITIONING" + ], + [ + 9, + 4, + 1, + 6, + 3, + "LATENT" + ], + [ + 10, + 6, + 0, + 7, + 0, + "LATENT" + ], + [ + 11, + 1, + 2, + 7, + 1, + "VAE" + ], + [ + 12, + 2, + 0, + 8, + 4, + "IMAGE" + ], + [ + 13, + 7, + 0, + 8, + 5, + "IMAGE" + ], + [ + 14, + 7, + 0, + 9, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ue_links": [], + "ds": { + "scale": 0.9, + "offset": [ + 416, + 110 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/example_workflows/Pose Reference Editing.json b/example_workflows/Pose Reference Editing.json new file mode 100644 index 0000000..e39cefc --- /dev/null +++ b/example_workflows/Pose Reference Editing.json @@ -0,0 +1,816 @@ +{ + "id": "92e0572f-4e3e-4173-9e4f-067267af190c", + "revision": 0, + "last_node_id": 9, + "last_link_id": 10, + "nodes": [ + { + "id": 1, + "type": "UNETLoader", + "pos": [ + 60, + 110 + ], + "size": [ + 270, + 82 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [ + { + "localized_name": "UNet名称", + "name": "unet_name", + "type": "COMBO", + "widget": { + "name": "unet_name" + }, + "link": null + }, + { + "localized_name": "数据类型", + "name": "weight_dtype", + "type": "COMBO", + "widget": { + "name": "weight_dtype" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "模型", + "name": "MODEL", + "type": "MODEL", + "links": [ + 1 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "Qwen\\qwen_image_2.1_turbo_int8_convrot.safetensors", + "default" + ], + "widgets_values_named": { + "unet_name": "Qwen\\qwen_image_2.1_turbo_int8_convrot.safetensors", + "weight_dtype": "default" + } + }, + { + "id": 2, + "type": "CLIPLoader", + "pos": [ + 60, + 255 + ], + "size": [ + 270, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "localized_name": "CLIP名称", + "name": "clip_name", + "type": "COMBO", + "widget": { + "name": "clip_name" + }, + "link": null + }, + { + "localized_name": "类型", + "name": "type", + "type": "COMBO", + "widget": { + "name": "type" + }, + "link": null + }, + { + "localized_name": "设备", + "name": "device", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "device" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "CLIP", + "name": "CLIP", + "type": "CLIP", + "links": [ + 2 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "qwen\\qwen3vl_8b_int8_convrot.safetensors", + "qwen_image", + "default" + ], + "widgets_values_named": { + "clip_name": "qwen\\qwen3vl_8b_int8_convrot.safetensors", + "type": "qwen_image", + "device": "default" + } + }, + { + "id": 3, + "type": "VAELoader", + "pos": [ + 60, + 435 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "localized_name": "vae名称", + "name": "vae_name", + "type": "COMBO", + "widget": { + "name": "vae_name" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "VAE", + "name": "VAE", + "type": "VAE", + "links": [ + 3, + 4 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "qwen_image_2.1_vae_bf16.safetensors" + ], + "widgets_values_named": { + "vae_name": "qwen_image_2.1_vae_bf16.safetensors" + } + }, + { + "id": 4, + "type": "PoseReference", + "pos": [ + 440, + 90 + ], + "size": [ + 340, + 300 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "localized_name": "category", + "name": "category", + "type": "COMBO", + "widget": { + "name": "category" + }, + "link": null + }, + { + "localized_name": "group", + "name": "group", + "type": "COMBO", + "widget": { + "name": "group" + }, + "link": null + }, + { + "localized_name": "pose", + "name": "pose", + "type": "COMBO", + "widget": { + "name": "pose" + }, + "link": null + }, + { + "localized_name": "view", + "name": "view", + "type": "COMBO", + "widget": { + "name": "view" + }, + "link": null + }, + { + "localized_name": "source", + "name": "source", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "source" + }, + "link": null + }, + { + "localized_name": "long_edge", + "name": "long_edge", + "shape": 7, + "type": "INT", + "widget": { + "name": "long_edge" + }, + "link": null + }, + { + "localized_name": "flip", + "name": "flip", + "shape": 7, + "type": "COMBO", + "widget": { + "name": "flip" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "image", + "name": "image", + "type": "IMAGE", + "links": [ + 5 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "aux_id": "electricty00/ComfyUI-Toggle-Pass", + "ver": "60665017a9f0f1fb0cb53714f294d7ccee961066", + "Node name for S&R": "PoseReference", + "tp_pose": { + "key": "全身单人・标准系|站姿|P019_站立・双臂上举伸展|斜侧|线稿", + "img": "data:image/webp;base64,UklGRtwXAABXRUJQVlA4INAXAAAQZwCdASosAZABPlEokEajoqGhIhPpaHAKCWlu/HyZq+tQy/Fj4D/cfyr8//xT5x+yflJ/bfZM/x/FH51+w/4r0P/in19+z/2/92P7t+4fyH/wPCPgC+0/91vE9ovQC96fuH+y8H/+z9Cvzr+tf337XvsA/jP8u/tn5Nf43///WP+A/3PitfYP8x+xXwAfx3+Yf5b/Afvh/iviX/yP8l/p/2j9yX6H/fP97/ivyq+xH+Z/1T/V/4L8m/nn9k/7F+yR+vv/iFPsLGwwJ2QE7ICdkAqaGfOKS/KioRTjd6xu9Y3eCaqplTPXvwNxijIk4HoNWtobDAnZATpKGL8GeNdoN3FzlSgaIWN3rG71h8Fg0hRzWm1WM+UM7PQ33axu9Y3eAYz9nJ1v8rfVIDhdIrZdamSTuzr8jL6q6KxHUh7WN3rG6zoAArsIUx5Jv9c0loC1hDxvfURY3esbvU6mO/cN4NHwxVykNIy3kfTLDdbB6jPl3ndJATsgJ2QCZs9qHZyOLgbxA8MzSlu5DT2u/+ZKZqlsjBcoA9MBOyAnZATF4rRY6AxN8lgGSw0Jm5DQInxyy/KsPdrG71jd6m5w5LXhKyCMDxOP1E1DogS/rwPaxu9Y3V4E4I0J5ZuilF+P7SneOfkqSDUagcd4OO8HGby/lHQ/LAfnZtM4w1ybchcft9MXSbDAnZATFks7qOqOJYqb913bgK+u2yzQOq9DPxKd2sbvWN2cp82F9QYxAhoKQX5KkGBOyAnZAK4ThyfrKchv8G4p7j9mgRQv1xMZ5CxsMCdkAs4T/LEw49J5TkC6aS73aYebwGa7O2gnZATsgFMGDGvHNlnvhUnP9JupK0zBMoXTIJh+2BeffYWNhgTpr0Zf4frI74a+vxOfDW0AEicUw6liBgTsgJ2Jc5ppadMO4JiY9VDoprNqMEZddmz5Y2GBOyAWQ6+BxxNX97fiPz76bhO3j4XprG71jd6m9mjYMZgFoz2oT7puASdOztDKI/ZtA9rG71jXJ551+VsN4pZ/IHudPNhC7n1TcjK3V1KMm4wFY2GBOx8fHlXHELF7wRfHjJ3ydLi6MaVkFgGxP25wwbxXG71jd6xwAYu7WN3gAAD+/9uZD56/piXkcHD4IUxKZE9zk2PUq14XsNrot2mFTL+FLLSXnWW4CK85NZUCxxo8zYTK/QMZJP/tEq60g9V1RZm94EMebM9FE845p3nF5AUq7dGcdLvP31wI/z7uStYNIPqX+TTbwfBEasuWo55F9GlEuIthGAbiIADHL38tSD8Fj+NuviS75kTtAWCiJ9+ZUGnUPHz/rp8hPrIl6FpqY0J1D30PSoJVPHOeDh7HGvyEkvHfge57Dv3307OZl7G9mGYsQBzivI0T8sAZVn+KrsHtCyp+Rl/5/jNb/CmBRhOXMoYGL8jZDv/zEIjxcu4ALgmGNmNWuR4qtlblrOddmavnjB4M47DkKsI+oKf5lYRbRy4t9U1DOp8U2DExp/Y3LWyCQBTvP+G/waWu8WoMkJ4+2QjZvKj57nSfNlg3A9xNb7qkEjXu3yCaFU0el/zC8g04mO9KIfYimdi8knexCMBnyHnv2f/4d0xfnmC5Fo5RXFOuDthFFsi3gfmA3UxZoWMBKAhfhGoTTBy7exOE5nOpughV4aHVIQdzFiu47x+f2Tm3k0BVFkG9uBwnaP/JtcPxqRVQTLLXpIq2LsxZXoLSpaKlwsULExT4wmW6jqgVdLKGqSqxl7zbIBZSvJurQPPT1vf5N+Cuo6wX4E8mPI7l6KBaVYUHMTauylz5ZYOqoitt2JMrTM8z0Pz5KXhrl2UEDjeH/zrVUJ4rg5zTo/xgMzj1fHtWxOspWCi7IxG9top1vwcAS2qX4HwSKBbkxzPxGUXLPENgsNs0sLx5p0SyKgc3bFXcWGMx6U/fK4suM1r4QzMib9YLS/SOMo/sbmbiZeGIWTO0fot276bREYjUesEDq3R8syn7yuV0v2hRcQd56ZtCVuIFYFVeeQHYNO0cgBVnvPw8yujWrRkuLzk7ofFfOM9K8rlcENZuB6tCos1s6p3O4+9YsoFbVKbJH9xCZQe/JXIdZoUaDsGL9zDxhTjRj+W6AtuU9NuCWgYb9BkH+GdqelBgbZ2y2glJUw2LJwLgULvsRB/ixpNEyEoSn+w99+hBaLK0MGO/cip5tv12462V8rrx3GjQDR5qr5DQT63Ip19Zt5HPcIrh0Cd/tjicxI7iniWrWhgHTJE7GVvJ5zd/yw2pq8D+V9qILdB2XrnTWN1mfJI4nQsImgp/bkv8uOIRHHi6P/2CZnv1O4poRBxB1iOK/OaqtUx9X0fM3bu3Gv9I3hlre6lbpsKTQzDRFdJYHbASuTqHicrMsoeK4GVTzBPjKyqj1EuNi7IFV+/CzuLcQ0VDz/QOZd4jar75/5xJY1qvCITod4HRfgXPivkLHCxTF9/cZo2LL+OBAY90hm40nyRMiSGG5b2uWWIlpBm/dpY2U8WHTzaKC8oAsheIDfTA8N0F/T05kHl/moR2rIt6cSI3s1h3+QJWgbR9RBqG9SFKBIj5BYYOSXG4Z6D4QMBjn5eFhJTgZkrELqOxJwuFlN2q0KD5u5bf5W2r2LU6QOakPhZ1q3xkaROmaBfgyfRhm8zYbDXxSyDFgoIQiMIh4eKrN+u/OBSS+XeXLhcxMPmB9e3MV2fLO5C8GWV/Wj3YoLdgd13w6KuaJgodRQqD2rH5gdYNLyWd5ibtoz90j9+U+hKaoA5lBqBYt3dOHoIc1bYYjhmkrKLgHma8TdzNnRBcOWfsjUJ0RAWb95IfDZpyV7l5S8alOQM/EPgP9OSIGf8c89GnzxLb1JZ23wOA3fezcUSdh02QtwXS07bB1BgvdDbwq6hqZV69oH6bUmDSv42jJNXJCYGcUib3P0Hr/6cJufQt38ebYS/EBVW8/ULxAbpiT2uwC5iJF+qt/dT5xmobraXo5gz3rjvhSUKfSZ2nipGgQ3POcBnTSqx9yhPB9tgDpW1bVEYGg/zHSjpX8IIJjzZQsvdkhrIbFQhnEkO0HqmyCrDn8dOHXYH/L4YDyVOTDqvVR0oIsI1Li9W8BezIM1zgD66Fkr6ZkrCVKh9qNaT2oABsRK6JM41upXqQjkq8jdQ9B5ZNrjl3RqU5VipuQ3WzdLJeCo+zB9umMtVzlamt40zN0nHKumavcZugTERonswtTPLeanL05IqFMTiT/jrJB8cxGscrKlUIxSuvlj5QVb0LeOgp6VhyHefZo3llh7dC6s39Cl/8D6+R1ks78lSaC0zE6zLwqOZveLUUfHKd7jJjj9eaUNp4e78NKcdZUwRIy7SQO7U4EfIBSI50pcs7Tp+EA0MZdF3ycDHwaxSivCtAfh9x4ZlODn/z+FQZru6uGy9Go7s6U8SlxQX7gneby2m6Enz7OfpWwSI8kgge+dMQellD5Y5bIksYQ814edJMMN6MaEjk82i56Uc8xKJ9iSgNyUru0Tx78pb0biiaNPU/ZWPyYQ0SdkJK8jG/Gplbd3BAH8VTIdAn4UOiuAEb1F9r5Vq3OHKR+lc8V2AI/fXZeAOFAX9041GCS2WnF1e0R/8ECHgkRyLn1cxjGUFVQ5a3mjIh+ad+yZapl86uAH46u1DocjgkFDjnjER0vve830mSe8e00Es8qOp1tkMWdKqq6pfuwv2k1XbPXUMS5mfqPTgluWMfyxYC1fo/m4w2U6zldPfA4PgWC1vkUgplBntGZZIqLj1fh0fXEdbhWfvdjKDmeOnzJLLkuoj1x2Vm0ktwOOyWlshotzJzgg5tFONQNgNEmKhaqmjZ3NGli0daryQMZ3+yjN3pL3fhlVI/BvwT5is7ImuJOzBXt8Uf4piNF3U6jjoLBmYsBMGhwZcZpWkZYJD4SNytcVX2bc5MablRbrOPnn0DsaFUDvzt81Curp2hodbvIInlmg6uY9Lb4P5tjpHwiVbkees7O28WV+4AXaZ4uN0mYIbFfh2LW1xwEIkODP8atLCWP9ld6lLYC7xT1yR8STFewv14HxK9tRgPhEZi5SIPJCRsqf4LuQXhp/D+is7Dk6gJwQP0FldyUNq9GsOZuekEdZWf8pkPFVuWGwfCrd7qfO4f6G+eQAK5FPnQD8DgWyeNGSrkN71sGnfkU/g2XD4Rv58H+k4fMKy70WvO7QyM3Ii4MQSbSMzfSF3hOpxKsm3SWBHhfXaVbn5XYSw7ST8zNxugivj3ZgTXyMppOpi5HSGbCkJqBKDsNMNqDNF9bAv0O+YNyESWN4/1AZjQ+AsbDkMidC8hR+I3bXaMG0L0eySW/CfwB98qLs4Bjd8Satw49eC3KPq8qXuzA8RzXDfBrr68sL0sXxe41WNwltmiomPGQSCS+clwqtykZGT0uKAUsNCzKi1HY6p6v2QDzcD4icmuuu1OvNtsUlGTKMPaqoigD1bSX49qqN4ySxR3bsbL1GRRC3Y/s8eDpCRPYVCx5+YyoOaNKXaLIKRZQ0NnzPJCjn3ktBF/VejaBwAsrxeD8qhG3yJRxVsCrTEDXcpiu6H6W/vAeycb+66tM91xR0tl7bzAxHPRZ6g91U/Zv6CkgU+QoYLpZvX26cIYSBsCD4uPS+qhry8pOwZ0azKymC+uNkLL5UNUN+JYz4pfG7fz5albe2+PzcZJiJ4l2qduONJ5ZFYrH3SRoBIVl7nX/9CWMdIoTzv658KlYNEQUxxV/bwb4vf02VgYtKbZARuBjf4gfwgK7aV4U6JNQOyVdZKo7ZmvXiYF3BeJoFgpP7d0KrhmFN+80SCyGs43r9/qKNWul9fL5it7jtxj39kX6J+/l8d7uWlh8zPbCt+6znxwGrHkDIaXkK5DoaAtXpZ73Q5mW2FmA9kX+E0T7YhK3tg71E7wMh3S6Q2mgGUXHk8Ve/Q1IyaehbKNGt8KsPz7/TiBd1MPUcLLnZ7gQ5eicHqrta7uLWCxRE426ygRLiAxiQkOaOs+xDUYMWeU0FAiIRyh3RCEzBCjRFpYOn41mdPAgJbh8xNy302mmcuvLbCwQrU2kG9aLGRGkTLnR5312nkaVwf0JTQgHsPla7DitKQ2RdXsGQKGOwOc6wC9ouhq6sDj+ORLnulFw48e9pZqsIiGeeQ55PT69aH01qU1TinDLf+6RV5N/9NQobG9MAxqx6v7A870ooDVLxu7o3iHRPsgbvjAIoh2fQKwv0bDcZHlY1V75FPkBSdRGhvcxzFTuJoeA6S4uYjNGqzIoFzZhWfIqAzfRPNOKYkrpRs5CAUHwxd5YpW5ggzo9DY2X6D9T0Qa0aiJdXHKWuYAasuB7RVe+0V/lVS9vCOZUqo3GJBV5H3SgZU183z5XfJP0bdp2Nun+OTcYfDV8YoHRLyVqeGRMi4vggUfTlzh6cG6WtsYhUusySIdmoWuIrxYINvqxrwjYfETYlHR8N4J65+VNetZ4YPbRhhYInqmHPA6Q/Do+yfGdSf6oW8pYnMF58eJ+AZ/j5bT1JbIvpqoO/VaTiu3G/q62F2ItHacFrgubYjcg2P/Wccxtw3CogOdqDuwGO2M4SoAPDNGj/1Vo6wrjavlxQDZ1rTjkD3DpaZaueQ7seEHAUkKdCEjTkVvUATvRYxIf3JlNjvWTbXOHmJ2D2kJGD7hgAFMnFxYcqSyGQdbmSDQsKfTE44RRTjPVmIKkrImxJzwuWiELyy+0dnOjUETwVHL+d1jSZQUip0DKj9qZ/jHGoEd27JsKER4V7ezB2gfy7wHvKcsQUo1Z8csWqX8pRo4nvvSbay/8GyhAnT8bFUPJ28Hk02WLs1Wfy0f2KFG5P1yzeU+BITsmGY6ffbVY4sr0NPTtaRFZo3dg7tSu9vsZN1XgF5BTJZFN/1bovBM0bfIxBYvCrD2Ghrfu7OzWEahpgnw+XnyiA8dPPFbffEe98ukWfCfjl2wWFxTDWQz16QnHQw6GKYFWCR+yMFyIvs8nBPiD6OJqQChWj4KcMusNlqX0qB13udO8Mg6e74y0TpcxgfgSSQvDrMR3baasoH0aOr9+9w5mQsFkaTi5I1vGBsRvb9aDSXwlNMJGTG+R2AwoW44P4tY0tD8CkHO8Og++722U9qgd2Z7eBEvXQ4T2R3ZYw6IHL4/Rwjnw9Ba7M/SNAnED343tkgTfULTh5Gc6mTeQMxj9fn2+df13VoBuCFbZlWp+YzPhH75ulHzdfgbS3Zo7RO+79OzvQa3BHT20AW7KWrlQG78zHIlUNt1E6DbUdAK48qFvzmXY668064Fw9Lyb5UUk1FyL785SnRuddqGVenn0lK0GHlWJvMb7KyOdZR5DPkfY73EczzL1e9BEv6108/JBvCRCpEjr3dyEzPkSy4sj7o/keKqXqLT/oN8Z3CKqxZ59e0ls8dBHSGBNxvI5OaK/I63/ktAcYyX0lYJOyOTB8BLEdoUqv8IfeglguPXUH6cKLGgctfFBIkKj0NYX73PkRkpqTDE8vwG2TJEdwTg3apYDLsEgoacwSIG0FrKTxHaUskKzdNsf5u1uKaye5bUaU67kJD0a/kVfyDQuicKkwoaJ43H+Bdl83xWjuLGawNsSxOXIE4aidU02LODYJ48FhVWA7Vmjnx/NH3shNCX0mCD6xniu4I6uBVgRkcFEgRNS2cAaymXrcHirx/i6GU6F25iD7Aypv0KnYcbbQ4HpYzCkZL0oci6Kh4WvbrYn7FFLu+PusbZ2OaGDwCNXCuC3dfbIgvsPVXR5aV9kATMq7N5ZsdMEUyochtR68jME6o4dDnOAd5uDduFlm+Jk8t416b+vqEQ65JJeQT4L8VOfYyzEO2b+Qhk1TFTmyN/8IhEIj/tXZq9iRYUG0lADzNIDFh0uEjrCLNfUXeoETevC/to9IQNu7DW9IWu58AXAOvi6aY1bZ7KzDGDQu8yli3ynoSlBUykmcr5HxLYuKhJew5kc9tFuKUQ2Mx79EI4eSHo1KvmlwG4ohw3XsnPh9wDmTr2P5dU8Dfsxg7/r56ZOzjiq3+QkLG2Kso6wXKcoTtsp0lqF2MoyRd7gI4fSZ8GP9xXvf/ZHkj/8VHm3uT/vImAGKm15Q3wBA2a0rf3i7DtMxGBuohd21LW9P6RaviJheUmS6F3ZBo0pcDP4lNomn9pZA6FMyMB05EWkwcjzb+rI7LM4xNsu4UbBtYvUSJROBAydkY5+WhaBUUuy54FAJe5IUU+N2/ZdhJ7r8Ukx2PO97IgdMeVCFdzFIX7VKVFLjExJMcBlbLLGIE/kayuuNXwD2MinZkgbtnqqj09uH11YmtGxWYGwZYHVEFbovuFTO+KN2FadIWpYgfjzdVxmmQDW/aGpvZZKamZCxmAGU+fjS6G3R6scJNhULo6SET4W+odDPjh2OROsG8m1z79SUIvsmOI+uMeeKdNQClGBrAGWr+M8FdhhYQuGAiiZ7ZMxYxba+GqKwgB9xTNhVl45goUxHdXoTfDuZskOMYwfdRLKHzB5LUxlPzibr5S9uF02wRKs9ZL2WKD5F+q4k1glVCYt7TZrxYBP1c/rywSrcYPDAYeXeKpFrti/GwJmOwaNtrkzGR8s6rwrR6xoVvd3yaUyx5PmQe5Dl+1VCXCplmPbWFLsB3tqEIrmin2cSSak/HiIQ7BbMk5m+G1N/SDHJu2XjF7wXt/DX/81c30beCglkEdN0/CWJk12Hbv5e4IwbC8hEzybGUqsuX+tx9Xo5I/Pdsf9T3AeZR7YwWMTpg4n6datn9Bk17egMr8oJrOKBtkuMNyu5/tNa+2VJoV+Gx81zOiFV+GiisDgyyqBd1dqGDhGqQZCV34aJQp9p/gg+KhjxCw4NPpd/WD8YKhAt0HIa8T9k+3qvPxEwnoTJobh+G+8GUddZoe2MUI5AzQdtmmdwbpmo2oAIkT3SzL8JvzRaoTJAY9V0BDhgkXk/j3isEC8NvlSFXd8B+qHGDwEROBj1/Ny1PsJkq9/if2nnwwCmqubCA4qwnIa+7AwnE9Osp/TTR5Rak75fILb25V6NdfOWxE8ipRmHg1m5Etu9cUPAcvoAyBtrRsCRTbrrJ+f2RlasF+RFvf8Xm7x3inLsPxbzprwT3HzIplP4WkofLEKTznanz0FTy/GTm3tf8h/GqO8Ywi9fm653ceCsg1USOgAAA=" + } + }, + "widgets_values": [ + "全身单人・标准系", + "站姿", + "P019_站立・双臂上举伸展", + "斜侧", + "线稿", + 1024, + "关" + ], + "widgets_values_named": { + "category": "全身单人・标准系", + "group": "站姿", + "pose": "P019_站立・双臂上举伸展", + "view": "斜侧", + "source": "线稿", + "long_edge": 1024, + "flip": "关" + } + }, + { + "id": 5, + "type": "TextEncodeQwenImage21", + "pos": [ + 840, + 90 + ], + "size": [ + 400, + 226 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "localized_name": "clip", + "name": "clip", + "type": "CLIP", + "link": 2 + }, + { + "localized_name": "image_1", + "name": "images.image_1", + "shape": 7, + "type": "IMAGE", + "link": 5 + }, + { + "localized_name": "image_2", + "name": "images.image_2", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "localized_name": "vae", + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 3 + }, + { + "localized_name": "prompt", + "name": "prompt", + "type": "STRING", + "widget": { + "name": "prompt" + }, + "link": null + }, + { + "localized_name": "negative_prompt", + "name": "negative_prompt", + "type": "STRING", + "widget": { + "name": "negative_prompt" + }, + "link": null + }, + { + "localized_name": "resolution", + "name": "resolution", + "type": "INT", + "widget": { + "name": "resolution" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "positive", + "name": "positive", + "type": "CONDITIONING", + "links": [ + 6 + ] + }, + { + "localized_name": "negative", + "name": "negative", + "type": "CONDITIONING", + "links": [ + 7 + ] + }, + { + "localized_name": "latent", + "name": "latent", + "type": "LATENT", + "links": [ + 8 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "TextEncodeQwenImage21" + }, + "widgets_values": [ + "Render this pose reference into a photorealistic full-body photo of a young East Asian woman wearing a simple white dress, standing on a pure white studio background with soft even lighting. Keep her pose, body proportions and camera angle exactly as shown in the reference.", + "", + 1024 + ], + "widgets_values_named": { + "prompt": "Render this pose reference into a photorealistic full-body photo of a young East Asian woman wearing a simple white dress, standing on a pure white studio background with soft even lighting. Keep her pose, body proportions and camera angle exactly as shown in the reference.", + "negative_prompt": "", + "resolution": 1024 + } + }, + { + "id": 6, + "type": "KSampler", + "pos": [ + 1230, + 90 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "localized_name": "模型", + "name": "model", + "type": "MODEL", + "link": 1 + }, + { + "localized_name": "正面条件", + "name": "positive", + "type": "CONDITIONING", + "link": 6 + }, + { + "localized_name": "负面条件", + "name": "negative", + "type": "CONDITIONING", + "link": 7 + }, + { + "localized_name": "Latent图像", + "name": "latent_image", + "type": "LATENT", + "link": 8 + }, + { + "localized_name": "种子", + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": null + }, + { + "localized_name": "步数", + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": null + }, + { + "localized_name": "cfg", + "name": "cfg", + "type": "FLOAT", + "widget": { + "name": "cfg" + }, + "link": null + }, + { + "localized_name": "采样器名称", + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": null + }, + { + "localized_name": "调度器", + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": null + }, + { + "localized_name": "降噪", + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "Latent", + "name": "LATENT", + "type": "LATENT", + "links": [ + 9 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 20261102, + "fixed", + 8, + 1, + "euler", + "simple", + 1 + ], + "widgets_values_named": { + "seed": 20261102, + "control_after_generate": "fixed", + "steps": 8, + "cfg": 1, + "sampler_name": "euler", + "scheduler": "simple", + "denoise": 1 + } + }, + { + "id": 7, + "type": "VAEDecode", + "pos": [ + 1510, + 90 + ], + "size": [ + 230, + 46 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "localized_name": "Latent", + "name": "samples", + "type": "LATENT", + "link": 9 + }, + { + "localized_name": "vae", + "name": "vae", + "type": "VAE", + "link": 4 + } + ], + "outputs": [ + { + "localized_name": "图像", + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 10 + ] + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 8, + "type": "SaveImage", + "pos": [ + 1750, + 90 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "localized_name": "图片", + "name": "images", + "type": "IMAGE", + "link": 10 + }, + { + "localized_name": "文件名前缀", + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": null + } + ], + "outputs": [ + { + "localized_name": "images", + "name": "images", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "ue_properties": { + "widget_ue_connectable": {}, + "input_ue_unconnectable": {} + }, + "cnr_id": "comfy-core", + "ver": "0.43.0", + "Node name for S&R": "SaveImage" + }, + "widgets_values": [ + "pose_qwen" + ], + "widgets_values_named": { + "filename_prefix": "pose_qwen" + } + }, + { + "id": 9, + "type": "Note", + "pos": [ + 440, + 620 + ], + "size": [ + 980, + 400 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "参考姿势 · 用姿势素材生成图片\n\n▸ 怎么用\n 1. 在「参考姿势」节点上选:类别 / 姿势组 / 姿势 / 视角(前三个联动)\n 2. 执行,节点上会直接画出选中的素材,先确认姿势对不对\n 3. 改 prompt 描述你要的画面(服装、背景、风格),执行\n\n▸ 源:线稿 / 深度\n 默认「线稿」。实测深度图 3/3 会自己补出不存在的鞋或护具\n (深度没有边界线,脚底和地面亮度太接近),线稿只有 1/3 有瑕疵。\n 深度唯一的优势是遮挡关系,肢体交叠复杂的姿势可以切过去试。\n\n▸ 长边 / 翻转\n 素材原始只有 300x400,「长边」默认放大到 1024。\n 「翻转」做左右镜像,反方向的姿势不用另找素材。\n\n▸ 换编辑模型\n 这个节点的输出是普通 IMAGE,直接把「参考姿势」接到别的编辑编码器的\n images 输入即可:\n · TextEncodeQwenImage21(当前用的,Qwen-Image-2.1)\n · TextEncodeFibo2(FIBO 2.0,记得 CLIPLoader 类型选 fibo2、VAE 换 flux2-vae)\n · TextEncodeQwenImageEditPlus / DynamicRefImageEncode 等\n 图片尺寸建议跟 model 的出图尺寸一致,不然模型会自己裁。\n\n▸ 参数\n Qwen-Image-2.1 turbo:steps 8 / cfg 1.0 / euler / simple / denoise 1.0\n 用文件\n unet: Qwen/qwen_image_2.1_turbo_int8_convrot.safetensors\n clip: qwen/qwen3vl_8b_int8_convrot.safetensors(类型 qwen_image)\n vae : qwen_image_2.1_vae_bf16.safetensors(64 通道,别选 qwen_image_vae)" + ], + "widgets_values_named": { + "text": "参考姿势 · 用姿势素材生成图片\n\n▸ 怎么用\n 1. 在「参考姿势」节点上选:类别 / 姿势组 / 姿势 / 视角(前三个联动)\n 2. 执行,节点上会直接画出选中的素材,先确认姿势对不对\n 3. 改 prompt 描述你要的画面(服装、背景、风格),执行\n\n▸ 源:线稿 / 深度\n 默认「线稿」。实测深度图 3/3 会自己补出不存在的鞋或护具\n (深度没有边界线,脚底和地面亮度太接近),线稿只有 1/3 有瑕疵。\n 深度唯一的优势是遮挡关系,肢体交叠复杂的姿势可以切过去试。\n\n▸ 长边 / 翻转\n 素材原始只有 300x400,「长边」默认放大到 1024。\n 「翻转」做左右镜像,反方向的姿势不用另找素材。\n\n▸ 换编辑模型\n 这个节点的输出是普通 IMAGE,直接把「参考姿势」接到别的编辑编码器的\n images 输入即可:\n · TextEncodeQwenImage21(当前用的,Qwen-Image-2.1)\n · TextEncodeFibo2(FIBO 2.0,记得 CLIPLoader 类型选 fibo2、VAE 换 flux2-vae)\n · TextEncodeQwenImageEditPlus / DynamicRefImageEncode 等\n 图片尺寸建议跟 model 的出图尺寸一致,不然模型会自己裁。\n\n▸ 参数\n Qwen-Image-2.1 turbo:steps 8 / cfg 1.0 / euler / simple / denoise 1.0\n 用文件\n unet: Qwen/qwen_image_2.1_turbo_int8_convrot.safetensors\n clip: qwen/qwen3vl_8b_int8_convrot.safetensors(类型 qwen_image)\n vae : qwen_image_2.1_vae_bf16.safetensors(64 通道,别选 qwen_image_vae)" + }, + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 1, + 1, + 0, + 6, + 0, + "MODEL" + ], + [ + 4, + 3, + 0, + 7, + 1, + "VAE" + ], + [ + 2, + 2, + 0, + 5, + 0, + "CLIP" + ], + [ + 5, + 4, + 0, + 5, + 1, + "IMAGE" + ], + [ + 3, + 3, + 0, + 5, + 3, + "VAE" + ], + [ + 6, + 5, + 0, + 6, + 1, + "CONDITIONING" + ], + [ + 7, + 5, + 1, + 6, + 2, + "CONDITIONING" + ], + [ + 8, + 5, + 2, + 6, + 3, + "LATENT" + ], + [ + 9, + 6, + 0, + 7, + 0, + "LATENT" + ], + [ + 10, + 7, + 0, + 8, + 0, + "IMAGE" + ] + ], + "groups": [ + { + "id": 1, + "title": "加载模型", + "bounding": [ + 20, + 50, + 330, + 490 + ], + "color": "#3f789e", + "flags": {} + }, + { + "id": 2, + "title": "参考姿势 → 出图", + "bounding": [ + 410, + 50, + 1580, + 440 + ], + "color": "#8a6d3b", + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.62, + "offset": [ + 60, + 80 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/js/broadcast_toggle.js b/js/broadcast_toggle.js index a9ae707..07ca6fe 100644 --- a/js/broadcast_toggle.js +++ b/js/broadcast_toggle.js @@ -1,865 +1,1037 @@ -/** - * ComfyUI-Toggle-Pass: ToggleUnifiedLoader —「全局广播」开关(自带,不依赖 cg-use-everywhere) - * - * 作用:节点上多一个「开 / 关」开关。 - * 开 -> 运行(以及导出 API)时,把 MODEL / CLIP / VAE 自动接到图里**所有空着的同类型输入**上, - * 不用再一根根拉线;画布上不会留下这些线(提交时临时连、提交完立刻拆)。 - * 同时画布上会用**紫色曲线**把「将会自动接上的线」画出来,方便核对。 - * 关 -> 完全保持原样,自己拉线(默认)。 - * - * 为什么不用 cg-use-everywhere 的 `properties.ue_convert`: - * 那是它的私有机制,装了才有、卸载就没了,而且只在它自己的 queuePrompt 钩子下生效。 - * 这里自己实现一份最小广播:零依赖、导出 API 也照样带线。 - * - * ⚠️ 序列化安全(这个节点最贵的教训,改动前务必读完): - * - 开关用 `addWidget("toggle", ...)` **追加在 widget 列表最末尾**,并且 `serialize:false`。 - * `widgets_values` 是按位置存的;它既然不进 widgets_values,旧工作流的每一项位置都不动。 - * —— 绝不能插在中间,也不能把一个已有参数标成 serialize:false(那样后面的值会整体前移)。 - * - 开关的状态存在 `node.properties.tp_broadcast`(LiteGraph 原生字段,随工作流保存), - * 不占用 widgets_values。 - * - 不动 Python 的 INPUT_TYPES,所以这个特性**不需要重启 ComfyUI**,Ctrl+F5 就行。 - * - * ⚠️ 只在「前端」提交时生效:用 /prompt 接口直接 POST 原始 API 格式 JSON 时没有前端参与, - * 广播自然不会发生(想让它生效就先在界面里「导出 API」,导出的 JSON 已经带好线了)。 - */ - -import { app } from "../../scripts/app.js"; - -const EXT_NAME = "Toggle-Pass.broadcast"; -const NODE_NAME = "ToggleUnifiedLoader"; -const WIDGET_NAME = "全局广播"; -const PROP = "tp_broadcast"; -const BTN_ON = "开"; -const BTN_OFF = "关"; - -/* 顶部自绘开关的几何常量 —— 必须与 multi_ref_encode.js 里「加载模式胶囊」那套保持一致, - * 否则开关会跟上面的 UNet/Checkpoint 胶囊对不齐(两套常量各改各的很容易漂)。 */ -const ROW_SLOT_H = 20; // 兜底行高(真值优先取 LiteGraph.NODE_SLOT_HEIGHT) -const ROW_CAP_MAX = 147; // 胶囊可见宽上限(= multi_ref_encode.js 的 MODE_ROW_MAX) -const ROW_CAP_MIN = 120; // 节点极窄时的兜底宽 -const ROW_GAP_RIGHT = 45; // 胶囊右端到节点右边的最小留白 -const BC_MIN_W = 66; // 开关自身不窄于此(再窄「广播」+轨道就放不下了) -const BC_PAD_Y = 3; // 上下留白 —— 与 multi_ref_encode.js 的 TG_PAD_Y 同值, - // 这样开关高度 = 胶囊高度(都是 行高 - 3*2 = 14) - -/* ------------------------------------------------------------------ * - * 一、节点上的开关 - * ------------------------------------------------------------------ */ - -function isBroadcastOn(node) { - const w = (node.widgets || []).find((x) => x && x.name === WIDGET_NAME); - if (w) return !!w.value; - return !!(node.properties && node.properties[PROP]); -} - -function numAt(v, i) { - const x = v?.[i]; - return typeof x === "number" && isFinite(x) ? x : null; -} - -function addBroadcastWidget(node) { - if ((node.widgets || []).some((x) => x && x.name === WIDGET_NAME)) return; - - const on = !!(node.properties && node.properties[PROP]); - - /* 原生 toggle:本机前端 1.53.10 的 widget 工厂支持 "toggle", - * {on, off} 决定两侧文案(ComfyUI 自己的 BOOLEAN 输入就是这么建的)。 */ - let w = null; - try { - w = node.addWidget("toggle", WIDGET_NAME, on, (v) => { - try { - node.properties = node.properties || {}; - /* 原生 toggle 会把新值当第一个参数传进来;拿不到才回落读 w.value - * (别只读 w.value:某些路径上 callback 先于 value 赋值,会写反) */ - node.properties[PROP] = typeof v === "boolean" ? v : !!w.value; - } catch (e) { - console.warn("[Toggle-Pass] 广播开关状态写入 properties 失败", e); - } - app.graph?.setDirtyCanvas?.(true, true); - node.setDirtyCanvas?.(true, true); - }, { on: BTN_ON, off: BTN_OFF }); - } catch (e) { - console.warn("[Toggle-Pass] 原生 toggle 控件不可用,跳过广播开关", e); - return; - } - if (!w) return; - - /* 不进 widgets_values / 不进 prompt:旧工作流的位置表一项都不动 */ - w.options = w.options || {}; - w.options.serialize = false; - w.serialize = false; - w.tooltip = - "全局广播:开启后运行时把 MODEL / CLIP / VAE 自动接到图里所有空着的同类型输入上,不用拉线。" + - "开启时画布上会用紫色曲线画出「将自动接上的线」,方便核对(曲线只是预览,不是真实连线、不会被保存)。" + - "关闭则照旧手动连线。"; - w.label = WIDGET_NAME; - - /* ★ 2026-10-24:开关从「widget 列表末尾的一整行」搬到「顶部胶囊下面」。 - * 做法:原生 widget 只当**状态容器**(值 / properties / 序列化全部原样不动), - * 用 hidden 让它不参与布局与绘制,再自己画一个小开关上去。 - * 为什么 hidden 是安全的:widgets_values 是按「参与序列化的 widget」顺序存的, - * 这个 toggle 本来就是 serialize:false(不进 widgets_values), - * 藏起来既不增也不减参与序列化的项 ⇒ 旧工作流的位置表一项都不动。 - * 顺带的好处:节点底部少了一整行,不再挤在「移除 LoRA」下面。 */ - w.hidden = true; - node._tpBcW = w; - attachBroadcastRow(node); -} - -/* ------------------------------------------------------------------ * - * 一之二、顶部自绘小开关(在 UNet / Checkpoint 胶囊的下一行、左半边) - * - * 为什么不用 widget 承载:widget 的 y 由前端布局算死(插槽区之下、按列表顺序往下排), - * 想放到「第一行插槽左侧的下方」这种位置,只能自己画。 - * 这里复用的是「加载模式」开关同一套打法(见 multi_ref_encode.js 的 attachModeRowToggle): - * · 位置:第 1 行插槽的正下方(= 第 2 行插槽那一行的左半边,右侧 CLIP 标签不受影响) - * · 宽度:胶囊的一半(用户要求「一半位置就行」) - * · 绘制:node.onDrawForeground;命中:node.onMouseDown(返回真值吃掉事件,避免变成拖动节点) - * ⚠️ 这两个钩子是**实例属性**,必须存旧引用链式调用 —— 直接赋值会吞掉 - * multi_ref_encode.js 挂的「加载模式」开关(两边都挂同一对钩子)。 - * ------------------------------------------------------------------ */ - -/** 与 multi_ref_encode.js 的 tpWidgetMargin() 同源:BaseWidget.margin 默认 15 */ -function bcMargin() { - const m = globalThis.BaseWidget?.margin; - return (typeof m === "number" && m >= 0 && m <= 40) ? m : 15; -} - -function bcRoundRect(ctx, x, y, w, h, r) { - const rr = Math.max(0, Math.min(r, h / 2, w / 2)); - ctx.beginPath(); - ctx.moveTo(x + rr, y); - ctx.lineTo(x + w - rr, y); - ctx.quadraticCurveTo(x + w, y, x + w, y + rr); - ctx.lineTo(x + w, y + h - rr); - ctx.quadraticCurveTo(x + w, y + h, x + w - rr, y + h); - ctx.lineTo(x + rr, y + h); - ctx.quadraticCurveTo(x, y + h, x, y + h - rr); - ctx.lineTo(x, y + rr); - ctx.quadraticCurveTo(x, y, x + rr, y); - ctx.closePath(); -} - -/** 开关在节点本地坐标里的位置与尺寸(x/w 是我们自己这一块的范围,不含右侧留白) */ -function bcRowGeom(node) { - const SH = Number(globalThis.LiteGraph?.NODE_SLOT_HEIGHT) || ROW_SLOT_H; - const nw = numAt(node?.size, 0) || 0; - const left = bcMargin(); - /* 先按「加载模式胶囊」的宽度算(保证和上面的胶囊左右端点对得上) */ - let capW = nw > 0 ? nw - left - ROW_GAP_RIGHT : ROW_CAP_MAX; - capW = Math.min(ROW_CAP_MAX, Math.max(0, capW)); - if (capW < ROW_CAP_MIN) capW = nw > 0 ? Math.min(ROW_CAP_MIN, Math.max(0, nw - left)) : ROW_CAP_MIN; - /* 用户要求:占胶囊的一半(红框圈的就是胶囊前一半的宽度) */ - const w = Math.max(BC_MIN_W, Math.round(capW / 2)); - - /* 第一行插槽的纵向位置(与加载模式胶囊同一套反推),再往下挪一行 = 胶囊正下方 */ - let top = Math.round(SH * 0.2); - try { - const cy = numAt(node?.getOutputPos?.(0), 1); - const py = numAt(node?.pos, 1); - if (cy !== null && py !== null) top = Math.max(0, Math.round(cy - py - SH / 2)); - } catch (e) { /* 用兜底值 */ } - return { x: left, y: top + SH, w, h: SH }; -} - -/** 自绘:一个完整的小胶囊控件 —— 淡底色托底,左边 label、右边开关轨道。 - * 为什么要有底色:节点里其它控件(下拉框、UNet/Checkpoint 胶囊)都有底色, - * 只画「裸文字 + 轨道」会显得浮在空白上,跟整体设计语言脱节。 - * ★ 关键是「托底要淡、轨道要细」: - * 第一版给外框加了 1px 亮描边,结果和下边框围成**两层框**(外框 + 内轨道), - * 比上面那条单层胶囊笨重得多。现在外框只有一层很淡的填充、默认无描边, - * 视觉上退成「一块底色」而不是「一个框」,轨道才是主角。 - * 配色对齐节点现有控件:下拉框底色 / 高亮蓝 #3a96f3。 */ -function drawBroadcastRow(ctx, node, on, hover) { - const g = bcRowGeom(node); - const cy = g.y + g.h / 2; - /* 高度与上面的 UNet/Checkpoint 胶囊完全一致:行高 - BC_PAD_Y*2 = 14 - * (胶囊那边是 TG_PAD_Y=3、净高 14 —— 两个常量必须同步改,否则一高一矮) */ - const bh = g.h - BC_PAD_Y * 2; - const r = bh / 2; - const bx = g.x, bw = g.w; - - try { - ctx.save(); - - /* ---- 托底:一层淡填充,只在开启/悬停时略提亮 ---- */ - bcRoundRect(ctx, bx, g.y + BC_PAD_Y, bw, bh, r); - if (on) ctx.fillStyle = hover ? "rgba(58,150,243,0.24)" : "rgba(58,150,243,0.13)"; - else ctx.fillStyle = hover ? "rgba(255,255,255,0.105)" : "rgba(255,255,255,0.06)"; - ctx.fill(); - /* 悬停加一道极淡描边:明确「这里能点」,又不会变成第二个框 */ - if (hover) { - ctx.lineWidth = 1; - ctx.strokeStyle = on ? "rgba(58,150,243,0.45)" : "rgba(255,255,255,0.12)"; - ctx.stroke(); - } - - /* ---- 内容整体居中:先量文字宽,再把「文字 + 间隙 + 轨道」作为一条内容居中摆放 ---- - * 之前是「文字贴左 8px、轨道贴右 7px」,两边留白各算各的 ⇒ 一宽一窄,看着偏向一边。 - * 现在统一算 padX,左右留白严格相等。 */ - const label = "广播"; - ctx.textAlign = "left"; - ctx.font = "600 10px sans-serif"; // 用户要求:11px → 10px(小 10%) - let tw = 20; // 10px「广播」约 20px,量不到时兜底 - try { - const lm = ctx.measureText(label); - if (lm && typeof lm.width === "number" && isFinite(lm.width) && lm.width > 0) tw = lm.width; - } catch (e) { /* 用兜底 */ } - - const trackW = 24, GAP = 8; - const contentW = tw + GAP + trackW; - const padX = Math.max(5, (bw - contentW) / 2); // 左右留白相等 ⇒ 整条内容居中 - const lx = bx + padX; - const tx = lx + tw + GAP; - - /* ---- label:按视觉盒垂直居中 ---- - * 不用 textBaseline="middle":Canvas 的 middle 按 (ascent+descent)/2 排, - * 对没有降部的中文会整体偏上。改成量出真实上沿、基线放到 cy + 上沿/2, - * 这样字形上下留白相等 —— 实测这样仍会低约半个像素,再补 0.5 的视觉修正。 */ - ctx.fillStyle = on ? "rgba(230,238,250,1)" : "rgba(174,182,196,1)"; - let asc = 7.3; // 10px 中文的兜底上沿(量不到时用) - try { - const lm = ctx.measureText(label); - const a = lm && lm.actualBoundingBoxAscent; - if (typeof a === "number" && isFinite(a) && a > 0) asc = a; - } catch (e) { /* 用兜底 */ } - ctx.textBaseline = "alphabetic"; - ctx.fillText(label, lx, cy + asc / 2 - 0.5); - - /* ---- 右侧开关:细轨道 + 小滑块(位置 tx 已在上面按居中算好) ---- */ - const th = 10; - const ty = cy - th / 2; - bcRoundRect(ctx, tx, ty, trackW, th, th / 2); - if (on) { - const grad = ctx.createLinearGradient(tx, ty, tx, ty + th); - grad.addColorStop(0, "#4aa5ff"); - grad.addColorStop(1, "#2f86e8"); - ctx.fillStyle = grad; - } else { - ctx.fillStyle = "rgba(255,255,255,0.13)"; - } - ctx.fill(); - /* 关闭态补一道内沿,让轨道看起来是「凹槽」而不是一块平色 */ - if (!on) { - ctx.lineWidth = 1; - ctx.strokeStyle = "rgba(0,0,0,0.18)"; - ctx.stroke(); - } - - /* ---- 滑块:一点点投影,让它「浮」在轨道上 ---- */ - const kr = 4; - const kx = on ? tx + trackW - 1 - kr : tx + 1 + kr; - ctx.save(); - ctx.shadowColor = "rgba(0,0,0,0.30)"; - ctx.shadowBlur = 2; - ctx.shadowOffsetY = 0.5; - ctx.beginPath(); - ctx.arc(kx, cy, kr, 0, Math.PI * 2); - ctx.fillStyle = "#ffffff"; - ctx.fill(); - ctx.restore(); - } finally { - /* ★ 必须 try/finally:漏 restore 会让整个画布的变换永久跑偏(踩过) */ - try { ctx.restore(); } catch (e) { /* ignore */ } - } -} - -function isBroadcastOnNode(node) { - const w = node?._tpBcW || (node?.widgets || []).find((x) => x && x.name === WIDGET_NAME); - if (w && typeof w.value === "boolean") return w.value; - return !!(node?.properties && node.properties[PROP]); -} - -/** 切开关:真源写 properties,再同步给(隐藏的)原生 widget,前端才知道图被改了 */ -function setBroadcast(node, on) { - const v = !!on; - try { - node.properties = node.properties || {}; - node.properties[PROP] = v; - } catch (e) { /* ignore */ } - const w = node._tpBcW || (node.widgets || []).find((x) => x && x.name === WIDGET_NAME); - if (w) { - try { - if (typeof w.setValue === "function") w.setValue(v); - else w.value = v; - } catch (e) { - w.value = v; - } - } - node.setDirtyCanvas?.(true, true); - app.graph?.setDirtyCanvas?.(true, true); - app.graph?.change?.(); -} - -/** 把自绘开关挂到节点上(幂等) */ -function attachBroadcastRow(node) { - if (node._tpBcRow) return; - /* 「现代节点设计」(Vue 节点)不走 canvas 绘制钩子 → 保持原生 widget 可见的回落 */ - if (globalThis.LiteGraph?.vueNodesMode) { - const w = node._tpBcW; - if (w) w.hidden = false; - return; - } - node._tpBcRow = true; - - const prevDraw = typeof node.onDrawForeground === "function" ? node.onDrawForeground : null; - const prevDown = typeof node.onMouseDown === "function" ? node.onMouseDown : null; - const prevMove = typeof node.onMouseMove === "function" ? node.onMouseMove : null; - - node.onDrawForeground = function (ctx, ...rest) { - if (prevDraw) { - try { prevDraw.call(this, ctx, ...rest); } catch (e) { /* 旧钩子出错不影响开关 */ } - } - if (!this._tpBcW || this.flags?.collapsed) return; - try { - drawBroadcastRow(ctx, this, isBroadcastOnNode(this), !!this._tpBcHover); - } catch (e) { - /* 自绘失败就留空,绝不能抛出去(会中断整块画布绘制) */ - } - }; - - /* 悬停高亮:只在「进入/离开」时刷新一次画布,不做逐像素重绘 */ - node.onMouseMove = function (e, pos, canvas) { - if (this._tpBcW && !this.flags?.collapsed) { - const x = numAt(pos, 0), y = numAt(pos, 1); - let hv = false; - if (x !== null && y !== null) { - const g = bcRowGeom(this); - hv = x >= g.x && x <= g.x + g.w && y >= g.y && y <= g.y + g.h; - } - if (this._tpBcHover !== hv) { - this._tpBcHover = hv; - this.setDirtyCanvas?.(true, true); - } - } - return prevMove ? prevMove.call(this, e, pos, canvas) : false; - }; - - /* ⚠️ 光有 onMouseMove 不够:鼠标一移出节点,前端就不再给它派发 move, - * 高亮会**永久卡在亮着**的状态(实测:移开画布后 _tpBcHover 仍是 true)。 - * 所以补一个离开钩子复位。 */ - const prevLeave = typeof node.onMouseLeave === "function" ? node.onMouseLeave : null; - node.onMouseLeave = function (...args) { - if (this._tpBcHover) { - this._tpBcHover = false; - this.setDirtyCanvas?.(true, true); - } - return prevLeave ? prevLeave.apply(this, args) : undefined; - }; - - node.onMouseDown = function (e, pos, canvas) { - if (this._tpBcW && !this.flags?.collapsed) { - const x = numAt(pos, 0), y = numAt(pos, 1); - if (x !== null && y !== null) { - const g = bcRowGeom(this); - if (x >= g.x && x <= g.x + g.w && y >= g.y && y <= g.y + g.h) { - setBroadcast(this, !isBroadcastOnNode(this)); - return true; // 吃掉点击,避免变成拖动节点 - } - } - } - return prevDown ? (prevDown.call(this, e, pos, canvas) || false) : false; - }; -} - -/* 注:原 growToFit()(给追加的那行 widget 补节点高度)已随「开关搬到顶部」一起删除 —— - * 开关不再占用 widget 布局,节点高度不需要额外补。 */ - -function syncBroadcastWidget(node) { - const w = (node.widgets || []).find((x) => x && x.name === WIDGET_NAME); - if (!w) return; - const v = !!(node.properties && node.properties[PROP]); - if (!!w.value !== v) w.value = v; - /* 保险:极端情况下(前端没走 onNodeCreated 就直接 configure)自绘钩子可能还没挂 */ - if (w.hidden) { - node._tpBcW = w; - attachBroadcastRow(node); - } -} - -/* ------------------------------------------------------------------ * - * 二、提交时临时连线(最小广播实现) - * ------------------------------------------------------------------ */ - -/** 输入类型与输出类型是否匹配(兼容 "MODEL" / "A,B" / "*" 这几种写法) */ -function typeMatch(inputType, outputType) { - const a = String(inputType ?? ""); - const b = String(outputType ?? ""); - if (!a || !b) return false; - if (a === b) return true; - if (a === "*" || b === "*") return true; - return a.split(",").some((s) => s.trim() === b); -} - -/** - * 计算「广播计划」:哪些空着的输入会被接到哪个输出。 - * - * ⚠️ 真接线(inflate)和画布上的曲线预览(computeShapes)**必须共用这一份**, - * 否则会出现「画的线」和「真接的线」不一致 —— 那种 bug 用户根本没法自查。 - */ -function planBroadcast(graph) { - const pairs = []; - const ambiguous = new Set(); - if (!graph || !Array.isArray(graph._nodes)) return { pairs, ambiguous }; - - /* 每个类型只认一个广播源:多个加载器都开广播时取第一个,并提示一次 */ - const srcByType = new Map(); - for (const n of graph._nodes) { - if (!n || n.type !== NODE_NAME || !isBroadcastOn(n)) continue; - const outs = n.outputs || []; - for (let i = 0; i < outs.length; i++) { - const t = outs[i] && outs[i].type; - if (!t || t === "*") continue; - if (srcByType.has(t)) { - ambiguous.add(t); - continue; - } - srcByType.set(t, { node: n, slot: i }); - } - } - if (!srcByType.size) return { pairs, ambiguous }; - - for (const [t, src] of srcByType) { - for (const target of graph._nodes) { - /* 加载器自己不算,避免自己接自己 */ - if (!target || target === src.node || target.type === NODE_NAME) continue; - const inputs = target.inputs || []; - for (let idx = 0; idx < inputs.length; idx++) { - const inp = inputs[idx]; - /* 已经接了线的一律不动 —— 广播只补空位,绝不覆盖用户手连的线 */ - if (!inp || inp.link != null) continue; - if (!typeMatch(inp.type, t)) continue; - pairs.push({ srcNode: src.node, srcSlot: src.slot, srcType: t, dstNode: target, dstSlot: idx }); - } - } - } - return { pairs, ambiguous }; -} - -/** - * 把「开着广播」的加载器的三个输出,临时接到所有空着的同类型输入上。 - * 返回一个还原函数;调用它会把临时连线全部拆掉。 - */ -function inflate(appRef) { - const graph = appRef.rootGraph || appRef.graph; - const { pairs, ambiguous } = planBroadcast(graph); - if (ambiguous.size) { - console.warn( - "[Toggle-Pass] 有多个加载器开着「全局广播」,同类型输出只取第一个:", - Array.from(ambiguous).join(", "), - ); - } - const undo = []; - - for (const p of pairs) { - try { - p.srcNode.connect(p.srcSlot, p.dstNode, p.dstSlot); - } catch (e) { - continue; - } - /* connect 失败时不会抛,只表现为 link 仍为空 */ - if (p.dstNode.inputs?.[p.dstSlot] && p.dstNode.inputs[p.dstSlot].link != null) { - const { dstNode, dstSlot } = p; - undo.push(() => { - try { - dstNode.disconnectInput(dstSlot); - } catch (e) { - /* 目标节点已被删掉之类,忽略 */ - } - }); - } - } - - return () => { - for (let i = undo.length - 1; i >= 0; i--) undo[i](); - try { - appRef.graph?.setDirtyCanvas?.(true, true); - } catch (e) { - /* 无画布环境(导出脚本)忽略 */ - } - }; -} - -/* ------------------------------------------------------------------ * - * 三、画布上的预览曲线(只画,不建真实 link) - * ------------------------------------------------------------------ */ - -/* 观感对齐 cg-use-everywhere:紫罗兰实线 + 一层柔光,比青色虚线耐看, - * 也不会被误当成「报错警告线」。 */ -const PREVIEW_COLOR = "#a78bfa"; -const PREVIEW_GLOW = "#7c5cff"; - -/** 从槽位的 boundingRect(官方渲染算出来的真实盒子)取中心点,图坐标 */ -function rectCenter(r) { - if (!r) return null; - if (Array.isArray(r) || typeof r[0] === "number") { - const x = numAt(r, 0); - const y = numAt(r, 1); - if (x == null || y == null) return null; - return [x + (numAt(r, 2) || 0) / 2, y + (numAt(r, 3) || 0) / 2]; - } - const x = typeof r.x === "number" ? r.x : r.left; - const y = typeof r.y === "number" ? r.y : r.top; - if (typeof x !== "number" || typeof y !== "number") return null; - const w = r.width ?? r.w ?? 0; - const h = r.height ?? r.h ?? 0; - return [x + w / 2, y + h / 2]; -} - -/** - * 槽位中心(图坐标)。 - * - * ⚠️ 优先 `boundingRect`,不要只信 `getConnectionPos`: - * 本机前端里槽位的 `pos` 字段**经常是 null**(只有走 widget 布局的那几个才被填), - * 而 `pos` 为 null 时 getConnectionPos 会退化成「按输入顺序估算」的公式 - * (`node.pos + (index+0.7)*NODE_SLOT_HEIGHT`) —— 一旦节点里有 widget 夹在输入之间, - * 估出来的位置就和实际渲染对不上,线看起来就是「错位」。 - * `boundingRect` 是渲染时算出来的真实盒子,节点一移动它就跟着更新。 - */ -function slotPoint(node, isInput, idx) { - const list = isInput ? node?.inputs : node?.outputs; - const s = list && list[idx]; - if (!s) return null; - const c = rectCenter(s.boundingRect); - if (c) return c; - try { - const p = node.getConnectionPos(isInput, idx); - if (p && isFinite(p[0]) && isFinite(p[1])) return [p[0], p[1]]; - } catch (e) { - /* 节点被删/布局未完成 */ - } - return null; -} - -/** - * 把「运行时会自动接上的线」算成屏幕坐标下的贝塞尔。 - * 不创建任何 link ⇒ 不进工作流、不影响保存,纯视觉提示。 - * - * 坐标链路:槽位(图坐标)→ `ds.convertOffsetToCanvas` → 屏幕坐标, - * 然后 setTransform 到 dpr,直接按屏幕坐标画。 - * ⚠️ 不要自己手搓 `(p + offset) * scale`:那是在赌前端内部变换的实现细节。 - */ -function computeShapes(canvas) { - /* ⚠️ 必须和 inflate() 用**同一张图**(rootGraph 优先): - * 广播接哪张图,就画哪张图。两边取不同引用(canvas.graph / app.graph) - * 在切换工作流或进子图的瞬间会不一致,线就会指向图里已不存在的位置。 */ - const g = (app && (app.rootGraph || app.graph)) || (canvas && canvas.graph); - const ds = canvas && canvas.ds; - if (!g || !ds) return null; - - const { pairs } = planBroadcast(g); - if (!pairs.length) return null; - - const scale = ds.scale || 1; - let dpr = canvas.dpr; - if (!dpr) { - const r = canvas.canvas?.getBoundingClientRect?.(); - dpr = r && r.width > 0 ? canvas.canvas.width / r.width : 1; - } - const off = ds.offset || [0, 0]; - const toScreen = (p) => { - try { - const r = ds.convertOffsetToCanvas?.([p[0], p[1]]); - if (r && isFinite(r[0]) && isFinite(r[1])) return [r[0], r[1]]; - } catch (e) { - /* 兜底走下面的手算 */ - } - return [(p[0] + (off[0] || 0)) * scale, (p[1] + (off[1] || 0)) * scale]; - }; - - const items = []; - for (const p of pairs) { - const aG = slotPoint(p.srcNode, false, p.srcSlot); - const bG = slotPoint(p.dstNode, true, p.dstSlot); - if (!aG || !bG) continue; - const a = toScreen(aG); - const b = toScreen(bG); - if (!isFinite(a[0]) || !isFinite(b[0])) continue; - /* 控制点跟官方 Spline 连线同一套:取两点距离的 3 成(不小于 40 图单位), - * 起点往右甩、终点从左边进 —— 收口方向和真实连线一致, - * 一眼就能看出线是从哪个口出来的。 */ - const dist = Math.hypot(bG[0] - aG[0], bG[1] - aG[1]); - const d = Math.max(40, dist * 0.3) * scale; - items.push({ - aG, - bG, - a, - b, - c1: [a[0] + d, a[1]], - c2: [b[0] - d, b[1]], - }); - } - if (!items.length) return null; - return { items, scale, dpr }; -} - -/** - * 取「背景层」的 ctx。 - * - * ⚠️⚠️ 这里是最容易白忙一场的地方:新版前端把背景画在**离屏** canvas 上 - * (`this.bgcanvas`),画完之后才 `ctx.drawImage(bgcanvas, ...)` 贴到主画布, - * 再在主画布上画节点。所以往主 ctx 上画背景层的内容 —— 会立刻被那张贴图盖掉, - * 代码跑了、坐标也对,就是看不见(实测一个紫色像素都没有)。 - * 必须画进 bgcanvas 自己的 ctx,贴图时才会把它一起带上来,节点再盖在上面。 - * 老架构没有 bgcanvas(背景直接画在主 ctx 上),此时退回主 ctx。 - */ -function bgCtx(canvas) { - const bg = canvas && canvas.bgcanvas; - if (bg && typeof bg.getContext === "function") { - if (!canvas.__tpBgCtx || canvas.__tpBgCtx.canvas !== bg) canvas.__tpBgCtx = bg.getContext("2d"); - return canvas.__tpBgCtx; - } - return canvas && canvas.ctx; -} - -/** - * 线本体 —— 画在**节点下层**(背景层 ctx,交付 `drawBackCanvas` 之后)。 - * 所以线穿过节点时会被节点自然遮住,跟真实连线一个观感: - * 该露的缝隙里露出来,节点上干干净净,不挡标题也不挡参数。 - */ -function drawBroadcastLines(ctx, canvas) { - const plan = computeShapes(canvas); - if (!plan || !ctx) return; - const { items, scale, dpr } = plan; - - ctx.save(); - /* ⚠️ save / restore 必须用 try/finally 包住: - * 中间任何一次 `it.a` 取值、bezier 计算出问题抛异常,若跳过 restore, - * 这个 ctx 就会**永久**留在 `dpr + translate + scale` 变换下 —— - * 之后所有绘制(包括官方的选择框、节点)都会整体偏移、放大, - * 而且看起来跟本插件毫无关系,极难排查。宁可少画一帧,也不能漏 restore。 */ - try { - ctx.setTransform(dpr, 0, 0, dpr, 0, 0); - ctx.lineCap = "round"; - ctx.lineJoin = "round"; - - for (const it of items) { - const trace = () => { - ctx.beginPath(); - ctx.moveTo(it.a[0], it.a[1]); - ctx.bezierCurveTo(it.c1[0], it.c1[1], it.c2[0], it.c2[1], it.b[0], it.b[1]); - }; - - /* 一层柔光底:深色画布上紫线才不会是「一根生硬的细线」 */ - ctx.globalAlpha = 0.16; - ctx.strokeStyle = PREVIEW_GLOW; - ctx.lineWidth = Math.max(5, 7 * scale); - trace(); - ctx.stroke(); - - /* 主线 */ - ctx.globalAlpha = 0.95; - ctx.strokeStyle = PREVIEW_COLOR; - ctx.lineWidth = Math.max(1.8, 2.2 * scale); - trace(); - ctx.stroke(); - } - } finally { - ctx.restore(); - } - - if (typeof window !== "undefined") { - window.__tpLastDraw = items.map((it) => ({ - a: [Math.round(it.aG[0]), Math.round(it.aG[1])], - b: [Math.round(it.bG[0]), Math.round(it.bG[1])], - aS: [Math.round(it.a[0]), Math.round(it.a[1])], - bS: [Math.round(it.b[0]), Math.round(it.b[1])], - bend: 0, - })); - } -} - -/** - * 端点小圆点 —— 画在**节点上层**。 - * 槽位本身就压在节点边线上,放下层会被节点整个盖掉,线头看着像断的; - * 两颗 3px 的点不挡任何文字,却能把「接在哪」钉死。 - */ -function drawBroadcastDots(ctx, canvas) { - const plan = computeShapes(canvas); - if (!plan || !ctx) return; - const { items, scale, dpr } = plan; - - ctx.save(); - /* 同 drawBroadcastLines:restore 必须兜底,否则整个画布的变换会被带偏 */ - try { - ctx.setTransform(dpr, 0, 0, dpr, 0, 0); - ctx.globalAlpha = 0.95; - ctx.fillStyle = PREVIEW_COLOR; - const r = Math.max(2.2, 2.6 * scale); - for (const it of items) { - for (const pt of [it.a, it.b]) { - ctx.beginPath(); - ctx.arc(pt[0], pt[1], r, 0, Math.PI * 2); - ctx.fill(); - } - } - } finally { - ctx.restore(); - } -} - -/** - * 装配两处钩子: - * ① `drawBackCanvas` **之后** → 线(画进 bgcanvas,节点下层) - * ② `draw()` 末尾 → 端点圆点(主 ctx,节点上层) - * - * ⚠️ 为什么不用 `onDrawForeground`(踩过的坑): - * ComfyUI 前端用 `watch(() => app.canvas, e => e.onDrawForeground = chain(...))` - * 维护画布钩子,那个 watch 会在我们之后重新赋值 —— 包装被整个替换掉, - * 实测 hookLen 变成了别人的 88 字符函数,绘制一次都没执行。 - */ -function installPreviewPainter(appRef) { - const canvas = appRef.canvas; - if (!canvas || typeof canvas.draw !== "function") return; - if (canvas.__tpDrawPatched) return; - canvas.__tpDrawPatched = true; - - /* ⚠️ 为什么挂在 `drawBackCanvas` **之后**(踩过的坑): - * 一开始插在 `drawFrontCanvas` **之前**,结果一个像素都看不到 —— - * drawFrontCanvas 内部会把前景层重绘一遍,我们画的东西被它盖掉了。 - * 画在 drawBackCanvas 之后:背景和真实连线都画完了,节点还没画 ⇒ - * 线正好落在「节点下层」,节点一盖就自然遮住,节点之间的空白处保留。 - * - * ⚠️ 只用 `this.ctx` / `this`,**不看入参**:实测 drawBackCanvas 的实参 - * 既不是 ctx 也不是 canvas(另一个入口报过 `ctx.save is not a function`), - * 照它取坐标系会一条线都算不出来。参数原样透传,绝不改写。 */ - const wrapBack = (cv) => { - const inner = cv.drawBackCanvas; - if (typeof inner !== "function" || inner.__tpPainter) return; - const wrapped = function (...args) { - const r = inner.apply(this, args); - try { - drawBroadcastLines(bgCtx(this), this); - } catch (e) { - if (typeof window !== "undefined") window.__tpDrawErr = "line:" + String((e && e.message) || e); - } - return r; - }; - wrapped.__tpPainter = true; - cv.drawBackCanvas = wrapped; - }; - - wrapBack(canvas); - - const origDraw = canvas.draw; - canvas.draw = function (...args) { - /* 前端某些路径会重新赋值 drawBackCanvas(拖拽中断时见过), - * 每帧开头兜一次,发现被换掉就重包 —— 成本是一次属性读。 */ - if (!this.drawBackCanvas || !this.drawBackCanvas.__tpPainter) wrapBack(this); - let r; - try { - r = origDraw.apply(this, args); - } finally { - try { - drawBroadcastDots(this.ctx, this); - } catch (e) { - if (typeof window !== "undefined") window.__tpDrawErr = "dot:" + String((e && e.message) || e); - } - } - return r; - }; -} - -function patchGraphToPrompt(appRef) { - if (appRef.__tpBroadcastPatched) return; - - /* ⚠️ 必须**两层都包**,只包 graphToPrompt 会漏: - * cg-use-everywhere 在它自己的 setup() 里就把**当时的** app.graphToPrompt 存成变量, - * 点「运行」时它走 queuePrompt → 用存下来的原函数(可能绕过我们这一层)→ 广播静默失效。 - * 包住 queuePrompt 就能兜住这条路径:不管里面谁调谁,临时线在我们这一层就已经接好了。 - * 用 depth 计数保证「只广播一次」:外层已经接过,内层直接透传、不要重复接、更不要提前拆。 */ - let depth = 0; - - function around(fn) { - if (depth > 0) return fn(); - depth += 1; - const restore = inflate(appRef); - const done = () => { - depth -= 1; - restore(); - }; - let ret; - try { - ret = fn(); - } catch (e) { - done(); - throw e; - } - if (ret && typeof ret.then === "function") { - return ret.then( - (v) => { - done(); - return v; - }, - (e) => { - done(); - throw e; - }, - ); - } - done(); - return ret; - } - - const origPrompt = appRef.graphToPrompt; - if (typeof origPrompt === "function") { - appRef.graphToPrompt = function (...args) { - return around(() => origPrompt.apply(this, args)); - }; - } - - const origQueue = appRef.queuePrompt; - if (typeof origQueue === "function") { - appRef.queuePrompt = function (...args) { - return around(() => origQueue.apply(this, args)); - }; - } - - appRef.__tpBroadcastPatched = true; - /* 给自检脚本用:直接在「广播生效」上下文里跑一段同步/异步逻辑 */ - appRef.__tpBroadcastAround = (fn) => around(fn); - /* 给自检脚本用:列出当前会广播哪些线(只算不接) */ - appRef.__tpBroadcastPlan = () => - planBroadcast(appRef.graph).pairs.map( - (p) => `${p.dstNode.id}:${p.dstNode.inputs?.[p.dstSlot]?.name}<-${p.srcNode.id}:${p.srcSlot}`, - ); -} - -/* ------------------------------------------------------------------ * - * 三、注册 - * ------------------------------------------------------------------ */ - -app.registerExtension({ - name: EXT_NAME, - async setup() { - patchGraphToPrompt(app); - installPreviewPainter(app); - }, - beforeRegisterNodeDef(nodeType, nodeData) { - if (nodeData.name !== NODE_NAME) return; - - const origCreated = nodeType.prototype.onNodeCreated; - nodeType.prototype.onNodeCreated = function () { - const r = origCreated ? origCreated.apply(this, arguments) : undefined; - const node = this; - /* 加载器自己的 onNodeCreated 末尾会 setSize([270,220]), - * 所以这里必须排在它之后加控件、再补高度 */ - addBroadcastWidget(node); - /* 前端重建过画布实例的话,钩子会挂在新实例上缺失——这里顺手兜一次 */ - try { - installPreviewPainter(app); - } catch (e) { - /* 装不上不影响功能 */ - } - return r; - }; - - /* 读档时 properties 已经恢复,把开关同步成存档里的状态 */ - const origConfigure = nodeType.prototype.onConfigure; - nodeType.prototype.onConfigure = function () { - const r = origConfigure ? origConfigure.apply(this, arguments) : undefined; - syncBroadcastWidget(this); - return r; - }; - }, -}); +/** + * ComfyUI-Toggle-Pass: ToggleUnifiedLoader —「全局广播」开关(自带,不依赖 cg-use-everywhere) + * + * 作用:节点上多一个「开 / 关」开关。 + * 开 -> 运行(以及导出 API)时,把 MODEL / CLIP / VAE 自动接到图里**所有空着的同类型输入**上, + * 不用再一根根拉线;画布上不会留下这些线(提交时临时连、提交完立刻拆)。 + * 同时画布上会用**紫色曲线**把「将会自动接上的线」画出来,方便核对。 + * 关 -> 完全保持原样,自己拉线(默认)。 + * + * 为什么不用 cg-use-everywhere 的 `properties.ue_convert`: + * 那是它的私有机制,装了才有、卸载就没了,而且只在它自己的 queuePrompt 钩子下生效。 + * 这里自己实现一份最小广播:零依赖、导出 API 也照样带线。 + * + * ⚠️ 序列化安全(这个节点最贵的教训,改动前务必读完): + * - 开关用 `addWidget("toggle", ...)` **追加在 widget 列表最末尾**,并且 `serialize:false`。 + * `widgets_values` 是按位置存的;它既然不进 widgets_values,旧工作流的每一项位置都不动。 + * —— 绝不能插在中间,也不能把一个已有参数标成 serialize:false(那样后面的值会整体前移)。 + * - 开关的状态存在 `node.properties.tp_broadcast`(LiteGraph 原生字段,随工作流保存), + * 不占用 widgets_values。 + * - 不动 Python 的 INPUT_TYPES,所以这个特性**不需要重启 ComfyUI**,Ctrl+F5 就行。 + * + * ⚠️ 只在「前端」提交时生效:用 /prompt 接口直接 POST 原始 API 格式 JSON 时没有前端参与, + * 广播自然不会发生(想让它生效就先在界面里「导出 API」,导出的 JSON 已经带好线了)。 + */ + +import { app } from "../../scripts/app.js"; + +const EXT_NAME = "Toggle-Pass.broadcast"; +const NODE_NAME = "ToggleUnifiedLoader"; +const WIDGET_NAME = "全局广播"; +const PROP = "tp_broadcast"; +const BTN_ON = "开"; +const BTN_OFF = "关"; + +/* 顶部自绘开关的几何常量 —— 必须与 multi_ref_encode.js 里「加载模式胶囊」那套保持一致, + * 否则开关会跟上面的 UNet/Checkpoint 胶囊对不齐(两套常量各改各的很容易漂)。 */ +const ROW_SLOT_H = 20; // 兜底行高(真值优先取 LiteGraph.NODE_SLOT_HEIGHT) +const ROW_CAP_MAX = 147; // 胶囊可见宽上限(= multi_ref_encode.js 的 MODE_ROW_MAX) +const ROW_CAP_MIN = 120; // 节点极窄时的兜底宽 +const ROW_GAP_RIGHT = 45; // 胶囊右端到节点右边的最小留白 +const BC_MIN_W = 66; // 开关自身不窄于此(再窄「广播」+轨道就放不下了) +const BC_PAD_Y = 3; // 上下留白 —— 与 multi_ref_encode.js 的 TG_PAD_Y 同值, + // 这样开关高度 = 胶囊高度(都是 行高 - 3*2 = 14) + +/* ------------------------------------------------------------------ * + * 一、节点上的开关 + * ------------------------------------------------------------------ */ + +function isBroadcastOn(node) { + const w = (node.widgets || []).find((x) => x && x.name === WIDGET_NAME); + if (w) return !!w.value; + return !!(node.properties && node.properties[PROP]); +} + +function numAt(v, i) { + const x = v?.[i]; + return typeof x === "number" && isFinite(x) ? x : null; +} + +function addBroadcastWidget(node) { + if ((node.widgets || []).some((x) => x && x.name === WIDGET_NAME)) return; + + const on = !!(node.properties && node.properties[PROP]); + + /* 原生 toggle:本机前端 1.53.10 的 widget 工厂支持 "toggle", + * {on, off} 决定两侧文案(ComfyUI 自己的 BOOLEAN 输入就是这么建的)。 */ + let w = null; + try { + w = node.addWidget("toggle", WIDGET_NAME, on, (v) => { + try { + node.properties = node.properties || {}; + /* 原生 toggle 会把新值当第一个参数传进来;拿不到才回落读 w.value + * (别只读 w.value:某些路径上 callback 先于 value 赋值,会写反) */ + node.properties[PROP] = typeof v === "boolean" ? v : !!w.value; + } catch (e) { + console.warn("[Toggle-Pass] 广播开关状态写入 properties 失败", e); + } + app.graph?.setDirtyCanvas?.(true, true); + node.setDirtyCanvas?.(true, true); + }, { on: BTN_ON, off: BTN_OFF }); + } catch (e) { + console.warn("[Toggle-Pass] 原生 toggle 控件不可用,跳过广播开关", e); + return; + } + if (!w) return; + + /* 不进 widgets_values / 不进 prompt:旧工作流的位置表一项都不动 */ + w.options = w.options || {}; + w.options.serialize = false; + w.serialize = false; + w.tooltip = + "全局广播:开启后运行时把 MODEL / CLIP / VAE 自动接到图里所有空着的同类型输入上,不用拉线。" + + "开启时画布上会用紫色曲线画出「将自动接上的线」,方便核对(曲线只是预览,不是真实连线、不会被保存)。" + + "关闭则照旧手动连线。"; + w.label = WIDGET_NAME; + + /* ★ 2026-10-24:开关从「widget 列表末尾的一整行」搬到「顶部胶囊下面」。 + * 做法:原生 widget 只当**状态容器**(值 / properties / 序列化全部原样不动), + * 用 hidden 让它不参与布局与绘制,再自己画一个小开关上去。 + * 为什么 hidden 是安全的:widgets_values 是按「参与序列化的 widget」顺序存的, + * 这个 toggle 本来就是 serialize:false(不进 widgets_values), + * 藏起来既不增也不减参与序列化的项 ⇒ 旧工作流的位置表一项都不动。 + * 顺带的好处:节点底部少了一整行,不再挤在「移除 LoRA」下面。 */ + w.hidden = true; + node._tpBcW = w; + attachBroadcastRow(node); +} + +/* ------------------------------------------------------------------ * + * 一之二、顶部自绘小开关(在 UNet / Checkpoint 胶囊的下一行、左半边) + * + * 为什么不用 widget 承载:widget 的 y 由前端布局算死(插槽区之下、按列表顺序往下排), + * 想放到「第一行插槽左侧的下方」这种位置,只能自己画。 + * 这里复用的是「加载模式」开关同一套打法(见 multi_ref_encode.js 的 attachModeRowToggle): + * · 位置:第 1 行插槽的正下方(= 第 2 行插槽那一行的左半边,右侧 CLIP 标签不受影响) + * · 宽度:胶囊的一半(用户要求「一半位置就行」) + * · 绘制:node.onDrawForeground;命中:node.onMouseDown(返回真值吃掉事件,避免变成拖动节点) + * ⚠️ 这两个钩子是**实例属性**,必须存旧引用链式调用 —— 直接赋值会吞掉 + * multi_ref_encode.js 挂的「加载模式」开关(两边都挂同一对钩子)。 + * ------------------------------------------------------------------ */ + +/** 与 multi_ref_encode.js 的 tpWidgetMargin() 同源:BaseWidget.margin 默认 15 */ +function bcMargin() { + const m = globalThis.BaseWidget?.margin; + return (typeof m === "number" && m >= 0 && m <= 40) ? m : 15; +} + +function bcRoundRect(ctx, x, y, w, h, r) { + const rr = Math.max(0, Math.min(r, h / 2, w / 2)); + ctx.beginPath(); + ctx.moveTo(x + rr, y); + ctx.lineTo(x + w - rr, y); + ctx.quadraticCurveTo(x + w, y, x + w, y + rr); + ctx.lineTo(x + w, y + h - rr); + ctx.quadraticCurveTo(x + w, y + h, x + w - rr, y + h); + ctx.lineTo(x + rr, y + h); + ctx.quadraticCurveTo(x, y + h, x, y + h - rr); + ctx.lineTo(x, y + rr); + ctx.quadraticCurveTo(x, y, x + rr, y); + ctx.closePath(); +} + +/** 开关在节点本地坐标里的位置与尺寸(x/w 是我们自己这一块的范围,不含右侧留白) */ +function bcRowGeom(node) { + const SH = Number(globalThis.LiteGraph?.NODE_SLOT_HEIGHT) || ROW_SLOT_H; + const nw = numAt(node?.size, 0) || 0; + const left = bcMargin(); + /* 先按「加载模式胶囊」的宽度算(保证和上面的胶囊左右端点对得上) */ + let capW = nw > 0 ? nw - left - ROW_GAP_RIGHT : ROW_CAP_MAX; + capW = Math.min(ROW_CAP_MAX, Math.max(0, capW)); + if (capW < ROW_CAP_MIN) capW = nw > 0 ? Math.min(ROW_CAP_MIN, Math.max(0, nw - left)) : ROW_CAP_MIN; + /* 用户要求:占胶囊的一半(红框圈的就是胶囊前一半的宽度) */ + const w = Math.max(BC_MIN_W, Math.round(capW / 2)); + + /* 第一行插槽的纵向位置(与加载模式胶囊同一套反推),再往下挪一行 = 胶囊正下方 */ + let top = Math.round(SH * 0.2); + try { + const cy = numAt(node?.getOutputPos?.(0), 1); + const py = numAt(node?.pos, 1); + if (cy !== null && py !== null) top = Math.max(0, Math.round(cy - py - SH / 2)); + } catch (e) { /* 用兜底值 */ } + return { x: left, y: top + SH, w, h: SH }; +} + +/** 自绘:一个完整的小胶囊控件 —— 淡底色托底,左边 label、右边开关轨道。 + * 为什么要有底色:节点里其它控件(下拉框、UNet/Checkpoint 胶囊)都有底色, + * 只画「裸文字 + 轨道」会显得浮在空白上,跟整体设计语言脱节。 + * ★ 关键是「托底要淡、轨道要细」: + * 第一版给外框加了 1px 亮描边,结果和下边框围成**两层框**(外框 + 内轨道), + * 比上面那条单层胶囊笨重得多。现在外框只有一层很淡的填充、默认无描边, + * 视觉上退成「一块底色」而不是「一个框」,轨道才是主角。 + * 配色对齐节点现有控件:下拉框底色 / 高亮蓝 #3a96f3。 */ +function drawBroadcastRow(ctx, node, on, hover) { + const g = bcRowGeom(node); + const cy = g.y + g.h / 2; + /* 高度与上面的 UNet/Checkpoint 胶囊完全一致:行高 - BC_PAD_Y*2 = 14 + * (胶囊那边是 TG_PAD_Y=3、净高 14 —— 两个常量必须同步改,否则一高一矮) */ + const bh = g.h - BC_PAD_Y * 2; + const r = bh / 2; + const bx = g.x, bw = g.w; + + try { + ctx.save(); + + /* ---- 托底:一层淡填充,只在开启/悬停时略提亮 ---- */ + bcRoundRect(ctx, bx, g.y + BC_PAD_Y, bw, bh, r); + if (on) ctx.fillStyle = hover ? "rgba(58,150,243,0.24)" : "rgba(58,150,243,0.13)"; + else ctx.fillStyle = hover ? "rgba(255,255,255,0.105)" : "rgba(255,255,255,0.06)"; + ctx.fill(); + /* 悬停加一道极淡描边:明确「这里能点」,又不会变成第二个框 */ + if (hover) { + ctx.lineWidth = 1; + ctx.strokeStyle = on ? "rgba(58,150,243,0.45)" : "rgba(255,255,255,0.12)"; + ctx.stroke(); + } + + /* ---- 内容整体居中:先量文字宽,再把「文字 + 间隙 + 轨道」作为一条内容居中摆放 ---- + * 之前是「文字贴左 8px、轨道贴右 7px」,两边留白各算各的 ⇒ 一宽一窄,看着偏向一边。 + * 现在统一算 padX,左右留白严格相等。 */ + const label = "广播"; + ctx.textAlign = "left"; + ctx.font = "600 10px sans-serif"; // 用户要求:11px → 10px(小 10%) + let tw = 20; // 10px「广播」约 20px,量不到时兜底 + try { + const lm = ctx.measureText(label); + if (lm && typeof lm.width === "number" && isFinite(lm.width) && lm.width > 0) tw = lm.width; + } catch (e) { /* 用兜底 */ } + + const trackW = 24, GAP = 8; + const contentW = tw + GAP + trackW; + const padX = Math.max(5, (bw - contentW) / 2); // 左右留白相等 ⇒ 整条内容居中 + const lx = bx + padX; + const tx = lx + tw + GAP; + + /* ---- label:按视觉盒垂直居中 ---- + * 不用 textBaseline="middle":Canvas 的 middle 按 (ascent+descent)/2 排, + * 对没有降部的中文会整体偏上。改成量出真实上沿、基线放到 cy + 上沿/2, + * 这样字形上下留白相等 —— 实测这样仍会低约半个像素,再补 0.5 的视觉修正。 */ + ctx.fillStyle = on ? "rgba(230,238,250,1)" : "rgba(174,182,196,1)"; + let asc = 7.3; // 10px 中文的兜底上沿(量不到时用) + try { + const lm = ctx.measureText(label); + const a = lm && lm.actualBoundingBoxAscent; + if (typeof a === "number" && isFinite(a) && a > 0) asc = a; + } catch (e) { /* 用兜底 */ } + ctx.textBaseline = "alphabetic"; + ctx.fillText(label, lx, cy + asc / 2 - 0.5); + + /* ---- 右侧开关:细轨道 + 小滑块(位置 tx 已在上面按居中算好) ---- */ + const th = 10; + const ty = cy - th / 2; + bcRoundRect(ctx, tx, ty, trackW, th, th / 2); + if (on) { + const grad = ctx.createLinearGradient(tx, ty, tx, ty + th); + grad.addColorStop(0, "#4aa5ff"); + grad.addColorStop(1, "#2f86e8"); + ctx.fillStyle = grad; + } else { + ctx.fillStyle = "rgba(255,255,255,0.13)"; + } + ctx.fill(); + /* 关闭态补一道内沿,让轨道看起来是「凹槽」而不是一块平色 */ + if (!on) { + ctx.lineWidth = 1; + ctx.strokeStyle = "rgba(0,0,0,0.18)"; + ctx.stroke(); + } + + /* ---- 滑块:一点点投影,让它「浮」在轨道上 ---- */ + const kr = 4; + const kx = on ? tx + trackW - 1 - kr : tx + 1 + kr; + ctx.save(); + ctx.shadowColor = "rgba(0,0,0,0.30)"; + ctx.shadowBlur = 2; + ctx.shadowOffsetY = 0.5; + ctx.beginPath(); + ctx.arc(kx, cy, kr, 0, Math.PI * 2); + ctx.fillStyle = "#ffffff"; + ctx.fill(); + ctx.restore(); + } finally { + /* ★ 必须 try/finally:漏 restore 会让整个画布的变换永久跑偏(踩过) */ + try { ctx.restore(); } catch (e) { /* ignore */ } + } +} + +function isBroadcastOnNode(node) { + const w = node?._tpBcW || (node?.widgets || []).find((x) => x && x.name === WIDGET_NAME); + if (w && typeof w.value === "boolean") return w.value; + return !!(node?.properties && node.properties[PROP]); +} + +/** 切开关:真源写 properties,再同步给(隐藏的)原生 widget,前端才知道图被改了 */ +function setBroadcast(node, on) { + const v = !!on; + try { + node.properties = node.properties || {}; + node.properties[PROP] = v; + } catch (e) { /* ignore */ } + const w = node._tpBcW || (node.widgets || []).find((x) => x && x.name === WIDGET_NAME); + if (w) { + try { + if (typeof w.setValue === "function") w.setValue(v); + else w.value = v; + } catch (e) { + w.value = v; + } + } + node.setDirtyCanvas?.(true, true); + app.graph?.setDirtyCanvas?.(true, true); + app.graph?.change?.(); +} + +/** 把自绘开关挂到节点上(幂等) */ +function attachBroadcastRow(node) { + if (node._tpBcRow) return; + /* 「现代节点设计」(Vue 节点)不走 canvas 绘制钩子 → 保持原生 widget 可见的回落 */ + if (globalThis.LiteGraph?.vueNodesMode) { + const w = node._tpBcW; + if (w) w.hidden = false; + return; + } + node._tpBcRow = true; + + const prevDraw = typeof node.onDrawForeground === "function" ? node.onDrawForeground : null; + const prevDown = typeof node.onMouseDown === "function" ? node.onMouseDown : null; + const prevMove = typeof node.onMouseMove === "function" ? node.onMouseMove : null; + + node.onDrawForeground = function (ctx, ...rest) { + if (prevDraw) { + try { prevDraw.call(this, ctx, ...rest); } catch (e) { /* 旧钩子出错不影响开关 */ } + } + if (!this._tpBcW || this.flags?.collapsed) return; + try { + drawBroadcastRow(ctx, this, isBroadcastOnNode(this), !!this._tpBcHover); + } catch (e) { + /* 自绘失败就留空,绝不能抛出去(会中断整块画布绘制) */ + } + }; + + /* 悬停高亮:只在「进入/离开」时刷新一次画布,不做逐像素重绘 */ + node.onMouseMove = function (e, pos, canvas) { + if (this._tpBcW && !this.flags?.collapsed) { + const x = numAt(pos, 0), y = numAt(pos, 1); + let hv = false; + if (x !== null && y !== null) { + const g = bcRowGeom(this); + hv = x >= g.x && x <= g.x + g.w && y >= g.y && y <= g.y + g.h; + } + if (this._tpBcHover !== hv) { + this._tpBcHover = hv; + this.setDirtyCanvas?.(true, true); + } + } + return prevMove ? prevMove.call(this, e, pos, canvas) : false; + }; + + /* ⚠️ 光有 onMouseMove 不够:鼠标一移出节点,前端就不再给它派发 move, + * 高亮会**永久卡在亮着**的状态(实测:移开画布后 _tpBcHover 仍是 true)。 + * 所以补一个离开钩子复位。 */ + const prevLeave = typeof node.onMouseLeave === "function" ? node.onMouseLeave : null; + node.onMouseLeave = function (...args) { + if (this._tpBcHover) { + this._tpBcHover = false; + this.setDirtyCanvas?.(true, true); + } + return prevLeave ? prevLeave.apply(this, args) : undefined; + }; + + node.onMouseDown = function (e, pos, canvas) { + if (this._tpBcW && !this.flags?.collapsed) { + const x = numAt(pos, 0), y = numAt(pos, 1); + if (x !== null && y !== null) { + const g = bcRowGeom(this); + if (x >= g.x && x <= g.x + g.w && y >= g.y && y <= g.y + g.h) { + setBroadcast(this, !isBroadcastOnNode(this)); + return true; // 吃掉点击,避免变成拖动节点 + } + } + } + return prevDown ? (prevDown.call(this, e, pos, canvas) || false) : false; + }; +} + +/* 注:原 growToFit()(给追加的那行 widget 补节点高度)已随「开关搬到顶部」一起删除 —— + * 开关不再占用 widget 布局,节点高度不需要额外补。 */ + +function syncBroadcastWidget(node) { + const w = (node.widgets || []).find((x) => x && x.name === WIDGET_NAME); + if (!w) return; + const v = !!(node.properties && node.properties[PROP]); + if (!!w.value !== v) w.value = v; + /* 保险:极端情况下(前端没走 onNodeCreated 就直接 configure)自绘钩子可能还没挂 */ + if (w.hidden) { + node._tpBcW = w; + attachBroadcastRow(node); + } +} + +/* ------------------------------------------------------------------ * + * 二、提交时临时连线(最小广播实现) + * ------------------------------------------------------------------ */ + +/** 输入类型与输出类型是否匹配(兼容 "MODEL" / "A,B" / "*" 这几种写法) */ +function typeMatch(inputType, outputType) { + const a = String(inputType ?? ""); + const b = String(outputType ?? ""); + if (!a || !b) return false; + if (a === b) return true; + if (a === "*" || b === "*") return true; + return a.split(",").some((s) => s.trim() === b); +} + +/** + * 计算「广播计划」:哪些空着的输入会被接到哪个输出。 + * + * ⚠️ 真接线(inflate)和画布上的曲线预览(computeShapes)**必须共用这一份**, + * 否则会出现「画的线」和「真接的线」不一致 —— 那种 bug 用户根本没法自查。 + */ +function planBroadcast(graph) { + const pairs = []; + const ambiguous = new Set(); + if (!graph || !Array.isArray(graph._nodes)) return { pairs, ambiguous }; + + /* 每个类型只认一个广播源:多个加载器都开广播时取第一个,并提示一次 */ + const srcByType = new Map(); + for (const n of graph._nodes) { + if (!n || n.type !== NODE_NAME || !isBroadcastOn(n)) continue; + const outs = n.outputs || []; + for (let i = 0; i < outs.length; i++) { + const t = outs[i] && outs[i].type; + if (!t || t === "*") continue; + if (srcByType.has(t)) { + ambiguous.add(t); + continue; + } + srcByType.set(t, { node: n, slot: i }); + } + } + if (!srcByType.size) return { pairs, ambiguous }; + + for (const [t, src] of srcByType) { + for (const target of graph._nodes) { + /* 加载器自己不算,避免自己接自己 */ + if (!target || target === src.node || target.type === NODE_NAME) continue; + const inputs = target.inputs || []; + for (let idx = 0; idx < inputs.length; idx++) { + const inp = inputs[idx]; + /* 已经接了线的一律不动 —— 广播只补空位,绝不覆盖用户手连的线 */ + if (!inp || inp.link != null) continue; + if (!typeMatch(inp.type, t)) continue; + pairs.push({ srcNode: src.node, srcSlot: src.slot, srcType: t, dstNode: target, dstSlot: idx }); + } + } + } + return { pairs, ambiguous }; +} + +/** + * 把「开着广播」的加载器的三个输出,临时接到所有空着的同类型输入上。 + * 返回一个还原函数;调用它会把临时连线全部拆掉。 + */ +function inflate(appRef) { + const graph = appRef.rootGraph || appRef.graph; + const { pairs, ambiguous } = planBroadcast(graph); + if (ambiguous.size) { + console.warn( + "[Toggle-Pass] 有多个加载器开着「全局广播」,同类型输出只取第一个:", + Array.from(ambiguous).join(", "), + ); + } + const undo = []; + + for (const p of pairs) { + try { + p.srcNode.connect(p.srcSlot, p.dstNode, p.dstSlot); + } catch (e) { + continue; + } + /* connect 失败时不会抛,只表现为 link 仍为空 */ + if (p.dstNode.inputs?.[p.dstSlot] && p.dstNode.inputs[p.dstSlot].link != null) { + const { dstNode, dstSlot } = p; + undo.push(() => { + try { + dstNode.disconnectInput(dstSlot); + } catch (e) { + /* 目标节点已被删掉之类,忽略 */ + } + }); + } + } + + return () => { + for (let i = undo.length - 1; i >= 0; i--) undo[i](); + try { + appRef.graph?.setDirtyCanvas?.(true, true); + } catch (e) { + /* 无画布环境(导出脚本)忽略 */ + } + }; +} + +/* ------------------------------------------------------------------ * + * 三、画布上的预览曲线(只画,不建真实 link) + * ------------------------------------------------------------------ */ + +/* 观感对齐 cg-use-everywhere:紫罗兰实线 + 一层柔光,比青色虚线耐看, + * 也不会被误当成「报错警告线」。 */ +const PREVIEW_COLOR = "#a78bfa"; +const PREVIEW_GLOW = "#7c5cff"; + +/** + * ⚠️⚠️ `boundingRect` 只在**画过**这个槽位之后才有效。 + * 节点在可视区外 / 从未渲染时,槽位的 `boundingRect` 是 `[0,0,0,0]`, + * 而 `rectCenter` 对零尺寸会老老实实返回 `[0,0]` —— 于是端点被算成**图坐标原点**, + * 线就画到画布左上角那片空白里,看着像一根「悬空紫线」。 + * 2026-11-06 用户截图里那根从节点往左伸出去就断掉的线就是这个: + * 目标是画面外的 `VAE解码`(pos.x=1352,槽位 boundingRect 全 0)。 + * ⇒ 零尺寸一律视为「未布局」,退回 `getConnectionPos` 估算。 + */ +function rectCenter(r) { + if (!r) return null; + if (Array.isArray(r) || typeof r[0] === "number") { + const x = numAt(r, 0); + const y = numAt(r, 1); + const w = numAt(r, 2); + const h = numAt(r, 3); + if (x == null || y == null) return null; + if (!(w > 0) || !(h > 0)) return null; /* 未布局 */ + return [x + w / 2, y + h / 2]; + } + const x = typeof r.x === "number" ? r.x : r.left; + const y = typeof r.y === "number" ? r.y : r.top; + if (typeof x !== "number" || typeof y !== "number") return null; + const w = r.width ?? r.w ?? 0; + const h = r.height ?? r.h ?? 0; + if (!(w > 0) || !(h > 0)) return null; /* 未布局 */ + return [x + w / 2, y + h / 2]; +} + +/** + * 槽位中心(图坐标)。 + * + * ⚠️ 优先 `boundingRect`,不要只信 `getConnectionPos`: + * 本机前端里槽位的 `pos` 字段**经常是 null**(只有走 widget 布局的那几个才被填), + * 而 `pos` 为 null 时 getConnectionPos 会退化成「按输入顺序估算」的公式 + * (`node.pos + (index+0.7)*NODE_SLOT_HEIGHT`) —— 一旦节点里有 widget 夹在输入之间, + * 估出来的位置就和实际渲染对不上,线看起来就是「错位」。 + * `boundingRect` 是渲染时算出来的真实盒子,节点一移动它就跟着更新。 + */ +function slotPoint(node, isInput, idx) { + const list = isInput ? node?.inputs : node?.outputs; + const s = list && list[idx]; + if (!s) return null; + const c = rectCenter(s.boundingRect); + if (c) return c; + try { + const p = node.getConnectionPos(isInput, idx); + if (p && isFinite(p[0]) && isFinite(p[1])) return [p[0], p[1]]; + } catch (e) { + /* 节点被删/布局未完成 */ + } + return null; +} + +/** + * 把「运行时会自动接上的线」算成屏幕坐标下的贝塞尔。 + * 不创建任何 link ⇒ 不进工作流、不影响保存,纯视觉提示。 + * + * 坐标链路:槽位(图坐标)→ `ds.convertOffsetToCanvas` → 屏幕坐标, + * 然后 setTransform 到 dpr,直接按屏幕坐标画。 + * ⚠️ 不要自己手搓 `(p + offset) * scale`:那是在赌前端内部变换的实现细节。 + */ +function computeShapes(canvas) { + /* ⚠️ 必须和 inflate() 用**同一张图**(rootGraph 优先): + * 广播接哪张图,就画哪张图。两边取不同引用(canvas.graph / app.graph) + * 在切换工作流或进子图的瞬间会不一致,线就会指向图里已不存在的位置。 */ + const g = (app && (app.rootGraph || app.graph)) || (canvas && canvas.graph); + const ds = canvas && canvas.ds; + if (!g || !ds) return null; + + const { pairs } = planBroadcast(g); + if (!pairs.length) return null; + + const scale = ds.scale || 1; + let dpr = canvas.dpr; + if (!dpr) { + const r = canvas.canvas?.getBoundingClientRect?.(); + dpr = r && r.width > 0 ? canvas.canvas.width / r.width : 1; + } + const off = ds.offset || [0, 0]; + const toScreen = (p) => { + try { + const r = ds.convertOffsetToCanvas?.([p[0], p[1]]); + if (r && isFinite(r[0]) && isFinite(r[1])) return [r[0], r[1]]; + } catch (e) { + /* 兜底走下面的手算 */ + } + return [(p[0] + (off[0] || 0)) * scale, (p[1] + (off[1] || 0)) * scale]; + }; + + const items = []; + for (const p of pairs) { + const aG = slotPoint(p.srcNode, false, p.srcSlot); + const bG = slotPoint(p.dstNode, true, p.dstSlot); + if (!aG || !bG) continue; + const a = toScreen(aG); + const b = toScreen(bG); + if (!isFinite(a[0]) || !isFinite(b[0])) continue; + /* 控制点跟官方 Spline 连线同一套:取两点距离的 3 成(不小于 40 图单位), + * 起点往右甩、终点从左边进 —— 收口方向和真实连线一致, + * 一眼就能看出线是从哪个口出来的。 */ + const dist = Math.hypot(bG[0] - aG[0], bG[1] - aG[1]); + const d = Math.max(40, dist * 0.3) * scale; + items.push({ + aG, + bG, + a, + b, + c1: [a[0] + d, a[1]], + c2: [b[0] - d, b[1]], + /* 原始引用留着:点亮槽位时要拿槽位的 type(决定颜色)和归属节点(判遮挡) */ + srcNode: p.srcNode, + srcSlot: p.srcSlot, + dstNode: p.dstNode, + dstSlot: p.dstSlot, + }); + } + if (!items.length) return null; + return { items, scale, dpr }; +} + +/** + * 取「背景层」的 ctx。 + * + * ⚠️⚠️ 这里是最容易白忙一场的地方:新版前端把背景画在**离屏** canvas 上 + * (`this.bgcanvas`),画完之后才 `ctx.drawImage(bgcanvas, ...)` 贴到主画布, + * 再在主画布上画节点。所以往主 ctx 上画背景层的内容 —— 会立刻被那张贴图盖掉, + * 代码跑了、坐标也对,就是看不见(实测一个紫色像素都没有)。 + * 必须画进 bgcanvas 自己的 ctx,贴图时才会把它一起带上来,节点再盖在上面。 + * 老架构没有 bgcanvas(背景直接画在主 ctx 上),此时退回主 ctx。 + */ +function bgCtx(canvas) { + const bg = canvas && canvas.bgcanvas; + if (bg && typeof bg.getContext === "function") { + if (!canvas.__tpBgCtx || canvas.__tpBgCtx.canvas !== bg) canvas.__tpBgCtx = bg.getContext("2d"); + return canvas.__tpBgCtx; + } + return canvas && canvas.ctx; +} + +/** + * 线本体 —— 画在**节点下层**(背景层 ctx,交付 `drawBackCanvas` 之后)。 + * 所以线穿过节点时会被节点自然遮住,跟真实连线一个观感: + * 该露的缝隙里露出来,节点上干干净净,不挡标题也不挡参数。 + */ +function drawBroadcastLines(ctx, canvas) { + const plan = computeShapes(canvas); + if (!plan || !ctx) return; + const { items, scale, dpr } = plan; + + ctx.save(); + /* ⚠️ save / restore 必须用 try/finally 包住: + * 中间任何一次 `it.a` 取值、bezier 计算出问题抛异常,若跳过 restore, + * 这个 ctx 就会**永久**留在 `dpr + translate + scale` 变换下 —— + * 之后所有绘制(包括官方的选择框、节点)都会整体偏移、放大, + * 而且看起来跟本插件毫无关系,极难排查。宁可少画一帧,也不能漏 restore。 */ + try { + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + + for (const it of items) { + const trace = () => { + ctx.beginPath(); + ctx.moveTo(it.a[0], it.a[1]); + ctx.bezierCurveTo(it.c1[0], it.c1[1], it.c2[0], it.c2[1], it.b[0], it.b[1]); + }; + + /* 一层柔光底:深色画布上紫线才不会是「一根生硬的细线」 */ + ctx.globalAlpha = 0.16; + ctx.strokeStyle = PREVIEW_GLOW; + ctx.lineWidth = Math.max(5, 7 * scale); + trace(); + ctx.stroke(); + + /* 主线 */ + ctx.globalAlpha = 0.95; + ctx.strokeStyle = PREVIEW_COLOR; + ctx.lineWidth = Math.max(1.8, 2.2 * scale); + trace(); + ctx.stroke(); + } + } finally { + ctx.restore(); + } + + if (typeof window !== "undefined") { + window.__tpLastDraw = items.map((it) => ({ + a: [Math.round(it.aG[0]), Math.round(it.aG[1])], + b: [Math.round(it.bG[0]), Math.round(it.bG[1])], + aS: [Math.round(it.a[0]), Math.round(it.a[1])], + bS: [Math.round(it.b[0]), Math.round(it.b[1])], + bend: 0, + })); + } +} + +/** + * 端点小圆点 —— 默认和线**同一层**(背景层,被节点盖住)。 + * + * ⚠️ 为什么改了(2026-11-06 用户实测): + * 早先画在 `draw()` 末尾 = 全画布最上层,理由是「槽位压在节点边线上, + * 放下层会被盖掉、线头看着像断的」。但这个优先级会让圆点在**任何**节点 + * 移到线上方时照样穿出来 —— 用户拿节点当遮罩盖内容时,一串紫点浮在 + * 节点上面,看着像脏点。 + * 现在和线同层:节点盖住线的同时把点一起盖住,观感统一(线从节点边缘 + * 伸出来,正好是官方连线的样子)。 + * 想回到旧行为:`localStorage.tp_dots_layer = "front"` 再刷新。 + */ +function drawBroadcastDots(ctx, canvas) { + const plan = computeShapes(canvas); + if (!plan || !ctx) return; + const { items, scale, dpr } = plan; + + ctx.save(); + /* 同 drawBroadcastLines:restore 必须兜底,否则整个画布的变换会被带偏 */ + try { + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + ctx.globalAlpha = 0.95; + ctx.fillStyle = PREVIEW_COLOR; + const r = Math.max(2.2, 2.6 * scale); + for (const it of items) { + for (const pt of [it.a, it.b]) { + ctx.beginPath(); + ctx.arc(pt[0], pt[1], r, 0, Math.PI * 2); + ctx.fill(); + } + } + } finally { + ctx.restore(); + } +} + +/** + * 取某个类型(MODEL / CLIP / VAE…)的官方配色。 + * 前端把颜色放在 `LGraphCanvas.link_type_colors`,没命中再看 + * `canvas.default_connection_color_byType`,都没有就退回中灰。 + */ +function slotTypeColor(canvas, type) { + const t = String(type || "").toUpperCase(); + const tbl = (typeof window !== "undefined" && window.LGraphCanvas && window.LGraphCanvas.link_type_colors) || {}; + let c = tbl[t]; + if (!c && canvas && canvas.default_connection_color_byType) c = canvas.default_connection_color_byType[t]; + return c || "#9A9"; +} + +/** + * 这个槽位会不会被**后绘制**的节点盖住? + * 画布按 `graph._nodes` 顺序绘制,下标大的在上面。只要有点落在 + * 某个「更晚绘制」的节点矩形里,就说明它被挡住了 —— 此时不该点亮, + * 否则又是一颗浮在别的节点上的假点。 + */ +function slotHiddenByOtherNode(pt, owner, nodes) { + if (!pt || !owner || !nodes) return false; + const i = nodes.indexOf(owner); + if (i < 0) return false; + for (let k = i + 1; k < nodes.length; k++) { + const n = nodes[k]; + if (!n || n === owner || !n.pos || !n.size) continue; + const x0 = n.pos[0]; + const y0 = n.pos[1] - 30; + if (pt[0] >= x0 && pt[0] <= x0 + n.size[0] && pt[1] >= y0 && pt[1] <= y0 + n.size[1] + 30) return true; + } + return false; +} + +/** + * 把会被广播接上的槽位**点亮**(补一个和「已连接」一样的实心点)。 + * + * ⚠️ 为什么必须先看 `slot.link`: + * 官方槽位是「有 link 填实心、没 link 只描边」。广播只是**预览**,提交前不会 + * 真的建连线,所以 `slot.link` 一直是 null ⇒ 槽位永远显示成空心,线却已经 + * 画过去了,看着就是「接上了但没点亮」。 + * 这里只在「空着、且没被别的节点盖住、位置确定(boundingRect 有效)」时补实心点, + * 颜色取该槽位类型的官方配色,所以和手动连线的观感一致。 + * + * 画在**节点之后**(`draw()` 末尾):槽位点在节点边框上,属于节点自身的一部分, + * 画在下层会被节点吃掉。 + */ +function drawBroadcastSlotLit(ctx, canvas) { + const plan = computeShapes(canvas); + if (!plan || !ctx) return; + const g = (app && (app.rootGraph || app.graph)) || (canvas && canvas.graph); + const nodes = (g && g._nodes) || []; + const { items, scale, dpr } = plan; + + ctx.save(); + try { + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + const r = Math.max(2, 3 * scale); + for (const it of items) { + const ends = [ + { node: it.srcNode, idx: it.srcSlot, isInput: false, pt: it.a, ptG: it.aG }, + { node: it.dstNode, idx: it.dstSlot, isInput: true, pt: it.b, ptG: it.bG }, + ]; + for (const q of ends) { + const list = q.isInput ? q.node && q.node.inputs : q.node && q.node.outputs; + const slot = list && list[q.idx]; + if (!slot) continue; + if (slot.link != null) continue; /* 真连过了,官方自己就画实心 */ + if (q.node.flags && q.node.flags.collapsed) continue; + const br = slot.boundingRect; + if (!br || !(numAt(br, 2) > 0)) continue; /* 位置不确定就别瞎点 */ + if (slotHiddenByOtherNode(q.ptG, q.node, nodes)) continue; + ctx.beginPath(); + ctx.fillStyle = slotTypeColor(canvas, slot.type); + ctx.arc(q.pt[0], q.pt[1], r, 0, Math.PI * 2); + ctx.fill(); + } + } + } finally { + ctx.restore(); + } +} + +/** + * 端点圆点放哪一层: + * "back"(默认)→ 跟线一起画进 bgcanvas,节点能盖住 + * "front" → 旧的 draw() 末尾,全画布最上层(能穿出节点) + * 用 localStorage 而不是 `app.extensionManager.setting`:后者会 POST 到 + * 服务端 `comfy.settings.json`,污染用户真实环境。 + */ +function dotsOnFront() { + try { + return window.localStorage && window.localStorage.getItem("tp_dots_layer") === "front"; + } catch (e) { + return false; + } +} + +/** + * 诊断工具:把当前每一根广播线的两端、归属节点、槽位实算位置全部列表打印。 + * 只读,不改任何行为。控制台执行 `__tpAudit()` 即可。 + * + * 用途:线画到空白处(端点悬空、没有归属节点)时,一眼看出是哪条 pair 算错、 + * 目标槽位的 `boundingRect` 到底是什么。 + */ +function installAudit() { + if (typeof window === "undefined" || window.__tpAudit) return; + window.__tpAudit = function (opts) { + const cv = app.canvas; + const g = (app && (app.rootGraph || app.graph)) || (cv && cv.graph); + if (!g) return "没有图"; + const near = (p, n) => { + if (!p || !n) return "noPoint"; + const pad = 14; + const x0 = n.pos[0] - pad; + const y0 = n.pos[1] - 30 - pad; + const x1 = n.pos[0] + n.size[0] + pad; + const y1 = n.pos[1] + n.size[1] + pad; + return p[0] >= x0 && p[0] <= x1 && p[1] >= y0 && p[1] <= y1; + }; + const rows = []; + const { pairs } = planBroadcast(g); + (pairs || []).forEach((p, i) => { + const aG = slotPoint(p.srcNode, false, p.srcSlot); + const bG = slotPoint(p.dstNode, true, p.dstSlot); + const slot = p.dstNode?.inputs?.[p.dstSlot]; + rows.push({ + "#": i, + 源: (p.srcNode?.title || p.srcNode?.type) + " [" + p.srcSlot + "]", + 目标: (p.dstNode?.title || p.dstNode?.type) + " [" + p.dstSlot + "] " + (slot?.name || ""), + 起点: aG ? aG.map(Math.round).join(",") : "-", + 起点在节点内: near(aG, p.srcNode), + 终点: bG ? bG.map(Math.round).join(",") : "-", + 终点在节点内: near(bG, p.dstNode), + 目标节点矩形: p.dstNode ? [p.dstNode.pos[0], p.dstNode.pos[1], p.dstNode.size[0], p.dstNode.size[1]].map(Math.round).join(",") : "-", + 终点槽boundingRect: slot && slot.boundingRect ? Array.from(slot.boundingRect).map(Math.round).join(",") : String(slot && slot.boundingRect), + }); + }); + console.table(rows); + const bad = rows.filter((r) => r.起点在节点内 !== true || r.终点在节点内 !== true); + if (bad.length) console.warn(`[Toggle-Pass] ${bad.length} 根线的端点不在自己节点范围内(悬空):`, bad); + if (!opts || opts.raw !== false) return rows; + }; +} + +/** + * 装配两处钩子: + * ① `drawBackCanvas` **之后** → 线 + 端点圆点(画进 bgcanvas,节点下层) + * ② `draw()` 开头 → 兜底重包 `drawBackCanvas`(前端偶尔会换掉它) + * + * ⚠️ 为什么不用 `onDrawForeground`(踩过的坑): + * ComfyUI 前端用 `watch(() => app.canvas, e => e.onDrawForeground = chain(...))` + * 维护画布钩子,那个 watch 会在我们之后重新赋值 —— 包装被整个替换掉, + * 实测 hookLen 变成了别人的 88 字符函数,绘制一次都没执行。 + */ +function installPreviewPainter(appRef) { + const canvas = appRef.canvas; + if (!canvas || typeof canvas.draw !== "function") return; + if (canvas.__tpDrawPatched) return; + canvas.__tpDrawPatched = true; + installAudit(); + + /* ⚠️ 为什么挂在 `drawBackCanvas` **之后**(踩过的坑): + * 一开始插在 `drawFrontCanvas` **之前**,结果一个像素都看不到 —— + * drawFrontCanvas 内部会把前景层重绘一遍,我们画的东西被它盖掉了。 + * 画在 drawBackCanvas 之后:背景和真实连线都画完了,节点还没画 ⇒ + * 线正好落在「节点下层」,节点一盖就自然遮住,节点之间的空白处保留。 + * + * ⚠️ 只用 `this.ctx` / `this`,**不看入参**:实测 drawBackCanvas 的实参 + * 既不是 ctx 也不是 canvas(另一个入口报过 `ctx.save is not a function`), + * 照它取坐标系会一条线都算不出来。参数原样透传,绝不改写。 */ + const wrapBack = (cv) => { + const inner = cv.drawBackCanvas; + if (typeof inner !== "function" || inner.__tpPainter) return; + const wrapped = function (...args) { + const r = inner.apply(this, args); + try { + const bg = bgCtx(this); + drawBroadcastLines(bg, this); + if (!dotsOnFront()) drawBroadcastDots(bg, this); + } catch (e) { + if (typeof window !== "undefined") window.__tpDrawErr = "line:" + String((e && e.message) || e); + } + return r; + }; + wrapped.__tpPainter = true; + cv.drawBackCanvas = wrapped; + }; + + wrapBack(canvas); + + const origDraw = canvas.draw; + canvas.draw = function (...args) { + /* 前端某些路径会重新赋值 drawBackCanvas(拖拽中断时见过), + * 每帧开头兜一次,发现被换掉就重包 —— 成本是一次属性读。 */ + if (!this.drawBackCanvas || !this.drawBackCanvas.__tpPainter) wrapBack(this); + let r; + try { + r = origDraw.apply(this, args); + } finally { + try { + drawBroadcastSlotLit(this.ctx, this); + if (dotsOnFront()) drawBroadcastDots(this.ctx, this); + } catch (e) { + if (typeof window !== "undefined") window.__tpDrawErr = "dot:" + String((e && e.message) || e); + } + } + return r; + }; +} + +function patchGraphToPrompt(appRef) { + if (appRef.__tpBroadcastPatched) return; + + /* ⚠️ 必须**两层都包**,只包 graphToPrompt 会漏: + * cg-use-everywhere 在它自己的 setup() 里就把**当时的** app.graphToPrompt 存成变量, + * 点「运行」时它走 queuePrompt → 用存下来的原函数(可能绕过我们这一层)→ 广播静默失效。 + * 包住 queuePrompt 就能兜住这条路径:不管里面谁调谁,临时线在我们这一层就已经接好了。 + * 用 depth 计数保证「只广播一次」:外层已经接过,内层直接透传、不要重复接、更不要提前拆。 */ + let depth = 0; + + function around(fn) { + if (depth > 0) return fn(); + depth += 1; + const restore = inflate(appRef); + const done = () => { + depth -= 1; + restore(); + }; + let ret; + try { + ret = fn(); + } catch (e) { + done(); + throw e; + } + if (ret && typeof ret.then === "function") { + return ret.then( + (v) => { + done(); + return v; + }, + (e) => { + done(); + throw e; + }, + ); + } + done(); + return ret; + } + + const origPrompt = appRef.graphToPrompt; + if (typeof origPrompt === "function") { + appRef.graphToPrompt = function (...args) { + return around(() => origPrompt.apply(this, args)); + }; + } + + const origQueue = appRef.queuePrompt; + if (typeof origQueue === "function") { + appRef.queuePrompt = function (...args) { + return around(() => origQueue.apply(this, args)); + }; + } + + appRef.__tpBroadcastPatched = true; + /* 给自检脚本用:直接在「广播生效」上下文里跑一段同步/异步逻辑 */ + appRef.__tpBroadcastAround = (fn) => around(fn); + /* 给自检脚本用:列出当前会广播哪些线(只算不接) */ + appRef.__tpBroadcastPlan = () => + planBroadcast(appRef.graph).pairs.map( + (p) => `${p.dstNode.id}:${p.dstNode.inputs?.[p.dstSlot]?.name}<-${p.srcNode.id}:${p.srcSlot}`, + ); +} + +/* ------------------------------------------------------------------ * + * 三、注册 + * ------------------------------------------------------------------ */ + +app.registerExtension({ + name: EXT_NAME, + async setup() { + patchGraphToPrompt(app); + installPreviewPainter(app); + }, + beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== NODE_NAME) return; + + const origCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function () { + const r = origCreated ? origCreated.apply(this, arguments) : undefined; + const node = this; + /* 加载器自己的 onNodeCreated 末尾会 setSize([270,220]), + * 所以这里必须排在它之后加控件、再补高度 */ + addBroadcastWidget(node); + /* 前端重建过画布实例的话,钩子会挂在新实例上缺失——这里顺手兜一次 */ + try { + installPreviewPainter(app); + } catch (e) { + /* 装不上不影响功能 */ + } + return r; + }; + + /* 读档时 properties 已经恢复,把开关同步成存档里的状态 */ + const origConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const r = origConfigure ? origConfigure.apply(this, arguments) : undefined; + syncBroadcastWidget(this); + return r; + }; + }, +}); diff --git a/js/canvas_menu.js b/js/canvas_menu.js index 6bee2ed..d8c407c 100644 --- a/js/canvas_menu.js +++ b/js/canvas_menu.js @@ -103,7 +103,7 @@ app.registerExtension({ try { const nodes = collectTogglePassNodes(); if (!nodes.length) return []; - return [ + const items = [ { content: MENU_LABEL, has_submenu: true, @@ -115,6 +115,19 @@ app.registerExtension({ }, }, ]; + // 素材库是运行时可变的(本机目录里丢进新姿势就多出来),给一个手动重扫入口。 + // 平时不用点:节点自己每 15 秒比对一次指纹,变了就重建下拉。 + if (nodes.some((n) => n.type === "PoseReference")) { + items.push({ + content: "🔄 刷新姿势素材库", + callback: () => { + if (typeof window.__tpRefreshPoses === "function") { + window.__tpRefreshPoses(); + } + }, + }); + } + return items; } catch (err) { console.error("[Toggle-Pass] getCanvasMenuItems failed:", err); return []; diff --git a/js/multi_ref_encode.js b/js/multi_ref_encode.js index d8c8dd5..f625d6c 100644 --- a/js/multi_ref_encode.js +++ b/js/multi_ref_encode.js @@ -89,7 +89,128 @@ function refreshNodeSize(node) { }); } +/* ---- 模型类型改名迁移 ---- + * 2026-11-06:`SD / SDXL` 改名为 `SD / SDXL / Z-Image`(两者 latent 行为完全一样, + * Z-Image 就是「不接参考图的通用档」,合进一个名字里省得再开一项)。 + * 旧工作流的 widgets_values 里存的是旧字面量,不在下拉选项里 → 前端会显示空白。 + * 这里在加载时直接改值,用户看不到中间态。 + * ⚠️ 后端 multi_ref_encode.py 有一份同样的表,两层都兜(第三方节点转存 / 手工改 JSON)。 + */ +const MODEL_TYPE_MIGRATIONS = { + "SD / SDXL": "SD / SDXL / Z-Image", + "SD/SDXL": "SD / SDXL / Z-Image", + "SD / SDXL / z-image": "SD / SDXL / Z-Image", + "SD/SDXL/z-image": "SD / SDXL / Z-Image", + "SDXL": "SD / SDXL / Z-Image", + "SD 1.5": "SD / SDXL / Z-Image", + "Z-Image": "SD / SDXL / Z-Image", + "z-image": "SD / SDXL / Z-Image", + "ZImage": "SD / SDXL / Z-Image", +}; + +function migrateModelType(node) { + const w = (node.widgets || []).find(x => x.name === "模型类型"); + if (!w || typeof w.value !== "string") return false; + const to = MODEL_TYPE_MIGRATIONS[w.value.trim()]; + if (!to || to === w.value) return false; + console.log(`[Toggle-Pass] 模型类型 已迁移: "${w.value}" -> "${to}"`); + w.value = to; + return true; +} + +/* ---- Ref Image Encode 输出顺序迁移 ---- + * 2026-11-06:`negative` 从末尾挪到 `latent` 前面(纯排版,node 上好看)。 + * 老布局 outputs = [conditioning, latent, negative] + * 新布局 outputs = [conditioning, negative, latent] + * ⚠️ 索引 1/2 的含义互换了,老工作流存在 JSON 里的 link.origin_slot 会指向错的输出口 + * (负面被当 latent、latent 被当负面,类型对不上直接断线)。 + * 这里按 outputs[i].name 判断布局(不依赖存盘标记,幂等): + * - 检测到老布局 ⇒ 交换 1/2 号口的整个 output 元素(name/type/links 一起走) + * - 每次都把 graph.links 的 origin_slot 对齐到当前 outputs 位置 + */ +const OUT_ORDER_TAG = "negative_before_latent"; + +// ① 只给槽位改名(幂等:新布局下不做任何事)。同步执行,抢在渲染连线之前。 +function renameOutputSlots(node) { + const outs = node?.outputs; + if (!outs || outs.length < 3) return false; + if (outs[1]?.name !== "latent" || outs[2]?.name !== "negative") return false; + + // ⚠️ 不能交换 outputs 数组元素本身 —— ComfyUI 加载完会按 link.origin_slot + // 重新往 outputs[i].links 里填,换掉的数组元素会被"按位置"填回旧连线。 + // 只换 name/type,位置不变,等价于「给槽位改名」。 + const nm = outs[1].name, tp = outs[1].type; + outs[1].name = outs[2].name; outs[1].type = outs[2].type; + outs[2].name = nm; outs[2].type = tp; + node.properties = node.properties || {}; + node.properties.tp_outorder = OUT_ORDER_TAG; + console.log("[Toggle-Pass] Ref Image Encode 输出顺序已迁移: conditioning / negative / latent"); + return true; +} + +// ② 把连线按「类型语义」搬回正确槽位。幂等,可无限次重跑。 +// LATENT → 2 号口(latent),CONDITIONING → 1 号口(negative);0 号口不参与。 +// 返回值:-1 = graph.links 还没建好(要继续重试);>=0 = 本次改动的连线条数。 +function fixLinkSlots(node) { + if (!node) return 0; + const graph = node.graph || app?.graph; + const links = graph?.links; + if (!links) return -1; + + // ★ 加载早期 graph.links 是空表(实测 200ms 时仍是空的,几百毫秒后才填满) + // ⇒ 空表一律当「未就绪」,否则会在什么都没做的状态下提前收敛。 + const empty = Array.isArray(links) ? links.length === 0 : Object.keys(links).length === 0; + if (empty) return -1; + + let changed = 0; + const fix = (getSlot, setSlot, type, originId) => { + if (String(originId) !== String(node.id)) return; + const s = getSlot(); + if (s !== 1 && s !== 2) return; // 0 号口(conditioning)不参与 + const want = type === "LATENT" ? 2 : 1; + if (s !== want) { setSlot(want); changed++; } + }; + + if (Array.isArray(links)) { + // 老式:[[id, origin_id, origin_slot, target_id, target_slot, type], ...] + for (const l of links) { + if (!l) continue; + fix(() => l[2], (v) => { l[2] = v; }, l[5], l[1]); + } + } else { + // 新版:{[id]: LLink},origin_slot 是 getter/setter,直接赋值有效 + for (const lk of Object.values(links)) { + if (!lk) continue; + fix(() => lk.origin_slot, (v) => { lk.origin_slot = v; }, lk.type, lk.origin_id); + } + } + return changed; +} + +// ③ 阶梯重试直到收敛。graph.links 的就绪时机在不同机器/图规模下差别很大, +// 单靠一帧 rAF 兜底会漏(这一版就栽在这:name 换了、slot 没换 ⇒ 用户看到「连错了」)。 +const OUT_ORDER_RETRY_MS = [0, 50, 120, 260, 550, 1000, 1800, 3000]; + +function scheduleOutputOrderFix(node) { + let i = 0; + const step = () => { + if (!node || !node.graph) return; // 节点已被移除/图已换 + const r = fixLinkSlots(node); + if (r === 0) return; // 已收敛,收手,不再干扰用户手动接线 + i++; + if (i < OUT_ORDER_RETRY_MS.length) setTimeout(step, OUT_ORDER_RETRY_MS[i]); + }; + setTimeout(step, OUT_ORDER_RETRY_MS[0]); +} + +// 兼容旧调用点 +function migrateOutputOrder(node) { + renameOutputSlots(node); + return fixLinkSlots(node); +} + function applyModelVisibility(node) { + migrateModelType(node); // 先把旧名字换成新名字,再决定显隐 const get = n => (node.widgets || []).find(w => w.name === n); const mw = get("模型类型"); const model = mw ? mw.value : null; @@ -137,6 +258,12 @@ app.registerExtension({ const origConfigure = nodeType.prototype.onConfigure; nodeType.prototype.onConfigure = function () { origConfigure?.apply(this, arguments); + // 输出口改名必须抢在画布渲染连线之前(同步执行); + // 连线归位要等 graph.links 建好,交给阶梯重试(只等一帧太早,实测那时 links 还是空的)。 + if (nodeData.name === "DynamicRefImageEncode") { + renameOutputSlots(this); + scheduleOutputOrderFix(this); + } requestAnimationFrame(() => { const w = this.widgets?.find(w => w.name === cfg.widget); if (w) syncInputs(this, cfg, Math.max(1, Math.min(cfg.max, w.value || 1))); diff --git a/js/pose_reference.js b/js/pose_reference.js new file mode 100644 index 0000000..bb2e3ca --- /dev/null +++ b/js/pose_reference.js @@ -0,0 +1,637 @@ +/** + * ComfyUI-Toggle-Pass: 参考姿势(PoseReference)— 三级联动 + 节点内缩略图 + * + * Python 端把全部选项平铺给出(大类 4 / 姿势组 26 / 姿势 288 / 视角 5), + * 不联动也能用。这里做三件事: + * 1. 选了大类就把「姿势组」收窄到该类下的组,选了组再把「姿势」收窄到该组下的, + * 切完顺手把画布重绘一次,免得下拉还显示旧选项。 + * 2. 任何下拉一变(大类/组/姿势/视角/线稿深度/翻转)就去 /toggle_pass/pose_image + * 取一张缩略图,直接画在节点下半部分 —— 不用执行工作流就能看到选的是哪张。 + * 3. 图进来了按比例把节点撑高,保证图不会被挤成一条缝。 + * + * 图片走自绘(onDrawForeground)而不是 node.imgs:后者需要 HTMLImage 对象、 + * 还依赖前端内部绘制逻辑,跨版本不稳。自绘只依赖 LiteGraph 的公开钩子。 + */ + +import { app } from "../../scripts/app.js"; +import { api } from "../../scripts/api.js"; + +const NODE_NAME = "PoseReference"; +const TREE_API = "/toggle_pass/pose_tree"; +const IMAGE_API = "/toggle_pass/pose_image"; +const STAMP_API = "/toggle_pass/pose_stamp"; + +const PAD = 10; +const DEBOUNCE_MS = 120; +// 素材指纹轮询间隔:往本机素材目录里丢新姿势,不用刷新浏览器,最多等这么久自己就出现 +const POLL_MS = 15000; +// 会改变「该显示哪张图」的六个下拉 +const WATCHED = ["category", "group", "pose", "view", "source", "flip"]; +// 1.57 前端给「有 imgs 的节点」自动挂的官方画布预览 widget +const PREVIEW_WIDGET = "$$canvas-image-preview"; + +let treePromise = null; + +function fetchTree(force) { + if (force) treePromise = null; // 强制重扫:走 ?refresh=1 让后端丢掉缓存 + if (!treePromise) { + treePromise = api + .fetchApi(TREE_API + (force ? "?refresh=1" : "")) + .then((r) => (r.ok ? r.json() : null)) + .then((d) => { + // 失败/空结果不能留在缓存里:否则后面所有节点都拿这个 null, + // 联动永远建不起来,只有刷新页面(清掉模块状态)才恢复。 + if (!d || !d.tree) treePromise = null; + return d; + }) + .catch(() => { + treePromise = null; + return null; + }); + } + return treePromise; +} + +function widget(node, name) { + return (node.widgets || []).find((w) => w.name === name); +} + +function val(node, name, fallback) { + const w = widget(node, name); + return w && w.value !== undefined && w.value !== null ? w.value : fallback; +} + +/** + * 换一套选项。keep=true 时保留当前值(加载工作流用,避免把用户存的姿势改掉)。 + * 返回是否真的变了,用于决定要不要重绘。 + */ +function setValues(w, values, keep) { + if (!w || !Array.isArray(values) || values.length === 0) return false; + w.options = w.options || {}; + const old = w.options.values; + const same = + Array.isArray(old) && + old.length === values.length && + old.every((v, i) => v === values[i]); + if (same) return false; + + w.options.values = values.slice(); + if (!keep && !values.includes(w.value)) w.value = values[0]; + return true; +} + +function buildSync(node, tree) { + const wCat = widget(node, "category"); + const wGroup = widget(node, "group"); + const wPose = widget(node, "pose"); + if (!wCat || !wGroup || !wPose) return null; + + const groupsOf = (cat) => Object.keys((tree && tree[cat]) || {}); + const posesOf = (cat, grp) => Object.keys(((tree && tree[cat]) || {})[grp] || {}); + + return function sync(keep) { + let dirty = false; + dirty = setValues(wGroup, groupsOf(wCat.value), keep) || dirty; + dirty = setValues(wPose, posesOf(wCat.value, wGroup.value), keep) || dirty; + if (dirty) { + node.setDirtyCanvas(true, true); + app.graph?.setDirtyCanvas?.(true, true); + } + return dirty; + }; +} + +// ---------------- 工作流内嵌 ---------------- +// 选中的素材原文件(webp 约 5KB)以 data URI 存进 node.properties.tp_pose, +// 跟着工作流一起走:别人下载后既能看到图,素材库不在时后端也能拿它出图。 +// 后端从 extra_pnginfo 里按 id 找 properties,所以 key 必须和 Python 的 embed_key 拼法一致。 + +function embedKey(node) { + return [ + val(node, "category", ""), + val(node, "group", ""), + val(node, "pose", ""), + val(node, "view", ""), + val(node, "source", "线稿"), + ] + .map((x) => String(x)) + .join("|"); +} + +function flipOn(node) { + return val(node, "flip", "关") === "开"; +} + +function blobToDataUrl(blob) { + return new Promise((resolve, reject) => { + const fr = new FileReader(); + fr.onload = () => resolve(String(fr.result)); + fr.onerror = () => reject(fr.error); + fr.readAsDataURL(blob); + }); +} + +function loadImage(src) { + return new Promise((resolve, reject) => { + const img = new Image(); + img.onload = () => resolve(img); + img.onerror = () => reject(new Error("image decode failed")); + img.src = src; + }); +} + +function storeEmbed(node, dataUrl) { + const key = embedKey(node); + node.properties = node.properties || {}; + const cur = node.properties.tp_pose; + if (cur && cur.key === key && cur.img === dataUrl) return; + node.properties.tp_pose = { key, img: dataUrl }; +} + +/** 兜底显示:素材库取不到时,先用工作流里带的那张。 */ +function showEmbedded(node) { + const emb = node.properties && node.properties.tp_pose; + if (!emb || !emb.img) return false; + loadImage(emb.img) + .then((img) => { + if (node._tpPoseFromNet) return; // 真图已经到了,不自找麻烦 + node._tpPoseImg = img; + node._tpPoseFlip = flipOn(node); + node._tpPoseErr = emb.key === embedKey(node) ? null : "素材库缺失,显示内嵌旧图"; + fitNode(node, img); + node.setDirtyCanvas(true, true); + }) + .catch(() => {}); + return true; +} + +// ---------------- 缩略图 ---------------- + +function previewUrl(node) { + // raw=1:直接返回素材原文件(webp 约 5KB),不缩放不翻转 —— 既当缩略图又当内嵌源 + const q = new URLSearchParams({ + category: String(val(node, "category", "")), + group: String(val(node, "group", "")), + pose: String(val(node, "pose", "")), + view: String(val(node, "view", "")), + source: String(val(node, "source", "线稿")), + raw: "1", + }); + return `${IMAGE_API}?${q.toString()}`; +} + +/** 所有 widget 画完后的底部 y(节点 body 坐标系,原点在标题栏下沿)。 */ +function widgetsBottom(node) { + let bottom = 0; + const ws = node.widgets || []; + for (let i = 0; i < ws.length; i++) { + const w = ws[i]; + let y = typeof w.last_y === "number" ? w.last_y : 4 + i * 28; + let h = 20; + if (typeof w.height === "number" && w.height > 0) { + h = w.height; + } else if (typeof w.computeSize === "function") { + try { + const s = w.computeSize(node.size[0]); + if (Array.isArray(s) && s.length > 1) h = s[1]; + } catch (e) { + /* 忽略:拿不到就用默认行高 */ + } + } + bottom = Math.max(bottom, y + h); + } + return bottom; +} + +function fitNode(node, img) { + const top = widgetsBottom(node); + const availW = Math.max(80, node.size[0] - PAD * 2); + // 按图比例算一个「看得清又不占满屏」的高度,限制在 190~300 + const wanted = Math.round(Math.min(300, Math.max(190, (availW * img.height) / img.width * 0.72))); + const need = Math.ceil(top + 6 + wanted + PAD); + if (node.size[1] < need) { + node.size[1] = need; // size 是类数组对象,整块赋值会被吞,逐下标写 + node.setDirtyCanvas(true, true); + } +} + +function refreshPreview(node) { + const url = previewUrl(node); + // flip 不参与 URL(拿的是未翻转的原文件),所以单独同步,不能跟着 URL 早退 + const f = flipOn(node); + if (node._tpPoseFlip !== f) { + node._tpPoseFlip = f; + node.setDirtyCanvas(true, true); + } + // 已经有这张图就不重复取;但图对象丢了(出错被清、加载中新节点)还是要重取 + if (node._tpPoseUrl === url && node._tpPoseImg) return; + node._tpPoseUrl = url; + const keyAtRequest = embedKey(node); + + (async () => { + try { + const res = await api.fetchApi(url); + if (!res.ok) throw new Error("HTTP " + res.status); + const blob = await res.blob(); + const dataUrl = await blobToDataUrl(blob); + if (node._tpPoseUrl !== url) return; // 期间又切了别的,丢弃 + const img = await loadImage(dataUrl); + if (node._tpPoseUrl !== url) return; + node._tpPoseImg = img; + node._tpPoseFlip = flipOn(node); + node._tpPoseErr = null; + node._tpPoseFromNet = true; + // 只有参数没在旁边被改过才内嵌,避免把 A 的图写进 B 的设置 + if (embedKey(node) === keyAtRequest) storeEmbed(node, dataUrl); + fitNode(node, img); + node.setDirtyCanvas(true, true); + // litegraph 0.4 里单个节点的 dirty 标记不一定能把画布叫醒, + // 图换了却停在旧画面,看着就是「点了没反应」。图是重点,再踹一脚整图。 + app.graph?.setDirtyCanvas?.(true, true); + app.canvas?.setDirty?.(true, true); + } catch (e) { + if (node._tpPoseUrl !== url) return; + // 失败时解锁,否则这个参数组合会被永久判成「已请求过」, + // 后端恢复后切回来也不重试。 + node._tpPoseUrl = null; + node._tpPoseFromNet = false; + const emb = node.properties && node.properties.tp_pose; + const curKey = embedKey(node); + // 只有内嵌的那张「正好就是当前选的」才能顶上去。 + // 以前不管三七二十一都拿内嵌图兜底,结果切到别的姿势时画面还是老图, + // 用户看到的是「点了没反应」,还把真正的取图失败藏得干干净净。 + if (emb && emb.img && emb.key === curKey) { + try { + const img = await loadImage(emb.img); + node._tpPoseImg = img; + node._tpPoseFlip = flipOn(node); + node._tpPoseErr = null; + fitNode(node, img); + node.setDirtyCanvas(true, true); + return; + } catch (e2) { + /* 解码也失败,走下面统一报错 */ + } + } + node._tpPoseImg = null; + node._tpPoseErr = emb && emb.img ? "这张没取到(素材库缺失)" : "素材库缺失"; + node.setDirtyCanvas(true, true); + app.graph?.setDirtyCanvas?.(true, true); + console.warn("[PoseReference] 取图失败:", url, e && e.message); + } + })(); +} + +function schedulePreview(node) { + if (node._tpPoseTimer) clearTimeout(node._tpPoseTimer); + node._tpPoseTimer = setTimeout(() => { + node._tpPoseTimer = null; + try { + refreshPreview(node); + } catch (e) { + console.warn("[PoseReference] 预览刷新失败", e); + } + }, DEBOUNCE_MS); +} + +/** + * 参数自检:当前六个下拉的取值,和「上一次送去取图的那套参数」不一致就重取。 + * + * 这个检查放在绘制里每帧跑,是刻意不依赖 widget.callback 的。实测(1.57 / + * litegraph 0.4)下拉选完只有 callback 一条通知路径,而 callback 可能被第三方 + * 扩展重写、被旧版本闭包吃掉,或者干脆不触发 —— 一旦漏掉,节点就会永远停在 + * 上一张图上,看起来像「切换不了,得重启」。绘制路径只要画布在动就一定跑, + * 拿它当兜底,任何漏通知的情况都能自己补上。 + */ +function watchParams(node) { + const key = embedKey(node); + if (node._tpPoseKey === key) return; + node._tpPoseKey = key; + schedulePreview(node); +} + +function drawPreview(node, ctx) { + watchParams(node); // 先自检:参数变了但没人通知,这里补一次 + const top = widgetsBottom(node); + const x0 = PAD; + const y0 = top + 6; + const w0 = node.size[0] - PAD * 2; + const h0 = node.size[1] - y0 - PAD; + if (w0 < 40 || h0 < 30) return; + + ctx.save(); + try { + // 底衬:避免透明网格/深色背景上白线稿看不清边界 + ctx.fillStyle = "#1b1b1b"; + ctx.fillRect(x0, y0, w0, h0); + + const img = node._tpPoseImg; + if (!img) { + ctx.fillStyle = "#7a7a7a"; + ctx.font = "12px sans-serif"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText(node._tpPoseErr || "加载中…", x0 + w0 / 2, y0 + h0 / 2); + return; + } + + const scale = Math.min(w0 / img.width, h0 / img.height); + const dw = img.width * scale; + const dh = img.height * scale; + const dx = x0 + (w0 - dw) / 2; + const dy = y0 + (h0 - dh) / 2; + ctx.imageSmoothingEnabled = true; + ctx.imageSmoothingQuality = "high"; + if (node._tpPoseFlip) { + // 缩略图取的是素材原文件(未翻转),翻转在这里镜像 + ctx.save(); + try { + ctx.translate(dx + dw, dy); + ctx.scale(-1, 1); + ctx.drawImage(img, 0, 0, dw, dh); + } finally { + ctx.restore(); + } + } else { + ctx.drawImage(img, dx, dy, dw, dh); + } + + ctx.strokeStyle = "rgba(255,255,255,0.14)"; + ctx.lineWidth = 1; + ctx.strokeRect(dx + 0.5, dy + 0.5, dw - 1, dh - 1); + } finally { + ctx.restore(); + } +} + +function hookCallback(w, node) { + if (!w || w._tpPoseHooked) return; + w._tpPoseHooked = true; + const orig = w.callback; + w.callback = function (...args) { + const ret = orig ? orig.apply(this, args) : undefined; + // 联动和取图分开 try:联动抛异常不能把取图一起带走, + // 否则下拉值变了、图却停在上一张。 + try { + // 必须每次现取 node._tpPoseSync:素材库热更新会换上新树的闭包, + // 如果在这里闭包捕获旧 sync,下拉永远按旧树联动 —— 新增的类别/组 + // 切不过去,只有重启(重新挂钩)才恢复。 + if (typeof node._tpPoseSync === "function") node._tpPoseSync(false); + } catch (e) { + console.warn("[PoseReference] 联动失败", e); + } + try { + schedulePreview(node); + } catch (e) { + console.warn("[PoseReference] 预览排队失败", e); + } + return ret; + }; +} + +function attach(node, tree) { + const sync = buildSync(node, tree); + if (sync) node._tpPoseSync = sync; + // 六个下拉都要挂:前三个带联动,后三个只触发换图 + WATCHED.forEach((name) => { + hookCallback(widget(node, name), node); + }); + if (sync) sync(true); + showEmbedded(node); + schedulePreview(node); +} + +// ---------------- 素材库热更新 ---------------- +// 素材分两层:插件自带 pose_assets/(随插件分发、只放非敏感大类)+ 本机外挂 +// (D:\pose 或 TP_POSE_ROOT,敏感/自建素材放这里)。往本机目录里丢新姿势后, +// 后端指纹会变,这里自动把下拉重建一遍 —— 不用刷新浏览器。 + +function poseNodes() { + return (app.graph?._nodes || []).filter((n) => n.type === NODE_NAME); +} + +async function refreshAll(reason) { + const nodes = poseNodes(); + if (!nodes.length) return 0; + const data = await fetchTree(true); + if (!data || !data.tree) return 0; + for (const n of nodes) { + try { + attach(n, data.tree); // 换上新的素材树 + // 新树里可能没有当前选中的组/姿势了(素材被删或改名),这里校正一次, + // 否则下拉会显示一个不存在的值、点别的又对不上。 + if (typeof n._tpPoseSync === "function") n._tpPoseSync(false); + // 素材可能被同名替换了内容,URL 却一模一样,不清掉就永远不会重取。 + n._tpPoseUrl = null; + n._tpPoseFromNet = false; + schedulePreview(n); + } catch (e) { + console.warn("[PoseReference] 重建下拉失败", e); + } + } + console.log(`[PoseReference] 素材库已刷新(${reason}):${nodes.length} 个节点`); + return nodes.length; +} + +let lastStamp = null; +let pollStarted = false; + +function startStampPoll() { + if (pollStarted) return; + pollStarted = true; + + const tick = async () => { + if (!poseNodes().length) return; // 画布上没有本节点就不打扰后端 + try { + const r = await api.fetchApi(STAMP_API); + if (!r.ok) return; + const d = await r.json(); + if (!d || !d.stamp) return; + if (lastStamp === null) { + lastStamp = d.stamp; // 首次只记基准,不触发重建 + return; + } + if (d.stamp === lastStamp) return; + lastStamp = d.stamp; + await refreshAll("指纹变化"); + } catch (e) { + /* 网络抖动忽略,下一轮再说 */ + } + }; + + // 立刻记一次基准(和画布上有没有节点无关),不能等第一个 interval —— + // 否则「打开页面后 15 秒内放进去的素材」会被当成基准吞掉,指纹再也不变,永远不刷新。 + (async () => { + try { + const r = await api.fetchApi(STAMP_API); + if (!r.ok) return; + const d = await r.json(); + if (d && d.stamp) lastStamp = d.stamp; + } catch (e) { + /* 拿不到就退化成 tick 里首次记录基准 */ + } + })(); + setInterval(tick, POLL_MS); +} + +/** + * 摘掉 ComfyUI 1.57 自动挂的官方画布预览 widget。 + * + * 前端 `useNodeCanvasImagePreview` 的规则很简单:只要节点有 `node.imgs`, + * 就 `addCustomWidget("$$canvas-image-preview")`。这个 widget 会占掉节点底部 + * 一行,并把执行输出的那张 PNG 画在节点下部 —— 正好压在我们的预览区上面。 + * + * 于是「生图一开始」就等于给节点盖了一张定死的图:下拉照点、我们的图在背面 + * 其实也换了,但画面上永远停着那张执行结果,看起来就是再也切不动。 + * 本节点的图完全由 onDrawForeground 自己画,不需要官方这一份,直接摘掉; + * 同时清空 `node.imgs`,否则它下次判断又会把 widget 挂回来。 + */ +function stripOfficialPreview(node) { + if (!node || !node.widgets) return false; + let hit = false; + for (let i = node.widgets.length - 1; i >= 0; i--) { + const w = node.widgets[i]; + if (String((w && w.name) || "") !== PREVIEW_WIDGET) continue; + if (typeof w.onRemove === "function") { + try { + w.onRemove(); + } catch (e) { + /* 清理回调失败也要把 widget 摘掉 */ + } + } + node.widgets.splice(i, 1); + hit = true; + } + if (hit) { + node.imgs = null; + node.setDirtyCanvas(true, true); + } + return hit; +} + +/** + * 参数巡检:300ms 扫一遍画布上的本节点,参数变了就补一次取图。 + * + * 绘制里已经有一道同样的检查,但节点被折叠、画布静止不重绘时绘制不一定会跑。 + * 这里只读六个 widget 的 value 拼个字符串,画布上没有本节点时直接返回, + * 开销可以忽略,换来的是「不管通知从哪条路径丢了,图都能自己跟上」。 + * + * 顺便每轮摘一次官方预览 widget(见 stripOfficialPreview)。 + */ +function startParamWatch() { + setInterval(() => { + for (const n of poseNodes()) { + try { + stripOfficialPreview(n); + watchParams(n); + } catch (e) { + /* 单个节点异常不能拖垮整轮巡检 */ + } + } + }, 300); +} + +// 画布右键菜单「刷新姿势素材库」通过这个全局调用(canvas_menu.js 里引用) +window.__tpRefreshPoses = () => refreshAll("手动"); + +/** + * 排查用:在浏览器控制台敲 __tpPoseDiag(),打印画布上每个本节点的 + * 选项值 / 已加载图 / 上次请求的 URL / 错误信息。出问题时一眼看出卡在哪一步。 + */ +window.__tpPoseDiag = () => { + const rows = poseNodes().map((n) => ({ + 选中: WATCHED.map((k) => val(n, k, "")).join(" / "), + 上次请求: decodeURIComponent((n._tpPoseUrl || "").split("?")[1] || "(无)"), + 已加载图: n._tpPoseImg ? `${n._tpPoseImg.naturalWidth}x${n._tpPoseImg.naturalHeight}` : "(无)", + 来自网络: !!n._tpPoseFromNet, + 错误: n._tpPoseErr || "", + })); + console.table(rows); + return rows; +}; + +app.registerExtension({ + name: "TogglePass.PoseReference", + + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== NODE_NAME) return; + + // ---- 节点内缩略图(自绘,链式调用宿主钩子)---- + const origDraw = nodeType.prototype.onDrawForeground; + nodeType.prototype.onDrawForeground = function (ctx) { + const ret = origDraw ? origDraw.apply(this, arguments) : undefined; + if (ctx) { + try { + drawPreview(this, ctx); + } catch (e) { + console.warn("[PoseReference] 绘制失败", e); + } + } + return ret; + }; + + // ---- 创建节点:拉目录树、挂联动、取首张预览 ---- + const origCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function () { + const ret = origCreated ? origCreated.apply(this, arguments) : undefined; + const node = this; + + // size 是类数组对象,整块赋值会被忽略,必须逐下标写 + if (node.size && node.size[0] < 320) { + node.size[0] = 340; + } + + fetchTree().then((data) => { + if (!data || !data.tree) { + schedulePreview(node); // 树拉不到也先把图取上 + return; + } + attach(node, data.tree); + }); + return ret; + }; + + // ---- 加载工作流:选项可能和存的不一致,刷新一次但保留原值 ---- + const origConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const ret = origConfigure ? origConfigure.apply(this, arguments) : undefined; + const node = this; + // 换了工作流:上一张的 URL / 来源标记作废,先把内嵌图顶上去再拉本机的 + node._tpPoseUrl = null; + node._tpPoseFromNet = false; + node._tpPoseKey = null; // 让绘制自检也认为「参数刚变过」 + showEmbedded(node); + fetchTree().then((data) => { + if (!data || !data.tree) { + schedulePreview(node); + return; + } + attach(node, data.tree); + }); + return ret; + }; + + // ---- 执行完:立刻摘掉官方预览 widget,别让它盖住预览区 ---- + // 这是「生图一开始就再也切不动」的元凶:节点返回 ui.images 后前端会给它 + // 挂一个固定显示执行结果的预览 widget,正好压在预览区上。 + const origExecuted = nodeType.prototype.onExecuted; + nodeType.prototype.onExecuted = function () { + const ret = origExecuted ? origExecuted.apply(this, arguments) : undefined; + try { + this.imgs = null; // 官方预览靠它判断要不要挂 + stripOfficialPreview(this); + schedulePreview(this); // 执行结束是「该重画」的信号,顺手对齐一次 + } catch (e) { + console.warn("[PoseReference] 清理官方预览失败", e); + } + return ret; + }; + }, + + setup() { + // 前端就绪后开始轮询素材指纹(每 POLL_MS 一次,画布没本节点时直接跳过) + startStampPoll(); + // 参数巡检:回调漏通知时靠它把图补上 + startParamWatch(); + }, +}); diff --git a/js/sampler_widgets.js b/js/sampler_widgets.js index 3374329..c0ba95b 100644 --- a/js/sampler_widgets.js +++ b/js/sampler_widgets.js @@ -13,14 +13,47 @@ */ import { app } from "../../scripts/app.js"; +import { api } from "../../scripts/api.js"; const NODE_NAME = "ToggleSampler"; const SCHEME_AUTO = "自动(按步数 + 调度器)"; const SCHEME_CUSTOM = "自定义表"; -/* 新建节点时的初始宽度(高度用 computeSize 的默认值,不加高)。 - 仅在 onNodeCreated 生效,不影响已保存的工作流尺寸。 */ -const INITIAL_WIDTH = 300; +/* 节点宽度。预设用的是完整模型名,最长一条实测 240px("Qwen-Image Layered(9步·CFG 2.5)"), + 加上左侧 47px 的「⚡预设」和两侧留白,340 就会开始重叠 ⇒ 取 350。 + + ⚠️ 宽度不够时 combo 的值是右对齐画的,会把左边的标题整个盖住, + 看起来就成了「一个没有名字的下拉框」—— 这正是之前被误认成"重复控件"的原因。 + ⇒ 老工作流里存的是 300/340,加载时若不够就补到 PRESET_FIT_WIDTH(只加不缩)。 */ +const INITIAL_WIDTH = 350; +const PRESET_FIT_WIDTH = 350; + +/* node.size 是"类数组对象"(Array.isArray 恒为 false),取值必须逐下标。 */ +function sizeAt(node, i) { + const s = node && node.size; + if (!s) return 0; + const v = typeof s[i] === "number" ? s[i] : s[String(i)]; + return typeof v === "number" ? v : 0; +} + +/** 节点太窄就把标题挤没了,补到能放下最长预设名的宽度。只加宽,不缩窄。 */ +function ensureWidthForPreset(node) { + const w = sizeAt(node, 0); + if (!w || w >= PRESET_FIT_WIDTH) return false; + try { + node.size[0] = PRESET_FIT_WIDTH; // 逐下标赋值,整体赋值会被类数组吞掉 + node.setDirtyCanvas?.(true, true); + app.canvas?.setDirty?.(true, true); + return true; + } catch (e) { + return false; + } +} + +/* 控件上显示的名字。**内部 name 一律不改** —— widgets_values_named 和 /prompt 的 + inputs 都按 name 走,改 name 等于让所有已存工作流失联。改 label 才是安全的。 */ +const LABEL_SCHEME = "Sigma 曲线"; // 原名「采样方案」:它只管噪声曲线,容易和「预设」混 +const LABEL_PRESET = "⚡预设"; // 原名「模型预设」:四个字太长,窄节点上会没地方显示 /* 各预置表对应的真实步数(= 表点数 - 1)。 与 sampler.py 的 SIGMA_PRESETS 保持一致;只用于把「步数」显示得跟实际一致, @@ -32,9 +65,197 @@ const PRESET_STEPS = { }; const W_SCHEME = "采样方案"; +const W_SAMPLER = "采样器"; const W_SCHEDULER = "调度器"; const W_STEPS = "步数"; +const W_CFG = "CFG"; const W_CUSTOM = "自定义Sigma表"; +const W_MODEL_PRESET = "模型预设"; + +/* ==================== 模型预设 ==================== + * + * 预设表只存在后端(sampler.py 的 MODEL_PRESETS),这里通过 + * /toggle_pass/sampler_presets 拉回来,**不在 JS 里再抄一份**, + * 免得以后加模型时两边对不上。 + * + * 语义是「一键填充」而不是「持续锁定」:选完预设后,只要用户手动改了 + * 采样方案/采样器/调度器/步数/CFG 中的任何一个,下拉就自己退回「手动」—— + * 这样控件显示的永远是真实状态,不会出现「写着 Qwen 预设、其实在跑 40 步」。 + */ + +const PRESET_NONE = "手动(不套用)"; +const PRESET_API = "/toggle_pass/sampler_presets"; +// 预设会写到的五个参数(降噪和随机种不归预设管,改它们不该影响预设显示) +const PRESET_KEYS = [W_SCHEME, W_SAMPLER, W_SCHEDULER, W_STEPS, W_CFG]; + +/* 「模型预设」挪到最前面之前的控件顺序(与 sampler.py 的 LEGACY_WIDGET_ORDER 同步)。 + 1.57 的存档会额外写一份 widgets_values_named(按名字恢复,位置无关),但更早的 + 纯位置存档只能按顺序对号;把这张表交给 nodeData.fallbackWidgetsValuesNames, + 老存档就会按名字重新落到正确控件上,而不是整体错一位。 */ +const LEGACY_WIDGET_ORDER = [ + W_SCHEME, W_SAMPLER, W_SCHEDULER, W_STEPS, W_CFG, "降噪", + "噪波随机种", "control_after_generate", W_CUSTOM, W_MODEL_PRESET, +]; + +/* 旧预设名 → 当前预设名。权威副本在 sampler.py 的 PRESET_ALIASES,由 + /toggle_pass/sampler_presets 下发;这里初始只放一份兜底,fetch 成功后会被覆盖。 + + 为什么需要兜底:加载工作流(onConfigure)可能发生在接口返回之前,那一刻 + 如果表是空的,旧短名就翻译不出来,下拉会停在 `Layered · 9步` 这种已不存在的值上。 + fetch 完成后 retroFixPresets() 会对画布上已有节点再补一次。 */ +const PRESET_ALIASES = { + "Qwen 2.1 · 25步": "Qwen-Image 2.1(25步)", + "Qwen 2.1 turbo · 8步表": "Qwen-Image 2.1 turbo(8步·固定表)", + "Krea2 turbo · 8步": "Krea 2 turbo(8步)", + "Krea2 细节 · 12步": "Krea 2 turbo・细节增强(12步)", + "FLUX2 klein · 4步": "FLUX.2 klein(4步·beta)", + "FLUX2 高清 · 4步": "FLUX.2 klein・高清修复(4步)", + "Z-Image turbo · 8步": "Z-Image turbo(8步)", + "Layered · 9步": "Qwen-Image Layered(9步·CFG2.5)", + "2511 AIO · 4步": "Qwen-Image Edit 2511 AIO(4步)", +}; + +let presetPromise = null; + +/** 别名到齐后,把画布上已经加载完的节点再修一遍(加载早于接口返回的情况)。 */ +function retroFixPresets() { + const nodes = (app.graph && app.graph._nodes) || []; + for (const n of nodes) { + if (!n || n.type !== NODE_NAME) continue; + try { + if (fixPresetValue(n)) n.setDirtyCanvas?.(true, true); + } catch (e) { + /* 单个节点异常不影响其余 */ + } + } +} + +function fetchPresets() { + if (!presetPromise) { + presetPromise = api + .fetchApi(PRESET_API) + .then((r) => (r.ok ? r.json() : null)) + .then((d) => { + // 失败不要缓存 null,否则这个页面里永远拿不到预设 + if (!d || !d.presets) { + presetPromise = null; + return d; + } + if (d.aliases) { + Object.assign(PRESET_ALIASES, d.aliases); + retroFixPresets(); + } + return d; + }) + .catch(() => { + presetPromise = null; + return null; + }); + } + return presetPromise; +} + +const findW = (node, name) => node.widgets && node.widgets.find((w) => w.name === name); + +/** 只在值真的不同、且该值确实在下拉可选项里时才写 —— 免得把 widget 写成一个非法值。 */ +function setValue(w, v) { + if (!w || v === undefined || v === null) return false; + const vals = w.options && w.options.values; + if (Array.isArray(vals) && !vals.includes(v)) { + console.warn("[Toggle-Pass] 预设值不在可选项里,跳过:", w.name, v); + return false; + } + if (w.value === v) return false; + w.value = v; // 直接赋值不触发 callback,正是我们要的 + return true; +} + +/** + * 把某个预设套到节点上。 + * + * 顺序很关键:先换「采样方案」并立刻跑一次 applySchemeState —— 因为调度器/步数 + * 会随方案被解锁或锁死(锁死时 options.min=max=当前值,这时再写就写不进去了)。 + * 解锁之后再填其余四项,最后再跑一次让锁定状态和步数显示对齐。 + */ +async function applyPreset(node, name) { + if (!name || name === PRESET_NONE) return; + if (!node.__tpPresets) { + const d = await fetchPresets(); + if (d && d.presets) node.__tpPresets = d.presets; + } + const conf = node.__tpPresets && node.__tpPresets[name]; + if (!conf) { + console.warn("[Toggle-Pass] 找不到预设:", name); + return; + } + if (node.__tpApplying) return; + node.__tpApplying = true; + try { + setValue(findW(node, W_SCHEME), conf.scheme); + applySchemeState(node); + setValue(findW(node, W_SAMPLER), conf.sampler); + setValue(findW(node, W_SCHEDULER), conf.scheduler); + setValue(findW(node, W_STEPS), conf.steps); + setValue(findW(node, W_CFG), conf.cfg); + } finally { + node.__tpApplying = false; + } + applySchemeState(node); + node.setDirtyCanvas(true, true); + if (node.graph && node.graph.setDirtyCanvas) node.graph.setDirtyCanvas(true, false); +} + +/** 用户手改了预设管辖的参数 —— 把下拉退回「手动」,别让它说谎。 */ +function markManual(node) { + if (node.__tpApplying) return; // 预设自己填的值不算 + const w = findW(node, W_MODEL_PRESET); + if (!w || w.value === PRESET_NONE) return; + w.value = PRESET_NONE; + node.setDirtyCanvas(true, true); +} + +/** + * 这个值是不是「采样方案」的取值? + * + * 用来识别一种错位:老工作流没有 widgets_values_named,只能按位置恢复,而 + * 「模型预设」被挪到了第一位 —— 于是它拿到的其实是老位置 0 的采样方案值。 + * 采样方案和模型预设的取值集合完全不重叠,所以这里可以可靠地区分。 + */ +function looksLikeScheme(v) { + if (typeof v !== "string") return false; + return v === SCHEME_AUTO || v === SCHEME_CUSTOM + || Object.prototype.hasOwnProperty.call(PRESET_STEPS, v); +} + +/** + * 把「模型预设」的值修成合法的: + * · 旧长名 -> 新短名(改过名的老存档) + * · 拿到采样方案的值 -> 退回「手动」(纯位置存档的错位) + * 返回是否改动过。 + */ +function fixPresetValue(node) { + const w = findW(node, W_MODEL_PRESET); + if (!w || typeof w.value !== "string") return false; + if (Object.prototype.hasOwnProperty.call(PRESET_ALIASES, w.value)) { + w.value = PRESET_ALIASES[w.value]; + return true; + } + if (looksLikeScheme(w.value)) { + // 位置错位:这一格拿到的是「采样方案」的值,退回手动 + w.value = PRESET_NONE; + return true; + } + // 剩下的可能是个已废弃的旧名:别名表没覆盖时留在控件上会显示成一个不存在的值, + // 退回「手动」更诚实 —— 真正的采样参数还在,只是不再声称套着某个预设。 + const vals = w.options && w.options.values; + if (Array.isArray(vals) && vals.length && !vals.includes(w.value)) { + console.warn("[Toggle-Pass] 未知预设名,已退回手动:", w.value); + w.value = PRESET_NONE; + return true; + } + return false; +} + /** 从手填的 sigma 表里数步数(N 个点 = N-1 步;解析不出来就返回 0) */ function countSigmaSteps(text) { @@ -172,6 +393,12 @@ app.registerExtension({ async beforeRegisterNodeDef(nodeType, nodeData) { if (nodeData.name !== NODE_NAME) return; + /* 老存档兜底:1.57 之前的存档只有按位置的 widgets_values。 + 「模型预设」从末尾挪到了第一位,纯位置恢复会整体错一位 —— 把老顺序 + 交给前端,它就会按 widget 名字重新对号。(新版存档有 widgets_values_named, + 本来就不受位置影响,这里只是补上更早的那批。) */ + nodeData.fallbackWidgetsValuesNames = LEGACY_WIDGET_ORDER; + // ---- 新建节点 ---- const onNodeCreated = nodeType.prototype.onNodeCreated; nodeType.prototype.onNodeCreated = function () { @@ -181,14 +408,61 @@ app.registerExtension({ const wScheme = node.widgets && node.widgets.find((w) => w.name === W_SCHEME); if (!wScheme) return r; + wScheme.label = LABEL_SCHEME; + const wPresetInit = node.widgets.find((w) => w.name === W_MODEL_PRESET); + if (wPresetInit) wPresetInit.label = LABEL_PRESET; + // 拦截方案切换(用户点下拉时走 callback) const origCb = wScheme.callback; wScheme.callback = function () { const out = origCb ? origCb.apply(this, arguments) : undefined; - applySchemeState(node); + try { + applySchemeState(node); + markManual(node); + } catch (e) { + console.warn("[Toggle-Pass] 采样方案联动失败:", e); + } return out; }; + // 预设表提前拉好,等用户点下拉时基本已经到位 + fetchPresets().then((d) => { + if (d && d.presets) node.__tpPresets = d.presets; + }); + + // 「模型预设」:选中就把五项参数一次性填好 + const wPreset = node.widgets.find((w) => w.name === W_MODEL_PRESET); + if (wPreset) { + const origPresetCb = wPreset.callback; + wPreset.callback = function () { + const out = origPresetCb ? origPresetCb.apply(this, arguments) : undefined; + try { + applyPreset(node, wPreset.value); + } catch (e) { + console.warn("[Toggle-Pass] 套用模型预设失败:", e); + } + return out; + }; + } + + // 其余四个参数:用户一动就说明偏离预设了,把下拉退回「手动」 + PRESET_KEYS.forEach((name) => { + if (name === W_SCHEME) return; // 方案上面已经包过 + const w = node.widgets.find((x) => x.name === name); + if (!w || w.__tpManualHooked) return; + w.__tpManualHooked = true; + const orig = w.callback; + w.callback = function () { + const out = orig ? orig.apply(this, arguments) : undefined; + try { + markManual(node); + } catch (e) { + /* 标记失败不影响参数本身 */ + } + return out; + }; + }); + applySchemeState(node); /* 初始尺寸:只加宽,高度沿用 computeSize 算出的默认值。 @@ -206,9 +480,21 @@ app.registerExtension({ nodeType.prototype.onConfigure = function () { const r = onConfigure ? onConfigure.apply(this, arguments) : undefined; try { + // label 不是存档内容,但某些路径会重建 widget,这里补一遍最稳 + const ws = findW(this, W_SCHEME); + if (ws) ws.label = LABEL_SCHEME; + const wp = findW(this, W_MODEL_PRESET); + if (wp) wp.label = LABEL_PRESET; + + // 先把预设值修成合法的(旧长名 / 位置错位),再对方案做联动 + fixPresetValue(this); + this.__tpPrevScheme = undefined; // 加载时不还原历史步数,按存档来 applySchemeState(this); this.__tpPrevScheme = this.widgets?.find((w) => w.name === W_SCHEME)?.value; + + // 老存档里节点可能只有 300 宽,全名会把「⚡预设」压在下面看不见 + ensureWidthForPreset(this); } catch (e) { console.warn("[Toggle-Pass] 采样器参数联动失败:", e); } diff --git a/multi_ref_encode.py b/multi_ref_encode.py index fbab937..6b63e57 100644 --- a/multi_ref_encode.py +++ b/multi_ref_encode.py @@ -8,6 +8,7 @@ Version: 3.0 - Multiple node classes (3/5/10 images) + Custom output size for im import math import torch +import torch.nn.functional as F import comfy.utils import node_helpers import comfy.model_management @@ -154,6 +155,10 @@ KREA2_VISION_TOKEN = "<|vision_start|><|image_pad|><|vision_end|>" def _krea2_ref_preprocess(samples, vae): """Krea2 参考图预处理,返回 (ref_latent, vl_image)。 + ⚠️ 2026-11-05 起三个编码节点的 Krea2 分支都改用 `_krea2_fit_ref`(参考图必须先 + fit 到出图网格,否则 ref latent 与采样起点的 h/w 不同 ⇒ 线稿/边缘渗进画面), + 本函数已无调用者,保留作参考(它编码的是「约 1 MP、保持原比例」的 latent)。 + samples : [B, C, H, W](已 movedim(-1, 1)) · ref_latent —— VAE 编码,缩到约 1024x1024 并对齐 8 的倍数,只吃 RGB (qwen_image_vae 输入 3 通道,Krea2 不吃 alpha) @@ -187,6 +192,35 @@ def _krea2_ref_preprocess(samples, vae): return ref_latent, vl_image +def _krea2_fit_ref(samples, out_w, out_h, mode="参考图保比例"): + """把参考图 fit 到 Krea2 采样的**空间网格**(= krea2_edit LoRA 的训练几何)。 + + 原生 krea2 forward 给每张参考图用它**自己的网格**造位置编码: + ref = (frame=i, h=0..h_ref-1, w=0..w_ref-1) + target = (frame=0, h=0..h_tgt-1, w=0..w_tgt-1) + ref 与 target 的空间尺寸不一致时,模型把它当成「另一块画布」——坐标对不上, + 实测症状是参考图的线条被贴进成图(脸上出现轮廓线)。krea2_edit 训练时源图是 + 先 fit 到 target 网格再 VAE 编码的。这里照做:ref latent 与采样起点在 h/w 上 + 逐维相等,位置编码只差 frame 轴。 + + mode 沿用节点上的「尺寸适配」: + 参考图保比例 → 中心裁到出图宽高比,再缩到出图像素尺寸(默认,几乎无损) + 参考图裁剪 → 直接中心裁到出图尺寸 + 参考图拉伸 → 直接缩到出图尺寸(会变形) + """ + tw = max(8, int(round(out_w / 8.0)) * 8) + th = max(8, int(round(out_h / 8.0)) * 8) + if mode != "参考图拉伸": + samples = _center_crop(samples, tw / th) + if (samples.shape[3], samples.shape[2]) == (tw, th): + return samples + # ★★ antialias 不能省:缩小一张锐利线稿时,无 antialias 的双三次会产生振铃/摩尔纹, + # 黑白边界的潜空间特征被放大,模型会照着把线条画进成图(实测:脸上出现轮廓线)。 + # krea2Edit 的像素路径同样是 bicubic + antialias。 + return F.interpolate(samples.float(), size=(th, tw), mode="bicubic", + antialias=True).to(samples.dtype) + + def _krea2_empty_latent(width, height): """Krea2 采样起点:全零 16 通道 / 8x latent。 @@ -205,6 +239,97 @@ def _krea2_align8(v): return max(8, int(round(v / 8.0)) * 8) +def _empty_negative(clip): + """真正的空文本负条件(不带参考图)。 + + ⚠️ 不要用 `ConditioningZeroOut` 把正面条件清零当负面: + CFG == 1.0 时负面根本不参与计算,看着没问题; + 一旦 CFG > 1,负面真的参与计算了,清零的张量会让整张图花屏(绿紫斑块)。 + 实测 Qwen 2.1 fp8 / int8 20 步 CFG 2.5 都崩,换成本函数这种空文本就正常。 + """ + tokens = clip.tokenize("") + return clip.encode_from_tokens_scheduled(tokens) + + +# 模型类型改名兼容:老工作流里存的是旧字面量,后端收到旧值时归一化到新名字。 +# 前端 js/multi_ref_encode.js 里有一份同样的表(加载时直接把 widget 值改掉), +# 这里再兜一层是为了「手工改 JSON / 第三方节点转存」也能走对分支。 +_MODEL_TYPE_ALIASES = { + "SD / SDXL": "SD / SDXL / Z-Image", + "SD/SDXL": "SD / SDXL / Z-Image", + "SD/SDXL/z-image": "SD / SDXL / Z-Image", + "SDXL": "SD / SDXL / Z-Image", + "SD 1.5": "SD / SDXL / Z-Image", + "Z-Image": "SD / SDXL / Z-Image", + "z-image": "SD / SDXL / Z-Image", + "ZImage": "SD / SDXL / Z-Image", +} + + +def _norm_model_type(v): + """把旧/别名写法的模型类型归一成当前下拉里的正式值。""" + if not isinstance(v, str): + return v + return _MODEL_TYPE_ALIASES.get(v.strip(), v) + + +def _te_class_name(clip): + """取文本编码器的实际类名(如 ZImageTEModel_)。取不到返回 None。 + + ⚠️ 必须显式判 None:`type(None).__name__` 是字符串 "NoneType"(truthy), + 直接拿去做 `in` 判断会误命中。 + """ + try: + csm = getattr(clip, "cond_stage_model", None) + if csm is None: + return None + return type(csm).__name__ + except Exception: + return None + + +# 底座没有 in-context 参考图通路的模型:一旦接了参考图,出图必然异常。 +# 只登记**实测确认过**的,不按型号名字猜。 +_NO_REF_CAPABILITY = { + "ZImage": ( + "Z-Image(Lumina2 / NextDiT 系)是纯文生图模型,训练时没有参考图 token;" + "官方 5 个 z_image 模板里也没有任何「参考图编辑」接法" + "(唯一带图输入的是 fun_union_controlnet,走 ControlNet,机制完全不同)。" + "接上 image1 后参考图 token 进不了模型(缺配套的 reference_latents_text_embeds)," + "实测出图是满屏方块马赛克。\n" + " → 纯文生图:断开 image1 即可,模型类型选「SD / SDXL / Z-Image」" + "(空 latent 会自动补到 16 通道);\n" + " → 要「看图改图」:换 Qwen-Image 2.1 / Krea2 / Flux2 系;\n" + " → 要 Z-Image 的图生图:用 VAE Encode + 采样器 denoise < 1 的普通 img2img。" + ), +} + + +_WARNED_NO_REF = set() + + +def _warn_no_ref_capability(clip, n_refs, tag="Ref Image Encode"): + """接了参考图、但底座不支持时打一条明确警告。只打印,不改变任何行为。 + + 同一个(节点, 编码器类)只打一次:`Ref Independent` 是按图循环调用的, + 不去重会刷满日志。 + """ + if n_refs <= 0: + return + te = _te_class_name(clip) or "" + for key, msg in _NO_REF_CAPABILITY.items(): + if key in te: + if (tag, te) in _WARNED_NO_REF: + return + _WARNED_NO_REF.add((tag, te)) + print( + f"\n[Toggle-Pass][{tag}] ⚠️ 文本编码器 = {te},已接入 {n_refs} 张参考图," + f"但这个底座没有参考图通路。\n {msg}\n" + f" (本次仍按你的接线执行,以上仅为提示,不修改任何参数)\n" + ) + return + + class DynamicRefImageEncode: """ 动态 Ref Image Encode 节点,合并原 III/V/X 三个节点。 @@ -212,6 +337,20 @@ class DynamicRefImageEncode: 所有参考图共享同一个 prompt,输出 1 个 conditioning + 1 个 latent。 """ + DESCRIPTION = ( + "一个 prompt + 最多 10 张参考图,输出 CONDITIONING + LATENT + NEGATIVE。" + "第三个输出 negative 是空文本负条件,直接接采样器「负面条件」即可," + "CFG 调多高都不会花屏(别再用 ConditioningZeroOut 清零正面当负面)。" + "MOSS-Image 与 FIBO 2.0 的 latent 与 Flux2 完全同族(128 通道 / 16x,都用 flux2-vae)," + "「模型类型」请直接选 Flux2。若需要 MOSS 的 edit_format(必须与编辑 LoRA 的训练格式配对)" + "或 image_strength、FIBO 的 negative_prompt,请改用官方编码器 " + "TextEncodeMOSSImageEdit / TextEncodeFibo2。" + "—— Krea 2:「模型类型」选 Krea2 就能做编辑(保身份 / 换姿势),不需要 krea2Edit 插件。" + "参考图会先 fit 到出图网格再编码,并以 reference_latents_method=index 注入。" + "⚠️ 顺序是硬约定:最后一个参考图 = 主体(姿势线稿放 image1、原照片放 image2)," + "反过来会渲成线稿人偶。" + ) + @classmethod def INPUT_TYPES(cls): opt = {} @@ -236,7 +375,7 @@ class DynamicRefImageEncode: }, "optional": { **opt, - "模型类型": (["Flux2", "Qwen Layered", "Qwen Image 2.1", "SD / SDXL", "Krea2"], {"default": "Flux2"}), + "模型类型": (["Flux2", "Qwen Layered", "Qwen Image 2.1", "SD / SDXL / Z-Image", "Krea2"], {"default": "Flux2"}), "匹配原图尺寸": (["OFF", "ON"], {"default": "OFF"}), "输出宽度": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 8}), "输出高度": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 8}), @@ -251,8 +390,14 @@ class DynamicRefImageEncode: }, } - RETURN_TYPES = ("CONDITIONING", "LATENT") - RETURN_NAMES = ("conditioning", "latent") + # ↓ 第三个输出是后加的,追加在末尾 ⇒ 旧工作流的 0/1 号口不受影响 + # 输出顺序:conditioning / negative / latent + # ⚠️ 2026-11-06 调整:`negative` 从末尾挪到 `latent` 前面(纯粹为了节点上好看)。 + # ⇒ 索引变了(latent: 1 → 2,negative: 2 → 1),所有老工作流的连线索引都失效。 + # 前端 js/multi_ref_encode.js 的 `migrateOutputOrder()` 会在加载时按 + # outputs[i].name 判断布局并交换 1/2 号口的连线,两层都改才一致。 + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("conditioning", "negative", "latent") FUNCTION = "encode" CATEGORY = "Toggle-Pass" @@ -303,9 +448,18 @@ class DynamicRefImageEncode: device=comfy.model_management.intermediate_device(), ) elif 模型类型 == "Flux2": + # Flux2 latent:128 通道 / 16x 空间压缩(flux2-vae)。 + # MOSS-Image 与 FIBO 2.0 用的是同一套 latent,这两个模型请直接选 Flux2。 + # ⚠️ 这里原来写的是 4 通道(SD 的 latent)。只有「一张参考图都不接、 + # 纯把它当空 latent 源」时才会走到这个分支(接图时走 ref_latents[0]), + # 所以一直没暴露;接上 Flux2/moss/fibo 采样会直接通道不匹配。 + channels = 128 h = height // 16 w = width // 16 - latent = torch.zeros(1, 4, h, w) + latent = torch.zeros( + [1, channels, h, w], + device=comfy.model_management.intermediate_device(), + ) else: h = height // 8 w = width // 8 @@ -320,6 +474,7 @@ class DynamicRefImageEncode: n = max(1, min(10, int(num_images))) llama_template = self._get_system_prompt(instruction) + 模型类型 = _norm_model_type(模型类型) # 老存档兼容 is_krea2 = (模型类型 == "Krea2") # 出图分辨率:2.1 用官方 ResolutionSelector 同款(宽高比 + 百万像素 + 倍数); @@ -375,21 +530,18 @@ class DynamicRefImageEncode: vl_images.append(rgb) # 2.1 不加 "Picture N: " 文本前缀(Qwen3-VL 靠占位符,不靠文本) elif is_krea2: - # ---- Krea2:照抄官方 TextEncodeQwenImageEditPlus ---- - # 参考图 VAE 缩放到约 1024x1024、对齐 8 的倍数;VAE 只吃 RGB - # (qwen_image_vae 输入是 3 通道,Krea2 不吃 alpha) - total = 1024 * 1024 - scale_by = math.sqrt(total / current_total) - kw = max(8, round(samples.shape[3] * scale_by / 8.0) * 8) - kh = max(8, round(samples.shape[2] * scale_by / 8.0) * 8) - if (kw, kh) == (samples.shape[3], samples.shape[2]): - s = samples - else: - s = comfy.utils.common_upscale(samples, kw, kh, "area", "disabled") + # ---- Krea2:参考图先 fit 到「出图网格」再 VAE 编码 ---- + # 原生 krea2 forward 用每张参考图**自己的网格**造位置编码,尺寸与 target + # 不一致时模型把它当另一块画布 ⇒ 参考图的线条会被贴进成图(实测症状: + # 脸上出现轮廓线)。krea2_edit LoRA 训练时源图就是先 fit 到 target 网格 + # 再编码的,这里对齐它。VAE 只吃 RGB(qwen_image_vae 3 通道)。 + if first_tw is None: + first_tw, first_th = _krea2_align8(pixel_width), _krea2_align8(pixel_height) + s = _krea2_fit_ref(samples, first_tw, first_th, 尺寸适配) if vae is not None: ref_latents.append(vae.encode(s.movedim(1, -1)[:, :, :, :3])) - # 视觉塔:384x384 附近 + # 视觉塔:384x384 附近(语义 grounding,与潜空间几何无关) vl_total = 384 * 384 vl_scale = math.sqrt(vl_total / current_total) s_vl = comfy.utils.common_upscale( @@ -441,14 +593,23 @@ class DynamicRefImageEncode: tokens = clip.tokenize(full_prompt, images=vl_images, llama_template=llama_template) conditioning = clip.encode_from_tokens_scheduled(tokens) + _warn_no_ref_capability(clip, len(ref_latents), "Ref Image Encode") + if len(ref_latents) > 0: ref_vals = {"reference_latents": ref_latents} if is_krea2: # ⚠️ Krea2 的 default_ref_method 实测是 None,而模型侧写的是 # if ref_method is not None and ref_latents is not None and len(...) # ⇒ 不显式给方法时参考图会被**静默忽略**(不报错、只是没效果)。 - # 官方风格参考模板用 FluxKontextMultiReferenceLatentMethod 设成 index_timestep_zero。 - ref_vals["reference_latents_method"] = "index_timestep_zero" + # + # ★★ 方法必须用 "index",不能照官方模板用 "index_timestep_zero": + # "index_timestep_zero" 会让参考图 token 走 **t=0 的 adaLN 调制** + # (见 comfy/ldm/krea2/model.py SingleStreamBlock.forward 的 + # timestep_zero_index 分支),target 走当前 t —— 两套调制。 + # 而 krea2_edit LoRA(ai-toolkit predict_velocity_edit)训练时 + # 全序列共用**同一个 tvec**,正好对应原生的 "index"(不分裂 tvec)。 + # 实测:用 timestep_zero 时参考线稿会被"描"进成图(脸上出轮廓线)。 + ref_vals["reference_latents_method"] = "index" conditioning = node_helpers.conditioning_set_values( conditioning, ref_vals, @@ -486,7 +647,11 @@ class DynamicRefImageEncode: else: latent_out = self._make_empty_latent(模型类型, final_w, final_h, 图层数) - return (conditioning, latent_out) + # 第二/三个输出:空文本负条件 + 采样起点 latent。 + # 顺序见 RETURN_NAMES —— negative 在前、latent 在后。 + # CFG=1.0 时负面不参与计算(等价于原来的 ConditioningZeroOut), + # CFG>1 时它是唯一正确的接法。 + return (conditioning, _empty_negative(clip), latent_out) NODE_CLASS_MAPPINGS = { @@ -648,7 +813,7 @@ class OneImageMultiPrompt: "with the original input where appropriate." ), }), - "模型类型": (["Flux2", "Qwen Image 2.1", "SD / SDXL", "Krea2"], {"default": "Flux2"}), + "模型类型": (["Flux2", "Qwen Image 2.1", "SD / SDXL / Z-Image", "Krea2"], {"default": "Flux2"}), "匹配原图尺寸": (["OFF", "ON"], {"default": "OFF"}), "输出宽度": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 8}), "输出高度": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 8}), @@ -701,6 +866,7 @@ class OneImageMultiPrompt: n = max(2, min(8, int(prompt数量))) llama_template = self._get_system_prompt(instruction) + 模型类型 = _norm_model_type(模型类型) # 老存档兼容 is_21 = (模型类型 == "Qwen Image 2.1") is_krea2 = (模型类型 == "Krea2") @@ -750,7 +916,19 @@ class OneImageMultiPrompt: # ⚠️ 传了 llama_template 时 Qwen3VL tokenizer 不会自动插视觉占位符 # (只有用内置 llama_template_images 时才自动),必须自己写 # <|vision_start|><|image_pad|><|vision_end|>,否则参考图对模型完全不可见。 - ref_latent, vl_image = _krea2_ref_preprocess(samples, vae) + # ★ 参考图先 fit 到出图网格(krea2_edit 训练几何),理由见 _krea2_fit_ref。 + kw_, kh_ = (_krea2_align8(pixel_width), _krea2_align8(pixel_height)) + s = _krea2_fit_ref(samples, kw_, kh_, 尺寸适配) + ref_latent = vae.encode(s.movedim(1, -1)[:, :, :, :3]) if vae is not None else None + vl_total = 384 * 384 + vl_scale = math.sqrt(vl_total / current_total) + s_vl = comfy.utils.common_upscale( + samples, + max(8, round(samples.shape[3] * vl_scale)), + max(8, round(samples.shape[2] * vl_scale)), + "area", "disabled", + ) + vl_image = s_vl.movedim(1, -1) image_prompt = "Picture 1: " + KREA2_VISION_TOKEN else: # VAE 编码参考图(图生图用) @@ -789,12 +967,17 @@ class OneImageMultiPrompt: tokens = clip.tokenize(image_prompt + p, images=[vl_image], llama_template=llama_template) cond = clip.encode_from_tokens_scheduled(tokens) + _warn_no_ref_capability(clip, 0 if ref_latent is None else 1, "一图多Prompt") + if ref_latent is not None: ref_vals = {"reference_latents": [ref_latent]} if is_krea2: # Krea2 的 default_ref_method 是 None ⇒ 不显式给方法时参考图会被 - # 静默忽略(不报错、只是没效果)。官方风格模板用 index_timestep_zero。 - ref_vals["reference_latents_method"] = "index_timestep_zero" + # 静默忽略(不报错、只是没效果)。 + # ★★ 必须用 "index" 而非 "index_timestep_zero":后者给参考图单独 + # 一套 t=0 的 adaLN 调制,与 krea2_edit LoRA 的训练(全序列同一 + # tvec)不符,实测会把参考线稿"描"进成图。详见 DynamicRefImageEncode。 + ref_vals["reference_latents_method"] = "index" cond = node_helpers.conditioning_set_values( cond, ref_vals, @@ -829,11 +1012,19 @@ class OneImageMultiPrompt: elif ref_latent is not None: latent_out = {"samples": ref_latent} else: - # 纯文生图 - scale = 16 if 模型类型 == "Flux2" else 8 + # 纯文生图:通道数必须跟模型一致。 + # Flux2(以及同族的 MOSS-Image / FIBO 2.0)是 128 通道 / 16x,SD 是 4 通道 / 8x。 + # 原来不分类型一律 4 通道,接 Flux2 采样会直接通道不匹配。 + if 模型类型 == "Flux2": + scale, channels = 16, 128 + else: + scale, channels = 8, 4 lw = 输出宽度 // scale lh = 输出高度 // scale - latent_out = {"samples": torch.zeros(1, 4, lh, lw)} + latent_out = {"samples": torch.zeros( + [1, channels, lh, lw], + device=comfy.model_management.intermediate_device(), + )} # 补齐到 8 个 conditioning(未使用的填空 conditioning) while len(results) < 8: @@ -892,7 +1083,7 @@ class DynamicRefIndependent: }, "optional": { **opt, - "模型类型": (["Flux2", "Qwen Layered", "Qwen Image 2.1", "SD / SDXL", "Krea2"], {"default": "Flux2"}), + "模型类型": (["Flux2", "Qwen Layered", "Qwen Image 2.1", "SD / SDXL / Z-Image", "Krea2"], {"default": "Flux2"}), "匹配原图尺寸": (["OFF", "ON"], {"default": "OFF"}), "输出宽度": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 8}), "输出高度": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 8}), @@ -944,8 +1135,17 @@ class DynamicRefIndependent: 尺寸适配="参考图保比例", **kwargs): n = max(1, min(10, int(num_images))) llama_template = self._get_system_prompt(instruction) + 模型类型 = _norm_model_type(模型类型) # 老存档兼容 is_21 = (模型类型 == "Qwen Image 2.1") is_krea2 = (模型类型 == "Krea2") + if is_krea2 and n > 1: + # 本节点把每张图编进各自独立的 conditioning(Qwen 2.1 的每图独立 index 平面那套设计)。 + # Krea2 需要的是「一条连贯的参考序列」:合并多个独立 conditioning 后, + # reference_latents 的 frame 语义会乱 —— 实测线稿残留 + 姿势跑偏,而且不报错。 + print("[Toggle-Pass] ⚠️ DynamicRefIndependent 在 Krea2 多图下不可靠:多图请改用 " + "Ref Image Encode(DynamicRefImageEncode),一个节点就能带上多张参考图。", + flush=True) + conds = [] latents = [] # 每张图自己的 latent first_latent = None # 第一张非空图的 latent,用于共享 latent_out @@ -1012,7 +1212,18 @@ class DynamicRefIndependent: final_w = _krea2_align8(samples.shape[3]) final_h = _krea2_align8(samples.shape[2]) size_locked = True - img_latent, vl_image = _krea2_ref_preprocess(samples, vae) + # ★ 参考图先 fit 到出图网格(krea2_edit 训练几何),理由见 _krea2_fit_ref + s_k = _krea2_fit_ref(samples, final_w, final_h, 尺寸适配) + img_latent = vae.encode(s_k.movedim(1, -1)[:, :, :, :3]) if vae is not None else None + vl_total = 384 * 384 + vl_scale = math.sqrt(vl_total / current_total) + s_vl = comfy.utils.common_upscale( + samples, + max(8, round(samples.shape[3] * vl_scale)), + max(8, round(samples.shape[2] * vl_scale)), + "area", "disabled", + ) + vl_image = s_vl.movedim(1, -1) if img_latent is not None and first_latent is None: first_latent = img_latent else: @@ -1051,12 +1262,17 @@ class DynamicRefIndependent: cond = clip.encode_from_tokens_scheduled(tokens) # ---- 每张图的 conditioning 绑定自己的 latent ---- + _warn_no_ref_capability(clip, 0 if img_latent is None else 1, "Ref Independent") + if img_latent is not None: ref_vals = {"reference_latents": [img_latent]} if is_krea2: # Krea2 的 default_ref_method 是 None ⇒ 不显式给方法时参考图会被 - # 静默忽略(不报错、只是没效果)。官方风格模板用 index_timestep_zero。 - ref_vals["reference_latents_method"] = "index_timestep_zero" + # 静默忽略(不报错、只是没效果)。 + # ★★ 必须用 "index" 而非 "index_timestep_zero":后者给参考图单独 + # 一套 t=0 的 adaLN 调制,与 krea2_edit LoRA 的训练(全序列同一 + # tvec)不符,实测会把参考线稿"描"进成图。 + ref_vals["reference_latents_method"] = "index" cond = node_helpers.conditioning_set_values( cond, ref_vals, @@ -1094,7 +1310,17 @@ class DynamicRefIndependent: elif is_krea2: latent_out = _krea2_empty_latent(final_w, final_h) elif first_latent is None: - latent_out = {"samples": torch.zeros(1, 4, 1, 1)} + # 一张图都没接:给一个与模型匹配的空 latent。 + # 原来固定 4 通道 1×1 —— KSampler 的 fix_empty_latent_channels 会把它补成 + # (1, 128, 1, 1) 并照常采样,最后解码出一张 16×16 的废图(不报错,很难查)。 + if 模型类型 == "Flux2": + scale, channels = 16, 128 + else: + scale, channels = 8, 4 + latent_out = {"samples": torch.zeros( + [1, channels, max(1, 输出高度 // scale), max(1, 输出宽度 // scale)], + device=comfy.model_management.intermediate_device(), + )} else: latent_out = {"samples": first_latent} diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_仰视.webp new file mode 100644 index 0000000..d9578f8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_侧面.webp new file mode 100644 index 0000000..49d1165 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_俯视.webp new file mode 100644 index 0000000..1efd63d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_斜侧.webp new file mode 100644 index 0000000..18b6745 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_正面.webp new file mode 100644 index 0000000..84bb37e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P001_胸前双手比心/P001_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_仰视.webp new file mode 100644 index 0000000..717d03b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_侧面.webp new file mode 100644 index 0000000..4dc6192 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_俯视.webp new file mode 100644 index 0000000..524434d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_斜侧.webp new file mode 100644 index 0000000..60dac23 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_正面.webp new file mode 100644 index 0000000..c339e3b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P002_头顶双臂比心/P002_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_仰视.webp new file mode 100644 index 0000000..665a9d5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_侧面.webp new file mode 100644 index 0000000..b26415a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_俯视.webp new file mode 100644 index 0000000..47349da Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_斜侧.webp new file mode 100644 index 0000000..0cee6a0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_正面.webp new file mode 100644 index 0000000..c2fd50f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P003_脸侧手指比心/P003_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_仰视.webp new file mode 100644 index 0000000..6133291 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_侧面.webp new file mode 100644 index 0000000..3c83d89 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_俯视.webp new file mode 100644 index 0000000..78eded8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_斜侧.webp new file mode 100644 index 0000000..1529959 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_正面.webp new file mode 100644 index 0000000..a047f50 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P004_下巴下比双V/P004_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_仰视.webp new file mode 100644 index 0000000..9e4b800 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_侧面.webp new file mode 100644 index 0000000..ce54776 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_俯视.webp new file mode 100644 index 0000000..ad5cca6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_斜侧.webp new file mode 100644 index 0000000..a8a1338 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_正面.webp new file mode 100644 index 0000000..bde06e8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_仰视.webp new file mode 100644 index 0000000..bbf4270 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_侧面.webp new file mode 100644 index 0000000..660b421 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_俯视.webp new file mode 100644 index 0000000..6344a2b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_斜侧.webp new file mode 100644 index 0000000..5e556ec Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_正面.webp new file mode 100644 index 0000000..afd37f4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_仰视.webp new file mode 100644 index 0000000..5410086 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_侧面.webp new file mode 100644 index 0000000..7eb87c9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_俯视.webp new file mode 100644 index 0000000..a7ad504 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_斜侧.webp new file mode 100644 index 0000000..29bdb1e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_正面.webp new file mode 100644 index 0000000..9a98feb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P007_兔耳手势/P007_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_仰视.webp new file mode 100644 index 0000000..cd46d15 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_侧面.webp new file mode 100644 index 0000000..eaa2a19 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_俯视.webp new file mode 100644 index 0000000..300ac6e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_斜侧.webp new file mode 100644 index 0000000..3a2a94d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_正面.webp new file mode 100644 index 0000000..b71c6f6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P008_招财猫猫爪手势/P008_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_仰视.webp new file mode 100644 index 0000000..71e62d8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_侧面.webp new file mode 100644 index 0000000..bd35bd1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_俯视.webp new file mode 100644 index 0000000..5abd167 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_斜侧.webp new file mode 100644 index 0000000..cf9f4c2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_正面.webp new file mode 100644 index 0000000..a205914 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_仰视.webp new file mode 100644 index 0000000..234eda8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_侧面.webp new file mode 100644 index 0000000..7993276 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_俯视.webp new file mode 100644 index 0000000..40b54d4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_斜侧.webp new file mode 100644 index 0000000..18b629b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_正面.webp new file mode 100644 index 0000000..359df81 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_仰视.webp new file mode 100644 index 0000000..3a16cb0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_侧面.webp new file mode 100644 index 0000000..731ff57 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_俯视.webp new file mode 100644 index 0000000..59a2fc4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_斜侧.webp new file mode 100644 index 0000000..2be41c1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_正面.webp new file mode 100644 index 0000000..ecbb46c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_仰视.webp new file mode 100644 index 0000000..3d10429 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_侧面.webp new file mode 100644 index 0000000..f5979c5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_俯视.webp new file mode 100644 index 0000000..c70e0da Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_斜侧.webp new file mode 100644 index 0000000..2e6e4b6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_正面.webp new file mode 100644 index 0000000..436c792 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P012_飞吻/P012_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_仰视.webp new file mode 100644 index 0000000..08ee716 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_侧面.webp new file mode 100644 index 0000000..c0ff110 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_俯视.webp new file mode 100644 index 0000000..e71a92e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_斜侧.webp new file mode 100644 index 0000000..9562202 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_正面.webp new file mode 100644 index 0000000..c7d9bc9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_仰视.webp new file mode 100644 index 0000000..00201ff Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_侧面.webp new file mode 100644 index 0000000..f7e78ee Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_俯视.webp new file mode 100644 index 0000000..f57e1af Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_斜侧.webp new file mode 100644 index 0000000..6d10bff Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_正面.webp new file mode 100644 index 0000000..7db7f01 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P014_食指戳脸/P014_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_仰视.webp new file mode 100644 index 0000000..f1be362 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_侧面.webp new file mode 100644 index 0000000..2ea013f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_俯视.webp new file mode 100644 index 0000000..28cc717 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_斜侧.webp new file mode 100644 index 0000000..7d88227 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_正面.webp new file mode 100644 index 0000000..a00b6ed Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_仰视.webp new file mode 100644 index 0000000..0128360 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_侧面.webp new file mode 100644 index 0000000..1c7d641 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_俯视.webp new file mode 100644 index 0000000..456dcba Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_斜侧.webp new file mode 100644 index 0000000..2ea9f43 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_正面.webp new file mode 100644 index 0000000..519145a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_仰视.webp new file mode 100644 index 0000000..befaa42 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_侧面.webp new file mode 100644 index 0000000..da46d29 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_俯视.webp new file mode 100644 index 0000000..620ec05 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_斜侧.webp new file mode 100644 index 0000000..c1c1169 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_正面.webp new file mode 100644 index 0000000..b158558 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_仰视.webp new file mode 100644 index 0000000..febfca3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_侧面.webp new file mode 100644 index 0000000..d144f42 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_俯视.webp new file mode 100644 index 0000000..676b139 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_斜侧.webp new file mode 100644 index 0000000..e4aac2d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_正面.webp new file mode 100644 index 0000000..563fd2b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P018_手指取景框/P018_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_仰视.webp new file mode 100644 index 0000000..23cae60 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_侧面.webp new file mode 100644 index 0000000..a81798c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_俯视.webp new file mode 100644 index 0000000..8fd496e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_斜侧.webp new file mode 100644 index 0000000..1851dcc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_正面.webp new file mode 100644 index 0000000..437c3a0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P019_将发丝挽至耳后/P019_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_仰视.webp new file mode 100644 index 0000000..e253b11 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_侧面.webp new file mode 100644 index 0000000..7acea4c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_俯视.webp new file mode 100644 index 0000000..7a82ee6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_斜侧.webp new file mode 100644 index 0000000..e062f19 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_正面.webp new file mode 100644 index 0000000..167dce4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P020_双手捧脸/P020_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_仰视.webp new file mode 100644 index 0000000..1c2b082 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_侧面.webp new file mode 100644 index 0000000..e773bc1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_俯视.webp new file mode 100644 index 0000000..e4fe743 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_斜侧.webp new file mode 100644 index 0000000..ee041e0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_正面.webp new file mode 100644 index 0000000..10e7ebe Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P021_敬礼姿势/P021_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_仰视.webp new file mode 100644 index 0000000..0bf529f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_侧面.webp new file mode 100644 index 0000000..f4287e3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_俯视.webp new file mode 100644 index 0000000..a3f1b27 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_斜侧.webp new file mode 100644 index 0000000..467f3fd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_正面.webp new file mode 100644 index 0000000..4a4b71f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P022_手指镜头/P022_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_仰视.webp new file mode 100644 index 0000000..ca8ccd9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_侧面.webp new file mode 100644 index 0000000..163f02c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_俯视.webp new file mode 100644 index 0000000..d2a9487 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_斜侧.webp new file mode 100644 index 0000000..c4f146e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_正面.webp new file mode 100644 index 0000000..8aef99a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_仰视.webp new file mode 100644 index 0000000..4f4505b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_侧面.webp new file mode 100644 index 0000000..9c6d04c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_俯视.webp new file mode 100644 index 0000000..2210db0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_斜侧.webp new file mode 100644 index 0000000..024ac4a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_正面.webp new file mode 100644 index 0000000..411bfaa Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_仰视.webp new file mode 100644 index 0000000..86bab0f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_侧面.webp new file mode 100644 index 0000000..dd17823 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_俯视.webp new file mode 100644 index 0000000..4ff7258 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_斜侧.webp new file mode 100644 index 0000000..0b80779 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_正面.webp new file mode 100644 index 0000000..03ebed2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/可爱系/P025_从双手指缝间窥视/P025_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_仰视.webp new file mode 100644 index 0000000..306f155 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_侧面.webp new file mode 100644 index 0000000..bafd317 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_俯视.webp new file mode 100644 index 0000000..4fd8e1a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_斜侧.webp new file mode 100644 index 0000000..743f7da Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_正面.webp new file mode 100644 index 0000000..1b2782e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P051_双手捧胸/P051_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_仰视.webp new file mode 100644 index 0000000..f744a32 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_侧面.webp new file mode 100644 index 0000000..68fcebf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_俯视.webp new file mode 100644 index 0000000..27c075c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_斜侧.webp new file mode 100644 index 0000000..ba70213 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_正面.webp new file mode 100644 index 0000000..eed6b67 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P052_双手揉胸/P052_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_仰视.webp new file mode 100644 index 0000000..24ece02 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_侧面.webp new file mode 100644 index 0000000..e0ae330 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_俯视.webp new file mode 100644 index 0000000..043c39f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_斜侧.webp new file mode 100644 index 0000000..8bf105a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_正面.webp new file mode 100644 index 0000000..fdd2b82 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_仰视.webp new file mode 100644 index 0000000..70af22a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_侧面.webp new file mode 100644 index 0000000..ce06a5d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_俯视.webp new file mode 100644 index 0000000..ad098d6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_斜侧.webp new file mode 100644 index 0000000..a873cc5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_正面.webp new file mode 100644 index 0000000..381b5a2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_仰视.webp new file mode 100644 index 0000000..32e3a37 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_侧面.webp new file mode 100644 index 0000000..e2ee9f5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_俯视.webp new file mode 100644 index 0000000..ecd0a69 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_斜侧.webp new file mode 100644 index 0000000..9457992 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_正面.webp new file mode 100644 index 0000000..9ca3be5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_仰视.webp new file mode 100644 index 0000000..d12f103 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_侧面.webp new file mode 100644 index 0000000..323fdbb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_俯视.webp new file mode 100644 index 0000000..edbe16e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_斜侧.webp new file mode 100644 index 0000000..5eadb82 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_正面.webp new file mode 100644 index 0000000..83d5c30 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_仰视.webp new file mode 100644 index 0000000..68f3448 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_侧面.webp new file mode 100644 index 0000000..f25f99b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_俯视.webp new file mode 100644 index 0000000..8430aa3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_斜侧.webp new file mode 100644 index 0000000..cac5806 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_正面.webp new file mode 100644 index 0000000..bf5c2bf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_仰视.webp new file mode 100644 index 0000000..0e7d541 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_侧面.webp new file mode 100644 index 0000000..faa1552 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_俯视.webp new file mode 100644 index 0000000..8c9710e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_斜侧.webp new file mode 100644 index 0000000..0f91c0f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_正面.webp new file mode 100644 index 0000000..f3bd223 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_仰视.webp new file mode 100644 index 0000000..222f182 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_侧面.webp new file mode 100644 index 0000000..41d8fde Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_俯视.webp new file mode 100644 index 0000000..8417a01 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_斜侧.webp new file mode 100644 index 0000000..69df7e4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_正面.webp new file mode 100644 index 0000000..7e3761a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_仰视.webp new file mode 100644 index 0000000..ca1f0ad Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_侧面.webp new file mode 100644 index 0000000..b6c66c1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_俯视.webp new file mode 100644 index 0000000..b47bc97 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_斜侧.webp new file mode 100644 index 0000000..1f53802 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_正面.webp new file mode 100644 index 0000000..659f647 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_仰视.webp new file mode 100644 index 0000000..3469655 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_侧面.webp new file mode 100644 index 0000000..5904028 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_俯视.webp new file mode 100644 index 0000000..4856707 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_斜侧.webp new file mode 100644 index 0000000..2599b5a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_正面.webp new file mode 100644 index 0000000..c4c3a21 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_仰视.webp new file mode 100644 index 0000000..1dabbfb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_侧面.webp new file mode 100644 index 0000000..9e10c21 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_俯视.webp new file mode 100644 index 0000000..bff772a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_斜侧.webp new file mode 100644 index 0000000..6e7804a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_正面.webp new file mode 100644 index 0000000..4a6d6a1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_仰视.webp new file mode 100644 index 0000000..0eb0321 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_侧面.webp new file mode 100644 index 0000000..a008b35 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_俯视.webp new file mode 100644 index 0000000..b5bd72b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_斜侧.webp new file mode 100644 index 0000000..511ad94 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_正面.webp new file mode 100644 index 0000000..ac97961 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_仰视.webp new file mode 100644 index 0000000..2b420de Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_侧面.webp new file mode 100644 index 0000000..11139a1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_俯视.webp new file mode 100644 index 0000000..7e59372 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_斜侧.webp new file mode 100644 index 0000000..bf6fce4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_正面.webp new file mode 100644 index 0000000..1cfd7d0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_仰视.webp new file mode 100644 index 0000000..9f01459 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_侧面.webp new file mode 100644 index 0000000..a2f43c9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_俯视.webp new file mode 100644 index 0000000..db807e9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_斜侧.webp new file mode 100644 index 0000000..1f6ac20 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_正面.webp new file mode 100644 index 0000000..64aa876 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_仰视.webp new file mode 100644 index 0000000..ca83493 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_侧面.webp new file mode 100644 index 0000000..6fbb2f1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_俯视.webp new file mode 100644 index 0000000..7758f97 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_斜侧.webp new file mode 100644 index 0000000..efaad4c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_正面.webp new file mode 100644 index 0000000..841a69c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_仰视.webp new file mode 100644 index 0000000..78c4b89 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_侧面.webp new file mode 100644 index 0000000..d23e7cc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_俯视.webp new file mode 100644 index 0000000..43e5ee2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_斜侧.webp new file mode 100644 index 0000000..d126650 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_正面.webp new file mode 100644 index 0000000..e89cecb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_仰视.webp new file mode 100644 index 0000000..2df516b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_侧面.webp new file mode 100644 index 0000000..37fb7ae Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_俯视.webp new file mode 100644 index 0000000..f84bd4d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_斜侧.webp new file mode 100644 index 0000000..8d10b34 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_正面.webp new file mode 100644 index 0000000..4ec7b00 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_仰视.webp new file mode 100644 index 0000000..7b96083 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_侧面.webp new file mode 100644 index 0000000..d0092d7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_俯视.webp new file mode 100644 index 0000000..147f48e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_斜侧.webp new file mode 100644 index 0000000..d024a17 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_正面.webp new file mode 100644 index 0000000..7247c28 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_仰视.webp new file mode 100644 index 0000000..28a0705 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_侧面.webp new file mode 100644 index 0000000..30701ea Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_俯视.webp new file mode 100644 index 0000000..b92e07d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_斜侧.webp new file mode 100644 index 0000000..ca4c4c7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_正面.webp new file mode 100644 index 0000000..6ad709e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P070_手指含于唇边/P070_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_仰视.webp new file mode 100644 index 0000000..6dcef4c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_侧面.webp new file mode 100644 index 0000000..b890017 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_俯视.webp new file mode 100644 index 0000000..bb84718 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_斜侧.webp new file mode 100644 index 0000000..f298206 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_正面.webp new file mode 100644 index 0000000..b78a174 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_仰视.webp new file mode 100644 index 0000000..dd42042 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_侧面.webp new file mode 100644 index 0000000..b9e6954 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_俯视.webp new file mode 100644 index 0000000..7daf601 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_斜侧.webp new file mode 100644 index 0000000..63789b7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_正面.webp new file mode 100644 index 0000000..50e77c4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_仰视.webp new file mode 100644 index 0000000..b556c15 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_侧面.webp new file mode 100644 index 0000000..e46d002 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_俯视.webp new file mode 100644 index 0000000..2b2c5a6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_斜侧.webp new file mode 100644 index 0000000..c62045c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_正面.webp new file mode 100644 index 0000000..4a4cd5e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_仰视.webp new file mode 100644 index 0000000..be83a09 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_侧面.webp new file mode 100644 index 0000000..67c9576 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_俯视.webp new file mode 100644 index 0000000..538d158 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_斜侧.webp new file mode 100644 index 0000000..67b6b9c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_正面.webp new file mode 100644 index 0000000..21579ed Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_仰视.webp new file mode 100644 index 0000000..212f789 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_侧面.webp new file mode 100644 index 0000000..5c70b34 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_俯视.webp new file mode 100644 index 0000000..c698abe Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_斜侧.webp new file mode 100644 index 0000000..d4ac6b0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_正面.webp new file mode 100644 index 0000000..d0e7a28 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_仰视.webp new file mode 100644 index 0000000..fcd0e3f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_侧面.webp new file mode 100644 index 0000000..e2a6c18 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_俯视.webp new file mode 100644 index 0000000..49bd5b5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_斜侧.webp new file mode 100644 index 0000000..f43d307 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_正面.webp new file mode 100644 index 0000000..3358c58 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_仰视.webp new file mode 100644 index 0000000..362bef9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_侧面.webp new file mode 100644 index 0000000..35af5fa Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_俯视.webp new file mode 100644 index 0000000..6769aa7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_斜侧.webp new file mode 100644 index 0000000..aa87c57 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_正面.webp new file mode 100644 index 0000000..17621df Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_仰视.webp new file mode 100644 index 0000000..05156b3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_侧面.webp new file mode 100644 index 0000000..4dbf473 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_俯视.webp new file mode 100644 index 0000000..c5c9ae8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_斜侧.webp new file mode 100644 index 0000000..5a5d9b3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_正面.webp new file mode 100644 index 0000000..1d7021e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_仰视.webp new file mode 100644 index 0000000..327355a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_侧面.webp new file mode 100644 index 0000000..6060e2a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_俯视.webp new file mode 100644 index 0000000..908423c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_斜侧.webp new file mode 100644 index 0000000..77ffed2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_正面.webp new file mode 100644 index 0000000..25da84d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_仰视.webp new file mode 100644 index 0000000..aa090e5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_侧面.webp new file mode 100644 index 0000000..c5a4ceb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_俯视.webp new file mode 100644 index 0000000..50b2013 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_斜侧.webp new file mode 100644 index 0000000..0ad005b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_正面.webp new file mode 100644 index 0000000..a933b4e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_仰视.webp new file mode 100644 index 0000000..e8d80ee Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_侧面.webp new file mode 100644 index 0000000..8413a01 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_俯视.webp new file mode 100644 index 0000000..b1be94c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_斜侧.webp new file mode 100644 index 0000000..29d0527 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_正面.webp new file mode 100644 index 0000000..6e98611 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_仰视.webp new file mode 100644 index 0000000..a72eced Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_侧面.webp new file mode 100644 index 0000000..f31569d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_俯视.webp new file mode 100644 index 0000000..177348e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_斜侧.webp new file mode 100644 index 0000000..e7af156 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_正面.webp new file mode 100644 index 0000000..00a835a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_仰视.webp new file mode 100644 index 0000000..1a0f626 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_侧面.webp new file mode 100644 index 0000000..1440546 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_俯视.webp new file mode 100644 index 0000000..275d6e6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_斜侧.webp new file mode 100644 index 0000000..1ab92cd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_正面.webp new file mode 100644 index 0000000..c83f3ea Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_仰视.webp new file mode 100644 index 0000000..31c2606 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_侧面.webp new file mode 100644 index 0000000..e93ee55 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_俯视.webp new file mode 100644 index 0000000..8b13522 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_斜侧.webp new file mode 100644 index 0000000..9cc5d6a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_正面.webp new file mode 100644 index 0000000..7609409 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_仰视.webp new file mode 100644 index 0000000..65dad5c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_侧面.webp new file mode 100644 index 0000000..4bc4d56 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_俯视.webp new file mode 100644 index 0000000..dad7e5d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_斜侧.webp new file mode 100644 index 0000000..727e2ec Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_正面.webp new file mode 100644 index 0000000..5510faa Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_仰视.webp new file mode 100644 index 0000000..d3f95df Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_侧面.webp new file mode 100644 index 0000000..95fd997 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_俯视.webp new file mode 100644 index 0000000..6f890e5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_斜侧.webp new file mode 100644 index 0000000..f3fb5e7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_正面.webp new file mode 100644 index 0000000..773c068 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_仰视.webp new file mode 100644 index 0000000..bba06fd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_侧面.webp new file mode 100644 index 0000000..08c081d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_俯视.webp new file mode 100644 index 0000000..a65f653 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_斜侧.webp new file mode 100644 index 0000000..d0dda49 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_正面.webp new file mode 100644 index 0000000..30c24e0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_仰视.webp new file mode 100644 index 0000000..7ef2d35 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_侧面.webp new file mode 100644 index 0000000..e91d39c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_俯视.webp new file mode 100644 index 0000000..b3bb4cf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_斜侧.webp new file mode 100644 index 0000000..cf09ac7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_正面.webp new file mode 100644 index 0000000..8bf4fa3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_仰视.webp new file mode 100644 index 0000000..fcf6366 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_侧面.webp new file mode 100644 index 0000000..af0641c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_俯视.webp new file mode 100644 index 0000000..dd113ff Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_斜侧.webp new file mode 100644 index 0000000..2cd143b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_正面.webp new file mode 100644 index 0000000..a81b97f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_仰视.webp new file mode 100644 index 0000000..31a1b31 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_侧面.webp new file mode 100644 index 0000000..cac2260 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_俯视.webp new file mode 100644 index 0000000..1ebacdf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_斜侧.webp new file mode 100644 index 0000000..db4bbb7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_正面.webp new file mode 100644 index 0000000..f2fcb30 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_仰视.webp new file mode 100644 index 0000000..987d0e8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_侧面.webp new file mode 100644 index 0000000..d41d56d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_俯视.webp new file mode 100644 index 0000000..22f284b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_斜侧.webp new file mode 100644 index 0000000..609d6ac Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_正面.webp new file mode 100644 index 0000000..5c5ca90 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_仰视.webp new file mode 100644 index 0000000..45a668b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_侧面.webp new file mode 100644 index 0000000..3240077 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_俯视.webp new file mode 100644 index 0000000..ec2e842 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_斜侧.webp new file mode 100644 index 0000000..bb31a46 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_正面.webp new file mode 100644 index 0000000..27cce55 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_仰视.webp new file mode 100644 index 0000000..a300aa1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_侧面.webp new file mode 100644 index 0000000..8994126 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_俯视.webp new file mode 100644 index 0000000..bd282b4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_斜侧.webp new file mode 100644 index 0000000..9acea25 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_正面.webp new file mode 100644 index 0000000..7e1f00e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_仰视.webp new file mode 100644 index 0000000..e6de35d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_侧面.webp new file mode 100644 index 0000000..d69c172 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_俯视.webp new file mode 100644 index 0000000..6ed2d42 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_斜侧.webp new file mode 100644 index 0000000..0e123ad Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_正面.webp new file mode 100644 index 0000000..b666bd9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_仰视.webp new file mode 100644 index 0000000..d8dd98a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_侧面.webp new file mode 100644 index 0000000..e7c0b8b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_俯视.webp new file mode 100644 index 0000000..2b62661 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_斜侧.webp new file mode 100644 index 0000000..8a5a282 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_正面.webp new file mode 100644 index 0000000..4a0ab56 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_仰视.webp new file mode 100644 index 0000000..d85f9d7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_侧面.webp new file mode 100644 index 0000000..defecbc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_俯视.webp new file mode 100644 index 0000000..7f01f31 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_斜侧.webp new file mode 100644 index 0000000..a64b640 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_正面.webp new file mode 100644 index 0000000..a8597ad Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_仰视.webp new file mode 100644 index 0000000..1f17426 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_侧面.webp new file mode 100644 index 0000000..f6e5f67 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_俯视.webp new file mode 100644 index 0000000..a7aee89 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_斜侧.webp new file mode 100644 index 0000000..b581b75 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_正面.webp new file mode 100644 index 0000000..01843a5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_仰视.webp new file mode 100644 index 0000000..8aa1159 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_侧面.webp new file mode 100644 index 0000000..cbc8913 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_俯视.webp new file mode 100644 index 0000000..c7c5a1d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_斜侧.webp new file mode 100644 index 0000000..4c6b049 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_正面.webp new file mode 100644 index 0000000..872b2ae Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_仰视.webp new file mode 100644 index 0000000..113f4f5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_侧面.webp new file mode 100644 index 0000000..eed22f9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_俯视.webp new file mode 100644 index 0000000..2b30556 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_斜侧.webp new file mode 100644 index 0000000..92d5634 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_正面.webp new file mode 100644 index 0000000..e6174fa Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_仰视.webp new file mode 100644 index 0000000..d3dbbe2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_侧面.webp new file mode 100644 index 0000000..ce99bd2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_俯视.webp new file mode 100644 index 0000000..c0aa25b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_斜侧.webp new file mode 100644 index 0000000..86d9bd8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_正面.webp new file mode 100644 index 0000000..ca04a5e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_仰视.webp new file mode 100644 index 0000000..376dd3b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_侧面.webp new file mode 100644 index 0000000..37eaf2e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_俯视.webp new file mode 100644 index 0000000..483ae63 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_斜侧.webp new file mode 100644 index 0000000..fc66b46 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_正面.webp new file mode 100644 index 0000000..8bb7031 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_仰视.webp new file mode 100644 index 0000000..a0c7520 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_侧面.webp new file mode 100644 index 0000000..6ced252 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_俯视.webp new file mode 100644 index 0000000..c4a0309 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_斜侧.webp new file mode 100644 index 0000000..4f0d8d9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_正面.webp new file mode 100644 index 0000000..63b7d65 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_仰视.webp new file mode 100644 index 0000000..4dbf2dd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_侧面.webp new file mode 100644 index 0000000..a9b1fdb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_俯视.webp new file mode 100644 index 0000000..1a6ac6e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_斜侧.webp new file mode 100644 index 0000000..3651d6d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_正面.webp new file mode 100644 index 0000000..5ce8fe5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_仰视.webp new file mode 100644 index 0000000..49c5ea6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_侧面.webp new file mode 100644 index 0000000..9496017 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_俯视.webp new file mode 100644 index 0000000..3d57900 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_斜侧.webp new file mode 100644 index 0000000..e117513 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_正面.webp new file mode 100644 index 0000000..0d1efc2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_仰视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_仰视.webp new file mode 100644 index 0000000..42fc662 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_侧面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_侧面.webp new file mode 100644 index 0000000..178336f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_俯视.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_俯视.webp new file mode 100644 index 0000000..3a98ba7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_斜侧.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_斜侧.webp new file mode 100644 index 0000000..691f2a0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_正面.webp b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_正面.webp new file mode 100644 index 0000000..8a91671 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_仰视.webp new file mode 100644 index 0000000..25e62d0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_侧面.webp new file mode 100644 index 0000000..b689bd3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_俯视.webp new file mode 100644 index 0000000..524d5a2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_斜侧.webp new file mode 100644 index 0000000..9c4fbf9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_正面.webp new file mode 100644 index 0000000..3e186ab Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_仰视.webp new file mode 100644 index 0000000..281ea57 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_侧面.webp new file mode 100644 index 0000000..87e560e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_俯视.webp new file mode 100644 index 0000000..1107578 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_斜侧.webp new file mode 100644 index 0000000..5f84238 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_正面.webp new file mode 100644 index 0000000..6d999b4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_仰视.webp new file mode 100644 index 0000000..7e257e2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_侧面.webp new file mode 100644 index 0000000..ebb13d4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_俯视.webp new file mode 100644 index 0000000..a545f77 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_斜侧.webp new file mode 100644 index 0000000..1127a8e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_正面.webp new file mode 100644 index 0000000..e425c55 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_仰视.webp new file mode 100644 index 0000000..eb3136e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_侧面.webp new file mode 100644 index 0000000..3181d94 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_俯视.webp new file mode 100644 index 0000000..56623a2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_斜侧.webp new file mode 100644 index 0000000..1bc4951 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_正面.webp new file mode 100644 index 0000000..b5943e2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_仰视.webp new file mode 100644 index 0000000..89156d5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_侧面.webp new file mode 100644 index 0000000..520cfda Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_俯视.webp new file mode 100644 index 0000000..9ec819c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_斜侧.webp new file mode 100644 index 0000000..a9c7b68 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_正面.webp new file mode 100644 index 0000000..0f9c1c2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_仰视.webp new file mode 100644 index 0000000..0d3a2bd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_侧面.webp new file mode 100644 index 0000000..77ba176 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_俯视.webp new file mode 100644 index 0000000..fc41e65 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_斜侧.webp new file mode 100644 index 0000000..b7cfe05 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_正面.webp new file mode 100644 index 0000000..9040abd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_仰视.webp new file mode 100644 index 0000000..3b77cc5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_侧面.webp new file mode 100644 index 0000000..09c0f12 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_俯视.webp new file mode 100644 index 0000000..f5bba0c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_斜侧.webp new file mode 100644 index 0000000..3b1f211 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_正面.webp new file mode 100644 index 0000000..07d1154 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_仰视.webp new file mode 100644 index 0000000..3e9c03f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_侧面.webp new file mode 100644 index 0000000..6cd03dc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_俯视.webp new file mode 100644 index 0000000..7788fed Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_斜侧.webp new file mode 100644 index 0000000..0e02f40 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_正面.webp new file mode 100644 index 0000000..dd2d67e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_仰视.webp new file mode 100644 index 0000000..85c9faf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_侧面.webp new file mode 100644 index 0000000..58d8fe5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_俯视.webp new file mode 100644 index 0000000..9dfe25c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_斜侧.webp new file mode 100644 index 0000000..3c801c9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_正面.webp new file mode 100644 index 0000000..128fc79 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_仰视.webp new file mode 100644 index 0000000..bad7aa0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_侧面.webp new file mode 100644 index 0000000..5e05807 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_俯视.webp new file mode 100644 index 0000000..e251a01 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_斜侧.webp new file mode 100644 index 0000000..69f3b46 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_正面.webp new file mode 100644 index 0000000..3a147ef Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_仰视.webp new file mode 100644 index 0000000..9209ba2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_侧面.webp new file mode 100644 index 0000000..b79a08e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_俯视.webp new file mode 100644 index 0000000..ed23333 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_斜侧.webp new file mode 100644 index 0000000..16914e6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_正面.webp new file mode 100644 index 0000000..9ac021d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_仰视.webp new file mode 100644 index 0000000..f076c53 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_侧面.webp new file mode 100644 index 0000000..a2f78ac Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_俯视.webp new file mode 100644 index 0000000..99583a8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_斜侧.webp new file mode 100644 index 0000000..a0f301e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_正面.webp new file mode 100644 index 0000000..e35ab99 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_仰视.webp new file mode 100644 index 0000000..7ccce67 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_侧面.webp new file mode 100644 index 0000000..2f85ee7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_俯视.webp new file mode 100644 index 0000000..1574397 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_斜侧.webp new file mode 100644 index 0000000..19bc4da Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_正面.webp new file mode 100644 index 0000000..6f8a819 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_仰视.webp new file mode 100644 index 0000000..8948755 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_侧面.webp new file mode 100644 index 0000000..03ecd88 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_俯视.webp new file mode 100644 index 0000000..33efca2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_斜侧.webp new file mode 100644 index 0000000..952a4e3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_正面.webp new file mode 100644 index 0000000..7d7ebd9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_仰视.webp new file mode 100644 index 0000000..05ba0f7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_侧面.webp new file mode 100644 index 0000000..a639742 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_俯视.webp new file mode 100644 index 0000000..aaedb40 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_斜侧.webp new file mode 100644 index 0000000..3596c36 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_正面.webp new file mode 100644 index 0000000..132aac6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_仰视.webp new file mode 100644 index 0000000..dcc3285 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_侧面.webp new file mode 100644 index 0000000..7c61f3a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_俯视.webp new file mode 100644 index 0000000..0980b92 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_斜侧.webp new file mode 100644 index 0000000..7dfb653 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_正面.webp new file mode 100644 index 0000000..1e77193 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_仰视.webp new file mode 100644 index 0000000..efd8af6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_侧面.webp new file mode 100644 index 0000000..3498de2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_俯视.webp new file mode 100644 index 0000000..81f8f28 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_斜侧.webp new file mode 100644 index 0000000..9b0809d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_正面.webp new file mode 100644 index 0000000..3697d5a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_仰视.webp new file mode 100644 index 0000000..23a87b5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_侧面.webp new file mode 100644 index 0000000..9d30d09 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_俯视.webp new file mode 100644 index 0000000..6b9c2b6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_斜侧.webp new file mode 100644 index 0000000..70a203f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_正面.webp new file mode 100644 index 0000000..e1d8f18 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_仰视.webp new file mode 100644 index 0000000..f1c6cf0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_侧面.webp new file mode 100644 index 0000000..fcb45d6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_俯视.webp new file mode 100644 index 0000000..fc644aa Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_斜侧.webp new file mode 100644 index 0000000..d994ebf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_正面.webp new file mode 100644 index 0000000..6c24c9c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_仰视.webp new file mode 100644 index 0000000..fb90a8d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_侧面.webp new file mode 100644 index 0000000..68cacc4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_俯视.webp new file mode 100644 index 0000000..f3fc3f4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_斜侧.webp new file mode 100644 index 0000000..432366d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_正面.webp new file mode 100644 index 0000000..2765983 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_仰视.webp new file mode 100644 index 0000000..a31c0fc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_侧面.webp new file mode 100644 index 0000000..e539999 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_俯视.webp new file mode 100644 index 0000000..f82f7dd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_斜侧.webp new file mode 100644 index 0000000..1022713 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_正面.webp new file mode 100644 index 0000000..80383c8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_仰视.webp new file mode 100644 index 0000000..8e9457d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_侧面.webp new file mode 100644 index 0000000..3d237ef Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_俯视.webp new file mode 100644 index 0000000..46bc011 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_斜侧.webp new file mode 100644 index 0000000..af713ef Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_正面.webp new file mode 100644 index 0000000..738fb6e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_仰视.webp new file mode 100644 index 0000000..839543c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_侧面.webp new file mode 100644 index 0000000..72d6f56 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_俯视.webp new file mode 100644 index 0000000..cf859b7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_斜侧.webp new file mode 100644 index 0000000..8a474d1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_正面.webp new file mode 100644 index 0000000..ae52941 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_仰视.webp new file mode 100644 index 0000000..57d0549 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_侧面.webp new file mode 100644 index 0000000..44e7388 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_俯视.webp new file mode 100644 index 0000000..99e7d25 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_斜侧.webp new file mode 100644 index 0000000..17ff1f0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_正面.webp new file mode 100644 index 0000000..88112f8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_仰视.webp new file mode 100644 index 0000000..d9cce79 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_侧面.webp new file mode 100644 index 0000000..596271f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_俯视.webp new file mode 100644 index 0000000..651a0fd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_斜侧.webp new file mode 100644 index 0000000..f522d79 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_正面.webp new file mode 100644 index 0000000..bf1698a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_仰视.webp new file mode 100644 index 0000000..e39d29e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_侧面.webp new file mode 100644 index 0000000..69b0bf2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_俯视.webp new file mode 100644 index 0000000..4062da8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_斜侧.webp new file mode 100644 index 0000000..de25e58 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_正面.webp new file mode 100644 index 0000000..b8e9446 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_仰视.webp new file mode 100644 index 0000000..5a55950 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_侧面.webp new file mode 100644 index 0000000..dd6a7e4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_俯视.webp new file mode 100644 index 0000000..76c9ff8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_斜侧.webp new file mode 100644 index 0000000..3bfc432 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_正面.webp new file mode 100644 index 0000000..deb79bc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P010_手抚脚踝/P010_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_仰视.webp new file mode 100644 index 0000000..c858ad8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_侧面.webp new file mode 100644 index 0000000..14c5cad Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_俯视.webp new file mode 100644 index 0000000..f4ae8c7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_斜侧.webp new file mode 100644 index 0000000..bdfc37b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_正面.webp new file mode 100644 index 0000000..6192995 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_仰视.webp new file mode 100644 index 0000000..20a8cc9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_侧面.webp new file mode 100644 index 0000000..f423f5b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_俯视.webp new file mode 100644 index 0000000..2fc600c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_斜侧.webp new file mode 100644 index 0000000..558601c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_正面.webp new file mode 100644 index 0000000..5ab0235 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_仰视.webp new file mode 100644 index 0000000..f462d9e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_侧面.webp new file mode 100644 index 0000000..5cb46af Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_俯视.webp new file mode 100644 index 0000000..24a3852 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_斜侧.webp new file mode 100644 index 0000000..db2c8ad Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_正面.webp new file mode 100644 index 0000000..5c3e8ba Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_仰视.webp new file mode 100644 index 0000000..d7569fd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_侧面.webp new file mode 100644 index 0000000..255a87b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_俯视.webp new file mode 100644 index 0000000..7662238 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_斜侧.webp new file mode 100644 index 0000000..2c64dff Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_正面.webp new file mode 100644 index 0000000..3c06507 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_仰视.webp new file mode 100644 index 0000000..2c0ccb4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_侧面.webp new file mode 100644 index 0000000..b533e93 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_俯视.webp new file mode 100644 index 0000000..192a3e3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_斜侧.webp new file mode 100644 index 0000000..1b694be Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_正面.webp new file mode 100644 index 0000000..3ffffdf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_仰视.webp new file mode 100644 index 0000000..5263354 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_侧面.webp new file mode 100644 index 0000000..b566795 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_俯视.webp new file mode 100644 index 0000000..469bdb3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_斜侧.webp new file mode 100644 index 0000000..b5ecf2f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_正面.webp new file mode 100644 index 0000000..1badb9c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_仰视.webp new file mode 100644 index 0000000..cb7d618 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_侧面.webp new file mode 100644 index 0000000..af36026 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_俯视.webp new file mode 100644 index 0000000..89f25a8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_斜侧.webp new file mode 100644 index 0000000..6dbb58d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_正面.webp new file mode 100644 index 0000000..0307986 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_仰视.webp new file mode 100644 index 0000000..4674364 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_侧面.webp new file mode 100644 index 0000000..699d2d5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_俯视.webp new file mode 100644 index 0000000..20289cd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_斜侧.webp new file mode 100644 index 0000000..1843bce Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_正面.webp new file mode 100644 index 0000000..ca5199f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_仰视.webp new file mode 100644 index 0000000..6ba8f5a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_侧面.webp new file mode 100644 index 0000000..d768a33 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_俯视.webp new file mode 100644 index 0000000..375ab9b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_斜侧.webp new file mode 100644 index 0000000..14c5d5f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_正面.webp new file mode 100644 index 0000000..68c486f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P016_站立・双手撩发/P016_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_仰视.webp new file mode 100644 index 0000000..a5c9a3a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_侧面.webp new file mode 100644 index 0000000..2cd66df Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_俯视.webp new file mode 100644 index 0000000..9875635 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_斜侧.webp new file mode 100644 index 0000000..535dd1e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_正面.webp new file mode 100644 index 0000000..c50804d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_仰视.webp new file mode 100644 index 0000000..52e953e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_侧面.webp new file mode 100644 index 0000000..923f4d0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_俯视.webp new file mode 100644 index 0000000..1e01c27 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_斜侧.webp new file mode 100644 index 0000000..0d92b11 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_正面.webp new file mode 100644 index 0000000..5b9243a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_仰视.webp new file mode 100644 index 0000000..bfb7eb7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_侧面.webp new file mode 100644 index 0000000..cff770d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_俯视.webp new file mode 100644 index 0000000..aa151a1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_斜侧.webp new file mode 100644 index 0000000..65df620 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_正面.webp new file mode 100644 index 0000000..9765828 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_仰视.webp new file mode 100644 index 0000000..ab7d9af Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_侧面.webp new file mode 100644 index 0000000..246af2f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_俯视.webp new file mode 100644 index 0000000..4b9a89b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_斜侧.webp new file mode 100644 index 0000000..714678f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_正面.webp new file mode 100644 index 0000000..3df00db Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_仰视.webp new file mode 100644 index 0000000..0577892 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_侧面.webp new file mode 100644 index 0000000..81fe1bf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_俯视.webp new file mode 100644 index 0000000..a66270b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_斜侧.webp new file mode 100644 index 0000000..940899a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_正面.webp new file mode 100644 index 0000000..ea34a40 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_仰视.webp new file mode 100644 index 0000000..4e124bd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_侧面.webp new file mode 100644 index 0000000..12b6d21 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_俯视.webp new file mode 100644 index 0000000..64196f6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_斜侧.webp new file mode 100644 index 0000000..c1b4639 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_正面.webp new file mode 100644 index 0000000..bf71919 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_仰视.webp new file mode 100644 index 0000000..44b2a1a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_侧面.webp new file mode 100644 index 0000000..0f77dd9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_俯视.webp new file mode 100644 index 0000000..ce0bf69 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_斜侧.webp new file mode 100644 index 0000000..5d822bd Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_正面.webp new file mode 100644 index 0000000..dccaada Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_仰视.webp new file mode 100644 index 0000000..5d724f5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_侧面.webp new file mode 100644 index 0000000..52d5d4c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_俯视.webp new file mode 100644 index 0000000..780314a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_斜侧.webp new file mode 100644 index 0000000..ca98dcb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_正面.webp new file mode 100644 index 0000000..2e669cb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_仰视.webp new file mode 100644 index 0000000..6768a3d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_侧面.webp new file mode 100644 index 0000000..819a468 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_俯视.webp new file mode 100644 index 0000000..3765643 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_斜侧.webp new file mode 100644 index 0000000..d5cf161 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_正面.webp new file mode 100644 index 0000000..49e506c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_仰视.webp new file mode 100644 index 0000000..bfda7d9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_侧面.webp new file mode 100644 index 0000000..8af0b4a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_俯视.webp new file mode 100644 index 0000000..9bd3da5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_斜侧.webp new file mode 100644 index 0000000..35ba6d5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_正面.webp new file mode 100644 index 0000000..c031fed Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_仰视.webp new file mode 100644 index 0000000..45449f0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_侧面.webp new file mode 100644 index 0000000..27ab268 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_俯视.webp new file mode 100644 index 0000000..5769368 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_斜侧.webp new file mode 100644 index 0000000..0ca9271 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_正面.webp new file mode 100644 index 0000000..ecd8302 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_仰视.webp new file mode 100644 index 0000000..27b06e0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_侧面.webp new file mode 100644 index 0000000..9d573c0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_俯视.webp new file mode 100644 index 0000000..06194bc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_斜侧.webp new file mode 100644 index 0000000..bdc0c48 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_正面.webp new file mode 100644 index 0000000..e40d981 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_仰视.webp new file mode 100644 index 0000000..49878f7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_侧面.webp new file mode 100644 index 0000000..918e17b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_俯视.webp new file mode 100644 index 0000000..d4236a4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_斜侧.webp new file mode 100644 index 0000000..86aae79 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_正面.webp new file mode 100644 index 0000000..58cb81c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_仰视.webp new file mode 100644 index 0000000..7064d02 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_侧面.webp new file mode 100644 index 0000000..3422c1b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_俯视.webp new file mode 100644 index 0000000..4a4817b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_斜侧.webp new file mode 100644 index 0000000..e98122a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_正面.webp new file mode 100644 index 0000000..f55ed8e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_仰视.webp new file mode 100644 index 0000000..208d910 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_侧面.webp new file mode 100644 index 0000000..fdeb45f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_俯视.webp new file mode 100644 index 0000000..e3653a1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_斜侧.webp new file mode 100644 index 0000000..dc0f407 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_正面.webp new file mode 100644 index 0000000..8f7681d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_仰视.webp new file mode 100644 index 0000000..fb2becf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_侧面.webp new file mode 100644 index 0000000..fb0cca8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_俯视.webp new file mode 100644 index 0000000..deee585 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_斜侧.webp new file mode 100644 index 0000000..34cda50 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_正面.webp new file mode 100644 index 0000000..3909795 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_仰视.webp new file mode 100644 index 0000000..8a1cea5 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_侧面.webp new file mode 100644 index 0000000..91a51d7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_俯视.webp new file mode 100644 index 0000000..baf9a96 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_斜侧.webp new file mode 100644 index 0000000..d5b4543 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_正面.webp new file mode 100644 index 0000000..f99eae4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_仰视.webp new file mode 100644 index 0000000..1e0f4a7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_侧面.webp new file mode 100644 index 0000000..9486554 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_俯视.webp new file mode 100644 index 0000000..71e95f1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_斜侧.webp new file mode 100644 index 0000000..e30e94f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_正面.webp new file mode 100644 index 0000000..2f83847 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_仰视.webp new file mode 100644 index 0000000..2820d99 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_侧面.webp new file mode 100644 index 0000000..59ebecc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_俯视.webp new file mode 100644 index 0000000..b6df7c9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_斜侧.webp new file mode 100644 index 0000000..db477d9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_正面.webp new file mode 100644 index 0000000..f3080b7 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_仰视.webp new file mode 100644 index 0000000..9ef430b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_侧面.webp new file mode 100644 index 0000000..50c537c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_俯视.webp new file mode 100644 index 0000000..30a3e37 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_斜侧.webp new file mode 100644 index 0000000..80b1132 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_正面.webp new file mode 100644 index 0000000..f1b9989 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_仰视.webp new file mode 100644 index 0000000..586e312 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_侧面.webp new file mode 100644 index 0000000..bfc5445 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_俯视.webp new file mode 100644 index 0000000..5e3dd79 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_斜侧.webp new file mode 100644 index 0000000..3283622 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_正面.webp new file mode 100644 index 0000000..b799280 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_仰视.webp new file mode 100644 index 0000000..9c1a1ba Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_侧面.webp new file mode 100644 index 0000000..548f982 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_俯视.webp new file mode 100644 index 0000000..8d4350a Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_斜侧.webp new file mode 100644 index 0000000..76d63d0 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_正面.webp new file mode 100644 index 0000000..fda0e03 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_仰视.webp new file mode 100644 index 0000000..06cf4a6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_侧面.webp new file mode 100644 index 0000000..9da4a6b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_俯视.webp new file mode 100644 index 0000000..92c2dd1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_斜侧.webp new file mode 100644 index 0000000..0a42711 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_正面.webp new file mode 100644 index 0000000..99ba251 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_仰视.webp new file mode 100644 index 0000000..38e9fa4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_侧面.webp new file mode 100644 index 0000000..c59cdde Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_俯视.webp new file mode 100644 index 0000000..68f4ac4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_斜侧.webp new file mode 100644 index 0000000..a4f7ed6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_正面.webp new file mode 100644 index 0000000..06252c6 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_仰视.webp new file mode 100644 index 0000000..0226a82 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_侧面.webp new file mode 100644 index 0000000..499292c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_俯视.webp new file mode 100644 index 0000000..c57022c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_斜侧.webp new file mode 100644 index 0000000..f12f3f9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_正面.webp new file mode 100644 index 0000000..04b659f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_仰视.webp new file mode 100644 index 0000000..ab275b1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_侧面.webp new file mode 100644 index 0000000..b0f9531 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_俯视.webp new file mode 100644 index 0000000..6b4a8cf Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_斜侧.webp new file mode 100644 index 0000000..0460424 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_正面.webp new file mode 100644 index 0000000..66a4378 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_仰视.webp new file mode 100644 index 0000000..9090bdc Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_侧面.webp new file mode 100644 index 0000000..ab1a83d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_俯视.webp new file mode 100644 index 0000000..4a3fb39 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_斜侧.webp new file mode 100644 index 0000000..7cadc31 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_正面.webp new file mode 100644 index 0000000..9de531d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_仰视.webp new file mode 100644 index 0000000..ceec2b9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_侧面.webp new file mode 100644 index 0000000..b32f483 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_俯视.webp new file mode 100644 index 0000000..3ca57d2 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_斜侧.webp new file mode 100644 index 0000000..a547c6e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_正面.webp new file mode 100644 index 0000000..9445e80 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_仰视.webp new file mode 100644 index 0000000..6918f99 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_侧面.webp new file mode 100644 index 0000000..c747232 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_俯视.webp new file mode 100644 index 0000000..95cf3f4 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_斜侧.webp new file mode 100644 index 0000000..ad31a5f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_正面.webp new file mode 100644 index 0000000..5c1c8d1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_仰视.webp new file mode 100644 index 0000000..10e0e16 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_侧面.webp new file mode 100644 index 0000000..a48a78f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_俯视.webp new file mode 100644 index 0000000..393e9ff Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_斜侧.webp new file mode 100644 index 0000000..071a149 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_正面.webp new file mode 100644 index 0000000..6903280 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_仰视.webp new file mode 100644 index 0000000..d266e1c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_侧面.webp new file mode 100644 index 0000000..befd382 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_俯视.webp new file mode 100644 index 0000000..50b3322 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_斜侧.webp new file mode 100644 index 0000000..ec35c59 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_正面.webp new file mode 100644 index 0000000..7dadbda Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_仰视.webp new file mode 100644 index 0000000..b693e15 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_侧面.webp new file mode 100644 index 0000000..5f0ef73 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_俯视.webp new file mode 100644 index 0000000..f8d8362 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_斜侧.webp new file mode 100644 index 0000000..3ad99fb Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_正面.webp new file mode 100644 index 0000000..07b415c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_仰视.webp new file mode 100644 index 0000000..46245ab Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_侧面.webp new file mode 100644 index 0000000..ac9fc31 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_俯视.webp new file mode 100644 index 0000000..0f7ab49 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_斜侧.webp new file mode 100644 index 0000000..6735924 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_正面.webp new file mode 100644 index 0000000..cabe31d Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_仰视.webp new file mode 100644 index 0000000..c3ca9c8 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_侧面.webp new file mode 100644 index 0000000..3708f5c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_俯视.webp new file mode 100644 index 0000000..8a66d4b Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_斜侧.webp new file mode 100644 index 0000000..a963e08 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_正面.webp new file mode 100644 index 0000000..fa659d9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_仰视.webp new file mode 100644 index 0000000..f7ea106 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_侧面.webp new file mode 100644 index 0000000..b0cf315 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_俯视.webp new file mode 100644 index 0000000..22adf8c Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_斜侧.webp new file mode 100644 index 0000000..7aa5600 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_正面.webp new file mode 100644 index 0000000..29bf82e Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_仰视.webp new file mode 100644 index 0000000..1b08486 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_侧面.webp new file mode 100644 index 0000000..ec4b1de Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_俯视.webp new file mode 100644 index 0000000..36db6e3 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_斜侧.webp new file mode 100644 index 0000000..2a8a3c1 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_正面.webp new file mode 100644 index 0000000..55c3bef Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_正面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_仰视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_仰视.webp new file mode 100644 index 0000000..bf4a571 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_仰视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_侧面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_侧面.webp new file mode 100644 index 0000000..4228859 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_侧面.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_俯视.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_俯视.webp new file mode 100644 index 0000000..44f9e02 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_俯视.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_斜侧.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_斜侧.webp new file mode 100644 index 0000000..7c1a52f Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_斜侧.webp differ diff --git a/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_正面.webp b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_正面.webp new file mode 100644 index 0000000..984fab9 Binary files /dev/null and b/pose_assets/01_AI线稿姿势/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_仰视.webp new file mode 100644 index 0000000..adeab85 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_侧面.webp new file mode 100644 index 0000000..08c3888 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_俯视.webp new file mode 100644 index 0000000..1d23079 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_斜侧.webp new file mode 100644 index 0000000..71b60ae Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_正面.webp new file mode 100644 index 0000000..42173f2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P001_胸前双手比心/P001_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_仰视.webp new file mode 100644 index 0000000..42e8371 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_侧面.webp new file mode 100644 index 0000000..c65681f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_俯视.webp new file mode 100644 index 0000000..9649a06 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_斜侧.webp new file mode 100644 index 0000000..3e16c44 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_正面.webp new file mode 100644 index 0000000..d00a3f7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P002_头顶双臂比心/P002_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_仰视.webp new file mode 100644 index 0000000..6d5267b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_侧面.webp new file mode 100644 index 0000000..daf2f1f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_俯视.webp new file mode 100644 index 0000000..30690de Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_斜侧.webp new file mode 100644 index 0000000..77d1027 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_正面.webp new file mode 100644 index 0000000..f5c4cba Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P003_脸侧手指比心/P003_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_仰视.webp new file mode 100644 index 0000000..1c32062 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_侧面.webp new file mode 100644 index 0000000..1dcb8d5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_俯视.webp new file mode 100644 index 0000000..ca88071 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_斜侧.webp new file mode 100644 index 0000000..3fa4d88 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_正面.webp new file mode 100644 index 0000000..180ee03 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P004_下巴下比双V/P004_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_仰视.webp new file mode 100644 index 0000000..8a4e93e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_侧面.webp new file mode 100644 index 0000000..34c54c6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_俯视.webp new file mode 100644 index 0000000..9699b31 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_斜侧.webp new file mode 100644 index 0000000..a01a323 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_正面.webp new file mode 100644 index 0000000..0580100 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P005_辣妹V(手背朝外比V)/P005_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_仰视.webp new file mode 100644 index 0000000..f51174e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_侧面.webp new file mode 100644 index 0000000..9f910ce Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_俯视.webp new file mode 100644 index 0000000..73a5713 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_斜侧.webp new file mode 100644 index 0000000..d54f68e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_正面.webp new file mode 100644 index 0000000..88d53da Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P006_握拳贴脸(撒娇)/P006_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_仰视.webp new file mode 100644 index 0000000..a334ca7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_侧面.webp new file mode 100644 index 0000000..455aee2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_俯视.webp new file mode 100644 index 0000000..2e4a779 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_斜侧.webp new file mode 100644 index 0000000..6f46fc3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_正面.webp new file mode 100644 index 0000000..4ffab7e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P007_兔耳手势/P007_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_仰视.webp new file mode 100644 index 0000000..3c06e2a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_侧面.webp new file mode 100644 index 0000000..ca0401a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_俯视.webp new file mode 100644 index 0000000..b069265 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_斜侧.webp new file mode 100644 index 0000000..f99b48e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_正面.webp new file mode 100644 index 0000000..fa7bd07 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P008_招财猫猫爪手势/P008_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_仰视.webp new file mode 100644 index 0000000..24de025 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_侧面.webp new file mode 100644 index 0000000..412b105 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_俯视.webp new file mode 100644 index 0000000..d8ce6f4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_斜侧.webp new file mode 100644 index 0000000..6f22196 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_正面.webp new file mode 100644 index 0000000..7abe2ff Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P009_咆哮手势(嗷呜)/P009_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_仰视.webp new file mode 100644 index 0000000..59a5f90 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_侧面.webp new file mode 100644 index 0000000..cd4592b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_俯视.webp new file mode 100644 index 0000000..81e80d6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_斜侧.webp new file mode 100644 index 0000000..49d76e8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_正面.webp new file mode 100644 index 0000000..ce3e513 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P010_嘘——(食指抵唇)/P010_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_仰视.webp new file mode 100644 index 0000000..4a31760 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_侧面.webp new file mode 100644 index 0000000..a9eb6d6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_俯视.webp new file mode 100644 index 0000000..c9c5974 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_斜侧.webp new file mode 100644 index 0000000..d32f273 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_正面.webp new file mode 100644 index 0000000..67d5a3b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P011_歪头+手遮单眼(眨眼风)/P011_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_仰视.webp new file mode 100644 index 0000000..af7afd7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_侧面.webp new file mode 100644 index 0000000..1325508 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_俯视.webp new file mode 100644 index 0000000..27327db Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_斜侧.webp new file mode 100644 index 0000000..8d69d38 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_正面.webp new file mode 100644 index 0000000..dd49539 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P012_飞吻/P012_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_仰视.webp new file mode 100644 index 0000000..bf3201c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_侧面.webp new file mode 100644 index 0000000..646b266 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_俯视.webp new file mode 100644 index 0000000..18caa60 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_斜侧.webp new file mode 100644 index 0000000..9074aa8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_正面.webp new file mode 100644 index 0000000..d84852e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P013_双掌托腮(花苞手势)/P013_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_仰视.webp new file mode 100644 index 0000000..0bcbd83 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_侧面.webp new file mode 100644 index 0000000..5928533 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_俯视.webp new file mode 100644 index 0000000..f69ea89 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_斜侧.webp new file mode 100644 index 0000000..b9179b8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_正面.webp new file mode 100644 index 0000000..740b4ea Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P014_食指戳脸/P014_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_仰视.webp new file mode 100644 index 0000000..6767b63 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_侧面.webp new file mode 100644 index 0000000..6ec076d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_俯视.webp new file mode 100644 index 0000000..58d8db7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_斜侧.webp new file mode 100644 index 0000000..341a46f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_正面.webp new file mode 100644 index 0000000..01332d8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P015_萌袖风・双手掩口/P015_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_仰视.webp new file mode 100644 index 0000000..b1aaa99 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_侧面.webp new file mode 100644 index 0000000..e360c4b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_俯视.webp new file mode 100644 index 0000000..99d4b8a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_斜侧.webp new file mode 100644 index 0000000..0b6214e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_正面.webp new file mode 100644 index 0000000..f404d1b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P016_拜托手势(双手合十)/P016_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_仰视.webp new file mode 100644 index 0000000..e690add Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_侧面.webp new file mode 100644 index 0000000..40825e9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_俯视.webp new file mode 100644 index 0000000..8719235 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_斜侧.webp new file mode 100644 index 0000000..df26c34 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_正面.webp new file mode 100644 index 0000000..b1e02f2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P017_抱紧自己・害羞姿势/P017_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_仰视.webp new file mode 100644 index 0000000..3f001d3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_侧面.webp new file mode 100644 index 0000000..bb801d0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_俯视.webp new file mode 100644 index 0000000..4097079 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_斜侧.webp new file mode 100644 index 0000000..b0c3e46 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_正面.webp new file mode 100644 index 0000000..74af911 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P018_手指取景框/P018_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_仰视.webp new file mode 100644 index 0000000..b728b5a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_侧面.webp new file mode 100644 index 0000000..978f779 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_俯视.webp new file mode 100644 index 0000000..7d65cec Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_斜侧.webp new file mode 100644 index 0000000..ab36383 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_正面.webp new file mode 100644 index 0000000..bb2b6e9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P019_将发丝挽至耳后/P019_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_仰视.webp new file mode 100644 index 0000000..1eb92c3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_侧面.webp new file mode 100644 index 0000000..fdafe8e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_俯视.webp new file mode 100644 index 0000000..9d9993d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_斜侧.webp new file mode 100644 index 0000000..9eea88f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_正面.webp new file mode 100644 index 0000000..b3abc5a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P020_双手捧脸/P020_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_仰视.webp new file mode 100644 index 0000000..2808081 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_侧面.webp new file mode 100644 index 0000000..298ca75 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_俯视.webp new file mode 100644 index 0000000..8206fba Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_斜侧.webp new file mode 100644 index 0000000..5ce59d1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_正面.webp new file mode 100644 index 0000000..670bae8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P021_敬礼姿势/P021_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_仰视.webp new file mode 100644 index 0000000..413fd18 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_侧面.webp new file mode 100644 index 0000000..b517f3d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_俯视.webp new file mode 100644 index 0000000..8ce1c06 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_斜侧.webp new file mode 100644 index 0000000..c201922 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_正面.webp new file mode 100644 index 0000000..738d418 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P022_手指镜头/P022_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_仰视.webp new file mode 100644 index 0000000..889f058 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_侧面.webp new file mode 100644 index 0000000..d9dae78 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_俯视.webp new file mode 100644 index 0000000..fc5b4e8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_斜侧.webp new file mode 100644 index 0000000..e249ede Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_正面.webp new file mode 100644 index 0000000..70adfeb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P023_打哈欠伸懒腰(单手掩口)/P023_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_仰视.webp new file mode 100644 index 0000000..e842b13 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_侧面.webp new file mode 100644 index 0000000..f3741cd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_俯视.webp new file mode 100644 index 0000000..d0ac94d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_斜侧.webp new file mode 100644 index 0000000..b534f1f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_正面.webp new file mode 100644 index 0000000..38a5017 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P024_单手比心+另一手抚胸/P024_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_仰视.webp new file mode 100644 index 0000000..8b273a2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_侧面.webp new file mode 100644 index 0000000..fb0bc12 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_俯视.webp new file mode 100644 index 0000000..fc881b0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_斜侧.webp new file mode 100644 index 0000000..e65475e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_正面.webp new file mode 100644 index 0000000..7fc80a3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/可爱系/P025_从双手指缝间窥视/P025_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_仰视.webp new file mode 100644 index 0000000..4285a20 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_侧面.webp new file mode 100644 index 0000000..dcb4816 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_俯视.webp new file mode 100644 index 0000000..53c1224 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_斜侧.webp new file mode 100644 index 0000000..5f43b19 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_正面.webp new file mode 100644 index 0000000..ac869b8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P051_双手捧胸/P051_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_仰视.webp new file mode 100644 index 0000000..869bd8c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_侧面.webp new file mode 100644 index 0000000..5b9a75b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_俯视.webp new file mode 100644 index 0000000..802fab7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_斜侧.webp new file mode 100644 index 0000000..cb828eb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_正面.webp new file mode 100644 index 0000000..82716ac Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P052_双手揉胸/P052_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_仰视.webp new file mode 100644 index 0000000..1385f2c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_侧面.webp new file mode 100644 index 0000000..ba2b48c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_俯视.webp new file mode 100644 index 0000000..c05feeb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_斜侧.webp new file mode 100644 index 0000000..eb3adf0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_正面.webp new file mode 100644 index 0000000..f06bc43 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P053_手掌遮掩(双手遮蔽)/P053_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_仰视.webp new file mode 100644 index 0000000..8c86b54 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_侧面.webp new file mode 100644 index 0000000..35b5cca Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_俯视.webp new file mode 100644 index 0000000..83ace03 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_斜侧.webp new file mode 100644 index 0000000..562d1fd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_正面.webp new file mode 100644 index 0000000..321acbd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P054_单手遮掩・一手扶腰/P054_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_仰视.webp new file mode 100644 index 0000000..b88cb47 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_侧面.webp new file mode 100644 index 0000000..9a0eccd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_俯视.webp new file mode 100644 index 0000000..c2c9908 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_斜侧.webp new file mode 100644 index 0000000..f419b10 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_正面.webp new file mode 100644 index 0000000..64bef5d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P055_单手揉胸・单手撩发/P055_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_仰视.webp new file mode 100644 index 0000000..46fe27e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_侧面.webp new file mode 100644 index 0000000..87fca6d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_俯视.webp new file mode 100644 index 0000000..ce6f190 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_斜侧.webp new file mode 100644 index 0000000..e000240 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_正面.webp new file mode 100644 index 0000000..24a2181 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P056_褪下肩带动作/P056_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_仰视.webp new file mode 100644 index 0000000..916bb14 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_侧面.webp new file mode 100644 index 0000000..056b356 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_俯视.webp new file mode 100644 index 0000000..a1a4693 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_斜侧.webp new file mode 100644 index 0000000..5acb387 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_正面.webp new file mode 100644 index 0000000..34f3267 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P057_双手撩发大幅后仰/P057_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_仰视.webp new file mode 100644 index 0000000..b0c5009 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_侧面.webp new file mode 100644 index 0000000..0d610c5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_俯视.webp new file mode 100644 index 0000000..fe765de Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_斜侧.webp new file mode 100644 index 0000000..9c9977d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_正面.webp new file mode 100644 index 0000000..f7e7512 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P058_双手抱头・展露腋下/P058_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_仰视.webp new file mode 100644 index 0000000..f2d5bc4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_侧面.webp new file mode 100644 index 0000000..d71784e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_俯视.webp new file mode 100644 index 0000000..5a07f46 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_斜侧.webp new file mode 100644 index 0000000..cbe9f28 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_正面.webp new file mode 100644 index 0000000..8aec6fa Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P059_手指沿胸下缘滑动/P059_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_仰视.webp new file mode 100644 index 0000000..34d39f7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_侧面.webp new file mode 100644 index 0000000..087503e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_俯视.webp new file mode 100644 index 0000000..3412589 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_斜侧.webp new file mode 100644 index 0000000..3f8e1cc Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_正面.webp new file mode 100644 index 0000000..10336b8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P060_手指抵唇+单手抚胸/P060_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_仰视.webp new file mode 100644 index 0000000..7acdb40 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_侧面.webp new file mode 100644 index 0000000..e799bbc Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_俯视.webp new file mode 100644 index 0000000..8d74f25 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_斜侧.webp new file mode 100644 index 0000000..3c3470c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_正面.webp new file mode 100644 index 0000000..36fe1b8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P061_指尖遮掩胸前/P061_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_仰视.webp new file mode 100644 index 0000000..9122a78 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_侧面.webp new file mode 100644 index 0000000..1e2a9ad Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_俯视.webp new file mode 100644 index 0000000..89a6c7b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_斜侧.webp new file mode 100644 index 0000000..1572910 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_正面.webp new file mode 100644 index 0000000..65a8d72 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P062_单手抚胸・单手抚腹/P062_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_仰视.webp new file mode 100644 index 0000000..2f3a3bd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_侧面.webp new file mode 100644 index 0000000..c32dbcd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_俯视.webp new file mode 100644 index 0000000..86c7d55 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_斜侧.webp new file mode 100644 index 0000000..af0a644 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_正面.webp new file mode 100644 index 0000000..6cfe355 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P063_双手后撑・挺胸突出/P063_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_仰视.webp new file mode 100644 index 0000000..acee9a1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_侧面.webp new file mode 100644 index 0000000..81d0d07 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_俯视.webp new file mode 100644 index 0000000..ec1cd6e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_斜侧.webp new file mode 100644 index 0000000..869950e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_正面.webp new file mode 100644 index 0000000..cfd0f59 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P064_俯卧单手托胸/P064_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_仰视.webp new file mode 100644 index 0000000..2f37fa0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_侧面.webp new file mode 100644 index 0000000..d333246 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_俯视.webp new file mode 100644 index 0000000..ca3bf66 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_斜侧.webp new file mode 100644 index 0000000..ec020df Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_正面.webp new file mode 100644 index 0000000..cdbb7db Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P065_四肢着地・挺背后仰仰望/P065_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_仰视.webp new file mode 100644 index 0000000..18df25c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_侧面.webp new file mode 100644 index 0000000..c228a0a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_俯视.webp new file mode 100644 index 0000000..ad32f39 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_斜侧.webp new file mode 100644 index 0000000..9c87564 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_正面.webp new file mode 100644 index 0000000..bc0e848 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P066_四肢着地・单手抚胸/P066_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_仰视.webp new file mode 100644 index 0000000..c5b8aeb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_侧面.webp new file mode 100644 index 0000000..b22a0ea Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_俯视.webp new file mode 100644 index 0000000..3a790ee Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_斜侧.webp new file mode 100644 index 0000000..746833d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_正面.webp new file mode 100644 index 0000000..4541fda Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P067_豹式伸展(正面)/P067_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_仰视.webp new file mode 100644 index 0000000..1f45bc8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_侧面.webp new file mode 100644 index 0000000..02a6443 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_俯视.webp new file mode 100644 index 0000000..c85f81d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_斜侧.webp new file mode 100644 index 0000000..6ff1914 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_正面.webp new file mode 100644 index 0000000..15d69ff Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P068_跪立后仰・手触脚跟/P068_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_仰视.webp new file mode 100644 index 0000000..48bdae4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_侧面.webp new file mode 100644 index 0000000..4df5bef Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_俯视.webp new file mode 100644 index 0000000..dfc27df Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_斜侧.webp new file mode 100644 index 0000000..463cf7d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_正面.webp new file mode 100644 index 0000000..fd9d72d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P069_跪立・双手抱后脑/P069_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_仰视.webp new file mode 100644 index 0000000..22c621a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_侧面.webp new file mode 100644 index 0000000..d71926b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_俯视.webp new file mode 100644 index 0000000..af88331 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_斜侧.webp new file mode 100644 index 0000000..3b4ba05 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_正面.webp new file mode 100644 index 0000000..bf16630 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P070_手指含于唇边/P070_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_仰视.webp new file mode 100644 index 0000000..54ebdc9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_侧面.webp new file mode 100644 index 0000000..ec4ff08 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_俯视.webp new file mode 100644 index 0000000..f4dcb60 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_斜侧.webp new file mode 100644 index 0000000..950d1d7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_正面.webp new file mode 100644 index 0000000..628f886 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P071_抓握颈侧后仰/P071_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_仰视.webp new file mode 100644 index 0000000..580b967 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_侧面.webp new file mode 100644 index 0000000..f21b842 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_俯视.webp new file mode 100644 index 0000000..2cfa7dd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_斜侧.webp new file mode 100644 index 0000000..ada777b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_正面.webp new file mode 100644 index 0000000..6f96c0a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P072_双手向内挤并挺出/P072_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_仰视.webp new file mode 100644 index 0000000..02e6f2b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_侧面.webp new file mode 100644 index 0000000..41e1f70 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_俯视.webp new file mode 100644 index 0000000..75238fe Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_斜侧.webp new file mode 100644 index 0000000..f715c50 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_正面.webp new file mode 100644 index 0000000..174d15f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P073_侧卧・抱胸/P073_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_仰视.webp new file mode 100644 index 0000000..519996d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_侧面.webp new file mode 100644 index 0000000..defdc58 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_俯视.webp new file mode 100644 index 0000000..462898f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_斜侧.webp new file mode 100644 index 0000000..35ea0c1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_正面.webp new file mode 100644 index 0000000..d0f31a0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P074_仰卧・双手抚胸/P074_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_仰视.webp new file mode 100644 index 0000000..620eea6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_侧面.webp new file mode 100644 index 0000000..91f14f0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_俯视.webp new file mode 100644 index 0000000..821f4ce Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_斜侧.webp new file mode 100644 index 0000000..bd02efe Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_正面.webp new file mode 100644 index 0000000..27ab56f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P075_仰卧・双臂上举挺身/P075_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_仰视.webp new file mode 100644 index 0000000..d896be5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_侧面.webp new file mode 100644 index 0000000..c9423ab Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_俯视.webp new file mode 100644 index 0000000..7ad8a87 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_斜侧.webp new file mode 100644 index 0000000..7057197 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_正面.webp new file mode 100644 index 0000000..cd3014a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P076_前倾・手放大腿内侧/P076_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_仰视.webp new file mode 100644 index 0000000..31954e1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_侧面.webp new file mode 100644 index 0000000..ba7c81a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_俯视.webp new file mode 100644 index 0000000..5ed4b71 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_斜侧.webp new file mode 100644 index 0000000..ecd0aae Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_正面.webp new file mode 100644 index 0000000..301e2f8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P077_背后解挂钩动作/P077_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_仰视.webp new file mode 100644 index 0000000..c360237 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_侧面.webp new file mode 100644 index 0000000..319bf75 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_俯视.webp new file mode 100644 index 0000000..acad61f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_斜侧.webp new file mode 100644 index 0000000..e78eb45 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_正面.webp new file mode 100644 index 0000000..01bbd1a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P078_单手遮掩・另一手托起/P078_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_仰视.webp new file mode 100644 index 0000000..bbd86af Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_侧面.webp new file mode 100644 index 0000000..efa201e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_俯视.webp new file mode 100644 index 0000000..0f1e34a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_斜侧.webp new file mode 100644 index 0000000..a96bc44 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_正面.webp new file mode 100644 index 0000000..a23d417 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P079_手探入胸前沟壑/P079_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_仰视.webp new file mode 100644 index 0000000..ed1fa60 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_侧面.webp new file mode 100644 index 0000000..9d44da8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_俯视.webp new file mode 100644 index 0000000..eabf5d9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_斜侧.webp new file mode 100644 index 0000000..2251b79 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_正面.webp new file mode 100644 index 0000000..a77296a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/性感・大胆系/P080_俯视视角・双手抚胸・上目线/P080_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_仰视.webp new file mode 100644 index 0000000..c5e070b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_侧面.webp new file mode 100644 index 0000000..83786c9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_俯视.webp new file mode 100644 index 0000000..a7b3f69 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_斜侧.webp new file mode 100644 index 0000000..d4d0cba Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_正面.webp new file mode 100644 index 0000000..a5ff915 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P026_双手比心贴脸(前倾挤胸)/P026_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_仰视.webp new file mode 100644 index 0000000..405c251 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_侧面.webp new file mode 100644 index 0000000..45942b5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_俯视.webp new file mode 100644 index 0000000..a5feffd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_斜侧.webp new file mode 100644 index 0000000..2ebb9f9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_正面.webp new file mode 100644 index 0000000..81a8237 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P027_雏人形式(双手扶膝)/P027_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_仰视.webp new file mode 100644 index 0000000..a132eb8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_侧面.webp new file mode 100644 index 0000000..ab5903c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_俯视.webp new file mode 100644 index 0000000..9e78760 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_斜侧.webp new file mode 100644 index 0000000..2408ff7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_正面.webp new file mode 100644 index 0000000..03dd3b7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P028_手肘挤胸・扭转腰身/P028_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_仰视.webp new file mode 100644 index 0000000..f6c05f3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_侧面.webp new file mode 100644 index 0000000..97dcdf5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_俯视.webp new file mode 100644 index 0000000..e0134e1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_斜侧.webp new file mode 100644 index 0000000..4180851 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_正面.webp new file mode 100644 index 0000000..74f7ae4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P029_耸肩挤胸(双手下方交叠)/P029_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_仰视.webp new file mode 100644 index 0000000..94dc9a9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_侧面.webp new file mode 100644 index 0000000..7602e0d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_俯视.webp new file mode 100644 index 0000000..13e3eb5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_斜侧.webp new file mode 100644 index 0000000..98340af Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_正面.webp new file mode 100644 index 0000000..584ae5e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P030_双臂于胸下交叉托起/P030_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_仰视.webp new file mode 100644 index 0000000..9b1ec18 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_侧面.webp new file mode 100644 index 0000000..aaa0a36 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_俯视.webp new file mode 100644 index 0000000..1e9cce5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_斜侧.webp new file mode 100644 index 0000000..2a8069e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_正面.webp new file mode 100644 index 0000000..a4cc6b1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P031_双手自下托起/P031_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_仰视.webp new file mode 100644 index 0000000..b8b8d17 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_侧面.webp new file mode 100644 index 0000000..8edbd99 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_俯视.webp new file mode 100644 index 0000000..9bbd6c1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_斜侧.webp new file mode 100644 index 0000000..1581c61 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_正面.webp new file mode 100644 index 0000000..ce46bc5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P032_胸伏桌面/P032_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_仰视.webp new file mode 100644 index 0000000..d7b7c3a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_侧面.webp new file mode 100644 index 0000000..94ef453 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_俯视.webp new file mode 100644 index 0000000..3ecafe5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_斜侧.webp new file mode 100644 index 0000000..4e18316 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_正面.webp new file mode 100644 index 0000000..1e2ecf2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P033_前臂竖立・从两侧夹紧/P033_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_仰视.webp new file mode 100644 index 0000000..e954279 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_侧面.webp new file mode 100644 index 0000000..fe0d3ff Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_俯视.webp new file mode 100644 index 0000000..beb689e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_斜侧.webp new file mode 100644 index 0000000..69334ab Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_正面.webp new file mode 100644 index 0000000..f83308a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P034_单臂托起胸部/P034_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_仰视.webp new file mode 100644 index 0000000..469aea4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_侧面.webp new file mode 100644 index 0000000..631301c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_俯视.webp new file mode 100644 index 0000000..5b260b8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_斜侧.webp new file mode 100644 index 0000000..49a3a48 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_正面.webp new file mode 100644 index 0000000..3c83abe Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P035_俯视构图・双手放锁骨/P035_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_仰视.webp new file mode 100644 index 0000000..227d759 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_侧面.webp new file mode 100644 index 0000000..df31b4e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_俯视.webp new file mode 100644 index 0000000..4c2f490 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_斜侧.webp new file mode 100644 index 0000000..b92d8bb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_正面.webp new file mode 100644 index 0000000..dae95a4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P036_双手掐腰挺胸/P036_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_仰视.webp new file mode 100644 index 0000000..f66507f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_侧面.webp new file mode 100644 index 0000000..d096555 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_俯视.webp new file mode 100644 index 0000000..bcd379c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_斜侧.webp new file mode 100644 index 0000000..83deef0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_正面.webp new file mode 100644 index 0000000..973d884 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P037_双手从两侧挤胸/P037_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_仰视.webp new file mode 100644 index 0000000..a42255b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_侧面.webp new file mode 100644 index 0000000..cc68125 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_俯视.webp new file mode 100644 index 0000000..4679d67 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_斜侧.webp new file mode 100644 index 0000000..98a96fb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_正面.webp new file mode 100644 index 0000000..bc9e268 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P038_双手背后交握・挺胸/P038_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_仰视.webp new file mode 100644 index 0000000..5a1e44b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_侧面.webp new file mode 100644 index 0000000..b836be9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_俯视.webp new file mode 100644 index 0000000..cc8b41c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_斜侧.webp new file mode 100644 index 0000000..1d0df9a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_正面.webp new file mode 100644 index 0000000..176a589 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P039_跪立・双手前撑・身体前压/P039_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_仰视.webp new file mode 100644 index 0000000..e2981e9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_侧面.webp new file mode 100644 index 0000000..1d4b3c6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_俯视.webp new file mode 100644 index 0000000..c42385f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_斜侧.webp new file mode 100644 index 0000000..569362e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_正面.webp new file mode 100644 index 0000000..32b5a2d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P040_单肘撑膝托腮/P040_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_仰视.webp new file mode 100644 index 0000000..249f587 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_侧面.webp new file mode 100644 index 0000000..5aeb720 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_俯视.webp new file mode 100644 index 0000000..2ded83e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_斜侧.webp new file mode 100644 index 0000000..dd55040 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_正面.webp new file mode 100644 index 0000000..b4f06c3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P041_双臂抱胸/P041_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_仰视.webp new file mode 100644 index 0000000..2a3db72 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_侧面.webp new file mode 100644 index 0000000..98973a5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_俯视.webp new file mode 100644 index 0000000..c22fec9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_斜侧.webp new file mode 100644 index 0000000..ab918a7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_正面.webp new file mode 100644 index 0000000..ad066ea Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P042_单手挤胸・单手抚发/P042_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_仰视.webp new file mode 100644 index 0000000..8921cab Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_侧面.webp new file mode 100644 index 0000000..b3d7306 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_俯视.webp new file mode 100644 index 0000000..65c4d42 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_斜侧.webp new file mode 100644 index 0000000..ca2513e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_正面.webp new file mode 100644 index 0000000..af7795c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P043_单肩下沉・身体前倾/P043_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_仰视.webp new file mode 100644 index 0000000..5e126d7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_侧面.webp new file mode 100644 index 0000000..09a81ca Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_俯视.webp new file mode 100644 index 0000000..36a4d12 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_斜侧.webp new file mode 100644 index 0000000..a2be3ac Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_正面.webp new file mode 100644 index 0000000..1623383 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P044_俯卧肘撑挤胸/P044_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_仰视.webp new file mode 100644 index 0000000..3796e5f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_侧面.webp new file mode 100644 index 0000000..896d873 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_俯视.webp new file mode 100644 index 0000000..426346f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_斜侧.webp new file mode 100644 index 0000000..5984a33 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_正面.webp new file mode 100644 index 0000000..991297f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P045_后仰・双臂夹紧/P045_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_仰视.webp new file mode 100644 index 0000000..eb05a11 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_侧面.webp new file mode 100644 index 0000000..b11d8df Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_俯视.webp new file mode 100644 index 0000000..d88f5e8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_斜侧.webp new file mode 100644 index 0000000..44f7fb6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_正面.webp new file mode 100644 index 0000000..ba5e1a2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P046_单臂绕腰・一手抚颈/P046_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_仰视.webp new file mode 100644 index 0000000..cf5ef5b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_侧面.webp new file mode 100644 index 0000000..54283fb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_俯视.webp new file mode 100644 index 0000000..64a8a5d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_斜侧.webp new file mode 100644 index 0000000..a6b7a06 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_正面.webp new file mode 100644 index 0000000..05beb0d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P047_双手置上胸向内挤/P047_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_仰视.webp new file mode 100644 index 0000000..c053bbf Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_侧面.webp new file mode 100644 index 0000000..3fb6d7c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_俯视.webp new file mode 100644 index 0000000..c6d52e1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_斜侧.webp new file mode 100644 index 0000000..20e429f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_正面.webp new file mode 100644 index 0000000..f222bd2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P048_手背托腮前倾/P048_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_仰视.webp new file mode 100644 index 0000000..28401e2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_侧面.webp new file mode 100644 index 0000000..4caee08 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_俯视.webp new file mode 100644 index 0000000..435ce6f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_斜侧.webp new file mode 100644 index 0000000..ea07690 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_正面.webp new file mode 100644 index 0000000..1859c32 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P049_四肢着地俯视(胸口视角)/P049_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_仰视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_仰视.webp new file mode 100644 index 0000000..73be59b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_侧面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_侧面.webp new file mode 100644 index 0000000..8e05c42 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_俯视.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_俯视.webp new file mode 100644 index 0000000..0b6da8a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_斜侧.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_斜侧.webp new file mode 100644 index 0000000..5908735 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_正面.webp b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_正面.webp new file mode 100644 index 0000000..87dd660 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/上半身单人/挤胸・强调事业线系/P050_双臂环抱托胸/P050_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_仰视.webp new file mode 100644 index 0000000..22c1b4d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_侧面.webp new file mode 100644 index 0000000..75d3693 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_俯视.webp new file mode 100644 index 0000000..4d05dd0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_斜侧.webp new file mode 100644 index 0000000..135eae5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_正面.webp new file mode 100644 index 0000000..dd58f6d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P041_女孩坐・双手扶腿/P041_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_仰视.webp new file mode 100644 index 0000000..18a818c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_侧面.webp new file mode 100644 index 0000000..f79fabd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_俯视.webp new file mode 100644 index 0000000..de6968f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_斜侧.webp new file mode 100644 index 0000000..49242ed Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_正面.webp new file mode 100644 index 0000000..2217cec Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P042_女孩坐・双手前撑/P042_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_仰视.webp new file mode 100644 index 0000000..cff3cb8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_侧面.webp new file mode 100644 index 0000000..87f0d89 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_俯视.webp new file mode 100644 index 0000000..6853ca1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_斜侧.webp new file mode 100644 index 0000000..9eb73d8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_正面.webp new file mode 100644 index 0000000..5132fde Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P043_女孩坐・双手抱头后/P043_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_仰视.webp new file mode 100644 index 0000000..257af22 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_侧面.webp new file mode 100644 index 0000000..ea453fd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_俯视.webp new file mode 100644 index 0000000..187a8f4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_斜侧.webp new file mode 100644 index 0000000..6f883f0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_正面.webp new file mode 100644 index 0000000..0e538da Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P044_女孩坐・双手后撑/P044_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_仰视.webp new file mode 100644 index 0000000..c096cf4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_侧面.webp new file mode 100644 index 0000000..65ba7ad Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_俯视.webp new file mode 100644 index 0000000..06e8976 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_斜侧.webp new file mode 100644 index 0000000..e33a0e1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_正面.webp new file mode 100644 index 0000000..58b4383 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P045_侧坐・双腿斜向右侧/P045_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_仰视.webp new file mode 100644 index 0000000..22529f5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_侧面.webp new file mode 100644 index 0000000..0ae91c9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_俯视.webp new file mode 100644 index 0000000..fc3e8e4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_斜侧.webp new file mode 100644 index 0000000..5aa6bcd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_正面.webp new file mode 100644 index 0000000..a7fc2bc Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P046_侧坐・手扶脸颊/P046_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_仰视.webp new file mode 100644 index 0000000..6e6341f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_侧面.webp new file mode 100644 index 0000000..82e182e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_俯视.webp new file mode 100644 index 0000000..c2f4284 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_斜侧.webp new file mode 100644 index 0000000..73e9e80 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_正面.webp new file mode 100644 index 0000000..0428fbd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P047_侧坐・单臂上伸/P047_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_仰视.webp new file mode 100644 index 0000000..f159a36 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_侧面.webp new file mode 100644 index 0000000..cd09ee4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_俯视.webp new file mode 100644 index 0000000..0a63364 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_斜侧.webp new file mode 100644 index 0000000..db376b7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_正面.webp new file mode 100644 index 0000000..64a018d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/侧坐・女孩坐/P048_女孩坐・手抚颈侧/P048_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_仰视.webp new file mode 100644 index 0000000..6c6cb5b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_侧面.webp new file mode 100644 index 0000000..a4ec41c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_俯视.webp new file mode 100644 index 0000000..2a8706e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_斜侧.webp new file mode 100644 index 0000000..299d988 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_正面.webp new file mode 100644 index 0000000..7ee4ecc Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P067_前倾・手扶膝/P067_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_仰视.webp new file mode 100644 index 0000000..61f431f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_侧面.webp new file mode 100644 index 0000000..687e860 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_俯视.webp new file mode 100644 index 0000000..472a751 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_斜侧.webp new file mode 100644 index 0000000..74431b0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_正面.webp new file mode 100644 index 0000000..6352f26 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P068_前倾・手触小腿/P068_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_仰视.webp new file mode 100644 index 0000000..a5ccc58 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_侧面.webp new file mode 100644 index 0000000..da88215 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_俯视.webp new file mode 100644 index 0000000..777b455 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_斜侧.webp new file mode 100644 index 0000000..9393d7e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_正面.webp new file mode 100644 index 0000000..82e5b33 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P069_前倾・单手扶腰・仰望/P069_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_仰视.webp new file mode 100644 index 0000000..6043057 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_侧面.webp new file mode 100644 index 0000000..a490a56 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_俯视.webp new file mode 100644 index 0000000..a903a74 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_斜侧.webp new file mode 100644 index 0000000..1e5b9bb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_正面.webp new file mode 100644 index 0000000..c60390f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P070_前倾・手扶大腿・臀部后坐/P070_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_仰视.webp new file mode 100644 index 0000000..92fb4a6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_侧面.webp new file mode 100644 index 0000000..ded5a2d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_俯视.webp new file mode 100644 index 0000000..4c30ca7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_斜侧.webp new file mode 100644 index 0000000..f9cfaf3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_正面.webp new file mode 100644 index 0000000..7ac16f4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P071_前倾・双臂自然下垂/P071_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_仰视.webp new file mode 100644 index 0000000..6f32798 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_侧面.webp new file mode 100644 index 0000000..2829b10 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_俯视.webp new file mode 100644 index 0000000..1ed779e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_斜侧.webp new file mode 100644 index 0000000..1adfbf4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_正面.webp new file mode 100644 index 0000000..d86b9c1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/前倾/P072_前倾・单腿后抬/P072_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_仰视.webp new file mode 100644 index 0000000..6e95115 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_侧面.webp new file mode 100644 index 0000000..334730b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_俯视.webp new file mode 100644 index 0000000..c8fc4a2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_斜侧.webp new file mode 100644 index 0000000..7ecf779 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_正面.webp new file mode 100644 index 0000000..6193333 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P073_后仰・站姿挺背/P073_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_仰视.webp new file mode 100644 index 0000000..5f5fef4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_侧面.webp new file mode 100644 index 0000000..caf66df Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_俯视.webp new file mode 100644 index 0000000..9b85ae6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_斜侧.webp new file mode 100644 index 0000000..e91b533 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_正面.webp new file mode 100644 index 0000000..1782c96 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P074_跪立・双手后撑后仰/P074_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_仰视.webp new file mode 100644 index 0000000..3155b39 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_侧面.webp new file mode 100644 index 0000000..7259fb5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_俯视.webp new file mode 100644 index 0000000..b1d0c73 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_斜侧.webp new file mode 100644 index 0000000..425c700 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_正面.webp new file mode 100644 index 0000000..07aeff4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/后仰・挺背/P075_后仰・双臂上举挺身/P075_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_仰视.webp new file mode 100644 index 0000000..4646c6a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_侧面.webp new file mode 100644 index 0000000..d3139db Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_俯视.webp new file mode 100644 index 0000000..125fc4d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_斜侧.webp new file mode 100644 index 0000000..d2837b7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_正面.webp new file mode 100644 index 0000000..3a7050e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P001_后仰坐・单膝立起/P001_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_仰视.webp new file mode 100644 index 0000000..eabd3a3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_侧面.webp new file mode 100644 index 0000000..af90fcc Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_俯视.webp new file mode 100644 index 0000000..c1f8980 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_斜侧.webp new file mode 100644 index 0000000..8aa6194 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_正面.webp new file mode 100644 index 0000000..416afd5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P002_单手支撑・双腿斜向前伸/P002_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_仰视.webp new file mode 100644 index 0000000..a641632 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_侧面.webp new file mode 100644 index 0000000..cafaf14 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_俯视.webp new file mode 100644 index 0000000..142d769 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_斜侧.webp new file mode 100644 index 0000000..15db264 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_正面.webp new file mode 100644 index 0000000..e923174 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P003_双手后撑挺胸/P003_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_仰视.webp new file mode 100644 index 0000000..a3de06e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_侧面.webp new file mode 100644 index 0000000..553bf2a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_俯视.webp new file mode 100644 index 0000000..4c7565c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_斜侧.webp new file mode 100644 index 0000000..a8d5d17 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_正面.webp new file mode 100644 index 0000000..3b2af06 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P004_三角坐・双膝左倾/P004_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_仰视.webp new file mode 100644 index 0000000..c440cee Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_侧面.webp new file mode 100644 index 0000000..fa19842 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_俯视.webp new file mode 100644 index 0000000..ed5329d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_斜侧.webp new file mode 100644 index 0000000..40ba8b5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_正面.webp new file mode 100644 index 0000000..8dcd12f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P005_单膝立起・手抚发/P005_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_仰视.webp new file mode 100644 index 0000000..a88fee7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_侧面.webp new file mode 100644 index 0000000..827b757 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_俯视.webp new file mode 100644 index 0000000..0870a06 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_斜侧.webp new file mode 100644 index 0000000..eb9fa5b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_正面.webp new file mode 100644 index 0000000..1adb7d9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P006_双腿斜伸・手扶腰/P006_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_仰视.webp new file mode 100644 index 0000000..c521f1f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_侧面.webp new file mode 100644 index 0000000..b156ed0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_俯视.webp new file mode 100644 index 0000000..7ac3dfd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_斜侧.webp new file mode 100644 index 0000000..8eb9d98 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_正面.webp new file mode 100644 index 0000000..69eb40c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P007_双肘支撑斜倚坐/P007_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_仰视.webp new file mode 100644 index 0000000..d3a4d8b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_侧面.webp new file mode 100644 index 0000000..8ffbd37 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_俯视.webp new file mode 100644 index 0000000..7962b56 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_斜侧.webp new file mode 100644 index 0000000..c449d1d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_正面.webp new file mode 100644 index 0000000..17ffd76 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P008_单膝立起・双手抱头后/P008_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_仰视.webp new file mode 100644 index 0000000..2c4aa5f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_侧面.webp new file mode 100644 index 0000000..0acc1b3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_俯视.webp new file mode 100644 index 0000000..7ee8cf7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_斜侧.webp new file mode 100644 index 0000000..52532d1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_正面.webp new file mode 100644 index 0000000..5b04231 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P009_向右倾・肘部支撑/P009_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_仰视.webp new file mode 100644 index 0000000..feb1d57 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_侧面.webp new file mode 100644 index 0000000..25ff954 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_俯视.webp new file mode 100644 index 0000000..7da8c93 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_斜侧.webp new file mode 100644 index 0000000..25bf364 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_正面.webp new file mode 100644 index 0000000..838a954 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P010_手抚脚踝/P010_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_仰视.webp new file mode 100644 index 0000000..749b98f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_侧面.webp new file mode 100644 index 0000000..d2fa99f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_俯视.webp new file mode 100644 index 0000000..2400ed9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_斜侧.webp new file mode 100644 index 0000000..efb34ba Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_正面.webp new file mode 100644 index 0000000..a3d08f1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P011_双手抱头・挺胸后仰/P011_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_仰视.webp new file mode 100644 index 0000000..8aa82a0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_侧面.webp new file mode 100644 index 0000000..df64e89 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_俯视.webp new file mode 100644 index 0000000..59e937a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_斜侧.webp new file mode 100644 index 0000000..f21c593 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_正面.webp new file mode 100644 index 0000000..8800c3c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P012_单膝立起・托腮/P012_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_仰视.webp new file mode 100644 index 0000000..5e34a4c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_侧面.webp new file mode 100644 index 0000000..f61302b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_俯视.webp new file mode 100644 index 0000000..e77c062 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_斜侧.webp new file mode 100644 index 0000000..581925d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_正面.webp new file mode 100644 index 0000000..5e55f9c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P013_双腿悬空后倚/P013_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_仰视.webp new file mode 100644 index 0000000..7b6a13e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_侧面.webp new file mode 100644 index 0000000..6d44c95 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_俯视.webp new file mode 100644 index 0000000..f748d52 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_斜侧.webp new file mode 100644 index 0000000..f1d7b95 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_正面.webp new file mode 100644 index 0000000..70b964d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/坐姿/P014_握脚踝・单膝立起/P014_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_仰视.webp new file mode 100644 index 0000000..add4075 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_侧面.webp new file mode 100644 index 0000000..d224455 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_俯视.webp new file mode 100644 index 0000000..506455a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_斜侧.webp new file mode 100644 index 0000000..23aa2ed Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_正面.webp new file mode 100644 index 0000000..822aed4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P077_扭身・站姿展臂/P077_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_仰视.webp new file mode 100644 index 0000000..504d7a8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_侧面.webp new file mode 100644 index 0000000..958281d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_俯视.webp new file mode 100644 index 0000000..34c8cca Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_斜侧.webp new file mode 100644 index 0000000..c5ac65e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_正面.webp new file mode 100644 index 0000000..6a3b8e0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P078_扭身・跪立回望/P078_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_仰视.webp new file mode 100644 index 0000000..4de2648 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_侧面.webp new file mode 100644 index 0000000..cbd1517 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_俯视.webp new file mode 100644 index 0000000..6ed97bd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_斜侧.webp new file mode 100644 index 0000000..ef285e8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_正面.webp new file mode 100644 index 0000000..d9d1db9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/扭身/P079_扭身・坐姿上体扭转/P079_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_仰视.webp new file mode 100644 index 0000000..f1a779d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_侧面.webp new file mode 100644 index 0000000..3b0d2df Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_俯视.webp new file mode 100644 index 0000000..748075b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_斜侧.webp new file mode 100644 index 0000000..7eebdac Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_正面.webp new file mode 100644 index 0000000..3897bea Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P015_站立・对立式平衡・手扶腰/P015_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_仰视.webp new file mode 100644 index 0000000..4972e9a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_侧面.webp new file mode 100644 index 0000000..4bc7dd8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_俯视.webp new file mode 100644 index 0000000..b0b4b14 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_斜侧.webp new file mode 100644 index 0000000..0bd837a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_正面.webp new file mode 100644 index 0000000..4e4edbb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P016_站立・双手撩发/P016_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_仰视.webp new file mode 100644 index 0000000..fb4b5f5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_侧面.webp new file mode 100644 index 0000000..9238e40 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_俯视.webp new file mode 100644 index 0000000..59441fc Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_斜侧.webp new file mode 100644 index 0000000..3115086 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_正面.webp new file mode 100644 index 0000000..2f80d69 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P017_站立・回眸顾盼/P017_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_仰视.webp new file mode 100644 index 0000000..3faa7af Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_侧面.webp new file mode 100644 index 0000000..0d52508 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_俯视.webp new file mode 100644 index 0000000..e50b67b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_斜侧.webp new file mode 100644 index 0000000..b1fd3a4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_正面.webp new file mode 100644 index 0000000..ab7121b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P018_站立・双手扶腰/P018_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_仰视.webp new file mode 100644 index 0000000..a2dd80d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_侧面.webp new file mode 100644 index 0000000..f66f168 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_俯视.webp new file mode 100644 index 0000000..7407e9f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_斜侧.webp new file mode 100644 index 0000000..cfd80ae Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_正面.webp new file mode 100644 index 0000000..271f98a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P019_站立・双臂上举伸展/P019_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_仰视.webp new file mode 100644 index 0000000..a03203a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_侧面.webp new file mode 100644 index 0000000..c25677b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_俯视.webp new file mode 100644 index 0000000..5b18ba5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_斜侧.webp new file mode 100644 index 0000000..2930ade Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_正面.webp new file mode 100644 index 0000000..ea5436d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P020_站立・单手抚后脑/P020_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_仰视.webp new file mode 100644 index 0000000..9185b1c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_侧面.webp new file mode 100644 index 0000000..58f5be3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_俯视.webp new file mode 100644 index 0000000..23329a1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_斜侧.webp new file mode 100644 index 0000000..8ddcfd1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_正面.webp new file mode 100644 index 0000000..289a039 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P021_站立・一手抚颈一手扶腿/P021_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_仰视.webp new file mode 100644 index 0000000..ffe5591 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_侧面.webp new file mode 100644 index 0000000..5499626 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_俯视.webp new file mode 100644 index 0000000..ac71b73 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_斜侧.webp new file mode 100644 index 0000000..e73ac17 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_正面.webp new file mode 100644 index 0000000..84e8f4e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P022_站立・双臂后展挺胸/P022_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_仰视.webp new file mode 100644 index 0000000..31e90d6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_侧面.webp new file mode 100644 index 0000000..0cd07d4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_俯视.webp new file mode 100644 index 0000000..2d7ebf7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_斜侧.webp new file mode 100644 index 0000000..30093b7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_正面.webp new file mode 100644 index 0000000..98b9ef0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P024_站立・单腿后抬/P024_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_仰视.webp new file mode 100644 index 0000000..fe28b34 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_侧面.webp new file mode 100644 index 0000000..8011414 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_俯视.webp new file mode 100644 index 0000000..3668804 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_斜侧.webp new file mode 100644 index 0000000..ab3220c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_正面.webp new file mode 100644 index 0000000..f2f6095 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P025_站立・分腿双手扶腰/P025_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_仰视.webp new file mode 100644 index 0000000..203174a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_侧面.webp new file mode 100644 index 0000000..418fcd8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_俯视.webp new file mode 100644 index 0000000..615372e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_斜侧.webp new file mode 100644 index 0000000..6e99c2a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_正面.webp new file mode 100644 index 0000000..3c7954c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P026_站立・单臂上举顶胯/P026_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_仰视.webp new file mode 100644 index 0000000..b454c7a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_侧面.webp new file mode 100644 index 0000000..774cfc6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_俯视.webp new file mode 100644 index 0000000..ed59fb7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_斜侧.webp new file mode 100644 index 0000000..14a4bc6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_正面.webp new file mode 100644 index 0000000..4745d21 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P027_站立・双手抚后颈/P027_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_仰视.webp new file mode 100644 index 0000000..2772535 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_侧面.webp new file mode 100644 index 0000000..12174b0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_俯视.webp new file mode 100644 index 0000000..88041ba Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_斜侧.webp new file mode 100644 index 0000000..3b460bb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_正面.webp new file mode 100644 index 0000000..4b9cf8b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P029_站立・发丝飘扬/P029_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_仰视.webp new file mode 100644 index 0000000..3095c88 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_侧面.webp new file mode 100644 index 0000000..2e7548e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_俯视.webp new file mode 100644 index 0000000..a250cb1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_斜侧.webp new file mode 100644 index 0000000..7299403 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_正面.webp new file mode 100644 index 0000000..dd7576b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/站姿/P030_站立・踮脚双臂V字/P030_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_仰视.webp new file mode 100644 index 0000000..7b7690c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_侧面.webp new file mode 100644 index 0000000..9e3b81b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_俯视.webp new file mode 100644 index 0000000..8fca0f8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_斜侧.webp new file mode 100644 index 0000000..d0a376b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_正面.webp new file mode 100644 index 0000000..fa8363f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P049_仰卧・双臂过头/P049_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_仰视.webp new file mode 100644 index 0000000..87a2027 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_侧面.webp new file mode 100644 index 0000000..2cb610a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_俯视.webp new file mode 100644 index 0000000..5a7b7ea Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_斜侧.webp new file mode 100644 index 0000000..22f1e0c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_正面.webp new file mode 100644 index 0000000..d57c482 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P050_侧卧・托腮/P050_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_仰视.webp new file mode 100644 index 0000000..329cabe Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_侧面.webp new file mode 100644 index 0000000..c99afd7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_俯视.webp new file mode 100644 index 0000000..2cfcb4d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_斜侧.webp new file mode 100644 index 0000000..306aa3b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_正面.webp new file mode 100644 index 0000000..4e4be94 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P051_俯卧・抬腿/P051_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_仰视.webp new file mode 100644 index 0000000..b74e567 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_侧面.webp new file mode 100644 index 0000000..609b4fb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_俯视.webp new file mode 100644 index 0000000..3d5c968 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_斜侧.webp new file mode 100644 index 0000000..c10c524 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_正面.webp new file mode 100644 index 0000000..4c534c4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P052_仰卧・单膝立起/P052_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_仰视.webp new file mode 100644 index 0000000..0102169 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_侧面.webp new file mode 100644 index 0000000..21ad593 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_俯视.webp new file mode 100644 index 0000000..05665a5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_斜侧.webp new file mode 100644 index 0000000..4b4e13e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_正面.webp new file mode 100644 index 0000000..95d0c02 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P054_侧卧・腰线曲线/P054_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_仰视.webp new file mode 100644 index 0000000..6482118 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_侧面.webp new file mode 100644 index 0000000..f642956 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_俯视.webp new file mode 100644 index 0000000..9f77d7b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_斜侧.webp new file mode 100644 index 0000000..bc9e48e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_正面.webp new file mode 100644 index 0000000..90196e2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P056_仰卧・双腿竖直向上/P056_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_仰视.webp new file mode 100644 index 0000000..47acaac Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_侧面.webp new file mode 100644 index 0000000..9aba291 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_俯视.webp new file mode 100644 index 0000000..ae2f6cf Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_斜侧.webp new file mode 100644 index 0000000..6e8804f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_正面.webp new file mode 100644 index 0000000..fffe0aa Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P057_侧卧・单臂过头/P057_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_仰视.webp new file mode 100644 index 0000000..ac315b6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_侧面.webp new file mode 100644 index 0000000..ae7821f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_俯视.webp new file mode 100644 index 0000000..a48e9cf Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_斜侧.webp new file mode 100644 index 0000000..ae0e7ab Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_正面.webp new file mode 100644 index 0000000..adb10f7 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P058_俯卧・以臂枕头/P058_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_仰视.webp new file mode 100644 index 0000000..0202a6c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_侧面.webp new file mode 100644 index 0000000..61c5ae4 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_俯视.webp new file mode 100644 index 0000000..858b5f6 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_斜侧.webp new file mode 100644 index 0000000..9482b64 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_正面.webp new file mode 100644 index 0000000..d8da229 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/趴卧/P059_仰卧・胸口上挺/P059_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_仰视.webp new file mode 100644 index 0000000..fb9528a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_侧面.webp new file mode 100644 index 0000000..11ebc38 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_俯视.webp new file mode 100644 index 0000000..8d61827 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_斜侧.webp new file mode 100644 index 0000000..4e4ef19 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_正面.webp new file mode 100644 index 0000000..4494b53 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P031_跪立・双手扶腿/P031_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_仰视.webp new file mode 100644 index 0000000..4a17f01 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_侧面.webp new file mode 100644 index 0000000..c402800 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_俯视.webp new file mode 100644 index 0000000..adbf2c1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_斜侧.webp new file mode 100644 index 0000000..7c42f0f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_正面.webp new file mode 100644 index 0000000..d5e0f90 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P032_跪立・双手抱头后/P032_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_仰视.webp new file mode 100644 index 0000000..cdbd990 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_侧面.webp new file mode 100644 index 0000000..15ba7a3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_俯视.webp new file mode 100644 index 0000000..2b844f8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_斜侧.webp new file mode 100644 index 0000000..96c79d2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_正面.webp new file mode 100644 index 0000000..6cd206d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P033_单膝跪・手扶膝/P033_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_仰视.webp new file mode 100644 index 0000000..9209d1b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_侧面.webp new file mode 100644 index 0000000..51ce95b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_俯视.webp new file mode 100644 index 0000000..7f96d8e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_斜侧.webp new file mode 100644 index 0000000..8d3ee16 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_正面.webp new file mode 100644 index 0000000..e51a0c1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P034_跪立・上体后仰/P034_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_仰视.webp new file mode 100644 index 0000000..72c7411 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_侧面.webp new file mode 100644 index 0000000..8e84238 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_俯视.webp new file mode 100644 index 0000000..ddf2e2e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_斜侧.webp new file mode 100644 index 0000000..c523d4f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_正面.webp new file mode 100644 index 0000000..1e24c98 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P035_跪立・双臂上举/P035_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_仰视.webp new file mode 100644 index 0000000..0c536ae Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_侧面.webp new file mode 100644 index 0000000..484951a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_俯视.webp new file mode 100644 index 0000000..82374ea Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_斜侧.webp new file mode 100644 index 0000000..e8b4b43 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_正面.webp new file mode 100644 index 0000000..21968f5 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P036_跪立・一手撩发一手扶腰/P036_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_仰视.webp new file mode 100644 index 0000000..93d7764 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_侧面.webp new file mode 100644 index 0000000..181e82e Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_俯视.webp new file mode 100644 index 0000000..4dfc751 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_斜侧.webp new file mode 100644 index 0000000..492467b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_正面.webp new file mode 100644 index 0000000..5908a49 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P037_单膝跪・仰望/P037_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_仰视.webp new file mode 100644 index 0000000..5909878 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_侧面.webp new file mode 100644 index 0000000..f2017fb Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_俯视.webp new file mode 100644 index 0000000..fb3fa87 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_斜侧.webp new file mode 100644 index 0000000..e986193 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_正面.webp new file mode 100644 index 0000000..3dec268 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P038_跪立・侧倾・手触地/P038_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_仰视.webp new file mode 100644 index 0000000..29dc157 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_侧面.webp new file mode 100644 index 0000000..78c23e8 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_俯视.webp new file mode 100644 index 0000000..05e3897 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_斜侧.webp new file mode 100644 index 0000000..01ca74c Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_正面.webp new file mode 100644 index 0000000..b662399 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P039_跪立・双手扶腰后仰/P039_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_仰视.webp new file mode 100644 index 0000000..0eb2575 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_侧面.webp new file mode 100644 index 0000000..dc67964 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_俯视.webp new file mode 100644 index 0000000..989a640 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_斜侧.webp new file mode 100644 index 0000000..996151a Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_正面.webp new file mode 100644 index 0000000..662ddb1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/跪立/P040_跪立・摆胯・单臂上举/P040_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_仰视.webp new file mode 100644 index 0000000..df61352 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_侧面.webp new file mode 100644 index 0000000..5ebce0d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_俯视.webp new file mode 100644 index 0000000..c484c06 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_斜侧.webp new file mode 100644 index 0000000..2239276 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_正面.webp new file mode 100644 index 0000000..8977c55 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P061_蹲姿・手扶膝/P061_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_仰视.webp new file mode 100644 index 0000000..dea59e9 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_侧面.webp new file mode 100644 index 0000000..e0eb55f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_俯视.webp new file mode 100644 index 0000000..382fcb2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_斜侧.webp new file mode 100644 index 0000000..dd36fee Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_正面.webp new file mode 100644 index 0000000..ed940b2 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P062_蹲姿・单手触地/P062_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_仰视.webp new file mode 100644 index 0000000..1c2c0e1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_侧面.webp new file mode 100644 index 0000000..accbf98 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_俯视.webp new file mode 100644 index 0000000..79d58f3 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_斜侧.webp new file mode 100644 index 0000000..a921f04 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_正面.webp new file mode 100644 index 0000000..63a9a75 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P063_蹲姿・托腮/P063_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_仰视.webp new file mode 100644 index 0000000..7232dbd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_侧面.webp new file mode 100644 index 0000000..092a442 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_俯视.webp new file mode 100644 index 0000000..7b2bb19 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_斜侧.webp new file mode 100644 index 0000000..15cc16b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_正面.webp new file mode 100644 index 0000000..1363633 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P064_蹲姿・手抚发/P064_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_仰视.webp new file mode 100644 index 0000000..a201a90 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_侧面.webp new file mode 100644 index 0000000..53578d0 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_俯视.webp new file mode 100644 index 0000000..79cf1b1 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_斜侧.webp new file mode 100644 index 0000000..820cf1d Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_正面.webp new file mode 100644 index 0000000..ac07c69 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P065_蹲姿・踮脚双手触地/P065_正面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_仰视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_仰视.webp new file mode 100644 index 0000000..fb41475 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_仰视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_侧面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_侧面.webp new file mode 100644 index 0000000..69d2d96 Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_侧面.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_俯视.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_俯视.webp new file mode 100644 index 0000000..2334abd Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_俯视.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_斜侧.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_斜侧.webp new file mode 100644 index 0000000..d07367b Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_斜侧.webp differ diff --git a/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_正面.webp b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_正面.webp new file mode 100644 index 0000000..d840c7f Binary files /dev/null and b/pose_assets/02_AI深度姿势库/全身单人・标准系/蹲姿/P066_蹲姿・回头/P066_正面.webp differ diff --git a/pose_reference.py b/pose_reference.py new file mode 100644 index 0000000..228597d --- /dev/null +++ b/pose_reference.py @@ -0,0 +1,531 @@ +"""参考姿势(Pose Reference)—— 从姿势素材库里取一张参考图,喂给编辑模型。 + +素材分两层,运行时合并成一个索引: + +1. **插件自带** `pose_assets/` —— 随插件分发,只放非敏感大类(上半身单人、 + 全身单人・标准系),别人装完节点就能用。 +2. **本机外挂** —— 默认 `D:\\pose`,可用环境变量 `TP_POSE_ROOT` 改(也可放 + `ComfyUI/models/pose_reference`)。敏感或自建素材丢进去,刷新即出现,不进 git。 + +查找顺序是「本机外挂 → models → 插件自带」,所以同名素材以本机为准。 + +素材目录结构(每一层根目录都一样): + /01_AI线稿姿势/<大类>/<姿势组>/<编号_姿势名>/<编号_视角>.webp + /02_AI深度姿势库/<同上>/ + +线稿与深度两套的文件名、目录结构一一对应,所以只需扫一套来建索引, +取图时按 source 决定去哪个目录拿。 + +选线稿还是深度:实测(FIBO 2.0 / Qwen-Image-2.1 各两组对照)深度图因为 +没有边界线,脚底和地面的亮度几乎相同,模型会把亮部补成不存在的鞋或护具 +(3/3 复现);线稿有明确黑线,1/3 才出现小瑕疵。默认用线稿。 + +深度的唯一优势是遮挡关系(手臂在腿前还是后),复杂交叠姿势可以切过去。 +""" + +import base64 +import hashlib +import io +import json +import mimetypes +import os +import re + +import numpy as np +import torch +from PIL import Image, ImageFile, ImageOps + +import folder_paths + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +DEFAULT_ROOT = r"D:\pose" +BUILTIN_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "pose_assets") +IMAGE_EXT = (".webp", ".png", ".jpg", ".jpeg", ".bmp") +# 视角按常见构图顺序排,不跟着中文编码字典序走 +VIEW_ORDER = ["正面", "侧面", "斜侧", "俯视", "仰视"] + +_cache = {"stamp": None, "tree": None} + + +def _roots(): + """按优先级返回可用的素材根目录(前面的优先)。 + + 顺序:TP_POSE_ROOT(或默认 D:\\pose)→ models/pose_reference → 插件自带。 + 本机目录在前,所以自己放的素材会覆盖插件自带里的同名额。 + """ + cands = [] + env = os.environ.get("TP_POSE_ROOT") + if env: + cands.append(env) + elif DEFAULT_ROOT: + cands.append(DEFAULT_ROOT) + try: + cands.append(os.path.join(folder_paths.models_dir, "pose_reference")) + except Exception: + pass + cands.append(BUILTIN_ROOT) + + out = [] + for d in cands: + if d and os.path.isdir(d) and os.path.abspath(d) not in [os.path.abspath(x) for x in out]: + out.append(d) + return out + + +def _root(): + """兼容旧调用:返回主素材目录(没有可用的就返回默认路径,方便报错信息)。""" + roots = _roots() + return roots[0] if roots else DEFAULT_ROOT + + +def _mtime(path): + try: + return os.stat(path).st_mtime + except OSError: + return 0.0 + + +def _stamp(root): + """素材指纹,扫到「大类/姿势组」这一层。 + + 只看根目录一层不够:往已有大类里新放一个姿势组,根目录 mtime 不会变, + 缓存就永远不刷新。所以按 套/大类/组 逐层取 mtime,外加每组里的条目数。 + """ + if not os.path.isdir(root): + return None + parts = [] + for set_name in sorted(os.listdir(root)): + set_path = os.path.join(root, set_name) + if not os.path.isdir(set_path): + continue + parts.append("{0}:{1:.0f}".format(set_name, _mtime(set_path))) + for cat in sorted(os.listdir(set_path)): + cat_path = os.path.join(set_path, cat) + if not os.path.isdir(cat_path): + continue + parts.append(" {0}:{1:.0f}".format(cat, _mtime(cat_path))) + for grp in sorted(os.listdir(cat_path)): + grp_path = os.path.join(cat_path, grp) + if not os.path.isdir(grp_path): + continue + try: + n = len(os.listdir(grp_path)) + except OSError: + n = -1 + parts.append(" {0}:{1:.0f}:{2}".format(grp, _mtime(grp_path), n)) + return "|".join(parts) + + +def _stamp_all(): + """所有根目录的总指纹(前端轮询它判断要不要重建下拉)。""" + roots = _roots() + return "||".join("{0}#{1}".format(r, _stamp(r) or "-") for r in roots), roots + + +def _pick_sets(root): + """按目录名里的关键词区分线稿套与深度套,认不出就退回「前两个目录」。""" + lineart = depth = None + subs = [] + if os.path.isdir(root): + subs = [d for d in sorted(os.listdir(root)) if os.path.isdir(os.path.join(root, d))] + for d in subs: + low = d.lower() + if lineart is None and ("线稿" in d or "lineart" in low or low.startswith("01")): + lineart = os.path.join(root, d) + elif depth is None and ("深度" in d or "depth" in low or low.startswith("02")): + depth = os.path.join(root, d) + if lineart is None and subs: + lineart = os.path.join(root, subs[0]) + if depth is None and len(subs) > 1: + depth = os.path.join(root, subs[1]) + return lineart, depth + + +def _view_of(filename): + stem = os.path.splitext(filename)[0] + return re.sub(r"^P\d+_", "", stem) + + +def _view_key(view): + try: + return (VIEW_ORDER.index(view), "") + except ValueError: + return (len(VIEW_ORDER), view) + + +def _scan(base): + """扫一套素材,返回 {大类: {姿势组: {姿势目录: [视角...]}}}。""" + tree = {} + if not base or not os.path.isdir(base): + return tree + for cat in sorted(os.listdir(base)): + cat_path = os.path.join(base, cat) + if not os.path.isdir(cat_path): + continue + groups = {} + for group in sorted(os.listdir(cat_path)): + group_path = os.path.join(cat_path, group) + if not os.path.isdir(group_path): + continue + poses = {} + for pose in sorted(os.listdir(group_path)): + pose_path = os.path.join(group_path, pose) + if not os.path.isdir(pose_path): + continue + try: + names = os.listdir(pose_path) + except OSError: + continue + views = sorted( + {_view_of(f) for f in names if f.lower().endswith(IMAGE_EXT)}, + key=_view_key, + ) + if views: + poses[pose] = views + if poses: + groups[group] = poses + if groups: + tree[cat] = groups + return tree + + +def _merge_into(dst, src): + """把 src 的 大类/组/姿势/视角 并进 dst:取并集,已有顺序不动。""" + for cat, group_map in src.items(): + dcat = dst.setdefault(cat, {}) + for group, pose_map in group_map.items(): + dgrp = dcat.setdefault(group, {}) + for pose, views in pose_map.items(): + dviews = dgrp.setdefault(pose, []) + for v in views: + if v not in dviews: + dviews.append(v) + dviews.sort(key=_view_key) + + +def pose_tree(force=False): + """把各根目录的线稿套合并成一份带缓存的索引(本机目录在前)。""" + stamp, roots = _stamp_all() + if not force and _cache["stamp"] == stamp and _cache["tree"] is not None: + return _cache["tree"] + tree = {} + for root in roots: + lineart, _depth = _pick_sets(root) + if lineart and os.path.isdir(lineart): + _merge_into(tree, _scan(lineart)) + _cache["stamp"] = stamp + _cache["tree"] = tree + return tree + + +def flatten(tree): + """下拉框用的三个平铺清单:大类 / 姿势组 / 姿势全名。""" + cats, groups, poses, views = [], [], [], [] + for cat, group_map in tree.items(): + cats.append(cat) + for group, pose_map in group_map.items(): + if group not in groups: + groups.append(group) + for pose, view_list in pose_map.items(): + if pose not in poses: + poses.append(pose) + for v in view_list: + if v not in views: + views.append(v) + views.sort(key=_view_key) + return cats, groups, poses, views + + +def locate(category, group, pose, view): + """定位到具体文件用的四元组,容错到「只要姿势名对」也能找到。""" + tree = pose_tree() + if category in tree and group in tree[category] and pose in tree[category][group]: + views = tree[category][group][pose] + if view in views: + return category, group, pose, view + if views: + return category, group, pose, views[0] + for cat, group_map in tree.items(): + for grp, pose_map in group_map.items(): + if pose in pose_map: + views = pose_map[pose] + return cat, grp, pose, (view if view in views else views[0]) + raise ValueError( + "在姿势素材库里找不到 {0} / {1} / {2}。已搜索:{3}".format( + category, group, pose, ";".join(_roots()) or "无可用素材目录") + ) + + +def build_path(category, group, pose, view, source): + """按根目录优先级找文件:本机放的同名素材会盖过插件自带的。""" + tried = [] + for root in _roots(): + lineart, depth = _pick_sets(root) + base = depth if source == "深度" else lineart + if not base or not os.path.isdir(base): + tried.append("{0}(没有{1}套)".format(root, source)) + continue + folder = os.path.join(base, category, group, pose) + if not os.path.isdir(folder): + tried.append(folder) + continue + for fn in sorted(os.listdir(folder)): + if fn.lower().endswith(IMAGE_EXT) and _view_of(fn) == view: + return os.path.join(folder, fn) + tried.append("{0}(无 {1} 视角)".format(folder, view)) + raise ValueError( + "找不到 {0} / {1} / {2} / {3}。已搜索:{4}".format( + category, group, pose, view, ";".join(tried) or "无可用素材目录") + ) + + +# 视觉编码器 / VAE 的下采样倍数是 8,加上 patch 2 ⇒ 实际要求 16 的倍数。 +# 不满足时 VAEEncode 会自己 pad 或 crop,边缘发生轻微位移 —— 线稿/深度图对位移特别敏感, +# 会表现成「人物整体歪了一点点」。 +ALIGN = 16 + + +def _align_down(v, m=ALIGN): + """向下取到 m 的倍数。比 m 还小就不动 —— 把 8px 硬拉到 16px 只会更糊。""" + if v < m: + return max(1, v) + return v - (v % m) + + +def _resize(img, long_edge): + """按长边等比缩放,再把宽高对齐到 ALIGN 的倍数。""" + if long_edge and long_edge > 0: + w, h = img.size + scale = float(long_edge) / max(w, h) + if abs(scale - 1.0) > 1e-3: + img = img.resize((max(1, round(w * scale)), max(1, round(h * scale))), Image.LANCZOS) + + w, h = img.size + aw, ah = _align_down(w), _align_down(h) + if (aw, ah) != (w, h): + # 用缩放而不是裁切:1% 以内的形变看不出来,裁切却可能切掉脚尖或手指 + img = img.resize((aw, ah), Image.LANCZOS) + return img + + +def _load(path, long_edge, flip): + img = Image.open(path) + img = ImageOps.exif_transpose(img).convert("RGB") + if flip: + img = ImageOps.mirror(img) + return _resize(img, long_edge) + + +# ---- 工作流内嵌图:让别人下载工作流后,没有素材库也能看见图、也能出图 ---- +EMBED_PROP = "tp_pose" +EMBED_MAX_BYTES = 2 * 1024 * 1024 # 防御:内嵌字段异常大就不解析 + + +def embed_key(category, group, pose, view, source): + """前端与后端必须用同一套拼法,回退时才对得上。""" + return "|".join(str(x) for x in (category, group, pose, view, source)) + + +def _node_properties(extra_pnginfo, unique_id): + """从工作流 JSON 里捞出本节点的 properties(properties 不会进 prompt inputs)。""" + try: + wf = (extra_pnginfo or {}).get("workflow") or {} + for node in wf.get("nodes") or []: + if str(node.get("id")) == str(unique_id): + return node.get("properties") or {} + except Exception: + pass + return {} + + +def _decode_data_uri(data_uri): + """把前端存进 properties 的 data URI 解回 PIL 图。""" + if not isinstance(data_uri, str) or "," not in data_uri: + return None + head, _, payload = data_uri.partition(",") + if "base64" not in head or len(payload) > EMBED_MAX_BYTES: + return None + try: + raw = base64.b64decode(payload) + img = Image.open(io.BytesIO(raw)) + return ImageOps.exif_transpose(img).convert("RGB") + except Exception: + return None + + +def _png_bytes(img): + buf = io.BytesIO() + img.save(buf, format="PNG", compress_level=1) + return buf.getvalue() + + +class PoseReference: + """从本地姿势素材库取一张参考图。""" + + @classmethod + def INPUT_TYPES(cls): + tree = pose_tree() + cats, groups, poses, views = flatten(tree) + if not cats: + cats, groups, poses, views = ["(未找到素材)"], ["—"], ["—"], ["—"] + return { + "required": { + "category": (cats, {"tooltip": "素材大类"}), + "group": (groups, {"tooltip": "姿势组,如 站姿 / 坐姿"}), + "pose": (poses, {"tooltip": "具体姿势,编号_名称"}), + "view": (views, {"tooltip": "机位视角"}), + }, + "optional": { + "source": (["线稿", "深度"], {"default": "线稿", "tooltip": "线稿更稳;深度适合肢体交叠多、需要遮挡关系的姿势"}), + "long_edge": ("INT", {"default": 1024, "min": 256, "max": 4096, "step": 64, + "tooltip": "输出图长边像素,素材原始只有 300x400"}), + # 用下拉而不是 BOOL:1.57 会把 BOOL 渲染成可接线插槽,节点上看不到勾选框 + "flip": (["关", "开"], {"default": "关", "tooltip": "水平翻转,左右镜像的姿势不用另找"}), + }, + # properties 不会进 prompt inputs,只能靠 extra_pnginfo 把整份工作流带过来, + # 从里面按 unique_id 找到本节点,读内嵌图 + "hidden": { + "unique_id": "UNIQUE_ID", + "extra_pnginfo": "EXTRA_PNGINFO", + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "load" + CATEGORY = "Toggle-Pass" + DESCRIPTION = ("从本地姿势素材库取参考图,输出 IMAGE。接 Qwen-Image-2.1 / MOSS / FIBO 的 images 输入;" + "接 2511 / FLUX.2 这类编辑模型时必须多图:原图接 image1,本节点接 image2," + "否则模型会把线稿当成待修改的原图,出图但姿势不变。" + "Krea 2 只有 Ostris 节点(TextEncodeKrea2OstrisEdit)能吃骨架图,接 image2;" + "krea2Edit 那套的 image_b 是「第二个主体」,接进来线稿会被画进画面。") + + def load(self, category, group, pose, view, source="线稿", long_edge=1024, flip="关", + unique_id=None, extra_pnginfo=None): + want = embed_key(category, group, pose, view, source) + embed = (_node_properties(extra_pnginfo, unique_id) or {}).get(EMBED_PROP) or {} + origin = "素材库" + try: + cat, grp, ps, vw = locate(category, group, pose, view) + path = build_path(cat, grp, ps, vw, source) + img = _load(path, long_edge, flip in (True, "开")) + except Exception as exc: + # 素材库里没有 → 用工作流内嵌的那张。别人下载工作流就是走这条路 + img0 = _decode_data_uri(embed.get("img")) + if img0 is None: + raise + print("[PoseReference] 素材库取图失败({0}),改用工作流内嵌图".format(str(exc)[:140])) + if embed.get("key") != want: + print("[PoseReference] 提示:内嵌图对应「{0}」,与当前所选「{1}」不同".format( + embed.get("key"), want)) + if flip in (True, "开"): + img0 = ImageOps.mirror(img0) + img = _resize(img0, long_edge) + cat, grp, ps, vw = category, group, pose, view + origin = "内嵌" + + arr = np.array(img).astype(np.float32) / 255.0 + tensor = torch.from_numpy(arr)[None,] + # 这里**故意不返回 ui.images**。一旦返回,ComfyUI 1.57 前端就会给节点设 + # node.imgs,进而挂一个 `$$canvas-image-preview` 的官方预览 widget:它占掉 + # 节点底部一行,并把这张执行结果画在预览区上面。于是「生图一开始」画面就被 + # 一张定死的图盖住 —— 下拉照点、节点自己画的预览在背面其实也换了,但看起来 + # 就是再也切不动。本节点的预览由前端 onDrawForeground 自绘,不需要这一份。 + return {"ui": {"text": ["{0}/{1}/{2}/{3} · {4} · {5}".format( + cat, grp, ps, vw, source, origin)]}, + "result": (tensor,)} + + +NODE_CLASS_MAPPINGS = { + "PoseReference": PoseReference, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "PoseReference": "参考姿势 Pose Reference", +} + + +# ---- 给前端联动用的目录树接口 ---- +def _register_routes(): + try: + from aiohttp import web + from server import PromptServer + + instance = getattr(PromptServer, "instance", None) + routes = getattr(instance, "routes", None) if instance is not None else None + if routes is None: + return + + @routes.get("/toggle_pass/pose_tree") + async def _pose_tree(request): + try: + force = request.rel_url.query.get("refresh") in ("1", "true") + tree = pose_tree(force=force) + cats, groups, poses, views = flatten(tree) + return web.json_response({"tree": tree, "categories": cats, + "groups": groups, "poses": poses, + "views": views, "root": _root(), + "roots": _roots()}) + except Exception as exc: + return web.json_response({"error": str(exc), "tree": {}}, status=500) + + @routes.get("/toggle_pass/pose_stamp") + async def _pose_stamp(request): + """轻量指纹:前端每隔十几秒问一次,变了才重新拉整个 tree。 + + 往素材目录里丢新文件(尤其是敏感那几类放本机)后,不用刷新浏览器, + 下拉自己就会长出来。 + """ + try: + stamp, roots = _stamp_all() + return web.json_response({"stamp": hashlib.md5(stamp.encode("utf-8")).hexdigest(), + "roots": roots, "count": len(roots)}) + except Exception as exc: + return web.json_response({"error": str(exc)}, status=500) + + @routes.get("/toggle_pass/pose_image") + async def _pose_image(request): + """给前端节点内缩略图 + 内嵌用:按参数把选中的那张姿势吐回去。 + + 参数全在 query 里,同一个 URL 永远对应同一张图,所以放开浏览器缓存, + 来回切下拉不重复解码。 + + `raw=1` 时直接返回素材原文件(webp,约 5KB),不缩放不翻转 —— 前端拿它 + 当缩略图显示、同时 base64 内嵌进工作流;翻转由前端绘制时镜像。 + """ + try: + q = request.rel_url.query + source = q.get("source", "线稿") + try: + long_edge = int(q.get("long_edge", "0") or 0) + except ValueError: + long_edge = 0 + flip = q.get("flip") in ("开", "1", "true", "True") + cat, grp, ps, vw = locate(q.get("category", ""), q.get("group", ""), + q.get("pose", ""), q.get("view", "")) + path = build_path(cat, grp, ps, vw, source) + # 不能强缓存(max-age):同一个 URL 对应的素材文件可能被同名替换, + # 强缓存会让浏览器 24 小时都拿旧图,换了素材看起来像"切换不了"。 + # 改用 ETag 逐次校验:没变返回 304(几乎零成本),变了立刻给新内容。 + mtime_ms = int(os.path.getmtime(path) * 1000) + size = os.path.getsize(path) + etag = '"{0}-{1}-{2}-{3}"'.format(mtime_ms, size, long_edge, int(flip)) + headers = {"Cache-Control": "no-cache", "ETag": etag} + if request.headers.get("If-None-Match") == etag: + return web.Response(status=304, headers=headers) + if q.get("raw") in ("1", "true", "开"): + with open(path, "rb") as fh: + body = fh.read() + mime = mimetypes.guess_type(path)[0] or "image/webp" + return web.Response(body=body, content_type=mime, headers=headers) + img = _load(path, long_edge, flip) + return web.Response(body=_png_bytes(img), content_type="image/png", headers=headers) + except Exception as exc: + return web.json_response({"error": str(exc)}, status=404) + except Exception: + # 独立导入 / 无 server 模块时静默跳过,不影响节点本身 + return + + +_register_routes() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3d781bf --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,25 @@ +[project] +name = "comfyui-toggle-pass" +version = "1.0.0" +description = "Toggle-switch ComfyUI nodes: bypass any node without rewiring, multi-reference image editing, unified model loader, one-piece sampler with presets, and a built-in pose reference library." +readme = "README.md" +requires-python = ">=3.9" +license = { text = "MIT" } +authors = [{ name = "Clever", url = "https://github.com/electricty00" }] +keywords = ["comfyui", "comfyui-custom-node", "toggle", "image-editing", "reference-image", "pose"] +classifiers = [ + "Programming Language :: Python :: 3", + "Operating System :: OS Independent", + "Topic :: Multimedia :: Graphics", +] + +# 运行时依赖由 ComfyUI 本体提供,不在这里重复声明,避免版本冲突。 +dependencies = [] + +[project.urls] +Homepage = "https://github.com/electricty00/ComfyUI-Toggle-Pass" +Issues = "https://github.com/electricty00/ComfyUI-Toggle-Pass/issues" + +[tool.comfy] +# 留在 git 安装模式(不发布到 Comfy Registry),所以不写 PublisherId / DisplayName。 +# 想让 ComfyUI-Manager 把它当成可更新节点而不报错,这一节留空即可。 diff --git a/sampler.py b/sampler.py index 88aee65..1438af7 100644 --- a/sampler.py +++ b/sampler.py @@ -1,232 +1,377 @@ -""" -ComfyUI-Toggle-Pass: 采样器(一体) - -把「随机噪波 + CFG引导器 + K采样器选择 + Sigmas」四件套收进一个节点。 -等价于以下官方链路: - RandomNoise + CFGGuider + KSamplerSelect + (BasicScheduler | ManualSigmas) - -> SamplerCustomAdvanced - -设计要点 - · 模型 / 条件 / Latent 仍是输入插槽,所以换任何模型都能直接用; - 真正随模型变的只有「采样方案(sigma 表)」+ 步数 + CFG,做成参数即可。 - · 「采样方案」分三类: - 1) 自动:按 步数 + 调度器 现算 sigma(= BasicScheduler,Krea2 turbo 走这条) - 2) 预置表:蒸馏模型专用的固定 sigma 轨迹(Qwen-Image-2.1 turbo 走这条) - 3) 自定义:手填一串 sigma,方便接新模型而不用改代码 - · 预置表不能靠 steps 推算 —— 那是 8 步蒸馏轨迹,改了就偏离训练分布。 - -Author: Clever -""" - -import torch - -import comfy.model_management -import comfy.sample -import comfy.samplers -import comfy.utils -import latent_preview - - -# ==================== 采样方案 ==================== - -SCHEME_AUTO = "自动(按步数 + 调度器)" -SCHEME_CUSTOM = "自定义表" - -# 蒸馏模型专用的固定 sigma 轨迹(来自官方模板,改一个数字就会跑偏) -# 规则:逗号分隔、严格递减、末值必须 0、N 个点 = N-1 步 -SIGMA_PRESETS = { - "Qwen-Image-2.1 turbo 8步": - "1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0", - "LTX-2 视频 8步(蒸馏)": - "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0", - "LTX-2 视频 3步(低噪)": - "0.909375, 0.725, 0.421875, 0.0", -} - -SCHEME_LIST = [SCHEME_AUTO] + list(SIGMA_PRESETS.keys()) + [SCHEME_CUSTOM] - -# 「自定义表」输入框的默认示例:用户点开就能看到该填什么格式 -SCHEMA_SAMPLE = SIGMA_PRESETS["Qwen-Image-2.1 turbo 8步"] - - -# ==================== 工具 ==================== - -class _RandomNoise: - """等价于官方的 Noise_RandomNoise。""" - - def __init__(self, seed): - self.seed = seed - - def generate_noise(self, input_latent): - latent_image = input_latent["samples"] - batch_inds = input_latent.get("batch_index") - return comfy.sample.prepare_noise(latent_image, self.seed, batch_inds) - - -def parse_sigmas(text): - """把 "1.0, 0.9, 0" 解析成 tensor,并做基本校验。""" - if text is None: - raise ValueError("Sigma 表为空") - raw = str(text).replace("\n", ",").replace(";", ",").replace("\t", ",") - values = [] - for part in raw.split(","): - part = part.strip() - if not part: - continue - try: - values.append(float(part)) - except ValueError: - raise ValueError(f"Sigma 表里有无法解析的值:{part!r}(只能是数字和逗号)") - - if len(values) < 2: - raise ValueError("Sigma 表至少需要 2 个值(N 个点 = N-1 步)") - if abs(values[-1]) > 1e-6: - raise ValueError(f"Sigma 表末值必须是 0,现在是 {values[-1]}(否则采样收不干净)") - for i in range(len(values) - 1): - if values[i + 1] > values[i] + 1e-6: - raise ValueError( - f"Sigma 表必须严格递减,第 {i + 1} 个值 {values[i]} -> {values[i + 1]} 是上涨的" - ) - return torch.FloatTensor(values) - - -def truncate_sigmas(sigmas, denoise): - """按降噪比例从表尾截取 —— 与 BasicScheduler 的 denoise 语义一致。 - - img2img / 细化时从较低噪声处起步,所以砍掉表头的高噪声段。 - """ - if denoise >= 0.999: - return sigmas - if denoise <= 0.0: - raise ValueError("降噪为 0 时没有可采样的步数") - - total = sigmas.shape[-1] - 1 # 总步数 - keep = max(1, min(total, int(round(total * denoise)))) - return sigmas[-(keep + 1):] - - -# ==================== 节点 ==================== - -class ToggleSampler: - """一体化采样器:噪波 + CFG引导器 + 采样器 + Sigmas => 出一个 Latent。""" - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "模型": ("MODEL",), - "正面条件": ("CONDITIONING",), - "负面条件": ("CONDITIONING",), - "Latent图像": ("LATENT",), - "采样方案": (SCHEME_LIST, {"default": SCHEME_AUTO}), - "采样器": (comfy.samplers.KSampler.SAMPLERS, {"default": "euler"}), - "调度器": (comfy.samplers.KSampler.SCHEDULERS, {"default": "simple"}), - "步数": ("INT", { - "default": 20, "min": 1, "max": 10000, "step": 1, - "tooltip": "仅「自动」方案生效;选预置表时步数由表的点数决定", - }), - "CFG": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}), - "降噪": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), - "噪波随机种": ("INT", { - "default": 0, "min": 0, "max": 0xffffffffffffffff, - "control_after_generate": True, - }), - "自定义Sigma表": ("STRING", { - "default": SCHEMA_SAMPLE, - "multiline": True, - "tooltip": "仅「自定义表」方案生效。逗号分隔、严格递减、末值必须是 0", - }), - } - } - - RETURN_TYPES = ("LATENT", "LATENT") - RETURN_NAMES = ("Latent", "降噪Latent") - FUNCTION = "sample" - CATEGORY = "Toggle-Pass" - - # ---------- sigma ---------- - - @staticmethod - def build_sigmas(model, scheme, scheduler, steps, denoise, custom_text): - if scheme == SCHEME_AUTO: - total = steps - if denoise < 1.0: - if denoise <= 0.0: - raise ValueError("降噪为 0 时没有可采样的步数") - total = int(steps / denoise) - sigmas = comfy.samplers.calculate_sigmas( - model.get_model_object("model_sampling"), scheduler, total - ).cpu() - return sigmas[-(steps + 1):] - - text = custom_text if scheme == SCHEME_CUSTOM else SIGMA_PRESETS.get(scheme) - if text is None: - raise ValueError(f"未知采样方案:{scheme}") - return truncate_sigmas(parse_sigmas(text), denoise) - - # ---------- 主流程 ---------- - - def sample(self, 模型, 正面条件, 负面条件, Latent图像, 采样方案, 采样器, - 调度器, 步数, CFG, 降噪, 噪波随机种, 自定义Sigma表): - model = 模型 - latent = Latent图像 - work = latent.copy() - - samples = comfy.sample.fix_empty_latent_channels( - model, - latent["samples"], - work.get("downscale_ratio_spacial"), - work.get("downscale_ratio_temporal"), - ) - work["samples"] = samples - noise_mask = work.get("noise_mask") - - sigmas = self.build_sigmas(model, 采样方案, 调度器, 步数, 降噪, 自定义Sigma表) - if sigmas.shape[-1] < 2: - raise ValueError("Sigma 表换算后不足 2 个点,请加大步数或减小降噪") - - guider = comfy.samplers.CFGGuider(model) - guider.set_conds(正面条件, 负面条件) - guider.set_cfg(CFG) - - sampler = comfy.samplers.sampler_object(采样器) - noise = _RandomNoise(噪波随机种) - - x0_output = {} - callback = latent_preview.prepare_callback(model, sigmas.shape[-1] - 1, x0_output) - disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED - - out_samples = guider.sample( - noise.generate_noise(work), - samples, - sampler, - sigmas, - denoise_mask=noise_mask, - callback=callback, - disable_pbar=disable_pbar, - seed=噪波随机种, - ) - out_samples = out_samples.to(comfy.model_management.intermediate_device()) - - out = latent.copy() - out.pop("downscale_ratio_spacial", None) - out.pop("downscale_ratio_temporal", None) - out["samples"] = out_samples - - if "x0" in x0_output: - x0_out = model.model.process_latent_out(x0_output["x0"].cpu()) - out_denoised = latent.copy() - out_denoised["samples"] = x0_out - else: - out_denoised = out - - return (out, out_denoised) - - -NODE_CLASS_MAPPINGS = { - "ToggleSampler": ToggleSampler, -} - -NODE_DISPLAY_NAME_MAPPINGS = { - "ToggleSampler": "采样器(一体)", -} +""" +ComfyUI-Toggle-Pass: 采样器(一体) + +把「随机噪波 + CFG引导器 + K采样器选择 + Sigmas」四件套收进一个节点。 +等价于以下官方链路: + RandomNoise + CFGGuider + KSamplerSelect + (BasicScheduler | ManualSigmas) + -> SamplerCustomAdvanced + +设计要点 + · 模型 / 条件 / Latent 仍是输入插槽,所以换任何模型都能直接用; + 真正随模型变的只有「采样方案(sigma 表)」+ 步数 + CFG,做成参数即可。 + · 「采样方案」分三类: + 1) 自动:按 步数 + 调度器 现算 sigma(= BasicScheduler,Krea2 turbo 走这条) + 2) 预置表:蒸馏模型专用的固定 sigma 轨迹(Qwen-Image-2.1 turbo 走这条) + 3) 自定义:手填一串 sigma,方便接新模型而不用改代码 + · 预置表不能靠 steps 推算 —— 那是 8 步蒸馏轨迹,改了就偏离训练分布。 + +Author: Clever +""" + +import torch + +import comfy.model_management +import comfy.sample +import comfy.samplers +import comfy.utils +import latent_preview + + +# ==================== 采样方案 ==================== + +SCHEME_AUTO = "自动(按步数 + 调度器)" +SCHEME_CUSTOM = "自定义表" + +# 蒸馏模型专用的固定 sigma 轨迹(来自官方模板,改一个数字就会跑偏) +# 规则:逗号分隔、严格递减、末值必须 0、N 个点 = N-1 步 +SIGMA_PRESETS = { + "Qwen-Image-2.1 turbo 8步": + "1.0, 0.978453, 0.95418, 0.926626, 0.89508, 0.845148, 0.704534, 0.414568, 0", + "LTX-2 视频 8步(蒸馏)": + "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0", + "LTX-2 视频 3步(低噪)": + "0.909375, 0.725, 0.421875, 0.0", +} + +SCHEME_LIST = [SCHEME_AUTO] + list(SIGMA_PRESETS.keys()) + [SCHEME_CUSTOM] + +# 「自定义表」输入框的默认示例:用户点开就能看到该填什么格式 +SCHEMA_SAMPLE = SIGMA_PRESETS["Qwen-Image-2.1 turbo 8步"] + + +# ==================== 模型预设 ==================== +# 一键把「采样方案 + 采样器 + 调度器 + 步数 + CFG」设成该模型的常用组合。 +# +# 数值不是凭印象写的,全部来自本机 `ComfyUI/user/default/workflows/` 里 +# 实际跑通的工作流(括号内是来源文件),改之前请先跑一遍再到这里调: +# · Qwen-Image 2.1 25 步 euler simple CFG 1 ← qwen-iamge-2.1-Full / qwen-image-2.1-aio +# · Qwen-Image 2.1 turbo 8 步 固定 sigma 表 ← Qwen21_turbo_TogglePass +# · Krea 2 turbo 8 步 euler simple CFG 1 ← Krea2_Ostris_Edit_outfit +# · Krea 2 细节增强 12 步 euler simple CFG 1 ← krea2_turbo_edit +# · FLUX.2 klein 4 步 euler beta CFG 1 ← Flux2/Flux2图文合一、画质提升 +# · FLUX.2 klein 高清修复 4 步 euler_ancestral simple ← Flux2/flux2-klein-高清修复 +# · Z-Image turbo 8 步 euler_ancestral simple ← z-image/z-image-turbo +# · Qwen-Image Layered 9 步 euler simple CFG 2.5 ← Qwen-image/image_qwen_layered +# · Qwen-Image Edit 2511 4 步 euler_ancestral beta ← Qwen-image/qwen_Image-AIO-2511-* +# · FIBO 2.0 turbo 4 步 euler simple CFG 1 ← FIBO2-文生图+图编辑 +# · MOSS-Image 30 步 euler normal CFG 4 ← image_moss_image_edit +# +# 前端会读 /toggle_pass/sampler_presets 拿这张表(单一数据源,别在前端再抄一份)。 +# Python 本身**不套用**预设:它只是前端的一键填充,参数最终以 widget 上的值为准, +# 这样用户选完预设再手改任何一个值都不会被后端偷偷改回去。 +PRESET_NONE = "手动(不套用)" + +# 下拉里只显示短名 —— 节点宽度有限,名字太长会把左边的标题「预设」整个挤掉。 +# 完整信息都在括注里,而 CFG 之类真正会变的参数选完就能在旁边看到。 +MODEL_PRESETS = { + PRESET_NONE: None, + "Qwen-Image 2.1(25步)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "simple", + "steps": 25, "cfg": 1.0, + }, + "Qwen-Image 2.1 turbo(8步·固定表)": { + "scheme": "Qwen-Image-2.1 turbo 8步", "sampler": "euler", "scheduler": "simple", + "steps": 8, "cfg": 1.0, + }, + "Krea 2 turbo(8步)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "simple", + "steps": 8, "cfg": 1.0, + }, + "Krea 2 turbo・细节增强(12步)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "simple", + "steps": 12, "cfg": 1.0, + }, + "FLUX.2 klein(4步·beta)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "beta", + "steps": 4, "cfg": 1.0, + }, + "FLUX.2 klein・高清修复(4步)": { + "scheme": SCHEME_AUTO, "sampler": "euler_ancestral", "scheduler": "simple", + "steps": 4, "cfg": 1.0, + }, + "Z-Image turbo(8步)": { + "scheme": SCHEME_AUTO, "sampler": "euler_ancestral", "scheduler": "simple", + "steps": 8, "cfg": 1.0, + }, + "Qwen-Image Layered(9步·CFG2.5)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "simple", + "steps": 9, "cfg": 2.5, + }, + "Qwen-Image Edit 2511 AIO(4步)": { + "scheme": SCHEME_AUTO, "sampler": "euler_ancestral", "scheduler": "beta", + "steps": 4, "cfg": 1.0, + }, + # 下面两个是 11-04 新加:FIBO 是 4 步蒸馏(steps 给大反而崩),MOSS 是 SFT 不是蒸馏, + # 30 步 + CFG 4 才是它训练时的配置,降到 4 步会糊成一片。 + "FIBO 2.0 turbo(4步)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "simple", + "steps": 4, "cfg": 1.0, + }, + "MOSS-Image(30步·CFG4)": { + "scheme": SCHEME_AUTO, "sampler": "euler", "scheduler": "normal", + "steps": 30, "cfg": 4.0, + }, +} + +# 中途有过一版用短名("Qwen 2.1 · 25步" 这种),已存盘的工作流里可能是它。 +# 加载时由前端按这张表把旧值翻译成当前全名,否则下拉会显示成空值。 +PRESET_ALIASES = { + "Qwen 2.1 · 25步": "Qwen-Image 2.1(25步)", + "Qwen 2.1 turbo · 8步表": "Qwen-Image 2.1 turbo(8步·固定表)", + "Krea2 turbo · 8步": "Krea 2 turbo(8步)", + "Krea2 细节 · 12步": "Krea 2 turbo・细节增强(12步)", + "FLUX2 klein · 4步": "FLUX.2 klein(4步·beta)", + "FLUX2 高清 · 4步": "FLUX.2 klein・高清修复(4步)", + "Z-Image turbo · 8步": "Z-Image turbo(8步)", + "Layered · 9步": "Qwen-Image Layered(9步·CFG2.5)", + "2511 AIO · 4步": "Qwen-Image Edit 2511 AIO(4步)", +} + +PRESET_LIST = [PRESET_NONE] + [k for k in MODEL_PRESETS if k != PRESET_NONE] + +# widgets_values 是「按顺序」存的,而 1.57 之前的老存档没有 widgets_values_named, +# 只能靠位置对上号。把「模型预设」挪到最前面之后,这份「老顺序」就是给前端 +# 填 nodeData.fallbackWidgetsValuesNames 用的 —— 老存档照这张表按名字重新对应。 +LEGACY_WIDGET_ORDER = [ + "采样方案", "采样器", "调度器", "步数", "CFG", "降噪", + "噪波随机种", "control_after_generate", "自定义Sigma表", "模型预设", +] + + +# ==================== 工具 ==================== + +class _RandomNoise: + """等价于官方的 Noise_RandomNoise。""" + + def __init__(self, seed): + self.seed = seed + + def generate_noise(self, input_latent): + latent_image = input_latent["samples"] + batch_inds = input_latent.get("batch_index") + return comfy.sample.prepare_noise(latent_image, self.seed, batch_inds) + + +def parse_sigmas(text): + """把 "1.0, 0.9, 0" 解析成 tensor,并做基本校验。""" + if text is None: + raise ValueError("Sigma 表为空") + raw = str(text).replace("\n", ",").replace(";", ",").replace("\t", ",") + values = [] + for part in raw.split(","): + part = part.strip() + if not part: + continue + try: + values.append(float(part)) + except ValueError: + raise ValueError(f"Sigma 表里有无法解析的值:{part!r}(只能是数字和逗号)") + + if len(values) < 2: + raise ValueError("Sigma 表至少需要 2 个值(N 个点 = N-1 步)") + if abs(values[-1]) > 1e-6: + raise ValueError(f"Sigma 表末值必须是 0,现在是 {values[-1]}(否则采样收不干净)") + for i in range(len(values) - 1): + if values[i + 1] > values[i] + 1e-6: + raise ValueError( + f"Sigma 表必须严格递减,第 {i + 1} 个值 {values[i]} -> {values[i + 1]} 是上涨的" + ) + return torch.FloatTensor(values) + + +def truncate_sigmas(sigmas, denoise): + """按降噪比例从表尾截取 —— 与 BasicScheduler 的 denoise 语义一致。 + + img2img / 细化时从较低噪声处起步,所以砍掉表头的高噪声段。 + """ + if denoise >= 0.999: + return sigmas + if denoise <= 0.0: + raise ValueError("降噪为 0 时没有可采样的步数") + + total = sigmas.shape[-1] - 1 # 总步数 + keep = max(1, min(total, int(round(total * denoise)))) + return sigmas[-(keep + 1):] + + +# ==================== 节点 ==================== + +class ToggleSampler: + """一体化采样器:噪波 + CFG引导器 + 采样器 + Sigmas => 出一个 Latent。""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "模型": ("MODEL",), + "正面条件": ("CONDITIONING",), + "负面条件": ("CONDITIONING",), + "Latent图像": ("LATENT",), + # 「模型预设」放在所有参数控件的最前面:先选模型、再微调,才是真实顺序。 + # 它只是前端的一键填充按钮,后端不参与计算。 + "模型预设": (PRESET_LIST, { + "default": PRESET_NONE, + "tooltip": "选一个模型,自动把下面的采样方案/采样器/调度器/步数/CFG 填好;" + "之后手动改其中任何一个会自动回到「手动」", + }), + "采样方案": (SCHEME_LIST, {"default": SCHEME_AUTO}), + "采样器": (comfy.samplers.KSampler.SAMPLERS, {"default": "euler"}), + "调度器": (comfy.samplers.KSampler.SCHEDULERS, {"default": "simple"}), + "步数": ("INT", { + "default": 20, "min": 1, "max": 10000, "step": 1, + "tooltip": "仅「自动」方案生效;选预置表时步数由表的点数决定", + }), + "CFG": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.1}), + "降噪": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "噪波随机种": ("INT", { + "default": 0, "min": 0, "max": 0xffffffffffffffff, + "control_after_generate": True, + }), + "自定义Sigma表": ("STRING", { + "default": SCHEMA_SAMPLE, + "multiline": True, + "tooltip": "仅「自定义表」方案生效。逗号分隔、严格递减、末值必须是 0", + }), + } + } + + RETURN_TYPES = ("LATENT", "LATENT") + RETURN_NAMES = ("Latent", "降噪Latent") + FUNCTION = "sample" + CATEGORY = "Toggle-Pass" + + # ---------- sigma ---------- + + @staticmethod + def build_sigmas(model, scheme, scheduler, steps, denoise, custom_text): + if scheme == SCHEME_AUTO: + total = steps + if denoise < 1.0: + if denoise <= 0.0: + raise ValueError("降噪为 0 时没有可采样的步数") + total = int(steps / denoise) + sigmas = comfy.samplers.calculate_sigmas( + model.get_model_object("model_sampling"), scheduler, total + ).cpu() + return sigmas[-(steps + 1):] + + text = custom_text if scheme == SCHEME_CUSTOM else SIGMA_PRESETS.get(scheme) + if text is None: + raise ValueError(f"未知采样方案:{scheme}") + return truncate_sigmas(parse_sigmas(text), denoise) + + # ---------- 主流程 ---------- + + def sample(self, 模型, 正面条件, 负面条件, Latent图像, 采样方案, 采样器, + 调度器, 步数, CFG, 降噪, 噪波随机种, 自定义Sigma表, + 模型预设=PRESET_NONE): + # ⚠️ 这里的参数顺序和 INPUT_TYPES 不一样是故意的:`模型预设` 在 INPUT_TYPES 里排第一 + # (决定前端控件的显示顺序),但这里必须留在末尾 —— Python 不允许有默认值的参数 + # 排在无默认值的前面。ComfyUI 用关键字传参(getattr(obj, FUNCTION)(**inputs)), + # 所以顺序差异不影响调用。 + # 模型预设只是个前端快捷填充:选中时前端已经把下面几个参数改好了, + # 这里不能再套一次 —— 否则用户选完预设又手改了步数,会被后端悄悄改回去。 + model = 模型 + latent = Latent图像 + work = latent.copy() + + samples = comfy.sample.fix_empty_latent_channels( + model, + latent["samples"], + work.get("downscale_ratio_spacial"), + work.get("downscale_ratio_temporal"), + ) + work["samples"] = samples + noise_mask = work.get("noise_mask") + + sigmas = self.build_sigmas(model, 采样方案, 调度器, 步数, 降噪, 自定义Sigma表) + if sigmas.shape[-1] < 2: + raise ValueError("Sigma 表换算后不足 2 个点,请加大步数或减小降噪") + + guider = comfy.samplers.CFGGuider(model) + guider.set_conds(正面条件, 负面条件) + guider.set_cfg(CFG) + + sampler = comfy.samplers.sampler_object(采样器) + noise = _RandomNoise(噪波随机种) + + x0_output = {} + callback = latent_preview.prepare_callback(model, sigmas.shape[-1] - 1, x0_output) + disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED + + out_samples = guider.sample( + noise.generate_noise(work), + samples, + sampler, + sigmas, + denoise_mask=noise_mask, + callback=callback, + disable_pbar=disable_pbar, + seed=噪波随机种, + ) + out_samples = out_samples.to(comfy.model_management.intermediate_device()) + + out = latent.copy() + out.pop("downscale_ratio_spacial", None) + out.pop("downscale_ratio_temporal", None) + out["samples"] = out_samples + + if "x0" in x0_output: + x0_out = model.model.process_latent_out(x0_output["x0"].cpu()) + out_denoised = latent.copy() + out_denoised["samples"] = x0_out + else: + out_denoised = out + + return (out, out_denoised) + + +NODE_CLASS_MAPPINGS = { + "ToggleSampler": ToggleSampler, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "ToggleSampler": "采样器(一体)", +} + + +# ---- 给前端用的预设表接口 ---- +def _register_routes(): + """把 MODEL_PRESETS 原样吐给前端,避免 JS 里再抄一份导致两边不同步。""" + try: + from aiohttp import web + from server import PromptServer + + instance = getattr(PromptServer, "instance", None) + routes = getattr(instance, "routes", None) if instance is not None else None + if routes is None: + return + + @routes.get("/toggle_pass/sampler_presets") + async def _sampler_presets(request): + return web.json_response({ + "presets": MODEL_PRESETS, + "list": PRESET_LIST, + "default": PRESET_NONE, + "schemes": SCHEME_LIST, + # 老存档里存的是长名,前端加载时按这张表换成新名 + "aliases": PRESET_ALIASES, + # 1.57 之前的老存档只有按位置的 widgets_values,用这张表按名字重新对应 + "legacyWidgetOrder": LEGACY_WIDGET_ORDER, + }) + except Exception: + # 独立导入 / 无 server 模块时静默跳过,不影响节点本身 + return + + +_register_routes() diff --git a/unified_loader.py b/unified_loader.py index f280995..ce45b04 100644 --- a/unified_loader.py +++ b/unified_loader.py @@ -35,8 +35,55 @@ CLIP_TYPE_MAP = { # Krea-2 专用:TE 是 Qwen3-VL-4B(12 层 tap),与 Qwen-Image 的 8B 不是一回事, # 选错会建出通用 qwen3vl,conditioning 宽度对不上 "krea2": comfy.sd.CLIPType.KREA2, + # ★ 下面两个和 krea2 共用 Qwen3-VL-4B 的权重文件,但**取层方式完全不同**, + # 选错不是效果差,而是 conditioning 维度直接对不上(跑不起来或全废): + # krea2 → [2,5,8,...,35] 每 3 层取满全程 → 12 层 × 2560 + # fibo2 → [5,7,9,...,35] 每 2 层只截中段 → 6 组 × 7680 + # moss_image → TE 是 Qwen3.5-**9B**(不是 VL-4B),无 tap,取 last hidden state + "fibo2": comfy.sd.CLIPType.FIBO2, + "moss_image": comfy.sd.CLIPType.MOSS_IMAGE, } +# ↑ 以上是「常用 + 有专门说明」的项,顺序不能动(widgets_values 按位置序列化)。 +# ↓ 以下是「兜底全量」:把 ComfyUI 当前支持、但上面没登记的类型补齐, +# 免得遇到少见模型时下拉里找不到、只能去翻 comfy/sd.py。 +# 实现要点:用 getattr 取枚举 —— 旧版 ComfyUI 少了某个成员时只是跳过该项, +# 不会在 import 阶段抛 AttributeError 把整个插件带崩。 +# 全部**追加在末尾**,已有项的位置不变,老工作流照旧。 +_CLIP_TYPE_EXTRA = [ + ("stable_audio", "STABLE_AUDIO"), + ("hunyuan_dit", "HUNYUAN_DIT"), + ("hunyuan_video", "HUNYUAN_VIDEO"), + ("hunyuan_video_15", "HUNYUAN_VIDEO_15"), + ("hunyuan_image", "HUNYUAN_IMAGE"), + ("pixart", "PIXART"), + ("cosmos", "COSMOS"), + ("lumina2", "LUMINA2"), + ("chroma", "CHROMA"), + ("ace", "ACE"), + ("omnigen2", "OMNIGEN2"), + ("ovis", "OVIS"), + ("kandinsky5", "KANDINSKY5"), + ("kandinsky5_image", "KANDINSKY5_IMAGE"), + ("newbie", "NEWBIE"), + ("longcat_image", "LONGCAT_IMAGE"), + ("cogvideox", "COGVIDEOX"), + ("lens", "LENS"), + ("pixeldit", "PIXELDIT"), + ("ideogram4", "IDEOGRAM4"), + ("boogu", "BOOGU"), + ("joyimage", "JOYIMAGE"), + ("mage", "MAGE"), + ("minimax", "MINIMAX"), + ("yue2", "YUE2"), + ("flux3", "FLUX3"), +] +for _key, _enum_name in _CLIP_TYPE_EXTRA: + _v = getattr(comfy.sd.CLIPType, _enum_name, None) + if _v is not None and _key not in CLIP_TYPE_MAP: + CLIP_TYPE_MAP[_key] = _v +del _key, _enum_name, _v + # auto 检测用:supported_models 检测出的模型类 -> 对应的 CLIPType 枚举。 # 注意 comfy.sd.load_clip 的 clip_type 参数是与 CLIPType 枚举比较的 # (见 comfy/sd.py load_text_encoder_state_dicts),所以这里必须返回枚举, @@ -46,8 +93,22 @@ _MODEL_CLASS_TO_CLIPTYPE = { "QwenImage21": comfy.sd.CLIPType.QWEN_IMAGE, "QwenImage": comfy.sd.CLIPType.QWEN_IMAGE, "Krea2": comfy.sd.CLIPType.KREA2, + "Fibo2": comfy.sd.CLIPType.FIBO2, + "MOSSImage": comfy.sd.CLIPType.MOSS_IMAGE, "Flux2": comfy.sd.CLIPType.FLUX2, "Flux": comfy.sd.CLIPType.FLUX, + # Z-Image(Lumina2 / NextDiT)的 TE 是 qwen_3_4b,ComfyUI 按「TE 类型」自动选 + # comfy.text_encoders.z_image.te(见 comfy/sd.py 的 TEModel.QWEN3_4B 分支: + # 只要 clip_type 不是 flux/flux2 就走 z_image.te)。这里登记 stable_diffusion + # 只为让 auto 检测有个确定值、不打印「未登记映射」的告警。 + # ⚠️ 手工选的时候**别选 flux / flux2**:2026-11-06 实测,同样 qwen_3_4b + 同样 unet, + # flux → 文本编码器建成 Flux2TEModel_(Flux 系的 Klein 编码器), + # stable_diffusion / qwen_image / auto → 都是 ZImageTEModel_(正确)。 + # 建错类不报错,提示词编码全变,出图「能跑但不像 prompt」。 + "ZImage": comfy.sd.CLIPType.STABLE_DIFFUSION, + # 实测 model_detection 对 Z-Image 权重返回的类名是父类 Lumina2(不是 ZImage), + # 所以这里两条都要登记,否则 auto 会打「未登记映射」并静默回落。 + "Lumina2": comfy.sd.CLIPType.STABLE_DIFFUSION, "SD3": comfy.sd.CLIPType.SD3, "SDXL": comfy.sd.CLIPType.STABLE_DIFFUSION, "SD15": comfy.sd.CLIPType.STABLE_DIFFUSION, @@ -61,6 +122,56 @@ _MODEL_CLASS_TO_CLIPTYPE = { "HiDream": comfy.sd.CLIPType.HIDREAM, } +# 只登记「clip_type 真的改变结果」、且继承链救不回来的类。 +# 判断依据是 comfy/sd.py 的 load_text_encoder_state_dicts:clip_type 只在 +# **同一个 TE 权重能走多条路**的分支里起作用,其余情况它被忽略 —— +# 所以不必给 108 个类都登记,只补歧义区。 +# 典型歧义:Qwen3-VL-8B(QWEN_IMAGE / IDEOGRAM4 / BOOGU / JOYIMAGE)、 +# Qwen3-VL-4B(KREA2 / FIBO2 / FLUX3 / MAGE / MINIMAX / FLUX)、 +# T5-XXL(SD3 / LTXV / WAN / CHROMA / PIXART / COGVIDEOX / MOCHI)、 +# CLIP-G(SD3 / STABLE_CASCADE / HIDREAM)。 +# 用 getattr:旧版 ComfyUI 少成员时跳过该项,不会在 import 阶段把插件带崩。 +_EXTRA_MODEL_CLASS_TO_CLIPTYPE = [ + ("Flux3", "FLUX3"), + ("HunyuanVideo15", "HUNYUAN_VIDEO_15"), + ("HunyuanVideo15_SR_Distilled", "HUNYUAN_VIDEO_15"), + ("HunyuanImage21", "HUNYUAN_IMAGE"), + ("HunyuanImage21Refiner", "HUNYUAN_VIDEO"), + ("HunyuanDiT", "HUNYUAN_DIT"), + ("HunyuanDiT1", "HUNYUAN_DIT"), + ("Chroma", "CHROMA"), + ("ChromaRadiance", "CHROMA"), + ("CogVideoX_T2V", "COGVIDEOX"), + ("CogVideoX_I2V", "COGVIDEOX"), + ("CogVideoX_Inpaint", "COGVIDEOX"), + ("GenmoMochi", "MOCHI"), + ("Ideogram4", "IDEOGRAM4"), + ("Boogu", "BOOGU"), + ("JoyImage", "JOYIMAGE"), + ("MageFlow", "MAGE"), + ("MiniMaxH3", "MINIMAX"), + ("LongCatImage", "LONGCAT_IMAGE"), + ("PixelDiTT2I", "PIXELDIT"), + ("PiD", "PIXELDIT"), + ("PixArtAlpha", "PIXART"), + ("PixArtSigma", "PIXART"), + ("Stable_Cascade_B", "STABLE_CASCADE"), + ("Stable_Cascade_C", "STABLE_CASCADE"), + ("SDXLRefiner", "STABLE_DIFFUSION"), +] +for _mc, _enum_name in _EXTRA_MODEL_CLASS_TO_CLIPTYPE: + _v = getattr(comfy.sd.CLIPType, _enum_name, None) + if _v is not None and _mc not in _MODEL_CLASS_TO_CLIPTYPE: + _MODEL_CLASS_TO_CLIPTYPE[_mc] = _v +del _mc, _enum_name, _v + +# WAN 有 17 个类(WAN21_T2V / WAN22_S2V / WAN_Animate2 …),逐个登记会随上游发版漂移。 +# 它们都是 T5-XXL,且 clip_type 不选 wan 就会掉进 else 建成 **Mochi** 的 TE +# (comfy/sd.py: TEModel.T5_XXL 分支的 else 就是 mochi_te),所以按前缀兜住。 +_CLIP_TYPE_PREFIX_RULES = [ + ("WAN", comfy.sd.CLIPType.WAN), +] + # 模型类 -> 文本编码器类名前缀(用于分体模式的 CLIP 校验)。 # 只登记「实测确认过类名」的几类;没登记的模型不做校验,宁可漏报也不误报。 # ⚠️ 这不是等价关系:QwenImage(v1, Qwen2.5-VL) 与 QwenImage21(Qwen3-VL-8B) 的 TE 类 @@ -69,11 +180,44 @@ _MODEL_CLASS_TO_TE_PREFIX = { "QwenImage21": "QwenImage21TEModel", "QwenImage": "QwenImageTEModel", "Krea2": "Krea2TEModel", + # fibo2 用 Qwen3-VL-4B 的 15 层中段,类名 Fibo2TEModel_; + # moss_image 用 Qwen3.5-9B,类名 MOSSImageTEModel_ —— 两者都不能用 Krea2TEModel_ 代替 + "Fibo2": "Fibo2TEModel", + "MOSSImage": "MOSSImageTEModel", "Flux2": "Flux2TEModel", "Flux": "FluxTEModel", + "ZImage": "ZImageTEModel", } +def _resolve_clip_type(model): + """按「已加载的模型对象」推导 CLIPType(auto 用)。返回 (枚举|None, 命中方式)。 + + 三层查找:精确表 → 继承链 → 前缀规则。 + 之所以不用一张大表覆盖全部 108 个 supported_models 类:comfy/sd.py 里 + clip_type 只在「同一个 TE 权重能走多条路」的分支才起作用(T5-XXL 的 + SD3/LTXV/WAN/CHROMA/PIXART/COGVIDEOX/MOCHI、CLIP-G 的 SD3/CASCADE/HIDREAM、 + Qwen3-VL 的 QWEN_IMAGE/KREA2/FIBO2/…),其余模型它根本不参与判断。 + 所以精确表只登记歧义项,子类靠继承链(FluxSchnell→Flux)、变体靠前缀 + (WAN21_I2V→WAN*)兜住,上游加新类也不会突然全错。 + """ + # ⚠️ load_unet 返回的是 ModelPatcher,真正的模型对象在 .model 里。 + # 直接 type(model) 会永远拿到 ModelPatcher —— 实测会让所有模型都推不出来。 + inner = getattr(model, "model", None) or model + cls = type(inner) + ct = _MODEL_CLASS_TO_CLIPTYPE.get(cls.__name__) + if ct is not None: + return ct, f"精确匹配 {cls.__name__}" + for base in cls.__mro__[1:]: + ct = _MODEL_CLASS_TO_CLIPTYPE.get(base.__name__) + if ct is not None: + return ct, f"继承链 {cls.__name__} → {base.__name__}" + for prefix, ct in _CLIP_TYPE_PREFIX_RULES: + if cls.__name__.startswith(prefix): + return ct, f"前缀规则 {cls.__name__} → {prefix}*" + return None, "" + + def _detect_clip_type(unet_name): """【已弃用,保留备查】从 UNet 文件猜 CLIPType 枚举。 @@ -229,20 +373,43 @@ def _te_class_name(clip): return None -def _check_clip_match(model_cls, clip): +def _expected_te_from_model(model): + """向模型自己询问「我该配哪个文本编码器」,拿不到返回 None。 + + comfy 的模型 config 自带 clip_target(),返回的 (tokenizer, clip) 就是这套 + 权重官方配对的**正确答案**,与我们这张手工表无关。实测 supported_models + 里 106/108 个类能这样拿到类名(Flux2 / HiDream 等返回 None,退回手工表)。 + 只用作「手工表没登记时」的补充,不覆盖已实测过的条目。 + """ + try: + cfg = getattr(getattr(model, "model", None), "model_config", None) + if cfg is None: + return None + clip_cls = getattr(cfg.clip_target(), "clip", None) + return clip_cls.__name__ if isinstance(clip_cls, type) else None + except Exception: + return None + + +def _check_clip_match(model_cls, clip, model=None): """校验分体模式下 CLIP 文件是否与模型配套。 背景:换 CLIP 文件会改变 ComfyUI 建出的文本编码器类,日志实测出现过 QwenImage21TEModel_(6018MB,正确) / QwenImageTEModel_(7910MB,v1) / Flux2TEModel_(8262MB,完全不对)。建错了 conditioning 就是废的, 表现却是「跑得通但什么都不生效」,极难自查 —— 所以这里主动报出来。 - 返回 {"te":..., "expect":..., "ok": True/False/None}(None = 该模型不做校验)。 + 返回 {"te":..., "expect":..., "ok": True/False/None, "src":...} + (ok=None = 该模型不做校验)。 """ te = _te_class_name(clip) expect = _MODEL_CLASS_TO_TE_PREFIX.get(model_cls) + src = "手工表" + if expect is None and model is not None: + expect = _expected_te_from_model(model) + src = "模型自述" if not te or not expect: - return {"te": te, "expect": expect, "ok": None} - return {"te": te, "expect": expect, "ok": te.startswith(expect)} + return {"te": te, "expect": expect, "ok": None, "src": src} + return {"te": te, "expect": expect, "ok": te.startswith(expect), "src": src} # 模型类 -> 换 VAE 的具体建议。只登记实测确认过的场景,避免给出误导性推荐。 @@ -251,6 +418,16 @@ _VAE_HINT = { "qwen_image_vae.safetensors 是 Qwen-Image 1.0 的(16 通道 / 3 维),两者不通用。", "Krea2": "Krea-2 用的是 qwen_image_vae.safetensors(16 通道 / 3 维 / 8x);" "别选 qwen_image_2.1_vae_bf16(64 通道 / 2 维),那个是 Qwen-Image-2.1 的。", + # Fibo2 / MOSS-Image 共用 Flux2 的 latent(32ch + bn -> 128ch / 16x), + # VAE 必须是 flux2-vae 系列,换成 qwen/其它系列解码就会炸 + "Fibo2": "FIBO 2.0 用的是 flux2-vae.safetensors(128 通道 / 16x);" + "别选 qwen_image_vae 或 qwen_image_2.1_vae_bf16,通道数完全不同。", + "MOSSImage": "MOSS-Image 同样走 Flux2 latent,用 flux2-vae_small.safetensors" + "(官方编辑模板)或 flux2-vae.safetensors 都可以;别选 qwen 系列 VAE。", + # Z-Image 的 latent_format = Flux(16 通道 / 8x),VAE 就是 Flux 的 ae.safetensors。 + # qwen 系列 VAE 通道数碰巧也是 16,光看通道校验不出来,但两者不是同一套,别混用。 + "ZImage": "Z-Image 的 latent_format 是 Flux(16 通道 / 8×),VAE 用 ae.safetensors;" + "qwen_image_vae 通道数碰巧也是 16,校验查不出来,但别拿它顶替。", } @@ -397,7 +574,7 @@ class ToggleUnifiedLoader: "(实测与官方节点逐像素一致),只是效果会比全精度底座更『糊』一些;" "风格特别细腻的 LoRA 可能不易看出,想要更干净可换 bf16/fp16 一体包。") # 一体包也会自动猜 CLIP,同样校验一下(猜错时 conditioning 会整体失效) - self._clip_check = _check_clip_match(type(getattr(model, "model", None)).__name__, clip) + self._clip_check = _check_clip_match(type(getattr(model, "model", None)).__name__, clip, model) if self._clip_check.get("ok") is False: print(f"[ToggleUnifiedLoader] ⚠️ CLIP 校验:文本编码器建成 {self._clip_check['te']}" f"(预期 {self._clip_check['expect']}),该 checkpoint 的 CLIP 可能与模型不配套") @@ -423,13 +600,17 @@ class ToggleUnifiedLoader: clip_type_enum = CLIP_TYPE_MAP[clip_type] print(f"[ToggleUnifiedLoader] CLIP 类型: 手动指定 {clip_type}") else: - clip_type_enum = _MODEL_CLASS_TO_CLIPTYPE.get(model_cls) + clip_type_enum, how = _resolve_clip_type(model) if clip_type_enum is None: - print(f"[ToggleUnifiedLoader] 模型类 {model_cls} 未登记映射," - f"CLIP 类型默认使用 STABLE_DIFFUSION") + # 兜底。多数情况下无害:TE 权重唯一确定时 ComfyUI 根本不看 clip_type + # (这类模型占 supported_models 的三分之一,如 Anima/AuraFlow/Cosmos/Lens)。 + # 真正会因此建错 TE 的只有 T5-XXL / Qwen3-VL / CLIP-G 那几族, + # 而它们都已在前两层命中;万一是上游新加的类,由下一步的 TE 校验兜住报出来。 + print(f"[ToggleUnifiedLoader] 自动检测:模型类 {model_cls} 没有专门登记," + f"使用通用 CLIP 类型 STABLE_DIFFUSION(多数模型下这个值不参与判断)") clip_type_enum = comfy.sd.CLIPType.STABLE_DIFFUSION else: - print(f"[ToggleUnifiedLoader] 自动检测 CLIP 类型: {model_cls} -> {clip_type_enum}") + print(f"[ToggleUnifiedLoader] 自动检测 CLIP 类型: {how} → {clip_type_enum.name}") # 3. 加载 CLIP clip_path = folder_paths.get_full_path("clip", clip_name) @@ -437,11 +618,11 @@ class ToggleUnifiedLoader: # 3.1 校验文本编码器是否与模型配套。 # 选错 CLIP 文件时 ComfyUI 会静静建出另一个 TE 类,跑得通但 conditioning 全废。 - self._clip_check = _check_clip_match(model_cls, clip) + self._clip_check = _check_clip_match(model_cls, clip, model) if self._clip_check.get("ok") is False: print(f"[ToggleUnifiedLoader] ⚠️ CLIP 校验失败:模型是 {model_cls}," f"但文本编码器建成了 {self._clip_check['te']}" - f"(预期 {self._clip_check['expect']})。" + f"(预期 {self._clip_check['expect']},依据 {self._clip_check.get('src')})。" f"这个 CLIP 文件与模型不配套 → 提示词会被错误编码(跑得通但什么都不生效)。" f"请更换 CLIP 文件,或检查『CLIP 类型』是否选对。") elif self._clip_check.get("te"):