【ComfyUI】SCAIL-2はINT8 ConvRotでどれくらい早くなったのか?

【ComfyUI】SCAIL 2はINT8でどれくらい早くなったのか? AIラボ

SCAIL-2は、清華大学とZ.aiの研究チームが開発した、動画の動きを人物・キャラクター画像へ転送できるオープンソースのAIモデルです。1枚の画像と元動画だけで面倒な設定なし、「骨格なし」、でアニメーション化できる画期的なAIです。

今回はComfyUI v0.27で公式サポートされたSCAIL-2 INT8モデルを試してみました。

ComfyUI v0.27.0「convrot int8」形式のモデルに公式サポート
ComfyUI v0.27.0にて、コミュニティ発の軽量・高速化フォーマットである「convrot int8」モデルが公式サポートされました。

なぜ「骨格なし」が実用上の利点になるのか

これまでの多くのモデルとSCAIL-2の決定的な違いは、動きを伝える際の「情報の渡し方」にあります。

従来モデル(OpenPose等)の構造

  • 仕組み: 動画 ➔ 棒人間(骨格)や深度マップに変換 ➔ AIに読み込ませる。
  • 技術的な問題:映像を一度「点と線」に抽象化するため、手前の手と奥の体が重なった際の「奥行き」や、服の正確なひらつきなどの情報がその時点で消失します。
  • 結果として、AIが肉付けする段階で「手足が突き抜ける」「指がバグる」といった破綻が起きていました。

せっかく元の動画で服がひらひら動いていたり、手前と奥で手が交差していても、棒人間にしてしまうと『ただの線』になってしまうため、情報が消えてしまっていました。その結果、手が体の中にめり込んだり、2人の人間が絡み合う動きをさせるとAIがパニックを起こして崩れてしまっていました。

SCAIL-2 の「End-to-end Driving(エンドツーエンド駆動)」

  • 仕組み: 動画のピクセル(見た目そのもの)を直接DiT(Diffusion Transformer)のエンコーダーに渡す「Unified Motion Transfer」を採用。
  • 情報の無損失: 棒人間に変換しないため、2人がハグするような複雑な接触、手前の手が奥に回るような前後関係(オクルージョン)をAIが空間的に正しく理解します。
  • 人外への対応: 骨格の定義に縛られないため、人間の動画の動きを4本足の動物やモンスターの画像にそのまま転送する(Animal-driving)ことが、モデルの基本仕様として可能です。

コントロール用の追加モデル(棒人間や深度)を別で管理・調整する必要がなく、「元動画」と「キャラクター画像」の2つだけ用意すれば動くという、ノード(ワークフロー)のシンプル化が最大のメリットです。

人間以外(キャラクターや動物)も動かせる

Krea2_turbo_cat

骨格に依存しないため、人間以外のキャラクターも動かせます。

  • メリット: モンスター、ファンタジーの生き物、あるいは4本足の動物の動画を元にして、イラストのキャラクターを同じように動かすといった「異次元のモーション転送」が可能です。

「Animation(動かす)」と「Replace(置き換える)」の二刀流

1つのモデルで2つのアプローチができます。

  • Animate: 1枚のイラスト(背景白など)を、元動画の動きに合わせて動かす。
  • Replace: 元の動画の背景はそのままに、「写っている人間だけを自分のイラスト(推しキャラなど)にすり替える」

「FP8」と「INT8」

FP8: 浮動小数点(Floating Point)の8ビット。一般的に ComfyUI で巨大モデルを動かす際の標準です。

INT8: 整数(Integer)の8ビット。計算処理を整数に限定することで、グラフィックボード(GPU)の Tensor コア等の処理効率が最適化されます。

ComfyUI 公式ワークフローテンプレートの説明

ワークフロー(video_wan21_scail2_character_replacement.json)は、SCAIL-2を用いて、参照画像(キャラクター)と駆動動画を組み合わせ、動画内の人物を置き換える(あるいはアニメーションさせる)ためのComfyUI用のパイプラインです。

※追記:2026年7月14日にテンプレートにvideo_wan21_scail2_character_replacement_int8.jsonが追加されました。

ワークフローの全体像と主要な2つのモード

