Claude モーション実践ガイド:完全プロンプト・調整手法・書き出し手順

Florence の Motion Lab をもとに、短いタイトルアニメーションから始めて、イヤホン、液体クロム、キャラクターアニメーションの制作手順を学びます。

著者:Florence (@flxrnc)10-11 · 25分

ネット上には「プロンプト1文(One-shot)で息をのむようなモーションを生成」という言葉が溢れており、一言入力するだけで洗練されたアニメーションが手に入るかのように見えます。しかし実際に手を動かしてみると、別の現実に直面するはずです。白いセラミックが安っぽいプラスチックに見えたり、金属の反射が文字を覆い隠してしまったり、ケースの蓋が開く瞬間に余計な1フレームが止まったりします。「動く」から「美しい」への間にある差は、こうした問題を一つひとつ修正していく過程そのものです。

Claude Opus 5.5 でモーションを制作するには、まずデザインを具体的に伝える必要があります。外装の材質は何か、光はどこから当たるのか、カメラはいつドリーインするのか、何フレーム目から蓋が開き始めるのか。Claude はこれらの要望をアニメーションコードとして書き出し、あなたはその静止画やマルチフレームの一覧画像から問題を見つけ出し、フレーム番号とパラメータを添えて修正を依頼します。蓋が開くタイミングを早めたい、跳ね返りを小さくしたいと思ったら、対応する時間や数値を直接修正すればよいのです。

ここでは4秒のタイトルアニメーションから始めて、プロンプトの作成、プレビュー、画面の修正、効果音の追加、書き出しまでの手順をひと通り案内します。そのうえで、イヤホン、リキッドクロムのテキスト、3Dマスコットの完全な作り方を分解して解説します。プロンプトは日本語と英語の双方に対応し、日本語で理解・編集しながら英語原文と照らし合わせることができます。最初のプロンプトと各ラウンドの修正指示を分けて記載しているため、そのまま真似して進めることも、完成映像がどのように調整されていったのかを理解することもできます。


1. なぜ Claude にアニメーションコードを書かせるのか

アニメーションをコードとして記述する最大のメリットは、修正すべき箇所が明確になることです。 イヤホンケースの蓋が開くのが遅すぎるなら、開く時間帯のコードを修正します。金属がプラスチックのように見えるなら、マテリアルや反射環境の設定を変更します。プロダクト表示、テキストアニメーション、キャラクターの短いループも、すべてこのように項目ごとに調整できます。

Claude はあなたの要望に基づいて HTML と JavaScript を生成し、ブラウザがそのコードを各フレームとして描画し、FFmpeg がそれらのフレームを MP4 や GIF に合成します。デザイン要件が画面の見た目を決め、コード内の時間とパラメータがその動き方を決定します。

  • 静止できる:画面の状態を時間 t の関数として記述し、アセット、依存関係のバージョン、描画環境を固定すれば、まったく同じ瞬間を再描画して修正前後を比較できます。
  • パラメータを調整できる:位置、照明、カメラ、イージングカーブがコードで制御されているため、修正箇所が明確です。
  • 画像を見てから修正できる:静止画や複数フレームの一覧画像を Claude に渡し、オブジェクトのめり込み、文字を隠す反射、動作が遅すぎるフレーム番号を指摘して該当コードを修正させ、同じフレームのビフォーアフターを比較できます。

プロンプトの使い方:日本語は理解や編集用、英語は作者オリジナルの完全な原文です。送信時はどちらか一方を選択すればよく、両方を一緒に貼り付ける必要はありません。コマンド、API 名、パラメータはそのまま維持してください。事例内の「追加指示」は直前の結果を確認した後に送る修正指示であり、初回生成時は最初のプロンプトのみを送信します。

プロンプトの末尾には、以下の汎用レンダリング要件を追加してください。これにより、生成されたアニメーションの静止、検証、書き出しが容易になります。

肝心なのは、時間を外部からの入力とし、PCの現在のシステム時計に依存させないことです。window.renderAt(t) で指定した時刻を描画できるようにし、URL に ?t= が付いている場合はリアルタイムのアニメーションループを停止させ、フォント、テクスチャ、シーンの準備が整ってから window.__ready = true を設定します。静止用の関数を追加しただけでバックグラウンドのアニメーションを走らせたままにすると、スクリーンショットが次のフレームで上書きされてしまう恐れがあります。

日本語訳

# レンダリング要件:任意のモーションプロンプトの下に貼り付けて使用
単一ファイルの自己完結型 HTML を出力してください。プロンプトで指定されたライブラリのみを使用し、バージョンは必ず固定してください。
フォントおよび上記で固定されたライブラリを除き、いかなるネットワークリクエストも行わないでください。
すべてのフレームは、秒単位の時間 t の純粋関数である必要があります。
JavaScript でモーションを駆動する場合は、そのフレームを正確に描画するための window.renderAt(t) を必ず公開してください。
CSS keyframes、Web Animations API、SVG、Canvas 2D、または WebGL を使用してアニメーションを作成してください。
Date.now の使用は厳禁、setTimeout や setInterval によるアニメーション開始は厳禁、シード値のない Math.random の使用は厳禁です。
ループモーション:第 0 フレームから第 N-1 フレームまでのみを描画し、第 N-1 フレームは第 0 フレームへと滑らかにつながらなければなりません。
英語原文 · 汎用レンダリング要件(完全・コピー可能)
# The render contract: paste it under any motion prompt
Output one self-contained HTML file. Only the libraries the prompt names, pinned to a version.
No network requests except fonts and those pinned libraries.
Every frame must be a pure function of time t, in seconds.
If JavaScript drives any motion, expose window.renderAt(t) that draws exactly that frame.
Animate with CSS keyframes, the Web Animations API, SVG, Canvas 2D or WebGL.
No Date.now, no setTimeout or setInterval starts, no unseeded Math.random.
Loops: render frames 0 to N-1 only, and frame N-1 must flow into frame 0.
モーションを修正可能な完成映像に仕上げる手順
  1. 1 · デザイン要件の言語化主体・質感・カメラ・絵コンテ・フレーム数
  2. 2 · Claudeによるコード生成依存関係を固定し、時間 t で状態を制御
  3. 3 · ブラウザでのレンダリングキーフレームを静止確認し、PNG連番を出力
  4. 4 · 検証と動画書き出しフレーム番号を指定して修正し、FFmpegでエンコード

問題のあるフレームが見つかったら、フレーム番号をもとにコードへ戻り、関連パラメータやカメラを調整して該当フレームの変化を比較検証します。


2. 「高級感・スタイリッシュ」を具体的な指示に書き換える

「高級感がある、モダン、スタイリッシュ」といった言葉は感覚を伝えていますが、画面をどう作るべきかは何も指示していません。モデルは質感、ライティング、動きを勝手に選び、あなたも次にどこを直せばいいのか指摘しにくくなります。

まずはこれらの感覚をデザイン要件に変換します。外装の材質は何か、光はどこから当てるか、カメラはいつドリーインするか、ケースの蓋は何フレーム目で開けるか、不要な装飾は何か。以下のイヤホンの検証を見ると、その違いが直感的に分かります。

以下の2つのバージョンは、どちらも Claude を使ってワイヤレスイヤホンのアニメーションを作成したものです。左側の装飾と、右側の質感・ライティング・開閉アクションにどのような違いがあるか見比べてみてください:

ワイヤレスイヤホン A/B 実レンダリング比較:左側は 27 語の曖昧なプロンプトで生成。右側は 448 語の具体的プロンプトに 4 ラウンド計 15 回の修正を加えて生成。
  • 左側(曖昧なプロンプト A):わずか 27 語で「スタイリッシュ、高級感、モダン」とだけ指示。このバージョンでは濃紺の背景、光輪、パーティクル、回転するイヤホン、勝手に追加されたキャッチコピーが現れました。
  • 右側(具体的なプロンプト B):448 語の英語を使用し、モデルの寸法、セラミックとクロムの材質、3 点照明の色値と強度、開蓋前の予備動作、スプリングのパラメータ、禁止項目まで明記しました。

左側は初稿のままで追加修正は行わず、約 30 分かかりました。右側はビジュアル面でさらに 4 ラウンド・計 15 回の修正を重ねて約 90 分、音響面で別途 12 回の修正を行いさらに約 90 分かかりました。右側の完成映像は、デザインを具体的に言語化してから、1 ラウンドずつ調整を重ねて生み出されたものです。制作に再利用する際も、「要件を具体的に書く → 結果を見る → 修正する」という順序で進めます。

具体的には次のように記述できます:

  • 「高級感のある質感」を材質パラメータにする:セラミック外装はサテンホワイト #F4F1EC(粗さ 0.38、クリアコート 0.35)(粗さが低いほど反射がシャープになり、クリアコートは表面に透明なハイライト層をさらに加えます)、金属部分はクロムメッキ(金属度 1.0、粗さ 0.05)、イヤホン収納部のトレイのみ Claude のブランドカラーであるオレンジ #D97757 を使用。
  • 「プロ仕様のスタジオライティング」を 3 点照明システムにする:キーライトはウォームホワイト #FFF4E8(強度 3.0、左前上方に配置し、柔らかいソフトシャドウを投影)、フィルライトはかすかに青みがかった #E8EEF5(強度 0.6、右下に配置して暗部を補正)、リムライトはピュアホワイト #FFFFFF(強度 4.0、右後上方に配置して輪郭を強調)。さらにスタジオ反射環境を構築し、金属表面に明暗の光の帯が映り込むようにする。
  • 「モダンなカメラワーク」を明確な視野角と軌道にする:視野角(FOV)を 30° に指定。方位角は 34° から 10° へ移動して再び戻る。2.0 秒時点でドリーインを開始し、イヤホンが上昇するのに合わせてカメラと注視点の高さも引き上げる。
  • 「生き生きとして自然な開蓋アニメーション」をスプリングと開蓋前の予備動作にする:開蓋前の 0.72 〜 0.95 秒にかけて、まず「予備動作(Anticipation)」を実行——ケースの蓋を逆方向に 1.5 度押し込み、本体を 2% わずかに押しつぶして、3 フレーム静止して力をためる。その後、減衰比 0.6 で蓋が 100° まで跳ね上がり、約 10% オーバーシュートして 1.4 秒までに安定するよう指定。
  • 「ミニマルでクリーン」を明確な禁止項目(BANNED)にする:青紫のグラデーション、発光球体、ブルーム(全体発光)、ネオンライト、散らばるパーティクル、その場回転するターンテーブル台座、黒背景、派手なキャッチコピーを厳禁。

以下は左側の曖昧なプロンプトの日本語訳です。英語原文を展開して対照できます:

日本語訳

ワイヤレスイヤホンのスタイリッシュな 3D プロダクトモーションを作成してください。高級感とモダンさがある見た目にしてください。three.js を使用した単一ファイルの自己完結型 HTML、960x1080、6 秒ループ。
英語原文 · イヤホンの曖昧なプロンプト(コピーしてそのまま使えます)
Create a cool 3D product animation for a pair of wireless earbuds. Make it look premium and modern. One self-contained HTML file using three.js, 960x1080, 6-second loop.

以下は右側の完全なビジュアルプロンプトです。再利用したい場合は、まず製品の説明を差し替え、1 巡目はアクションと材質の数値をそのまま残します。結果を確認したあと、目的に応じて項目ごとに調整してください。

日本語訳

GOAL: ワイヤレスイヤホンのスタジオプロダクト短編映像:イヤホンケースが開き、イヤホンが持ち上がって視聴者側を向き、その後すべてがカチッと音を立てて閉じる。
OUTPUT: 単一ファイルの自己完結型 HTML、jsdelivr (importmap) 経由で three.js 0.160.0 を読み込み、960x1080。
TIME: 6 秒ループ、60 fps = 360 フレーム、120 BPM(1 拍 = 30 フレーム)。重要なアクセントをビートに合わせる。

MODEL(1 単位 = 1 cm、面取りを施した基本ジオメトリ):イヤホンケース 6.0 x 4.6 x 2.2、エッジの面取り半径 1.0、3.3 の位置で分割ライン、背面ヒンジ蓋、分割ラインの面取り 0.06、継ぎ目に沿って太さ 0.045 のクロムメッキラインを 1 周配置。内部:D97757 のトレイ面、2 つの暗色楕円スロット。イヤホン:楕円球のヘッド部 1.6 x 1.5 x 1.5、旋盤加工シリコン製イヤーピース、クロムメッキ製ボトムキャップ付きの 1.6 楕円ステム、暗色のメッシュ穴。イヤホンを収納した際、ヘッド部がトレイ面と高さが揃う。

LOOK: サテンセラミックホワイト F4F1EC(粗さ 0.38、クリアコート層 0.35)、クロムメッキ(金属度 1、粗さ 0.05)、トレイ面のみ D97757 を使用、インクブラック 1C1B1A、イヤーピース E4E0DA。背景は中央の F0EDE8 から四隅の DEDAD3 へディザリンググラデーション。キーライト FFF4E8 強度 3.0 は左前上方に配置しソフトシャドウ、フィルライト E8EEF5 強度 0.6 は右下に配置、リムライト FFFFFF 強度 4.0 は右後上方に配置。反射:コード構築された PMREM スタジオ(ウォームグレーのドーム、天井とキーライトのソフトボックス、リムライトのライトバー)。コンタクトシャドウ、不透明度 0.55。Neutral トーンマッピング、8% のビネット、毎フレーム固定シード値による 2% のグレインノイズ。

SHOTS:
0.0 〜 0.5 秒:幅 2.4 のスタジオライトバー(5.5 秒からの継続)が左から右へスイープし、閉じたケースの蓋と継ぎ目の上を輝く光のスイープが走り抜ける。
0.72 〜 0.95 秒:予備動作:ケースの蓋を 1.5 度きつく押し込み、本体を 2% 押しつぶし変形させ、3 フレーム保持。
1.0 秒:ケースの蓋が 100 度まで弾け開く(減衰 0.6、約 10% オーバーシュート、1.4 秒で安定)。
1.5 秒:イヤホンがスロットから 4.0 浮き上がる。右耳が先に上昇し、左耳は 4 フレーム遅れて追従(減衰 0.7)。上昇開始後 8 フレーム目から外側へ 14 度傾き、より緩やかなスプリングでカメラに向かって 35 度回転(減衰 0.5):ステムが所定位置へスイングして安定。
2.0 秒:ドリーイン。
2.4 〜 4.0 秒:静止ホールド。イヤホンが 1 秒の正弦波周期で 0.05 浮遊して漂う。3.0 秒:2 本目の光のスイープがイヤホンを横切る。
4.0 秒:イヤホンの向きが元に戻り(0.2 秒)、下降する(easeInOutCubic、0.45 秒)。収まる瞬間に 0.05 のマグネット吸着による沈み込み感を持たせる。
4.75 秒:ケースの蓋が落下し(easeInCubic)、5.0 秒ジャストで閉じて 3 度リバウンドし、5.3 秒で安定。本体は衝撃で 1.5% 跳ね返る。
5.5 秒:次のサイクルの光のスイープが開始。

