コンテンツ制作 · heygen-com/hyperframes

orbit-card

承認済みのBlenderカメラモーションに沿って、単一の機能カードがドット球体の周りを公転します。HyperFramesブロック、1920×1080、10秒、4変数。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行Dual-pass Audit
Author heygen-comGitHub heygen-com/hyperframes ↗Stars 44283License Apache-2.0(仓库根 LICENSE = Apache License Version 2.0;块内随带第三方许可文本:three.js MIT、GSAP 标准许可、Geist/Archivo/Cormorant Garamond OFL 等)Commit d2f0bc7f34
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

出力カット:中央の機能カード(ドット球体を囲む円形くり抜き付き)が右から登場(0.25–1.80秒)→ わずかな上下浮遊と深度ドリフトを伴う静止フェーズ → 球心周りを1周公転(4.97–5.97秒、smoothstep使用)→ 左へ退場(7.35–8.55秒)。

registry/blocks/orbit-card/SKILL.md
One centred feature card with a circular cut-out framing a dot sphere. The card enters from the right (0.25–1.80 s), holds with a subtle bob and depth drift, orbits a full turn around the sphere's centre (smoothstep between 4.97 and 5.97 s), and exits left (7.35–8.55 s).
ここでの処理内容:「機能紹介(Feature Reveal)」型のカットです。カードが紹介対象であり、球体は背景のアンカーとなります。

モーションはその場で設計されたものではなく、承認済みのBlenderリグからエクスポートされ、ブロック内で補間されます。カメラパスとカードのF-curveは30fpsの定数テーブルとしてベイクされており、ソースファイルの出所もデータ内に記載されています。

registry/blocks/orbit-card/assets/orbit-motion.js
// Approved Blender motion, frame 1 = 0 seconds; generated from the existing saved-rig export. … fps: 30, … orbitFrames: [150, 180], … source: "orbit-card-motion-rig.blend",
ここでの処理内容:Blenderでアートレビューを通過したモーションをデータアセットとして固定し、コード側は補間のみを行うため、本ブロックのモーションをページ上で自由に変更することはできません。

そのため変数は4つ(タイトル、説明、アクセントカラー、公転角度)のみであり、公転角度はキーフレームを変更することなく180°や720°に設定可能です。

registry/blocks/orbit-card/SKILL.md
Title, description, accent and the orbit angle are variables; 180° and 720° work without touching keys.
ここでの処理内容:本バッチの他の高自由度ブロックとは異なり、モーションを意図的に固定し、テキストとブランドカラーのみを公開しています。

構造は3層に分かれています:composition(109行)はマウントとタイムラインのみを担当、シーンは assets/orbit-scene.js(WebGLRendererとジオメトリ)、モーション定数は assets/orbit-motion.js(59 KB)に格納され、インポートされたモジュールからは本compositionの__hyperframesが参照できないため、モジュールは引数として変数を受け取ります。

registry/blocks/orbit-card/assets/orbit-scene.js
// Built per call from the variables the mounting module passes in: an imported // module only sees the page's __hyperframes, not its composition's.
ここでの処理内容:HFのスコープ詳細の説明です。変数はモジュールがグローバルを直接読みに行くのではなく、マウント側から createOrbitScene(V) に渡されます。

明示的な座標系変換を実施:Blender X/Y/Z → Three X/Z/−Y、かつ元のCSS 100ピクセル=1リグ単位とし、2Dタイポグラフィと3Dシーンの位置合わせを保証します。

registry/blocks/orbit-card/assets/orbit-scene.js
// Blender X/Y/Z -> Three X/Z/-Y. 100 original CSS pixels = one rig unit.
ここでの処理内容:カードは2D DOM/CSSレイアウト、球体はWebGLであり、両者を同一フレームに収めるための前提条件として単位変換を行います。

入力の正規化:公転角度は有限数チェック、アクセントカラーは6桁hex正規表現検証と不正時のデフォルトフォールバック、タイトル/説明はStringフォールバックを実施します。

registry/blocks/orbit-card/assets/orbit-scene.js
const number = (v, fallback) => (Number.isFinite(Number(v)) ? Number(v) : fallback); … const accent = /^#[0-9a-f]{6}$/i.test(V.feature1Accent) ? V.feature1Accent : "#4cc9ff";
ここでの処理内容:4つの変数のうち2つがテキスト、1つがカラーであり、すべて型と値域を収束させてからシーンに渡します。

seekは[0,10]にクランプされ、単体プレビューは?play(および?loop)クエリパラメータでタイムラインを駆動します。