このワークフローには replace_mode(真偽値)というパラメータが存在し、用途に合わせて2つのモードを切り替えることができます。今回の構成ファイルではデフォルトで true(Replacementモード)に設定されています。

  • Replacementモード(replace_mode = true:
    駆動動画(元動画)に映っている特定の人物(トラッキング対象)を、参照画像のキャラクターへと「すり替える(置換する)」モードです。
  • Animationモード(replace_mode = false:
    参照画像のキャラクターに対し、駆動動画のモーションのみを転送して動作させるモードです。

主要なノードとその役割

入力エリア(Source Video and Reference image グループ)

  • LoadVideo ノード:
    動きの元となる駆動動画を読み込み、出力されたVIDEOデータを各サブグラフへ送信します。
  • 30 LoadImage ノード:
    適用したいキャラクターの参照画像を読み込み、IMAGEデータを各サブグラフへ送信します。

処理の核(サブグラフ構造)

このワークフローは、処理をカプセル化した「サブグラフ(Subgraph)」を連鎖させる構造になっています。内部には wan2.1_14B_SCAIL_2_fp16.safetensorssam3.1_multiplex_fp16.safetensors(セグメンテーション用)といったモデルが配置されています。

  • Character Replacement (SCAIL-2 Base) ノード:
    動画の最初のチャンク(第1セグメント:デフォルトで81フレーム)を処理するベースノードです。segment_index = 1 として動作します。
  • Character Replacement (SCAIL-2 Extend) ノード: 第2セグメント以降(82フレーム目以降)を処理するための拡張用ノードです。前のセグメントからの出力画像(output)を previous_frames インプットに接続し、前の動きや一貫性を引き継ぎながら生成を継続します。このとき、segment_index2 以上の適切な数値に設定します。

長尺動画のフレーム計算とプレビュー

GetVideoComponents ノード:
LoadVideo から映像を分解し、画像(フレーム)、オーディオ、FPSを取得します。

GetImageSize ➔ ComfyMathExpression ➔ PreviewAny ノード:
動画全体のフレーム数(batch_size)を取得し、数式 ceil(a / (81 - 5)) を用いて、生成に必要な合計セグメント数を自動計算してテキストプレビューします。

  • 81 はデフォルトのフレームカウント(frame_count)です。
  • 5 はセグメント間でラップ(重複)させるフレーム数(previous_frame_count)です。
  • これによって、長尺動画が何個のセグメントに分割されるかを算出します。

出力エリア

CreateVideo ➔ SaveVideo (First Segment) ノード:
最初のセグメントのみを動画として書き出し、中間確認ができます。

BatchImagesNode ➔ CreateVideo ➔ SaveVideo (Final output) ノード:
最初のセグメントと、続く拡張セグメントの出力を結合(バッチ化)し、最終的な一本の置き換え動画として書き出します。音声やFPSも自動的に同期されます。

公式は「数珠繋ぎ(セグメント分割)」にしている

公式ワークフローは「動画を3秒ごとに細切れにして、前の仕上がりを引き継ぎながら生成する」というアプローチ(サブグラフの連鎖)をとっています。

  1. 最初の3秒(1〜81フレーム): Baseノードが真っ新な状態から動画を生成。
  2. 次の3秒(77〜157フレーム): Extendノードprevious_frames という入り口に、1.生成した動画を繋ぐ。

SCAIL-2は、この繋がれた過去の動画の「末尾の5フレーム(overlap)」を参照しながら続きを描きます。これによって、VRAMを節約しつつ、1本の繋がった動画を破綻させずに作ることができます。

長尺動画はExtendノードを複製して同じように繋ぐだけで生成可能です。

INT8 と FP8モデルで生成

VRAM 16GBの環境で生成しました。

wan2.1_14B_SCAIL_2_int8_convrot.safetensors 16.26GB
wan2.1_14B_SCAIL_2_fp8_scaled.safetensors 17.28GB

Google Flowで生成した、画像と動画を使用してアニメーションモードで6秒の動画生成。
6秒の動画5本の平均値は

  • FP8:約224秒
  • INT8:約200秒

秒単位の短縮効果:INT8はFP8に比べて、1本あたり24秒早く完了。
処理時間の短縮率:FP8(224秒)を基準とした場合、処理時間は約10.7%短縮。

最新のアニメーション生成モデルは、INT8(整数化)による情報のカットをうまく補正する技術が進化しています。特にアニメ調の映像や、動きが激しいシーンでは、人間の目にはFP8との微小なディテール差がほとんど認識できませんし、FP16にも肉薄しています。

VRAM 16GB環境では、SCAIL-2のINT8は確かに速くなりました。
ただし、「劇的に爆速化した」というよりは、同じ条件なら確実に少し速くなる、という印象です。

INT8の効果はGPUによって変わる

SCAIL-2のような重い動画生成では、GPUの処理性能だけでなく、VRAMの容量もかなり重要になります。RTX 3090は世代としては二世代前のGPUですが、VRAMは24GBあります。さらに、RTX 30シリーズはFP8に強い世代ではないため、INT8の方が相性よく動く可能性があります。そのため、私の環境では約10.7%短縮という結果でしたが、RTX 3090のようなVRAMに余裕のあるRTX 30シリーズでは、もっと大きな差が出る可能性があります。

低VRAM環境ではGGUFとの比較も重要

一方で、RedditではINT8だけでなく、GGUFの低VRAMワークフローもかなり話題になっています。

realrebelai/SCAIL-2_GGUF at main
We???re on a journey to advance and democratize artificial intelligence through open source and open science.

SCAIL-2 GGUFの低VRAMワークフロー投稿では、SCAIL-2を低コストで動かすために量子化し、低解像度でも品質は保たれている、と説明されています。Hugging Faceリポジトリとワークフローも共有されており、SCAIL-2を低VRAM環境で試したいユーザー向けの流れもあります。

さらに、INT8 ConvRotの解説投稿では、GGUF派の意見として「自分のVRAMに合わせやすい」「他の作業をしながらでも生成が失敗しにくい」というメリットが挙げられています。特に、ComfyUIのDynamic VRAMでRAM側に逃がす動きが発生すると、ブラウザタブを大量に開いているような環境では、生成失敗やシステムメモリ不足につながる可能性がある、という実用面の指摘も出ています。

私のVRAM16GBの環境では

  • INT8:共有メモリに15GB以上あふれて、平均200秒
  • GGUF Q4_K_M:VRAMは8GB程度の使用、平均330秒

このあたりを見ると、SCAIL-2の軽量化は単純に「INT8が最強」「GGUFは不要」という話ではなく

  • INT8 ConvRotは速度と品質のバランスで有力
  • GGUFはVRAM使用量を減らし、低VRAM環境で安定運用しやすい

このように、それぞれ役割が違うと考えた方がよさそうです。