Tech27 min read

Comparing SnapRef v1b with Ref Adapter v2 and Role-Ref-KV on M1 Max Under Identical Conditions

IkesanContents

Right before publishing my previous article comparing Anima Ref Adapter v2 and Role-Ref-KV, another adapter serving the same purpose was released.
It is SnapRef, designed to maintain a character’s features across different compositions and scenes from a single reference image.
The comparison table in its README reports numbers showing it is faster than Ref Adapter v2 and Role-Ref-KV, and closer to the ground truth image than v2.

However, those numbers were measured on an A100.
Numbers alone do not tell us what happens when tested across the same 8 conditions as before, or whether the features unique to SnapRef’s README function identically under Mac MPS.
Therefore, using the exact same reference images, prompts, and seeds as the previous article, I tested v1b using ComfyUI on an M1 Max 64GB setup.

Overview of SnapRef

ItemDetails
Author0ppxnhximxr on Hugging Face, ArcAnima on GitHub
Release DateOctober 29, 2026 for both v1a and v1b
ComponentsTwo nodes (SnapRef and SnapRef (Advanced)) plus LoRA-format weights
Training58,300 images generated with Anima (scenes3x4), 10,000 steps, Anima base v1.0
LicenseApache-2.0 for nodes, CircleStone Labs Non-Commercial License v1.2 for weights
LinksHugging Face (v1b), Hugging Face (v1a), GitHub

The underlying mechanism belongs to the same family as Ref Adapter v2 and Role-Ref-KV.
The reference image passes through the model once via a dedicated path, caching the key/value representations from the attention mechanism across each block, which are then read during each step of generation.
Since it wraps the model in ComfyUI, standard samplers can be used directly.

The differences between v1a and v1b are summarized below.

Itemv1av1b
Rank (Reference / Generation)128 / 64256 / 128
Size (bf16)381,822,008 bytes910,324,208 bytes
Size (FP8)194,652,728 bytes460,246,968 bytes
Time per image on A100 (README)8.9 s9.9 s
DINOv2 similarity to ground truth (README)0.7220.720
CLIP similarity to prompt (README)0.2490.256

The README describes v1b as having “double the rank” and recommends starting with v1a if undecided.
Examining the weight keys reveals that rank is not the only difference.
LoRA modules number 336 in v1a versus 392 in v1b, with v1b also applying to the mlp layers on the generation side.

The comparison table in the README also lists values for other adapters.

Itemv1bv1aRef Adapter v2Role-Ref-KVWithout Reference
Time per image on A1009.9 s8.9 s14.4 s12.5 s7.7 s
DINOv2 similarity to ground truth0.7200.7220.675—0.493

The ground truth image is an average over 52 cases where the same character adopts a specified pose in a separate image.
Looking into the distributed scores_v1a_v1b.json, DINOv2 similarity directly against the reference image itself measures 0.552 for v2, 0.515 for v1a, and 0.510 for v1b, reversing the order.
The ranking flips depending on which metric is examined.

Recommended settings from the README:

ItemSetting
Base ModelAnima base v1.0
Samplereuler or er_sde, simple, 28–30 steps
cfg4.5
PromptQuality tags + 1girl + solo + scene. Hair, clothes, and art style come from reference, so omit them
ResolutionUnspecified (workflow uses 832×1216)

Test Environment

ItemDetails
MachineMacBook Pro M1 Max 64GB (MPS)
UIComfyUI v0.33.3
SnapRefCommit 8e78def nodes and weights from Hugging Face. sha256 matches distributed SHA256SUMS
Resolution896×1152 (same as previous test). Variations noted in individual sections
Samplereuler / simple
Seeds20261027 (added 20261028 and 20261029 for seed comparisons; 20261030 and 20261031 for speed tests)
Reference ImagesIdentical to previous article: Ref Adapter v2 sample ref_girl.jpg and Kana-chan full-body standing illustration
Comparison BaselineRef Adapter v2 and Role-Ref-KV. Images and numbers carried over from previous article, except speed tests re-run on the same day

ref_guidance_on does not run out of the box on MPS.
It halted with Cannot convert a MPS Tensor to float64 dtype, so just as with Ref Adapter previously, I changed two lines of APG correction from .double() to .float().
The remainder of the node code was left intact, except for a temporary one-off test in the black image section.

The tested models covered the same 8 conditions as before, matching the recommended 30 steps and cfg 4.5 on Base.

LabelModelSteps / cfg
Baseanima-base-v1.030 / 4.5
Aesthetic v1.1anima-aesthetic-v1.130 / 4.5
2.9B (remapped)Anima-2.9B-preview-v130 / 4.5
2.9B (unmapped)Anima-2.9B-preview-v130 / 4.5
Turbo v1.1anima-turbo-v1.18 / 1.0
Turbo v1.0anima-turbo-v1.08 / 1.0
Base + Turbo LoRAanima-base-v1.0 + anima-turbo-lora-v0.1 (1.0)8 / 1.0
2.9B unofficial Turboanima29b-p1-turbo1.18 / 1.0

The 2.9B remapping reindexes key numbers to skip the 12 interleaved blocks out of 40.
Since the node only applies LoRA to modules with existing keys, zero-padding like that required for Role-Ref-KV was unnecessary.