CAMERA: fov 30、カメラは決して静止しない。方位角は 5.6 秒から 4.0 秒にかけて 34 度から 10 度へ推移(easeInOutSine)、5.6 秒までに戻る(easeInOutCubic)。距離は 21 から 20.2 へとゆっくりとわずかに移動し、2.0 秒で 16 へドリーイン(easeOutExpo、0.8 秒)、4.0 〜 5.6 秒で戻る(easeInOutCubic)。イヤホン上昇時:仰角は 12 度から 19 度へ上昇、注視点のターゲット高さは 2.3 から 4.2 へ移動。

BANNED: 青紫グラデーション、発光球体、ブルーム、ネオン、レンズフレア、パーティクル、汎用的な自転台座、暗い背景、テキスト。

QA: renderAt(t) は時刻 t の画面を厳密に描画し、シード付きノイズのみを使用。各キーインパクトポイントの前後に静止フレームをレンダリング。第 359 フレームから第 0 フレームへ滑らかにシームレスループ接続。
英語原文 · イヤホンの完全なプロンプト(コピーしてそのまま使えます)
GOAL: a studio product film for wireless earbuds: case opens, buds rise to the viewer, everything clicks shut.
OUTPUT: one self-contained HTML file, three.js 0.160.0 from jsdelivr (importmap), 960x1080.
TIME: 6-second loop, 60 fps = 360 frames, 120 BPM (1 beat = 30 frames). Hits land on beats.

MODEL (1 unit = 1 cm, primitives with bevels): case 6.0 x 4.6 x 2.2, 1.0 edge radius, split at 3.3, back-hinged lid, 0.06 split bevel, 0.045 chrome wire around the seam. Inside: D97757 deck, two dark elliptical wells. Buds: ellipsoid head 1.6 x 1.5 x 1.5, lathed silicone tip, 1.6 oval stem with a chrome end cap, dark grille. Seated heads sit flush with the deck.

LOOK: satin ceramic white F4F1EC (roughness 0.38, clearcoat 0.35), chrome (metalness 1, roughness 0.05), D97757 on the deck only, ink 1C1B1A, tips E4E0DA. Backdrop F0EDE8 center to DEDAD3 corners, dithered. Key FFF4E8 3.0 upper front left, soft shadows; fill E8EEF5 0.6 low right; rim FFFFFF 4.0 upper back right. Reflections: PMREM studio built in code (warm gray dome, overhead and key softboxes, rim strip). Contact shadows, opacity 0.55. Neutral tone mapping, 8% vignette, 2% grain seeded per frame.

SHOTS:
0.0 to 0.5 s: a 2.4-wide studio strip (from 5.5 s) sweeps left to right, glinting across the closed lid and seam.
0.72 to 0.95 s: anticipation: lid presses 1.5 degrees shut, case squashes 2%, hold 3 frames.
1.0 s: lid springs to 100 degrees (damping 0.6, about 10% overshoot, settled by 1.4 s).
1.5 s: buds rise 4.0 out of the wells, right first, left 4 frames later (damping 0.7). From rise frame 8 they tilt 14 degrees outward and turn 35 degrees to camera on a looser spring (damping 0.5): stems swing through and settle.
2.0 s: camera push-in.
2.4 to 4.0 s: hold, buds float 0.05 on a 1 s sine. 3.0 s: second glint crosses the buds.
4.0 s: buds straighten (0.2 s) and descend (easeInOutCubic, 0.45 s), seating with a 0.05 magnetic dip.
4.75 s: lid falls (easeInCubic), shuts exactly at 5.0 s, bounces 3 degrees, settles by 5.3 s; case recoils 1.5%.
5.5 s: next glint starts.

CAMERA: fov 30, never parked. Azimuth 34 to 10 degrees from 5.6 s to 4.0 s (easeInOutSine), back by 5.6 s (easeInOutCubic). Distance creeps 21 to 20.2, pushes to 16 at 2.0 s (easeOutExpo, 0.8 s), returns 4.0 to 5.6 s (easeInOutCubic). Buds up: elevation 12 to 19 degrees, target height 2.3 to 4.2.

BANNED: purple or blue gradients, glow orbs, bloom, neon, lens flares, particles, generic spinning turntables, dark backgrounds, text.

QA: renderAt(t) draws exactly time t, seeded noise only. Stills around every hit; frame 359 flows into frame 0.
展開:イヤホン事例の 4 ラウンド計 15 回にわたるビジュアル修正記録(日英対照)

これら 15 回の修正では、反射、蓋の厚み、イヤホンの造形、ライトスイープ、開閉タイミングを順次調整しています。最後に、予備動作が第 57 〜 60 フレームの 4 フレーム止まっていた問題は、リリース時刻を半フレーム前倒しして第 60 フレームから開き始めるようにして解決しました。これらの追加指示はトラブルシューティングの実例として参考にし、該当する問題が起きた際に活用してください。

日本語訳

# 第 1 ラウンド、初版ビルド後(0 秒、1.25 秒、2.9 秒、4.9 秒で静止フレームをキャプチャ)
白い外装が背景と同化してしまい、クロム素材がくすんだ灰色に見える。スタジオのドームライトを約 3 分の 1 に下げ、ソフトボックスを強めて、シャドウ側をしっかり落とし、クロムに明暗のストライプが現れるようにする。
開いたケースの蓋が平らな分厚い板のように見える。内側をくり抜く:フレームの厚み 0.16、内側の凹みキャビティの深さ 0.62、上面内側の面取り 0.22。
暗色の丸いグリルが目のように見える。細長いスリット状のバーに変更する。
イヤホンケースの底面に 2 つの黒い影が透けて見える:高さ 0.3 にあるスロット底面が、底部のカーブした外壁を突き抜けている(この高さでは外壁が内側に 0.29 絞り込まれている)。スロット底面の高さを 0.5 に引き上げる。
内側のベーストレイがサーモンピンク色に見える。粗さを 0.7 に設定。
# 第 2 ラウンド、ピクセル測定後
正面と上面の明度が同じで、右側が背景に埋もれている。キーライトを (-7, 12, 8) に、リムライトを (2, 8, -12) に調整し、左前上方と右後上方の位置関係を維持。トップソフトボックスを 2.2、露出を 0.8 に設定。
グレージングライト(掠め光)がフラッド照明になってしまっている:ライトバーのオン/オフによって 178,864 ピクセルもの明暗が変化している。高さ 60 のライトバーが正面全体を照らしてしまっているため。ライトバーは反射の中だけに存在させ(鏡面反射の参照用に 2 つ目の PMREM を使用し、ディフューズ反射には静的スタジオを使用)、要件定義の幅 2.4 に戻す。
露出を 0.9 に調整、メインソフトボックスを 4.5 に調整して、セラミックの質感がしっかり白く見えるようにする。ベーストレイの鏡面反射を 0.3 に設定し、かすめ光の反射で D97757 が白飛びして薄まらないようにする。
スロット開口部のエッジに 0.07 の機械加工された面取りを追加。
イヤホンのヘッド部がネズミの頭のように見える。ステムを外側に移動し、球状のイヤーピースを短い音導管と平らなシリコンイヤーピースに置き換え、グリルをヘッド部からステムへ移す(すでに 2 回も目に見えると誤認された)。
アームの昇降を高速化:2.3 秒までに高い目標位置に到達させ、ドリーイン中にもイヤホンヘッドの上に構図の余白を確保できるようにする。
# 第 3 ラウンド、各ライトスイープを個別に分離確認後
1 本目のライトスイープが弱すぎて目を引かない。クリアコートの粗さを 0.08 に、ライトバーのピーク強度を 24 に設定し、スイープ角度を -80 〜 0 度に調整して、第 0 フレームで光の帯がちょうど正面中央に来るようにする。
2 本目のライトスイープで蓋の内側キャビティ全体が光ってしまう(3.3 秒時点で 207,791 ピクセル)。ライトバーが平面領域の鏡面反射方向を横切っているため。仰角を 8 〜 61 度まで引き上げ、幅を 4.8 に設定:曲率を持つイヤホンヘッドとステムだけが光を捉えるようにする。
画面ホールドでカメラが完全に静止してしまっている:2.8 〜 4.0 秒の間に 0.4 のパン微小ドリーを追加。左イヤホンの浮遊は上昇動作と同様に右イヤホンより 4 フレーム遅らせる。
# 第 4 ラウンド、単一フレーム単位の微調整
予備動作が 3 フレームではなく 4 フレーム(57 〜 60 フレーム)静止している:スプリングがちょうど 1.0 秒時点で静止スタート点にあるため、アクセントとなるフレームでも押し込み姿勢のまま止まってしまっている。リリースを半フレーム前倒し(59.5/60 秒):第 57 〜 59 フレームは静止を維持し(モーションブラーのサブフレームを含む)、第 60 フレームを最初の開口フレームにする。
英語原文 · イヤホン映像修正(コピーしてそのまま使えます)
# Round 1, after the first build (stills at 0, 1.25, 2.9 and 4.9 s)
The white case melts into the backdrop and the chrome reads gray. Drop the studio dome to about a third and push the softboxes, so the unlit sides fall off and the chrome shows dark and bright bands.
The open lid reads as a flat slab. Hollow it: 0.16 rim, 0.62 deep cavity, 0.22 fillet at the ceiling.
The round dark grille reads as an eye. Make it a slim slot.
Two dark marks poke through the bottom of the case: the well floors at 0.3 sit outside the bottom arc, which insets the wall by 0.29 at that height. Raise the floors to 0.5.
The deck reads salmon. Roughness 0.7.
# Round 2, after measuring pixels
Front and top are the same value and the right side vanishes into the backdrop. Key to (-7, 12, 8), rim to (2, 8, -12), still upper front left and upper back right. Overhead softbox 2.2, exposure 0.8.
The glint is a flood light: strip on vs off changes 178,864 pixels because the 60-tall strip lights the whole face. Keep the strip in reflections only (a second PMREM for the specular lookup, the static studio for diffuse) and go back to the 2.4 width from the brief.
Exposure 0.9 and key softbox 4.5 so the ceramic reads white. Deck specular 0.3 so the grazing reflection stops washing out D97757.
Give the wells a 0.07 machined round-over.
The buds read as mouse heads. Move the stem to the outer side, replace the ball tip with a short nozzle and a flattened silicone cap, and move the grille off the head (it read as an eye twice) onto the stem.
Crane faster: reach the high target by 2.3 s, so the heads keep headroom during the push.
# Round 3, after isolating each glint
The first glint is too shy for a hook. Clearcoat roughness 0.08, strip peak 24, and shift the sweep to -80 to 0 degrees so the band is mid-face on frame 0.
The second glint flashes the whole lid cavity (207,791 pixels at 3.3 s) because the strip crosses the mirror direction of the flat faces. Raise it to 8 to 61 degrees elevation, 4.8 wide: only the curved heads and stems catch it.
The hold parks the camera: add a 0.4 dolly creep from 2.8 to 4.0 s. Float the left bud 4 frames behind the right, like its rise.
# Round 4, frame-perfect pass
The anticipation holds 4 frames (57 to 60), not 3: the spring starts at rest exactly on 1.0 s, so the beat frame is still the pressed pose. Release half a frame early (59.5/60 s): frames 57 to 59 hold, including their motion-blur subframes, and frame 60 is the first open frame.
展開:イヤホン事例のサウンドプロンプトと 4 ラウンド計 12 回の音響調整記録(日英対照)

初版のオーディオトラックはエネルギーの 80.6% が 60 Hz 以下に集中しており、重低音が開蓋、マグネット吸着、着底の音をかき消していました。12 回の音響調整は、低周波、ラウドネス、ピークタイミングを中心に行われました。まずサウンドプロンプトを送信して音声を生成し、その後の追加指示を照合しながら具体的な問題を解決していきます。

日本語訳

