Web小アニメ、操作で一瞬止まる? AVAL がプリレンダリング動画に「ホバー / クリック / 成功」を理解させる
課題:Web上の立体的な小アイコンを動かし、マウスや状態に追従させたいとき、普通の動画だとかくつくことが多い。AVAL は、そんな短いアニメーションのための専用フォーマットとプレイヤーです。
- 問題:Web上の小さい3Dアイコンやお気に入りボタンなど、「短くて、見た目が良くて、さらにインタラクティブ」なアニメーションは、普通の動画でループや状態切替を行うとかくつきやすい。Lottie では複雑なレンダリング映像を組み込むのが難しい。
- 何か:AVAL は Web 専用のインタラクティブ動画フォーマット(拡張子
.avl)+ ブラウザプレイヤーです。アニメーションの状態はファイル内に書き込まれ、ページは「今、成功状態にする」と伝えるだけです。 - なぜスムーズか:ループの継ぎ目で「巻き戻して再生」をしないようにし、切替時はアニメーション作成時に定めたフレームに合わせます。透明度も対応。ブラウザが非対応なら、用意した静止画を表示します。
- 現状:オープンソースのテクニカルプレビューです。公式サイトでデモを見たり、リポジトリをクローンして試せます。同種のクローズドなアイデアは外部でも言及されましたが(例:Airbnb Lava)、AVAL は直接触れるオープンソース実装です。
立場の補足:本稿の内容は、プロジェクト公式サイトと GitHub ドキュメントに基づく自己記述です。以下は問題点と機能の解説であり、第三者が行った負荷試験の結果ではありません。
先に課題:Web小アニメ、見た目の良さと「操作できること」はしばしば相反
Webページにレンダリング済みの短いアニメーション(例:Blender で作った立体的な小アイコン)を置きたいとします。それは静かにループし、マウスを乗せると変化し、クリックすると「お気に入り登録 / 読み込み成功」に変わる。これを現在の普通の動画で行うと、状態が変わる瞬間、映像が一瞬止まったり、フレームが飛んだりしやすいのです。
なぜ困るのか? 大きく分けて3つの理由があります:
- 普通の動画は「飛び」が生じる:ループの終端で頭に戻る必要があります。また「デフォルト」から「ホバー」への切替も再生位置の変更で行うことが多い。そのジャンプの瞬間、デコーダーが位置を探し直すため、目に見えて一瞬止まることがあります。
- ベクター動画ツール(Lottie 等):線やフラットなUIには適しています。しかし、複雑なライティング、毛髪、立体マテリアルのプリレンダリング映像は組み込みにくい。
- 状態ロジックがビジネスコードに散在する:どの区間が何秒から何秒まで再生されるか、ホバーで何が起きるか、すべて開発者の手書きです。アニメーションを変更すると、コード側のタイムテーブルも修正が必要になります。
複数のMP4を切り替えたり、長い動画の再生位置を変えたり。操作が多いと、ディスクを早送り・巻き戻ししているようで、つなぎ目で破綻しやすいです。
アニメーション自身が「デフォルト / ホバー / 成功」という状態を持ちます。ページは「成功に移行」と伝えるだけで、遷移がどのフレームから始まるか、巻き戻せるかは、アニメーションリソース側が把握しています。
AVAL が目指すのは、まさにこの小さくても精巧なインタラクション
リリースデモ(約37秒)をご覧ください。一つだけ押さえれば十分です:映像が操作に応じて状態を変え、できるだけ動画のシークバーをドラッグしている感じにしない。実際に触ってみたい方は、公式サイト pixelpoint.io/aval へ。
AVAL とは何か(わかりやすく)
AVAL = ファイル形式 + コンパイラ/プレイヤー一式。
- アーティスト / モーションデザイナーが短いアニメーションを作成します(動画またはフレーム画像)。
- コンパイラで単一の
.avlファイルにまとめます。中には映像と、「どんな状態があり、どう遷移するか」の説明書が含まれます。 - Webページにはプレイヤータグ
<aval-player>を置き、このファイルを指定します。再生はブラウザが担当。ビジネスコードは「success に切替」と伝えるだけです。
その位置づけは明確に絞られています:ファイルサイズが小さく、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
今できること、そして期待してはいけないこと
とりあえず見てみたい
公式サイト 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");
npm install が必ず成功するとは想定しないでください。まだ本番デフォルトにすべきでない理由
- リポジトリは自らtechnical previewと位置づけており、急速に変化します。
- TODOには、Safari対応、Reactラッパー、追加のコーデック、より良いデモなどが挙がっています(Safari関連の修正コミットは存在しますが、「対応」かどうかは手元での確認が必要です)。
- アニメーション制作者は追加の作業が必要です。映像を書き出すだけでなく、状態と遷移ルールを定義する必要があります。これは「MP4を置くだけ」ではありません。
- ブラウザの機能差:再生できない場合は用意した静止画にフォールバックし、インタラクション体験は低下します。
まず問題を覚え、次に製品を覚えましょう。Web上の「短くて精巧で、操作に応じて変化する」プリレンダリングアニメーションは、従来の方法だと引っかかりやすい。AVAL は映像 + 状態定義書を一つのファイルにまとめ、ページ側は状態名を送るだけで済むようにします。現在は見ることも、クローンして試すこともできますが、まだ初期のプレビュー段階です。磨き上げられた業界標準として扱わないでください。
主な情報源:公式サイト · GitHub · リリース告知。文中の Airbnb Lava は公開情報で言及された比較対象であり、第三者による検証は行っていません。
AVAL がプリレンダリング動画のホバー・クリック・成功状態を一つのファイルに格納。Web側は動画を無理に切り替え不要に
Pixel Point の Alex Barashkov 氏が AVAL をオープンソース公開。Web向け短編アニメに状態定義書を付与し、カクつきを防ぐ仕組みを一枚の図で解説します。
↓ 一枚で読了 · 動く図あり
Web上の小アニメ、例えば立体アイコン、お気に入りボタン、ローディング表示などは、見た目が精巧で操作に応じて変化する必要があります。よくある方法は動画の切り替えです。ループ終端で巻き戻し、状態切替は再生位置の変更で行うため、その瞬間に引っかかりやフレーム飛びが生じやすい。
ループは巻き戻し、状態切替は再生位置変更。つなぎ目で破綻しやすい。
アニメーションが状態と遷移ルールを持ち、定義済みフレームから開始。ループは極力巻き戻さない。
AVAL は Web 専用のファイル形式(拡張子 .avl)とプレイヤーのセットです。アニメーション作成後、コンパイラが映像と状態ルールをパック。Webページにプレイヤータグを置き、ビジネスコードは状態名を送るだけです。
各状態は遷移開始フレームを定義。マウスを乗せて戻すような操作では最後の指示が優先されます。ループ終端でも頭に戻らず、次の同じループへシームレスに進みます。
- 透明背景:背景を透過した小アイコンをWebページに重ねる。透明情報をパックする方法で、ブラウザで分解・合成します。
- 軽量な実行:デコードはブラウザ標準機能を積極的に利用し、巨大なプレイヤープログラムを追加で読み込む必要なし。
AVAL は 2026年7月13日に GitHub で公開されました。本記事の執筆時点は 2026年7月16日です。リポジトリは graph / format / compiler / player-web / element の5パッケージで構成。下記の数字のうち、スターとフォークは GitHub の公開データ、サイズ上限は Pixel Point プロジェクトによる独自計測です。
- × Safari は未安定
- × H.264 のみ
- × React ラッパー未対応
