SnapRef v2aをかなちゃんの立ち絵1枚でM1 Maxに当ててv1bと比べる
目次

SnapRefは、1枚の参照画像からキャラクターの外見情報を取り出して生成画像に反映させるAnima用の参照重みとComfyUIノードのセットだ。
前回のSnapRef v1bをM1 Maxで試した記事から1週間ほどで、次の版のv2aが出た。
READMEによると、v2aの評価数値はv1aとほぼ同等だが、見た目の追従性はかなり良くなったと書かれている。
比較表に載っているのはv1aとv2aだけで、手元で試したv1bとの差は書かれていない。
前回の記事では、かなちゃんの立ち絵を参照にして、Baseの走る場面が5シードとも後ろ姿になった。
複数参照では上半身の画像の服が優先して出たり、MPS環境では参照のサイズによって真っ黒な画像が出たりした。
v2aでこれらがどう変わるのかを、同じ参照画像、プロンプト、シードで確かめてみた。
SnapRef v2aの概要
| 項目 | 内容 |
|---|---|
| 作者 | Hugging Faceは0ppxnhximxr、GitHubはArcAnima |
| 公開 | 2026年11月8日 |
| 重み | snapref_v2a.safetensors、381,821,960バイト |
| ベース | Anima base v1.0 |
| ライセンス | 重みはCircleStone Labs Non-Commercial License v1.2 |
| 入手先 | Hugging Face(v2a)、GitHub |
重みのサイズは、v1aの約382MB(381,822,008バイト)とほぼ同じだ。
仕組みもv1と同じく、参照画像を1回モデルに通して各ブロックのアテンション(注目機構)のkey/valueを保持し、生成中の各ステップで参照させる。
詳しい仕組みは前回のv1bの記事にまとめたのでリンク先を参照してほしい。
READMEの比較表は、あらかじめ決めた64ケース×2シードでの固定評価。指標のSigLIPやDINOは視覚モデルによる特徴類似度、CCIPはキャラクター同一性の判定スコアだ。
| 指標 | v1a | v2a |
|---|---|---|
| 見た目のタグの再現率(高いほど良い) | 0.8722 | 0.8727 |
| 余分な見た目のタグ(低いほど良い) | 0.1341 | 0.1401 |
| 頭部のSigLIP類似度(高いほど良い) | 0.8989 | 0.8903 |
| 頭部のDINO類似度(高いほど良い) | 0.7431 | 0.7407 |
| 頭部のCCIP距離(低いほど良い) | 0.0684 | 0.0715 |
| 画像全体のCCIP距離(低いほど良い) | 0.0725 | 0.0757 |
数値の上でv2aが良いのはタグの再現率だけで、それも差はごくわずかだ。
READMEでは、目視での比較ではv1aより参照によく従うようになったと説明されている。
新しい作例としては、mode char で画風をプロンプトから変える例と、同じキャラの画像を複数入れて重みを変える例が載っている。
READMEの推奨設定はこんな感じ。
| 項目 | 内容 |
|---|---|
| サンプラー | euler / simple |
cfg | 4.5 |
fidelity | 1.0 |
| ワークフロー | 832×1216、28ステップ、シード20261029 |
ノードの変更点
v2aにはComfyUI用ノードのコードも付属している。
v1bの記事で使ったノードと差分を取ると、主な変更点は次のとおり。
| 変更 | 内容 |
|---|---|
| 2.9Bへの自動対応 | 28ブロック分の重みを、Anima-2.9Bの40ブロックのうち元からある28ブロックへ自動で振り直す。差し込まれた12ブロック(2, 5, 8, …, 36番)は避ける |
| キャッシュのキー | 参照のキャッシュを、モデルの id() ではなく専用のIDで区別する。コードのコメントには、モデルを読み直すと id() が再利用されるためとある |
v1bの記事では、2.9Bに当てるために重みのキーの番号をスクリプトで手動で振り直していた。
v2aのノードなら、その作業がいらなくなる。
一方で、MPS環境でエラーになるAPG補正コードの .double() と、黒画像の原因と考えたマスクの -inf はそのまま残っていた。
検証環境
AnimaのBase(anima-base-v1.0)は標準的な生成モデルで30ステップ前後、Turbo(anima-turbo-v1.1)は8ステップで高速生成できる軽量・蒸留モデルだ。それぞれのモデルにSnapRefを適用して検証した。
| 項目 | 内容 |
|---|---|
| マシン | MacBook Pro M1 Max 64GB(MPS) |
| UI | ComfyUI v0.33.3(--bf16-vae --bf16-unet) |
| SnapRef | Hugging Faceのコミット 2ca5eca のノードと重み。sha256 は配布の SHA256SUMS と一致 |
| 参照画像 | かなちゃんの全身の立ち絵(832×1216)。複数参照の節だけ上半身の画像を足す |
| 解像度 | 896×1152(v1bの記事と同じ)。公式設定の節だけ832×1216 |
| Base | anima-base-v1.0、30ステップ、cfg 4.5、euler / simple |
| Turbo | anima-turbo-v1.1、8ステップ、cfg 1.0、euler / simple |
| シード | 20261027。シード比較では20261028〜20261031を足す |
| v1bの画像 | v1bの記事の画像を使用 |
APG補正の .double() 2行は、v1bのときと同じく .float() に変更した。
それ以外のノードコードは配布のままだ。
ノードを差し替えたことでv1bの出力が変わっていないかも確かめてみた。
新しいノードでv1bを当てると、Turboの走る場面(シード20261027)もBaseの走る場面(シード20261030)も、前回の画像とピクセル単位で一致した。
流用したv1bの画像とv2aの画像の違いは、ノード処理ではなく重みの違いによるものだ。
公式設定のまま動かしてみる
v1bの記事と同じく、READMEのプロンプト、ワークフローのネガティブ、832×1216、28ステップ、cfg 4.5でBaseに当てた。
| 版 | 時間 | 結果 |
|---|---|---|
| v2a | 280.7秒 | ベンチで脚を組み、頬に手を当てて微笑む。夜の街灯。アホ毛、シュシュのサイドポニー、白シャツ、赤ネクタイ、黒タイツ、ローファーが残る |
| v1b(前回) | 289.9秒 | ほぼ同じ構図。表情は真顔 |