# サウンドプロンプト
A/B 動画用の BGM・SE を作成。サンプル音源は使用せず、ダウンロードも行わず、Web Audio API を使用してコード内ですべてのサウンドを合成。120 BPM、6 秒ループ、360 フレーム(60 fps)。各ヒットポイントおよび伴奏は、対応するビジュアルイベントの 1 フレーム後に発生。
伴奏:60 フレームごとにキック、16 分音符のシェイカー、ベースとパッドのコードは F、120 フレームで B♭、240 フレームで Gm、300 フレームで C。
右半分のみ:
44 〜 60 フレーム:リバースクレッシェンド。
60 フレームの蓋オープン:スナップ音、880 Hz のボディ共鳴音、120 Hz のこもったインパクト音。
90、94 フレームでマグネットのポップ音、119 フレームまで上昇する気流音。
96 〜 120 フレームでドリーインのクレッシェンド。
180 〜 216 フレーム、330 〜 30 フレームでライトスイープのきらめき。
240 〜 267 フレームで下降時の風切り音、270 フレームで着座スナップ音。
285 〜 300 フレームで閉じる動作へ向けた風切り音:スナップ音、200 Hz の重い打撃音、70 Hz のこもった打撃音。306、312 フレームで微小なクリック音。
ヒットポイントは伴奏より 3 〜 6 dB 高く、8 kHz 以上はカット、モノラルセーフ。2 回レンダリングし、2 回目の結果を採用。48 kHz ステレオ WAV、約 -14 LUFS、ピーク -1 dBTP。MP4 にマルチプレックス(多重化)し、デコード後の音声で各ヒットポイントを検査。
# サウンドの追加指示(12 項目)、そのまま送信
# 第 1 ラウンド、初回レンダリングの測定後(エネルギーの 80.6% が 60 Hz 以下、3.5% が 150 Hz 〜 6 kHz、中央値 58 Hz。ヒットポイントは伴奏より 0.5 〜 1.6 dB 高い程度。ボディ共鳴のピークが対応フレームより 2.5 〜 5 ミリ秒遅延)
1. 超低域がすべてを覆い隠している。B♭、G、C を 1 オクターブ上で演奏し(117、98、131 Hz)、ベースを 900 Hz まで開放、キックを 80 ミリ秒に短縮して 190 Hz のアタック感を持たせる。パッドを 5 dB 上げ、各ヒットポイントを 6 dB 上げ、微小クリック音はケース閉じ音よりそれぞれ 6 dB および 10 dB 低くする。
2. 各ボディ共鳴とこもったインパクト音をコサイン位相で開始し、アタックを 0.5 ミリ秒に設定して、最初の波形ピークが対応フレーム + 1 に来るようにする。
3. ドリーインのクレッシェンドに明確なピークを持たせる:第 121 フレームに向けて 60 ミリ秒指数関数的に上昇させ、その後 25 ミリ秒でカメラワークの終息部へと減衰させる。
4. ケース閉じからクリック 2 までの間(301 〜 313 フレーム)、伴奏のダッキングを 4 dB 深くする。
5. DC オフセットを除去:各チャンネルのループ平均値を差し引く。
# 第 2 ラウンド、2 回目レンダリングの測定後(全体のミックスは -14.0 LUFS だが、モバイル再生で重要な 200 Hz 〜 6 kHz では -22.9 LUFS しかない。ヒットポイントトラックから伴奏トラックを減算、K 特性:snap が -0.3、pops が -3.1 と -5.2、seat が -6.9、shut が +2.6、ticks が -0.8 と -4.3、push-in が -9.3 dB。キックのピークが対応フレーム + 1 より 5 ミリ秒遅延、オープン時のインパクトが 2.4 ミリ秒遅延)
6. ベースが依然として音量を支配している。ベースのサイン波を 3 分の 1 に下げ、ノコギリ波を 1200 Hz まで開放、ベースを 2 dB 下げ、パッドを 4 dB 上げてより明るくする(1600 Hz)。
7. ヒットポイントを伴奏より 3 〜 6 dB 高く調整:ドリーインクレッシェンド +8 dB、着座スナップ音 +6 dB、ポップ音 +4 dB、微小クリック音はケース閉じ音よりそれぞれ 4 dB および 8 dB 低くする。
8. キックも含め、最初の波形ピークが正確に対応フレーム + 1 に来るよう各音色の位相を調整(コサイン開始、1 ミリ秒アタック)。
# 第 3 ラウンド、3 回目レンダリングの測定後(スマホ帯域で -17.5 LUFS、全体で -14.0 LUFS。スマホ帯域でのヒットポイント引く伴奏:snap 6.4、pops 5.6 と 3.5、seat 2.3、shut 8.4、ticks 3.0 と 1.8、push-in 3.0 dB。キックの最初のピークは対応フレーム + 1 に来ているが、幅の広い 2 つ目の波形ローブが 2.5 ミリ秒後に 10% 大きくなっている。リミッターのゲインリダクションが 4.4 dB に達している)
9. キックに 3 ミリ秒のトランジェントを付与(対応フレーム + 1 の後の 3 ミリ秒間でレベルを 65% まで低下)、アタック感を 3 dB 追加し、最大のピークが最初のピークになるようにする。
10. ケース閉じ音を 2.5 dB 下げ、微小クリック音は現在の位置を維持(クリック 2 はその後 3 dB ブースト)、着座スナップ音 +2 dB、ドリーインクレッシェンド +2 dB。
11. キックの 2 つ目の波形ローブがまだ 6% 大きい:アタック音の負の半周期がちょうどそこに重なっている。アタック音を 4 ミリ秒で減衰させ、キックのアタックを 0.5 ミリ秒にする。クリック音のボディを 12 ミリ秒で減衰させ、手前のリリース音がローブを反転させないようにする。
# 第 4 ラウンド、Chrome で多重化後の記事用 MP4 をデコード後(オフセット -0.002 ミリ秒、各ヒットポイントはすべて対応フレーム + 1 の 0.0 〜 1.3 ミリ秒後にあるが、AAC エンコードによってトゥルーピークが -1.3 から -0.4 dBTP に跳ね上がっている)
12. WAV を -2.2 dBTP にリミットし、デコード後の MP4 が -1 dBTP 以下を維持するようにする。-14 LUFS を維持。
英語原文 · イヤホンのサウンドと音響調整(コピーしてそのまま使えます)
# Sound prompt
Score the A/B video. Synthesize everything in code with the Web Audio API, no samples, no downloads. 120 BPM, 6 s loop, 360 frames at 60 fps. Each hit lands 1 frame after its visual event, and so does the bed.
Bed: kick every 60 frames, 16th shaker, bass and pad F, B flat at 120, G minor at 240, C at 300.
Right half only:
44 to 60 reverse swell.
60 lid snap: click, 880 Hz body, 120 Hz thump.
90, 94 magnetic pops, air lift to 119.
96 to 120 push-in swell.
180 to 216, 330 to 30 glint shimmer.
240 to 267 falling swish, 270 seat click.
285 to 300 whoosh into the shut: click, 200 Hz thock, 70 Hz thump; ticks 306, 312.
Hits 3 to 6 dB over the bed, nothing above 8 kHz, mono-safe. Render twice, keep the second pass. 48 kHz stereo WAV, about -14 LUFS, peak -1 dBTP. Mux into the MP4 and check every hit in its decoded audio.
# Sound follow-ups (12), exactly as they were sent
# Round 1, after measuring the first render (80.6% of the energy under 60 Hz, 3.5% in 150 Hz to 6 kHz, median 58 Hz; hits 0.5 to 1.6 dB over the bed; bodies peaking 2.5 to 5 ms after the frame)
1. The sub buries everything. Play B flat, G and C an octave higher (117, 98, 131 Hz), open the bass to 900 Hz, shorten the kick to 80 ms and give it a 190 Hz knock. Raise the pad 5 dB and every hit 6 dB, ticks 6 and 10 dB under the shut.
2. Start every body and thump in cosine phase with a 0.5 ms attack, so the first waveform peak sits on frame + 1.
3. Give the push-in swell a clear peak: 60 ms exponential rise into frame 121, then a 25 ms drop into the camera tail.
4. Duck the bed 4 dB from the shut through tick 2 (frames 301 to 313).
5. Remove the DC: subtract each channel's loop mean.
# Round 2, after measuring the second render (full mix -14.0 LUFS but only -22.9 LUFS in the 200 Hz to 6 kHz phone band; hit stem minus bed stem, K-weighted: snap -0.3, pops -3.1 and -5.2, seat -6.9, shut +2.6, ticks -0.8 and -4.3, push-in -9.3 dB; kick peak 5 ms and snap thump 2.4 ms after frame + 1)
6. The bass still carries the loudness. Drop its sine to a third, open the saw to 1200 Hz, bass 2 dB down, pad 4 dB up and brighter (1600 Hz).
7. Hits to 3 to 6 dB over the bed: push-in swell +8 dB, seat click +6 dB, pops +4 dB, ticks 4 and 8 dB under the shut.
8. Phase every tone so its first waveform peak lands exactly on frame + 1, the kick included (cosine start, 1 ms attack).
# Round 3, after measuring the third render (phone band -17.5 LUFS against -14.0 full; phone-band hit minus bed: snap 6.4, pops 5.6 and 3.5, seat 2.3, shut 8.4, ticks 3.0 and 1.8, push-in 3.0 dB; the kick's first peak is on frame + 1 but its wider second lobe is 10% louder, 2.5 ms later; limiter up to 4.4 dB)
9. Give the kick a 3 ms transient (its level falls to 65% within 3 ms of frame + 1) and the knock 3 dB more, so its largest peak is the first one.
10. Shut 2.5 dB down with the ticks kept where they are (tick 2 then 3 dB up), seat click +2 dB, push-in swell +2 dB.
11. The kick's second lobe is still 6% louder: the knock's negative half lands on it. Knock decay 4 ms, kick attack 0.5 ms. Tick bodies decay in 12 ms so earlier tails cannot flip their lobes.
# Round 4, after decoding the muxed article MP4 in Chrome (offset -0.002 ms, every hit 0.0 to 1.3 ms after frame + 1, but the AAC encode lifts the true peak from -1.3 to -0.4 dBTP)
12. Limit the WAV to -2.2 dBTP so the decoded MP4 stays under -1 dBTP; keep -14 LUFS.
1つのイヤホンで、デザイン要件をどう具体化するか

質感・ライティング・カメラ・モーションを選択して、「上質でクール」といった曖昧な言葉が、プロンプトにそのまま書ける具体的な指示へどう変わるかを確認できます。

曖昧な指定:モデルに判断を委ねる
「クールで高級感があり、モダン」なワイヤレスイヤホンのアニメーション。
具体的な指定:デザイン要件を明確化する
セラミックホワイト #F4F1EC、粗さ 0.38、クリアコート層 0.35。クロム金属の粗さ 0.05。オレンジはインナーライナーのみに使用。
粗さで反射の広がりを制御し、クリアコート層で追加の表面光沢を表現します。これらの要件により、「高級感」を検証可能な質感設定に落とし込みます。

3. このテンプレートをコピーして、内容を差し替える

完全なプロンプトを作成するには、目標、出力形式、時間、外観、動き、絵コンテ(カット割り)、禁止事項、検証(QA)方法を明確に記述する必要があります。3Dプロダクトを制作する場合は、さらに MODEL(モデル寸法)と CAMERA(カメラ)を追加します。

各項目で1つの具体的な問いに答えることで、AIモデルが推測で補う余地を減らします:

日本語訳

GOAL: 視聴者に何を感じさせたいか、またはどんな行動を起こさせたいかを一言でまとめる
OUTPUT: 単一ファイルで自己完結するHTML(またはRemotion、HyperFrames)、幅 x 高さ
TIME: 秒数 x fps = 総フレーム数。ループさせるか:はい / いいえ
LOOK: HEXカラーパレット、アクセントカラー1色、フォント + 太さ + フォントサイズ + 文字間隔
MOTION: イージングはcubic-bezierで指定、スプリングは減衰比で指定、持続時間はフレーム数単位
SHOTS: フレーム範囲、カットごとにメインとなる主役の動きを1つ、カット間のつなぎ方
BANNED: 絶対に使いたくないデフォルトスタイル
QA: 指定フレームでの静止画キャプチャ、コンタクトシート(複数フレーム一覧)、修正、その後に全体レンダリングのエクスポート
英語原文 · プロンプト構造(そのままコピー可能)
GOAL: what the viewer should feel or do, in one sentence
OUTPUT: one self-contained HTML file (or Remotion, HyperFrames), W x H
TIME: seconds x fps = total frames. Loop: yes or no
LOOK: palette in hex, one accent, typeface + weight + size + tracking
MOTION: easing as cubic-bezier, springs as damping ratio, durations in frames
SHOTS: frame ranges, one hero move per shot, how each shot hands off
BANNED: the defaults you never want to see
QA: stills at named frames, a contact sheet, fix, then the full render

先に目標と再生時間を決め、その後に動きを配置する

まずは GOAL(このアニメーションで何を伝えるか)を書きます。次に TIME(総再生時間、フレームレート、総フレーム数)を決めます。その上で時間軸に沿ってカットを割り当てていき、蓋を開ける動き、テキストの登場、大きなカメラワークなどを同時に詰め込まないようにします。

1つのカットでは、まず1つの主要な動きを際立たせます。全体の構成を組む際は、副次的な動きの開始を100〜200ms遅らせ、移動距離を主アクションの50%〜70%に抑え、環境の微細な揺れは5%以内に留めることで、視聴者の視線がまず主役に集まるようにします。

汎用テンプレート

以下の汎用テンプレートをそのままコピーし、角括弧内をご自身の要件に書き換えてClaudeに送信してください:

GOAL: [モーションの中核となる動きとトーンを一言で明確に定義する。例:高級感のあるミニマルなスマートウォッチが回転しながら展開し、主要センサーのインターフェースを表示する]
OUTPUT: 単一ファイルで自己完結するHTML。jsDelivrのimportmap経由でのみ指定バージョンのライブラリを読み込む [例: three.js 0.160.0]。キャンバスサイズ [例: 1080x1080]
TIME: [X] 秒シームレスループ、[60] fps = [総フレーム数] フレーム、[120] BPMビート(1拍 = [X] フレーム)。重要なアクセントは拍のフレームに厳密に合わせる

LOOK:
- メインカラーとマテリアル: [HEXカラーコード、金属度、粗さ、クリアコートのパラメータを指定]
- 背景と環境: [例:単色またはわずかにノイズ感のあるグラデーション背景。完全な真っ黒や煩雑なテクスチャは厳禁]
- スタジオ照明: [キーライト、フィルライト、リムライトのHEXカラー、強度、配置位置を定義し、わずかな接地ソフトシャドウを設定]

MODEL / CAMERA(3D制作時のみ):
- モデル: [本体および各パーツの寸法、単位、相対位置、維持すべきプロポーション]
- カメラ: [画角、開始位置と終了位置、注視点、移動時間]

MOTION:
- イージング曲線: イン [cubic-bezier(0.16, 1, 0.3, 1)]、アウト [cubic-bezier(0.7, 0, 0.84, 0)]
- 物理スプリング: メカニカル構造の減衰比 [0.6-0.7]、追従する副次的動作の減衰比 [0.5]
- アニメーション構成: 主役の動作時間は [X] フレーム。副次的要素は [Y] フレームずらし、主役の動作が40%完了した時点で開始

SHOTS:
- 0 〜 F1 フレーム: [カメラの初期状態、ライトスキャンまたは予備動作]
- F1 〜 F2 フレーム: [主役の核となる展開アクション、わずかなカメラドリー(押し引き)の追従]
- F2 〜 F3 フレーム: [ディテールやテキストを読ませる静止ホールド期間、2%の極めて微細なブリージング・ドリーを維持]
- F3 〜 最終フレーム: [元の位置へ収束・復帰。ループの境界における位置、変形、カメラ、運動速度をスムーズに接続]

BANNED:
- 紫から青へのSF風グラデーション、発光する光球、過度なブルーム(bloom)、ネオン調のアウトライン、乱雑に浮遊するパーティクル、その場での等速自転ターンテーブル、完全な黒背景は厳禁

QA:
- 外部から秒数 t で駆動できるよう必ず window.renderAt(t) を公開すること。すべての運動とノイズは秒数 t によって完全に一意に決定されること
- Date.now() の使用は厳禁。乱数には固定シードの疑似乱数関数を使用すること
- URLに ?t= が含まれる場合はリアルタイムの requestAnimationFrame ループを停止すること
- フォント、テクスチャ、シーンのロード完了後に window.__ready = true をセットすること
- まず指定キーフレームおよびその前後を確認し、動作・テキスト・ループの接続をチェックした上で全体をエクスポートすること
- ループアニメーションは 0 から N-1 フレームのみをレンダリングし、周期間の状態と速度の連続性を維持すること
英語版 · 汎用テンプレート(本ガイド翻案)
GOAL: [Clarify the core action and emotion of the motion in one sentence, e.g., A premium, minimalist smartwatch rotates to showcase and unfold its core sensor interface]
OUTPUT: One self-contained HTML file, importing specified pinned library versions via jsDelivr importmap only [e.g., three.js 0.160.0], canvas size [e.g., 1080x1080]
TIME: [X]-second seamless loop, [60] fps = [total frames] frames, [120] BPM tempo (1 beat = [X] frames), key hits strictly land on beat frames

LOOK:
- Primary palette & materials: [Provide Hex colors, metalness, roughness, clearcoat parameters]
- Background & environment: [E.g., solid color or subtle noise gradient backdrop, strictly no pure black or cluttered textures]
- Studio lighting: [Define Hex colors, intensities, and placement orientations for key, fill, and rim lights, configure subtle soft contact shadows]

MODEL / CAMERA (3D only):
- Model: [Dimensions, units, relative positions of main body and parts, character proportions that must be maintained]
- Camera: [Field of view, start and end positions, lookAt target, and movement durations]

MOTION:
- Easing curves: Entrance [cubic-bezier(0.16, 1, 0.3, 1)], exit [cubic-bezier(0.7, 0, 0.84, 0)]
- Physics springs: Damping ratio for mechanical structures [0.6-0.7], damping ratio for follow-through secondary motion [0.5]
- Choreography rhythm: Hero action lasts [X] frames, secondary elements staggered by [Y] frames and start when hero reaches 40% completion

SHOTS:
- Frame 0 to F1: [Initial camera state, glint strip sweep or anticipation wind-up action]
- Frame F1 to F2: [Hero core unfolding action, camera follows with subtle push/pull]
- Frame F2 to F3: [Showcase hold period, text or detail reveal, maintain 2% subtle breathing push-in]
- Frame F3 to End frame: [Retract and settle back, smoothly hand off position, deformation, camera, and velocity across loop boundary]


