1仕組みと動作原理
最優先ルールは「信頼性が先、モーションは後」:抑制された表現は信頼感を与え、過剰なアニメーションは広告と見なされます。
A testimonial earns its job by feeling *real*, not produced. Restraint reads as credibility; over-animation reads as an ad people skip.
読書順に従って行ごと/文ごとに段階的表示(reveal)。すべてフレームから導出し、CSS transition や JS タイマーは厳禁とします。
drive every line off `useCurrentFrame()` so it renders deterministically — never a CSS transition or a JS timer, which desync from the frame renderer.
強調フレーズは1か所のみとし、該当行が静止した後に適用(ハイライトスイープ/ウェイト変更/色変化)。
let it arrive *after* its line has settled
小数点星評価は2層グリフの幅トリミングで表現:4.5も5.0と同様に正確であり、半星素材は不要です。
Use one full row of star glyphs as a mask, then wipe a filled layer to `rating / max` width — this handles 4.5 as cleanly as 5.0, with no half-star sprite.
作成者ブロックは最後に配置し静止を維持。アバターは実在の人物必須、ない場合は非表示とします。
Use a real avatar or none — a generic placeholder face actively destroys trust.
データ整合性:highlight は引用文の完全一致部分文字列である必要があり、そうでなければレンダリングを即座にブロックします。
The `highlight ⊂ quote` check is the important one: it guarantees you only ever emphasize words the customer actually wrote.
評価の正確性とアクセシビリティは同源:データにない中空/塗りつぶし星は一切表示せず、評価のないレビューに星を補完することも禁止します。
never show more filled stars than the data supports
テンプレート × レビューリスト → 1レビュー1動画。ビジュアルスタイルは単一の theme オブジェクトに集約します。
The payoff: make every field a prop, hardcode nothing, then render once per review.
検証ループ:「引用文 → 星評価 → 作成者」の順で各1フレームを抽出し、リリース用 review の props を使用して検証します。
**Verify loop — render stills → inspect → encode.** Cheap PNGs first; render with the **shipped** review's props, not just `defaultProps`.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| package | remotion(frame/spring/interpolate/Img) |
| package | csv-parse(reviews.csv → props) |
| cli | npx remotion render(逐条评论渲染 MP4) |
| cli | ffmpeg / ffprobe(仓库共享 contact-sheet.sh、probe-mp4.sh) |
| network | iart.ai(reference 尾部推广链接,具 utm 参数;仅读者点击才请求) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: skill ディレクトリ内に同梱スクリプトなし。SKILL.md/reference がエージェントに `node` の実行を指示(CSV→props スクリプト、ソースコードは refer 内に記載)
- 网络端点: 外部ネットワークアクセスの宣言: 実行時に業務 API の呼び出しなし。レビュー本文およびアバター素材はユーザー提供(ローカルファイルまたはユーザー指定の URL)
- 本地工作目录: ファイルの読み書きと成果物の出力: ユーザープロジェクト内に `reviews/*.json`(CSV→props 生成物)、`out/*.mp4`、`out/demo.gif` を書き込み
5二重目の独立検証
- [discrepancy] 批量脚本是否可直接运行 — batch-and-typography.md 的 `rows.forEach(...)` 内部调用 `slug(r.name)`,而 `const slug = ...` 定义在 forEach **之后**——直接运行会触发 TDZ ReferenceError(应把 slug 定义提前)。这是照抄会失败的实现瑕疵。
- [ok] 星级/分值口径是否两处一致 — SKILL.md 的 StarRating 与 quote-card.md 都用 `(rating/max)*100` 宽度裁切,都挂 role=img + aria-label 真实分值;BT 另补充「无评分就不画星,不默认 5 星」。
- [ok] 时序表与公式是否自洽 — quote-card 的时序表(8–48 行、44–54 高亮…)对应 `hlStart = 8 + lines.length * 6 + 4`:5 行时 hlStart=42(表列 44),6 行时 48(表列 44–54 上沿)——量级一致,表以 5–6 行引文为例。
- [ok] SKILL.md 与 reference 的 schema 是否同构 — quote/highlight/rating/max/name/role/company/avatar 八个字段在 SKILL.md 示例、quote-card.md 的 Review 类型、BT 的 Review 类型三处完全一致。
- [ok] 顺序纪律是否有一致论证 — 本 skill 的顺序是「引文→星→作者」(claim → proof → who);SKILL.md 与 quote-card.md 的 Why these choices 均说明重排会削弱可信度。
- [ok] 凭证/外发面反查 — token 扫描零实质命中;无 env、无 keychain、无 cookie 读取;批量脚本只读本地 CSV、只写本地 JSON 与 MP4。
6結論
e005b1884e39df9a…