プロンプト
masterpiece, best quality, score_7, safe, 1girl, solo, full body, sitting, crossed legs, bench, street, night
ネガティブ
worst quality, low quality, score_1, score_2, score_3, artist name, blurry, jpeg artifacts, chromatic aberration
Baseの走る場面
前回の記事でいちばん気になっていたのが、Baseの走る場面だった。
v1bでは5シードとも後ろ姿で、参照なしのBaseでも後ろ姿だったため、このプロンプトで後ろ向きになるのはBase自体の出したい構図と見ていた。
同じ5シードをv2aで出してみた。
| シード | v2a | v1b(前回) | 参照なし(前回) |
|---|---|---|---|
| 20261027 | 正面 | 後ろ姿 | — |
| 20261028 | 正面、人物が小さい | 後ろ姿、人物が小さい | — |
| 20261029 | 正面 | 後ろ姿 | — |
| 20261030 | 正面 | 後ろ姿 | 後ろ姿 |
| 20261031 | 斜め後ろから、振り返って口を開ける | 後ろ姿 | 後ろ姿 |








v2aは5シード中4シードで正面になり、残り1シードも顔はこちらを向いた。
5枚とも、サイドポニー、白シャツ、赤ネクタイ、黒タイツは参照どおりだった。
v1bでは参照画像の向きに引っ張られず、Base本来の後ろ姿構図が保たれていた。
一方のv2aは参照した正面の立ち絵に寄る傾向があり、Ref Adapter v2やRole-Ref-KVで試したときの結果に近い。
プロンプト
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
ネガティブ
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
Turbo v1.1の走る場面
Turbo v1.1でも同じ5シードを出してみた。
| シード | v2a | v1b(前回) |
|---|---|---|
| 20261027 | 参照どおり | 参照どおり |
| 20261028 | 黒タイツがサイハイソックスに変わり、太ももが素肌になる | 参照どおり |
| 20261029 | 黒のスパッツと素肌の膝、ハイソックスに変わる | 参照どおり |
| 20261030 | 参照どおり | — |
| 20261031 | 参照どおり | — |