registry/blocks/orbit-card/orbit-card.html
timeline.totalTime(Math.max(0, Math.min(10, event.detail.time)), true); … if (query.has("play")) { timeline.repeat(query.has("loop") ? 999 : 0);
ここでの処理内容:レンダラーによるフレームごとのシークと、目視確認用の単体ページ自動再生の両方に対応しています。

完全ローカル:threeとgsapはバンドル同梱のコピーであり、フォントArchivoも@font-faceでローカルのttf(regular/semibold、OFL)を参照し、ブロックディレクトリ内にhttp(s)参照は一切ありません。

registry/blocks/orbit-card/orbit-card.html
font-family: Archivo; font-weight: 400; src: url("assets/archivo-regular.ttf");
ここでの処理内容:オフラインでレンダリング可能なブロックです。フォントすらGoogle Fontsを使用せず、threeはimportmap経由で./assets/を参照します。

2コア機能

01シングルカード+ドット球体の「機能紹介」カット(1920×1080、10秒)
02Blender承認済みベイクドモーションデータ(30fpsカメラポーズ配列+カードF-curve、orbitFrames [150,180])
034変数の最小テキストインターフェース(feature1Title ≤28文字、feature1Desc ≤110文字、feature1Accent、cardOrbitDegrees ±36000)
04キーフレーム変更不要の全周公転(180°/720°も変数で指定可能)
05ローカルフォント組版(Archivo regular/semibold @font-face、OFLテキスト同梱)
06スタンドアロンプレビュー:?play 自動再生、?loop ループ再生
07Studio不要で映像出力可能:カードテキストを上書きして直接レンダリング

3外部依存関係

KindDependency / Endpoint
cliHyperFrames 官方 CLI(add / render)
packageGSAP 3.14.2(随块本地副本)
packagethree.js(随块本地副本)与场景模块
packageArchivo 字体(regular/semibold,OFL)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: orbit-card.html(ブラウザ/レンダラー側で実行:sceneのマウント、一時停止タイムラインの登録、hf-seekによる再同期、?playプレビュー)
監査ノート: 判定対象=本blockディレクトリ(SKILL.md + composition + sceneモジュール + モーションデータ + 同梱three/gsap + フォント):ディレクトリ全体でhttp(s)外部リンクゼロ(フォントもローカル)、クレデンシャル/env読み取りゼロ、シェルスクリプトゼロ、ディスク書き込みゼロ、外部データ送信ゼロ。唯一の実行面はブラウザ内のWebGLシーンおよびESモジュールであり、内蔵されたローカル実行可能コンテンツに該当します。インストール/レンダリングは公式CLIエコシステムを経由します。これに基づきblueと判定します。

5二重目の独立検証

  • [ok] 变量数与声明一致性(frontmatter 自称 4 variables) — 脚本实测:SKILL.md 变量表 4 行、html data-composition-variables 解析出 4 项、frontmatter 写 4 —— 一致,为本批最小变量面。
  • [ok] 「approved Blender motion」声称的真实性 — assets/orbit-motion.js 首行注释与字段(fps: 30、frameStart: 1、orbitFrames: [150,180]、source: "orbit-card-motion-rig.blend")逐字命中;运动确为烘焙数据而非现场函数。
  • [ok] 零外链声称 — 对 orbit-card.html / orbit-scene.js / orbit-motion.js 做 http(s):// grep:零命中;脚本与字体全为 ./assets/ 相对路径。
  • [ok] registry-item 文件清单 vs 盘上文件 — 声明 12 个文件(含两份许可与两枚字体)全部存在于盘上,无远端 url 兜底。
  • [ok] 无随机/时钟依赖 — 本目录 grep Math.random / Date.now / requestAnimationFrame:零命中;运动全部来自常量表插值。
  • [ok] 时长一致性 — registry-item duration 10、html data-duration 10、MOTION.duration 10、SKILL.md 标题行 10s —— 四处一致。

6結論

  • アート承認済みで再現可能なモーション
  • 外部参照ゼロ、オフラインレンダリング対応
  • 極めてシンプルなインターフェースで素早い導入が可能
  • 明確な換算による2D/3Dの位置合わせ
  • 最適な用途: テキストとアクセントカラーを差し替えるだけで映像を生成したいプロダクト/マーケティング動画など、機能紹介型のカット(10秒、単一カード、ブランドモーション確定済み)に適しています。
    不向きな用途: カスタムの演出構成や複数カードの並列配置が必要な場合。すべてのランタイムリソースをCDN経由にし、threeを同梱しない軽量パイプラインを求める場合。
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload orbit-card.tar.gz
    sha256: affb86a2ddee4335…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d2f0bc7f34.