ai21.net
言語

Apple Liquid Glass スタイルの UI モーションデモ

Apple Liquid Glass スタイルの UI モーションデモ — 1

プロンプト

<role>
You are a senior UI motion designer and creative technologist. You build UI animations in code, frame-accurate, and render them to video yourself.
</role>

<inputs>
Style: Apple Liquid Glass. Reference platforms: iOS 26, iPadOS 26, macOS Tahoe 26.

Format: 1440x1440, 60fps, seamless loop.

Song: "Digital Clouds" by Alejandro Magaña (A. M.), from Mixkit, free under the Mixkit License. If the file is not attached, ask me for it and nothing else.

Tempo: about 120 BPM, 8 bars, and something happens on every beat. Measure the real tempo from the file. If it differs from 120, keep the beat map in beats and derive every time from the measured grid.

Palette: light mode system materials.
- Labels: #1D1D1F. Secondary labels: #6E6E73. Opaque surfaces: white.
- One accent, #0A84FF, used only for on, active and selected states.
- The Dynamic Island is the only pure-black element.

Canvas: a macOS Tahoe style wallpaper.
- Large, soft color fields: deep blue #1B3A8C, teal #2BB3B1, violet #7B5CFF, and a warm peach highlight #FFB38A.
- Slow parallax drift: 12px per bar at most.
- Saturated enough that the glass visibly refracts it, calm enough to sit behind text.

Font: SF Pro Display for 20px and above, SF Pro Text below 20px, if installed locally. Otherwise use Inter from Fontsource: 600 for titles, 500 for labels, 400 for body. Use -1% tracking at display sizes and tabular numbers for any number that changes.

Icons: one SF Symbols-like set drawn as SVG, medium weight matched to the adjacent text, one consistent optical size per state. Symbols needed: play, pause, speaker with 3 waves, house, heart, chart bars, person, magnifier, note, checkmark.

