製品リリース · オープンソース形式

Web小アニメ、操作で一瞬止まる? AVAL がプリレンダリング動画に「ホバー / クリック / 成功」を理解させる

課題:Web上の立体的な小アイコンを動かし、マウスや状態に追従させたいとき、普通の動画だとかくつくことが多い。AVAL は、そんな短いアニメーションのための専用フォーマットとプレイヤーです。

サイト pixelpoint.io/aval リポジトリ github.com/pixel-point/aval ライセンス MIT ステータス テクニカルプレビュー
1分でわかる要点
  • 問題:Web上の小さい3Dアイコンやお気に入りボタンなど、「短くて、見た目が良くて、さらにインタラクティブ」なアニメーションは、普通の動画でループや状態切替を行うとかくつきやすい。Lottie では複雑なレンダリング映像を組み込むのが難しい。
  • 何か:AVAL は Web 専用のインタラクティブ動画フォーマット(拡張子 .avl)+ ブラウザプレイヤーです。アニメーションの状態はファイル内に書き込まれ、ページは「今、成功状態にする」と伝えるだけです。
  • なぜスムーズか:ループの継ぎ目で「巻き戻して再生」をしないようにし、切替時はアニメーション作成時に定めたフレームに合わせます。透明度も対応。ブラウザが非対応なら、用意した静止画を表示します。
  • 現状:オープンソースのテクニカルプレビューです。公式サイトでデモを見たり、リポジトリをクローンして試せます。同種のクローズドなアイデアは外部でも言及されましたが(例:Airbnb Lava)、AVAL は直接触れるオープンソース実装です。

立場の補足:本稿の内容は、プロジェクト公式サイトと GitHub ドキュメントに基づく自己記述です。以下は問題点と機能の解説であり、第三者が行った負荷試験の結果ではありません。

先に課題:Web小アニメ、見た目の良さと「操作できること」はしばしば相反

一言でいう課題

Webページにレンダリング済みの短いアニメーション(例:Blender で作った立体的な小アイコン)を置きたいとします。それは静かにループし、マウスを乗せると変化し、クリックすると「お気に入り登録 / 読み込み成功」に変わる。これを現在の普通の動画で行うと、状態が変わる瞬間、映像が一瞬止まったり、フレームが飛んだりしやすいのです。

なぜ困るのか? 大きく分けて3つの理由があります:

  • 普通の動画は「飛び」が生じる:ループの終端で頭に戻る必要があります。また「デフォルト」から「ホバー」への切替も再生位置の変更で行うことが多い。そのジャンプの瞬間、デコーダーが位置を探し直すため、目に見えて一瞬止まることがあります。
  • ベクター動画ツール(Lottie 等):線やフラットなUIには適しています。しかし、複雑なライティング、毛髪、立体マテリアルのプリレンダリング映像は組み込みにくい。
  • 状態ロジックがビジネスコードに散在する:どの区間が何秒から何秒まで再生されるか、ホバーで何が起きるか、すべて開発者の手書きです。アニメーションを変更すると、コード側のタイムテーブルも修正が必要になります。
従来の体感

複数のMP4を切り替えたり、長い動画の再生位置を変えたり。操作が多いと、ディスクを早送り・巻き戻ししているようで、つなぎ目で破綻しやすいです。

理想の体感

アニメーション自身が「デフォルト / ホバー / 成功」という状態を持ちます。ページは「成功に移行」と伝えるだけで、遷移がどのフレームから始まるか、巻き戻せるかは、アニメーションリソース側が把握しています。

AVAL が目指すのは、まさにこの小さくても精巧なインタラクション

リリースデモ(約37秒)をご覧ください。一つだけ押さえれば十分です:映像が操作に応じて状態を変え、できるだけ動画のシークバーをドラッグしている感じにしない。実際に触ってみたい方は、公式サイト pixelpoint.io/aval へ。

リリースデモ。 草地の待機状態などの状態切替を収録。サイト内のWeb版は再生しやすい形です。インタラクティブな実物は 公式サイト でどうぞ。

AVAL とは何か(わかりやすく)

AVAL = ファイル形式 + コンパイラ/プレイヤー一式。

  • アーティスト / モーションデザイナーが短いアニメーションを作成します(動画またはフレーム画像)。
  • コンパイラで単一の .avl ファイルにまとめます。中には映像と、「どんな状態があり、どう遷移するか」の説明書が含まれます。
  • Webページにはプレイヤータグ <aval-player> を置き、このファイルを指定します。再生はブラウザが担当。ビジネスコードは「success に切替」と伝えるだけです。
アニメ作成 Blender 等から出力 短編 / シーケンス画像 .avl に変換 映像 + 状態定義 コンパイラでパック Webで再生 ホバー / クリック 状態名を送るだけ イメージ:業務側は「1.2秒から2.0秒まで再生」を覚える必要はなく、状態名だけを知っていればよいです。
一連の流れ。 複雑な映像は従来通り3Dやプリレンダリングで作成。インタラクション定義はファイルに含まれ、Web側の負担は減ります。

