Communitygithub.com

coder-xieshijie/filmsmith

コードだけで描画・作曲される短編技術フィルムを、コーディングエージェントがモードテンプレートから生成するスキルです。10 のモード(Thread、Ink、Plakat 等)から選択し、コンテンツに応じた長さ・テンポでレンダリングします。

filmsmith とは?

Filmsmith は、任意のコーディングエージェントがシェルコマンドを実行できる環境で動作し、技術デモ、説明動画、プロダクトローンチといった短編技術フィルムを生成するスキルです。フィルム内の映像はすべてコードで描画され、音声もコードで合成されるため、人間の手による編集は一切不要です。10 種類のモード(Thread、Ink、Plakat、Blueprint、Phosphor、Tally、Trace、Morph、Halftone、Pulse)から選択でき、各モードには固有のカラープリセット、フォームバリアント、シーンレジストリ、レンダリング可能なテンプレートが用意されています。フィルムの長さはコンテンツから計算され、テンポは brisk に保たれ、すべてのレンダリング結果は計測されます。ユーザーが「技術製品のローンチ、プロモ、ティーザー、ショーリール、データストーリー、説明動画」を依頼した際、またはそのためのビジュアルスタイルを選択する際に使用されます。対応プラットフォームは任意のコード実行可能なエージェントです。ワークフローは「Clarify(質問による内容確認)」→「Set up(new-film コマンドでテンプレート展開)」→「Fill(content.js の記述)」→「Look(preview)」→「Render(ffmpeg 出力)」の順で進み、各モードは混在できず、テーマ(tech-product-launch / tech-explainer)に応じて使用モードが決められています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add coder-xieshijie/filmsmith

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

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

ドキュメント

filmsmith は何をしますか?

コードを撮影する10の方法。短いテクニカルフィルム(技術デモ、テクニカルレポートや解説、テクニカル製品ローンチ)を、概要から作成します。長さは内容から計算され、画面に人は映りません。モードを選び、そのテンプレートをコピーし、content.js を埋めて、レンダリングします。すべての画像はコードで描かれ、すべての音はコードで合成されます(生成された音楽トラックに差し替え可能)。そのため、フィルムにはシェルコマンドを実行できるコーディングエージェントだけが必要です。このスキルは、センスの理論(基礎)、そこから導き出された10の中核原則(所有者の判断に基づく)、共有のシステム(色、タイポグラフィ、スペース、モーション)、およびそれぞれに1つのビジュアル言語を適用する10のモードに基づいています。

すべてのモードのハウススタイル:機敏で、直接的で、クリーン — ほぼすべてのビートで何かが変化し、各変化は1つの新しい要素をもたらし、視聴者はフィルムを待たされることはありません。そしてクリーンは味気ないことではない:少数の要素がそれぞれ流動的に動き、視線を引きつけます(原則4–6)。

要件

  • シェルコマンドを実行できる任意のコーディングエージェント。以下SKILL_ROOTは、このSKILL.mdが置かれているフォルダです。
  • Node 22以降、ffmpeg と ffprobe がPATHに含まれていること。new-film がこれらをチェックし、不足している場合はメッセージを表示して停止します。
  • フィルムのセットアップとレンダリング中はネットワークが必要:ピン留めされたgoogle/fontsコミットからのフォントと、npmレジストリからのピン留めされたGSAPビルド(両方ともフィルムフォルダに保存)、npx [email protected] の初回実行(ヘッドレスChromeもフェッチ)、およびレンダリング時にHyperFramesコンパイラがGoogle Fontsからフォントフェイスをフェッチする可能性があります。オフラインレンダリングは検証されていません。テンプレートがピン留めするhyperframesバージョンを維持してください。フィルム内でアップグレードしないでください。
  • 画面上のテキストはこのバージョンでは英語です。ユーザーが中国語や他の文字を要求した場合は、テンプレートがまだ対応していないと伝えてください。

モード

