Tech14 min read

Testing Anima Ref Adapter on Turbo, Aesthetic, and 2.9B

IkesanContents

A reference adapter for Anima showed up on GitHub that takes a single reference image, borrows hair, eyes, and clothing from it, and lets text prompts drive the pose, background, and overall scene.
The repository is ComfyUI-Anima-Ref-Adapter.

Anima is an anime-focused image generation model family, consisting of official models like Base (the foundation model), Turbo (distilled few-step version), Aesthetic (tuned for styling), and architecture experiments like Anima-2.9B.
Changing scene compositions in Anima has been tricky.
In an earlier article on running WAI-Anima v1 via the ComfyUI API on an RTX 4060 Laptop, running an existing full-body standing shot through i2i with a running prompt kept the character standing stiffly. Switching poses while maintaining identity required dedicated ControlNet setups or custom character LoRAs.
If a single reference image can preserve character features while altering scene composition, we can place characters into new scenes without training dedicated LoRAs.

The README recommends using Anima base v1.0 without Turbo LoRA, noting that the adapter was trained exclusively on Base.
However, I have other checkpoints on hand, including official Turbo v1.1, Aesthetic v1.1, and the 40-block Anima-2.9B.
Does it really fail on anything other than Base?
Using ComfyUI on an M1 Max 64GB Mac, I started by verifying the official configuration, then tested other models.

Anima Ref Adapter Overview

ItemDetails
AuthorElectronGirl
ReleaseOctober 27, 2026 (Initial GitHub commit and Hugging Face weights)
ComponentsThree ComfyUI custom nodes and a rank-32 LoRA (45.9M parameters, 91,853,888 bytes)
Training300 characters, 2,000 steps pilot release. Trained on Anima Base v1.0
LicenseNodes: Apache-2.0, Weights: CircleStone Non-Commercial License
SourceGitHub, Hugging Face

The mechanism is described in the README and the technical report.
The reference image is converted into a latent representation via VAE and fed into the model as an extra frame alongside the generation target.
This frame is passed clean without adding noise (timestep 0).
The positional embeddings (RoPE) are shifted vertically by the height of one output frame.
Without this offset, the reference pixels and output pixels would share the same spatial positions, causing the output to copy the reference pose directly.
The LoRA learns to attend to this reference frame, activating only when reference inputs are connected.

The custom nodes provided:

NodeFunction
Anima Ref Adapter LoaderApplies the adapter LoRA onto the Anima base model
Anima Ref LatentLetterboxes the reference image to the target resolution and encodes it via VAE
Anima Ref GuiderApplies text guidance cfg and reference guidance ref_guidance independently before sampling

README recommended settings:

ParameterRecommendedNotes from README
Base ModelAnima base v1.0No Turbo LoRA. The adapter was trained on Base
Compute Precisionbf16 (ModelComputeDtype)Anima overflows in fp16
Sampler / SchedulerEuler, 28–30 steps, simple
cfg4.5Prompt guidance scale
ref_guidance4.5–61 is light but weak. Higher values strengthen details and saturation
correctionapgOr rescale (phi 0.5)
PromptQuality tags + gender + solo + scene tagsDo not include character names, artist tags, or appearance details

A key characteristic is omitting character physical descriptions from the prompt, as features like hair and clothing are extracted directly from the reference image.

Test Environment

ItemSpecification
MachineMacBook Pro M1 Max 64GB (MPS)
UIComfyUI v0.33.3
AdapterNode commit af9a438 (Oct 27, 2026), weights anima_ref_adapter_pilot_r32.safetensors
Resolution896×1152 (official workflow default)
Sampler / Schedulereuler / simple
Seed20261027 (added 20261028 and 20261029 for seed sweeps)
Guidance CorrectionAPG (Adaptive Projected Guidance)
Reference ImagesAuthor’s sample ref_girl.jpg, Kana standing portrait (generated with Base + Kana/Kei LoRA in the Turbo v1.1 vs Aesthetic v1.1 article)

Tested under eight model conditions:

LabelModelSteps / cfgAdapter
Baseanima-base-v1.030 / 4.5Stock
Aesthetic v1.1anima-aesthetic-v1.130 / 4.5Stock
2.9B (remapped)Anima-2.9B-preview-v130 / 4.5Remapped for 40 blocks
2.9B (stock)Anima-2.9B-preview-v130 / 4.5Stock
Turbo v1.1anima-turbo-v1.18 / 1.0Stock
Turbo v1.0anima-turbo-v1.08 / 1.0Stock
Base + Turbo LoRAanima-base-v1.0 + anima-turbo-lora-v0.1 (1.0)8 / 1.0Stock (Turbo LoRA loaded before adapter)
2.9B Unofficial Turboanima29b-p1-turbo1.1 (Langzaigg)8 / 1.0Remapped for 40 blocks

Anima-2.9B inserts 12 blocks between the original 28 blocks to form a 40-block architecture.
Because the adapter LoRA keys target blocks.0 through blocks.27, loading it directly into 2.9B shifts the weights onto the first 28 blocks rather than matching their proper architectural positions.
While no errors are thrown, it breaks visual coherence. Using the remapping script from my previous Anima-2.9B LoRA compatibility test, I created a modified LoRA that skips the insertion indices [2, 5, 8, 11, 14, 17, 21, 24, 27, 30, 33, 36].
2.9B Unofficial Turbo is a community merge combining Turbo v1.1 and 2.9B (0.8×Turbo v1.1 + 0.2×2.9B for shared blocks, retaining the 12 expanded blocks), keeping the 40-block structure.
When stacking two LoRA loaders, the character LoRA was placed first and the Ref Adapter second, applying the reference adapter over the character features.
While the author suggests euler + sgm_uniform, all conditions were standardized to euler / simple for consistency.

I first tested Base using the author’s sample reference image and prompt.
PAG (Perturbed-Attention Guidance) and helper LoRAs present in the sample were omitted to observe baseline performance.

The first run stopped at the sampler:

Cannot convert a MPS Tensor to float64 dtype as the MPS framework doesn't support float64.

The APG implementation used .double() conversions, which Apple Silicon MPS cannot process.
This does not affect CUDA environments, but on macOS, two lines in the custom node had to be changed to single precision:

update = (guided - pos).float()  # originally .double()
unit = F.normalize(pos.float().flatten(1), dim=1).view_as(pos)  # originally pos.double()

The second run completed in 785.8 seconds.

Base, Author Sample Reference + Cake Scene
Base generated with author sample reference and cake eating prompt in a cafe

Blonde hair, red front mesh, pink eyes, and white blouse with dark sleeves and ribbons all carried over from the reference.
The composition with the fork and cake matched the author’s sample girl_cake.jpg.

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

Negative (shared across all runs):

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

Testing Base, Aesthetic v1.1, and 2.9B

Switching to Kana’s standing portrait, I ran two scenes at 30 steps, cfg 4.5, and ref_guidance 4.5.
The running prompt reused scene descriptions from earlier model comparisons.

ConditionRunning SceneCake Scene
BaseRunning toward a castle from behind. Ahoge, blue scrunchie, white shirt, gray skirt, dark tightsSeated on red sofa with cake. Matches reference hair and outfit
Aesthetic v1.1Similar rear-view composition to BaseMatches reference and prompt
2.9B (remapped)Running full-body facing front. Side ponytail, red tie, tights, slight white outlineMatches reference and prompt
2.9B (stock)Dark brown frame with a silhouetteDark frame with an unrelated black-haired bob character
Base Running
Base running scene with Kana reference, seen from behind
Base Cake
Base cake scene with Kana reference
Aesthetic v1.1 Running
Aesthetic v1.1 running scene with Kana reference
Aesthetic v1.1 Cake
Aesthetic v1.1 cake scene with Kana reference
2.9B (remapped) Running
2.9B with remapped adapter running scene
2.9B (remapped) Cake
2.9B with remapped adapter cake scene
2.9B (stock) Running
2.9B with stock adapter running scene, heavily corrupted
2.9B (stock) Cake
2.9B with stock adapter cake scene, incorrect character