By default, SnapRef reads the reference only on the positive prompt side.
At cfg 1.0 for Turbo, model evaluation occurs once per step, whereas at cfg 4.5 it occurs twice.

Running with Official Settings

Tested on Base using the README prompt, workflow negative, 832×1216 resolution, 28 steps, and cfg 4.5.

ReferenceTimeResult
Kana-chan289.9 sSitting on a bench with crossed legs. Night street. Cowlick, blue scrunchie side ponytail, white shirt, red tie, black tights, and loafers preserved
ref_girl276.7 sSitting on a bench with crossed legs. Blonde hair with red streaks, pink eyes, black and white outfit
Kana-chan
Result referencing Kana-chan illustration with README prompt, sitting on a bench at night with crossed legs
ref_girl
Result referencing ref_girl with README prompt, sitting on a bench at night with crossed legs
Prompt
masterpiece, best quality, score_7, safe, 1girl, solo, full body, sitting, crossed legs, bench, street, night

Negative:

worst quality, low quality, score_1, score_2, score_3, artist name, blurry, jpeg artifacts, chromatic aberration

I also ran the cake cafe scene with ref_girl under identical conditions to the previous article.
The output showed her bringing a fork to her mouth on a red sofa, preserving hair color, streaks, and clothing, taking 302.6 seconds.

SnapRef v1b
Cake scene using ref_girl on Base with SnapRef v1b
Ref Adapter v2 (Previous)
Cake scene using ref_girl on Base with Ref Adapter v2
Role-Ref-KV (Previous)
Cake scene using ref_girl on Base with Role-Ref-KV

Results Across Base, Aesthetic v1.1, and 2.9B

Unless specified otherwise, subsequent sections use Kana-chan’s standing reference and the negative prompt from the previous article.

ConditionTime (Running / Cake)RunningCake
Base312.0 s / 316.1 sRunning facing away. Castle and grass fieldBringing fork to mouth on red sofa. Matches reference
Aesthetic v1.1316.0 s / 315.9 sFacing away with nearly identical composition to BaseIdentical scene. Matches reference
2.9B (remapped)441.4 s / 445.6 sRunning facing mostly forward. Matches referenceNearly identical composition to Base
2.9B (unmapped)435.1 s / 434.3 sRetains standing posture from reference. Blurred background with white haze around figureRetains standing posture. Cup and cake float semi-transparently
Base Running
Running scene with SnapRef v1b on Base, facing away
Base Cake
Cake scene with SnapRef v1b on Base
Aesthetic v1.1 Running
Running scene with SnapRef v1b on Aesthetic v1.1, facing away
Aesthetic v1.1 Cake
Cake scene with SnapRef v1b on Aesthetic v1.1
2.9B (remapped) Running
Running scene with remapped SnapRef v1b on 2.9B
2.9B (remapped) Cake
Cake scene with remapped SnapRef v1b on 2.9B
2.9B (unmapped) Running
Running scene with unmapped SnapRef v1b on 2.9B, scene unreflected, remaining in standing pose
2.9B (unmapped) Cake
Cake scene with unmapped SnapRef v1b on 2.9B, scene unreflected, remaining in standing pose

For the cake scene, all three functional conditions produced the cowlick, side ponytail on the right, white shirt, and red tie faithful to the reference.
The slight orange tint in the hair observed with Role-Ref-KV in the previous cake test did not appear here.

2.9B failed to function without remapping.
Rather than collapsing into a grid pattern like v2 did, the figure remained sharp in the original standing pose while the prompt’s scene was scarcely reflected.

In the running scene, Base and Aesthetic faced backward.
Since the prompt lacked directional constraints, this was not inherently incorrect, but since v2 and Role-Ref-KV previously faced forward with the same seed, I investigated the orientation further in a later section.

Prompts

Running Scene:

masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, full body, running, wind, hair blowing, dynamic pose, fantasy landscape, castle in background, sunset sky, dramatic clouds, grass field

Cake Scene:

masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, upper body, sitting, eating, cake, cafe, indoors

Negative:

worst quality, low quality, score_1, score_2, score_3, blurry, jpeg artifacts, chromatic aberration, bad anatomy, bad hands, extra arms, extra fingers, missing fingers, text, watermark, signature, artist name, multiple views, split screen, comic, 2koma, 4koma

Results on Turbo Models

ConditionTime (Running / Cake)RunningCake
Turbo v1.164.3 s / 62.4 sRunning facing forward, right hand to head. Matches referenceRed sofa by window. Arm covers most of tie
Turbo v1.064.3 s / 61.3 sRunning facing forward, arms wide. Matches referenceHand to cheek. Most of tie hidden
Base + Turbo LoRA63.3 s / 62.3 sRunning facing forward, clenching right hand. Matches referenceComposition close to Turbo v1.1
2.9B unofficial Turbo88.4 s / 87.4 sNearly identical composition to Turbo v1.1Nearly identical composition to Turbo v1.1
Turbo v1.1 Running
Running scene with SnapRef v1b on Turbo v1.1
Turbo v1.1 Cake
Cake scene with SnapRef v1b on Turbo v1.1
Turbo v1.0 Running
Running scene with SnapRef v1b on Turbo v1.0
Turbo v1.0 Cake
Cake scene with SnapRef v1b on Turbo v1.0
Base + Turbo LoRA Running
Running scene with SnapRef v1b on Base + Turbo LoRA
Base + Turbo LoRA Cake
Cake scene with SnapRef v1b on Base + Turbo LoRA
2.9B unofficial Turbo Running
Running scene with SnapRef v1b on 2.9B unofficial Turbo
2.9B unofficial Turbo Cake
Cake scene with SnapRef v1b on 2.9B unofficial Turbo