v2aは5シード中2シードで、黒タイツが別の脚の装いに変化した。
上半身の髪型、シャツ、ネクタイは5枚とも参照どおりだった。
衣装が変わったシードは、v1bの記事でv1aの服が変わったシードと同じだった。
v1aでもシード20261028はニーハイ、20261029は片脚がハイソックスのように変わっていた。
重みのサイズがv1aとほぼ同じことと合わせるとv1aに近い構成と思われるが、READMEには構成の詳しい説明はない。
なお、シード20261027の画像には参照にない胸ポケットが描かれていた。
ケーキと寝そべりの場面
| 条件 | 時間 | v2a | v1b(前回) |
|---|---|---|---|
| Turbo ケーキ | 48.3秒 | フォークを口に。ネクタイが見える | 片手を口元に。ネクタイは腕の陰 |
| Base ケーキ | 290.9秒 | フォークを口に。カップはない | ほぼ同じ構図。カップがある |
| Turbo 寝そべり | 47.4秒 | 頭が画面の下で逆さ。膝を立て、足先は画面外 | 頭が画面の上。脚を組み、ローファーが見える |
| Base 寝そべり | 290.9秒 | Turboとほぼ同じ構図。白い花 | 頭が画面の上。膝を立て、ローファーが見える。黄色と白の花 |








ケーキの場面は、v1bとほぼ同じ構図になった。
寝そべりは、v2aだとTurboもBaseも頭が画面の下に来る逆さの構図になった。
4枚とも、アホ毛、サイドポニー、ネクタイ、黒タイツは参照どおりだった。
プロンプト
ケーキの場面
masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, upper body, sitting, eating, cake, cafe, indoors
寝そべりの場面
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
mode設定のcharで画風を変える
SnapRefの mode 設定には、参照画像からキャラクターと画風の両方を引き継ぐ cs(Character & Style、既定値)と、プロンプトの画風指定を通しやすくするために外見特徴のみを抽出する char がある。
READMEのv2a作例には、mode char で水彩や1990年代のアニメ風に変えた画像が載っている。
前回のv1bでは char にしても水彩にならず、髪色まで変わってしまっていた。
前回の記事と同じタグを使い、BaseとTurboでケーキの場面を出してみた。
| モデル・条件 | cs | char |
|---|---|---|
| Base タグなし | ケーキの場面(通常) | 髪の影が濃くなる程度で、ほぼ同じ |
Base watercolor (medium) | ほぼ変わらない | 水彩にはならない。髪が鮮やかなオレンジ、シャツが水色がかり、窓枠やテーブルが黄色く塗りつぶされたようになる |
Base 1990s (style), retro artstyle | ほぼ変わらない | 髪が濃いオレンジ寄りになる。線や塗りが古いアニメ風に変わったとまでは言えない |
Turbo watercolor (medium) | 通常と同じ画風 | 髪がオレンジ寄りでつやが強くなった程度 |








かなちゃんの立ち絵では、v2aの char でも画風より先に髪色が変わる傾向だった。
上半身と全身の参照を両方入れる
前回の記事と同じく、ブレザーにリボンの上半身画像と、白シャツにネクタイの全身立ち絵を組み合わせた。
衣装の異なる2枚を使い、Turbo v1.1の走る場面で multi_layout を separate に設定して試した。