Even though the reference was a static frontal standing pose, the generated outputs followed the prompts for both the running and cake scenes.
Aesthetic v1.1 is fine-tuned from Base, and the adapter transferred seamlessly.
Anima-2.9B functioned properly when remapped, but failed when loaded raw.
Generating the running prompt twice on 2.9B without reference produced identical outputs across seeds, confirming the difference between remapped and stock adapter runs came entirely from block placement.

Without a reference, all models generated a generic character across the meadow.

Base Without Reference Running
Base running scene without reference image, showing a generic character
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

Next, I tested four Turbo variants using standard Turbo sampling (8 steps, cfg 1.0) while keeping the README recommendation of ref_guidance 4.5.

ConditionCake Scene Output
Turbo v1.12x2 grid repeating the standing portrait. Shirt turned light blue, tie turned black
Turbo v1.0Broken generation. Orange artifacts, fragmented profiles, comic borders and text
Base + Turbo LoRA2x2 grid, holding a cup
2.9B Unofficial Turbo2x2 grid
Turbo v1.1
Turbo v1.1 at cfg 1.0 and ref_guidance 4.5 cake scene, 2x2 grid
Turbo v1.0
Turbo v1.0 at cfg 1.0 and ref_guidance 4.5 cake scene, collapsed
Base + Turbo LoRA
Base plus Turbo LoRA at cfg 1.0 and ref_guidance 4.5 cake scene, 2x2 grid
2.9B Unofficial Turbo
2.9B Unofficial Turbo at cfg 1.0 and ref_guidance 4.5 cake scene, 2x2 grid

The same issue appeared on the running scene and with the author’s reference image: prompt instructions were largely ignored.
While character details like ahoge, scrunchie, and tie persisted, the output copied the standing pose directly into split panels.
The RoPE offset intended to prevent copying reference layouts broke down, manifesting as 2x2 grid artifacts.
At this stage, it seemed to align with the README claim that Turbo was unsupported.

Swapping Settings to Identify the Cause

To isolate whether the issue stemmed from model weights or guidance configuration, I ran Base with Turbo settings and Turbo v1.1 with Base settings.
All runs used Kana’s reference image on the cake scene.

ConditionTimeResult
Base 8-step cfg 1.0 ref_guidance 4.5212.9sCollapsed. Overexposed 4-panel grid with text
Base 30-step cfg 1.0 ref_guidance 4.5769.4sCollapsed. Split panels with magnified bust and text
Turbo v1.1 8-step cfg 4.5 ref_guidance 4.5214.9sFollows prompt. Blue horizontal band, gray vest
Turbo v1.1 30-step cfg 4.5 ref_guidance 4.5769.2sFollows prompt and reference
Turbo v1.1 8-step cfg 1.0 ref_guidance 1.0174.8sFollows prompt and reference
Turbo v1.1 8-step cfg 2.5 ref_guidance 2.5208.9sFollows prompt and reference
Base 8st cfg 1.0 ref_guidance 4.5
Base at 8 steps, cfg 1.0, ref_guidance 4.5 cake scene, collapsed
Base 30st cfg 1.0 ref_guidance 4.5
Base at 30 steps, cfg 1.0, ref_guidance 4.5 cake scene, collapsed
Turbo v1.1 8st cfg 4.5 ref_guidance 4.5
Turbo v1.1 at 8 steps, cfg 4.5, ref_guidance 4.5 cake scene
Turbo v1.1 30st cfg 4.5 ref_guidance 4.5
Turbo v1.1 at 30 steps, cfg 4.5, ref_guidance 4.5 cake scene
Turbo v1.1 8st cfg 1.0 ref_guidance 1.0
Turbo v1.1 at 8 steps, cfg 1.0, ref_guidance 1.0 cake scene
Turbo v1.1 8st cfg 2.5 ref_guidance 2.5
Turbo v1.1 at 8 steps, cfg 2.5, ref_guidance 2.5 cake scene

Base broke down even at 30 steps when combining cfg 1.0 with ref_guidance 4.5.
Conversely, Turbo v1.1 followed the prompt properly either by raising cfg or by lowering ref_guidance.
The breakdown was not inherent to Turbo weights, but rather caused by the imbalance in guidance parameters.

Looking at the calculation inside the custom node, three passes are evaluated per step: positive prompt with reference (pos), negative prompt with reference (neg), and negative prompt without reference (base):