BANNED:
- Strictly ban purple/blue sci-fi gradients, glow orbs, oversaturated bloom, neon outlines, cluttered floating particles, stationary constant-speed spinning turntables, pure black backgrounds

QA:
- Must expose window.renderAt(t) interface; all motion and noise must be completely determined by time t in seconds
- Strictly no Date.now(); random values must use a seeded pseudorandom function
- Stop real-time requestAnimationFrame loop when URL contains ?t=
- Set window.__ready = true once fonts, textures, and scene are ready
- Inspect specified keyframes and adjacent frames first to verify action, text, and loop seams before full export
- Render frames 0 to N-1 only for loops, maintaining periodic continuity in state and velocity

まずは4秒のタイトルアニメーションを試す

最初は、複雑な3Dモデルを扱わずに済む4秒の「Launch day」タイトルカードから始めると、プロンプトの構成、プレビュー、エクスポートの流れを把握しやすくなります。

以下のタイトルアニメーションのプロンプト例では、退出のカット割りを補完しています。文字が順に登場し、読み取りのために一時停止し、最後に画面下部へと退出し、次のループへ滑らかにつながります。(76〜95フレームの退出シークエンスは本ガイドによる補足)

GOAL: プロダクト発表日(Launch Day)のタイトルカード。文字が一文字ずつ浮き上がって登場し、読めるように一時停止した後、初期状態へと戻る。
OUTPUT: 単一ファイルで自己完結するHTML。ネイティブCSS/SVGまたはCanvasレンダリング、描画サイズ 600x675。
TIME: 4秒シームレスループ、24 fps = 96 フレーム(第0フレームから第95フレームまで)。

LOOK:
- 背景色: ピュアホワイト #FFFFFF
- タイポグラフィ: Geistフォント(またはシステムデフォルトのサンセリフ太字)、太さ 800、サイズ 120px、文字間隔はわずかに詰めた -0.04em
- テキスト色: メインタイトル "LAUNCH" は極めて深いカーボンブラック #0F0F0F、アクセントの "DAY" はClaudeブランドオレンジ #D97757

MOTION & SHOTS:
- 0 〜 33 フレーム(文字の時間差イン):
  文字はクリッピング領域の下部から上昇して登場(不透明度のフェードインは使わない)。各文字の登場時間は14フレーム、緩急の効いた ease-out-expo 曲線: cubic-bezier(0.16, 1, 0.3, 1) を使用。
  各文字は2フレームずつ時間差で開始(Lは0フレーム、Aは2フレーム、Uは4フレーム...)。
- 34 〜 75 フレーム(確実な可読性のための静止期間、約1.7秒):
  すべてのテキストを完全に静止させ、読者が内容を正確に把握できる十分な認知時間を確保する。文字の可読性を保ち、余計なカメラワークは加えない。
- 76 〜 95 フレーム(ループ退出フェーズ · 本ガイドによる補足):
  76〜89フレーム:テキスト全体がイーズイン・アウト(ease-in-out)で下部のクリッピング領域へ退場。90〜95フレーム:第0フレームと全く同一の初期状態を保持し、カメラも初期位置に戻る。
  フェードイン・フェードアウトは使用しない。ループ境界の滑らかな連続性を確認する。

BANNED:
- 青紫のグラデーション、発光フィルター(drop-shadow/glow)、無秩序なブラーフェードイン、全文字の同時動作は厳禁。

QA:
- 外部からフレーム単位で制御できるよう window.renderAt(t) 関数を公開すること。URLに ?t= が含まれる場合はリアルタイムアニメーションを停止する。フォント読み込み完了後に window.__ready = true をセットすること。
英語版 · 4秒タイトルアニメーション(本ガイド翻案)
GOAL: Product Launch Day title card: letters rise letter by letter, hold for the audience to read, then return to the initial state.
OUTPUT: One self-contained HTML file, rendered with native CSS/SVG or Canvas, canvas aspect ratio 600x675.
TIME: 4-second seamless loop, 24 fps = 96 frames (frame 0 to frame 95).

LOOK:
- Canvas background: Pure white #FFFFFF
- Typography: Using Geist font (or system default sans-serif bold), font weight 800, font size 120px, slightly tight tracking -0.04em
- Text colors: Main title "LAUNCH" in deep carbon black #0F0F0F, accent word "DAY" in Claude brand orange #D97757

MOTION & SHOTS:
- Frames 0 to 33 (Staggered letter entrance):
  Letters rise from below the canvas clip boundary, without fading in via opacity. Each letter entrance lasts 14 frames, using an explosive ease-out-expo curve: cubic-bezier(0.16, 1, 0.3, 1).
  Letters start staggered 2 frames apart sequentially (L at frame 0, A at frame 2, U at frame 4...).
- Frames 34 to 75 (Absolute reading hold period, approx. 1.7 s):
  All text remains completely still, allowing sufficient cognitive time for readers to read clearly, maintaining text legibility without additional camera movement.
- Frames 76 to 95 (Loop exit phase · Guide adaptation addition):
76–89 frames: Text descends as a whole back into the clip boundary, transitioning with ease-in-out; frames 90–95 maintain the identical initial state as frame 0, with camera also returning to initial state.
  No fade-in or fade-out; check continuity across loop boundary.


BANNED:
- Strictly ban any blue/purple gradients, ban glow filters (drop-shadow/glow), ban disorderly blur fade-ins, ban all letters moving simultaneously.

QA:
- Expose window.renderAt(t) function on the page for external frame-by-frame driving, stop real-time animation when URL contains ?t=; set window.__ready = true once font loading is complete.

4. 各パラメータが制御するもの

「もう少し速く」「柔らかすぎる」といった感覚的なフィードバックも、最初の取っ掛かりとしては使えます。ただし、そのあとに Claude へ「どの箇所の、どのパラメータを変更するか」を具体的に指示してこそ、結果の比較が容易になります。

以下の数値は、最初の試行時の目安として活用できます。

動き始めと停止:イージングカーブ

イージング名 ベジェパラメータ cubic-bezier 最適な適用シーンと視覚心理
ease-out-expo 0.16, 1, 0.3, 1 テキストやロゴの主役級の登場。立ち上がりが速く、その後に減速する、キレのある力強い動き。
ease-out-quint 0.22, 1, 0.36, 1 高級感のあるハードウェアやカードの入場。滑らかで重厚感があり、より穏やかに減速する。
ease-in-out-quart 0.76, 0, 0.24, 1 画面内での大幅なオブジェクト移動やカメラのパン・ズーム。両端が極めて遅く中間が極めて速い、滑らかな発進と停止に適した動き。
ease-in-expo 0.7, 0, 0.84, 0 要素の素早い退場・画面外への移動。最初はゆっくり、徐々に加速して退場する。再生時間は入場の 40%–50% 短く設定する。
ease-out-back 0.34, 1.56, 0.64, 1 軽快で活発なボタンのマイクロアクションや趣味性の高いアクセント。目標点を一度通り過ぎてから戻る(はっきりとした弾性オーバーシュート)。

入場にはまず ease-out を試し、要素を素早く出現させてからゆっくりと安定させます。退場にはまず ease-in を試し、入場より時間を 40%–50% 短くしてキレよく消します。等速回転、プログレスバー、ループの位相には linear を使い、始動と停止が必要な移動にはイージングを使います。

跳ね返りの大きさと収束:減衰比

スプリング(バネ)を使うと、物体が目標に近づくにつれて減速し、場合によっては目標を行き過ぎてから元の位置に戻ります。減衰比 ζ は振動がどのように収まるかを制御し、固有振動数は動きのリズムを制御します。

減衰比 ζ = d ÷ (2 × √(k × m))。d は減衰係数、k は剛性、m は質量です。

減衰比 画面上での挙動
1.0 臨界減衰。反発せず、振動せず、目標へ速やかに近づく
1.0 超 過減衰。反発せず、同じ固有振動数下では復帰がより遅くなる
0.7–0.85 目標をわずかに行き過ぎてから戻る。標準的な2次系モデルの最初のオーバーシュートは約 4.6%–0.63%
0.4–0.6 リバウンドがより明確になり、活発なアクションに適する
0.3 未満 振動の収束が遅く、誇張されたアニメーション表現に適する

位置やサイズにはスプリングを使ってリバウンドを演出できますが、不透明度や色は単方向の変化にとどめると画面がより安定します。下の減衰スライダーを動かして、同一のオブジェクトがどのように目標を通り過ぎ、揺れ戻り、静止するかを確認してください。

同じ着地点でも、減衰によって動きはどう変わるか

2つの軌跡は同じ始点・終点、2 Hzの固有振動数を使用しています。スライダーをドラッグしてオレンジ色の線の減衰を変更できます。グレーの線は比較しやすいよう減衰比1を維持しています。

100 s2 s目標位置
━━ 現在の減衰━━ 減衰比 1 の参照
目標

低減衰では振動の収束が遅くなります。減衰比1は臨界減衰、1より大きい場合は過減衰となり、どちらも跳ね返りはありません。

音楽との同期:ビートをフレーム数に換算する

ビートに合わせて動きを同期させたい場合は、キーアクションのフレーム番号を拍数から計算します。

  • 1拍あたりのフレーム数:FPS × 60 ÷ BPM。
  • 120 BPM・24 FPS の場合:1拍はちょうど 24 × 60 ÷ 120 = 12 フレーム。
  • 128 BPM・30 FPS の場合:1拍は 30 × 60 ÷ 128 = 14.0625 フレーム。
    • 丸めた値を累積加算しない:1拍ごとに 14 フレームへと四捨五入し、それを足し続けてはいけません!32拍累積すると、視覚上のフレーム数は 14 × 32 = 448 フレームになりますが、音楽の実際の位置は 14.0625 × 32 = 450 フレームに達しており、丸々 2 フレーム遅れて映像と音のズレが徐々に広がります。
    • 正しい方法:各拍のフレーム番号は、絶対時間に基づいて計算し、個別に丸める必要があります:frame = Math.round(n * (fps * 60 / BPM))。

テキストの静止時間とアクションの間隔

  • テキストの読了静止時間:英語の目安は「1単語あたり 0.3 秒 + 基本時間 0.5 秒」です。中国語や日本語の文字数にそのまま換算せず、想定読者に実際に読んでもらって表示時間を決めてください。
  • マイクロインタラクションのフィードバック(Feedback):まずは 100–200 ms を試す。
  • 要素の移動・トランジション(Moves):200–500 ms。
  • 主役級の見せ場演出(Hero Reveals):600–900 ms。
  • スタッガー(Stagger / 時間差起動):リストや文字列を順番に登場させる場合、先行する要素のアニメーションが 30%–50% まで進んだ段階で次の要素を始動させます。完全に1つずつ順番に動かすと間延びし、完全に同時に動かすと視覚的な階層構造が失われます。

5. プレビューから完成まで、この手順で進める

プロンプトを作成したら、まず画面を生成してプレビューし、チェックと修正を行い、最後に音声を追加して書き出します。以下、実際の操作順に沿って進めます。

初めて試す場合は、長い作例を一度にすべてコピーする必要はありません。まずは最短ルートでワークフローを通すことをおすすめします。第3節の4秒タイトルアニメーションのプロンプトをそのまま使い、汎用レンダリング要件を添えてClaudeに anim.html を生成させ、ページ上で一時停止して特定のフレームをはっきり確認できるようにします。続いて後続のステップに進んで96枚のPNGを書き出し、無音の out/anim.mp4 へと合成します。映像の動きが滑らかになり納得できたら、効果音を追加してWAVを生成し、最終的な final.mp4 をエンコード・出力します。

ステップ1:アニメーションを実行する方法を1つ選ぶ

まず効果を試す:Webプレビュー+画面録画

PCに開発ツールを一切セットアップしたくない場合は、ブラウザ上で直接動かしてみることができます:

  1. ClaudeのWeb版を開き、モデルに Opus 5.5 を選択します。
  2. 完全なパラメータを含めたプロンプトを貼り付けます。特に末尾へ次の一文を追加してください:

    「画面の隅にリアルタイムの現在フレームカウンター(Frame Counter)を追加し、キーボードのスペースキーを押していつでも一時停止/再生ができるようにしてください。」

  3. まずプレビューウィンドウで生成されたHTMLを実行します。スペースキーを押して問題のある瞬間に停止させ、左上に表示される正確なフレーム数(例:第84フレーム)を控え、そのフレーム番号を直接指定してClaudeに修正指示を出します。
  4. 納得のいく仕上がりになったらHTMLファイルをダウンロードし、ローカルのChromeで開いて全画面表示にします。
  5. 画面録画で素早く完成させる:録画する前に、Claudeにフレームカウンター、一時停止ガイド、デバッグ用コントロールを非表示にさせます。Macユーザーはシステム標準のショートカット Cmd + Shift + 5 で範囲を選択して録画し、Windowsユーザーはシステムの「Snipping Tool(スニッピングツール)」の動画録画モードを使用します。この画面録画方法は、スマートフォンやSNS上で視覚的なリズムを素早く確認するのに非常に適しています。
    • ヒント:外部の高度なシェーダーや複雑な importmap モジュールを使用した一部の3Dコードは、ClaudeのWebサンドボックスのセキュリティ制限によってエラーが発生することがあります。その場合はHTMLをローカルにダウンロードしてChromeで開いてください。それでもエラーが出る場合は、コンソールのエラーログをClaudeに渡して修正させます。

コマ送りで書き出す場合:ローカル環境での実行

ローカル環境でヘッドレスブラウザによるコマ送りのスクリーンショット取得、コマ落ちの解消、そして高ビットレートなシームレスMP4の自動エンコードを実現するには、公式コマンドラインツール「Claude Code」の導入をおすすめします。

事前のインストールについて: 事前にお使いのPCへ Claude Code 公式クライアント がインストールされていることを確認してください。

  • MacユーザーはHomebrew経由でインストール可能:brew install --cask claude-code(または公式インストールスクリプトを実行);
  • Windowsユーザーはシステムパッケージマネージャー経由でインストール可能:winget install Anthropic.ClaudeCode。

Claude Codeのインストールが完了したら、ターミナルを開き、お使いのOSに対応する以下のコマンドを実行します。Macの手順はHomebrew導入済みを前提としています。Windowsではインストール完了後に新しいターミナルを開き、PowerShellでnpxが拒絶される場合は代わりにnpx.cmdを使用してください。

macOS 初期化スクリプト:

# macOS: Node, ffmpeg and a headless browser (Claude Code already installed)
brew install node ffmpeg
mkdir motion-lab && cd motion-lab
npm init -y
npm i -D playwright
npx playwright install chromium
claude            # then type /model and pick Opus 5.5

Windows 11 (PowerShell) 初期化スクリプト:

# Windows 11, PowerShell: the same lab (open a NEW terminal after winget)
winget install OpenJS.NodeJS.LTS
winget install Gyan.FFmpeg
mkdir motion-lab; cd motion-lab
npm init -y
npm i -D playwright
npx playwright install chromium
claude            # then type /model and pick Opus 5.5

claude を実行すると対話画面に入るので、第3節のタイトルアニメーション用プロンプトを渡し、プロジェクトのルートディレクトリに anim.html として保存するよう指示します。後述の node や ffmpeg のコマンドを実行する際は、Claudeとの対話をいったん終了するか、別のターミナルを開いて同じ motion-lab フォルダに移動してください。node --version と ffmpeg -version を入力し、バージョンが表示されればツールの準備は完了です。

