Home / All Skills / Content & Media Creation / testimonial-video
Content & Media Creation · iart-ai/ad-video-skills

testimonial-video

This skill should be used when the user asks to "make an animated testimonial", "create a quote video", "build a review video", "turn a customer testimonial into a graphic", "animate a customer review", "make a social proof video", "add an animated star rating", or "turn a list of reviews into videos". Covers quote typography, staggered line reveals, kinetic emphasis on key phrases, animated star ratings, the author block (name/role/avatar/company), and templating one card across many quotes.

L4 High-Privilege · Graded auth & full auditV1 Commit-PinnedExecute CommandNetwork AccessWrite FileDual-pass Audit
Author iart-aiGitHub iart-ai/ad-video-skills ↗Stars 8License MIT(仓库根 LICENSE:「MIT License」/「Copyright (c) 2026 iart.ai」;.claude-plugin/plugin.json 与 README「## License」同声明 MIT)Commit 0de0f2a1c1
Control levels describe skill capabilities and suggested control measures; they do not represent quality or safety certifications, nor do they dictate usability. Usage decisions rest entirely with users and administrators. Different agent hosts apply varying constraints; do not assume hosts provide automatic protection. Third-party skill copyrights belong to their original authors. Use at your own risk.

1How It Works & Mechanism

The primary rule is "credibility first, motion second": restraint conveys credibility, while excessive animation reads as an ad.

skills/testimonial-video/SKILL.md
A testimonial earns its job by feeling *real*, not produced. Restraint reads as credibility; over-animation reads as an ad people skip.
All implementation principles (conservative motion, verbatim quotes, authentic avatars) stem from this rule.

Line-by-line / clause-by-clause reveal following reading order, entirely frame-driven, strictly prohibiting CSS transitions and JS timers.

skills/testimonial-video/SKILL.md
drive every line off `useCurrentFrame()` so it renders deterministically — never a CSS transition or a JS timer, which desync from the frame renderer.
reference's toLines() splits lines by clause boundaries rather than hard cuts based on fixed character counts.

Only a single key phrase emphasis is allowed, appearing only after its containing line has settled (highlight sweep / font weight / color shift).

skills/testimonial-video/SKILL.md
let it arrive *after* its line has settled
The subtractive rule: "highlighting two places equals highlighting nowhere."

Fractional star ratings use two layered glyphs cropped by width: 4.5 is just as accurate as 5.0, without needing half-star assets.

skills/testimonial-video/SKILL.md
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.
BT note: rating/max*100% is accurate for arbitrary decimals; 4.3 renders precisely as 4.3.

The author block signs off last and remains static; avatars must be authentic, or omitted entirely.

skills/testimonial-video/SKILL.md
Use a real avatar or none — a generic placeholder face actively destroys trust.
A static signature block ensures attribution reads like an authentic record rather than marketing.

Data integrity: highlight must be a verbatim substring of the quote, otherwise rendering is blocked immediately.

skills/testimonial-video/references/batch-and-typography.md
The `highlight ⊂ quote` check is the important one: it guarantees you only ever emphasize words the customer actually wrote.
Turns the rule "do not alter customer's original words" into an enforceable programmatic validation.

Rating accuracy and accessibility share the same root: never display empty/filled stars unsupported by data, and never invent ratings for reviews without them.

skills/testimonial-video/references/batch-and-typography.md
never show more filled stars than the data supports
BT note: "omit the entire rating line if no rating exists; never default to 5 stars."

Template × review list → one video per review; all visual styling is encapsulated in a single theme object.

skills/testimonial-video/SKILL.md
The payoff: make every field a prop, hardcode nothing, then render once per review.
During batch processing, only copy and scores change, guaranteeing pixel-perfect brand consistency across 50 testimonials.

Validation loop: capture one frame each following the sequence "quote → star rating → author", using props from a shipped review.

skills/testimonial-video/SKILL.md
**Verify loop — render stills → inspect → encode.** Cheap PNGs first; render with the **shipped** review's props, not just `defaultProps`.
Checklist items include "verbatim quote, exactly one emphasis, star fill matches score precisely".

2Core Capabilities

01Staggered line/clause reveal (spring damping 200, no overshoot + 14px rise)
02Key phrase gradient highlight sweep (hosted on a single mark, can span lines)
03Fractional star rating component (two-layer star glyph width-cropping + aria-label true value)
04Author block (name/role/company/avatar, enters last and remains static)
05Review schema + highlight⊂quote validation (catches errors line-by-line before batch runs)
06Quote typographic craftsmanship (smart quotes, hanging punctuation, semantic line breaks, orphan control)
07Pacing discipline: the entire card stays completely static in the second half for easy screenshotting and sharing

3External Dependencies

KindDependency / Endpoint
packageremotion(frame/spring/interpolate/Img)
packagecsv-parse(reviews.csv → props)
clinpx remotion render(逐条评论渲染 MP4)
cliffmpeg / ffprobe(仓库共享 contact-sheet.sh、probe-mp4.sh)
networkiart.ai(reference 尾部推广链接,具 utm 参数;仅读者点击才请求)

4Recommended Governance & Evidence

Suggested Controls for Safe Operation
For Agent Runtime
Graded/per-use authorization, sandbox recommended
For Administrators
Approval workflow, rollback support, full audit
Evidence & Triggers (File Paths & Excerpts)
  • scripts/: Execute local scripts or commands: No bundled scripts in skill directory; SKILL.md/reference instructs agent to run `node` (CSV→props script, source code in refer
  • 网络端点: Declare external network access: No operational API calls during runtime; review text and avatar assets provided by user (local files or user-provided URLs).
  • 本地工作目录: File read/write & artifact output: Writes `reviews/*.json` (CSV→props artifacts), `out/*.mp4`, and `out/demo.gif` inside user workspace.
Audit Notes: Trigger item is the classification paradigm "depends on third-party plugins, mirrors, or remote packages": the skill directory is pure Markdown (no scripts, no credential access, no env access), but declared delivery paths require importing remote packages `remotion` and batch pipeline `csv-parse`, executed via `npx` from npm registry; same criterion as `remotion-video` in the same repo marked as Orange. **Explicitly non-applicable items**: No credential/cookie/environment variable reading (zero substantive token scan hits); does not send user assets to external generation services (rendering completed locally); no TLS downgrade, no `--no-verify`, no sandbox disabling, no anti-automation bypass. Trigger condition: Occurs strictly when actually rendering video or parsing CSV.

5Second-Pass Verification

  • [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。

6Verdict & Scenarios

  • Turns "never alter customer's original words" into enforceable validation (highlight must be a verbatim substring of the quote, otherwise render is blocked)
  • Fractional star ratings use width cropping, offering arbitrary decimal precision without dependency on half-star assets
  • Accessibility bound to authenticity: aria-label carries true values, and stars are omitted if no rating exists
  • Concrete, actionable typographic craftsmanship (smart quotes, hanging quotes, orphan binding, motion limited strictly to translation + opacity)
  • Provides zero-dependency HTML/CSS variants, usable outside of Remotion pipelines
  • Best for: Teams turning customer reviews/lists into social proof short videos: those needing 50 reviews batch-rendered, locked brand identity, precise star ratings, verbatim copy, with strong attention to accessibility and typographic quality.
    Not for: Promotional/discount materials (use promo-video), generic ad creatives (use ad-creative-video), or scenarios lacking real attributable people or verified ratings (this skill strictly opposes anonymous testimonials or fabricated scores).
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload testimonial-video.tar.gz
    sha256: e005b1884e39df9a…
    Option B · Copy Guide for Agent
    install.json
    Agents automatically download and verify mirrors from this JSON guide.
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 0de0f2a1c1.