All four Turbo conditions faced forward in the running scene, avoiding the backward orientation seen on Base.
While the README targets Anima base v1.0, SnapRef operated seamlessly across full Turbo models, Turbo LoRA, and remapped 2.9B alike.
The red tie being occluded by an arm in the cake scene was an artifact of composition and remained visible under settings explored in the next section.

Testing 4-Panel Collapse with ref_guidance 4.5

In earlier testing, the pilot adapter split into 4-panel comic layouts when run at cfg 1.0 and ref_guidance 4.5 on Turbo.
Ref Adapter v2 avoided 4-panel splits but suffered desaturated colors.
Since SnapRef provides ref_guidance_on, I generated the cake scene under identical settings.

ConditionTimeResult
Turbo v1.198.5 sSingle image. Tie visible. Colors not muted
Turbo v1.096.5 sSingle image. Tie visible. Colors not muted
Base + Turbo LoRA96.5 sSingle image. Shirt chest slightly blown out
2.9B unofficial Turbo138.8 sSingle image. Shirt chest slightly blown out
Turbo v1.1
Cake scene on Turbo v1.1 with SnapRef v1b at cfg 1.0 and ref_guidance 4.5
Turbo v1.0
Cake scene on Turbo v1.0 with SnapRef v1b at cfg 1.0 and ref_guidance 4.5
Base + Turbo LoRA
Cake scene on Base + Turbo LoRA with SnapRef v1b at cfg 1.0 and ref_guidance 4.5
2.9B unofficial Turbo
Cake scene on 2.9B unofficial Turbo with SnapRef v1b at cfg 1.0 and ref_guidance 4.5

None of the four conditions split into multiple panels.
Evaluating the model twice per step increased runtime by roughly 1.5x, though with a single seed it is difficult to separate deliberate effect from random variance.

I also tested ref_guidance_on on Base.
The README notes that values of 6–8 increase reference adherence, taking ~1.4x runtime, and that ref_end 0.6 provides faster execution with nearly identical visual results.

ConditionTimeResult
Off (Default)316.1 sTie visible. Light brown hair
ref_guidance 4.5480.8 sComposition shifts slightly. Colors not muted
ref_guidance 7480.7 sColors not muted. Tie visible
ref_guidance 7, ref_end 0.6432.2 sNearly identical image to ref_guidance 7
Turbo v1.1, ref_guidance 2 (Reference)96.0 sSingle image. Tie visible
ref_guidance 4.5
Cake scene on Base with SnapRef v1b ref_guidance 4.5
ref_guidance 7
Cake scene on Base with SnapRef v1b ref_guidance 7
ref_guidance 7, ref_end 0.6
Cake scene on Base with SnapRef v1b ref_guidance 7 and ref_end 0.6
Turbo v1.1, ref_guidance 2
Cake scene on Turbo v1.1 with SnapRef v1b ref_guidance 2

Measured times on M1 Max were roughly 1.5x of baseline with guidance disabled, and just under 1.4x even with ref_end 0.6.
The claim that ref_end 0.6 yields nearly identical images held true in practice.

Testing Lying and Overhead Compositions

ConditionTimeResult
Turbo v1.160.5 sLying on back in grassy field with white flowers, knees raised. Head at top of frame. Loafers visible
Base316.0 sLying on back in grassy field with yellow and white flowers, knees raised. Head at top of frame. Loafers visible
Turbo v1.1
Overhead view of lying on grass generated on Turbo v1.1 using SnapRef v1b
Base
Overhead view of lying on grass generated on Base using SnapRef v1b

From a single frontal standing reference, the character features were preserved cleanly across both supine and overhead perspective shifts.

Prompt
masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, full body, lying on back, on grass, from above, looking at viewer, flowers, daytime

Evaluating Seed Variation in the Running Scene

Adding seeds 20261028 and 20261029, I tested across the 4 Turbo setups alongside Base and remapped 2.9B.