モード中文見た目形式バリアント選ぶタイミング
thread一线すべてになる1本の線、カットなしthread: 均等ルールまたは膨らんだ線ビデオ、モーション、レンダリングツールチェーンのショーリール
ink落墨各ビートで叩きつけられる太いタイポグラフィ、色に開花するインクのドットtypeWidth: 圧縮または拡張されたタイポグラフィネームリビール、ローンチスティング、ワンライナーの主張
plakat招贴動くインターナショナルスタイルのポスター、1つのシグナルカラーform: 正方形または斜めのフィールド主張とステップ、および決定者
blueprint蓝图シートごとに草案される1つの工学図面、琥珀色のスタンプlinework: インクまたは鉛筆部品と承認のあるシステムとワークフロー
phosphor荧屏夜のターミナル、1つの蛍光体アクセント、ローンチHUDscreen: CRTラスターまたはフラットCLIおよび開発者ツール
tally算筹アイテムごとに1つの正方形、チャートからチャートへの再グループ化mark: 正方形、ドット、またはアイソタイプグリフカウント、シェア、データセットのストーリー
trace演算アルゴリズムの状態を示す暗いライブダイアグラムstroke: ベクターまたはスケッチメカニズムやアルゴリズムの動作方法
morph一笔点 → 線 → 面 → 立体 → インターフェース → マークと登る1つのインクシェイプ、カットなしcorners: 丸みまたはカット開発者ツールとインターフェース製品:1つのソースがすべての表面になる
halftone网点2色印刷:マークの一部は静止し、すべての世界がその周りに印刷され、その後マーク全体に引き戻されるdot: 丸、四角、または線スクリーンモデルと製品ローンチ:いくつかの機能、1つの数字、名前
pulse节拍クエリとして演じられる質問:ビートごとに1つの単語、1つの色相に沿って反転するグラウンド、答えのための1つのホワイトアウトaperture: カットまたは丸バージョンリリースとベンチマーク回答:1つの測定された結論

すべてのモードにはカラープリセット(カード上)と1つの形式バリアントがあり、どちらもcontent.jsで設定されます。デフォルトは以前と同じようにレンダリングされます。各カードには、使用例と実例、および最適なフィットが示されています。2026-10-19より前の名前(thread-reel, ink-beat, swiss-poster, blueprint-drafting, terminal-launch, unit-data, diagram-explainer)はnew-filmでも引き続き機能します。

選択ルールとモードカードの形式:references/modes/README.md。モードは混在しません。テーマ(ナラティブの骨格とフィルムの種類ごとのルール):tech-product-launch (thread、ink、plakat、blueprint、phosphor、morph、halftone、pulse用)、tech-explainer(tallyとtrace用)。

ワークフロー

1. 明確化

ユーザーが既に提供したものはスキップし、残りを質問します。最初にモードを質問します。平易な会話で、一度に最大3つの質問をします。開始を妨げないギャップは、想定してその旨を伝えます。すべてのフィルムは16:9、1920×1080で、横向きの全画面再生用です。縦長や正方形のフィルムを求められた場合は、このスキルでは作成できないと伝えます。

#質問理由
1内容は何ですか?ツール、ステップ付きの主張、システム、名前、リール、数値、メカニズム?モードを決定します(選択表)。1つ提案し、その理由を述べます。
2事実はどこから来ますか?(リポジトリ、ドキュメント、データセット、アルゴリズム)画面上のすべての事実はそこから来ます。すべての数値は計算されます。
3プラットフォームと、目標の長さ(ある場合)は?長さは内容から計算されます(原則5)。目標がある場合は、モードの範囲内でテンポを調整し、シーンをカットまたは追加します。
4どのパレットプリセットを使用しますか?プリセットのみ。モードカードにリストされています。カスタムの16進数値は不可。
5ハード制約(表示必須、表示禁止、URL、名前)はありますか?手戻りを防ぎます。
6音楽:このエージェントは音楽生成APIを呼び出せますか?はいの場合、フィルムのテンポに合わせた生成されたBGMが合成されたものと置き換わります(システム)。いいえの場合、合成されたBGMが使用され、引き継ぎ時にその旨が伝えられます。

モード、ソース、プリセットが指定され、音楽ソースが特定され、目標の長さ(ある場合)が決まったら完了です。

2. スキャフォールディング

node <SKILL_ROOT>/scripts/new-film.mjs <mode> <film-dir> --palette <id>

