技術約15分で読めます

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はキャラクター同一性の判定スコアだ。

指標v1av2a
見た目のタグの再現率(高いほど良い)0.87220.8727
余分な見た目のタグ(低いほど良い)0.13410.1401
頭部のSigLIP類似度(高いほど良い)0.89890.8903
頭部のDINO類似度(高いほど良い)0.74310.7407
頭部のCCIP距離(低いほど良い)0.06840.0715
画像全体のCCIP距離(低いほど良い)0.07250.0757

数値の上でv2aが良いのはタグの再現率だけで、それも差はごくわずかだ。
READMEでは、目視での比較ではv1aより参照によく従うようになったと説明されている。
新しい作例としては、mode char で画風をプロンプトから変える例と、同じキャラの画像を複数入れて重みを変える例が載っている。

READMEの推奨設定はこんな感じ。

項目内容
サンプラーeuler / simple
cfg4.5
fidelity1.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)
UIComfyUI v0.33.3(--bf16-vae --bf16-unet)
SnapRefHugging Faceのコミット 2ca5eca のノードと重み。sha256 は配布の SHA256SUMS と一致
参照画像かなちゃんの全身の立ち絵(832×1216)。複数参照の節だけ上半身の画像を足す
解像度896×1152(v1bの記事と同じ)。公式設定の節だけ832×1216
Baseanima-base-v1.0、30ステップ、cfg 4.5、euler / simple
Turboanima-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に当てた。

版時間結果
v2a280.7秒ベンチで脚を組み、頬に手を当てて微笑む。夜の街灯。アホ毛、シュシュのサイドポニー、白シャツ、赤ネクタイ、黒タイツ、ローファーが残る
v1b(前回)289.9秒ほぼ同じ構図。表情は真顔
v2a
SnapRef v2aでREADMEのプロンプトを使い、かなちゃんがベンチで脚を組む結果
v1b(前回)
SnapRef v1bでREADMEのプロンプトを使い、かなちゃんがベンチで脚を組む結果
プロンプト
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で出してみた。

シードv2av1b(前回)参照なし(前回)
20261027正面後ろ姿—
20261028正面、人物が小さい後ろ姿、人物が小さい—
20261029正面後ろ姿—
20261030正面後ろ姿後ろ姿
20261031斜め後ろから、振り返って口を開ける後ろ姿後ろ姿
v2a s20261027
SnapRef v2aをBaseに当てた走る場面、シード20261027、正面
v2a s20261028
SnapRef v2aをBaseに当てた走る場面、シード20261028、正面で人物が小さい
v2a s20261029
SnapRef v2aをBaseに当てた走る場面、シード20261029、正面
v2a s20261030
SnapRef v2aをBaseに当てた走る場面、シード20261030、正面
v2a s20261031
SnapRef v2aをBaseに当てた走る場面、シード20261031、振り返る
v1b s20261027(前回)
SnapRef v1bをBaseに当てた走る場面、シード20261027、後ろ姿
v1b s20261030(前回)
SnapRef v1bをBaseに当てた走る場面、シード20261030、後ろ姿
参照なし s20261030(前回)
参照なしのBaseで走る場面、シード20261030、後ろ姿

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シードを出してみた。

シードv2av1b(前回)
20261027参照どおり参照どおり
20261028黒タイツがサイハイソックスに変わり、太ももが素肌になる参照どおり
20261029黒のスパッツと素肌の膝、ハイソックスに変わる参照どおり
20261030参照どおり—
20261031参照どおり—
v2a s20261027
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261027
v2a s20261028
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261028、サイハイソックスに変わる
v2a s20261029
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261029、スパッツとハイソックスに変わる
v2a s20261030
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261030
v2a s20261031
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261031
v1b s20261027(前回)
SnapRef v1bをTurbo v1.1に当てた走る場面、シード20261027
v1b s20261028(前回)
SnapRef v1bをTurbo v1.1に当てた走る場面、シード20261028
v1b s20261029(前回)
SnapRef v1bをTurbo v1.1に当てた走る場面、シード20261029

v2aは5シード中2シードで、黒タイツが別の脚の装いに変化した。
上半身の髪型、シャツ、ネクタイは5枚とも参照どおりだった。

衣装が変わったシードは、v1bの記事でv1aの服が変わったシードと同じだった。
v1aでもシード20261028はニーハイ、20261029は片脚がハイソックスのように変わっていた。
重みのサイズがv1aとほぼ同じことと合わせるとv1aに近い構成と思われるが、READMEには構成の詳しい説明はない。

なお、シード20261027の画像には参照にない胸ポケットが描かれていた。

ケーキと寝そべりの場面

