1仕組みと動作原理
After Effectsからプロダクトへの架け橋として位置付け:ベクターアニメーションをJSONまたはzipコンテナにエンコードし、ランタイム側で再生することで解像度やプラットフォームから切り離す
The bridge from After Effects to product: vector animation shipped as JSON (or zipped `.lottie`), tiny and resolution-independent, played by a runtime on web, iOS, Android, and React Native.
再生制御はフレーム・セグメント・モードの3点セットをコアAPIとし、load/complete/frameイベントを用いてステートマシン型のオーケストレーションを行う
dotLottie.setSegment(30, 90); // constrain playback to a frame range (e.g. a "loading" loop)
アニメーションライブラリ不要のスクロール駆動:autoplay:falseとスクロール進捗のフレームマッピング(0..1をclampしてtotal-1を乗算)、またはlottie-interactivityによる宣言的設定
dotLottie.setFrame(p * (total - 1));
実行時テーマ切り替えの2つのアプローチ:.lottie内蔵の名前付きテーマ(setTheme/loadTheme、再エクスポート不要)と、layers[].shapes[]を手動走査してカラー値を書き換える脆弱なパッチ処理
load the JSON, walk `layers[].shapes[]` and patch `c.k` color arrays (normalized 0–1 RGBA), then init the player with the modified object. Brittle
エクスポート側のチェックリストを提供:Bodymovinのエクスポート手順、AEエクスプレッション、および大半のエフェクトが未サポートである既知のギャップを提示し、プレビューでは正しいのにプロダクト上で崩れる主因を解明
**Expressions** — not evaluated by runtimes. Bake expression-driven motion to keyframes (Bodymovin can pre-render some) or remove. Heavy-expression rigs are the #1 source of "looks wrong in product".
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| package | @lottiefiles/dotlottie-web(首选现代运行时:canvas 加 WASM) |
| package | @lottiefiles/lottie-interactivity(声明式交互模式) |
| package | lottie-web(遗留 .json 加 SVG 渲染器路径) |
| network | 交付页从 CDN 取 dotLottie 运行时(产物期引用,不判级;正文未点名具体域) |
| package | 移动端运行时:lottie-ios / lottie-android / lottie-react-native |
| cli | npx / Playwright(宿主侧截图工具)与仓库根 scripts/ 助手(seek-shot.sh、contact-sheet.sh 依赖 ffmpeg) |
4推奨統制措置と判定根拠
- 网络端点: 外部ネットワークアクセスの宣言: 実行時の外部通信はゼロ。本文の例に含まれるfetch("/icon.json")はローカルアセットを取得する相対パスであり、外部送信には非該当
- 本地工作目录: ファイル読み書きおよび成果物出力: 本スキルディレクトリ内へのディスク書き込みはゼロ。納品物は自己完結型の単一.html(ランタイム+canvas+相対パスの.lottie/.jsonまたはdata URL)
5二重目の独立検証
- [unlocatable] .lottie 比 .json 小 60–80% 这一数字 — SKILL.md 写 .lottie often 60–80% smaller,但源码内无基准、无样例文件(本 skill 目录不含任何 .lottie/.json 资产),属外部经验值,记为文档声明,不作已验证事实。
- [ok] 唯一的 fetch( 命中是否构成外发 — references/integration-and-export.md 的 const json = await fetch("/icon.json").then((r) => r.json()); 使用相对路径,取同源本地资产(用于手动改色),不构成网络外发;该写法位于 Manual color patching (last resort) 小节,正文亦标注为脆弱手段。
- [ok] 运行时 API 名称是否自洽(setFrame/setSegment/setMode/totalFrames) — SKILL.md 的 Playback control 段、Quick reference 表、冻结 harness 段与 references 第 1、3 节对同一组方法名(setFrame/setSegment/setSpeed/setMode/setTheme/totalFrames/play/pause/stop)表述一致,并明确区分 lottie-web 的 goToAndStop(N, true) 等价写法。
- [discrepancy] Packaged helper 的路径基准与语义 — SKILL.md 写 scripts/seek-shot.sh anim.html 0 1.5 3,scripts/ 在仓库根;且本 skill 的冻结单位是帧(?t=42),而 seek-shot.sh 把 ?t= 当秒数传参——即使路径正确,语义也需按帧自行换算。
6結論
d36e9095939adbd5…