ローカルプロジェクトのルートディレクトリに、専用のヘッドレスレンダリングスクリプトを準備します。「ヘッドレスブラウザ」とは、ウィンドウを表示せずにスクリプトから制御するブラウザのことです。このスクリプトはPlaywrightをベースにChromiumを起動し、?t=0 を付加したページを開きます。アニメーションコードは事前の取り決めに従ってリアルタイムループを停止し、フォント・テクスチャ・シーンの準備が整った段階で __ready=true をセットします。その後、スクリプトが1フレームごとに renderAt(t) を呼び出し、PNGとして保存していきます。

// 本ガイドの改編版:?t= がある場合はHTMLのリアルタイムアニメーションを停止し、読み込み後に __ready=true を設定。
// 使用法:node render.mjs anim.html 秒数 FPS 幅 高さ
import { chromium } from 'playwright';
import { pathToFileURL } from 'node:url';
import { resolve } from 'node:path';
import { mkdir, rename } from 'node:fs/promises';
import { randomUUID } from 'node:crypto';

const [file='anim.html', seconds='6', fps='24', width='1200', height='675'] = process.argv.slice(2);
const S=Number(seconds), F=Number(fps), W=Number(width), H=Number(height);
if (!(S>0) || ![F,W,H].every(x=>Number.isSafeInteger(x)&&x>0)) {
  throw new Error('秒数は0より大きく、FPS・幅・高さは正の整数にしてください。');
}
const N=Math.round(S*F);
if (N<1) throw new Error('再生時間とフレームレートから少なくとも1フレームが必要です。');
const frameDir='out/frames';
// 前回のフレームを保存して空のフォルダへ書き出し、古い動画の末尾が混ざるのを防ぐ。
await mkdir('out',{recursive:true});
try {
  await rename(frameDir,frameDir+'-previous-'+randomUUID().slice(0,8));
} catch (error) {
  if (error.code!=='ENOENT') throw error;
}
await mkdir(frameDir,{recursive:true});
const url=pathToFileURL(resolve(file));
url.searchParams.set('t','0');
const browser=await chromium.launch();
try {
  const page=await browser.newPage({viewport:{width:W,height:H},deviceScaleFactor:1});
  await page.goto(url.href,{waitUntil:'networkidle'});
  await page.evaluate(async()=>{await document.fonts.ready;});
  await page.waitForFunction(
    ()=>window.__ready===true && typeof window.renderAt==='function',
    null,{timeout:60000}
  );
  for(let i=0;i<N;i++) {
    await page.evaluate(t=>{
      // CSS/WAAPIも静止させる。renderAt はすべてのJavaScript状態を t から計算する。
      document.getAnimations().forEach(a=>{a.pause();a.currentTime=t*1000;});
      window.renderAt(t);
    },i/F);
    await page.screenshot({path:`${frameDir}/${String(i).padStart(4,'0')}.png`});
  }
  console.log(`${N} フレームを書き出しました。フレーム番号 0〜${N-1}、描画領域 ${W}×${H}、FPS ${F}。`);
} finally {
  await browser.close();
}

後述の作例を使用する際も、第1節の汎用レンダリング要件を補足し、Claudeに対して「URLに ?t= が含まれる場合はリアルタイムアニメーションを停止し、リソースの準備が完了したら window.__ready = true をセットする」よう明示してください。そうしないと、スクリプトが待機し続けたり、誤ったフレームをキャプチャしたりする可能性があります。

Claudeの出力を anim.html として保存し、上記のスクリプトを同じフォルダ内に render.mjs として保存します。このスクリプトは過去のフレームディレクトリを保持したうえで、空のディレクトリに新規書き出しを行い、前回の残りフレームが新しいクリップに混入するのを防ぎます。準備ができたら以下を実行します:

node render.mjs anim.html 4 24 600 675

引数の対応説明:

  • anim.html:対象のHTMLアニメーションファイルのパス;
  • 4:タイトルアニメーションの総再生時間(秒);
  • 24:レンダリングフレームレート(FPS);
  • 600:キャンバスの横幅(ピクセル);
  • 675:キャンバスの縦幅(ピクセル)。

重要事項:幅、高さ、フレームレートはアニメーションの設定と一致させる必要があります。後述する6秒・60fps・1080×1080の正方形構図の作例の場合は、コマンドを必ず node render.mjs anim.html 6 60 1080 1080 に変更してください。

PNG画像は out/frames に保存されます。上記のタイトルアニメーションでは96枚の画像が得られるはずです。これらをまず無音の動画に合成する場合は、以下を実行します:

ffmpeg -framerate 24 -i out/frames/%04d.png -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -c:v libx264 -pix_fmt yuv420p -crf 18 -movflags +faststart out/anim.mp4

タイトルキャンバスは600×675ですが、pad フィルタによって底部に1ピクセル補完され、H.264 / yuv420p エンコードが可能な偶数サイズである600×676になります(描画内容の比率はそのままです)。60 FPSで書き出す場合は、コマンド内の 24 を 60 に変更してください。フィルタの説明

思考の深さ(Thinking Budget)はまず medium を選択します。ゼロからの生成で2回連続して要件を満たさなかった場合にのみ強度を引き上げてください。マテリアル、カメラワーク、モーションの各パラメータは、プロンプト内で引き続き明確に記述します。

ステップ2:静止画を確認し、Claudeに修正箇所を指示する

初稿ではまず次の3点を確認します:造形が意図通りか、動きがいつ始まりいつ停止するか、視聴者に要点が伝わるか。リキッドクロム、イヤホン、マスコットの各作例は、それぞれ10回、15回、4回のビジュアル修正を重ねています。以下に示す試写・プレビュー手法は、まさにそれらの問題を特定するためのものです。

初版のコードを入手したら、動画全体を漫然と繰り返し見つめるのは避けてください。FFmpegを使って 4×3のコンタクトシート(Contact Sheet) を書き出し、異なるタイムポイントのコマを1枚の画像に並べて全体を一覧チェックします:

# Contact sheet: every 12th frame, 4 across, 3 down
ffmpeg -framerate 24 -i out/frames/%04d.png -vf "select='not(mod(n\,12))',scale=400:-1,tile=4x3" -frames:v 1 out/contact.png

注意:上記のコンタクトシート出力コマンドは、デフォルトで24FPS環境において12フレームごと(=0.5秒ごと)に1コマ抽出し、4×3の計12枚で最初の6秒間(144フレーム)をぴったりカバーする設定になっています。後述する8秒・60FPS(480フレーム)のような作品をレンダリングする場合は、そのまま流用せず、抽出間隔を40フレームごとに広げるか、前後に分けて2枚のコンタクトシートを生成してください。

前述の 4秒・24 FPSタイトルアニメーション であれば、8フレームごとに1コマ取得すると、ちょうど12コマの一覧画像が得られます。次のコマンドをコピーして実行してください:

ffmpeg -framerate 24 -i out/frames/%04d.png -vf "select='not(mod(n\,8))',scale=400:-1,tile=4x3" -frames:v 1 out/contact.png

4秒のタイトルアニメーションでは、第0、24、48、72、95フレームを抽出してチェックします。以下のレビュー用プロンプトをコピーする際は、第96フレームを第95フレームに変更してください。36フレームの静止余白を追加する場合は、終了タイミングと総フレーム数をそれに応じて調整します。

問題点を発見したら、「なんとなく違和感がある」という感覚を、検証可能な具体的要件へと変換します。以下は原文にある7つのレビュー指示の日本語訳です。必要に応じてコピーして活用してください:

  1. 絵コンテの照合:「第0、24、48、72、96フレームの単一静止画をレンダリングし、視聴者の視点から何が見えるかをそれぞれ一言で説明してください。これはプロンプト内の絵コンテ一覧と一致していますか? 一致していないコードを修正してください。」
  2. 余分なモーションの整理:「12フレームごとのコンタクトシートを生成してください。画面内で2つのオブジェクトが同時に視線を奪い合っているフレームをすべて特定し、メインとサブのモーションの階層関係を再調整してください。」
  3. オニオンスキンによるイージング検証:「第24〜47フレームを不透明度25%で重ね合わせたオニオンスキン画像(Onion Skin)を作成してください。間隔が完全に均等であれば動きが機械的すぎる証拠です。キーフレームに近づくにつれて間隔が詰まる必要があります。間隔が自然に詰まるまでベジェ曲線を調整してください。」
  4. 速度カーブによる急停止の排除:「主役要素のX軸位置とスケール比率をフレームごとに折れ線グラフとしてプロットしてください。グラフが完全な直線(等速リニア)になっている箇所や、急激な直角で停止している箇所を特定し、標準のイージングパラメータに置き換えて修正してください。」
  5. シニアデザイナー視点のレビュー:「シニアモーションデザインディレクターの視点で現在のバージョンをレビューしてください。視覚的な影響度の高い順に10項目の具体的な修正指示を挙げ、それぞれ正確なフレーム番号と対応する具体的なコード変更箇所を明記してください。まずは影響度の最も高い上位5項目を実行してください。」
  6. 画面のノイズ除去と簡素化:「現在の画面は情報量が過密で散らかっています。不要な細かなアニメーションを30%削減し、視聴者の視線を誘導するコアな動きだけを残してください。」
  7. ラストの呼吸とフリーズ:「エンディングが唐突すぎます。終了前に36フレームの静止キープ時間を追加し、2%の緩やかなカメラドリーインを伴わせ、最後にメイン主体が減衰比0.8のスプリング挙動で優雅に静止するようにしてください。」

英語のレビュー指示は展開してコピーできます。上記日本語訳と1対1で対応しています:

英語原文 · 7つのレビュー指示(完全版・コピー可能)
Render stills at frames 0, 24, 48, 72 and 96. Describe each in one sentence as a viewer would. Does that match the shot list? Fix what does not.
Make a contact sheet of every 12th frame. Mark every frame where two things move at once, then fix the hierarchy.
Onion-skin frames 24 to 47 at 25% opacity. Spacing should tighten near the keys. Adjust the easing until it does.
Plot the hero's x position and scale per frame as a PNG chart. Show me where the motion is linear or stops dead, then fix it with our tokens.
Review this like a senior motion designer: 10 notes ordered by impact, each with a frame number and the exact code change. Apply the top 5.
It is too busy. Remove 30% of the motion and keep only the moves that guide the eye.
The ending is abrupt. Add a 36-frame hold with a 2% push, then let it settle on a spring at damping ratio 0.8.

各イテレーションではまず1〜2項目を選び、修正を適用してから結果を確認します。一度に多くの方向性を提示しすぎると、局所的な修正のはずが全体のリライトになってしまいがちです。

衝突や着地でメッシュの突き抜け(クリッピング)が発生した場合は、問題のフレームの前後のコマを横に並べて比較し、変形や位置のジャンプがどのフレームで起きているかを特定します:

日本語訳

第84フレームの修正が反映されていません。第83フレームと第85フレームをPNGとしてレンダリングし、横に並べて確認できるすべての差異を列挙してください。この問題の原因となっている単一のコード行を特定し、その行のみを修正したうえで、これら2つのフレームを再レンダリングしてください。
英語原文 · 前後フレームの修正(完全版・コピー可能)
The fix at frame 84 did not hold. Render frames 83 and 85 as PNGs, put them side by side and list every difference you can see. Find the line of code that causes it, fix only that line, then render both frames again.

ステップ3:映像が安定したら、音声を追加する

まずはミュートで映像を確認し、動きとストーリーテリングが成立していることを確かめてから効果音を追加します。

音声もフレーム単位でタイムラインを組むことができます。Web Audio APIを使ってキックドラム、クリック音、水滴音、BGMなどを合成し、フタを開ける瞬間、着地、ライトの走査などのタイミングに合わせて配置します。

  1. 外部のオーディオサンプルのダウンロードは一切不要:キック(Kick)、吸気音(Inhale)、マグネットのクリック音(Click)、環境アンビエント音など、すべてWeb Audio APIを用いてコード内でリアルタイム合成します(正弦波、ホワイトノイズ、指数関数的減衰エンベロープを使用)。
  2. あらかじめ音の発生タイミングを決めておく:本ガイドの作例では、効果音のピークを視覚的イベントの1フレーム後に配置しています(60 FPS環境でおよそ16.67ms後)。フタ開け、衝突、着地などの重要な音をフレーム番号で揃えます。
  3. オーディオ出力形式を指定する:まず48 kHzステレオのWAVを生成し、ミックスのラウドネスを約-14 LUFS、トゥルーピークを-1 dBTP以下に設定します。このフォーマットとラウドネスをプロンプトに必ず明記してください。

音声をまずファイルとして保存する(本ガイドの補足)

音声をMP4に結合する前に、まずWAVファイルとして書き出します。このときClaudeに指示してWeb Audio APIの OfflineAudioContext(リアルタイム再生を行わず、メモリ上で音声全体を高速レンダリングする仕組み)を利用し、映像と同じ長さでミックスを AudioBuffer(オーディオバッファ)としてレンダリングさせます。その後、48kHzステレオWAVにエンコードしてダウンロードボタンを生成させ、ダウンロードしたファイルをプロジェクトのルートディレクトリに配置して soundtrack.wav と命名します。音声の長さは映像と一致させ、発音タイミングは映像のフレームレートとイベントの発生フレームから換算し、まずはWebページ上で試聴・プレビューして確認します。具体的なアクションがある場合にのみ、音のピークをイベントの1フレーム後に配置します。

日本語での追加指示(本ガイドの補足)

この4秒間(計96フレーム、24 fps)のタイトルアニメーション用に、完全コードベースの効果音を生成してください。すべてのサウンドはWeb Audio APIを用いて合成し、外部のオーディオ素材は一切参照しないでください。音声の長さは映像と同一とし、映像の24 fpsに基づいてサウンドイベントの発生時刻を換算してください。画面内に明確なアクションイベント(タイトルの静止など)がある場合は、対応する音のトランジェントピークをイベントの1フレーム後に配置してください。OfflineAudioContextを使用してフル尺の2chステレオミックスをオフラインレンダリングし、AudioBufferを48 kHzステレオWAVにエンコードしてダウンロードボタンを設置してください。ダウンロード後はプロジェクトのルートディレクトリに配置し、soundtrack.wavと命名します。あわせて、書き出し前に映像と音声の同期を確認できるよう、ページ上にプレビュー試聴用の再生コントロールを提供してください。
英語版 · タイトルアニメーション用音響の書き出し(本ガイドの補足)
Score this 4-second title animation (96 frames, 24 fps). Synthesize all audio in code using the Web Audio API with zero external sound files. Match the audio duration to the animation and use its 24 fps to convert event frames into audio times. If explicit visual events occur, position the transient audio peak 1 frame after the event frame. Use OfflineAudioContext to render the full stereo mix in memory, encode the resulting AudioBuffer into a 48 kHz stereo WAV, and provide a download trigger for soundtrack.wav; I will place the downloaded file in the project root. Include a preview playback button in the page so I can audition the sound before exporting.
  1. ミックス・パッケージングコマンド:FFmpegを使用して、個別にレンダリングした映像と合成したオーディオトラックを最終的なMP4へと結合します:
# Music + sound effects, mixed, normalized to -14 LUFS, muxed under the picture
ffmpeg -i out/anim.mp4 -i music.wav -i sfx.wav -filter_complex "[1:a][2:a]amix=inputs=2:duration=first,loudnorm=I=-14:TP=-1:LRA=11[a]" -map 0:v -map "[a]" -c:v copy -c:a aac -b:a 192k -shortest -movflags +faststart out/final.mp4

上記のコマンドは out/anim.mp4、music.wav、sfx.wav が揃っていることを前提として out/final.mp4 を出力します。Claudeがすでにミックス済みの1本のWAVを直接生成した場合は、そのファイルをプロジェクトルートに soundtrack.wav として保存し、以下のコマンドで結合してください。すでにミックス済みの音声が二重に混ざることはありません。

ffmpeg -i out/anim.mp4 -i soundtrack.wav -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 192k -shortest -movflags +faststart out/final.mp4

ヘッドホンで一度聴いて、音と動きのタイミングが合っているか確認します。続いてスマートフォンのスピーカーで再生し、フタ開け、着座、クリックなどの音が明瞭に聞こえるかを確認してください。スマートフォンのスピーカーは60 Hz以下の低域を再生しにくいため、低音が強すぎる場合は中音域のサウンド成分を持ち上げ、重要なアクションがしっかり聞き取れるように調整する必要があります。

ステップ4:書き出し後、ループのつなぎ目をチェックする

ループが滑らかにつながるかどうかは、まず次の2点を確認します:

  1. 第0フレームから第N−1フレームまでを書き出し、先頭フレームの重複を避ける。 周期がNフレームのアニメーションでは、第Nフレームは数学的に第0フレームと完全に一致します。もし第Nフレームまで書き出してしまうと、動画がループ再生されてつなぎ目に来た際、全く同じフレームが2回連続で再生され、視覚的には一瞬のカクつき(引っかかり)として現れてしまいます。
  2. 画面の状態だけでなく、速度もつなげる。 オブジェクト、カメラ、ライティング、ノイズのすべてを周期に基づいて設計します:1回転して元の姿勢に戻る、波の揺れが動画の尺内でちょうど整数周期を完了する、ノイズを閉じた円軌道に沿ってサンプリングする、といった工夫です。つなぎ目では、位置の連続性だけでなく、運動速度の連続性も確保する必要があります。

幅・高さが偶数の画面には以下のMP4コマンドを使用します。600×675のタイトルアニメーションには、前述の pad を含んだコマンドを使用してください。MP4が生成できたら、さらにGIFへ書き出したり、ループ確認用に3回連続リピート再生する動画を生成したりできます。

# MP4 for an X post: H.264 High, yuv420p, starts playing at once
ffmpeg -framerate 24 -i out/frames/%04d.png -c:v libx264 -profile:v high -pix_fmt yuv420p -crf 18 -movflags +faststart out/anim.mp4

# GIF for an X Article: one palette for the whole clip, 1200 px wide
ffmpeg -framerate 24 -i out/frames/%04d.png -vf "scale=1200:-1:flags=lanczos,split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" -loop 0 out/anim.gif

# Loop check: play it three times back to back and watch the seam
ffmpeg -stream_loop 2 -i out/anim.mp4 -c copy out/loop_check.mp4

MP4コマンドはPNGシーケンスをH.264動画へと結合します。yuv420p は各種プレイヤーとの互換性を高め、+faststart はWeb上でのストリーミング再生の立ち上がりを早めます。-framerate 24 は実際のレンダリングフレームレートに合わせて変更してください。最後のコマンドは3回連続で連結するもので、つなぎ目の確認に重宝します。

GIFは動画全体で統一されたカラーパレットを生成・使用し、フレームごとの色ブレを抑えます。scale=1200:-1 は横幅1200ピクセル・縦幅比率維持を意味します。正方形の画面であれば 1080:-1 に変更可能です。

GIFには音声が含まれませんが、フレーム遅延の量子化によって視覚的なリズムが変化します。24 FPSの1フレームは約41.67 msですが、GIFは10 ms単位でしか指定できません。もし毎フレームを40 msで保存すると、144フレームでわずか5.76秒にしかなりません。「40 msを5フレーム+50 msを1フレーム」とすれば6フレームでちょうど250 msとなり、144フレームで正確に6秒となります。音楽に厳密に合わせる必要がある場合はMP4を使用してください。GIFとして書き出す際は、この遅延配分を考慮してテンポ感を検証する必要があります。

よくある問題と対処法

発生した現象 Claudeに送る修正プロンプト
同じタイミングを再レンダリングするとフリッカー(ちらつき)が発生する 各値を t のみに依存させ、乱数には固定シードを使用し、実時間に依存するタイマーを削除してください
フォントが正しくない 指定したフォントを読み込み、document.fonts.ready を待ってから先頭フレームをレンダリングしてください
ループのつなぎ目で引っかかる 第Nフレームを重複して書き出さないようにし、オブジェクト、カメラ、ノイズ、速度の周期的整合性を再確認してください
音声が徐々にビートからずれていく 各拍の絶対時間を n × 60 ÷ BPM で算出し、そこからフレーム番号へ換算してください。丸めたフレーム数を累積加算しないでください
DOMアニメーションがカクつく transform と opacity を優先して使用し、width、height、top、left などのレイアウト再計算を伴うプロパティの変更を減らしてください(DOMアニメーション向け)
GIFのグラデーションにバンディング(色むら・階調飛び)が出る 単色塗りを試すか、動画全体で単一の共通パレットを生成してディザリング(Dithering)を適用してください
テキストがぼやける、またはわずかに震える 静止テキストを整数ピクセルの位置に配置してください。あるいは2倍サイズでレンダリングしてから縮小表示を試してください
テキストが読み終わらないうちに消えてしまう まず表示キープ時間を延長し、想定読者に実際に読んでもらってください(原文の英語での経験則は1単語あたり0.3秒+基本0.5秒)
すべての要素が同時に動いてしまう メインの動きを1つだけ残し、他の動きは150ms遅れて開始させ、移動距離をメインの動きの60%に抑えてください

ツールを切り替える場合:用途別の選び方

プロジェクトの要件に応じて、プロンプトの OUTPUT フィールドで目的のエンジンを具体的に指名してください。Claudeの判断に委ねてはいけません:

エンジン・ツール 主な強みと適用シーン オープンソースおよび商用ライセンスの範囲 最適なフォーマット
Three.js 3Dシーン。GPUハードウェアアクセラレーション、カスタムシェーダー(SDF/Raymarching)、複雑なライティングとマテリアル。本ガイドの3大作例はいずれもこれを採用。 MITライセンス。商用利用を含め完全自由。 WebGL Webページ / MP4オフライン動画
Remotion React動画。各フレームをReactの状態(State)としてレンダリング。公式のClaude Code Skillsが充実。 個人、従業員3名以下の営利団体、非営利および評価目的は無料。これを超える規模の営利団体は企業ライセンスが必要。インストールコマンドは npx skills add remotion-dev/skills にアップデート済み。 MP4 / WebM / バッチ生成動的動画
HyperFrames HeyGenがオープンソース化した軽量動画自動化フレームワーク。HTML+GSAPを入力し、バックグラウンドのヘッドレス環境で直接MP4をレンダリング。 Apache 2.0ライセンス。規模による商用制限なし。 スピーディーなマーケティング動画 / ショート動画のレンダリング
GSAP Webタイムライン。SVG、テキスト、スクロール連動に適する。 公式により現在100%商用無料(Webflowと直接競合するノーコードビジュアルアニメーションツールの作成のみ禁止)。 Webインタラクティブアニメーション(動画化には別途レンダラーが必要)
Motion(旧 Framer) Reactインターフェース向けに最適な軽量・宣言型モーションライブラリ。 MITライセンス。完全無料。 プロダクション品質のUIマイクロインタラクション(動画の直接書き出しには非対応)
ネイティブHTML/CSS 依存ゼロ・超軽量。CSS keyframesとSVGのみで10秒以内のミニマルなアイコンやテキストループを実装。 ネイティブ技術のため制限なし。 インストール不要のクイックプレビュー / シンプルなGIF

6. さらに2つの実践的な3D作例を試す

次は2種類の異なる動きを練習します。液滴が融合して文字になるアニメーションと、キャラクターのタメ、ジャンプ、着地、そしてバク宙です。まずは完成動画を確認し、画面プロンプトに沿って構築しながら、問題が生じた際は修正ログと照らし合わせてみてください。

ケース1:リキッドクロームのタイトルオープニング(Liquid Chrome Title)

リキッドクローム 6秒シームレスループ完成版:液滴が弾けて伸び、融合して文字へと注ぎ込まれ、光のスキャンが通り抜けて再び最初の球体へと溶け戻る。
  • プロジェクト仕様:6秒シームレスループ、60 fps = 360フレーム、1080x1080 スクエア画角、単一HTMLファイル、Three.js 0.160.0ベース。
  • 全行程の所要時間:ビジュアル構築と10回の追加指示で約2時間、コードによるサウンド合成と5回の追加指示で約45分。
  • 中核となる技術的難所と落とし穴の回避策:
    1. 画面の前半ではフルスクリーンシェーダー(Fragment Shader)にレイトマーチング(Raymarching)と符号付き距離場(SDF)を組み合わせて粘性の高い液滴の融合を実現し、後半の文字は本物のThree.js TextGeometry 3Dジオメトリメッシュを使用しています。
    2. Three.js r160 における文字の厚みパラメータ:r160バージョンでは、TextGeometry は押し出しの深さを設定するために height を読み取ります。もしプロンプトで不用意に depth: 0.12 と書いてしまうと、ソースコード側でdepthが上書きされ、heightまたはデフォルト値の50が適用されて、文字の厚みが50シーン単位にも膨れ上がってしまいます。プロンプト内で直接 height: 0.12 を指定し、バージョンの仕様を固定してください。
    3. ベベルの癒着とハイライトの破綻:初期生成された文字はベベルが大きすぎて塊のように癒着していましたが、グリフの物理輪郭を手動で読み取り、字間を 0.09、単語間隔を 0.26 と指定することで完全に解決しました。

以下はリキッドクロームの初期プロンプト全文の日本語訳です。416語の英語原文も展開してコピーできます(日本語で理解・編集し、英語原文を対照できます):

日本語訳

リキッドクロームメタル:6秒シームレスループ、60 fps、1080x1080、単一HTMLファイル、jsdelivrのimportmap経由でのみthree.js 0.160.0を読み込み。

window.renderAt(t) は秒単位の t によってすべての状態を設定。すべての運動とノイズは6秒周期。?t= が付与されている場合は絶対にrequestAnimationFrameを起動しない。フォントの読み込みとベイク完了後に window.__ready をセット。frac(t*60) に基づく4つのオフセットによる1/4ピクセルのカメラジッター。

フルスクリーンシェーダー内で blob、7個の滴、テキストを単一のSDFとしてRaymarch。Smooth-min k 0.35、滴の分離に伴い0.1まで減少。各滴は mix(dropSDF, textSDF, K) を介して対応するグリフへと変化。テキスト:各グリフに TextGeometry "OPUS 5.5" を使用、バージョン固定された examples/fonts 内の helvetiker_bold を採用、サイズ 0.52、高さ 0.12(r160はdepthではなくheightを読み取る)、ベベル 0.03、ベベル分割数 10、曲線分割数 24、カーニング -0.04 em、ピリオドは視覚的中央揃え。GPU上で同一の輪郭を 2048x512 の符号付き距離テクスチャ(signed distance texture)としてベイクし、角丸ボックスとして押し出してメッシュに一致させる。3.3〜4.7秒で同一GLSLを用いた実際のメッシュ(クリース法線、35度)へクロスフェードし、反射をSDF内へトレース。

クロームマテリアル:F0 0.92、Schlick fresnel、粗さ 0.04、反射回数 3回。

スタジオ:y軸 -0.8 に白色の床を配置、上部にソフトシャドウ、接触部を暗く、6% 反射、z軸 4 より外側(カメラ側)は完全な黒にして文字の正面に暗い反射が映り込むようにする。環境は方位角と仰角で定義し、カメラの方位角は0:カメラ側に 86x57 度の黒いパネル、上部にソフトボックス(2.4)、左上にソフトボックス(3.0)、左右75度に黒のフラッグ(遮光板)、後方149度・仰角24度にD97757のリムライトストリップ(強度1.4)、幅2度のハイライト反射ストリップ(glint strip、強度6、傾き40度)を配置し、3.3〜4.1秒にかけて左から右へスイープ。

タイムライン:
0〜1.2秒:blob 半径 0.62、1.5秒ごとに3%呼吸、simplex noise 0.05。
1.2〜1.4秒:10%押しつぶす。
1.4〜2.1秒:横方向に2.4倍の幅まで引き伸ばし、ちぎれるように7個の滴を押し出す。滴のサイズはグリフの面積に応じて配分。各滴は上向きに0.2の弧を描いてグリフの位置へ到達、オーバーシュート 7%、速度方向に沿って引き伸ばす。
2.2〜2.9秒:滴が左から右へ文字へと変化、間隔は3フレーム、各文字の所要時間は0.4秒。ベベルは初期に0.07膨らみ、その後に弾性リバウンドして平坦化。
2.9〜4.8秒:静止ホールド。
4.8秒:6フレーム持続する膨張、文字が0.12沈み込んで軟化し、ease-inで中央に向かって流れ、5.62秒で融合。3回のバウンドの揺れ(14%、減衰 0.25)を伴い、第0フレームまで貫通。

カメラ:30度レンズ、2.6秒までにドリー 5.6 から 7.2 へ、ホールド中に 6.95 までプッシュ、5.9秒までに 5.6 へ戻る。ホールド期間を中心に両側へそれぞれ7度オービット回転。仰角は上方6度。

ポストプロセス:bloom 閾値 1.0、強度 0.3。トーンカーブは0.9までリニアを維持し、その後緩やかなショルダーへと遷移。ビネット 7%。粒子感 1.5%、フレームインデックスをランダムシードとする。
英語原文 · リキッドクローム初期プロンプト(完全版・コピー可)
Liquid Chrome: 6 s seamless loop, 60 fps, 1080x1080, one HTML file, three.js 0.160.0 via jsdelivr importmap only.

window.renderAt(t) sets everything from t in seconds; all motion and noise periodic in 6 s; with ?t= never start requestAnimationFrame; window.__ready after font and bake. Quarter-pixel camera jitter, 4 offsets from frac(t*60).

Raymarch blob, 7 droplets and text as one SDF in a full-screen shader. Smooth-min k 0.35, falling to 0.1 as droplets part; each droplet becomes its glyph through mix(dropSDF, textSDF, K). Text: TextGeometry "OPUS 5.5" per glyph, helvetiker_bold from the pinned examples/fonts, size 0.52, height 0.12 (r160 reads height, not depth), bevel 0.03, 10 bevel and 24 curve segments, tracking -0.04 em, period optically centered. Bake the same outlines into a 2048x512 signed distance texture on the GPU, extruded as a rounded box to match the mesh. From 3.3 to 4.7 s cross-fade to the real mesh (creased normals, 35 degrees), same GLSL, reflections traced into the SDF.

