1仕組みと動作原理
「テンプレート即完成品」のアプローチを採用:固定された1920×1080 @60fps、10.35秒のコンポジションで、モーションは完全に固定(キーフレームのシームレスな重複、デッドフレームゼロ)。エージェントはデータトークンを埋めてレンダリングするのみで、タイムラインの**変更は不可**、変更可能なのはデータのみです。
One fixed 1920×1080 @ 60fps, 10.35s composition. The motion is locked and doctrine-verified (overlapped keyframes end to end, zero dead frames): do NOT edit the timeline — fill the data tokens and render.
3ステップのワークフローで、ステップ2以降は構図調整作業が不要:① データの取得(name/handle/joined/followers/following/posts/1行bio/400×400アバター)② node build.mjs によるテンプレートからのプロジェクト生成 ③ npx hyperframes render によるMP4出力(ホスト環境でレンダリング制限がある場合は事前にユーザーへ確認)。
1. **Gather profile data** — name, handle, joined month/year, followers, following, posts, one bio line, and the 400×400 avatar.
レンダリングの前提条件は明確:Node 18+ および npx 経由で取得する HyperFrames CLI(@latest は挙動が変わる可能性があるため、完全一致の再レンダリングにはバージョンを固定);WebGLドットマトリクスグラウンドにはmacOSハードウェアGPUレンダリングを推奨;署名にはmacOSシステムフォントの Snell Roundhand(src: local(...))を使用し、Linuxでは汎用 cursive にフォールバック(動作はしますが視覚的な美しさは劣ります)。
macOS GPU render for the WebGL dot ground: `export PRODUCER_BROWSER_GPU_MODE=hardware`.
データ注入は「信頼できない入力」として処理:build.mjs に必須項目リストがあり、handle は ^[A-Za-z0-9_]{1,15}$ に一致必須、joined は「JAN 2026」形式かつ ISS MM/YYYY を導出できること、カウンター値は非負整数のみ許容(コンポジションの <script> に展開されるため、符号/小数/指数/NaN/カンマは明示的に拒否)、テキスト項目は制御文字除去と文字数制限を適用、全文字列をHTMLエスケープした後に {{TOKEN}} を置換し、最後にトークンの残りがないかを検証。
// counters land inside the composition's <script>: accept ONLY plain … // non-negative integers (no signs, fractions, exponents, NaN, commas)
ディスク書き込みの境界制御:--out 配下に assets/ および renders/ を作成後、その realpath を取得。以降の全パスはその実パス内部に解決されること(safePath)を強制し、最初からシンボリックリンクのターゲットを拒否。テンプレートはスクリプト自身からの相対パス、--out は作業ディレクトリからの相対パスで解決し、アバターファイルが存在しない場合は即座にエラーを出力。
// after mkdir, every path we touch must resolve inside the real out dir
テンプレートの内部構造は固定:データトークンはテキストノードに配置(NAME_BIG / NAME_SIG / HANDLE_UPPER / JOINED / ISS / FOLLOWERS_FMT / BIO_UPPER)、カウンターはスクリプトコンテキスト内で数値としてカウントアップ。#root には data-composition-id="x-license"、data-duration="10.35"、data-fps="60" が固定記述され、タイムラインは window.__timelines["x-license"] に登録。裏面の細かい規約ではフォロワー数を「生年月日」に見立てたジョークがあり、長い名前は署名マスク幅の拡張で対応。
<div id="root" data-composition-id="x-license" data-start="0" data-duration="10.35" data-width="1920" data-height="1080" data-fps="60">
2つの規律と出自の明示:データは実在すること(生きたプロフィールから取得し、数値やbioの捏造は禁止)、bioは大文字かつ約65文字以下で「·」区切りに圧縮、表示名の表記揺れや特殊表記(例: `|||`)もそのまま保持。ブランド面では、Xのロゴや意匠の再現はパロディ/ファンコンテンツの位置づけであり公開可否はユーザー自身の判断によるものとし、ドットマトリクスは Originkit Dot Matrix の外観に基づく確定的なGLSL/WebGL再実装(ソースの再配布は不実施)、シンプレックスノイズは標準的なAshima実装(MIT)、GSAPは jsDelivr から読み込みベンダー同梱はしない方針。
- Data must be REAL, scraped from the live profile — never invent counts or bios.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| network | x.com/<handle>:登出档案页(agent 用浏览器工具读显示名/Joined/Following/Followers;纯 HTTP fetch 只得 JS 壳) |
| network | pbs.twimg.com:头像图片下载(profile_images 的 _400x400 变体) |
| api | api.fxtwitter.com/<handle>:取 post 数(免费、无凭证的第三方 API) |
| cli | HyperFrames CLI(经 npx,文档写 @latest;要 byte-identical 重渲需自行 pin 版本) |
| network | cdn.jsdelivr.net:构图在 preview/render 时加载 GSAP 3.14.2(文档明说渲染并非完全离线) |
| cli | curl(取数示例:下载头像、拉 fxtwitter JSON)与 macOS 系统字体 Snell Roundhand(src: local(...),Linux 退化为 cursive) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: node <SKILL_DIR>/scripts/build.mjs --out <dir> --name … --handle … --joined
- 网络端点: 外部ネットワークアクセスの宣言: https://x.com/<handle>(エージェント側のデータ収集用、ログアウト状態のプロフィールページ)
- 本地工作目录: ファイル読み書きと成果物出力: --out ディレクトリ内: index.html、assets/avatar.jpg、hyperframes.json、meta.json、およびレンダリング成果物
5二重目の独立検証
- [ok] 『do NOT edit the timeline』是否与模板事实一致 — #root 上写死 data-duration="10.35"、data-fps="60"、data-composition-id="x-license",时间线注册在 window.__timelines["x-license"];build.mjs 只做 token 替换,不触碰任何时间属性。模板确实锁死,agent 的改动面只有数据。
- [ok] 模板 token 与 build.mjs 的 fill 键是否一一对应 — fill 提供 NAME_BIG、NAME_SIG、HANDLE_UPPER、JOINED、ISS、FOLLOWERS、FOLLOWING、POSTS、FOLLOWERS_FMT、BIO_UPPER;模板中出现的 {{…}} 均在其中(FOLLOWERS_FMT 用于背面 fine print),且替换后有 unfilled token 检查兜底。
- [ok] 『profile 数据是不可信输入』的处理是否真存在 — cleanText(去控制字符 + 限长)、cleanCount(只收纯非负整数,显式拒绝符号/小数/指数/NaN/逗号)、handle 正则 ^[A-Za-z0-9_]{1,15}$、joined 走 MONTHS 枚举、esc() 逐字符转义、refuseSymlink() + safePath() 限定写入在 out 实路径内——逐条在源码可验。
- [ok] 端点是否都可预期、是否真的无凭证 — SKILL.md 的 Network and side effects 列表与 references/profile-data.md、模板引用一一对应;无 API key、无 cookie 读取、无 telemetry;fxtwitter 免认证且文档给了降级路径(不可用时问用户)。
- [ok] 『Rendering is NOT fully offline』是否属实 — 模板 <head> 第 6 行就有 jsDelivr 的 [email protected] 引用,preview/render 时构图会去取——与文档声明一致,不是夸大也不隐瞒。
- [unlocatable] 10.35s 与 flip ~6.5s / leap ~9.9s 的时刻声明 — 这些时刻来自文档叙述与模板属性,本次只读侦查未渲染核对;且文档用的是 @latest 的 CLI(版本未固定),故这些时刻只对该 pin commit 的模板有效,不作为已核事实。
6結論
6e227bb6839e972c…