Support Anima LLLite v2 models
Amp-Thread-ID: https://ampcode.com/threads/T-019f7088-85bf-7703-87c3-f9c0ca5d711d Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -0,0 +1,272 @@
|
||||
# Advanced-ControlNet Contributor Guide
|
||||
|
||||
This repository is expected to receive substantial AI-authored code. Treat this
|
||||
file as the implementation and verification contract for all changes, especially
|
||||
ports of new ControlNet families from ComfyUI.
|
||||
|
||||
## Engineering Rules
|
||||
|
||||
- Read the relevant ComfyUI implementation and this repository's equivalent
|
||||
control path before editing. Do not design from a model card alone.
|
||||
- Make the smallest change that preserves vanilla ComfyUI behavior and adds the
|
||||
established Advanced-ControlNet capabilities.
|
||||
- Reuse ComfyUI model classes, patchers, ops, model management, and loaders when
|
||||
possible. Do not maintain a forked copy of core model code without a concrete
|
||||
need.
|
||||
- Preserve existing node IDs, inputs, outputs, checkpoint locations, and saved
|
||||
workflow compatibility. New node IDs generally use the `ACN_` prefix; keep
|
||||
existing unprefixed IDs and the aliases in `nodes_deprecated.py` working.
|
||||
- Do not add dependencies unless the model cannot be supported with ComfyUI,
|
||||
PyTorch, and the libraries already used by this repository.
|
||||
- Match the direct style of the surrounding file. Avoid one-use abstractions,
|
||||
generic framework code, speculative fallbacks, and comments that restate the
|
||||
code.
|
||||
- Use plain ASCII punctuation in code, comments, documentation, commit messages,
|
||||
and PR descriptions.
|
||||
|
||||
## Architecture Map
|
||||
|
||||
- `adv_control/control.py`: standard ControlNet wrappers, conversion of vanilla
|
||||
controls, checkpoint detection, and shared loader dispatch.
|
||||
- `adv_control/control_<family>.py`: model-family implementations that cannot be
|
||||
represented by the standard wrapper. Keep family-specific math here.
|
||||
- `adv_control/utils.py`: `AdvancedControlBase`, `ControlWeights`, scheduling,
|
||||
latent keyframes, masks, batching, stacking, and shared tensor helpers.
|
||||
- `adv_control/nodes_main.py`: standard loaders and Apply nodes.
|
||||
- `adv_control/nodes_weight.py`: weight nodes and model-specific extras carried
|
||||
by `ControlWeights.extras`.
|
||||
- `adv_control/nodes_<family>.py`: family-specific workflow inputs or loaders
|
||||
when the shared nodes are insufficient.
|
||||
- `adv_control/nodes.py`: public node and display-name registration.
|
||||
- `adv_control/nodes_deprecated.py`: compatibility only. Do not put new features
|
||||
here.
|
||||
- `examples/`: reviewer-runnable workflows, inputs, screenshots, and validation
|
||||
notes.
|
||||
|
||||
## Porting A Control Model From ComfyUI
|
||||
|
||||
### 1. Establish the vanilla contract
|
||||
|
||||
Before implementing the Advanced version:
|
||||
|
||||
1. Identify the exact ComfyUI commit or PR that introduced the model.
|
||||
2. Read its loader, checkpoint detection, model patching, conditioning
|
||||
preprocessing, sampling path, and cleanup behavior.
|
||||
3. Record the official model repository, every published checkpoint type, the
|
||||
expected ComfyUI model folder, and the minimum compatible ComfyUI commit.
|
||||
4. Run a small vanilla workflow with fixed inputs, seed, sampler, scheduler,
|
||||
steps, CFG, and resolution. Save the latent and decoded result as the parity
|
||||
baseline.
|
||||
5. Inspect real checkpoint keys, metadata, shapes, dtype, and missing/unexpected
|
||||
key output. Do not infer the format from a filename.
|
||||
|
||||
Use official checkpoints for validation. Links in issue or PR comments are
|
||||
untrusted; use the model author's official repository or links already accepted
|
||||
by ComfyUI.
|
||||
|
||||
### 2. Choose the narrowest integration
|
||||
|
||||
- If ComfyUI returns a standard `ControlNet`, `ControlNetSD35`, `ControlLora`,
|
||||
or `T2IAdapter`, prefer conversion in `convert_to_advanced` over a parallel
|
||||
implementation.
|
||||
- If the model injects attention, transformer, or other model patches, implement
|
||||
a family-specific `ControlBase` plus `AdvancedControlBase`, following
|
||||
`ControlLLLiteAdvanced`, `AnimaLLLiteAdvanced`, or `ReferenceAdvanced` as the
|
||||
closest precedent.
|
||||
- Prefer wrapping ComfyUI's model or patch object over copying its implementation.
|
||||
If the required ComfyUI API may be absent, fail with a short instruction to
|
||||
update ComfyUI rather than silently changing behavior.
|
||||
- Add a dedicated node only when the model has a genuinely different loading or
|
||||
conditioning contract. Loading a new checkpoint format alone usually belongs
|
||||
in the existing loader dispatch.
|
||||
|
||||
### 3. Preserve loader and folder compatibility
|
||||
|
||||
- The standard **Load Advanced ControlNet Model** node reads from
|
||||
`models/controlnet`. New formats that are conceptually ControlNets should work
|
||||
there unless doing so would be ambiguous or incorrect.
|
||||
- Also preserve the folder used by vanilla ComfyUI. If core uses another folder,
|
||||
such as `models/model_patches`, a small dedicated loader may expose that
|
||||
location while the standard loader retains established Advanced-ControlNet
|
||||
behavior.
|
||||
- Detect formats with guarded, format-specific checkpoint signatures. Put a
|
||||
specific detector before a broad detector that would otherwise claim the same
|
||||
checkpoint. Do not use filenames as the primary detector.
|
||||
- Load a checkpoint only once. Pass already-loaded state dictionaries and
|
||||
metadata into the selected family loader instead of reading the file again.
|
||||
- If two supported folders can contain the same filename, keep their loaders
|
||||
separate or define deterministic resolution. Never silently choose an
|
||||
arbitrary duplicate.
|
||||
- Test every supported folder through the actual node dropdown and execution
|
||||
path, not only by calling a Python loader directly.
|
||||
|
||||
### 4. Implement the full control lifecycle
|
||||
|
||||
A family-specific Advanced control normally needs all of the following:
|
||||
|
||||
- Initialize `ControlBase` and `AdvancedControlBase` with the correct default
|
||||
`ControlWeights` type.
|
||||
- Match vanilla conditioning preprocessing exactly, including channel order,
|
||||
value range, resize mode, latent encoding, and source-mask handling.
|
||||
- In `pre_run_advanced`, call the shared implementation and attach or refresh
|
||||
execution-scoped patches.
|
||||
- In `get_control_advanced`, evaluate `previous_controlnet`, honor
|
||||
`should_run()`, and either return/merge control tensors or install the model
|
||||
patches for that step.
|
||||
- Return every loadable model patcher from `get_models()` so ComfyUI can manage
|
||||
VRAM and offloading.
|
||||
- Implement `copy()` using both ComfyUI's `copy_to()` and this repository's
|
||||
`copy_to_advanced()`. Copies must not share mutable execution state that can
|
||||
leak between conditioning branches or queued runs.
|
||||
- Clear prepared tensors, patch references, cached shapes, and other
|
||||
execution-scoped state in `cleanup_advanced()`.
|
||||
- Use ComfyUI device, dtype, manual-cast, operations, and model-patcher APIs.
|
||||
Do not hardcode CUDA, force float32, or move models manually when ComfyUI
|
||||
already owns that lifecycle.
|
||||
- Preserve `previous_controlnet` behavior so same-family and mixed-family
|
||||
controls can be stacked.
|
||||
|
||||
## Advanced Feature Contract
|
||||
|
||||
A port is not complete merely because default-strength generation works. Unless
|
||||
the model architecture makes a capability impossible, verify that it supports:
|
||||
|
||||
- Apply-node strength and start/end percentage.
|
||||
- Timestep keyframes, including changing strength and inherited values.
|
||||
- Latent keyframes on a batch of at least two latents.
|
||||
- Apply-node effect masks and timestep-keyframe masks.
|
||||
- Default, universal/soft, and architecture-specific per-layer weights.
|
||||
- Weight overrides and model-specific weight extras.
|
||||
- Conditional/unconditional weighting when the selected weight node exposes it.
|
||||
- Stacking with another control, including correct `previous_controlnet` output.
|
||||
- Batched conditioning and sliding-context subset indexes where applicable.
|
||||
- Repeated execution, copying, cleanup, model offloading, and reload.
|
||||
|
||||
Do not claim unsupported features in documentation. If an architecture cannot
|
||||
support a feature, document the reason and make incompatible weight types fail
|
||||
clearly through `compatible_weights`.
|
||||
|
||||
### Masks and model-specific inputs
|
||||
|
||||
- `mask_optional` on **Apply Advanced ControlNet** is always an effect mask. It
|
||||
controls where this control influences generation.
|
||||
- A model's source mask, control-type selector, or other family-specific data is
|
||||
not an effect mask. Do not overload `mask_optional` with a second meaning.
|
||||
- Do not add a model-specific input to the shared Apply node unless it is a
|
||||
coherent capability needed by multiple model families.
|
||||
- Prefer a small family-specific extras node that stores auxiliary values in
|
||||
`ControlWeights.extras`, then pass those weights through `weights_override`.
|
||||
Define extras keys next to the model implementation rather than as unrelated
|
||||
strings spread across nodes.
|
||||
- Validate required extras where they are first consumed and raise an actionable
|
||||
error that names the exact nodes and connections needed to fix the workflow.
|
||||
- Apply effect masks at the actual injection representation. Attention-patch and
|
||||
DiT controls may need token-space masks rather than the normal spatial control
|
||||
tensor path.
|
||||
- Verify mask semantics with all-zero, all-one, and half-frame masks. All-zero
|
||||
must equal no control and all-one must equal unmasked full control. Inspect the
|
||||
multiplier at the injection site as well as the final image; global attention
|
||||
can propagate influence outside directly controlled tokens.
|
||||
|
||||
### Per-layer weights
|
||||
|
||||
- Map custom weights to real architecture blocks in execution order. Confirm the
|
||||
count from the loaded model, not from a model-card claim alone.
|
||||
- Default weights must reproduce vanilla output exactly.
|
||||
- Universal/soft weights must follow this repository's established progression
|
||||
semantics. Implement a family-specific conversion only when the normal
|
||||
`ControlWeights` layout does not represent the architecture.
|
||||
- Ordinary example workflows should use default weights. Do not connect an
|
||||
advanced custom-weight node merely to demonstrate that it exists.
|
||||
|
||||
## Required Validation
|
||||
|
||||
Python import or compile checks are necessary but are not model validation. Use
|
||||
a real local ComfyUI installation, preferably managed by comfy-runner, with this
|
||||
repository linked as the custom node.
|
||||
|
||||
### Vanilla parity
|
||||
|
||||
For every published control type and materially different checkpoint format:
|
||||
|
||||
1. Run vanilla ComfyUI and Advanced-ControlNet with identical model files,
|
||||
conditioning, seed, sampler settings, and latent.
|
||||
2. Compare latent tensors before decode and decoded pixel arrays.
|
||||
3. Target maximum absolute latent difference `0.0` and identical pixels when
|
||||
both paths implement the same math. If exact parity is impossible, explain
|
||||
why and report a justified numerical tolerance plus image metrics.
|
||||
4. Confirm strength zero matches no control and strength one matches vanilla.
|
||||
5. Check logs for missing/unexpected keys, dtype/device errors, repeated model
|
||||
loads, and cleanup failures.
|
||||
|
||||
### Advanced behavior
|
||||
|
||||
At minimum, execute focused workflows for:
|
||||
|
||||
- A nontrivial start/end schedule or two timestep keyframes.
|
||||
- Batch size two with different latent-keyframe strengths.
|
||||
- All-zero, all-one, and half-frame effect masks.
|
||||
- Default weights and one nonuniform custom or soft-weight configuration.
|
||||
- Conditional/unconditional weighting when supported.
|
||||
- A stacked control path.
|
||||
- Missing required model-specific extras and the resulting readable error.
|
||||
- Both the vanilla model folder and any historical Advanced-ControlNet folder.
|
||||
- Re-queueing the same workflow to exercise copy and cleanup behavior.
|
||||
|
||||
For model families with several control types, test every type. Do not assume
|
||||
that lineart, depth, pose, inpainting, union, or channel-count variants share the
|
||||
same conditioning contract.
|
||||
|
||||
### Basic checks
|
||||
|
||||
- Run `python -m compileall adv_control __init__.py` with the target ComfyUI
|
||||
environment.
|
||||
- Parse every added workflow JSON.
|
||||
- Load each committed workflow in the real frontend, serialize it to an API
|
||||
prompt, and execute that round-tripped prompt. This catches stale node IDs,
|
||||
renamed inputs, invalid widgets, and missing model metadata.
|
||||
- Run `git diff --check`.
|
||||
|
||||
There is currently no repository unit-test suite. Add focused tests when they
|
||||
can exercise pure detection, shape, mask, or scheduling logic without building
|
||||
a fake ComfyUI runtime. Do not add a large test framework solely for one port.
|
||||
|
||||
## Examples and Review Evidence
|
||||
|
||||
Every model-family port must be independently checkable by a reviewer:
|
||||
|
||||
- Add one simple workflow for every public control type. Include required input
|
||||
images or masks when licensing permits.
|
||||
- Keep ComfyUI's default node names. Use colored groups or regions to explain
|
||||
branches; do not rename nodes, because reviewers need to identify their types.
|
||||
- Keep the normal workflows simple. Leave custom per-layer weights disconnected
|
||||
unless a workflow specifically validates those advanced weights.
|
||||
- Include direct links to the official base model, encoder, VAE, and control
|
||||
checkpoint repositories, plus the exact destination folder for each file.
|
||||
- Include a workflow screenshot and labeled output comparison in the PR. For
|
||||
parity tests, show vanilla, Advanced-ControlNet, and an absolute-difference
|
||||
result when practical.
|
||||
- Commit reusable workflows and small review images under `examples/<family>/`.
|
||||
Do not commit model files, latent dumps, or large intermediate artifacts.
|
||||
- Document exact seeds/settings, expected numerical results, known limitations,
|
||||
and reproduction steps in the example README and PR description.
|
||||
- If final-image interpretation is subtle, include the direct tensor-level
|
||||
evidence needed to distinguish a real bug from model behavior.
|
||||
|
||||
## Definition Of Done For A Model Port
|
||||
|
||||
- [ ] The official checkpoint is detected without relying on its filename.
|
||||
- [ ] Vanilla and historical Advanced-ControlNet model folders are preserved.
|
||||
- [ ] Default output matches vanilla for every published control type.
|
||||
- [ ] Strength scheduling, keyframes, masks, weights, batching, and stacking are
|
||||
tested or an architectural limitation is documented.
|
||||
- [ ] Effect masks are tested at the injection site and in decoded output.
|
||||
- [ ] Model-specific inputs use a narrow family boundary, not shared Apply-node
|
||||
expansion.
|
||||
- [ ] `get_models`, `copy`, cleanup, dtype/device handling, and repeated runs are
|
||||
verified.
|
||||
- [ ] Missing required inputs produce actionable errors.
|
||||
- [ ] Simple workflows, input assets, download links, screenshots, and exact
|
||||
reproduction instructions are included.
|
||||
- [ ] Real frontend/API execution, compile checks, JSON parsing, and
|
||||
`git diff --check` pass.
|
||||
@@ -12,7 +12,7 @@ ControlNet preprocessors are available through [comfyui_controlnet_aux](https://
|
||||
- Replicate ***"ControlNet is more important"*** feature from sd-webui-controlnet extension via ***uncond_multiplier*** on ***Soft Weights***
|
||||
- uncond_multiplier=0.0 gives identical results of auto1111's feature, but values between 0.0 and 1.0 can be used without issue to granularly control the setting.
|
||||
- ControlNet, T2IAdapter, and ControlLoRA support for sliding context windows
|
||||
- ControlLLLite support
|
||||
- ControlLLLite support, including Anima LLLite v2 and inpainting models
|
||||
- ControlNet++ support
|
||||
- CtrLoRA support
|
||||
- Relevant models linked on [CtrLoRA github page](https://github.com/xyfJASON/ctrlora)
|
||||
@@ -83,6 +83,12 @@ Loads a ControlNet model and converts it into an Advanced version that supports
|
||||
### Outputs
|
||||
- 🟪***CONTROL_NET***: loaded Advanced ControlNet
|
||||
|
||||
## Anima LLLite v2
|
||||
|
||||
Place Anima LLLite v2 files in `ComfyUI/models/model_patches` and load them with **Load Anima LLLite Model**. The regular Advanced ControlNet loader also recognizes these models when they are placed in `ComfyUI/models/controlnet`.
|
||||
|
||||
Use the loaded model with **Apply Advanced ControlNet**. For the 4-channel inpainting model, pass the source mask through **Anima LLLite Extras** into the `cn_extras` input of a weights node; `mask_optional` on the Apply node remains the Advanced-ControlNet effect mask. **ControlNet Custom Weights [Anima]** provides one weight for each of Anima's 28 transformer blocks. Timestep keyframes, latent keyframes, soft weights, CFG/unconditional weighting, effect masks, and stacked controls work the same as with other Advanced-ControlNet models.
|
||||
|
||||
## Timestep Keyframe
|
||||

|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ from comfy.controlnet import ControlBase, ControlNet, ControlNetSD35, ControlLor
|
||||
from comfy.model_patcher import ModelPatcher
|
||||
|
||||
from .control_sparsectrl import SparseControlNet, SparseSettings, SparseConst, InterfaceAnimateDiffModel, create_sparse_modelpatcher, load_sparsectrl_motionmodel
|
||||
from .control_lllite import LLLiteModule, LLLitePatch, load_controllllite
|
||||
from .control_lllite import LLLiteModule, LLLitePatch, load_anima_lllite, load_controllllite
|
||||
from .control_svd import svd_unet_config_from_diffusers_unet, SVDControlNet, svd_unet_to_diffusers
|
||||
from .utils import (AdvancedControlBase, TimestepKeyframeGroup, LatentKeyframeGroup, AbstractPreprocWrapper, ControlWeightType, ControlWeights, WeightTypeException, Extras,
|
||||
manual_cast_clean_groupnorm, disable_weight_init_clean_groupnorm, WrapperConsts, prepare_mask_batch, get_properly_arranged_t2i_weights, load_torch_file_with_dict_factory,
|
||||
@@ -510,7 +510,7 @@ class SparseCtrlAdvanced(ControlNetAdvanced):
|
||||
|
||||
|
||||
def load_controlnet(ckpt_path, timestep_keyframe: TimestepKeyframeGroup=None, model=None):
|
||||
controlnet_data = comfy.utils.load_torch_file(ckpt_path, safe_load=True)
|
||||
controlnet_data, metadata = comfy.utils.load_torch_file(ckpt_path, safe_load=True, return_metadata=True)
|
||||
# from pathlib import Path
|
||||
# log_name = ckpt_path.split('\\')[-1]
|
||||
# with open(Path(__file__).parent.parent.parent / rf"keys_{log_name}.txt", "w") as afile:
|
||||
@@ -519,6 +519,10 @@ def load_controlnet(ckpt_path, timestep_keyframe: TimestepKeyframeGroup=None, mo
|
||||
control = None
|
||||
# check if a non-vanilla ControlNet
|
||||
controlnet_type = ControlWeightType.DEFAULT
|
||||
is_anima_lllite = (
|
||||
"lllite_conditioning1.conv1.weight" in controlnet_data
|
||||
and any(key.startswith("lllite_dit_blocks_") for key in controlnet_data)
|
||||
)
|
||||
has_controlnet_key = False
|
||||
has_motion_modules_key = False
|
||||
has_temporal_res_block_key = False
|
||||
@@ -548,7 +552,9 @@ def load_controlnet(ckpt_path, timestep_keyframe: TimestepKeyframeGroup=None, mo
|
||||
elif has_controlnet_key and has_temporal_res_block_key:
|
||||
controlnet_type = ControlWeightType.SVD_CONTROLNET
|
||||
|
||||
if controlnet_type != ControlWeightType.DEFAULT:
|
||||
if is_anima_lllite:
|
||||
control = load_anima_lllite(ckpt_path, controlnet_data=controlnet_data, metadata=metadata, timestep_keyframe=timestep_keyframe)
|
||||
elif controlnet_type != ControlWeightType.DEFAULT:
|
||||
if controlnet_type == ControlWeightType.CONTROLLLLITE:
|
||||
control = load_controllllite(ckpt_path, controlnet_data=controlnet_data, timestep_keyframe=timestep_keyframe)
|
||||
elif controlnet_type == ControlWeightType.SPARSECTRL:
|
||||
@@ -990,4 +996,3 @@ def load_svdcontrolnet(ckpt_path: str, controlnet_data: dict[str, Tensor]=None,
|
||||
|
||||
control = SVDControlNetAdvanced(control_model, timestep_keyframes=timestep_keyframe, global_average_pooling=global_average_pooling, load_device=load_device, manual_cast_dtype=manual_cast_dtype)
|
||||
return control
|
||||
|
||||
|
||||
@@ -10,14 +10,24 @@ import os
|
||||
import comfy.utils
|
||||
import comfy.ops
|
||||
import comfy.model_management
|
||||
import comfy.model_patcher
|
||||
from comfy.model_patcher import ModelPatcher
|
||||
from comfy.controlnet import ControlBase
|
||||
|
||||
try:
|
||||
import comfy.ldm.anima.lllite as comfy_anima_lllite
|
||||
except ImportError:
|
||||
comfy_anima_lllite = None
|
||||
|
||||
from .logger import logger
|
||||
from .utils import (AdvancedControlBase, TimestepKeyframeGroup, ControlWeights, broadcast_image_to_extend, extend_to_batch_size,
|
||||
prepare_mask_batch)
|
||||
|
||||
|
||||
class AnimaLLLiteConst:
|
||||
INPAINT_MASK = "anima_lllite_inpaint_mask"
|
||||
|
||||
|
||||
# based on set_model_patch code in comfy/model_patcher.py
|
||||
def set_model_patch(transformer_options, patch, name):
|
||||
to = transformer_options
|
||||
@@ -371,6 +381,233 @@ class ControlLLLiteAdvanced(ControlBase, AdvancedControlBase):
|
||||
return c
|
||||
|
||||
|
||||
class AnimaLLLiteAdvancedPatch:
|
||||
def __init__(self, model_patch, control: 'AnimaLLLiteAdvanced'=None):
|
||||
self.model_patch = model_patch
|
||||
self.control = control
|
||||
|
||||
def set_control(self, control: 'AnimaLLLiteAdvanced') -> 'AnimaLLLiteAdvancedPatch':
|
||||
self.control = control
|
||||
return self
|
||||
|
||||
def clone_with_control(self, control: 'AnimaLLLiteAdvanced') -> 'AnimaLLLiteAdvancedPatch':
|
||||
return AnimaLLLiteAdvancedPatch(self.model_patch, control)
|
||||
|
||||
def __call__(self, args):
|
||||
if not self.control.should_run():
|
||||
return args
|
||||
|
||||
x = args["x"]
|
||||
if x.shape[2] != 1:
|
||||
raise ValueError(f"Anima LLLite only supports T=1, got T={x.shape[2]}")
|
||||
|
||||
target_height = x.shape[-2] * 8
|
||||
target_width = x.shape[-1] * 8
|
||||
image = self.control.prepare_batched_tensor(self.control.cond_hint_original, x.shape[0])[:, :3]
|
||||
image = comfy.utils.common_upscale(image, target_width, target_height, "bicubic", crop="center").clamp(0.0, 1.0)
|
||||
image = image.to(device=x.device, dtype=x.dtype) * 2.0 - 1.0
|
||||
|
||||
if self.model_patch.model.cond_in_channels == 4:
|
||||
mask = self.control.weights.extras.get(AnimaLLLiteConst.INPAINT_MASK)
|
||||
if mask is None:
|
||||
raise ValueError(
|
||||
"Anima LLLite inpainting models require an inpaint mask. Connect a MASK to Anima LLLite Extras, "
|
||||
"connect its cn_extras output to Default Weights, then connect CN_WEIGHTS to weights_override on Apply Advanced ControlNet."
|
||||
)
|
||||
if mask.ndim == 3:
|
||||
mask = mask.unsqueeze(1)
|
||||
if mask.ndim != 4 or mask.shape[1] != 1:
|
||||
raise ValueError(f"Anima LLLite mask must have one channel, got shape {tuple(mask.shape)}")
|
||||
if image.shape[0] > 1:
|
||||
mask = self.control.prepare_batched_tensor(mask, image.shape[0], except_one=False)
|
||||
mask = comfy.utils.common_upscale(mask.float(), target_width, target_height, "nearest-exact", crop="center")
|
||||
if mask.shape[0] != image.shape[0]:
|
||||
if image.shape[0] % mask.shape[0] != 0:
|
||||
raise ValueError(f"Anima LLLite mask batch {mask.shape[0]} cannot be broadcast to image batch {image.shape[0]}")
|
||||
mask = mask.repeat(image.shape[0] // mask.shape[0], 1, 1, 1)
|
||||
mask = (mask >= 0.5).to(device=x.device, dtype=x.dtype)
|
||||
if self.model_patch.model.inpaint_masked_input:
|
||||
image = image * (mask < 0.5).to(image.dtype)
|
||||
image = torch.cat((image, mask * 2.0 - 1.0), dim=1)
|
||||
|
||||
cond_emb = self.model_patch.model.encode_conditioning(image)
|
||||
multiplier, weight_mask = self.control.prepare_multiplier(args["img"])
|
||||
args["transformer_options"]["model_patch_data"][self] = (cond_emb, multiplier, weight_mask)
|
||||
return args
|
||||
|
||||
def to(self, device_or_dtype):
|
||||
return self
|
||||
|
||||
def models(self):
|
||||
return [self.model_patch]
|
||||
|
||||
|
||||
class AnimaLLLiteAdvancedAttentionPatch:
|
||||
def __init__(self, patch: AnimaLLLiteAdvancedPatch, targets):
|
||||
self.patch = patch
|
||||
self.targets = targets
|
||||
|
||||
def __call__(self, q, k, v, pe=None, attn_mask=None, extra_options=None):
|
||||
patch_data = extra_options["model_patch_data"].get(self.patch)
|
||||
if patch_data is None:
|
||||
return {"q": q, "k": k, "v": v, "pe": pe, "attn_mask": attn_mask}
|
||||
|
||||
cond_emb, multiplier, weight_mask = patch_data
|
||||
block_index = extra_options["block_index"]
|
||||
strength = self.patch.control.get_block_strength(block_index, multiplier, weight_mask)
|
||||
values = {"q": q, "k": k, "v": v}
|
||||
for value_name, target in self.targets.items():
|
||||
values[value_name] = self.patch.model_patch.model.apply(values[value_name], cond_emb, block_index, target, strength)
|
||||
return {"q": values["q"], "k": values["k"], "v": values["v"], "pe": pe, "attn_mask": attn_mask}
|
||||
|
||||
|
||||
class AnimaLLLiteAdvancedMLPPatch:
|
||||
def __init__(self, patch: AnimaLLLiteAdvancedPatch):
|
||||
self.patch = patch
|
||||
|
||||
def __call__(self, args):
|
||||
patch_data = args["transformer_options"]["model_patch_data"].get(self.patch)
|
||||
if patch_data is None:
|
||||
return args
|
||||
|
||||
cond_emb, multiplier, weight_mask = patch_data
|
||||
block_index = args["transformer_options"]["block_index"]
|
||||
strength = self.patch.control.get_block_strength(block_index, multiplier, weight_mask)
|
||||
args["x"] = self.patch.model_patch.model.apply(args["x"], cond_emb, block_index, "mlp_layer1", strength)
|
||||
return args
|
||||
|
||||
|
||||
class AnimaLLLiteAdvanced(ControlBase, AdvancedControlBase):
|
||||
def __init__(self, model_patch, timestep_keyframes: TimestepKeyframeGroup):
|
||||
ControlBase.__init__(self)
|
||||
AdvancedControlBase.__init__(self, super(), timestep_keyframes=timestep_keyframes, weights_default=ControlWeights.controllllite())
|
||||
self.model_patch = model_patch
|
||||
self.patch = AnimaLLLiteAdvancedPatch(model_patch, self)
|
||||
self.patch_attn1 = AnimaLLLiteAdvancedAttentionPatch(
|
||||
self.patch,
|
||||
{"q": "self_attn_q_proj", "k": "self_attn_k_proj", "v": "self_attn_v_proj"},
|
||||
)
|
||||
self.patch_attn2 = AnimaLLLiteAdvancedAttentionPatch(self.patch, {"q": "cross_attn_q_proj"})
|
||||
self.patch_mlp = AnimaLLLiteAdvancedMLPPatch(self.patch)
|
||||
|
||||
def prepare_batched_tensor(self, tensor: Tensor, target_batch: int, except_one=True) -> Tensor:
|
||||
if self.sub_idxs is not None:
|
||||
if tensor.shape[0] < self.full_latent_length:
|
||||
tensor = extend_to_batch_size(tensor, self.full_latent_length)
|
||||
tensor = tensor[self.sub_idxs]
|
||||
if tensor.shape[0] != target_batch:
|
||||
tensor = broadcast_image_to_extend(tensor, target_batch, self.batched_number, except_one=except_one)
|
||||
return tensor
|
||||
|
||||
def prepare_effect_mask(self, mask: Tensor, img: Tensor) -> Tensor:
|
||||
mask = self.prepare_batched_tensor(mask, img.shape[0], except_one=False)
|
||||
mask = torch.nn.functional.interpolate(
|
||||
mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).float(),
|
||||
size=(img.shape[2], img.shape[3]),
|
||||
mode="bilinear",
|
||||
)
|
||||
return mask.flatten(2).transpose(1, 2).to(device=img.device, dtype=img.dtype)
|
||||
|
||||
def prepare_multiplier(self, img: Tensor):
|
||||
multiplier = self.strength * self._current_timestep_keyframe.strength
|
||||
token_multiplier = None
|
||||
|
||||
masks = [self.mask_cond_hint_original, self._current_timestep_keyframe.mask_hint_orig]
|
||||
for mask in masks:
|
||||
if mask is not None:
|
||||
mask_multiplier = self.prepare_effect_mask(mask, img)
|
||||
token_multiplier = mask_multiplier if token_multiplier is None else token_multiplier * mask_multiplier
|
||||
|
||||
flat_img = img.flatten(1, 3)
|
||||
if self.latent_keyframes is not None:
|
||||
latent_multiplier = self.calc_latent_keyframe_mults(flat_img, self.batched_number)
|
||||
token_multiplier = latent_multiplier if token_multiplier is None else token_multiplier * latent_multiplier
|
||||
|
||||
if self.weights.has_uncond_multiplier and self.cond_or_uncond is not None:
|
||||
batch_multiplier = torch.ones((img.shape[0], 1, 1), dtype=img.dtype, device=img.device)
|
||||
actual_length = img.shape[0] // self.batched_number
|
||||
for idx, cond_type in enumerate(self.cond_or_uncond):
|
||||
if cond_type == 1:
|
||||
batch_multiplier[actual_length * idx:actual_length * (idx + 1)] *= self.weights.uncond_multiplier
|
||||
token_multiplier = batch_multiplier if token_multiplier is None else token_multiplier * batch_multiplier
|
||||
|
||||
weight_mask = None
|
||||
if self.weights.weight_mask is not None:
|
||||
weight_mask = self.prepare_effect_mask(self.weights.weight_mask, img)
|
||||
|
||||
if token_multiplier is not None:
|
||||
multiplier = token_multiplier * multiplier
|
||||
return multiplier, weight_mask
|
||||
|
||||
def get_block_strength(self, block_index: int, multiplier, weight_mask):
|
||||
block_weight = 1.0
|
||||
if self.weights.weight_type == "universal":
|
||||
exponent = self.model_patch.model.block_count - block_index
|
||||
if weight_mask is not None:
|
||||
block_weight = torch.pow(weight_mask, exponent)
|
||||
else:
|
||||
block_weight = self.weights.base_multiplier ** exponent
|
||||
elif self.weights.weights_input is not None and block_index < len(self.weights.weights_input):
|
||||
block_weight = self.weights.weights_input[block_index]
|
||||
return multiplier * block_weight
|
||||
|
||||
def pre_run_advanced(self, *args, **kwargs):
|
||||
AdvancedControlBase.pre_run_advanced(self, *args, **kwargs)
|
||||
self.patch.set_control(self)
|
||||
|
||||
def get_control_advanced(self, x_noisy: Tensor, t, cond, batched_number: int, transformer_options: dict):
|
||||
control_prev = None
|
||||
if self.previous_controlnet is not None:
|
||||
control_prev = self.previous_controlnet.get_control(x_noisy, t, cond, batched_number, transformer_options)
|
||||
if not self.should_run():
|
||||
return control_prev
|
||||
|
||||
set_model_patch(transformer_options, self.patch.set_control(self), "post_input")
|
||||
set_model_attn1_patch(transformer_options, self.patch_attn1)
|
||||
set_model_attn2_patch(transformer_options, self.patch_attn2)
|
||||
set_model_patch(transformer_options, self.patch_mlp, "mlp_patch")
|
||||
return control_prev
|
||||
|
||||
def get_models(self):
|
||||
models = super().get_models()
|
||||
models.append(self.model_patch)
|
||||
return models
|
||||
|
||||
def copy(self):
|
||||
copied = AnimaLLLiteAdvanced(self.model_patch, self.timestep_keyframes)
|
||||
self.copy_to(copied)
|
||||
self.copy_to_advanced(copied)
|
||||
return copied
|
||||
|
||||
|
||||
def load_anima_lllite(ckpt_path: str, controlnet_data: dict[str, Tensor]=None, metadata=None, timestep_keyframe: TimestepKeyframeGroup=None):
|
||||
if comfy_anima_lllite is None:
|
||||
raise RuntimeError("Anima LLLite requires a newer version of ComfyUI. Please update ComfyUI.")
|
||||
if controlnet_data is None or metadata is None:
|
||||
loaded_data, loaded_metadata = comfy.utils.load_torch_file(ckpt_path, safe_load=True, return_metadata=True)
|
||||
if controlnet_data is None:
|
||||
controlnet_data = loaded_data
|
||||
metadata = loaded_metadata
|
||||
|
||||
dtype = comfy.utils.weight_dtype(controlnet_data)
|
||||
model = comfy_anima_lllite.AnimaLLLite(
|
||||
controlnet_data,
|
||||
metadata,
|
||||
device=comfy.model_management.unet_offload_device(),
|
||||
dtype=dtype,
|
||||
operations=comfy.ops.manual_cast,
|
||||
)
|
||||
patcher_type = getattr(comfy.model_patcher, "CoreModelPatcher", ModelPatcher)
|
||||
model_patcher = patcher_type(
|
||||
model,
|
||||
load_device=comfy.model_management.get_torch_device(),
|
||||
offload_device=comfy.model_management.unet_offload_device(),
|
||||
)
|
||||
is_dynamic = getattr(model_patcher, "is_dynamic", lambda: False)()
|
||||
model.load_state_dict(controlnet_data, assign=is_dynamic)
|
||||
return AnimaLLLiteAdvanced(model_patcher, timestep_keyframe)
|
||||
|
||||
|
||||
def load_controllllite(ckpt_path: str, controlnet_data: dict[str, Tensor]=None, timestep_keyframe: TimestepKeyframeGroup=None):
|
||||
if controlnet_data is None:
|
||||
controlnet_data = comfy.utils.load_torch_file(ckpt_path, safe_load=True)
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import comfy.sample
|
||||
|
||||
from .nodes_main import (ControlNetLoaderAdvanced, DiffControlNetLoaderAdvanced,
|
||||
from .nodes_main import (ControlNetLoaderAdvanced, DiffControlNetLoaderAdvanced, AnimaLLLiteLoaderAdvanced,
|
||||
AdvancedControlNetApply, AdvancedControlNetApplySingle)
|
||||
from .nodes_weight import (DefaultWeights, ScaledSoftMaskedUniversalWeights, ScaledSoftUniversalWeights,
|
||||
SoftControlNetWeightsSD15, CustomControlNetWeightsSD15, CustomControlNetWeightsFlux,
|
||||
SoftT2IAdapterWeights, CustomT2IAdapterWeights, ExtrasMiddleMultNode)
|
||||
CustomControlNetWeightsAnima, SoftT2IAdapterWeights, CustomT2IAdapterWeights, ExtrasMiddleMultNode,
|
||||
AnimaLLLiteExtras)
|
||||
from .nodes_keyframes import (LatentKeyframeGroupNode, LatentKeyframeInterpolationNode, LatentKeyframeBatchedGroupNode, LatentKeyframeNode,
|
||||
TimestepKeyframeNode, TimestepKeyframeInterpolationNode, TimestepKeyframeFromStrengthListNode)
|
||||
from .nodes_sparsectrl import SparseCtrlMergedLoaderAdvanced, SparseCtrlLoaderAdvanced, SparseIndexMethodNode, SparseSpreadMethodNode, RgbSparseCtrlPreprocessor, SparseWeightExtras
|
||||
@@ -36,16 +37,19 @@ NODE_CLASS_MAPPINGS = {
|
||||
# Loaders
|
||||
"ACN_ControlNetLoaderAdvanced": ControlNetLoaderAdvanced,
|
||||
"ACN_DiffControlNetLoaderAdvanced": DiffControlNetLoaderAdvanced,
|
||||
"ACN_AnimaLLLiteLoaderAdvanced": AnimaLLLiteLoaderAdvanced,
|
||||
# Weights
|
||||
"ACN_ScaledSoftControlNetWeights": ScaledSoftUniversalWeights,
|
||||
"ScaledSoftMaskedUniversalWeights": ScaledSoftMaskedUniversalWeights,
|
||||
"ACN_SoftControlNetWeightsSD15": SoftControlNetWeightsSD15,
|
||||
"ACN_CustomControlNetWeightsSD15": CustomControlNetWeightsSD15,
|
||||
"ACN_CustomControlNetWeightsFlux": CustomControlNetWeightsFlux,
|
||||
"ACN_CustomControlNetWeightsAnima": CustomControlNetWeightsAnima,
|
||||
"ACN_SoftT2IAdapterWeights": SoftT2IAdapterWeights,
|
||||
"ACN_CustomT2IAdapterWeights": CustomT2IAdapterWeights,
|
||||
"ACN_DefaultUniversalWeights": DefaultWeights,
|
||||
"ACN_ExtrasMiddleMult": ExtrasMiddleMultNode,
|
||||
"ACN_AnimaLLLiteExtras": AnimaLLLiteExtras,
|
||||
# SparseCtrl
|
||||
"ACN_SparseCtrlRGBPreprocessor": RgbSparseCtrlPreprocessor,
|
||||
"ACN_SparseCtrlLoaderAdvanced": SparseCtrlLoaderAdvanced,
|
||||
@@ -93,16 +97,19 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
# Loaders
|
||||
"ACN_ControlNetLoaderAdvanced": "Load Advanced ControlNet Model 🛂🅐🅒🅝",
|
||||
"ACN_DiffControlNetLoaderAdvanced": "Load Advanced ControlNet Model (diff) 🛂🅐🅒🅝",
|
||||
"ACN_AnimaLLLiteLoaderAdvanced": "Load Anima LLLite Model 🛂🅐🅒🅝",
|
||||
# Weights
|
||||
"ACN_ScaledSoftControlNetWeights": "Scaled Soft Weights 🛂🅐🅒🅝",
|
||||
"ScaledSoftMaskedUniversalWeights": "Scaled Soft Masked Weights 🛂🅐🅒🅝",
|
||||
"ACN_SoftControlNetWeightsSD15": "ControlNet Soft Weights [SD1.5] 🛂🅐🅒🅝",
|
||||
"ACN_CustomControlNetWeightsSD15": "ControlNet Custom Weights [SD1.5] 🛂🅐🅒🅝",
|
||||
"ACN_CustomControlNetWeightsFlux": "ControlNet Custom Weights [Flux] 🛂🅐🅒🅝",
|
||||
"ACN_CustomControlNetWeightsAnima": "ControlNet Custom Weights [Anima] 🛂🅐🅒🅝",
|
||||
"ACN_SoftT2IAdapterWeights": "T2IAdapter Soft Weights 🛂🅐🅒🅝",
|
||||
"ACN_CustomT2IAdapterWeights": "T2IAdapter Custom Weights 🛂🅐🅒🅝",
|
||||
"ACN_DefaultUniversalWeights": "Default Weights 🛂🅐🅒🅝",
|
||||
"ACN_ExtrasMiddleMult": "Middle Weight Extras 🛂🅐🅒🅝",
|
||||
"ACN_AnimaLLLiteExtras": "Anima LLLite Extras 🛂🅐🅒🅝",
|
||||
# SparseCtrl
|
||||
"ACN_SparseCtrlRGBPreprocessor": "RGB SparseCtrl 🛂🅐🅒🅝",
|
||||
"ACN_SparseCtrlLoaderAdvanced": "Load SparseCtrl Model 🛂🅐🅒🅝",
|
||||
|
||||
@@ -4,6 +4,7 @@ import folder_paths
|
||||
from comfy.model_patcher import ModelPatcher
|
||||
|
||||
from .control import load_controlnet, convert_to_advanced, is_advanced_controlnet, is_sd3_advanced_controlnet
|
||||
from .control_lllite import load_anima_lllite
|
||||
from .utils import ControlWeights, LatentKeyframeGroup, TimestepKeyframeGroup, AbstractPreprocWrapper, BIGMAX
|
||||
|
||||
from .logger import logger
|
||||
@@ -65,6 +66,27 @@ class DiffControlNetLoaderAdvanced:
|
||||
return (controlnet,)
|
||||
|
||||
|
||||
class AnimaLLLiteLoaderAdvanced:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"model_patch": (folder_paths.get_filename_list("model_patches"), ),
|
||||
},
|
||||
"optional": {
|
||||
"timestep_kf": ("TIMESTEP_KEYFRAME", ),
|
||||
},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("CONTROL_NET", )
|
||||
FUNCTION = "load_controlnet"
|
||||
CATEGORY = "Adv-ControlNet 🛂🅐🅒🅝/loaders"
|
||||
|
||||
def load_controlnet(self, model_patch, timestep_kf: TimestepKeyframeGroup=None):
|
||||
model_patch_path = folder_paths.get_full_path_or_raise("model_patches", model_patch)
|
||||
return (load_anima_lllite(model_patch_path, timestep_keyframe=timestep_kf),)
|
||||
|
||||
|
||||
class AdvancedControlNetApply:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from torch import Tensor
|
||||
import torch
|
||||
from .utils import TimestepKeyframe, TimestepKeyframeGroup, ControlWeights, Extras, get_properly_arranged_t2i_weights, linear_conversion
|
||||
from .control_lllite import AnimaLLLiteConst
|
||||
from .logger import logger
|
||||
|
||||
|
||||
@@ -238,6 +239,39 @@ class CustomControlNetWeightsFlux:
|
||||
return (weights, TimestepKeyframeGroup.default(TimestepKeyframe(control_weights=weights)))
|
||||
|
||||
|
||||
class CustomControlNetWeightsAnima:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
required = {
|
||||
f"block_{index}": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001})
|
||||
for index in range(28)
|
||||
}
|
||||
return {
|
||||
"required": required,
|
||||
"optional": {
|
||||
"uncond_multiplier": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}),
|
||||
"cn_extras": ("CN_WEIGHTS_EXTRAS",),
|
||||
},
|
||||
"hidden": {
|
||||
"autosize": ("ACNAUTOSIZE", {"padding": 0}),
|
||||
},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("CONTROL_NET_WEIGHTS", "TIMESTEP_KEYFRAME",)
|
||||
RETURN_NAMES = WEIGHTS_RETURN_NAMES
|
||||
FUNCTION = "load_weights"
|
||||
CATEGORY = "Adv-ControlNet 🛂🅐🅒🅝/weights/ControlNet"
|
||||
|
||||
def load_weights(self, uncond_multiplier: float=1.0, cn_extras: dict[str]={}, **kwargs):
|
||||
weights = [kwargs[f"block_{index}"] for index in range(28)]
|
||||
control_weights = ControlWeights.controllllite(
|
||||
weights_input=weights,
|
||||
uncond_multiplier=uncond_multiplier,
|
||||
extras=cn_extras,
|
||||
)
|
||||
return (control_weights, TimestepKeyframeGroup.default(TimestepKeyframe(control_weights=control_weights)))
|
||||
|
||||
|
||||
class SoftT2IAdapterWeights:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
@@ -327,3 +361,29 @@ class ExtrasMiddleMultNode:
|
||||
cn_extras = cn_extras.copy()
|
||||
cn_extras[Extras.MIDDLE_MULT] = middle_mult
|
||||
return (cn_extras,)
|
||||
|
||||
|
||||
class AnimaLLLiteExtras:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"inpaint_mask": ("MASK",),
|
||||
},
|
||||
"optional": {
|
||||
"cn_extras": ("CN_WEIGHTS_EXTRAS",),
|
||||
},
|
||||
"hidden": {
|
||||
"autosize": ("ACNAUTOSIZE", {"padding": 0}),
|
||||
},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("CN_WEIGHTS_EXTRAS",)
|
||||
RETURN_NAMES = ("cn_extras",)
|
||||
FUNCTION = "create_extras"
|
||||
CATEGORY = "Adv-ControlNet 🛂🅐🅒🅝/weights/extras"
|
||||
|
||||
def create_extras(self, inpaint_mask: Tensor, cn_extras: dict[str]={}):
|
||||
cn_extras = cn_extras.copy()
|
||||
cn_extras[AnimaLLLiteConst.INPAINT_MASK] = inpaint_mask.clone()
|
||||
return (cn_extras,)
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
# Anima LLLite validation workflows
|
||||
|
||||
This folder contains simple Advanced-ControlNet workflows for the two Anima
|
||||
LLLite v2 checkpoints: the five conditioning inputs documented for the v2
|
||||
any-test-like model and the v2 inpainting model. It also includes vanilla parity
|
||||
and effect-mask validation workflows.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## Simple v2 workflows
|
||||
|
||||
| Type | Workflow | Input image | Checkpoint |
|
||||
| --- | --- | --- | --- |
|
||||
| Any - Grayscale A | [`anima_lllite_any_grayscale_a.json`](anima_lllite_any_grayscale_a.json) | [`anima_lllite_any_grayscale_a_control.png`](https://ampcode.com/attachments/911b31c414bcf5c9aeaa254356c89f04e1133ce2181d0414cd8b7e9a7fa7847c.png) | `anima-lllite-any-test-like-v2.safetensors` |
|
||||
| Any - Grayscale B | [`anima_lllite_any_grayscale_b.json`](anima_lllite_any_grayscale_b.json) | [`anima_lllite_any_grayscale_b_control.png`](https://ampcode.com/attachments/6950b3c8a47ff62311cc8ac147e2c8aa6aad9176abe7046db3a1bd6cf97cf705.png) | `anima-lllite-any-test-like-v2.safetensors` |
|
||||
| Any - Lineart | [`anima_lllite_any_lineart.json`](anima_lllite_any_lineart.json) | [`anima_lllite_any_lineart_control.png`](https://ampcode.com/attachments/338c2f07267d564ca9fb60bf79c229b5689509202734875f0cb674efb8d691b1.png) | `anima-lllite-any-test-like-v2.safetensors` |
|
||||
| Any - HED scribble | [`anima_lllite_any_hed_scribble.json`](anima_lllite_any_hed_scribble.json) | [`anima_lllite_any_hed_scribble_control.png`](https://ampcode.com/attachments/a52217f09c5852652667152cb901b98c3472c2e4cbf86a6cae53a36ec7e84192.png) | `anima-lllite-any-test-like-v2.safetensors` |
|
||||
| Any - PiDiNet scribble | [`anima_lllite_any_pidinet_scribble.json`](anima_lllite_any_pidinet_scribble.json) | [`anima_lllite_any_pidinet_scribble_control.png`](https://ampcode.com/attachments/57bc6b0d8cba0df17f92115917bfc6ccfce83107e56af624f0be1db32c402579.png) | `anima-lllite-any-test-like-v2.safetensors` |
|
||||
| Inpainting | [`anima_lllite_inpainting.json`](anima_lllite_inpainting.json) | [`anima_lllite_v2_control.png`](https://ampcode.com/attachments/3220b2f533a014619e3c0422eca8a3343e8488eb113795af5bae5f05d38a8ada.png) | `anima-lllite-inpainting-v2.safetensors` |
|
||||
|
||||
Download the selected input image from the table and save it under the displayed
|
||||
filename in `ComfyUI/input`. Load its workflow and queue it unchanged. Results
|
||||
are saved under `ComfyUI/output/acn_anima_examples`. Binary inputs and
|
||||
screenshots are linked externally instead of being committed to this repository.
|
||||
|
||||
These examples use default node names and do not connect the custom 28-layer
|
||||
Anima weights node. The inpainting workflow uses Anima LLLite Extras and
|
||||
Default Weights only because the model's source mask must be carried through
|
||||
`cn_extras`. Strength, start/end scheduling, effect masks, timestep keyframes,
|
||||
latent keyframes, and stacking remain available on the standard
|
||||
Advanced-ControlNet nodes.
|
||||
|
||||
The model author trained the v2 any-test-like checkpoint on five conditioning
|
||||
types: HED scribble, PiDiNet scribble, Grayscale A, Grayscale B, and lineart,
|
||||
all with heavy augmentation. The examples above exercise each input type using
|
||||
that one v2 checkpoint instead of the lower-quality Preview3 depth, pose,
|
||||
lineart, and scribble checkpoints.
|
||||
|
||||
The HED and PiDiNet controls were prepared with the
|
||||
[comfyui_controlnet_aux](https://github.com/Fannovel16/comfyui_controlnet_aux)
|
||||
HED and Scribble PiDiNet preprocessors. The HED soft-edge output was thresholded
|
||||
at 80 to make the documented white-on-black scribble representation. The model
|
||||
card names two grayscale generation patterns but does not define their
|
||||
individual construction; Grayscale A is the author's sample and Grayscale B
|
||||
demonstrates the documented inversion, contrast, and blur augmentation.
|
||||
|
||||
## Requirements
|
||||
|
||||
Official Hugging Face repositories:
|
||||
|
||||
- [circlestone-labs/Anima](https://huggingface.co/circlestone-labs/Anima) - base model, text encoder, and VAE
|
||||
- [kohya-ss/Anima-LLLite](https://huggingface.co/kohya-ss/Anima-LLLite) - Anima LLLite control models
|
||||
|
||||
Use ComfyUI commit `0f42ba514631` or later and place these files in the listed
|
||||
model folders. These are direct downloads from the official model repositories:
|
||||
|
||||
| Download | ComfyUI model folder |
|
||||
| --- | --- |
|
||||
| [`anima-base-v1.0.safetensors`](https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-base-v1.0.safetensors?download=true) | `models/diffusion_models` |
|
||||
| [`qwen_3_06b_base.safetensors`](https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors?download=true) | `models/text_encoders` |
|
||||
| [`qwen_image_vae.safetensors`](https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors?download=true) | `models/vae` |
|
||||
| [`anima-lllite-inpainting-v2.safetensors`](https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-inpainting-v2.safetensors?download=true) | `models/model_patches` |
|
||||
| [`anima-lllite-any-test-like-v2.safetensors`](https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-any-test-like-v2.safetensors?download=true) (3-channel any-type model) | `models/model_patches` |
|
||||
|
||||
The included workflows use **Load Anima LLLite Model**, so their LLLite files
|
||||
belong in `models/model_patches`, matching vanilla ComfyUI. For compatibility
|
||||
with existing Advanced-ControlNet LLLite workflows, the files may instead be
|
||||
placed in `models/controlnet` and loaded with **Load Advanced ControlNet
|
||||
Model**. The standard loader automatically distinguishes Anima checkpoints
|
||||
from older SDXL LLLite checkpoints.
|
||||
|
||||
## Run the inpainting comparison
|
||||
|
||||
This validation workflow runs the inpainting model through vanilla ComfyUI and
|
||||
Advanced-ControlNet with identical inputs and sampling settings. It saves both
|
||||
decoded results, both latent tensors, and an absolute pixel-difference image.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
1. Download [`anima_lllite_v2_control.png`](https://ampcode.com/attachments/3220b2f533a014619e3c0422eca8a3343e8488eb113795af5bae5f05d38a8ada.png)
|
||||
to `ComfyUI/input`.
|
||||
2. Load `anima_lllite_v2_inpaint_comparison.json` in ComfyUI.
|
||||
3. Queue the workflow without changing its settings.
|
||||
4. Inspect `ComfyUI/output/acn_anima_pr`.
|
||||
|
||||
The control PNG contains a transparent edit region. ComfyUI's Load Image node
|
||||
provides that alpha channel as the source inpainting mask.
|
||||
|
||||
The vanilla branch passes the mask directly to Apply Anima LLLite. The
|
||||
Advanced-ControlNet branch passes it through Anima LLLite Extras, the
|
||||
`cn_extras` input on Default Weights, and `weights_override` on Apply Advanced
|
||||
ControlNet.
|
||||
|
||||
If an inpainting checkpoint reaches sampling without that source mask,
|
||||
Advanced-ControlNet raises an error that describes these connections instead
|
||||
of silently substituting an empty mask.
|
||||
|
||||
With the included seed and settings, the expected results are:
|
||||
|
||||
- Identical latent tensors with maximum and mean absolute differences of `0.0`.
|
||||
- Identical decoded PNG pixels.
|
||||
- A completely black `absolute_difference` image.
|
||||
|
||||
## Run the any-type effect-mask comparison
|
||||
|
||||
This workflow verifies the official 3-channel any-type checkpoint against
|
||||
vanilla ComfyUI and applies an Advanced-ControlNet effect mask to only the left
|
||||
half of the image. Its nodes retain their default names; the colored regions
|
||||
identify the comparison branches.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
1. Download [`anima_lllite_v2_any_control.png`](https://ampcode.com/attachments/db18d41c476324bdf5a5b6117476ed117cc590f8f48e193f6316d08b959bc49c.png)
|
||||
and [`anima_lllite_v2_left_half_mask.png`](https://ampcode.com/attachments/e4fe3a88415357f29315c9afb124ee975a48dee8abccad1fe1903dd5d21b91b6.png)
|
||||
to `ComfyUI/input`.
|
||||
2. Load `anima_lllite_v2_any_effect_mask.json` in ComfyUI.
|
||||
3. Queue the workflow without changing its settings.
|
||||
4. Inspect `ComfyUI/output/acn_anima_any_mask`.
|
||||
|
||||
The expected results are:
|
||||
|
||||
- Advanced-ControlNet full control and vanilla full control have identical
|
||||
latent tensors and decoded pixels, with maximum absolute difference `0.0`.
|
||||
- A completely black effect mask produces the no-control latent exactly.
|
||||
- A completely white effect mask produces the unmasked full-control latent
|
||||
exactly.
|
||||
- At the model token resolution, the included half mask is exactly `1.0` on
|
||||
the left and `0.0` on the right. Direct LLLite injection is therefore zero
|
||||
for every right-side token.
|
||||
- In the final image, the masked right side is closer to the no-control
|
||||
baseline than full control: PSNR improves from `16.39` to `17.69`, and SSIM
|
||||
improves from `0.554` to `0.600`.
|
||||
|
||||
The final right half is not pixel-identical to the no-control image. This model
|
||||
patches self-attention Q, so controlled left-side tokens can influence
|
||||
right-side tokens through global self-attention and later diffusion steps.
|
||||
The effect mask guarantees local control injection, not hard image-space
|
||||
isolation after attention.
|
||||
@@ -0,0 +1,941 @@
|
||||
{
|
||||
"id": "00000000-0000-0000-0000-000000000000",
|
||||
"revision": 0,
|
||||
"last_node_id": 12,
|
||||
"last_link_id": 26,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "UNETLoader",
|
||||
"pos": [
|
||||
50,
|
||||
100
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
82
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "unet_name",
|
||||
"name": "unet_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "unet_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weight_dtype",
|
||||
"name": "weight_dtype",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "weight_dtype"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "MODEL",
|
||||
"name": "MODEL",
|
||||
"type": "MODEL",
|
||||
"links": [
|
||||
20
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "UNETLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-base-v1.0.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-base-v1.0.safetensors",
|
||||
"directory": "diffusion_models"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-base-v1.0.safetensors",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "CLIPLoader",
|
||||
"pos": [
|
||||
50,
|
||||
250
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip_name",
|
||||
"name": "clip_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "clip_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "type",
|
||||
"name": "type",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "type"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "device",
|
||||
"name": "device",
|
||||
"shape": 7,
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "device"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CLIP",
|
||||
"name": "CLIP",
|
||||
"type": "CLIP",
|
||||
"links": [
|
||||
14,
|
||||
15
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_3_06b_base.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors",
|
||||
"directory": "text_encoders"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_3_06b_base.safetensors",
|
||||
"qwen_image",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 14
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anime illustration of a female knight in ornate silver plate armor holding a sword, side profile in a dense forest, detailed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
440
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 15
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
17
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "EmptySD3LatentImage",
|
||||
"pos": [
|
||||
50,
|
||||
470
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "width",
|
||||
"name": "width",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "width"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "height",
|
||||
"name": "height",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "height"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "batch_size",
|
||||
"name": "batch_size",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "batch_size"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
23
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "EmptySD3LatentImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
512,
|
||||
512,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
50,
|
||||
650
|
||||
],
|
||||
"size": [
|
||||
282.798828125,
|
||||
314
|
||||
],
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "image"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "choose file to upload",
|
||||
"name": "upload",
|
||||
"type": "IMAGEUPLOAD",
|
||||
"widget": {
|
||||
"name": "upload"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
19
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "MASK",
|
||||
"name": "MASK",
|
||||
"type": "MASK",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LoadImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima_lllite_any_grayscale_a_control.png",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "VAELoader",
|
||||
"pos": [
|
||||
360,
|
||||
700
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "vae_name",
|
||||
"name": "vae_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "vae_name"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "VAE",
|
||||
"name": "VAE",
|
||||
"type": "VAE",
|
||||
"links": [
|
||||
25
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAELoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_image_vae.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors",
|
||||
"directory": "vae"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_image_vae.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"pos": [
|
||||
860,
|
||||
120
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "model_patch",
|
||||
"name": "model_patch",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "model_patch"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONTROL_NET",
|
||||
"name": "CONTROL_NET",
|
||||
"type": "CONTROL_NET",
|
||||
"links": [
|
||||
18
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-lllite-any-test-like-v2.safetensors",
|
||||
"url": "https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-any-test-like-v2.safetensors",
|
||||
"directory": "model_patches"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-lllite-any-test-like-v2.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"type": "ACN_AdvancedControlNetApply_v2",
|
||||
"pos": [
|
||||
1210,
|
||||
130
|
||||
],
|
||||
"size": [
|
||||
287.86183776855466,
|
||||
266
|
||||
],
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 16
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 17
|
||||
},
|
||||
{
|
||||
"localized_name": "control_net",
|
||||
"name": "control_net",
|
||||
"type": "CONTROL_NET",
|
||||
"link": 18
|
||||
},
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 19
|
||||
},
|
||||
{
|
||||
"localized_name": "mask_optional",
|
||||
"name": "mask_optional",
|
||||
"shape": 7,
|
||||
"type": "MASK",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_kf_override",
|
||||
"name": "latent_kf_override",
|
||||
"shape": 7,
|
||||
"type": "LATENT_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weights_override",
|
||||
"name": "weights_override",
|
||||
"shape": 7,
|
||||
"type": "CONTROL_NET_WEIGHTS",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "vae_optional",
|
||||
"name": "vae_optional",
|
||||
"shape": 7,
|
||||
"type": "VAE",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "strength",
|
||||
"name": "strength",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "strength"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "start_percent",
|
||||
"name": "start_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "start_percent"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "end_percent",
|
||||
"name": "end_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "end_percent"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
21
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
22
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AdvancedControlNetApply_v2"
|
||||
},
|
||||
"widgets_values": [
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "KSampler",
|
||||
"pos": [
|
||||
1580,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
262
|
||||
],
|
||||
"flags": {},
|
||||
"order": 9,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "model",
|
||||
"name": "model",
|
||||
"type": "MODEL",
|
||||
"link": 20
|
||||
},
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 21
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 22
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_image",
|
||||
"name": "latent_image",
|
||||
"type": "LATENT",
|
||||
"link": 23
|
||||
},
|
||||
{
|
||||
"localized_name": "seed",
|
||||
"name": "seed",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "seed"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "steps",
|
||||
"name": "steps",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "steps"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "cfg",
|
||||
"name": "cfg",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "cfg"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "sampler_name",
|
||||
"name": "sampler_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "sampler_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "scheduler",
|
||||
"name": "scheduler",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "scheduler"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "denoise",
|
||||
"name": "denoise",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "denoise"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
24
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "KSampler"
|
||||
},
|
||||
"widgets_values": [
|
||||
82000,
|
||||
"fixed",
|
||||
12,
|
||||
1,
|
||||
"euler",
|
||||
"simple",
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"type": "VAEDecode",
|
||||
"pos": [
|
||||
1940,
|
||||
140
|
||||
],
|
||||
"size": [
|
||||
140,
|
||||
46
|
||||
],
|
||||
"flags": {},
|
||||
"order": 10,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "samples",
|
||||
"name": "samples",
|
||||
"type": "LATENT",
|
||||
"link": 24
|
||||
},
|
||||
{
|
||||
"localized_name": "vae",
|
||||
"name": "vae",
|
||||
"type": "VAE",
|
||||
"link": 25
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
26
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAEDecode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "SaveImage",
|
||||
"pos": [
|
||||
2190,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 11,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 26
|
||||
},
|
||||
{
|
||||
"localized_name": "filename_prefix",
|
||||
"name": "filename_prefix",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "filename_prefix"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {},
|
||||
"widgets_values": [
|
||||
"acn_anima_examples/any_grayscale_a"
|
||||
]
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[
|
||||
14,
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
15,
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
16,
|
||||
3,
|
||||
0,
|
||||
9,
|
||||
0,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
17,
|
||||
4,
|
||||
0,
|
||||
9,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
18,
|
||||
8,
|
||||
0,
|
||||
9,
|
||||
2,
|
||||
"CONTROL_NET"
|
||||
],
|
||||
[
|
||||
19,
|
||||
6,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
20,
|
||||
1,
|
||||
0,
|
||||
10,
|
||||
0,
|
||||
"MODEL"
|
||||
],
|
||||
[
|
||||
21,
|
||||
9,
|
||||
0,
|
||||
10,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
22,
|
||||
9,
|
||||
1,
|
||||
10,
|
||||
2,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
23,
|
||||
5,
|
||||
0,
|
||||
10,
|
||||
3,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
24,
|
||||
10,
|
||||
0,
|
||||
11,
|
||||
0,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
25,
|
||||
7,
|
||||
0,
|
||||
11,
|
||||
1,
|
||||
"VAE"
|
||||
],
|
||||
[
|
||||
26,
|
||||
11,
|
||||
0,
|
||||
12,
|
||||
0,
|
||||
"IMAGE"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"id": 20,
|
||||
"title": "SHARED INPUTS",
|
||||
"bounding": [
|
||||
10,
|
||||
35,
|
||||
740,
|
||||
900
|
||||
],
|
||||
"color": "#3f789e",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"title": "ANIMA LLLITE V2 ANY - GRAYSCALE A",
|
||||
"bounding": [
|
||||
810,
|
||||
35,
|
||||
1660,
|
||||
900
|
||||
],
|
||||
"color": "#6f4d86",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 1,
|
||||
"offset": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"info": {
|
||||
"name": "Anima LLLite v2 any - grayscale A",
|
||||
"author": "Kosinkadink",
|
||||
"description": "Advanced-ControlNet example for Anima LLLite v2 any with grayscale A conditioning."
|
||||
}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
@@ -0,0 +1,941 @@
|
||||
{
|
||||
"id": "00000000-0000-0000-0000-000000000000",
|
||||
"revision": 0,
|
||||
"last_node_id": 12,
|
||||
"last_link_id": 26,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "UNETLoader",
|
||||
"pos": [
|
||||
50,
|
||||
100
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
82
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "unet_name",
|
||||
"name": "unet_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "unet_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weight_dtype",
|
||||
"name": "weight_dtype",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "weight_dtype"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "MODEL",
|
||||
"name": "MODEL",
|
||||
"type": "MODEL",
|
||||
"links": [
|
||||
20
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "UNETLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-base-v1.0.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-base-v1.0.safetensors",
|
||||
"directory": "diffusion_models"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-base-v1.0.safetensors",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "CLIPLoader",
|
||||
"pos": [
|
||||
50,
|
||||
250
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip_name",
|
||||
"name": "clip_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "clip_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "type",
|
||||
"name": "type",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "type"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "device",
|
||||
"name": "device",
|
||||
"shape": 7,
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "device"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CLIP",
|
||||
"name": "CLIP",
|
||||
"type": "CLIP",
|
||||
"links": [
|
||||
14,
|
||||
15
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_3_06b_base.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors",
|
||||
"directory": "text_encoders"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_3_06b_base.safetensors",
|
||||
"qwen_image",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 14
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anime illustration of a female knight in ornate silver plate armor holding a sword, side profile in a dense forest, detailed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
440
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 15
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
17
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "EmptySD3LatentImage",
|
||||
"pos": [
|
||||
50,
|
||||
470
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "width",
|
||||
"name": "width",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "width"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "height",
|
||||
"name": "height",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "height"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "batch_size",
|
||||
"name": "batch_size",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "batch_size"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
23
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "EmptySD3LatentImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
512,
|
||||
512,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
50,
|
||||
650
|
||||
],
|
||||
"size": [
|
||||
282.798828125,
|
||||
314
|
||||
],
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "image"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "choose file to upload",
|
||||
"name": "upload",
|
||||
"type": "IMAGEUPLOAD",
|
||||
"widget": {
|
||||
"name": "upload"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
19
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "MASK",
|
||||
"name": "MASK",
|
||||
"type": "MASK",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LoadImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima_lllite_any_grayscale_b_control.png",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "VAELoader",
|
||||
"pos": [
|
||||
360,
|
||||
700
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "vae_name",
|
||||
"name": "vae_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "vae_name"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "VAE",
|
||||
"name": "VAE",
|
||||
"type": "VAE",
|
||||
"links": [
|
||||
25
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAELoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_image_vae.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors",
|
||||
"directory": "vae"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_image_vae.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"pos": [
|
||||
860,
|
||||
120
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "model_patch",
|
||||
"name": "model_patch",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "model_patch"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONTROL_NET",
|
||||
"name": "CONTROL_NET",
|
||||
"type": "CONTROL_NET",
|
||||
"links": [
|
||||
18
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-lllite-any-test-like-v2.safetensors",
|
||||
"url": "https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-any-test-like-v2.safetensors",
|
||||
"directory": "model_patches"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-lllite-any-test-like-v2.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"type": "ACN_AdvancedControlNetApply_v2",
|
||||
"pos": [
|
||||
1210,
|
||||
130
|
||||
],
|
||||
"size": [
|
||||
287.86183776855466,
|
||||
266
|
||||
],
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 16
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 17
|
||||
},
|
||||
{
|
||||
"localized_name": "control_net",
|
||||
"name": "control_net",
|
||||
"type": "CONTROL_NET",
|
||||
"link": 18
|
||||
},
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 19
|
||||
},
|
||||
{
|
||||
"localized_name": "mask_optional",
|
||||
"name": "mask_optional",
|
||||
"shape": 7,
|
||||
"type": "MASK",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_kf_override",
|
||||
"name": "latent_kf_override",
|
||||
"shape": 7,
|
||||
"type": "LATENT_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weights_override",
|
||||
"name": "weights_override",
|
||||
"shape": 7,
|
||||
"type": "CONTROL_NET_WEIGHTS",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "vae_optional",
|
||||
"name": "vae_optional",
|
||||
"shape": 7,
|
||||
"type": "VAE",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "strength",
|
||||
"name": "strength",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "strength"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "start_percent",
|
||||
"name": "start_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "start_percent"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "end_percent",
|
||||
"name": "end_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "end_percent"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
21
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
22
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AdvancedControlNetApply_v2"
|
||||
},
|
||||
"widgets_values": [
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "KSampler",
|
||||
"pos": [
|
||||
1580,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
262
|
||||
],
|
||||
"flags": {},
|
||||
"order": 9,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "model",
|
||||
"name": "model",
|
||||
"type": "MODEL",
|
||||
"link": 20
|
||||
},
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 21
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 22
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_image",
|
||||
"name": "latent_image",
|
||||
"type": "LATENT",
|
||||
"link": 23
|
||||
},
|
||||
{
|
||||
"localized_name": "seed",
|
||||
"name": "seed",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "seed"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "steps",
|
||||
"name": "steps",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "steps"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "cfg",
|
||||
"name": "cfg",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "cfg"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "sampler_name",
|
||||
"name": "sampler_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "sampler_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "scheduler",
|
||||
"name": "scheduler",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "scheduler"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "denoise",
|
||||
"name": "denoise",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "denoise"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
24
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "KSampler"
|
||||
},
|
||||
"widgets_values": [
|
||||
82000,
|
||||
"fixed",
|
||||
12,
|
||||
1,
|
||||
"euler",
|
||||
"simple",
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"type": "VAEDecode",
|
||||
"pos": [
|
||||
1940,
|
||||
140
|
||||
],
|
||||
"size": [
|
||||
140,
|
||||
46
|
||||
],
|
||||
"flags": {},
|
||||
"order": 10,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "samples",
|
||||
"name": "samples",
|
||||
"type": "LATENT",
|
||||
"link": 24
|
||||
},
|
||||
{
|
||||
"localized_name": "vae",
|
||||
"name": "vae",
|
||||
"type": "VAE",
|
||||
"link": 25
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
26
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAEDecode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "SaveImage",
|
||||
"pos": [
|
||||
2190,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 11,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 26
|
||||
},
|
||||
{
|
||||
"localized_name": "filename_prefix",
|
||||
"name": "filename_prefix",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "filename_prefix"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {},
|
||||
"widgets_values": [
|
||||
"acn_anima_examples/any_grayscale_b"
|
||||
]
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[
|
||||
14,
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
15,
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
16,
|
||||
3,
|
||||
0,
|
||||
9,
|
||||
0,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
17,
|
||||
4,
|
||||
0,
|
||||
9,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
18,
|
||||
8,
|
||||
0,
|
||||
9,
|
||||
2,
|
||||
"CONTROL_NET"
|
||||
],
|
||||
[
|
||||
19,
|
||||
6,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
20,
|
||||
1,
|
||||
0,
|
||||
10,
|
||||
0,
|
||||
"MODEL"
|
||||
],
|
||||
[
|
||||
21,
|
||||
9,
|
||||
0,
|
||||
10,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
22,
|
||||
9,
|
||||
1,
|
||||
10,
|
||||
2,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
23,
|
||||
5,
|
||||
0,
|
||||
10,
|
||||
3,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
24,
|
||||
10,
|
||||
0,
|
||||
11,
|
||||
0,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
25,
|
||||
7,
|
||||
0,
|
||||
11,
|
||||
1,
|
||||
"VAE"
|
||||
],
|
||||
[
|
||||
26,
|
||||
11,
|
||||
0,
|
||||
12,
|
||||
0,
|
||||
"IMAGE"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"id": 20,
|
||||
"title": "SHARED INPUTS",
|
||||
"bounding": [
|
||||
10,
|
||||
35,
|
||||
740,
|
||||
900
|
||||
],
|
||||
"color": "#3f789e",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"title": "ANIMA LLLITE V2 ANY - GRAYSCALE B",
|
||||
"bounding": [
|
||||
810,
|
||||
35,
|
||||
1660,
|
||||
900
|
||||
],
|
||||
"color": "#6f4d86",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 1,
|
||||
"offset": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"info": {
|
||||
"name": "Anima LLLite v2 any - grayscale B",
|
||||
"author": "Kosinkadink",
|
||||
"description": "Advanced-ControlNet example for Anima LLLite v2 any with grayscale B conditioning."
|
||||
}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
@@ -0,0 +1,941 @@
|
||||
{
|
||||
"id": "00000000-0000-0000-0000-000000000000",
|
||||
"revision": 0,
|
||||
"last_node_id": 12,
|
||||
"last_link_id": 26,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "UNETLoader",
|
||||
"pos": [
|
||||
50,
|
||||
100
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
82
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "unet_name",
|
||||
"name": "unet_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "unet_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weight_dtype",
|
||||
"name": "weight_dtype",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "weight_dtype"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "MODEL",
|
||||
"name": "MODEL",
|
||||
"type": "MODEL",
|
||||
"links": [
|
||||
20
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "UNETLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-base-v1.0.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-base-v1.0.safetensors",
|
||||
"directory": "diffusion_models"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-base-v1.0.safetensors",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "CLIPLoader",
|
||||
"pos": [
|
||||
50,
|
||||
250
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip_name",
|
||||
"name": "clip_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "clip_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "type",
|
||||
"name": "type",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "type"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "device",
|
||||
"name": "device",
|
||||
"shape": 7,
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "device"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CLIP",
|
||||
"name": "CLIP",
|
||||
"type": "CLIP",
|
||||
"links": [
|
||||
14,
|
||||
15
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_3_06b_base.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors",
|
||||
"directory": "text_encoders"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_3_06b_base.safetensors",
|
||||
"qwen_image",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 14
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anime illustration of a female knight in ornate silver plate armor holding a sword, side profile in a dense forest, detailed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
440
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 15
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
17
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "EmptySD3LatentImage",
|
||||
"pos": [
|
||||
50,
|
||||
470
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "width",
|
||||
"name": "width",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "width"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "height",
|
||||
"name": "height",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "height"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "batch_size",
|
||||
"name": "batch_size",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "batch_size"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
23
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "EmptySD3LatentImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
512,
|
||||
512,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
50,
|
||||
650
|
||||
],
|
||||
"size": [
|
||||
282.798828125,
|
||||
314
|
||||
],
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "image"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "choose file to upload",
|
||||
"name": "upload",
|
||||
"type": "IMAGEUPLOAD",
|
||||
"widget": {
|
||||
"name": "upload"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
19
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "MASK",
|
||||
"name": "MASK",
|
||||
"type": "MASK",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LoadImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima_lllite_any_hed_scribble_control.png",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "VAELoader",
|
||||
"pos": [
|
||||
360,
|
||||
700
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "vae_name",
|
||||
"name": "vae_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "vae_name"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "VAE",
|
||||
"name": "VAE",
|
||||
"type": "VAE",
|
||||
"links": [
|
||||
25
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAELoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_image_vae.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors",
|
||||
"directory": "vae"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_image_vae.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"pos": [
|
||||
860,
|
||||
120
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "model_patch",
|
||||
"name": "model_patch",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "model_patch"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONTROL_NET",
|
||||
"name": "CONTROL_NET",
|
||||
"type": "CONTROL_NET",
|
||||
"links": [
|
||||
18
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-lllite-any-test-like-v2.safetensors",
|
||||
"url": "https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-any-test-like-v2.safetensors",
|
||||
"directory": "model_patches"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-lllite-any-test-like-v2.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"type": "ACN_AdvancedControlNetApply_v2",
|
||||
"pos": [
|
||||
1210,
|
||||
130
|
||||
],
|
||||
"size": [
|
||||
287.86183776855466,
|
||||
266
|
||||
],
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 16
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 17
|
||||
},
|
||||
{
|
||||
"localized_name": "control_net",
|
||||
"name": "control_net",
|
||||
"type": "CONTROL_NET",
|
||||
"link": 18
|
||||
},
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 19
|
||||
},
|
||||
{
|
||||
"localized_name": "mask_optional",
|
||||
"name": "mask_optional",
|
||||
"shape": 7,
|
||||
"type": "MASK",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_kf_override",
|
||||
"name": "latent_kf_override",
|
||||
"shape": 7,
|
||||
"type": "LATENT_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weights_override",
|
||||
"name": "weights_override",
|
||||
"shape": 7,
|
||||
"type": "CONTROL_NET_WEIGHTS",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "vae_optional",
|
||||
"name": "vae_optional",
|
||||
"shape": 7,
|
||||
"type": "VAE",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "strength",
|
||||
"name": "strength",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "strength"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "start_percent",
|
||||
"name": "start_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "start_percent"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "end_percent",
|
||||
"name": "end_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "end_percent"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
21
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
22
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AdvancedControlNetApply_v2"
|
||||
},
|
||||
"widgets_values": [
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "KSampler",
|
||||
"pos": [
|
||||
1580,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
262
|
||||
],
|
||||
"flags": {},
|
||||
"order": 9,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "model",
|
||||
"name": "model",
|
||||
"type": "MODEL",
|
||||
"link": 20
|
||||
},
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 21
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 22
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_image",
|
||||
"name": "latent_image",
|
||||
"type": "LATENT",
|
||||
"link": 23
|
||||
},
|
||||
{
|
||||
"localized_name": "seed",
|
||||
"name": "seed",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "seed"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "steps",
|
||||
"name": "steps",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "steps"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "cfg",
|
||||
"name": "cfg",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "cfg"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "sampler_name",
|
||||
"name": "sampler_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "sampler_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "scheduler",
|
||||
"name": "scheduler",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "scheduler"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "denoise",
|
||||
"name": "denoise",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "denoise"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
24
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "KSampler"
|
||||
},
|
||||
"widgets_values": [
|
||||
82000,
|
||||
"fixed",
|
||||
12,
|
||||
1,
|
||||
"euler",
|
||||
"simple",
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"type": "VAEDecode",
|
||||
"pos": [
|
||||
1940,
|
||||
140
|
||||
],
|
||||
"size": [
|
||||
140,
|
||||
46
|
||||
],
|
||||
"flags": {},
|
||||
"order": 10,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "samples",
|
||||
"name": "samples",
|
||||
"type": "LATENT",
|
||||
"link": 24
|
||||
},
|
||||
{
|
||||
"localized_name": "vae",
|
||||
"name": "vae",
|
||||
"type": "VAE",
|
||||
"link": 25
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
26
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAEDecode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "SaveImage",
|
||||
"pos": [
|
||||
2190,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 11,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 26
|
||||
},
|
||||
{
|
||||
"localized_name": "filename_prefix",
|
||||
"name": "filename_prefix",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "filename_prefix"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {},
|
||||
"widgets_values": [
|
||||
"acn_anima_examples/any_hed_scribble"
|
||||
]
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[
|
||||
14,
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
15,
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
16,
|
||||
3,
|
||||
0,
|
||||
9,
|
||||
0,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
17,
|
||||
4,
|
||||
0,
|
||||
9,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
18,
|
||||
8,
|
||||
0,
|
||||
9,
|
||||
2,
|
||||
"CONTROL_NET"
|
||||
],
|
||||
[
|
||||
19,
|
||||
6,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
20,
|
||||
1,
|
||||
0,
|
||||
10,
|
||||
0,
|
||||
"MODEL"
|
||||
],
|
||||
[
|
||||
21,
|
||||
9,
|
||||
0,
|
||||
10,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
22,
|
||||
9,
|
||||
1,
|
||||
10,
|
||||
2,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
23,
|
||||
5,
|
||||
0,
|
||||
10,
|
||||
3,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
24,
|
||||
10,
|
||||
0,
|
||||
11,
|
||||
0,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
25,
|
||||
7,
|
||||
0,
|
||||
11,
|
||||
1,
|
||||
"VAE"
|
||||
],
|
||||
[
|
||||
26,
|
||||
11,
|
||||
0,
|
||||
12,
|
||||
0,
|
||||
"IMAGE"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"id": 20,
|
||||
"title": "SHARED INPUTS",
|
||||
"bounding": [
|
||||
10,
|
||||
35,
|
||||
740,
|
||||
900
|
||||
],
|
||||
"color": "#3f789e",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"title": "ANIMA LLLITE V2 ANY - HED SCRIBBLE",
|
||||
"bounding": [
|
||||
810,
|
||||
35,
|
||||
1660,
|
||||
900
|
||||
],
|
||||
"color": "#6f4d86",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 1,
|
||||
"offset": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"info": {
|
||||
"name": "Anima LLLite v2 any - HED scribble",
|
||||
"author": "Kosinkadink",
|
||||
"description": "Advanced-ControlNet example for Anima LLLite v2 any with HED scribble conditioning."
|
||||
}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
@@ -0,0 +1,941 @@
|
||||
{
|
||||
"id": "00000000-0000-0000-0000-000000000000",
|
||||
"revision": 0,
|
||||
"last_node_id": 12,
|
||||
"last_link_id": 26,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "UNETLoader",
|
||||
"pos": [
|
||||
50,
|
||||
100
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
82
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "unet_name",
|
||||
"name": "unet_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "unet_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weight_dtype",
|
||||
"name": "weight_dtype",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "weight_dtype"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "MODEL",
|
||||
"name": "MODEL",
|
||||
"type": "MODEL",
|
||||
"links": [
|
||||
20
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "UNETLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-base-v1.0.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-base-v1.0.safetensors",
|
||||
"directory": "diffusion_models"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-base-v1.0.safetensors",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "CLIPLoader",
|
||||
"pos": [
|
||||
50,
|
||||
250
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip_name",
|
||||
"name": "clip_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "clip_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "type",
|
||||
"name": "type",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "type"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "device",
|
||||
"name": "device",
|
||||
"shape": 7,
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "device"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CLIP",
|
||||
"name": "CLIP",
|
||||
"type": "CLIP",
|
||||
"links": [
|
||||
14,
|
||||
15
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_3_06b_base.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors",
|
||||
"directory": "text_encoders"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_3_06b_base.safetensors",
|
||||
"qwen_image",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 14
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anime illustration of a female knight in ornate silver plate armor holding a sword, side profile in a dense forest, detailed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
440
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 15
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
17
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "EmptySD3LatentImage",
|
||||
"pos": [
|
||||
50,
|
||||
470
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "width",
|
||||
"name": "width",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "width"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "height",
|
||||
"name": "height",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "height"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "batch_size",
|
||||
"name": "batch_size",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "batch_size"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
23
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "EmptySD3LatentImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
512,
|
||||
512,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
50,
|
||||
650
|
||||
],
|
||||
"size": [
|
||||
282.798828125,
|
||||
314
|
||||
],
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "image"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "choose file to upload",
|
||||
"name": "upload",
|
||||
"type": "IMAGEUPLOAD",
|
||||
"widget": {
|
||||
"name": "upload"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
19
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "MASK",
|
||||
"name": "MASK",
|
||||
"type": "MASK",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LoadImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima_lllite_any_lineart_control.png",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "VAELoader",
|
||||
"pos": [
|
||||
360,
|
||||
700
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "vae_name",
|
||||
"name": "vae_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "vae_name"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "VAE",
|
||||
"name": "VAE",
|
||||
"type": "VAE",
|
||||
"links": [
|
||||
25
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAELoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_image_vae.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors",
|
||||
"directory": "vae"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_image_vae.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"pos": [
|
||||
860,
|
||||
120
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "model_patch",
|
||||
"name": "model_patch",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "model_patch"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONTROL_NET",
|
||||
"name": "CONTROL_NET",
|
||||
"type": "CONTROL_NET",
|
||||
"links": [
|
||||
18
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-lllite-any-test-like-v2.safetensors",
|
||||
"url": "https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-any-test-like-v2.safetensors",
|
||||
"directory": "model_patches"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-lllite-any-test-like-v2.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"type": "ACN_AdvancedControlNetApply_v2",
|
||||
"pos": [
|
||||
1210,
|
||||
130
|
||||
],
|
||||
"size": [
|
||||
287.86183776855466,
|
||||
266
|
||||
],
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 16
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 17
|
||||
},
|
||||
{
|
||||
"localized_name": "control_net",
|
||||
"name": "control_net",
|
||||
"type": "CONTROL_NET",
|
||||
"link": 18
|
||||
},
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 19
|
||||
},
|
||||
{
|
||||
"localized_name": "mask_optional",
|
||||
"name": "mask_optional",
|
||||
"shape": 7,
|
||||
"type": "MASK",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_kf_override",
|
||||
"name": "latent_kf_override",
|
||||
"shape": 7,
|
||||
"type": "LATENT_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weights_override",
|
||||
"name": "weights_override",
|
||||
"shape": 7,
|
||||
"type": "CONTROL_NET_WEIGHTS",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "vae_optional",
|
||||
"name": "vae_optional",
|
||||
"shape": 7,
|
||||
"type": "VAE",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "strength",
|
||||
"name": "strength",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "strength"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "start_percent",
|
||||
"name": "start_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "start_percent"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "end_percent",
|
||||
"name": "end_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "end_percent"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
21
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
22
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AdvancedControlNetApply_v2"
|
||||
},
|
||||
"widgets_values": [
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "KSampler",
|
||||
"pos": [
|
||||
1580,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
262
|
||||
],
|
||||
"flags": {},
|
||||
"order": 9,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "model",
|
||||
"name": "model",
|
||||
"type": "MODEL",
|
||||
"link": 20
|
||||
},
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 21
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 22
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_image",
|
||||
"name": "latent_image",
|
||||
"type": "LATENT",
|
||||
"link": 23
|
||||
},
|
||||
{
|
||||
"localized_name": "seed",
|
||||
"name": "seed",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "seed"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "steps",
|
||||
"name": "steps",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "steps"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "cfg",
|
||||
"name": "cfg",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "cfg"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "sampler_name",
|
||||
"name": "sampler_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "sampler_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "scheduler",
|
||||
"name": "scheduler",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "scheduler"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "denoise",
|
||||
"name": "denoise",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "denoise"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
24
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "KSampler"
|
||||
},
|
||||
"widgets_values": [
|
||||
82000,
|
||||
"fixed",
|
||||
12,
|
||||
1,
|
||||
"euler",
|
||||
"simple",
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"type": "VAEDecode",
|
||||
"pos": [
|
||||
1940,
|
||||
140
|
||||
],
|
||||
"size": [
|
||||
140,
|
||||
46
|
||||
],
|
||||
"flags": {},
|
||||
"order": 10,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "samples",
|
||||
"name": "samples",
|
||||
"type": "LATENT",
|
||||
"link": 24
|
||||
},
|
||||
{
|
||||
"localized_name": "vae",
|
||||
"name": "vae",
|
||||
"type": "VAE",
|
||||
"link": 25
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
26
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAEDecode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "SaveImage",
|
||||
"pos": [
|
||||
2190,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 11,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 26
|
||||
},
|
||||
{
|
||||
"localized_name": "filename_prefix",
|
||||
"name": "filename_prefix",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "filename_prefix"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {},
|
||||
"widgets_values": [
|
||||
"acn_anima_examples/any_lineart"
|
||||
]
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[
|
||||
14,
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
15,
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
16,
|
||||
3,
|
||||
0,
|
||||
9,
|
||||
0,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
17,
|
||||
4,
|
||||
0,
|
||||
9,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
18,
|
||||
8,
|
||||
0,
|
||||
9,
|
||||
2,
|
||||
"CONTROL_NET"
|
||||
],
|
||||
[
|
||||
19,
|
||||
6,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
20,
|
||||
1,
|
||||
0,
|
||||
10,
|
||||
0,
|
||||
"MODEL"
|
||||
],
|
||||
[
|
||||
21,
|
||||
9,
|
||||
0,
|
||||
10,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
22,
|
||||
9,
|
||||
1,
|
||||
10,
|
||||
2,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
23,
|
||||
5,
|
||||
0,
|
||||
10,
|
||||
3,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
24,
|
||||
10,
|
||||
0,
|
||||
11,
|
||||
0,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
25,
|
||||
7,
|
||||
0,
|
||||
11,
|
||||
1,
|
||||
"VAE"
|
||||
],
|
||||
[
|
||||
26,
|
||||
11,
|
||||
0,
|
||||
12,
|
||||
0,
|
||||
"IMAGE"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"id": 20,
|
||||
"title": "SHARED INPUTS",
|
||||
"bounding": [
|
||||
10,
|
||||
35,
|
||||
740,
|
||||
900
|
||||
],
|
||||
"color": "#3f789e",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"title": "ANIMA LLLITE V2 ANY - LINEART",
|
||||
"bounding": [
|
||||
810,
|
||||
35,
|
||||
1660,
|
||||
900
|
||||
],
|
||||
"color": "#6f4d86",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 1,
|
||||
"offset": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"info": {
|
||||
"name": "Anima LLLite v2 any - lineart",
|
||||
"author": "Kosinkadink",
|
||||
"description": "Advanced-ControlNet example for Anima LLLite v2 any with lineart conditioning."
|
||||
}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
@@ -0,0 +1,941 @@
|
||||
{
|
||||
"id": "00000000-0000-0000-0000-000000000000",
|
||||
"revision": 0,
|
||||
"last_node_id": 12,
|
||||
"last_link_id": 26,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "UNETLoader",
|
||||
"pos": [
|
||||
50,
|
||||
100
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
82
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "unet_name",
|
||||
"name": "unet_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "unet_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weight_dtype",
|
||||
"name": "weight_dtype",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "weight_dtype"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "MODEL",
|
||||
"name": "MODEL",
|
||||
"type": "MODEL",
|
||||
"links": [
|
||||
20
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "UNETLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-base-v1.0.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-base-v1.0.safetensors",
|
||||
"directory": "diffusion_models"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-base-v1.0.safetensors",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "CLIPLoader",
|
||||
"pos": [
|
||||
50,
|
||||
250
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip_name",
|
||||
"name": "clip_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "clip_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "type",
|
||||
"name": "type",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "type"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "device",
|
||||
"name": "device",
|
||||
"shape": 7,
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "device"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CLIP",
|
||||
"name": "CLIP",
|
||||
"type": "CLIP",
|
||||
"links": [
|
||||
14,
|
||||
15
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPLoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_3_06b_base.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors",
|
||||
"directory": "text_encoders"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_3_06b_base.safetensors",
|
||||
"qwen_image",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 14
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
16
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anime illustration of a female knight in ornate silver plate armor holding a sword, side profile in a dense forest, detailed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "CLIPTextEncode",
|
||||
"pos": [
|
||||
360,
|
||||
440
|
||||
],
|
||||
"size": [
|
||||
400,
|
||||
200
|
||||
],
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "clip",
|
||||
"name": "clip",
|
||||
"type": "CLIP",
|
||||
"link": 15
|
||||
},
|
||||
{
|
||||
"localized_name": "text",
|
||||
"name": "text",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "text"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONDITIONING",
|
||||
"name": "CONDITIONING",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
17
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "CLIPTextEncode"
|
||||
},
|
||||
"widgets_values": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "EmptySD3LatentImage",
|
||||
"pos": [
|
||||
50,
|
||||
470
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
106
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "width",
|
||||
"name": "width",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "width"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "height",
|
||||
"name": "height",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "height"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "batch_size",
|
||||
"name": "batch_size",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "batch_size"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
23
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "EmptySD3LatentImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
512,
|
||||
512,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
50,
|
||||
650
|
||||
],
|
||||
"size": [
|
||||
282.798828125,
|
||||
314
|
||||
],
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "image"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "choose file to upload",
|
||||
"name": "upload",
|
||||
"type": "IMAGEUPLOAD",
|
||||
"widget": {
|
||||
"name": "upload"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
19
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "MASK",
|
||||
"name": "MASK",
|
||||
"type": "MASK",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LoadImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima_lllite_any_pidinet_scribble_control.png",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "VAELoader",
|
||||
"pos": [
|
||||
360,
|
||||
700
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "vae_name",
|
||||
"name": "vae_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "vae_name"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "VAE",
|
||||
"name": "VAE",
|
||||
"type": "VAE",
|
||||
"links": [
|
||||
25
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAELoader",
|
||||
"models": [
|
||||
{
|
||||
"name": "qwen_image_vae.safetensors",
|
||||
"url": "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors",
|
||||
"directory": "vae"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"qwen_image_vae.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"pos": [
|
||||
860,
|
||||
120
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "model_patch",
|
||||
"name": "model_patch",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "model_patch"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "CONTROL_NET",
|
||||
"name": "CONTROL_NET",
|
||||
"type": "CONTROL_NET",
|
||||
"links": [
|
||||
18
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AnimaLLLiteLoaderAdvanced",
|
||||
"models": [
|
||||
{
|
||||
"name": "anima-lllite-any-test-like-v2.safetensors",
|
||||
"url": "https://huggingface.co/kohya-ss/Anima-LLLite/resolve/main/anima-lllite-any-test-like-v2.safetensors",
|
||||
"directory": "model_patches"
|
||||
}
|
||||
]
|
||||
},
|
||||
"widgets_values": [
|
||||
"anima-lllite-any-test-like-v2.safetensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"type": "ACN_AdvancedControlNetApply_v2",
|
||||
"pos": [
|
||||
1210,
|
||||
130
|
||||
],
|
||||
"size": [
|
||||
287.86183776855466,
|
||||
266
|
||||
],
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 16
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 17
|
||||
},
|
||||
{
|
||||
"localized_name": "control_net",
|
||||
"name": "control_net",
|
||||
"type": "CONTROL_NET",
|
||||
"link": 18
|
||||
},
|
||||
{
|
||||
"localized_name": "image",
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 19
|
||||
},
|
||||
{
|
||||
"localized_name": "mask_optional",
|
||||
"name": "mask_optional",
|
||||
"shape": 7,
|
||||
"type": "MASK",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "timestep_kf",
|
||||
"name": "timestep_kf",
|
||||
"shape": 7,
|
||||
"type": "TIMESTEP_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_kf_override",
|
||||
"name": "latent_kf_override",
|
||||
"shape": 7,
|
||||
"type": "LATENT_KEYFRAME",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "weights_override",
|
||||
"name": "weights_override",
|
||||
"shape": 7,
|
||||
"type": "CONTROL_NET_WEIGHTS",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "vae_optional",
|
||||
"name": "vae_optional",
|
||||
"shape": 7,
|
||||
"type": "VAE",
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "strength",
|
||||
"name": "strength",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "strength"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "start_percent",
|
||||
"name": "start_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "start_percent"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "end_percent",
|
||||
"name": "end_percent",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "end_percent"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
21
|
||||
]
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"links": [
|
||||
22
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "ACN_AdvancedControlNetApply_v2"
|
||||
},
|
||||
"widgets_values": [
|
||||
1,
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "KSampler",
|
||||
"pos": [
|
||||
1580,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
262
|
||||
],
|
||||
"flags": {},
|
||||
"order": 9,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "model",
|
||||
"name": "model",
|
||||
"type": "MODEL",
|
||||
"link": 20
|
||||
},
|
||||
{
|
||||
"localized_name": "positive",
|
||||
"name": "positive",
|
||||
"type": "CONDITIONING",
|
||||
"link": 21
|
||||
},
|
||||
{
|
||||
"localized_name": "negative",
|
||||
"name": "negative",
|
||||
"type": "CONDITIONING",
|
||||
"link": 22
|
||||
},
|
||||
{
|
||||
"localized_name": "latent_image",
|
||||
"name": "latent_image",
|
||||
"type": "LATENT",
|
||||
"link": 23
|
||||
},
|
||||
{
|
||||
"localized_name": "seed",
|
||||
"name": "seed",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "seed"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "steps",
|
||||
"name": "steps",
|
||||
"type": "INT",
|
||||
"widget": {
|
||||
"name": "steps"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "cfg",
|
||||
"name": "cfg",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "cfg"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "sampler_name",
|
||||
"name": "sampler_name",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "sampler_name"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "scheduler",
|
||||
"name": "scheduler",
|
||||
"type": "COMBO",
|
||||
"widget": {
|
||||
"name": "scheduler"
|
||||
},
|
||||
"link": null
|
||||
},
|
||||
{
|
||||
"localized_name": "denoise",
|
||||
"name": "denoise",
|
||||
"type": "FLOAT",
|
||||
"widget": {
|
||||
"name": "denoise"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "LATENT",
|
||||
"name": "LATENT",
|
||||
"type": "LATENT",
|
||||
"links": [
|
||||
24
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "KSampler"
|
||||
},
|
||||
"widgets_values": [
|
||||
82000,
|
||||
"fixed",
|
||||
12,
|
||||
1,
|
||||
"euler",
|
||||
"simple",
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"type": "VAEDecode",
|
||||
"pos": [
|
||||
1940,
|
||||
140
|
||||
],
|
||||
"size": [
|
||||
140,
|
||||
46
|
||||
],
|
||||
"flags": {},
|
||||
"order": 10,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "samples",
|
||||
"name": "samples",
|
||||
"type": "LATENT",
|
||||
"link": 24
|
||||
},
|
||||
{
|
||||
"localized_name": "vae",
|
||||
"name": "vae",
|
||||
"type": "VAE",
|
||||
"link": 25
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "IMAGE",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
26
|
||||
]
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VAEDecode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "SaveImage",
|
||||
"pos": [
|
||||
2190,
|
||||
110
|
||||
],
|
||||
"size": [
|
||||
270,
|
||||
58
|
||||
],
|
||||
"flags": {},
|
||||
"order": 11,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 26
|
||||
},
|
||||
{
|
||||
"localized_name": "filename_prefix",
|
||||
"name": "filename_prefix",
|
||||
"type": "STRING",
|
||||
"widget": {
|
||||
"name": "filename_prefix"
|
||||
},
|
||||
"link": null
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"localized_name": "images",
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"links": null
|
||||
}
|
||||
],
|
||||
"properties": {},
|
||||
"widgets_values": [
|
||||
"acn_anima_examples/any_pidinet_scribble"
|
||||
]
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[
|
||||
14,
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
15,
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
"CLIP"
|
||||
],
|
||||
[
|
||||
16,
|
||||
3,
|
||||
0,
|
||||
9,
|
||||
0,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
17,
|
||||
4,
|
||||
0,
|
||||
9,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
18,
|
||||
8,
|
||||
0,
|
||||
9,
|
||||
2,
|
||||
"CONTROL_NET"
|
||||
],
|
||||
[
|
||||
19,
|
||||
6,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
20,
|
||||
1,
|
||||
0,
|
||||
10,
|
||||
0,
|
||||
"MODEL"
|
||||
],
|
||||
[
|
||||
21,
|
||||
9,
|
||||
0,
|
||||
10,
|
||||
1,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
22,
|
||||
9,
|
||||
1,
|
||||
10,
|
||||
2,
|
||||
"CONDITIONING"
|
||||
],
|
||||
[
|
||||
23,
|
||||
5,
|
||||
0,
|
||||
10,
|
||||
3,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
24,
|
||||
10,
|
||||
0,
|
||||
11,
|
||||
0,
|
||||
"LATENT"
|
||||
],
|
||||
[
|
||||
25,
|
||||
7,
|
||||
0,
|
||||
11,
|
||||
1,
|
||||
"VAE"
|
||||
],
|
||||
[
|
||||
26,
|
||||
11,
|
||||
0,
|
||||
12,
|
||||
0,
|
||||
"IMAGE"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"id": 20,
|
||||
"title": "SHARED INPUTS",
|
||||
"bounding": [
|
||||
10,
|
||||
35,
|
||||
740,
|
||||
900
|
||||
],
|
||||
"color": "#3f789e",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"title": "ANIMA LLLITE V2 ANY - PIDINET SCRIBBLE",
|
||||
"bounding": [
|
||||
810,
|
||||
35,
|
||||
1660,
|
||||
900
|
||||
],
|
||||
"color": "#6f4d86",
|
||||
"font_size": 32,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 1,
|
||||
"offset": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"info": {
|
||||
"name": "Anima LLLite v2 any - PiDiNet scribble",
|
||||
"author": "Kosinkadink",
|
||||
"description": "Advanced-ControlNet example for Anima LLLite v2 any with PiDiNet scribble conditioning."
|
||||
}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user