Conditions20261027s20261028s20261029
Turbo v1.1ForwardForwardForward
Turbo v1.0ForwardForwardForward
Base + Turbo LoRAForwardForwardForward
2.9B unofficial TurboForwardForwardForward
BaseFacing awayFacing away, smaller figureFacing away
2.9B (remapped)ForwardFacing away, smaller figureForward
Turbo v1.1 s20261027
Running scene with SnapRef v1b on Turbo v1.1, seed 20261027
Turbo v1.1 s20261028
Running scene with SnapRef v1b on Turbo v1.1, seed 20261028
Turbo v1.1 s20261029
Running scene with SnapRef v1b on Turbo v1.1, seed 20261029
Turbo v1.0 s20261027
Running scene with SnapRef v1b on Turbo v1.0, seed 20261027
Turbo v1.0 s20261028
Running scene with SnapRef v1b on Turbo v1.0, seed 20261028
Turbo v1.0 s20261029
Running scene with SnapRef v1b on Turbo v1.0, seed 20261029
Base + Turbo LoRA s20261027
Running scene with SnapRef v1b on Base + Turbo LoRA, seed 20261027
Base + Turbo LoRA s20261028
Running scene with SnapRef v1b on Base + Turbo LoRA, seed 20261028
Base + Turbo LoRA s20261029
Running scene with SnapRef v1b on Base + Turbo LoRA, seed 20261029
2.9B unofficial Turbo s20261027
Running scene with SnapRef v1b on 2.9B unofficial Turbo, seed 20261027
2.9B unofficial Turbo s20261028
Running scene with SnapRef v1b on 2.9B unofficial Turbo, seed 20261028
2.9B unofficial Turbo s20261029
Running scene with SnapRef v1b on 2.9B unofficial Turbo, seed 20261029
Base s20261027
Running scene with SnapRef v1b on Base, seed 20261027
Base s20261028
Running scene with SnapRef v1b on Base, seed 20261028
Base s20261029
Running scene with SnapRef v1b on Base, seed 20261029
2.9B remapped s20261027
Running scene with remapped SnapRef v1b on 2.9B, seed 20261027
2.9B remapped s20261028
Running scene with remapped SnapRef v1b on 2.9B, seed 20261028
2.9B remapped s20261029
Running scene with remapped SnapRef v1b on 2.9B, seed 20261029

Across all 18 generations, visible hairstyle and clothing traits strictly followed the reference.
In the 14 forward-facing images, the side ponytail, white shirt, red tie, and black tights were consistently rendered. The 4 backward-facing outputs also retained the scrunchie, ponytail, and tights.
Unlike Role-Ref-KV previously, there were no seeds where the ponytail or tie disappeared.
Conversely, Base faced away across all 3 seeds, whereas v2 and Role-Ref-KV had both faced forward under these exact seeds.

Isolating Why Base Runs Facing Away

To determine whether facing away was an idiosyncrasy of v1b or Base itself, additional seeds and conditions were tested.

Conditions20261027s20261028s20261029s20261030s20261031
v1bFacing awayFacing awayFacing awayFacing awayFacing away
v1aForwardFacing awayForwardForward—
v1b FP8Facing away————
Without reference———Facing awayFacing away
Ref Adapter v2ForwardForwardForwardForward—
Role-Ref-KVForwardForwardForwardForward—
No Reference s20261030
Base without reference in running scene, facing away
v1b s20261030
SnapRef v1b on Base in running scene, facing away
v1a s20261030
SnapRef v1a on Base in running scene, facing forward
Ref Adapter v2 s20261030
Ref Adapter v2 on Base in running scene, facing forward
Role-Ref-KV s20261030
Role-Ref-KV on Base in running scene, facing forward
No Reference s20261031
Base without reference in running scene, facing away

Base without any reference faced backward on both seeds, indicating that facing backward under this prompt is an inherent bias of Base itself.
Unlike v2 or Role-Ref-KV, which are strongly pulled toward the frontal composition of the reference illustration, v1b did not overwrite the model’s compositional bias.
This aligns with the README’s description that SnapRef “extracts appearance rather than copying composition,” though the sample size remains limited.

Increasing reference strength did not alter orientation, whereas adding looking at viewer to the prompt immediately restored a frontal view.

Condition (s20261027)TimeResult
strength 1293.9 sFacing away
ref_guidance 7481.6 sFacing away
looking at viewer added316.0 sForward
strength 1
Remaining facing away even with strength 1
ref_guidance 7
Remaining facing away even with ref_guidance 7
looking at viewer added
Faces forward when looking at viewer is added

Comparing v1a, v1b, and FP8

Conditionv1bv1av1b FP8
Turbo v1.1 Running s20261027Matches referenceMatches referenceNearly identical to v1b
Turbo v1.1 Running s20261028Matches referenceShort sleeves, black tights become thigh-highs—
Turbo v1.1 Running s20261029Matches referenceOne leg appears with knee-high sock—
Turbo v1.1 CakeTie hidden by armTie visible. Chest pocket addedNearly identical to v1b
Base Running s20261027Facing awayForward, matches referenceFacing away, nearly identical to v1b
Base CakeMatches referenceMatches reference. Two cups appearNearly identical to v1b
v1b Turbo v1.1 Running
SnapRef v1b on Turbo v1.1 running
v1a Turbo v1.1 Running
SnapRef v1a on Turbo v1.1 running
v1b FP8 Turbo v1.1 Running
SnapRef v1b FP8 on Turbo v1.1 running
v1b s20261028
SnapRef v1b on Turbo v1.1 running, seed 20261028
v1a s20261028
SnapRef v1a on Turbo v1.1 running, seed 20261028, short sleeves and thigh-highs
v1a s20261029
SnapRef v1a on Turbo v1.1 running, seed 20261029
v1b Turbo v1.1 Cake
SnapRef v1b on Turbo v1.1 cake scene
v1a Turbo v1.1 Cake
SnapRef v1a on Turbo v1.1 cake scene
v1b FP8 Turbo v1.1 Cake
SnapRef v1b FP8 on Turbo v1.1 cake scene
v1b Base Running
SnapRef v1b on Base running
v1a Base Running
SnapRef v1a on Base running
v1b FP8 Base Running
SnapRef v1b FP8 on Base running