その位置づけは明確に絞られています:ファイルサイズが小さく、CPU使用率が低く、Blender などで作った小アイコン向けのモーション。Webサイト上の精巧で短いインタラクティブアニメであって、長尺動画や映画ではありません。

公式サイトに載っている機能を、わかりやすく解説

以下は「あなたがどう感じるか」の視点で書きます。括弧内は公式サイトのキーワードです。原文と照らし合わせたい場合にどうぞ。本文はまず日本語の説明で十分です。

1. アニメーションが複数の「状態」を持つ

例:デフォルト、ホバー、プレス、成功。各状態でどの部分を再生するかは、アニメーション作成時に定義します。ページは状態名を送るだけ。後から来た指示が優先されます。素早く乗せて戻すような操作では、最新の意図が尊重されます。

deterministic state graph · latest-wins

2. 切替はあらかじめ決めたフレームに合わせる

デフォルトからホバーへの遷移は、アニメーション作成時に定めたフレームから始まります。場当たり的にカットすることはありません。「この区間を再生してから次へ」「ハードカット」「途中まで進んで巻き戻る」などの指定が可能です。

frame-accurate routes · portals / finishes / cuts / reversals

3. ループの継ぎ目で「巻き戻し」をしない

普通の動画がループするとき、再生位置が0に戻るため、そこで引っかかりが生じ得ます。AVAL の目標は、継ぎ目で次の同じループへシームレスに進み、そのようなハードジャンプを減らすことです。

seekless loops

4. 透明背景も可能

小アイコンは通常、背景を透過してWebページに重ねます。通常の動画フォーマットは透明にあまり対応していません。AVAL は透明情報をパックする方法を用い、ブラウザのグラフィックスAPIで分解・合成します。

packed-alpha transparency · WebGL2

5. 可能な限りブラウザ標準機能を使う

デコードや描画は、最新のブラウザが持つ動画デコード・グラフィックス機能を積極的に使い、巨大なWASMプレイヤーを追加で読み込む必要をなくします。

WebCodecs · WebGL2 · web-native runtime

6. 再生できない場合は、用意した静止画を表示

ブラウザが古い、ユーザーが「視覚効果の低減」を設定している、マシンの処理能力が足りない、といった場合に、Webページ側で用意したフォールバック画像を表示します。フォールバック画像は .avl ファイルには含まれず、常にページ側の所有です。

progressive fallback · host-owned markup

デフォルト ゆっくりループ ホバー 別のループ マウス乗せる → 遷移 マウス離す → 逆再生も可 イメージ:状態名は自由に定義。遷移の再生方法は .avl 内に記載。
アニメーションにスイッチパネルを取り付けるイメージ。 ページがスイッチを切り替えると、アニメーション側が遷移方法を知っています。

今できること、そして期待してはいけないこと

とりあえず見てみたい

公式サイト pixelpoint.io/aval で直接試せます。またはリポジトリをクローンしてplaygroundを動かせます(リポジトリのドキュメント参照)。現在はテクニカルプレビューであり、今後変更される可能性があります。

自分のWebページに組み込む場合(概念的な流れ)

統合はおおよそ次のようになります(イメージ):

<aval-player src="/icon.avl" width="320" height="320">
  <img slot="fallback" src="/icon.png" alt="">
</aval-player>
// ビジネス側は状態名を渡すだけ
await player.setState("success");
導入状況に注意。 READMEにはnpmパッケージ名と 1.0.0 が記載されていますが、2026年7月16日時点でnpm公式レジストリを確認したところ、これらのパッケージは見つかりませんでした(404)。最新情報はリポジトリと公式サイトを確認してください。試す場合は、GitHubリポジトリを優先し、npm install が必ず成功するとは想定しないでください。

まだ本番デフォルトにすべきでない理由

  • リポジトリは自らtechnical previewと位置づけており、急速に変化します。
  • TODOには、Safari対応、Reactラッパー、追加のコーデック、より良いデモなどが挙がっています(Safari関連の修正コミットは存在しますが、「対応」かどうかは手元での確認が必要です)。
  • アニメーション制作者は追加の作業が必要です。映像を書き出すだけでなく、状態と遷移ルールを定義する必要があります。これは「MP4を置くだけ」ではありません。
  • ブラウザの機能差:再生できない場合は用意した静止画にフォールバックし、インタラクション体験は低下します。

まず問題を覚え、次に製品を覚えましょう。Web上の「短くて精巧で、操作に応じて変化する」プリレンダリングアニメーションは、従来の方法だと引っかかりやすい。AVAL は映像 + 状態定義書を一つのファイルにまとめ、ページ側は状態名を送るだけで済むようにします。現在は見ることも、クローンして試すこともできますが、まだ初期のプレビュー段階です。磨き上げられた業界標準として扱わないでください。

主な情報源:公式サイト · GitHub · リリース告知。文中の Airbnb Lava は公開情報で言及された比較対象であり、第三者による検証は行っていません。