これにより、NodeとFFmpegがチェックされ、テンプレートがコピーされ、共有ランタイムがlib/として追加され(lib/VERSIONでスタンプ)、PLAN.mdの骨格が作成され、テンプレートのfonts.jsonにリストされているフォントがピン留めされたgoogle/fontsコミットから、ピン留めされたGSAPビルドがlib/vendor/にダウンロードされます。いずれかが失敗した場合は停止するため、フィルムがフォールバックフォントでレンダリングされたり、CDNに依存したりすることはありません。可変フォントの軸が必要なテンプレートは、fonts.jsonでそれらを宣言します(weightとstretchの範囲、CONTRACT.mdを参照)。次に、モードカードとフォルダのTEMPLATE.mdを完全に読みます。シーンレジストリ、各スロットの文字数制限、および固定された振り付けがそこにあります。モードが提供するすべてのシーンタイプを名前を挙げて言えるようになったら完了です。

3. コンセプトとビート計画

new-filmはPLAN.mdの骨格をフィルムフォルダに書き込みます。content.jsに触れる前に、それを埋めてください。計画なしのフィルムはレンダリングされません(原則10)。

  1. コンセプト文:「このフィルムでは、[この製品だけが持つ何か]が[モードの特徴的な装置]になる」という形式で、競合テスト:最も近い競合他社を文に含めると、もはや成立しなくなる必要があります。次に、スルーライン(最初から最後のフレームまで視線を導くオブジェクトまたはフレーム)。
  2. 禁止リスト:モードカードの「出荷時設定」とai-tells.mdから始めます。最も近い参考フィルムに近すぎるものを追加します。
  3. 最も近い参考作品とモチーフ表:最も近い参考フィルムを指定し、そのフィルムと共有するモチーフをリストします。既知の参考作品があるモードで、半分以上を共有している場合はP1に不合格となります。
  4. ビート計画:シーンごとに1行 — シーンタイプ、画面上のコピー(プライマリテキストか一瞥テキストか)、事実のソース、このシーンが次になるもの、および音楽が読み取りのためにブレークする、またはキーモーメントのためにドロップする場所。長さは選択されません。シーンをcontent.jsに書き込み、npm run fitを実行します。これにより、各シーンの開始、ビート、読み取り必要時間、ターン前のパッド、フレーズ丸めのシェア、およびフィルムの長さが出力され、renders/timing.jsonが書き込まれ、表がPLAN.mdのfitマーカーの間にコピーされます。npm run fitは、PLAN.mdが存在しない場合は停止し、まだ未記入の<!-- fill -->部分がある場合は警告を表示します。

コピーを書く前に、モードのTEMPLATE.mdの長さテーブルを読んでください。各シーンのどのスロットがプライマリテキストとしてカウントされ、それらがどのように入力されるかが示されているため、各状態を発見するのではなく、予算化できます。すべてのシーンタイプがレジストリにあり、すべての文字列がその文字数制限に収まり、すべての数値がそれを計算するコードを指定し、npm run fitがエラーを報告しない場合に完了です。文字数制限は最初のフィルターにすぎません。スロットの幅は隣接するスロットに依存する可能性があるため、ピクセルチェックはステップ4の赤いバナーです。ルールがタイミングAPI 3を宣言しているテンプレートでは、エラーはフィルムが変更の4つの階層(原則5)のいずれかを破っていることを意味します:一度に入力されるプライマリテキストが5単語を超える(主張の場合は8単語、マークされたポーズで読まれる)、ランディング後の保持が2ビートを超える、コンポジションが6秒を超える、4ビート以上の変更なしのギャップ、表現力豊かなトランジションとピークの数や配置が間違っている。長い行を最初に次々に入力されるフレーズに分割し、次に繰り返されるラベルを一瞥テキストにし、次にシーンを分割します。タイプを縮小したり、読み取りの下限を超えて速度を上げたりしないでください。npm run fitが出力するタイミングテーブルの下に、階層の測定値が表示されます。まだAPI 2のテンプレートは、ページ制限(プライマリワード12、ステップの保持は1小節、最後は1.5小節、ページは4小節)を維持し、階層をINFOノートとして表示します。

4. まずは埋めてフレームを確認

content.js(およびモードで使用する場合はdata/やrun.js)を編集します。長さを合わせるためにdurationやシーンのbarsを入力しないでください。次に、アニメーション化する前にキーフレームの静止画をレンダリングして確認します(スクリプトは最初にfitを実行するため、静止画は現在の長さを使用します):

