{
  "schemaVersion": 1,
  "name": "motion-grammar",
  "description": "Reusable motion-graphics principles extracted from reference films and proven with original samples.",
  "homepage": "https://motion-grammar.akiho.dev",
  "count": 2,
  "items": [
    {
      "slug": "podium-brand-launch",
      "title": "One beat, many directions",
      "branch": "spatial-orchestration",
      "branchLabel": "Spatial orchestration",
      "summary": "共有する進行率に、素材ごとの x / y / z ベクトルを掛ける。同期感を保ったまま、複数面を別方向へ解放する文法。",
      "thesis": "同時に動くことと、同じ動きをすることは違う。時間を共有し、方向だけを分けると、物量が一つの意思に見える。",
      "tags": [
        "shared progress",
        "xyz vectors",
        "camera chase",
        "scale contrast",
        "artboard field"
      ],
      "useCases": [
        "複数のページやポスターを一度に展開するブランド映像",
        "カード束から一つの成果物へ着地する紹介動画",
        "色面を次の場面の背景として受け渡す転換"
      ],
      "principles": [
        {
          "title": "Shared progress × individual vector",
          "description": "各面へ別の delay を配らず、共通の progress と easing を使う。translate3d・rotation・size の差だけで別方向を作る。"
        },
        {
          "title": "Camera as a reading cursor",
          "description": "カメラを任意の軌道へ走らせず、字画や輪郭の接線を読むように移動させ、次の線へ4–8 frames重ねる。"
        },
        {
          "title": "Build mass, then select one",
          "description": "小さなカード投入と、束全体を拡大する大きな motion を分離する。最後の push-in で見る対象を一つに決める。"
        },
        {
          "title": "Promote color into space",
          "description": "紹介した色面を捨てず、全画面化して次の scene の床として使う。説明と転換を一つの motion にする。"
        }
      ],
      "parameters": [
        {
          "label": "Shared move",
          "value": "1,700–1,900 ms",
          "note": "同一 easing、element stagger は0–40 ms"
        },
        {
          "label": "Perspective",
          "value": "1,200–1,600 px",
          "note": "background z は -900 … -250 px"
        },
        {
          "label": "Artboards",
          "value": "9–15",
          "note": "最終的に残す主題は3枚以下"
        },
        {
          "label": "Card entrance",
          "value": "360–440 ms",
          "note": "stagger は後半ほど320 → 220 msへ圧縮"
        },
        {
          "label": "Selection push",
          "value": "720 ms",
          "note": "scale 2.4–2.8、selected content を維持"
        }
      ],
      "durationSeconds": 12,
      "pageUrl": "https://motion-grammar.akiho.dev/refs/podium-brand-launch/",
      "sampleUrl": "https://motion-grammar.akiho.dev/_astro/one-beat-many-directions.Ddt85XmB.mp4",
      "reference": {
        "title": "Podium brand launch",
        "url": "https://x.com/zypsy/status/2076691631189684630",
        "credit": "Zypsy"
      },
      "source": {
        "grammarUrl": "https://github.com/akifo/akiho.dev--motion-grammar/blob/main/refs/podium-brand-launch/grammar.md",
        "reportUrl": "https://github.com/akifo/akiho.dev--motion-grammar/blob/main/refs/podium-brand-launch/report.md"
      }
    },
    {
      "slug": "openai-brand-film",
      "title": "Semantic relay",
      "branch": "semantic-editorial",
      "branchLabel": "Semantic editorial",
      "summary": "同じ要素を場面の境界まで残し、位置・縮尺・密度・役割を変えながら次の完成構図へ受け渡す文法。",
      "thesis": "シームレスさは、似た画面を並べることではない。同じ意味を持つ要素が、次の場面でも実在し続けることで生まれる。",
      "tags": [
        "semantic anchor",
        "designed states",
        "resolution reflow",
        "persistent field",
        "readable hold"
      ],
      "useCases": [
        "設計図から細部、完成形へ意味の解像度を変える映像",
        "1点から4・24・96点へ密度を上げる specimen",
        "異種素材を消さずに再配置する application field"
      ],
      "principles": [
        {
          "title": "Designed state before transition",
          "description": "各 scene を単独の静止画として完成させる。transition は弱い構図を隠すためでなく、完成状態同士をつなぐために使う。"
        },
        {
          "title": "Keep a semantic anchor alive",
          "description": "接点・曲線・選択素材など1–2点を境界の両側へ残す。着地点の誤差を6 px以内にし、100–350 msで役割を整理する。"
        },
        {
          "title": "Reflow resolution, not cards",
          "description": "要素を同じ座標へ追加せず、1 → 4 → 24 → 96の完成組版へ置換する。縮小の運動量だけを次の密度へ渡す。"
        },
        {
          "title": "Persist the heterogeneous field",
          "description": "初期の3–4素材を同じ layer のまま後期へ運ぶ。共通 progress と個別 vector で再構成し、その途中から新素材を重ねる。"
        }
      ],
      "parameters": [
        {
          "label": "Anchor relay",
          "value": "150–350 ms",
          "note": "位置誤差0–6 px、同時に残す点は1–2"
        },
        {
          "label": "Semantic zoom",
          "value": "3.5–6×",
          "note": "fixed chrome と意味上の接点を保持"
        },
        {
          "label": "Resolution ladder",
          "value": "1 → 4 → 24 → 96",
          "note": "各 state に650–1,150 msのreadable hold"
        },
        {
          "label": "Field recompose",
          "value": "500–900 ms",
          "note": "persistent artifact は3–4点"
        },
        {
          "label": "Late field",
          "value": "14–28 artifacts",
          "note": "最大 / 最小の主題高は20–60×"
        }
      ],
      "durationSeconds": 13,
      "pageUrl": "https://motion-grammar.akiho.dev/refs/openai-brand-film/",
      "sampleUrl": "https://motion-grammar.akiho.dev/_astro/semantic-editorial.Uw9Yo6j2.mp4",
      "reference": {
        "title": "OpenAI Brand Film",
        "url": "https://vimeo.com/1122006941",
        "credit": "STUDIO DUMBAR/DEPT®"
      },
      "source": {
        "grammarUrl": "https://github.com/akifo/akiho.dev--motion-grammar/blob/main/refs/openai-brand-film/grammar.md",
        "reportUrl": "https://github.com/akifo/akiho.dev--motion-grammar/blob/main/refs/openai-brand-film/report.md"
      }
    }
  ]
}