条件時間v2av1b(前回)
Turbo ケーキ48.3秒フォークを口に。ネクタイが見える片手を口元に。ネクタイは腕の陰
Base ケーキ290.9秒フォークを口に。カップはないほぼ同じ構図。カップがある
Turbo 寝そべり47.4秒頭が画面の下で逆さ。膝を立て、足先は画面外頭が画面の上。脚を組み、ローファーが見える
Base 寝そべり290.9秒Turboとほぼ同じ構図。白い花頭が画面の上。膝を立て、ローファーが見える。黄色と白の花
v2a Turbo ケーキ
SnapRef v2aをTurbo v1.1に当てたケーキの場面
v1b Turbo ケーキ(前回)
SnapRef v1bをTurbo v1.1に当てたケーキの場面
v2a Base ケーキ
SnapRef v2aをBaseに当てたケーキの場面
v1b Base ケーキ(前回)
SnapRef v1bをBaseに当てたケーキの場面
v2a Turbo 寝そべり
SnapRef v2aをTurbo v1.1に当てた寝そべりの場面、頭が画面の下
v1b Turbo 寝そべり(前回)
SnapRef v1bをTurbo v1.1に当てた寝そべりの場面
v2a Base 寝そべり
SnapRef v2aをBaseに当てた寝そべりの場面、頭が画面の下
v1b Base 寝そべり(前回)
SnapRef v1bをBaseに当てた寝そべりの場面

ケーキの場面は、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でケーキの場面を出してみた。

モデル・条件cschar
Base タグなしケーキの場面(通常)髪の影が濃くなる程度で、ほぼ同じ
Base watercolor (medium)ほぼ変わらない水彩にはならない。髪が鮮やかなオレンジ、シャツが水色がかり、窓枠やテーブルが黄色く塗りつぶされたようになる
Base 1990s (style), retro artstyleほぼ変わらない髪が濃いオレンジ寄りになる。線や塗りが古いアニメ風に変わったとまでは言えない
Turbo watercolor (medium)通常と同じ画風髪がオレンジ寄りでつやが強くなった程度
v2a watercolor cs
SnapRef v2aでmode csにwatercolorを指定したBaseのケーキの場面
v2a watercolor char
SnapRef v2aでmode charにwatercolorを指定したBaseのケーキの場面、髪が鮮やかなオレンジ
v2a 1990s cs
SnapRef v2aでmode csに1990s styleを指定したBaseのケーキの場面
v2a 1990s char
SnapRef v2aでmode charに1990s styleを指定したBaseのケーキの場面、髪が濃いオレンジ寄り
v2a Turbo watercolor cs
SnapRef v2aでmode csにwatercolorを指定したTurbo v1.1のケーキの場面
v2a Turbo watercolor char
SnapRef v2aでmode charにwatercolorを指定したTurbo v1.1のケーキの場面
v1b watercolor char(前回)
SnapRef v1bでmode charにwatercolorを指定したBaseのケーキの場面
v1b 1990s char(前回)
SnapRef v1bでmode charに1990s styleを指定したBaseのケーキの場面

かなちゃんの立ち絵では、v2aの char でも画風より先に髪色が変わる傾向だった。

上半身と全身の参照を両方入れる

前回の記事と同じく、ブレザーにリボンの上半身画像と、白シャツにネクタイの全身立ち絵を組み合わせた。
衣装の異なる2枚を使い、Turbo v1.1の走る場面で multi_layout を separate に設定して試した。

上半身の参照
かなちゃんの上半身の画像、ブレザーとリボン
全身の参照
かなちゃんの全身の立ち絵、白シャツとネクタイ
条件時間v2av1b(前回)
上半身だけ51.5秒ブレザーとリボン。格子柄のスカート、素足、片脚だけハイソックスブレザーとリボン。格子柄のスカートと素足に片方だけの靴下
上半身+全身、重みは同じ66.5秒白シャツとネクタイ。無地のスカート、黒タイツ、ローファーブレザーとリボン。無地のスカート、黒タイツ、ローファー
上半身の重み0.453.3秒白シャツとネクタイ白シャツとネクタイ
全身の重み0.453.3秒ブレザーとリボン。無地のスカート、黒タイツ、ローファー走る場面は出していない
v2a 上半身だけ
SnapRef v2aで上半身の参照だけを使った走る場面
v2a 重み同じ
SnapRef v2aで上半身と全身の参照を同じ重みで入れた走る場面、白シャツとネクタイ
v2a 上半身0.4
SnapRef v2aで上半身の重みを0.4にした走る場面
v2a 全身0.4
SnapRef v2aで全身の重みを0.4にした走る場面、ブレザーとリボン
v1b 上半身だけ(前回)
SnapRef v1bで上半身の参照だけを使った走る場面
v1b 重み同じ(前回)
SnapRef v1bで上半身と全身の参照を同じ重みで入れた走る場面、ブレザーとリボン
v1b 上半身0.4(前回)
SnapRef v1bで上半身の重みを0.4にした走る場面