Across the 3 seeds of the Turbo v1.1 running scene, v1a exhibited clothing drift twice, compared to 0 for v1b.
While README reported similar ground truth similarity metrics, in this reference and seed set, v1b retained clothing details more faithfully.

FP8 halved file size and produced “virtually identical images” as claimed in the README.
Pixel-level absolute difference against bf16 averaged 1.8–3.0 on a 0–255 scale.
The composition remained unchanged, differing only subtly in fine detail.
Generation speed was 56.5–58.6 s (Turbo) and around 312 s (Base), practically identical to bf16.
Since ComfyUI was launched with --bf16-unet, the exact precision used internally during FP8 computation was not examined.

Effects of the strength Parameter

strength in the Advanced node operates on a logarithmic scale, altering key weights from the reference.
The tooltip indicates that +1 multiplies influence by ~2.7x, while -1 divides by ~2.7x.
The README suggests values between 1 and 2 when seeking to enhance fine details (accessories, sleeves, decorations).

strengthTurbo v1.1 RunningTurbo v1.1 CakeBase Cake
-1Smiling, high stride. Tie and tights preservedHand to cheek. Scrunchie becomes darkerHair shifts toward orange
0 (Default)Hand to head. Large running motionFork to mouth. Tie obscured by armLight brown hair
1Arms lowered, stiffer expression. Smaller motionTie starts to become visibleSaturation slightly reduced
2Closer to standing pose than 1Straight posture facing front. Full tie visibleSaturation drops, grayish tone. Cowlick clipped at top. Buildings in background
Turbo Running -1
strength -1 on Turbo v1.1 running scene
Turbo Running 0
strength 0 on Turbo v1.1 running scene
Turbo Running 1
strength 1 on Turbo v1.1 running scene
Turbo Running 2
strength 2 on Turbo v1.1 running scene
Turbo Cake -1
strength -1 on Turbo v1.1 cake scene
Turbo Cake 0
strength 0 on Turbo v1.1 cake scene
Turbo Cake 1
strength 1 on Turbo v1.1 cake scene
Turbo Cake 2
strength 2 on Turbo v1.1 cake scene
Base Cake -1
strength -1 on Base cake scene
Base Cake 0
strength 0 on Base cake scene
Base Cake 1
strength 1 on Base cake scene
Base Cake 2
strength 2 on Base cake scene

As strength increased, the pose converged toward the standing reference, dampening running dynamics and expressive variety.
At 2 on Base, colors became washed out.
Because Kana-chan’s illustration lacks intricate adornments, whether fine details actually increase could not be established with this reference.

Adjusting strength did not increase runtime.
Turbo v1.1 cake took 56.5 s, running took 45.4–45.5 s, and Base cake took 301.8–302.0 s, showing no penalty compared to 0.
Although the README states that “strength and weighting no longer slow things down,” the tooltip still bears an outdated “~1.3x slower” note.
Even though MPS falls back to a masked path without fast fused kernels, execution speed was unaffected.

Note that the simpler SnapRef node uses a different scale for strength: 1 corresponds to training default, 0 is off, and 2 is 2x, without logarithmic scaling.
A value of 1.0 in SnapRef produced an identical image to 0 in Advanced.
The README’s recommendation to “try 1 to 2” applies to the Advanced node; a setting of 2 in simple SnapRef corresponds to roughly 0.7 in Advanced.

fidelity Behaves as a Binary Toggle on Mac

fidelity lowers reference adherence in favor of prompt compliance. Inspecting the node’s code reveals distinct execution between CUDA and non-CUDA environments.
On CUDA, the negative prompt side attends to the reference weighted by 1 - fidelity, relying on optimized kernels.
On non-CUDA systems, any value below 1 acts as a fallback where the negative side fully attends to the reference.

Testing on the Base cake scene confirmed this behavior:

ConditionTimeResult
fidelity 1.0 (Default)316.1 sLight brown hair
fidelity 0.5354.5 sDarker orange hair. Scrunchie becomes purplish
fidelity 0.0346.5 sPixel-for-pixel identical to fidelity 0.5
ref_in_uncond On347.4 sPixel-for-pixel identical to fidelity 0.5
Turbo v1.1, fidelity 0.560.6 sPixel-for-pixel identical to fidelity 1.0
fidelity 1.0
Base cake scene with fidelity 1.0
fidelity 0.5 (0.0 and ref_in_uncond yield identical output)
Base cake scene with fidelity 0.5, hair shifts toward orange

In line with the implementation, setting 0.5 or 0.0 on Mac produced the exact same output as enabling ref_in_uncond, with no intermediate gradients.
Turbo at cfg 1 does not compute the unconditional side, so fidelity settings produced no effect.

Changing Art Style with mode: char

mode: cs extracts both character and art style from the reference by default, while char aims to extract character only.
The README highlights pairing char with artist tags.
Here, I tested general style tags rather than specific artists.

Conditioncschar
Base, no style tagIdentical to defaultHair sheen and lineart shift slightly
Base, watercolor (medium)Barely changesDoes not become watercolor; hair becomes bright orange, window frame yellow
Base, 1990s (style), retro artstyleBarely changesDark brown hair, thicker lines, retro anime aesthetic
Turbo v1.1, watercolor (medium)Barely changesDoes not become watercolor; subtle lighting highlights added
Base watercolor cs
Base cake scene with watercolor under mode cs
Base watercolor char
Base cake scene with watercolor under mode char, hair turns bright orange
Base 1990s cs
Base cake scene with 1990s style under mode cs
Base 1990s char
Base cake scene with 1990s style under mode char, darker hair and thicker lineart