npm run snapshot -- --at <t1>,<t2>,<t3>

静止画の赤いバナーは、テキストがボックスよりも幅が広いスロットを示しています。そのテキストを短くしてください。中核原則またはモード原則に違反するフレームを修正します:25px未満の情報テキスト、読みにくいテキスト、3つ以上のタイプレベル、2つの主人公、2番目のアクセント、クリップまたははみ出したコピー、ai-tells.mdの内容。各キーフレームがモードカードのP0チェックに合格したら完了です。

5. レンダリング

npm run film        # fit → audio → check → render, writes renders/film.mp4

npm run checkはエラー0を報告する必要があります。その警告はチェックリストに照らして判断されます。コントラスト警告は、まだ入力中のテキスト(タイピング、フェードイン)で、着地後に1回だけ読まれる場合にのみ許容されます。その他の警告は修正されるか、「既知の問題」にリストされます。サウンドは同じビートグリッド上でcontent.jsに従います。代わりに生成音楽を使用するには、フィルムの調整されたテンポと長さ(renders/timing.json)でレンダリングし、assets/audio/に保存し、content.bed = { file, offset }を設定します(モードのTEMPLATE.mdを参照)。

6. 測定とレビュー

node <SKILL_ROOT>/scripts/check-film.mjs renders/film.mp4 --film-dir .
sh <SKILL_ROOT>/scripts/contact-sheet.sh renders/film.mp4 renders/contact-sheet.jpg 20

check-filmはrenders/timing.jsonを読み込み、それに対してレンダリングを測定します:フォーマットと長さ、ラウドネス(短期および瞬間的なジャンプを含む)、黒フレーム、エリアごとのフラッシュ、ビート上のキーイベント(2フレーム以内、ピクチャーイベントとサウンドオンセット(1フレーム以内に≥ 3 dB))、コンテンツマスク内のシーンごとの静止ストレッチ(グレイン認識ノイズフロアに対する)、ペース(長いほぼ静止ビートの連続なし、フィルムの半分以上がほぼ静止ではない)、ホールドのセトリング、ハンドオフ、等長シーンの連続、および宣言されたイベント(T0ギャップ、T1コンポジション長さ、T2表現力豊かなトランジション、T3ピーク、ホールド長さ)における変更の4つの階層。これらはタイミングAPI 3のテンプレートに対してのみFAILになります。ピクチャーオンセット、大面積変更、および最も大きな瞬間は、それらの横にあるピクセルおよび信号の推定値です。最小テキスト、テキストコントラスト、タイプレベル、アクセントエリア、オクターブバランス、4小節の繰り返し、およびリミッティングは、ピクセルまたは信号の推定値であり、INFOとして報告されます。測定するものがない項目はPASSではなくN/Aを報告します。--jsonは各結果を、それが提供するチェックリスト項目とともに表示します。

次に、references/checklist.mdとモードカードのチェック(ピラミッドの底部からP0、次に上部から判断(フィット、新鮮さ、テクスチャ))を確認します。何かを変更する前に測定します。原因を修正し、再測定します。すべてのP0が合格し、すべてのP1/P2のミスが修正されるか、フィルムのREADMEに「既知の問題」として記載されたら完了です。

7. 引き継ぎ

MP4パス、コンタクトシート、および計画、モードとプリセット、音楽ソース(合成または生成)、コマンド、check-filmレポート、既知の問題を含むREADMEを提供します。誰かが聴いていない限り、「まだ耳で確認されていません」と伝えます。ユーザーの評価を求め、それを日付とともにそのまま引用して返します。ユーザーが利用できない場合は、「評価待ち」と書き、停止します。

メンテナー向け:評価からルールへ

このスキルのソースを保守する人のみ対象。フィルムの作成者はステップ7で停止します。評価はモードカードや原則を直接編集しません。まず、ピラミッドの層に配置し、foundations.mdと照らし合わせて確認します:層1〜2では基準が決定し、層3〜4ではドメインのコンセンサス(理由を記述した逸脱がない限り)、層5〜6では理論が同等に優れていると判断する候補から所有者が選択します。傾向は、2つの一貫した評価の後にルールになります。

…

[翻訳のため省略]

関連スキル