重みが同じとき、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秒参照の立ち姿のまま。背景はぼけ、人物の周りに白いもや立ち姿のまま。カップとケーキだけ半透明で浮く
v2a 走る
SnapRef v2aを付け替えずに2.9Bに当てた走る場面
v2a ケーキ
SnapRef v2aを付け替えずに2.9Bに当てたケーキの場面
v1b 走る(前回)
SnapRef v1bを付け替えずに2.9Bに当てた走る場面、立ち姿のまま
v1b ケーキ(前回)
SnapRef v1bを付け替えずに2.9Bに当てたケーキの場面、立ち姿のまま

前回の記事では動かなかった手動振り直しなしの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 s20261030Turbo s20261031Base s20261030
参照なし38.2秒38.4秒—
SnapRef v1b51.4秒51.5秒312.0秒
SnapRef v2a54.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)を参照画像に採用した。

手描きの立ち絵
かなちゃんの全身の立ち絵、白シャツとネクタイ
描き直し s20261027(参照に使用)
SnapRef v2aとTurbo v1.1で描き直したかなちゃんの立ち絵、シード20261027、胸ポケットなし
描き直し s20261028
SnapRef v2aとTurbo v1.1で描き直したかなちゃんの立ち絵、シード20261028、胸ポケットが付く

この描き直した立ち絵を参照にして、手描き参照時に脚まわりの衣装が変わったシードを含めて走る場面を出してみた。

シード参照が手描きの立ち絵参照が描き直した立ち絵
20261027参照どおり参照どおり
20261028黒タイツがサイハイソックスに変わり、太ももが素肌になる黒タイツのまま
20261029黒のスパッツと素肌の膝、ハイソックスに変わる片脚だけ膝が透けて、膝から下がハイソックスになる
描き直し参照 s20261027
描き直した立ち絵を参照にしたTurbo v1.1の走る場面、シード20261027
描き直し参照 s20261028
描き直した立ち絵を参照にしたTurbo v1.1の走る場面、シード20261028、黒タイツのまま
描き直し参照 s20261029
描き直した立ち絵を参照にしたTurbo v1.1の走る場面、シード20261029、片脚がハイソックスになる
手描き参照 s20261027
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261027
手描き参照 s20261028
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261028、サイハイソックスに変わる
手描き参照 s20261029
SnapRef v2aをTurbo v1.1に当てた走る場面、シード20261029、スパッツとハイソックスに変わる

変化のあった2シードのうち、20261028は黒タイツが維持され、20261029は変化の度合いが小さくなった。構図や上半身は手描き参照時とほぼ一致している。

寝そべりの場面(Turbo)は描き直した立ち絵を参照にしても頭が画面下に来る構図となり、Baseの走る場面(シード20261027)も正面向きだった。

描き直し参照 Turbo 寝そべり
描き直した立ち絵を参照にしたTurbo v1.1の寝そべりの場面、頭が画面の下
描き直し参照 Base 走る
描き直した立ち絵を参照にしたBaseの走る場面、シード20261027、正面

走る場面を参照にした角度の変更

Turbo v1.1の走る場面(シード20261027)を参照画像として、プロンプトに from side(横向き)または from behind(後ろ姿)を追加して角度変更を試みた。

条件参照が走る場面参照が手描きの立ち絵
from side s20261027横向き。黒タイツのまま横向き。黒タイツのまま
from side s20261028横向き。黒タイツのまま横向き。黒タイツのまま。片手を額に当てる
from behind s20261027斜め後ろから。振り返って顔が見える真後ろ。黒タイツのまま
from behind s20261028真後ろ。黒タイツのまま真後ろ。サイハイソックスに変わり、太ももが素肌になる
走る場面参照 横 s20261027
走る場面を参照にしたfrom side、シード20261027
走る場面参照 横 s20261028
走る場面を参照にしたfrom side、シード20261028
手描き参照 横 s20261027
手描きの立ち絵を参照にしたfrom side、シード20261027
手描き参照 横 s20261028
手描きの立ち絵を参照にしたfrom side、シード20261028、片手を額に当てる
走る場面参照 後ろ s20261027
走る場面を参照にしたfrom behind、シード20261027、振り返って顔が見える
走る場面参照 後ろ s20261028
走る場面を参照にしたfrom behind、シード20261028、黒タイツのまま
手描き参照 後ろ s20261027
手描きの立ち絵を参照にしたfrom behind、シード20261027
手描き参照 後ろ s20261028
手描きの立ち絵を参照にしたfrom behind、シード20261028、サイハイソックスに変わる

横向きはどちらの参照でも出力できた。
手描き立ち絵を参照した真後ろ構図(シード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割)

参考リンク

参考リンク