| 条件 | 時間 | v2a | v1b(前回) |
|---|---|---|---|
| 上半身だけ | 51.5秒 | ブレザーとリボン。格子柄のスカート、素足、片脚だけハイソックス | ブレザーとリボン。格子柄のスカートと素足に片方だけの靴下 |
| 上半身+全身、重みは同じ | 66.5秒 | 白シャツとネクタイ。無地のスカート、黒タイツ、ローファー | ブレザーとリボン。無地のスカート、黒タイツ、ローファー |
| 上半身の重み0.4 | 53.3秒 | 白シャツとネクタイ | 白シャツとネクタイ |
| 全身の重み0.4 | 53.3秒 | ブレザーとリボン。無地のスカート、黒タイツ、ローファー | 走る場面は出していない |







重みが同じとき、v1bでは上半身画像のブレザーが出たが、v2aでは全身立ち絵の白シャツが優先された。
v2aは全身の重みを0.4に下げるとブレザーに切り替わり、そのときも下半身は全身の参照どおりの無地のスカートと黒タイツだった。
上半身の服と全身の下半身を両方反映できたのは、この全身0.4の1枚だ。
重みの値でどちらの服を優先するかを切り替えられる点はv1bと同じで、等配分時の優先順位だけが逆になった。
2.9Bにキーの振り直しなしで当てる
ノードが28ブロックの重みを2.9Bの40ブロックへ自動で振り直すようになったので、キーを振り直していない snapref_v2a.safetensors をそのまま2.9B(Anima-2.9B-preview-v1)に当ててみた。
| 条件 | 時間(走る / ケーキ) | 走る | ケーキ |
|---|---|---|---|
| v2a、付け替えなし | 427.1秒 / 412.0秒 | 正面で走る。参照どおり | フォークを口に。参照どおり |
| v1b、付け替えなし(前回) | 435.1秒 / 434.3秒 | 参照の立ち姿のまま。背景はぼけ、人物の周りに白いもや | 立ち姿のまま。カップとケーキだけ半透明で浮く |




前回の記事では動かなかった手動振り直しなしの2.9Bが、そのまま動作した。
重みの振り直し処理はノード側で行われるため、新しいノードであれば同様に振り分けられる仕組みだ。
横に並べた参照でのMPS黒画像
前回の記事では、2人を横に並べた1664×1216の参照(ノードの中で1184×864に縮小される)で strength を0以外にすると、MPS環境で真っ黒な画像が出た。
同じ参照画像、strength 1、Turbo v1.1、1216×832で出すと、v2aでも真っ黒だった(50.3秒)。
ノード差分で確認したとおり、原因と考えたマスクの -inf 処理はv2aのノードでも変わっていない。
合計のトークン数が16の倍数になる大きさに参照画像を合わせる回避策が必要になる。
生成速度の実測
Turbo v1.1およびBaseの走る場面で生成速度を実測した。
| 条件 | Turbo s20261030 | Turbo s20261031 | Base s20261030 |
|---|---|---|---|
| 参照なし | 38.2秒 | 38.4秒 | — |
| SnapRef v1b | 51.4秒 | 51.5秒 | 312.0秒 |
| SnapRef v2a | 54.6秒 | 49.6秒 | 290.9秒 |
v2aのBaseの1枚あたりは、走る場面5シードで289.9〜295.9秒、ほかの条件も含めて280.7〜297.9秒の範囲だった。
v2aの重みはv1aと同程度のサイズであり、前回の検証でもv1aはv1bより数%生成時間が短かったため、その差によるものと思われる。
Turboにおけるv1bとv2aの差は、シードによる測定ブレの範囲内だった。
Animaが出した絵を参照にする
Turbo v1.1で変化したのは脚まわりの衣装で、参照には手描きの立ち絵を使用していた。
Anima自身が生成した絵を参照に用いることで、モデルが解釈しやすい表現になり衣装の変化を抑えられるか確認した。
手描きの立ち絵をAnimaで描き直して参照にする方法と、生成した走る場面を参照にして横や後ろからの構図を描かせる方法の2通りを試してみた。設定はTurbo v1.1、8ステップ、cfg 1.0だ。
描き直した立ち絵を参照にする
手描きの立ち絵を参照にして、白背景の立ち絵を4シード生成した。
masterpiece, best quality, score_7, newest, highres, absurdres, safe, 1girl, solo, full body, standing, looking at viewer, arms at sides, white background, simple background
4枚とも、髪型、シュシュ、シャツ、ネクタイ、スカート、黒タイツ、ローファーは参照どおりだった。
このうち胸ポケットのないシード20261027の1枚(832×1216)を参照画像に採用した。