guided = base + ref_guidance × (neg − base) + cfg × (pos − neg)

Here, neg − base represents the delta introduced by the reference image, while pos − neg reflects the delta driven by the text prompt.
At cfg 4.5 and ref_guidance 4.5, both deltas are scaled equally by 4.5x.
At cfg 1.0 and ref_guidance 4.5, the prompt influence remains at 1x while the reference influence is magnified 4.5x.
This appears to overwhelm the text prompt, pulling the generation toward the reference image’s spatial layout.

When ref_guidance is set to 1.0, pos and neg both contain the reference, allowing the base pass to be omitted and behaving like standard CFG.
This reduces per-step evaluations from three passes to two, speeding up generation.
With cfg 1.0, the formula simplifies to guided = pos, removing negative prompt influence entirely.

Re-evaluating Turbo Models at cfg 1.0 and ref_guidance 1.0

Re-running all four Turbo conditions at 8 steps, cfg 1.0, and ref_guidance 1.0 resolved the issues across the running scene, cake scene, and sample reference image.
However, inspecting the running outputs closely revealed that Kana’s side ponytail (located on the image right in the reference) varied depending on seed and model.
To differentiate random variations from systematic trends, I added two additional seeds for the running scene.
Base and 2.9B (remapped) were evaluated with the same seeds under their recommended settings.

ConditionSeed 20261027Seed 20261028Seed 20261029
Turbo v1.1Scrunchie shifted to left sideSide ponytail on image rightSide ponytail on image right
Turbo v1.0Twin pigtails with two scrunchiesSide ponytail on image rightSide ponytail on image right
Base + Turbo LoRATwin pigtails with two scrunchiesSide ponytail on image rightSide ponytail on image right
2.9B Unofficial TurboSide ponytail on image rightSide ponytail on image rightSide ponytail on image right
Base (Recommended)Rear viewRear view (ponytail hidden)Facing front, ponytail on right
2.9B Remapped (Recommended)Side ponytail on image rightSide ponytail on image rightSide ponytail on image right
Turbo v1.1 s20261027
Turbo v1.1, cfg 1.0, ref_guidance 1.0 running scene, seed 20261027
Turbo v1.1 s20261028
Turbo v1.1, cfg 1.0, ref_guidance 1.0 running scene, seed 20261028
Turbo v1.1 s20261029
Turbo v1.1, cfg 1.0, ref_guidance 1.0 running scene, seed 20261029
Turbo v1.0 s20261027
Turbo v1.0, cfg 1.0, ref_guidance 1.0 running scene, seed 20261027
Turbo v1.0 s20261028
Turbo v1.0, cfg 1.0, ref_guidance 1.0 running scene, seed 20261028
Turbo v1.0 s20261029
Turbo v1.0, cfg 1.0, ref_guidance 1.0 running scene, seed 20261029
Base + Turbo LoRA s20261027
Base plus Turbo LoRA, cfg 1.0, ref_guidance 1.0 running scene, seed 20261027
Base + Turbo LoRA s20261028
Base plus Turbo LoRA, cfg 1.0, ref_guidance 1.0 running scene, seed 20261028
Base + Turbo LoRA s20261029
Base plus Turbo LoRA, cfg 1.0, ref_guidance 1.0 running scene, seed 20261029
2.9B Unofficial Turbo s20261027
2.9B Unofficial Turbo, cfg 1.0, ref_guidance 1.0 running scene, seed 20261027
2.9B Unofficial Turbo s20261028
2.9B Unofficial Turbo, cfg 1.0, ref_guidance 1.0 running scene, seed 20261028
2.9B Unofficial Turbo s20261029
2.9B Unofficial Turbo, cfg 1.0, ref_guidance 1.0 running scene, seed 20261029
Base s20261027
Base recommended settings running scene, seed 20261027
Base s20261028
Base recommended settings running scene, seed 20261028
Base s20261029
Base recommended settings running scene, seed 20261029
2.9B Remapped s20261027
2.9B remapped recommended settings running scene, seed 20261027
2.9B Remapped s20261028
2.9B remapped recommended settings running scene, seed 20261028
2.9B Remapped s20261029
2.9B remapped recommended settings running scene, seed 20261029