Chrome: F0 0.92, Schlick fresnel, roughness 0.04, 3 bounces.

Studio: white floor at y -0.8, soft overhead shadow, contact darkening, 6% reflection, black beyond z 4 (camera side) so letter faces reflect dark. Environment in azimuth and elevation, camera at 0: black camera-side panel 86x57 degrees, softboxes overhead (2.4) and upper left (3.0), black flags at 75 degrees left and right, a D97757 rim strip behind at 149 degrees, 24 up, intensity 1.4, a 2 degree glint strip, intensity 6, tilted 40 degrees, sweeping left to right 3.3 to 4.1 s.

Timeline:
0 to 1.2 s: blob radius 0.62 breathes 3% every 1.5 s, simplex noise 0.05.
1.2 to 1.4 s: squash 10%.
1.4 to 2.1 s: stretch 2.4x wide and pinch into 7 droplets sized by glyph area; each arcs 0.2 up to its glyph, overshoots 7%, stretches along its velocity.
2.2 to 2.9 s: droplets become letters left to right, 3 frames apart, 0.4 s each; bevels start 0.07 puffy and spring flat.
2.9 to 4.8 s: hold.
4.8 s: 6-frame swell, letters slump 0.12 and soften, drain to the center with ease-in, merge at 5.62 s with a 3-bounce wobble (14%, damping 0.25) running through frame 0.

Camera: 30 degree lens, dolly 5.6 to 7.2 by 2.6 s, push to 6.95 in the hold, back to 5.6 by 5.9 s; orbit 7 degrees each way centered on the hold; 6 degrees above.

Post: bloom threshold 1.0, strength 0.3; tone curve linear to 0.9, then a soft shoulder; vignette 7%; grain 1.5% seeded by frame index.
展開:リキッドクローム事例 10回の視覚修正ログ(英語・日本語対照)

「プラスチックのような白から本物の金属クロームへの変更」「スキャン光による文字Pの遮蔽解消」「第85フレームにおける滴の異常な突起の除去」など、重要な視覚修正に関する全オリジナルログを収録:

日本語訳

1. 質感が白いプラスチックのように見え、文字正面には黒い床しか映らないため掠める光がまったく現れず、メッシュのキャップ面には歪んだ破片が反射している。スタジオを暗く(0.1のグレー)し、被写体の背面には幅140度、下方10度から上方40度までの白いホリゾント(cyc)のみを残す。白い床はz 4でカットし、カメラ側の光が黒い遮光板に届くようにする。メッシュキャップの法線を平坦化。リムライトストリップは12x40度。滴の液体の塊ノイズ周波数は1.0。
2. 掠める光のグレアで文字Pが消去されてしまう:幅を0.6度に変更し、強度を3に設定。リムライトが文字に全く当たらない:D97757の光ストリップを後方上部(165度、仰角42度、70x16度)へ移動し、右側に方位角55〜125、仰角-16〜10の柔らかなD97757サイド逆光を追加して、右を向いたすべてのベベルが光を捉えるようにする。
3. 0.03のベベルによって文字同士が癒着している。計測したグリフの外形輪郭に合わせて文字間隔を設定し、字間を0.09、単語間隔を0.26にする。カメラは7.8の位置を維持し、7.55までプッシュ。メッシュのベベル部分にノイズの斑点が発生:SDFグラディエントによるシェーディングに切り替え、レイトマーチング描画されたテキストと一致させる。
4. 外側の滴がおよそ第112フレームで画面外へ8ピクセルはみ出す。各グリフ位置の40%の地点からスタートさせ、u^2.4による飛行イージングを用いて7%のオーバーシュートがちょうど1.97秒で着地するようにし、1.2〜2.5秒の間でカメラワークを前進させる。
5. 文字が形成される過程で迷彩パターンのように見え、融合する滴の液体の塊が丸めたアルミホイルのように見える。表面の波紋を0.008、周波数を3.2に設定。
6. 第85フレームで液体の塊上に突如コブが出現する。1.2〜1.65秒の間で滴の半径を-0.4から成長させ、同時に液体の塊も-0.4から再成長させることで、smooth-minによる引き合いの融合を滑らかにフェードインさせる。
7. mix(sphere, letter) の遷移時に平たいコイン状の構造を通過してしまう。各滴が対応するグリフへ注ぎ込まれる形に変更:各グリフにSDFチャンネルを1つベイクし、滴から成長した球体の中で各文字を出現させ(smooth max 0.05、ease-out、0.4秒)、滴をその中へ収縮させ、両者をsmooth-minで接続し、文字が完全に満たされた後にのみ膨張スプリングアニメーション(減衰 0.55、3 Hz)を開始する。反転溶解させ、5.2秒から逆流して空にする。
8. 掠める光が文字Oに届くのが遅く、最後の5から離れるのが早すぎる。3.3秒でOに接触し、4.1秒で最後の5を通り抜けるようにする(キャリブレーション後のスイープ範囲:方位角 -0.083〜0.302)。
9. 滴がまだ生成されていない段階で文字が消滅し、融合した大きな球体が膨張してしまう。まず滴を再び成長させ(4.88〜5.1秒、グリフ寸法の1.15倍)、その後に収縮させて文字を引っ込め(5.0〜5.35秒)、5.15秒から中央の液体の塊を成長させる。
10. 文字の正面が平らな木炭のように見える。カメラ側パネルの内側 -6度の位置に幅0.5の細い水平線反射ストリップを追加し、z 3.6〜4.0の範囲で床の末端をフェザー処理してソフトにする。
英語原文 · リキッドクローム画面修正(完全版・コピー可)
1. It reads as white plastic, the letter faces only see the black floor so the glint never shows, and the mesh caps reflect bent shards. Make the studio dark (0.1 gray) with only a white cyc behind the subject, 140 degrees wide, from 10 below to 40 up. End the white floor at z 4 so camera-side rays reach the black panel. Flatten the mesh cap normals. Rim strip 12x40 degrees. Blob noise frequency 1.0.
2. The glint is a flare that erases the P: make it 0.6 degrees wide at intensity 3. The rim never reaches the letters: move the D97757 strip behind and up (165 degrees, 42 up, 70x16 degrees) and add a soft D97757 kicker on the right, azimuth 55 to 125, elevation -16 to 10, so every right-facing bevel catches it.
3. The 0.03 bevels fuse every letter pair. Space the glyphs by their measured outlines, 0.09 apart and 0.26 for the word space, and hold the camera at 7.8, pushing to 7.55. The mesh speckles on its bevels: shade it with the SDF gradient so it matches the raymarched text.
4. The outer droplets leave the frame by 8 px around frame 112. Start them at 40% of their glyph position, ease the flight with u^2.4 so the 7% overshoot lands at 1.97 s, and dolly from 1.2 to 2.5 s.
5. While the letters form they look like camouflage and the merged blob looks like crumpled foil. Surface ripple 0.008 at frequency 3.2.
6. A bump pops onto the blob at frame 85. Grow the droplets from radius -0.4 over 1.2 to 1.65 s and regrow the blob from -0.4, so their smooth-min pull fades in.
7. mix(sphere, letter) passes through flat coins. Let each droplet pour into its glyph instead: bake one SDF channel per glyph, reveal each letter inside a sphere growing from its droplet (smooth max 0.05, ease-out, 0.4 s), shrink the droplet into it, join them with smooth-min, and start the puff spring only once the letter is full (damping 0.55, 3 Hz). Melt in reverse, draining from 5.2 s.
8. The glint reaches the O late and leaves the last 5 early. Make it touch the O at 3.3 s and clear the last 5 at 4.1 s (calibrated sweep: azimuth -0.083 to 0.302).
9. The letters vanish before their drops exist and the merged ball inflates. Regrow the drops first (4.88 to 5.1 s, 1.15x glyph size), retract the letters after (5.0 to 5.35 s), and grow the central blob from 5.15 s.
10. The letter faces read as flat charcoal. Add a thin 0.5 horizon strip at -6 degrees inside the camera-side panel, and soften the floor's end over z 3.6 to 4.0.
展開:リキッドクローム事例 サウンドプロンプトと5回の調律追加指示(英語・日本語対照)

120 BPMのビートの土台、液体の吸引気流音、ペンタトニックスケールの水滴落下音、そしてシームレスで滑らかな接続に至るWeb Audio純コード合成仕様のすべてを収録:

日本語訳

# サウンドプロンプト
この6秒シームレスループ(360フレーム、60 fps)の劇伴を作曲してください。Web Audio APIを用いてコード内ですべてのサウンドを合成し、サンプリング音源の使用や外部ダウンロードは行わないこと。各ヒットポイントは対応する視覚イベントの1フレーム後に合わせる。
伴奏:120 BPM、3/4拍子の4小節、各小節90フレーム。第67、157、247、337フレームから開始。バスドラムは67、247、337フレームに配置。裏拍のシェイカーはヒットポイントが再生されない箇所でのみ発音。サブベースとパッドの和音はBm、G、A、D。
イベント:スクイーズの吸気音が84フレームでピーク、引き伸ばしグリッサンドが84〜112フレーム、ピンチ気泡の破裂音が112、113、114、120フレーム、注ぎ込み気泡音が136、138、141、145、147、150、153フレームでDメジャーペンタトニックスケールに沿って上昇、金属のティン音が200フレーム(分音は8 kHz未満)、キラキラしたグリマー音が左から右へパンしながら245フレームまで持続、液体のクレッシェンド音が288フレームから始まって303フレームでピーク、水滴音が309フレーム、融合の破裂音が319、321、322、325フレーム、337フレームで吸引されて粘性のある水滴音となり2.4 Hzで揺動。
48 kHz ステレオ WAV、約 -14 LUFS、ピーク -1 dBTP、ループの継ぎ目でポップノイズやクリック音が発生しないこと。MP4へミックスして統合。
# サウンド追加指示(5件)、そのまま送信
1. 単独ヒットポイントの測定結果:バスドラムと粘性水滴音のピークが8〜11ミリ秒遅れており(4倍ウェーブシェイパーおよび位相0開始のサイン波による影響)、伴奏に対する音量レベルも不均一(ting +10 dB、gloop +1 dB、drips -8 dB、dot drop +1 dB)。音程のある各ヒットポイントを1つのオーディオバッファとして構築し、そのアタックがちょうど (F + 1) x 800 サンプル位置のコサイン波ピークで終了するようにし、ウェーブシェイパーは使用しないこと。各ヒットポイント(または同フレームのペアヒットポイント)が伴奏より3〜6 dB高くなるように調整(K特性重み付け、最初の60ミリ秒)。ミックスを150 Hzのハイパスフィルターに通すと4.5 dB損失する:サブベースを4 dBカット、各バスドラムを1.5 dBカット、粘性水滴音の下にあるバスドラムを4 dBカットし、パッドを1.5 dBブースト。
2. タイミングは正確になった。各ヒットポイントは減衰後の伴奏より6.5〜9 dB高い:ヒットポイントのバスを2.5 dBカットし、続いて2組のピンチペアを1.4 dBカット、UとSの位置のピンチを1 dBカット、クレッシェンドを1.2 dBカット、最後の注ぎ込み気泡音を0.5 dBカット、水滴音を2.5 dBブースト、粘性水滴音を3 dBブーストして、各ヒットポイントが伴奏より3〜6 dB高くなるようにする。
3. リミッターによって粘性水滴音が3.4 dB圧縮されている。すべての倍音がバスドラムと同一サンプルでピークに達しているためである。粘性水滴音の偶数次倍音をサイン位相に設定し、その下にあるバスドラムを2.7 dB下げることで、リミッターによるリダクションを1.5 dB以内に抑えつつ、粘性水滴音の伴奏に対する+3〜6 dBを維持する。
4. サイン位相の倍音により、粘性水滴音の最大波形ピークが対応フレームの4ミリ秒後へシフトした。粘性水滴音のすべての倍音をコサイン位相に維持し、ピークが第270400サンプルに落ちるようにする。2次倍音を0.2、3次倍音を0.08に設定し、4次倍音を削除して、粘性水滴音を0.5 dB下げる。
5. MP4オーディオはコーデックのパディングにより動画より16ミリ秒長くなっており、ファイルが不自然な段差で始まり、ループプレイヤーが6.000秒の時点で唐突に音をカットし、16ミリ秒の無音を挟んで唐突に再開してしまう。このシームレスループは2ループツイート用のマスターWAVとして保持する。記事内のシングルループMP4については、冒頭と末尾の96サンプルにのみ2ミリ秒のレイズドコサインフェードイン・フェードアウトを追加する。
英語原文 · リキッドクローム音響効果と調律(完全版・コピー可)
# Sound prompt
Score this seamless 6 s loop (360 frames, 60 fps). Synthesize everything in code with the Web Audio API, no samples, no downloads. Each hit lands 1 frame after its visual event.
Bed: 120 BPM, four 3/4 bars of 90 frames starting on frames 67, 157, 247 and 337. Kick on 67, 247 and 337, offbeat shaker only where no hit plays, sub and pad on Bm, G, A, D.
Events: squash inhale peaking at 84, stretch glide 84 to 112, pinch bloops at 112, 113, 114 and 120, pour bloops rising through D major pentatonic at 136, 138, 141, 145, 147, 150 and 153, metallic ting at 200 (partials under 8 kHz), shimmer panned left to right until 245, liquid swell from 288 peaking at 303, drips at 309, merge blups at 319, 321, 322 and 325, slurp into a gloop at 337 wobbling at 2.4 Hz.
48 kHz stereo WAV, about -14 LUFS, peak -1 dBTP, no click at the seam. Mux into the MP4.
# Sound follow-ups (5), exactly as they were sent
1. Measured on the isolated hits: the kick and the gloop peak 8 to 11 ms late (a 4x waveshaper and sines that start at phase 0), and the levels over the bed are uneven (ting +10 dB, gloop +1 dB, drips -8 dB, dot drop +1 dB). Build every tonal hit as a buffer whose attack ends on a cosine crest at exactly (F + 1) x 800 samples, with no waveshaper. Put every hit, or pair of hits on the same frame, 3 to 6 dB above the bed (K-weighted, first 60 ms). The mix loses 4.5 dB through a 150 Hz high-pass: cut the sub 4 dB, the kicks 1.5 dB and the kick under the gloop 4 dB, and raise the pad 1.5 dB.
2. Timing is exact now. The hits sit 6.5 to 9 dB over the quieter bed: trim the hit bus 2.5 dB, then the two pinch pairs 1.4 dB, the U and S pinch 1 dB, the swell 1.2 dB and the last pour bloop 0.5 dB, and raise the drips 2.5 dB and the gloop 3 dB, so every hit reads 3 to 6 dB over the bed.
3. The limiter takes 3.4 dB off the gloop because all its partials and the kick crest on the same sample. Put the gloop's even harmonics in sine phase and lower the kick under it 2.7 dB, so the limiter stays under 1.5 dB and the gloop keeps 3 to 6 dB over the bed.
4. Sine-phase harmonics moved the gloop's biggest waveform peak 4 ms after its frame. Keep every gloop harmonic in cosine phase so the peak is on sample 270400, set the 2nd harmonic to 0.2 and the 3rd to 0.08, drop the 4th, and lower the gloop 0.5 dB.
5. The MP4's audio runs 16 ms of codec padding past the video, so the file starts on a hard step and a looping player stops the sound hard at 6.000 s, plays 16 ms of silence and restarts hard. Keep the seamless loop as the master WAV for the two-loop post, and for the single-loop article MP4 add a 2 ms raised-cosine fade to the first and last 96 samples only.