Under cs, adding style tags barely altered the visual output.
Under char, stylistic tags took effect, though watercolor altered character hair color rather than producing a watercolor texture.
The “What’s next” section of the README notes plans to strengthen mode char in v2a.

Generating Two Characters from a Single Stitched Reference

Following the README’s guidance, I stitched two full-body character illustrations side by side into a single reference image, generating at 1216×832.

Reference (1664×1216)
Stitched reference image placing Kana-chan and blonde character side by side
ConditionTimeLeft (Kana-chan)Right (Blonde)
Turbo v1.1 s2026102757.6 sTie turns into ribbon. Skirt becomes plaidMatches reference
Turbo v1.1 s2026102848.5 sTie turns into ribbonMatches reference
Turbo v1.1 s2026102948.5 sTie turns into ribbonMatches reference
Base s20261027314.1 sTie preserved. Skirt becomes plaidGains side ponytail
Base s20261028303.0 sTie turns into ribbonGains side ponytail
Turbo v1.1 s20261027
Result on Turbo v1.1 with two-character reference, seed 20261027
Turbo v1.1 s20261028
Result on Turbo v1.1 with two-character reference, seed 20261028
Turbo v1.1 s20261029
Result on Turbo v1.1 with two-character reference, seed 20261029
Base s20261027
Result on Base with two-character reference, seed 20261027
Base s20261028
Result on Base with two-character reference, seed 20261028

All 5 outputs successfully produced both characters without swapping horizontal placement or hair colors, preserving black tights and white socks.
However, Kana-chan’s necktie turned into a ribbon matching the right character in 4 of 5 outputs.
On Base, the right character also acquired Kana-chan’s side ponytail.
While the README mentions that “attributes not clearly discernible in the reference may bleed between characters,” attribute mixing occurred even for distinct elements like ties and skirts.

Prompt
masterpiece, best quality, score_7, newest, highres, absurdres, safe, 2girls, brown hair girl on the left, blonde girl on the right, standing side by side, full body, looking at viewer, park, day

Adjusting strength on Stitched References Produces Black Images

Attempting to curb attribute bleeding by raising strength to 2 unexpectedly produced completely black images.
Varying the seed, switching to Base, or setting strength to 1 or -1 yielded identical black results.
Conversely, the same reference image generated normally when strength was left at 0.

Isolating the trigger revealed that having two characters was irrelevant; the failure hinged strictly on the reference image resolution.
The node scales reference images to ~1MP or less in multiples of 16.
A 1664×1216 image downscales to 1184×864.
A single Kana-chan illustration padded to that same resolution also failed to render, whereas other aspect ratios succeeded.

Reference SizeOutput SizeToken Count (Ref + Out)Multiple of 16?strength >= 1
832×1216896×11523,952 + 4,032 = 7,984YesNormal
1216×832896×11523,952 + 4,032 = 7,984YesNormal
1024×1024896×11524,096 + 4,032 = 8,128YesNormal
832×640896×11522,080 + 4,032 = 6,112YesNormal
640×832896×11522,080 + 4,032 = 6,112YesNormal
832×12161216×8323,952 + 3,952 = 7,904YesNormal
1184×864896×11523,996 + 4,032 = 8,028NoBlack
864×1184896×11523,996 + 4,032 = 8,028NoBlack
1184×8641216×8323,996 + 3,952 = 7,948NoBlack

Each 16 pixels correspond to 1 token.
The _masked_attention path on MPS pads key counts to multiples of 16, setting the padded mask region to float("-inf").
At strength 0, this masked path is bypassed, preventing black images.
Changing that mask value from -inf to -1e4 and re-running with an 1184×864 reference at strength 2 (seed 20261027) resolved the black image issue.
Although top and bottom white padding bands appeared, the tie, ribbon, plain skirt, and plaid skirt rendered faithfully for both characters.
However, passing identically sized random tensors through PyTorch attention alone did not trigger NaN, so the exact underlying cause of the failure under -inf remains unisolated.
The code modification was reverted after testing.

Node with mask changed to -1e4, strength 2
Result using modified mask value with stitched reference and strength 2, rendering both characters faithfully with horizontal white bands

To avoid this issue without editing node source code, simply resize the reference so that the total token count forms a multiple of 16.
Padding the two-character reference to 1216×832 allowed generation to proceed cleanly at both strength 1 and 2.

ConditionTimeLeft (Kana-chan)Right (Blonde)
strength 056.5 sTie turns into ribbon. Skirt becomes plaidMatches reference
strength 147.5 sTie preservedMatches reference
strength 247.4 sThin tieGains side ponytail. Feet clipped white
strength 2, s2026102844.4 sTie turns into ribbonGains side ponytail
strength 0
Result at strength 0 with reference adjusted to 1216×832
strength 1
Result at strength 1 with reference adjusted to 1216×832, preserving tie
strength 2
Result at strength 2 with reference adjusted to 1216×832, feet clipped white
strength 2, s20261028
Result at strength 2, seed 20261028, with reference adjusted to 1216×832

