Communitygithub.com

Kalem: 各シーンにそれぞれの描画エンジンを

コードで動画を作成する際、各シーンをどの描画エンジンで描画するかを決定し、シーンを生成し、ページめくりなどのトランジションで結合し、フレームロックされた効果音を追加します。「コードで動画を作る」「アニメーションを作る」「この動画をシーンに分割して」「どのエンジンで描画すべき?」「Reels/YouTube用のアニメーション」といった指示に応答します。

Kalem: 各シーンにそれぞれの描画エンジンを とは?

このスキルは、動画制作プロセスを根本から変革します。従来のように単一の描画エンジンで全てのシーンを描画するのではなく、各シーンの内容を分析し、最適なエンジン(Paper.js、PixiJS、Three.js、Manimなど)を自動選択します。これにより、手描き線画にはPaper.js、爆発エフェクトにはPixiJS、3DモデルにはThree.jsといった具合に、各シーンに最適な描画品質とパフォーマンスを実現します。スキルはまずユーザーの説明から4~8のシーンに動画を分割し、各シーンにエンジンを割り当てます。その後、各シーンを並行して生成し、制御画像で品質チェックを行い、gl-transitionsライブラリ(デフォルトはBookFlip:ページめくり効果)で滑らかに結合します。さらに、Tone.jsを使用してフレームロックされた効果音(クリック、ざわめき、ビートなど)を各シーンに同期して追加し、視覚と音声の完全な同期を実現します。このスキルはClaude Codeやその他のターミナルベースのAIエージェントで動作し、設定済みのスクリプトで依存関係を自動インストールします。ユーザーは、作成されたタイムラインJSON(zaman.json)とビジュアルブリーフ(BRIEF.md)を確認・編集することで、制作プロセス全体を細かく制御できます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/leodavincs/kalem/tree/main/.claude/skills/kalem

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

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

ドキュメント

Kalem: 各シーンにそれぞれの描画エンジンを は何をしますか?

このスキルはリポジトリのルートから実行されます(claude をリポジトリフォルダで開きます)。すべてのパスはリポジトリのルートを基準とします。新しい動画は projeler/<名前>/ の下に作成されます。

単一のエンジンで作成された動画は似たり寄ったりになります。このスキルは動画をシーンに分割し、各シーンの中に何があるかを調べて、それを最も美しく描画できるエンジンを選択します。エンジンは鉛筆のようなものです。同じ絵を鉛筆と水彩では異なるタッチで描きます。

シーンの中身 → どのエンジン

シーンの中身...エンジン理由
手描き、自己描画線、スケッチ、ペンの動きPaper.js線を最も滑らかで自然に描くエンジン。ペンワーク専用。
キャラクター、歩行、手を挙げる、図形が別の図形に変形素のCanvas(独自描画コード)動きと図形を完全に制御。
爆発、光、グレア、埃、数千の小さなパーティクルPixiJS数千のパーティクルをカクつかずに再生。
画面上のテキスト、数字、カウンター、情報カード、ニュース編集HyperFrames(HTML + GSAP)テキストと情報アニメーションで最もクリーン。
本物の3D:カメラが回る、光、影、機械Three.jsブラウザで本物の3D。
数式、グラフ、図式、数学Manim(Python)3Blue1Brownのツール。LaTeXがない場合はTextを使用。

ヘルパーはシーンを描画せず、エンジン内部で補助します。

処理ヘルパー
軽いオブジェクトが落下、転倒、バウンドMatter.js
重いオブジェクトが滑る、積み重なるRapier
シーン間のトランジション(125種類のトランジション、ページめくり = BookFlip)gl-transitions (ortak/gecis.html)
何かが弧を描いて画面に飛び込んでくるAnime.js
紙吹雪、星、絵文字のシャワーtsParticles
3Dモデルの削減glTF-Transform
フレームロックされた効果音(クリック、ざわめき、ビート)Tone.js (ses/ses.html)

このテーブルは一個人の好みで作成されました。20のツールを同じシーンで競わせ、評価・採点しました。ご自身で試行錯誤し、テーブルをご自身の目で調整してください。