この描き直した立ち絵を参照にして、手描き参照時に脚まわりの衣装が変わったシードを含めて走る場面を出してみた。
| シード | 参照が手描きの立ち絵 | 参照が描き直した立ち絵 |
|---|---|---|
| 20261027 | 参照どおり | 参照どおり |
| 20261028 | 黒タイツがサイハイソックスに変わり、太ももが素肌になる | 黒タイツのまま |
| 20261029 | 黒のスパッツと素肌の膝、ハイソックスに変わる | 片脚だけ膝が透けて、膝から下がハイソックスになる |






変化のあった2シードのうち、20261028は黒タイツが維持され、20261029は変化の度合いが小さくなった。構図や上半身は手描き参照時とほぼ一致している。
寝そべりの場面(Turbo)は描き直した立ち絵を参照にしても頭が画面下に来る構図となり、Baseの走る場面(シード20261027)も正面向きだった。


走る場面を参照にした角度の変更
Turbo v1.1の走る場面(シード20261027)を参照画像として、プロンプトに from side(横向き)または from behind(後ろ姿)を追加して角度変更を試みた。
| 条件 | 参照が走る場面 | 参照が手描きの立ち絵 |
|---|---|---|
from side s20261027 | 横向き。黒タイツのまま | 横向き。黒タイツのまま |
from side s20261028 | 横向き。黒タイツのまま | 横向き。黒タイツのまま。片手を額に当てる |
from behind s20261027 | 斜め後ろから。振り返って顔が見える | 真後ろ。黒タイツのまま |
from behind s20261028 | 真後ろ。黒タイツのまま | 真後ろ。サイハイソックスに変わり、太ももが素肌になる |








横向きはどちらの参照でも出力できた。
手描き立ち絵を参照した真後ろ構図(シード20261028)ではタイツの変化が見られたが、走る場面を参照にした場合は黒タイツが維持された。
なお from behind のシード20261027は真後ろではなく振り返った斜め後ろ構図となった。
使い分け
| 用途・状況 | 選択肢 |
|---|---|
| Baseでプロンプトに向きを指定せず正面を出したい | v2a(5シード中4シードで正面) |
| Baseで参照の向きに引っ張られたくない | v1b(参照なしのBaseと同じ後ろ姿を維持) |
| Turboで脚まわりまで参照どおりに維持したい | v1b(v2aは一部シードでタイツが変化) |
| v2aで脚まわりの衣装変化を抑えたい | 参照をAnimaで描き直した立ち絵に差し替える |
| 同一衣装で横や後ろからの絵を出したい | 生成した場面を参照にして from side / from behind を追加 |
| 複数参照で上の服を上半身画像から取りたい | v2aで全身画像の重みを0.4前後に下げる |
| 2.9Bに適用したい | v2aの付属ノード(自動振り直しでそのまま動作) |
| 配布容量を抑えたい | v2a(382MB、v1bのbf16の約4割) |
参考リンク
- snapref-v2a(Hugging Face)
- snapref-v1a(Hugging Face)
- snapref-v1b(Hugging Face)
- SnapRef(GitHub)
- Anima(Hugging Face)
- Anima-2.9B(Hugging Face)
- 参照画像1枚でキャラを保つSnapRef v1bをRef Adapter v2・Role-Ref-KVと同じ条件でM1 Maxに当てて比べる