Hairstyles deviated only on seed 20261027; on the other two seeds, all four Turbo conditions reproduced the reference side ponytail cleanly.
Across three seeds, failure occurred on only one, showing that Turbo weights do not consistently degrade the hairstyle.
On Base, two out of three seeds faced away from the camera, leaving the ponytail obscured.

Sweeping ref_guidance at cfg 1.0

The documentation notes that increasing ref_guidance brings out finer character details.
Keeping Turbo v1.1 at cfg 1.0, I incremented ref_guidance from 1.0 up to 4.5 on the cake scene.
The 1.0 run is from the parameter test and 4.5 is from the earlier breakdown test.

ref_guidanceTimeResult
1.0174.8sFollows prompt and reference
1.5208.9sFollows prompt. Leaning on hand with cake, two coffees. Scrunchie turned into blue ornament beads
2.0208.9sFollows prompt and reference
3.0208.9s2x2 grid, standing by window. Cake omitted
4.5~209–219s2x2 grid
ref_guidance 1.0
Turbo v1.1 at cfg 1.0 and ref_guidance 1.0 cake scene
ref_guidance 1.5
Turbo v1.1 at cfg 1.0 and ref_guidance 1.5 cake scene
ref_guidance 2.0
Turbo v1.1 at cfg 1.0 and ref_guidance 2.0 cake scene
ref_guidance 3.0
Turbo v1.1 at cfg 1.0 and ref_guidance 3.0 cake scene, 2x2 grid
ref_guidance 4.5
Turbo v1.1 at cfg 1.0 and ref_guidance 4.5 cake scene, 2x2 grid

At cfg 1.0, generations up to 2.0 followed the scene prompt, while 3.0 broke into a 4-panel grid.
Between 1.0 and 2.0, there was no noticeable improvement in fine detail reproduction.

Top-Down Overhead Composition

Both running and cake scenes positioned the character upright or seated vertically.
To test a pose substantially different from the reference standing portrait, I tried an overhead perspective of the character lying on grass.

ConditionTimeResult
Turbo v1.1 (cfg 1.0, ref_guidance 1.0)174.8sLying on back in white flower field from above. Ahoge, side ponytail on right, tie, tights. Shoes cut off at frame bottom
Turbo v1.1 (Without reference)38.2sUnrelated black-haired girl, upside down in white dress
Base (Recommended settings)773.4sLying on yellow flower field, knees bent. Full body down to loafers, matches reference
Turbo v1.1
Turbo v1.1 with Kana reference lying on grass viewed from above
Turbo v1.1 Without Reference
Turbo v1.1 without reference lying down, showing generic character
Base
Base with Kana reference lying down scene

From a single frontal standing reference, the character translated cleanly into a top-down lying position.
In earlier experiments using standard i2i, breaking away from standing poses was difficult.
Because Ref Adapter does not use the reference pixels as an underlying canvas, prompt instructions control the composition directly.

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

Generation Speed Measurements

Generation times for a single 896×1152 image on an M1 Max 64GB Mac.
The reference frame doubles the effective sequence length fed into the model, and when ref_guidance is not 1.0, each step evaluates three forward passes instead of one.

ConditionStepsPasses per StepWith ReferenceWithout Reference
Base303 passes~772s262.7s
Aesthetic v1.1303 passes~771s259.2s
2.9B (remapped / stock)303 passes~1,085–1,095s~370s
Turbo variants, ref_guidance 4.583 passes~209–219s~38–40s
Turbo variants, ref_guidance 1.082 passes174.7–182.8s~38–40s
2.9B Unofficial Turbo, ref_guidance 4.583 passes~293–301s54.3s
2.9B Unofficial Turbo, ref_guidance 1.082 passes245.1–255.1s54.3s

Turbo variants include Turbo v1.1, Turbo v1.0, and Base + Turbo LoRA.
Runs without reference detached the adapter and sampled with the same step and cfg count, which also changes the number of passes per step.
Running Turbo models at ref_guidance 1.0 took roughly 3 minutes, more than four times faster than Base at roughly 13 minutes.