フロー

  1. シーンに分割。 ユーザーが説明した動画を4~8シーンに分割します。各シーンについて日常的な言葉で一文を書き、エンジンを選択し、ユーザーにテーブルとして表示します。 「1. シーンには自己描画されるスケッチがある → Paper.jsで描画する必要がある。」 技術的な圧縮は行わない(「数字が走る」ではなく「シーンの中に増加する数字がある」)。 1シーン = 1エンジン。 シーンに複数の処理がある場合、画面を占有する主要な処理がエンジンを決定し、副次的な処理はヘルパーとして追加されます。
  2. 共通ファイルを作成。 <プロジェクト>/zaman.json(fps、サイズ、トランジションフレーム数、シーンリストと各シーンのフレーム数)と <プロジェクト>/BRIEF.md(共通のビジュアル言語、事実、各シーンの説明、納品契約)。サンプル:ornek/ucan-makine/(存在する場合)。
  3. シーンを生成。 紙の質感、色、フォントはBRIEFで一度定義され、各シーンはそれらを統一して使用します。動画が一貫性を持つかどうかはこれに依存します。 各シーンは独自のフォルダに格納:<プロジェクト>/sahneler/<NN-エンジン>/ → calistir.sh、video.mp4、kontrol.png、olaylar.json。シーンは互いに独立しており、並行生成可能(各シーンに別々のエージェント)。
  4. 制御。 各シーンの kontrol.png およびいくつかの完全なフレームを確認:テキストのはみ出し、空フレームの有無、色が共通言語に従っているか、最初のフレームが塗りつぶされているか。
  5. 結合。 python3 birlestir.py <プロジェクト> [--gecis BookFlip] → トランジション + 音声 → <プロジェクト>/cikti.mp4。 視聴者に各シーンがどのエンジンで描画されたかを表示したい場合は --etiket を追加:zaman.json の各シーンに "etiket": ["Paper.js", "自己描画ペン線"](オプションで3行目にヘルパー)、最初のトランジション用に "gecis_etiketi"。各シーンの左下に、ノート用紙の色をした小さなカードが表示されます。
  6. レビュー。 新しいエージェントに制御画像とBRIEFのみを渡し、質問:「見ている人がここで『ありえない』と思うことはありますか?」発見された問題を修正し、その後ユーザーに公開します。

技術契約

  • 時間はフレーム番号から取得。 Math.random は使用せず、シード付き乱数を使用。2回の実行で同じフレームが生成されること。
  • ブラウザエンジン:ページは /ortak/surucu.js の surucu(kur, kare, KARE) を呼び出し、kare(f) は描画済みのキャンバスを返します。キャプチャ:python3 ortak/yakala.py <ページパス> <フレームフォルダ> [幅 高さ]、その後 ffmpeg で mp4 に変換。
  • olaylar.json:[{"kare": 12, "tur": "cizgi|tik|vurus|dusme|hisirti|parilti|kanat|sayac", "guc": 0-1}]。画像のタイミングと同一フレーム。音声はここから生成されるため、音声と画像がずれることはありません。
  • ブラウザページをキャプチャする前に、JS を node --check で構文チェックします。構文エラーがある場合、ページはロードされず、キャプチャは60秒後に停止します。
  • Manim:リポジトリルートに .venv-manim/bin/python がある場合はそれを使用(MANIM_PY)。LaTeXがない場合は MathTex ではなく Text を使用。
  • ffmpeg でのテキスト描画(drawtext)は使用しません。テキストはエンジン内部で描画されます。
  • トルコ語文字(Ç Ğ Ş İ Ö Ü)は完全にサポート。大文字変換には toLocaleUpperCase('tr') を使用。
  • 最初のフレームは塗りつぶされていること:黒からのフェードインは行いません。最後の約15フレームは静かに(トランジションがそこに重なる)。
  • 突然のフラッシュ/グレアなし:フレーム間の明るさの急激な変化は小さく抑える。
  • 縦長動画(Reels/Shorts)の場合、上部約250px、下部約420px、右側約150pxに意味のある要素を配置しない。

セットアップ

./kurulum.sh がエンジンのパッケージをインストールします(Node 20+、Python 3、ffmpeg、Google Chrome が必要。Manim はオプション:pip install manim)。

関連スキル