ケース2:3Dボクセルマスコットと5大アニメーション原則(Voxel Mascot)

ボクセルマスコット 8秒ループ完成版:3基のスタジオライトが順次点灯し、マスコットが床面のタイムラインキーフレームを踏みながらジャンプ&宙返りし、5大アニメーション原則のラベルをリアルタイムに点灯させる。
  • プロジェクト仕様:8秒シームレスループ、60 fps = 480フレーム、1080x1080 キャンバス、Three.js 0.160.0、Geist Monoフォント。
  • 全行程の所要時間:ビジュアルと4回の修正で約2時間、コードによる音響効果で約70分。
  • フレームごとのアクション検証:この作例では 71項目の自動数値チェック を設定し、第432フレームでのまばたきや、各着地の位置などを1項目ずつ照合しました。初回の出力では6項目のズレがありましたが、修正して再レンダリングすることで、絵コンテの要件を具体的なフレーム単位で忠実に落とし込みました。
  • ディズニー・アニメーションの5大定番原則をコードへ翻訳:
    1. 予備動作(Anticipation):ジャンプの前にまず11フレームのタメのしゃがみ込み(スケール圧縮比 1.2 x 0.75)を実行。
    2. つぶしと伸ばし(Squash & Stretch):離陸の瞬間に身体が 0.85 x 1.28 に伸び、滞空時間は25フレーム。着地の瞬間に平たく 1.25 x 0.7 につぶれ、その後に減衰比0.55のスプリングで跳ね返りながら復元。
    3. 副次的アクションと時間差の重なり(Overlapping Action):身体がジャンプする際、四肢を同時に飛び立たせず、腕は4フレーム遅れ、脚は6フレーム遅れて追従。
    4. フォロースルーと余韻の動作(Follow-Through):身体が着地して停止した後も、腕は2.2 Hz・減衰比0.22の振動を続けながら徐々に元の位置へ復帰。
    5. 運動弧(Arcs):5番目のステップから1番目のステップへ宙返りで戻る際、運動軌跡は高さ3.5単位の点線の弧に沿って360度の後方宙返り(バク宙)を完遂。

キャラクターの識別性を保つため、まず胴体と四肢のプロポーションを固定します:0.1ボクセル、胴体 14×10×8、腕 3×2、4本の脚 2×3、目 2×3。ビジュアルは4回の修正を経て完成し、サウンドは初回の構成を踏襲しつつゲインノードやコンプレッサーなどの技術的問題を修正しました。

以下は3Dマスコットの初期プロンプト全文の日本語訳です。399語の英語原文も展開してコピーできます(日本語で理解・編集し、英語原文を対照できます):

日本語訳

3Dアニメーション原則のループモーションを構築してください。単一HTMLファイル、jsDelivrのimportmap経由でthree.js 0.160.0を読み込み、Google FontsからGeist Monoを読み込み。サイズ 1080x1080、8秒 60 fps(480フレーム)、第480フレームは第0フレームと等価。window.renderAt(t) は t のみによって任意のフレームを描画。シード付き疑似乱数のみを使用。

シーン:ミニチュアスタジオ。F4F2EEの背景上に 12x6 の白い厚みのあるボードを浮遊させる。ボードの上面はタイムライン:0.25サイズのフレームセルで構成された3本のトラック(EFEEEA)、フレーム数表示のあるルーラー、中央トラックに配置された2単位間隔の5つのキーフレーム菱形(白塗り、0F0F0Fの線)。ボードの周囲にライトスタンドを配置:キーライトのソフトボックス、リムライトストリップ、ブームスタンドのトップライト。
主役:0.1ボクセルで構築されたピクセル版Claudeマスコット:D97757の胴体 14x10x8、2本の 3x2 の腕、4本の 2x3 の脚、0F0F0Fの 2x3 の目。粗さ 0.45、クリアコート層 0.3。

ライティング、0〜1秒:0.1秒時にソフトシャドウを伴うキーライト 3200 Kを点灯、0.4秒時にリムライト 7500 Kを点灯、0.7秒時にトップライト 5000 Kを点灯。各ライトの点灯時には3フレームのちらつきを伴い、マスコットの目がそのライトを見渡す。
ジャンプ、1〜5秒:菱形2から5に向かって4回ジャンプし、それぞれ第105、165、225、285フレームに着地。各ジャンプ:11フレームのタメのしゃがみ込み(1.2x0.75)、離陸時に0.85x1.28に伸長、滞空25フレーム、着地時につぶれ 1.25x0.7、0.55減衰のスプリングでリバウンド。腕は4フレーム遅れ、脚は6フレーム遅れ。着地ごとに対応する菱形がFF6A2Bに点灯し、セルが0.08の高さの波紋を生じさせて12個のボクセルスパークを放出。単一ポイント光源を持つFF6A2Bの再生ヘッドが等速で移動し、マスコットの着地フレームでちょうど対応する菱形を通過。
宙返り、5〜6.4秒:菱形5から菱形1へと戻る点線の弧を描き、続いて18フレームの深いしゃがみ込みを行って弧に沿って360°宙返りを完了、最高到達高度 3.5、第384フレームで着地。同時に再生ヘッドは下方で巻き戻る。
ラベル、左上隅、Geist Mono 28 px:チェックリスト 01 ANTICIPATION、02 SQUASH & STRETCH(&はD97757)、03 OVERLAPPING ACTION、04 FOLLOW-THROUGH、05 ARCS、文字色は8E8A83。各行は正確なフレームで0F0F0Fに変色し、そのFF6A2Bの菱形を満たす:69(最初のしゃがみ)、140(伸長)、200(四肢の遅れての追従)、285(腕の安定復帰)、303(弧の描画)。
結び:静止ホールド、7.2秒でまばたき。第468フレームでライト、菱形、ラベルが同時に瞬時に消灯。
カメラ:FOV 18、仰角30°、8秒間で±10°のオービット回転、ジャンプ追従時に25%プッシュイン、宙返り着地時に4%のクイックプッシュ。
ポストプロセス:自己発光オブジェクトにbloomを追加、被写界深度はマスコットにフォーカス、粒子感 2%、ビネット 10%、背景のディザリンググラデーション。
英語原文 · マスコット初期プロンプト(完全版・コピー可)
Build a 3D animation-principles loop. One HTML file, three.js 0.160.0 via jsDelivr importmap, Geist Mono from Google Fonts. 1080x1080, 8 s at 60 fps (480 frames), frame 480 equals frame 0. window.renderAt(t) draws any frame from t alone; seeded random only.

Set: a miniature studio. A floating white 12x6 slab on an F4F2EE backdrop. Its top is a timeline: 3 tracks of 0.25 frame cells (EFEEEA), a ruler with frame numbers, 5 keyframe diamonds 2 units apart on the middle track (white fill, 0F0F0F outline). Around it on stands: a key softbox, a rim strip light, a top spot on a boom.
Hero: the pixel Claude mascot as 0.1 voxels: D97757 body 14x10x8, two 3x2 arms, four 2x3 legs, 0F0F0F 2x3 eyes; roughness 0.45, clearcoat 0.3.

Lights, 0 to 1 s: key 3200 K with soft shadows at 0.1 s, rim 7500 K at 0.4 s, top spot 5000 K at 0.7 s. Each clicks on with a 3-frame flicker, and the mascot's eyes glance at it.
Hops, 1 to 5 s: 4 hops to diamonds 2 to 5, landing on frames 105, 165, 225 and 285. Each hop: 11-frame crouch (1.2x0.75), stretch 0.85x1.28 at takeoff, 25 frames of air, squash 1.25x0.7 on landing, spring back at damping 0.55; arms lag 4 frames, legs 6. Each landing lights its diamond FF6A2B, ripples the cells 0.08 high and throws 12 voxel sparks. An FF6A2B playhead carrying a point light moves at constant speed and crosses each diamond on its landing frame.
Flip, 5 to 6.4 s: a dotted arc from diamond 5 back to diamond 1 draws in, then an 18-frame deep crouch and a 360° flip along the arc, 3.5 high, landing on frame 384 while the playhead rewinds under it.
Labels, top left, Geist Mono 28 px: a checklist 01 ANTICIPATION, 02 SQUASH & STRETCH (& in D97757), 03 OVERLAPPING ACTION, 04 FOLLOW-THROUGH, 05 ARCS, in 8E8A83. Each row turns 0F0F0F and fills its FF6A2B diamond on its exact frame: 69 (first crouch), 140 (stretch), 200 (limbs trail), 285 (arms settle), 303 (arc draws).
End: hold, blink at 7.2 s; on frame 468 the lights, diamonds and labels snap off.
Camera: FOV 18, 30° elevation, ±10° orbit over 8 s, 25% push-in tracking the hops, 4% punch-in on the flip landing.
Post: bloom on emissives, depth of field focused on the mascot, 2% grain, 10% vignette, dithered backdrop.
展開:ボクセルマスコット事例 4回の視覚修正ログ(英語・日本語対照)

日本語訳

1. レンダリング画面が全体的にグレーがかっており窮屈。カラー調整を行い、受光正面がD97757、発光菱形がFF6A2Bになるようにする。補助光を下げて消灯状態が50%付近になるようにし、カチッと点灯する瞬間がはっきりと識別できるようにする。キーライトを右前方28度に下げ、クールトーンのリムライトを左後方に配置して見えている側の輪郭を際立たせる。全体を44単位まで引き、浮遊ボード全体と3基すべてのライトスタンドが画面に収まるようにし、ボードの下にソフトシャドウを追加、スパークの大きさを0.075〜0.12に変更し、スケールの数字を大きくする。
2. 単一フレームのチェックと修正。すべての小道具がラベル文字エリアと重ならないようにする:45%の追従ジャンプに変更し、トップスポットライトをブームアームで右奥のコーナー(高さ5.8)に吊り下げ、宙返り軌道の上方に配置。点灯した各菱形の表面に柔らかな微光を放たせ、再生ヘッドのインジケーターライトをトラックの前端へ移動させて配線が菱形の下を通るようにする。点線の弧はマスコットの頭上から描き始め、三脚の各脚が確実にボード上に載るようにし、腕にはより大きくゆっくりとした安定バッファ(2.2 Hz、減衰 0.22)を与えて、フォロースルーのアクションがはっきりと視認できるようにする。
3. リムライトストリップの発光面をカメラ側に向け、点灯した瞬間が明確に識別できるようにする。
4. トップスポットライトの点灯の瞬間もはっきりと識別できるようにする:光斑を34度・光度45 cdに絞り込み、照明器具に発光するレンズ外枠を追加する。
英語原文 · マスコット画面修正(完全版・コピー可)
1. The render is washed out and cramped. Grade so the lit front face reads D97757 and lit diamonds read FF6A2B; drop the fill so lights-off sits near 50% and each click is obvious; lower the key to 28 degrees from the front right and put the cool rim at the back left so it edges the side we see. Pull the wide shot back to 44 units so the whole floating slab and all three stands are in frame, add a soft shadow under the slab, and make sparks 0.075 to 0.12 and ruler numbers bigger.
2. Frame check fixes. Keep every prop out of the label block: track the hops at 45% and hang the top spot at 5.8 on a boom from the back right corner, above the flip. Light each lit diamond with a soft glow from its face, move the playhead light to the front edge of the track and run its line under the diamonds. Start the dotted arc above the mascot's head, keep every tripod foot on the slab, and give the arms a bigger, slower settle (2.2 Hz, damping 0.22) so the follow-through reads.
3. Turn the rim strip's panel toward the camera so its click reads.
4. Make the top spot's click read too: narrow it to a 34 degree pool at 45 cd and give the lamp a glowing lens rim.
展開:ボクセルマスコット事例 サウンドプロンプト(英語・日本語対照)

日本語訳

# サウンドプロンプト
この8秒ループ(480フレーム、60 fps)の劇伴を作曲してください。Web Audio APIを用いてコード内ですべてのサウンドを合成し、サンプリング音源の使用や外部ダウンロードは行わないこと。120 BPM、4小節、Fメジャー。各ヒットポイントは対応する視覚イベントの1フレーム後に合わせる。
伴奏:パッドパート A3 E4(キーライト)、C5(トップライト)、G5(リムライト)、各パートは対応するライトの点滅に追従。8分音符のシェイカーは45フレームから、バスドラムとベースは60フレームから開始、各小節のルート音は順にF、D、Bb、F。バスドラムとシェイカーは330〜420フレームで休止、ベースはC音を持続し、その後に384フレームでF音。
スイッチのカチッという音:点灯 6、24、42フレーム、消灯 468フレーム。
しゃがみ込み 69、129、189、249、312フレーム:きしみ音、吸気のピッチ上昇音。
離陸 80、140、200、260、330フレーム:上向きの風切り音(ヒュー音)。
着地 105、165、225、285、384フレーム:つぶし比率に応じてピッチが変化するゴムのスクイーズ音、スパークのティン音、384フレームで最大。
ラベル通知音 A5 C6 D6 F6 A6:69、140、200、285、303フレーム。
点線のチクタク音 303〜318フレーム、宙返りの風切り音 330〜384フレーム、まばたきのビープ音 432フレーム。
48 kHz ステレオ WAV、約 -14 LUFS、ピーク -1 dBTP、シームレスループ、MP4へミックスして統合。
英語原文 · マスコット音響効果(完全版・コピー可)
# Sound prompt
Score this 8 s loop, 480 frames at 60 fps. Synthesize everything in code with the Web Audio API, no samples, no downloads. 120 BPM, 4 bars, F major. Each hit lands 1 frame after its visual event.
Bed: pad voices A3 E4 (key light), C5 (top), G5 (rim), each following its light's flicker. Shaker 8ths from 45, kick and bass from 60, roots F D Bb F by bar; kick and shaker rest 330 to 420, bass holds C, then F at 384.
Clicks: lights 6, 24, 42, off 468.
Crouches 69, 129, 189, 249, 312: creak, inhale riser.
Takeoffs 80, 140, 200, 260, 330: upward swish.
Landings 105, 165, 225, 285, 384: rubber squash pitched by the squash scale, spark tings, 384 biggest.
Label pings A5 C6 D6 F6 A6: 69, 140, 200, 285, 303.
Dot ticks 303 to 318, flip whoosh 330 to 384, blink blip 432.
48 kHz stereo WAV, about -14 LUFS, peak -1 dBTP, seamless loop, mux into the MP4.

初回はまず名称とテキストのみを変更し、サンプルの時間や運動パラメータはそのまま保持します。2巡目は一度に1つの数値のみを変更し、レンダリング後に比較します。有効な変更点を残していくことで、自身のプロジェクトに適したプロンプトを段階的に組み上げてください。

↑ 本文ここまで
✓ この記事は全文無料です

メンバーは全文 Markdown のコピー・保存に加え、自分の AI に購読・質問させることができます。

原文を読む ↗
📮 新着解説をメールでいち早く

役に立ちましたか?メールを登録すると、新着解説を公開と同時にお届けします。解除はいつでも。