Communitygithub.com

Zman2087/faceless-studio

Remotion を使用してアニメーションとモーション グラフィックスの短い動画を生成します。「顔出しなし」解説動画、キネティックタイポグラフィ、テキストメッセージストーリー、比較、チャート、カウンター、または AI キャラクタークリップ間のアニメーションシーンを切り替えた動画を作成できます。アニメーションビデオ、モーション グラフィックスなどのリクエストに対応します。

faceless-studio とは?

このスキルを使うと、Remotion(`remotion/`)環境上で完全にゼロクレジットで動作する、アニメーションとモーション グラフィックスの短い動画を生成できます。主に 2 段階のワークフローを採用しており、最初に組み込みシーンの組み合わせで目的の動画を作成し(レベル 1)、既存のシーンでは表現できない高度なアイデアが必要な場合のみ新しいシーンタイプを追加(レベル 2)します。対応するシーンタイプは多彩で、キネティックテキスト、数値カウンター、棒グラフ、比較表、リスト、タイムライン、テキストメッセージチャット、引用、メディア(Bロールや写真など)の 10 種類が用意されています。各シーンにはトランジション(フェード、スライド、ズーム、ワイプ)やオーバーレイ(見出し、テキストオーバー、ロワーサード、スタンプ)を自由に組み合わせられるため、短尺の顔出しなし解説動画、テキストメッセージストーリー、通話動画の差し込みカット、神話 vs 事実の比較など、さまざまな形式の動画をコードを書かずに数分で作成できます。レンダリング前には必ず `--preview` でプレビュー画像を確認し、フックが 0.1 秒時点で完全に描画されていることや、テキストがクリップされていないこと、アクセントカラーが読みやすいこと、AI 生成タグと透かしが含まれていることをチェックする必要があります。「video-script」ツール(`tools/beats.mjs`)を使ってビートを計画し、ボイスオーバーに合わせたタイミングでシーンを配置することも可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Zman2087/faceless-studio/tree/HEAD/.claude/skills/animated-video

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Animated video

Everything here renders in remotion/ for zero credits. Two levels — always try level 1 first:

  1. Compose built-in scenes in a spec (minutes, no code).
  2. Add a new scene type to the engine when an idea genuinely needs one (code, tested, then reusable by every agent).

Before rendering locally: if remotion/node_modules is missing, run cd remotion && npm ci (the first render also downloads Remotion's headless Chrome, ~170 MB, once).

Level 1 — the scene kit

scene (shots[].type)best forkey fields
kineticthe hook, a punchlinetext, highlight, per_word (0.18) — words pop in one by one
titlea single bold linetext ≤ 6 words, highlight
numberone striking figurevalue, prefix, suffix, decimals, caption, color — counts up
barshow things compare in sizetitle, unit, items[{label,value,color}]
comparethem vs you, myth vs fact, before/aftertitle, left{label,items,color}, right{…}
list"3 things", do/don'titems, style tick/cross/number
timelinehow it happeneditems[{year,text}]
chata story told in textstitle (contact), messages[{from: me/them, text, at}]
quotea sourced linetext, by
mediab-roll, a photo, the AI clipsrc, kenburns, headline, fit

Every scene takes label (kicker), stamp (rubber-stamp number), bg (dimmed photo/video behind it, with credit) and transition (fade default, cut, slide, zoom, wipe). Overlays (headline, textover, lowerthird, stamp) sit on top of any scene. Full reference: remotion/SPEC.md. A worked example of every new scene: remotion/examples/animated.json.

Recipes

  • Faceless explainer (20–40 s): kinetic hook → number → bars/compare → list → title payoff that echoes the hook. Voice-over as audio, captions from words, a quiet music bed at 0.08–0.12.
  • Text-message story: kinetic hook ("She replied at 3am") → one chat shot per exchange (at spaced 0.8–1.4 s, timed to the narration) → title twist. Keep each bubble ≤ 10 words.
  • Animated insert in a talking video: CLIP_1 … number or compare for 2–3 s on the beat that says it (transition: "zoom") … back to CLIP_1 with start set to where the clip should resume.
  • Myth vs fact: compare with left.color: "danger", right.color: "good", then a stamp "FALSE" on the next title.

Plan the beats with video-script (tools/beats.mjs times scenes to the voice), then:

cd remotion
node render.mjs job/spec.json --validate
node render.mjs job/spec.json job/final.mp4 --preview job/check.jpg --at 0.1,<each scene's middle>,<end-1>

Always look at the preview strip before delivering: hook fully drawn at 0.1 s, nothing clipped off the edges, no text overlapping, the accent colour readable, the AI-generated tag and watermark there.

Style rules

  • Brand from settings.brand (spec theme): one accent colour, used for the one thing that matters in each scene.
  • ≤ 7 words per headline, ≤ 12 per textover, ≤ 4 items per list/compare column (the phone screen is small).
  • A scene stays up at least 1.5 s per line of text in it.
  • Numbers must match citations; never animate a figure you didn't source.
  • No brand logos, no real people's photos, no screenshots of real chats.

Level 2 — a new scene type

Only when no combination above can show the idea (e.g. a map route, a progress ring, a split-screen reaction).

  1. src/types.ts: add XShot = ShotBase & { type: "x"; … } and add it to the Shot union.
  2. src/shots/Shots.tsx: write the component next to the others — animate with spring/interpolate from useCurrentFrame() (never CSS animations or Math.random: renders must be deterministic), use t.font, t.accent, tone(t, color), size for 1080×1920, then add one if (s.type === "x") body = … line in ShotView. If it's on screen at 0 s (base === 0) draw it fully with no entrance.
  3. render.mjs: add "x" to types and validation for its required fields (the checker agent relies on these messages).
  4. SPEC.md + the table above: document it. Add it to examples/animated.json.
  5. Test: npx tsc --noEmit -p ., node render.mjs examples/animated.json out/animated.mp4 --preview out/animated.jpg --at … and look at it.

関連スキル