Preserving the tie succeeded in only one image at strength 1 and reverted at strength 2, indicating that adjusting strength is not a reliable safeguard against attribute bleeding.
The black image mention in the README refers to an fp16-related bug, which is distinct from this phenomenon.
Since CUDA takes an alternate fused execution path, this black image appears specific to environments like MPS where fused attention kernels are unavailable.
Adjusting strength away from 1 in the simple SnapRef node or modifying multi-reference weight routes through the same code path and may trigger identical failures depending on reference dimensions.

Using Multiple References for the Same Character

A node update on November 1 introduced support for up to 3 references for a single character.
The README highlights pairing a bust-up reference with a full-body reference.
I tested this using Kana-chan’s bust-up portrait alongside her full-body standing illustration.
The bust-up portrait features a blazer and ribbon, contrasting with the full-body’s white shirt and tie, making it straightforward to identify which reference influenced the output.

Bust-up Reference
Bust-up reference of Kana-chan with blazer and ribbon
Full-body Reference
Full-body reference of Kana-chan with white shirt and tie
Condition (Turbo v1.1)RunningTimeCakeTime
Bust-up onlyBlazer and ribbon. Plaid skirt with bare legs and single sock, unreferenced53.5 sBlazer and ribbon53.6 s
Bust + Full (separate)Blazer and ribbon. Plain skirt, black tights, loafers69.7 sBlazer and ribbon69.7 s
Bust + Full (stitch)Blazer and ribbon. Plain skirt, black tights, loafers57.5 sBlazer and ribbon57.6 s
Bust weight 0.4White shirt and tie64.7 s——
Full-body weight 0.4——Blazer and ribbon63.7 s
Full-body first, Bust second——Blazer and ribbon69.6 s
Bust-up only
Running scene with bust-up reference only, unreferenced lower body clothing
separate
Running scene combining bust-up and full-body references with separate mode
stitch
Running scene combining bust-up and full-body references with stitch mode
Bust weight 0.4
Running scene with bust-up weight at 0.4, yielding white shirt and tie
Bust-up only Cake
Cake scene with bust-up reference only
separate Cake
Cake scene combining bust-up and full-body references with separate mode
Full-body weight 0.4 Cake
Cake scene with full-body weight at 0.4
Full-body 1st Cake
Cake scene placing full-body reference first, retaining blazer

Adding the full-body reference successfully completed the lower-body attire (plain skirt, black tights, loafers), which had hallucinated unreferenced clothes when using the bust-up image alone.
The approach advocated by the README functioned as advertised.
All configurations generated a single character without duplicating into two figures.

When combining two references with conflicting outfits, the blazer from the bust-up image took precedence across both scenes when weights were equal.
Reversing the slot order yielded identical dominance, requiring the bust-up image weight to be reduced to 0.4 before the full-body shirt and tie emerged.
Images occupying a larger relative proportion of the character’s facial area may exert stronger attention pull.
On Base, separate mode required 350.4 s, roughly 40 seconds longer than a single reference.

Combining with 3D Poses

In previous work, pairing Ref Adapter with LLLite required routing through CharRef-LLLite.
Because SnapRef maintains separate reference key/value caches without interleaving reference tokens into the generation-side sequence, stock nodes seemed likely to work.
I compared ComfyUI’s standard AnimaLLLiteApply against CharRef-LLLite’s ExperimentalAnimaLLLiteRefApply.
Pose input used the same 3dpose_example.png at 768×1152 with an LLLite strength of 1.0.

Conditions20261027s20261028s20261029
Stock LLLite + SnapRefSeated with one knee raised, hands on floor. BarefootSeated on white bench. Loafers visibleSeated on wooden bench. Loafers visible
CharRef-LLLite + SnapRefPixel-for-pixel identical to stockPixel-for-pixel identical to stockPixel-for-pixel identical to stock
Pose Input
Sample 3D pose image by toyxyz
SnapRef Reference Only
Result with SnapRef reference only, sitting with knees raised
Stock LLLite s20261027
Result using stock LLLite and SnapRef, seed 20261027, barefoot
Stock LLLite s20261028
Result using stock LLLite and SnapRef, seed 20261028
Stock LLLite s20261029
Result using stock LLLite and SnapRef, seed 20261029
Stock LLLite Base
Result using stock LLLite and SnapRef on Base

Stock nodes reproduced the target pose accurately, matching CharRef-LLLite pixel-for-pixel across all 3 seeds.
SnapRef eliminates the need for specialized adapter bridge nodes.
Generation time on Turbo was 45.3–45.4 s, noticeably faster than the 86.4 s required previously with v2.
Base (30 steps, cfg 4.5) also adhered strictly to the pose in 272.5 s, rendering loafers cleanly.
The missing shoes occurred only on Turbo seed 20261027, which had similarly lost shoes in the previous v2 evaluation.

Prompt
masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, full body, sitting, looking at viewer, simple background

Testing Known Limitations from the README

The README highlights two specific limitations: scene prompts overriding attire (such as beach forcing swimwear) and outdoor full-body shots rendering white floors underfoot, which supposedly resolves by explicitly prompting ground textures.