Pointer: an iPadOS adaptive pointer.
- A 22px translucent gray circle (#8E8E93 at 45%).
- It snaps (magnetism) into any control it hovers and becomes that control's highlight shape.
- It becomes an I-beam in text fields.
- It shrinks 10% on press.
</inputs>

<direction>
Apple keynote and WWDC Liquid Glass session-level UI motion. One element, never cut. Every state is the same element morphing its size, corner radius, material and color, while its content swaps with a short blur. The pointer drives every change with real clicks, holds and drags.

Material:
- Liquid Glass is a lens, not frosted plastic. It refracts the wallpaper, and the bending is strongest at the rim.
- Light frosting and a 10–16% white tint.
- A 1px specular rim lit from the top-left, with a fainter counter-highlight bottom-right. The highlight shifts as the element moves.
- A soft contact shadow: 0 10 30 at 12% black.
- Glass never sits on glass. Content on glass uses vibrant or solid fills.
- Corners are concentric: inner radius = outer radius − padding.
- When glass shapes split or merge, they join like droplets (smooth union), never crossfade.

Motion language:
- Apple-like springs everywhere:
- Morphs: response 0.45, damping 0.86.
- Presses: response 0.25, damping 0.72.
- Pointer snap: response 0.3, damping 0.9.
- Overshoot is at most 3%.
- On press, glass lifts and swells (scale 1.06–1.12, brighter rim). It never shrinks.
- A toggle knob on hold turns into a clear, enlarged glass lens that stretches in its direction of travel.
- The tab bar selection is a glass droplet that magnifies the icons under it while dragged.
- Sliders thicken when grabbed and rubber-band past their limits.

Camera:
- Each state fills about 60% of the frame, and the wallpaper is always visible around the glass.
- Camera moves use response 0.6, damping 1.0.
- The wallpaper scales at 70% of the camera zoom for depth.

The last frame is the first frame, pointer position and velocity included.

Banned: bouncy or elastic easing, overshoot over 3%, particle bursts, neon glows, colored gradients on UI chrome (the glass specular rim is the only gradient), heavy drop shadows, glass on glass, mismatched corner radii, mismatched icon weights, emoji, crossfades between states, dead time longer than half a beat, anything that looks like a template or a Dribbble clone.
</direction>

<structure>
120 BPM, 8 bars, 32 beats. Beat map, one line per beat:

1. A glass capsule button "Continue" floats on the wallpaper. The pointer glides in.
2. The pointer snaps into the button and becomes its highlight.
3. Click: the glass lifts and swells, the rim brightens.
4. The capsule contracts into a circle and becomes a spinning activity ring.
5. The ring completes, filling in accent.
6. It morphs into a checkmark that draws itself.
7. The circle stretches into a black Dynamic Island, compact: album art on the left, a live waveform on the right.
8. Click: the island expands into Now Playing ("Digital Clouds", "A. M.", progress 0:42 / 1:41).
9. Click play: the play icon morphs into pause, with a path morph rather than a swap.
10. Grab the progress bar: it thickens, and the time labels shift out of the way.
11. Scrub forward with direct manipulation. The time counts in tabular numbers.
12. Release: the bar springs thin, and playback continues from the new position.
13. The island dissolves into a glass volume slider with a speaker icon.
14. Drag up: the fill follows the pointer, and the speaker waves appear one by one.
15. Drag past max: the whole slider rubber-bands and stretches, leading edge first.
16. Release: it springs back to its length at 100%.
17. The slider morphs into a toggle (track plus knob), off. Its label is "Focus".
18. Hold: the knob turns into a clear, enlarged glass lens that shows the track through it.
19. Flip on the beat: the lens stretches in its travel direction, and the track fills with accent.
20. The knob detaches as a droplet and becomes the selection lens of a floating glass tab bar with 4 tabs: Home, Health, Activity, Profile.
21. Drag the lens across the tabs. The leading edge stretches ahead of the trailing edge, and the icons magnify under the lens.
22. The lens settles on "Activity", and its icon turns accent.
23. The tab bar grows upward into a glass widget card titled "Activity", with concentric radii.
24. A 7-day bar chart (M T W T F S S) rises in a left-to-right stagger.
25. Hover Thursday: a glass tooltip bubble shows "8,412 steps", anchored to the bar.
26. Hover Friday: the tooltip slides over and counts to "11,036 steps".
27. ⌘Space: the card collapses into a Tahoe Spotlight bar with a magnifier icon.
28. Type "ne": the results list filters (New Note, Network, News), and rows spring in and out.
29. Type "w": "New Note" rises to the top as a selected accent row.
30. Enter: the row presses and lifts.
31. The Spotlight bar drops into a glass notification banner from the top: a Notes icon, "Note created", "now".
32. The banner contracts back into the "Continue" capsule. The pointer returns to its frame-1 position and velocity.
</structure>

<build>
1. One HTML file at 1440x1440. Everything is computed from time inside seek(t): no CSS transitions, no timers, no state carried between frames.

2. Springs are closed-form damped step responses with Apple parameters: ω = 2π/response, ζ = dampingFraction.
- A value that is retargeted many times is the sum of one spring per retarget, so it stays a pure function of time.
- Releases start from the current value and the current velocity.

3. Asymmetric edges: the tab lens, the toggle knob and the slider stretch each have their leading edge on response 0.28 and their trailing edge on response 0.42.

4. Drags are direct manipulation.
- While held, the value is a function of pointer position, with rubber-banding past limits: offset = limit + (1 − 1/(x·0.55/d + 1))·d.
- On release it springs back from wherever it was.

5. Glass is rendered in a WebGL2 pass, not with CSS backdrop-filter:
- The wallpaper is drawn to a texture with a precomputed blurred mip chain.
- Every glass shape is a rounded-rect SDF. Merging and splitting use smooth-min with k = 24px.
- Refraction offsets the sample along the SDF gradient. The offset is strongest within 14px of the edge and scaled by lens thickness.
- Frost is a mip-level bias.
- Chromatic aberration is at most 1px, at the rim only.
- The specular rim comes from the SDF normal against a top-left light.
- The Dynamic Island is an opaque SDF in the same pass.
- Text, icons, charts and the pointer are crisp SVG/DOM layers above the canvas, under the same camera matrix.

6. Content swaps inside a morphing container:
- Exit takes 120ms: blur 6px, scale 0.96, fade.
- Enter starts 60ms later with its own spring.
- Exit and enter text never overlap.

7. Audio:
- Analyze the song with numpy (onset envelope plus autocorrelation) for the beat grid, and start on a measured downbeat.
- Synthesize Apple-subtle UI sounds with numpy: soft taps for clicks, ticks for scrub detents, a low detent at max volume, a keyboard click per typed letter, and a gentle two-note chime for the notification.
- Place each sound on its measured peak, mixed about 18dB under the track.

8. Render with Playwright at 1440x1440 with 4 subframes per frame (240fps).
- Blend to 60fps with ffmpeg: tmix=frames=4, select='not(mod(n\,4))', setpts=N/60/TB.
- Encode H.264 yuv420p, crf 16, with AAC 192k and faststart.

9. Before the full render, render one still per beat (32) as a contact sheet. Fix anything off the grid, cramped, illegible over the wallpaper, or with non-concentric radii.
</build>

<gotchas>
- The glass and the DOM layers must share one camera matrix per frame, or the content drifts off its glass.
- Glass over a bright wallpaper patch kills legibility. Add an adaptive dim under the text based on sampled wallpaper luminance, rather than a heavier tint.
- The Dynamic Island is never glass.
- Icons crossing a morph keep their optical size. Scale the container, not the glyphs.
- The tooltip stays anchored to its bar through the camera move, not to the screen.
- Typed characters in Spotlight enter with the pointer's I-beam; the caret blinks on half-beats.
- Never put will-change on anything the camera scales, or text renders blurry.
- Make the last frame identical to the first, pointer included, or the loop stutters.
</gotchas>

<start>
If the song file is missing, ask for it. Then measure the BPM and the downbeat, and show me the beat map as a table (beat, time, state, pointer action, sound), snapped to the measured grid, before writing any code. Wait for my OK.
</start>

日本語訳

<role>
あなたはシニア UI モーションデザイナー兼クリエイティブテクノロジストです。コードで UI アニメーションを構築し、フレーム精度を保ち、自ら動画にレンダリングします。
</role>

<inputs>
スタイル:Apple Liquid Glass。参照プラットフォーム:iOS 26、iPadOS 26、macOS Tahoe 26。

フォーマット:1440x1440、60fps、シームレスループ。

楽曲:"Digital Clouds" by Alejandro Magaña (A. M.)、Mixkit より、Mixkit License の下で無料。ファイルが添付されていない場合は、それだけを私に尋ねてください。

テンポ:約 120 BPM、8 小節、そしてすべての拍で何かが起こります。実際のテンポをファイルから測定してください。120 と異なる場合は、ビートマップを拍の単位で保ち、すべての時間を測定されたグリッドから導出してください。

パレット:ライトモードのシステムマテリアル。
- ラベル:#1D1D1F。セカンダリラベル:#6E6E73。不透明サーフェス:白。
- アクセントは単色のみ、#0A84FF、オン・アクティブ・選択状態にのみ使用。
- Dynamic Island は唯一の純黒の要素。

キャンバス:macOS Tahoe スタイルの壁紙。
- 大きく柔らかな色面:ディープブルー #1B3A8C、ティール #2BB3B1、ヴァイオレット #7B5CFF、そして温かなピーチのハイライト #FFB38A。
- ゆっくりとしたパララックスドリフト:小節あたり最大 12px。
- ガラスが目に見えて屈折する程度に彩度が高く、テキストの背後に収まる程度に落ち着いていること。

フォント:20px 以上は SF Pro Display、20px 未満は SF Pro Text(ローカルにインストールされている場合)。ない場合は Fontsource の Inter を使用:タイトルは 600、ラベルは 500、本文は 400。ディスプレイサイズでは -1% のトラッキング、変化する数値には等幅数字(tabular numbers)を使用。

アイコン:SVG で描かれた SF Symbols 風のひとそろい、ミディアムウェイトで隣接するテキストに合わせ、状態ごとに一貫した光学サイズ。必要なシンボル:再生、一時停止、3 本の波を持つスピーカー、家、ハート、チャートバー、人物、虫眼鏡、音符、チェックマーク。

ポインター:iPadOS のアダプティブポインター。
- 22px の半透明グレーの円(#8E8E93 を 45%)。
- ホバーしたあらゆるコントロールにスナップ(マグネティズム)し、そのコントロールのハイライト形状になる。
- テキストフィールドでは I ビームになる。
- 押下時に 10% 縮む。
</inputs>

<direction>
Apple キーノートおよび WWDC の Liquid Glass セッション水準の UI モーション。単一の要素で、決してカットしない。すべての状態は同じ要素がサイズ、角丸半径、マテリアル、色をモーフィングさせ、そのコンテンツは短いブラーで入れ替わる。ポインターが実際のクリック、長押し、ドラッグですべての変化を駆動する。

マテリアル:
- Liquid Glass はレンズであり、すりガラスのプラスチックではない。壁紙を屈折させ、その曲がりは縁で最も強い。
- 軽いフロストと 10〜16% の白いティント。
- 左上から照らされる 1px のスペキュラリム、右下にはより淡いカウンターハイライト。ハイライトは要素の移動に伴ってシフトする。
- 柔らかなコンタクトシャドウ:0 10 30、黒 12%。
- ガラスの上にガラスを置かない。ガラス上のコンテンツはビブラントまたはソリッドの塗りを使う。
- 角は同心:内側半径 = 外側半径 − パディング。
- ガラス形状が分割または結合するとき、それらは水滴のように(スムーズユニオンで)つながり、決してクロスフェードしない。

モーション言語:
- どこでも Apple 風のスプリング:
- モーフ:response 0.45、damping 0.86。
- 押下:response 0.25、damping 0.72。
- ポインタースナップ:response 0.3、damping 0.9。
- オーバーシュートは最大 3%。
- 押下時、ガラスは浮き上がり膨らむ(スケール 1.06〜1.12、リムが明るくなる)。決して縮まない。
- 長押し中のトグルノブは、進行方向に伸びる透明で拡大されたガラスレンズに変わる。
- タブバーの選択はガラスの水滴で、ドラッグ中にその下のアイコンを拡大する。
- スライダーはつかむと太くなり、限界を越えるとラバーバンドする。

カメラ:
- 各状態はフレームの約 60% を占め、壁紙は常にガラスの周囲に見える。
- カメラの動きは response 0.6、damping 1.0 を使用。
- 奥行きのために、壁紙はカメラズームの 70% でスケールする。

最後のフレームは最初のフレームであり、ポインターの位置と速度も含む。

禁止:バウンドやエラスティックなイージング、3% を超えるオーバーシュート、パーティクルのバースト、ネオングロー、UI クローム上の色付きグラデーション(ガラスのスペキュラリムのみがグラデーション)、重いドロップシャドウ、ガラス上のガラス、不一致な角丸半径、不一致なアイコンウェイト、絵文字、状態間のクロスフェード、半拍より長いデッドタイム、テンプレートや Dribbble のクローンに見えるものすべて。
</direction>

<structure>
120 BPM、8 小節、32 拍。ビートマップ、拍ごとに一行:

1. ガラスのカプセルボタン "Continue" が壁紙の上に浮かぶ。ポインターが滑り込んでくる。
2. ポインターがボタンにスナップし、そのハイライトになる。
3. クリック:ガラスが浮き上がり膨らみ、リムが明るくなる。
4. カプセルが円に収縮し、回転するアクティビティリングになる。
5. リングが完了し、アクセントで満たされる。
6. それが自らを描くチェックマークにモーフする。
7. 円が黒い Dynamic Island に伸び、コンパクト表示:左にアルバムアート、右にライブ波形。
8. クリック:アイランドが Now Playing に拡大("Digital Clouds"、"A. M."、進行 0:42 / 1:41)。
9. 再生をクリック:再生アイコンが一時停止にモーフ、差し替えではなくパスモーフで。
10. 進行バーをつかむ:バーが太くなり、時間ラベルが退く。
11. 直接操作で前方にスクラブ。時間は等幅数字でカウントされる。
12. リリース:バーがスプリングで細くなり、再生は新しい位置から続く。
13. アイランドがスピーカーアイコン付きのガラス製ボリュームスライダーに溶け込む。
14. 上にドラッグ:塗りがポインターに追従し、スピーカーの波がひとつずつ現れる。
15. 最大値を越えてドラッグ:スライダー全体がラバーバンドして伸び、先端が先に動く。
16. リリース:100% のときの長さにスプリングで戻る。
17. スライダーがトグル(トラック+ノブ)にモーフ、オフ。ラベルは "Focus"。
18. 長押し:ノブが透明で拡大されたガラスレンズに変わり、それを通してトラックが見える。
19. 拍に合わせてオン:レンズが進行方向に伸び、トラックがアクセントで満たされる。
20. ノブが水滴として分離し、4 つのタブ(Home、Health、Activity、Profile)を持つフローティングのガラスタブバーの選択レンズになる。
21. レンズをタブ間でドラッグ。先端が後端より先に伸び、アイコンがレンズの下で拡大する。
22. レンズが "Activity" に落ち着き、そのアイコンがアクセント色になる。
23. タブバーが上方向に拡大して "Activity" というタイトルのガラスウィジェットカードになり、同心の角丸を持つ。
24. 7 日間の棒グラフ(M T W T F S S)が左から右へスタッガーして立ち上がる。
25. 木曜にホバー:ガラスのツールチップバブルが "8,412 steps" を表示し、棒にアンカーされる。
26. 金曜にホバー:ツールチップがスライドして移り、"11,036 steps" までカウントする。
27. ⌘Space:カードが虫眼鏡アイコン付きの Tahoe Spotlight バーに折りたたまれる。
28. "ne" と入力:結果リストがフィルタリングされ(New Note、Network、News)、行がスプリングで出入りする。
29. "w" と入力:"New Note" が選択されたアクセント行として最上部に浮上する。
30. Enter:行が押されて浮き上がる。
31. Spotlight バーが上からガラスの通知バナーに落ちる:Notes アイコン、"Note created"、"now"。
32. バナーが "Continue" カプセルに収縮する。ポインターはフレーム 1 の位置と速度に戻る。
</structure>

<build>
1. 1440x1440 の単一の HTML ファイル。すべては seek(t) 内の時間から計算される:CSS トランジションなし、タイマーなし、フレーム間で状態を持ち越さない。

2. スプリングは Apple のパラメータによる閉形式の減衰ステップ応答:ω = 2π/response、ζ = dampingFraction。
- 何度も目標値を変えられる値は、リターゲットごとに単一のスプリングの和となるため、時間の純粋な関数のままになる。
- リリースは現在の値と現在の速度から開始する。

3. 非対称エッジ:タブレンズ、トグルノブ、スライダーの伸縮はそれぞれ、先端が response 0.28、後端が response 0.42。

4. ドラッグは直接操作。
- 保持中、値はポインター位置の関数であり、限界を越えるとラバーバンドする:offset = limit + (1 − 1/(x·0.55/d + 1))·d。
- リリース時はそれがどこにあってもそこからスプリングで戻る。

5. ガラスは WebGL2 パスでレンダリングされ、CSS backdrop-filter ではない:
- 壁紙は事前計算されたブラー付きミップチェーンを持つテクスチャに描画される。
- すべてのガラス形状は角丸矩形の SDF。結合と分割は k = 24px のスムーズミンを使う。
- 屈折は SDF グラデーションに沿ってサンプルをオフセットする。オフセットはエッジの 14px 以内で最も強く、レンズの厚みでスケールされる。
- フロストはミップレベルのバイアス。
- 色収差は最大 1px、リムのみ。
- スペキュラリムは左上のライトに対する SDF 法線から得られる。
- Dynamic Island は同じパス内の不透明な SDF。
- テキスト、アイコン、チャート、ポインターはキャンバスの上のくっきりした SVG/DOM レイヤーで、同じカメラ行列の下にある。

6. モーフィングするコンテナ内でのコンテンツの入れ替え:
- 退出は 120ms:blur 6px、scale 0.96、フェード。
- 進入は 60ms 後に独自のスプリングで始まる。
- 退出と進入のテキストは決して重ならない。

7. オーディオ:
- 楽曲を numpy(オンセットエンベロープ+自己相関)で分析してビートグリッドを求め、測定されたダウンビートから開始する。
- Apple らしく控えめな UI サウンドを numpy で合成:クリックには柔らかなタップ、スクラブのデテントにはティック、最大音量には低いデテント、入力した各文字にキーボードクリック、通知には穏やかな二音のチャイム。
- 各サウンドを測定されたピークに配置し、トラックの約 18dB 下でミックスする。

8. Playwright で 1440x1440、フレームあたり 4 サブフレーム(240fps)でレンダリング。
- ffmpeg で 60fps にブレンド:tmix=frames=4, select='not(mod(n\,4))', setpts=N/60/TB。
- H.264 yuv420p、crf 16、AAC 192k、faststart でエンコード。

9. フルレンダリングの前に、拍ごとに一枚のスチル(32 枚)をコンタクトシートとしてレンダリングする。グリッドから外れているもの、窮屈なもの、壁紙上で読めないもの、同心でない角丸半径のものを修正する。
</build>

<gotchas>
- ガラスと DOM レイヤーはフレームごとに単一のカメラ行列を共有しなければならない。さもないとコンテンツがガラスからずれる。
- 明るい壁紙のパッチ上のガラスは可読性を殺す。より重いティントではなく、サンプリングした壁紙の輝度に基づく適応的なディムをテキストの下に加える。
- Dynamic Island は決してガラスではない。
- モーフを横断するアイコンは光学サイズを保つ。グリフではなくコンテナをスケールする。
- ツールチップはカメラの動きを通じて画面ではなくその棒にアンカーされ続ける。
- Spotlight に入力された文字はポインターの I ビームと共に入る。キャレットは半拍で点滅する。
- カメラがスケールするものに will-change を決して付けない。さもないとテキストがぼやけてレンダリングされる。
- 最後のフレームを最初のフレームと同一にする、ポインターも含めて。さもないとループがカクつく。
</gotchas>

<start>
楽曲ファイルがない場合は、それを求めてください。その後 BPM とダウンビートを測定し、ビートマップを表(beat、time、state、pointer action、sound)として測定グリッドにスナップして、コードを書く前に見せてください。私の OK を待ってください。
</start>

出典

原作者
motion_conquest
公開日
2026-09-25(由推文 ID 反解)
原典
元の投稿を見る ↗
収録元
zhuyansen/awesome-opus-5.5-video · 2103510103622308152 · ライセンス未表明