1仕組みと動作原理
位置付けはゲートウェイ(GATEWAY):HyperFrames アニメーションを制作する前に必ず最初に読み込みます。各シームで何が起きるか、各シーンがどう演技するかを決定し、技法スキルがその実装を担います。また、これらのルールは汎用や上流のモーション指針より優先されます。防ぐべき失敗は「シーンごとの孤立した制作」であり、各カットポイントで視線の運動量が途切れ、インとアウトの間でシーンがその場で行き場なく揺れてしまう現象です。
Read this before composing any animation. It decides WHAT happens at every seam and how every scene performs; the technique skills implement it. These rules supersede generic / upstream motion guidance. The failure this prevents: scenes authored in isolation — the eye's momentum dies at every cut, and scenes wobble in place between entry and exit.
ルーティングテーブルによって「判断」と「実装」を分離:シームの選定・パラメータ・コード → cut-the-curve §1–5、テキスト登場カスケード → §6、グループの再配置 → §7、カーソルアクション・シーン導入・モーフィング発火 → oversized-cursor、シーム描画機構・白フラッシュ防止 → seam-craft、製品ローンチ・解説・字幕 → 上流スキルに重ねて text-beat-economics / brand-faithful / captions-overlay を適用します。
| Cursor-led action / scene kickoff / morph ignition | `oversized-cursor` | | Seam render mechanics / white-flash guard | `seam-craft` |
固定された制作フローを規定:最初にベクトル台帳 `ledger.json` を作成 → それを用いて主シームを一括スタンプ(`seam-stamp.mjs --write index.html`)→ フェーズごとに持続モーションルートを選択 → キャリアと因果関係を確定 → コンポジションを構築 → `seam-gate.mjs` で検証。手動で記述が必要なのは Tier-A のモーフィング/マッチカットのみで、スタンプ生成されたシームは構造上そのままゲートを通過します。
Authoring order: **vector ledger (`ledger.json`) → STAMP the master seams from it (`scripts/seam-stamp.mjs --ledger ledger.json --write index.html`) → sustained-motion route per phase → carriers and causes → build comps → VERIFY (`scripts/seam-gate.mjs`).** Hand-author only Tier-A morphs/match-cuts; stamped seams pass the gate by construction.
ベクトル4原則:① 軸を維持する(xはx、yはy、ZはZのまま);② 方向を反転させない——Z軸の方向はスケール変化の【符号】(拡大=前進/カメラプッシュ、縮小=後退/カメラプル)であり、「縮小退場に対して小型から拡大して登場させる」のは最も多い違反です(grow-from-small が要素のデフォルト登場であるため);③ 速度を一致させる;④ 位相——カットの両側が運動中であること。カット前での静止や、カット後に静止状態から動き出すのはデッドビートとなります。
2. **Direction** — never mirror. On Z, direction = the SIGN of scale change: growing = push (camera forward), shrinking = pull (camera back).
速度一致の力学をルールとして明文化:イン初速 ≈ アウト終速。ミラーイージング(退場に `power4.in` + 登場に `power4.out`、同一距離・同時間、想定軌道の50%以上からインが接続)を用い、具体的な力学実装は cut-the-curve に委ねます。
3. **Speed** — entry initial velocity ≈ exit final velocity, via mirrored eases (exit `power4.in` + entry `power4.out`, same distance and duration; the incoming side picks up ≥50% through the notional path). Mechanics in `cut-the-curve`.
カレント(The Current):作品ごとに1つの主導方向(標準デフォルトは LEFT)を定め、通常のシームはすべてそれに従います。その他のベクトルは意図的な表現として予約されます——上方向=リフト(結論や開示をより高所へ)、Z正方向=同一思考の深部への推進、Z逆方向=到達(より大きな対象の着地)、スケールバースト=別世界への離脱。連続する逆方向シームは禁止(往復運動はエラーとして認識される)とし、方向転換には視覚的な原因(クリック/バウンス/衝突)またはチャプター境界が必須です。
Every film picks ONE dominant direction (house default: LEFT). Every ordinary seam uses it. Other vectors are RESERVED — spending one means something:
ベクトル台帳(Vector Ledger)は、メインタイムラインを作成する前にプロジェクトルートの `ledger.json` として作成必須。シームごとに1行を割り当て、カット時刻、アウトおよびインのベクトル(軸+符号付き方向、Z行にはスケール符号)、セレクタ、技法を記述します。出入りは一致する必要があり、不一致行はイージングではなく計画自体を修正します。バリデータは静的な行整合性チェックの後にランタイムサンプリングを実行します。
Write it before authoring any master timeline — as **`ledger.json` at the project root** (schema: `references/seam-gate.md`). One row per seam: cut time, exit and entry vectors (axis + signed direction; Z rows carry the scale sign), selectors, technique. Exit and entry must match; if a row mismatches, fix the plan, not the easing.
キャリア(Carriers)と因果的モーション(Causal Motion):視線は抽象概念ではなくオブジェクトを追跡します。最も強固なシームは、特定キャリアの位置と速度を一致させてカット境界を越えて受け渡します(軌道上のカーソル、次レイアウトに縮小・格納されるコンテナ、正確なスロットに飛び込むトークン、ウォーターフォールカットの単語群など)。自然なキャリアがない場合はシーンの主役が担い、クロスフェードはキャリアが存在しないため絶対に使用しません。運動は連鎖させ(クリック → 圧縮 → スナップ反発 → 飛び出し → 衝突 → リコイル → 開示)、効果は原因となったフレームで発生させ、反作用は仮想の質量に応じてスケールし、外力のみが方向変更を正当化します。
The eye follows objects, not abstractions. The strongest seams hand a concrete carrier across the cut at matched position AND velocity: a cursor mid-path, a container that shrinks/docks into the next layout, a mark that flies into its exact slot, the word group of a waterfall cut.
Seam Gate はビルドゲートとして機能:生成(`seam-stamp.mjs --ledger ledger.json --write index.html`)してから検証(`seam-gate.mjs verify --ledger ledger.json --project .`)を実行し、「exit 0 でなければシームは未完了」とみなします。検査項目は台帳行の整合性、カット点での退場運動の継続、半途からの登場(静止スタートの禁止)、実測方向=台帳方向、出入速度の一致(WARN)、ゼロオーバーラップ(毎フレーム片側のみ可視——カットはディゾルブではない)、Z符号ルール(両側の d(scale)/dt 同符号、および登場シーン自体の内部競合スキャン)、キャリア境界の矩形連続性(親のスケールを考慮)を含みます。
node <SKILL_DIR>/scripts/seam-stamp.mjs --ledger ledger.json --write index.html # generate node <SKILL_DIR>/scripts/seam-gate.mjs verify --ledger ledger.json --project . # verify
スクリプトで検証できない領域は作成者の責任:① シーンの開始/終了約1秒に対するあらゆる変更(ナレーション調整に伴うリタイミングを含む)は当該境界の検証を無効化するため、再検証が必要;② 音声がマスタークロック——シーンは実際のナレーションの単語タイムスタンプに合わせてリタイミングすべきであり、固定枠に押し込むための早口は不可。音声の再生成はシームの再調整を伴う;③ クリップゲートの罠(ゼロオーバーラップ FAIL の典型因)——`data-start` がイン tween より早いクリップは初期透明度で表示されてしまうため、`autoAlpha: 0` を指定しつつ `data-start` を正確にカット時刻と一致させる必要があります。
3. **Clip-gating gotcha** (the usual cause of a zero-overlap FAIL): a clip whose `data-start` precedes its entry tween is un-hidden at its initial opacity — set initial `autoAlpha: 0` AND `data-start` = the cut time, never earlier.
第2部は「演技(Performance)」:持続モーションの代用としてアイドリング正弦波ループ(breathe/float/drift/glow pulse)を使用することを禁止——これらは「動画の停滞」として認識されます。登場完了後に数秒間放置されるのは設計ミスであり、揺れではなくストーリーの展開を追加すべきです。登場から退場までの全フェーズは、指定された5つのルート(段階的開示 / 意図的なカメラ移動 / シーケンス化されたUIライフ / アニメーションシーケンス / カーソル主導アクション)のいずれかに割り当てて計画に命名します。セルフチェック基準:どの1秒で一時停止しても、意味のある要素が動作の半途にあること。
Idle sine loops (breathe, float, drift, glow pulse) are BANNED as sustained motion — they read as "the video is waiting." A scene that finishes entering with seconds left is a planning bug: add story, not wobble.
クライマックス前の静止(Stillness before climax)とタイミング意図:主アクションとその結果の間には 0.3〜0.75秒のタメ(劇的なカンマ)を配置します。直結させるとインパクトが失われます。単一要素の登場は ≤ ~800ms(長いタメは単一要素の遅延ではなく複数要素のスタッガーで構成);退場時間は登場時間の約75%(例外:cut-the-curve では逆転し、登場は退場の約127%);総スタッガー時間は ≤ 500ms、要素が8個以上の場合は個々のディレイを短縮;イージングの `bounce.out` / `elastic.out` は禁止(登場のオーバーシュート `back.out(1.4–1.7)` は許容);同質要素は個別の設定を避け、共通のイージングと持続時間設定を共有します。
Schedule a **0.3–0.75s pause** between the major action and its result — the dramatic comma. A scene that jumps straight from action to result loses it.
トランジション語彙のバジェット:作品全体でシーン間トランジションは2〜3種類に限定して反復使用し、標準境界は「カレント方向に沿った cut-the-curve」とします。手動で記述された共有要素のモーフィング(`intent: morph`)はこの予算枠を消費しません。
Use only 2–3 inter-scene transitions per film and repeat them; the default boundary is **cut-the-curve in the current's direction**.
アンチパターン対照表は上記の禁止事項を11行に集約(孤立した登場の記述 → 先に台帳を作成;シーン間クロスフェード → カレントに沿った cut-the-curve;退場完了後のシーン切替 → 両側の中段でカット;カット後に静止からイン → 想定軌道の50%以上から進入;Z符号の競合 → Seam Gate 7 に従い符号を一致;入場シーン自身のポップイン → 開幕フレームを構成済みにしておくか符号を一致;空き時間を埋めるアイドリング揺れ → 持続モーションルートの指定またはストーリー追加;原因のない方向反転 → 外力を消費する;予約ベクトルを単なる変化として消費 → 基本はカレントに従う;原因から数フレーム遅れて反応 → 同一フレームで発火;アクションから結果への直結 → クライマックス前の静止を設ける)。
| Inverse-zoom exit → grow-from-small entry (or push → oversized retraction) | Match the scale-velocity sign (Seam Gate 7) |
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | hyperframes CLI(preview 子命令;seam-gate 优先用仓库内 packages/cli/bin/hyperframes.mjs,skill 被复制出仓时才回退 npx --yes hyperframes) |
| package | chrome-headless-shell(经原始 CDP 驱动做帧采样;自动探测 CHROME_PATH → ~/.cache/puppeteer → 系统 Chrome) |
| network | 本地预览服务 HTTP 接口(仅 localhost:/api/projects 与 comp 预览页;非外网) |
| package | 兄弟 skill 依赖(被指名路由):cut-the-curve、oversized-cursor、seam-craft,以及上游的 text-beat-economics / brand-faithful / captions-overlay |
| package | node ≥ 22(脚本头注明零 npm 依赖,仅用 node 内置模块 + 本机 Chrome) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: node scripts/seam-stamp.mjs --ledger ledger.json [--write index.html](台帳の読み込み;-
- 外部 API: 外部プラットフォームへの投稿、リソース作成、または変更の書き込み
- 环境变量 / API Key: ベンダーサービスキーの読み取り: process.env.CHROME_PATH(Chrome 実行ファイルのパス指定のみに使用され、認証情報ではない)
- 本地工作目录: ファイルの読み書きと成果物出力: seam-stamp.mjs --write <target>:生成されたシームコードを index.html に書き戻す(writeFileSync を使用、単一ファイル、可逆的、
5二重目の独立検証
- [ok] 是否存在被忽略的第三方数据外发(判蓝的关键反证点) — 对两脚本做 https?:// 全扫:seam-gate.mjs 命中 2 处,均为 `http://localhost:...`(注释示例与端口拼接);seam-stamp.mjs 零命中。fetch 仅 2 处(httpOk 探活、/api/projects 取项目 id),目标都是 localhost。未发现任何远端域名、遥测、上报或 CDN 请求。判蓝成立。
- [ok] 凭证读取面(是否碰 KEY/TOKEN/cookie) — process.env 使用点只有 `process.env.CHROME_PATH`(渲染器路径)与 `const env = { ...process.env }` 后 delete HYPERFRAME_RUNTIME_URL 的整环境传递。全脚本无 GEMINI/OPENAI/AWS/HeyGen 等 key 名,无 keychain/.env 读取。判蓝(而非橙)成立。
- [ok] 写盘范围(是否可能误写用户仓库其他文件) — seam-stamp.mjs 只 writeFileSync(target, html),target 来自 --write 参数(实践为 index.html),替换范围被 `// <seams:auto>` 标记限定;seam-gate.mjs 只读。无 rm/mkdir/unlink。风险为客户项目内的定点改写。
- [ok] 子进程与清理(是否留下孤儿进程或提权) — 预览服务以 detached: true spawn,并在 process.on('exit') 里 `process.kill(-child.pid, "SIGTERM")` 按进程组回收;SIGINT/SIGTERM 处理器以 exit 130 退出;chrome 子进程同样 detached 并在清理里 SIGKILL 进程组。未见 sudo/提权,未见沙箱或权限模式相关危险开关。
- [ok] SKILL.md 声称的闸门语义是否真由脚本实现(防吹牛) — SKILL.md 列出 8 类被强制的检查;references/seam-gate.md 给出「检查行 ↔ 规则」对照表;seam-gate.mjs 内可见 EPS_XY=15 / EPS_Z=0.04 / SPEED_RATIO=3 / CARRIER_POS_TOL=12 / CARRIER_SIZE_TOL=0.05 等阈值常量,与文档中「12px 中心 / 5% 尺寸容差」「速度比 >3 报警」一致。声称有实现支撑。
- [ok] 「盖章即合规」是否只是宣传语 — seam-stamp.mjs 从 ledger 生成基础态(首个场景 autoAlpha:1,其余 autoAlpha:0 且归零 transform)与逐缝 wrapper tween,并把 Z 入场按 dir 预设 scale(dir=-1 → 1.25 超大抵达;否则 0.78 从小到大),与接缝检查要求的方向/符号一致——生成端确实按构造满足被检查字段。仍有手写项(match-cut/morph 只给可见性集,载体交接手写),与 SKILL.md 自述一致。
- [unlocatable] prompt/内容注入面 — seam-gate 的 `--server-cmd` 允许调用者替换实际执行的 shell 命令(默认值安全)。是否存在其他调用方把外部输入拼进该参数,超出本 skill 目录范围(pin 内其他 skill 的调用点未逐一追查),故不在此断言;仅记录该开关的存在与其默认值。
6結論
9280ac3792a44afd…