ConditionTimeResult
beach Base313.1 sSwimwear did not appear. Shirt changed to short sleeves. Sand is flat and white
beach Base, strength 2293.8 sRestores long sleeves. Colors washed out
beach Turbo v1.160.6 sSwimwear did not appear. Remains long-sleeved. Detailed beach background
beach Turbo v1.1, strength 248.5 sSwimwear did not appear. Remains long-sleeved
outdoors Base314.1 sCoastal backdrop. Bright, flat ground underfoot
outdoors, grass Base305.0 sRound patch of grass underfoot against a white background
beach Base
Base output with beach prompt, short sleeves instead of swimwear
beach Base strength 2
Base strength 2 output with beach prompt, long sleeves with pale colors
beach Turbo v1.1
Turbo v1.1 output with beach prompt
beach Turbo v1.1 strength 2
Turbo v1.1 strength 2 output with beach prompt
outdoors Base
Base output with outdoors prompt
outdoors, grass Base
Base output with outdoors and grass prompt, isolated patch of grass underfoot

Across 4 generations with a single seed, swimwear never appeared.
The shift from long to short sleeves on Base represented the extent of clothing override.
Adding grass created an isolated circular patch of lawn beneath the character rather than rendering an integrated terrain.
The README’s claim that prompting ground textures resolves floor artifacts did not hold true in this instance.

Evaluating simplification of minor details or brightening on dark-skinned references was omitted due to the lack of suitable reference assets.

Prompts

beach Scene:

masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, full body, standing, beach, ocean, day

outdoors Scene:

masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, full body, standing, looking at viewer, outdoors, day

Generation Speed Benchmarks

Measured generation times for 896×1152 images on M1 Max 64GB.
Tests were run consecutively on the same day in the running scene across rotating seeds.

ConditionTurbo v1.1 (8 steps, cfg 1)Base (30 steps, cfg 4.5)
Without reference38.4–42.4 s259.5–263.6 s
SnapRef v1b51.5–56.5 s307.9–312.1 s
SnapRef v1a50.5–55.6 s298.0 s
Ref Adapter v256.6–57.5 s (ref_guidance 1.0)475.4 s (ref_guidance 4.5)
Role-Ref-KV91.9–92.0 s (8 steps)297.9 s (28 steps)

Additional benchmark figures:

ConditionTime
SnapRef v1b, Base / Aesthetic (all seeds)293.9–316.1 s
SnapRef v1b, 2.9B (remapped)438.2–445.6 s
SnapRef v1b, Turbo setups (3 conditions)49.4–64.3 s
SnapRef v1b, 2.9B unofficial Turbo82.6–88.7 s
Turbo setups (3 conditions), ref_guidance 4.596.5–98.5 s
2.9B unofficial Turbo, ref_guidance 4.5138.8 s

The reference overhead on Base was approximately 50 seconds, or ~1.2x of the unguided baseline.
This aligns closely with the ~1.3x overhead reported on A100 in the README (9.9 s vs. 7.7 s).
On Base, v1b required roughly two-thirds the time of v2, matching the ratio in the README (9.9 s vs. 14.4 s).

Because Role-Ref-KV operates at a recommended 28 steps, its total runtime was comparable to v1b.
Per-step execution averaged ~10.3 s for v1b and ~10.6 s for Role-Ref-KV, showing negligible difference.
While README benchmarks on A100 showed v1b at 9.9 s versus Role-Ref-KV at 12.5 s, that margin did not materialize on Mac.
On Turbo, however, because Role-Ref-KV evaluates twice per step even at cfg 1, v1b was roughly 1.7x faster.
Performance relative to v2 was virtually identical.

The difference between v1a and v1b on Turbo was around 1 second, within the margin of seed variation.
On Base, v1a clocked in at 298.0–308.3 s, running only ~1–5% faster than v1b.

Unexamined Scenarios

  • The fp16 black image issue marked as resolved in the README (launching with --bf16-unet bypasses reproduction conditions)
  • Combinations with Anzhc/sorryhyun Mod Guidance or Spectrum
  • FP8 quantized Anima base
  • Adjusting ref_caption, use_batch, correction’s rescale, or ref_megapixels
  • General CUDA-specific behavior (including intermediate fidelity steps and black image constraints)
  • Photorealistic, dark-skinned, or heavily accessorized reference images
  • Peak VRAM footprint comparisons

Seed counts ranged between 1 and 5 per condition, focused on Kana-chan and ref_girl.
Phrases indicating that an issue “did not occur” are bound strictly to this evaluation scope.

Practical Recommendations

Use CaseRecommended Option
Generating under recommended Base settingsSnapRef v1b. Faster than v2, retaining hairstyle and clothing across 3 seeds. Directional prompts should be added explicitly for active scenes
Fast generation on Turbo modelsSnapRef v1b or Ref Adapter v2 (ref_guidance 1.0). Generation speed is virtually identical, running ~1.7x faster than Role-Ref-KV
Reducing disk footprintSnapRef v1b FP8 (460MB). Visual composition is identical to bf16
Deciding between v1a and v1bIn our tests, v1b maintained attire more reliably. Choose v1a if smaller file size is prioritized
Pairing with 3D posesSnapRef + standard LLLite nodes. No specialized bridge nodes required
Combining bust-up and full-body referencesSnapRef image_2. Lower-body attire accurately follows reference
Two charactersFeasible with SnapRef v1b, though neckwear and hairstyles may bleed. Ensure reference resolutions avoid black image token bounds on Mac when adjusting strength or weight
2.9B modelsSnapRef functions with simple key remapping. Zero-padding is unnecessary