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

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
| Item | Details |
|---|---|
| Author | ElectronGirl |
| Release | October 27, 2026 (Initial GitHub commit and Hugging Face weights) |
| Components | Three ComfyUI custom nodes and a rank-32 LoRA (45.9M parameters, 91,853,888 bytes) |
| Training | 300 characters, 2,000 steps pilot release. Trained on Anima Base v1.0 |
| License | Nodes: Apache-2.0, Weights: CircleStone Non-Commercial License |
| Source | GitHub, 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:
| Node | Function |
|---|---|
| Anima Ref Adapter Loader | Applies the adapter LoRA onto the Anima base model |
| Anima Ref Latent | Letterboxes the reference image to the target resolution and encodes it via VAE |
| Anima Ref Guider | Applies text guidance cfg and reference guidance ref_guidance independently before sampling |
README recommended settings:
| Parameter | Recommended | Notes from README |
|---|---|---|
| Base Model | Anima base v1.0 | No Turbo LoRA. The adapter was trained on Base |
| Compute Precision | bf16 (ModelComputeDtype) | Anima overflows in fp16 |
| Sampler / Scheduler | Euler, 28–30 steps, simple | |
cfg | 4.5 | Prompt guidance scale |
ref_guidance | 4.5–6 | 1 is light but weak. Higher values strengthen details and saturation |
correction | apg | Or rescale (phi 0.5) |
| Prompt | Quality tags + gender + solo + scene tags | Do 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
| Item | Specification |
|---|---|
| Machine | MacBook Pro M1 Max 64GB (MPS) |
| UI | ComfyUI v0.33.3 |
| Adapter | Node commit af9a438 (Oct 27, 2026), weights anima_ref_adapter_pilot_r32.safetensors |
| Resolution | 896×1152 (official workflow default) |
| Sampler / Scheduler | euler / simple |
| Seed | 20261027 (added 20261028 and 20261029 for seed sweeps) |
| Guidance Correction | APG (Adaptive Projected Guidance) |
| Reference Images | Author’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:
| Label | Model | Steps / cfg | Adapter |
|---|---|---|---|
| Base | anima-base-v1.0 | 30 / 4.5 | Stock |
| Aesthetic v1.1 | anima-aesthetic-v1.1 | 30 / 4.5 | Stock |
| 2.9B (remapped) | Anima-2.9B-preview-v1 | 30 / 4.5 | Remapped for 40 blocks |
| 2.9B (stock) | Anima-2.9B-preview-v1 | 30 / 4.5 | Stock |
| Turbo v1.1 | anima-turbo-v1.1 | 8 / 1.0 | Stock |
| Turbo v1.0 | anima-turbo-v1.0 | 8 / 1.0 | Stock |
| Base + Turbo LoRA | anima-base-v1.0 + anima-turbo-lora-v0.1 (1.0) | 8 / 1.0 | Stock (Turbo LoRA loaded before adapter) |
| 2.9B Unofficial Turbo | anima29b-p1-turbo1.1 (Langzaigg) | 8 / 1.0 | Remapped 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.
Running the Recommended Settings
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.

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.
| Condition | Running Scene | Cake Scene |
|---|---|---|
| Base | Running toward a castle from behind. Ahoge, blue scrunchie, white shirt, gray skirt, dark tights | Seated on red sofa with cake. Matches reference hair and outfit |
| Aesthetic v1.1 | Similar rear-view composition to Base | Matches reference and prompt |
| 2.9B (remapped) | Running full-body facing front. Side ponytail, red tie, tights, slight white outline | Matches reference and prompt |
| 2.9B (stock) | Dark brown frame with a silhouette | Dark frame with an unrelated black-haired bob 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.

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
Recommended Settings on Turbo Models
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.
| Condition | Cake Scene Output |
|---|---|
| Turbo v1.1 | 2x2 grid repeating the standing portrait. Shirt turned light blue, tie turned black |
| Turbo v1.0 | Broken generation. Orange artifacts, fragmented profiles, comic borders and text |
| Base + Turbo LoRA | 2x2 grid, holding a cup |
| 2.9B Unofficial Turbo | 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.
| Condition | Time | Result |
|---|---|---|
| Base 8-step cfg 1.0 ref_guidance 4.5 | 212.9s | Collapsed. Overexposed 4-panel grid with text |
| Base 30-step cfg 1.0 ref_guidance 4.5 | 769.4s | Collapsed. Split panels with magnified bust and text |
| Turbo v1.1 8-step cfg 4.5 ref_guidance 4.5 | 214.9s | Follows prompt. Blue horizontal band, gray vest |
| Turbo v1.1 30-step cfg 4.5 ref_guidance 4.5 | 769.2s | Follows prompt and reference |
| Turbo v1.1 8-step cfg 1.0 ref_guidance 1.0 | 174.8s | Follows prompt and reference |
| Turbo v1.1 8-step cfg 2.5 ref_guidance 2.5 | 208.9s | Follows prompt and reference |






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.
| Condition | Seed 20261027 | Seed 20261028 | Seed 20261029 |
|---|---|---|---|
| Turbo v1.1 | Scrunchie shifted to left side | Side ponytail on image right | Side ponytail on image right |
| Turbo v1.0 | Twin pigtails with two scrunchies | Side ponytail on image right | Side ponytail on image right |
| Base + Turbo LoRA | Twin pigtails with two scrunchies | Side ponytail on image right | Side ponytail on image right |
| 2.9B Unofficial Turbo | Side ponytail on image right | Side ponytail on image right | Side ponytail on image right |
| Base (Recommended) | Rear view | Rear view (ponytail hidden) | Facing front, ponytail on right |
| 2.9B Remapped (Recommended) | Side ponytail on image right | Side ponytail on image right | Side ponytail on image right |


















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_guidance | Time | Result |
|---|---|---|
| 1.0 | 174.8s | Follows prompt and reference |
| 1.5 | 208.9s | Follows prompt. Leaning on hand with cake, two coffees. Scrunchie turned into blue ornament beads |
| 2.0 | 208.9s | Follows prompt and reference |
| 3.0 | 208.9s | 2x2 grid, standing by window. Cake omitted |
| 4.5 | ~209–219s | 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.
| Condition | Time | Result |
|---|---|---|
| Turbo v1.1 (cfg 1.0, ref_guidance 1.0) | 174.8s | Lying 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.2s | Unrelated black-haired girl, upside down in white dress |
| Base (Recommended settings) | 773.4s | Lying on yellow flower field, knees bent. Full body down to loafers, matches reference |



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.
| Condition | Steps | Passes per Step | With Reference | Without Reference |
|---|---|---|---|---|
| Base | 30 | 3 passes | ~772s | 262.7s |
| Aesthetic v1.1 | 30 | 3 passes | ~771s | 259.2s |
| 2.9B (remapped / stock) | 30 | 3 passes | ~1,085–1,095s | ~370s |
| Turbo variants, ref_guidance 4.5 | 8 | 3 passes | ~209–219s | ~38–40s |
| Turbo variants, ref_guidance 1.0 | 8 | 2 passes | 174.7–182.8s | ~38–40s |
| 2.9B Unofficial Turbo, ref_guidance 4.5 | 8 | 3 passes | ~293–301s | 54.3s |
| 2.9B Unofficial Turbo, ref_guidance 1.0 | 8 | 2 passes | 245.1–255.1s | 54.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.
Reference Links
- ComfyUI-Anima-Ref-Adapter (GitHub)
- Technical Report
- anima-ref-adapter (Hugging Face)
- Anima (Hugging Face)
- Anima-2.9B (Hugging Face)
- anima29b-turbo-unofficial (Hugging Face)
- Running WAI-Anima v1 via ComfyUI API on an RTX 4060 Laptop
- Testing Official Anima Turbo v1.1 and Aesthetic v1.1 on M1 Max
- Layer Expansion: Do Existing Character LoRAs Work on 40-Block Anima-2.9B?