Communitygithub.com

ia-content-maker

機械的な説明動画生成機(フラットベクター、2D、すべてコード)で、スクリプトからMP4までを制作します。1〜10分の動画を、ランダムに割り当てられたチャンネルID(DNA)と、Reels/TikTok/Shorts向けの縦型またはYouTube向けの16:9フォーマットで生成します。ユーザーが「Xについての動画を作って」、「動画を作って:[テーマ]、[長さ]」、「アニメーションショート/リール」、「説明動画」、「AIを使った新しい動画チャンネル」、またはチャンネルのDNAを作成/調整したいときに使用します。

ia-content-maker とは?

このスキルは、エージェントを説明動画チャンネルの全チーム(脚本、アート、キャラクターの切り抜きとリギング、音声、アニメーション、BGM、レンダリング、サムネイル、字幕)に変えます。すべての動きはコードで記述され(フレームごとにキャンバスレンダリング)、AIが生成した動画は使用しません。ホワイトラベル設計により、チャンネルのアイデンティティ(パレット、フォント、線、カード、トランジション、リズム、ナレーター)はコードによってチャンネルごとに一度ランダムに生成され、`dna.json` に保存されます。同じスキルを使っても、チャンネルごとに異なる見た目になります。エンジンは特定のパレットやフォント、テーマに依存しません。 このスキルは、ターミナルコマンドを実行できる任意のエージェント(Claude Code、Codex、Gemini CLI、Cursorなど)で動作します。ワークスペース(`engine/`、`dna.json`、`videos/`、`library/` フォルダを含む)をセットアップし、一度チャンネルDNAを設定した後は、ユーザーが「動画を作って:[テーマ]、[長さ]」と依頼するたびに、10ステップのワークフロー(新しい動画フォルダの作成、脚本執筆、アート生成、音声生成、ショットのアニメーション、コンタクトシートによる確認、レンダリング、サムネイル生成、ログ記録と納品)を実行します。縦型(1080×1920、Reels/TikTok/Shorts向け)または横型(1920×1080、YouTube向け)のフォーマットをサポートします。 縦型動画では、冒頭とエンディングのジングルはなく、最初のフレームから音声が始まります。フレーム0は決して空にせず、フックがすでに表示されている必要があります。各ショットは縦型セーフゾーンを考慮し、画面下部の15%、右側50〜80%の高さ(アプリのボタン領域)は避けます。字幕(1〜3単語、強調表示される発話単語)は縦型のみに焼き付けられます。 スタイルルールは厳格で、フラットベクター(輪郭線なし)、最大1つの影(同じ色でより暗いもの)、グラデーションなし、テクスチャなし、絵文字なし、チャンネルロゴなし、実在の人物の写真なしです。パレットはDNAから取得した5色+11のコードカラーのみを使用します。1秒以上静止状態は禁止で、すべてのキャラクターは呼吸、まばたき、自分のセリフに合わせて演技します(指さし、紹介、肩をすくめる、喜ぶなど)。2つの連続するショットで同じ場所を使用してはいけません。

対応✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add https://github.com/GMendes18/ia-content-maker/tree/HEAD

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

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

ドキュメント

IA Content Maker — ホワイトラベル動画生成機

このスキルは、エージェントを説明動画チャンネルの全チームに変えます。脚本、 アート、キャラクターの切り抜きとリギング、音声、アニメーション、BGM、 レンダリング、サムネイル、字幕。すべての動きは コード(フレームごとにキャンバスレンダリング)で記述されます。AIが生成した動画は使用しません。

ホワイトラベル: チャンネルのアイデンティティ(パレット、フォント、線、カード、トランジション、リズム、ナレーター) は、チャンネルごとに一度コードによってランダムに生成され、dna.json に保存されます。 同じスキルを使っても、2つのチャンネルは異なる見た目になります。 エンジンは特定のパレットやフォント、テーマに依存しません。

任意のターミナルコマンドを実行できるエージェント(Claude Code、Codex、Gemini CLI、Cursor…)で動作します。 完全な元の仕様は referencia/especificacao-original.md にあります。このファイルは、 実践によって検証されたフローと変更点を記載しています。矛盾がある場合、このファイルが優先されます。

0. 作業の前に:ワークスペースを見つけるか作成する

コードはワークスペース(engine/、dna.json、videos/、library/ フォルダを含むディレクトリ)内で実行されます。

  1. 既存のワークスペースを探す(engine/mv.py と同じ階層に dna.json があるかどうか;ユーザーが場所を指定する場合もあります)。
  2. 存在しない場合:bash <skill-folder>/scripts/setup.sh [folder](デフォルトは ~/ia-content-workspace)を実行。 venv、Kokoro、faster-whisper、Playwright/Chromium、OpenCV をインストールします。Python ≥3.10 と ffmpeg が必要です。
  3. ワークスペースはあるがスキルが新しい場合:同じ setup.sh <workspace> を実行してください。engine/ と templates/ だけが更新され、dna.json、videos/、library/ は決して更新されません。

以下のコマンドはすべてワークスペース内で、.venv/bin/python(以降は py)を使用して実行します。

1. チャンネルのセットアップ(一度だけ)

  1. 以下を確認する:チャンネル名(なければ、DNA抽選後にそれに合った名前を5つ提案する)、 主要フォーマット(縦型か16:9か)、利用可能な音声(無料のKokoro、ElevenLabs/その他、または自分で録音した音声)、 既存の dna.json があるかどうか(あればワークスペースにコピーする)。
  2. py engine/mv.py dna — os.urandom のシードでDNAを抽選し、競合する組み合わせを解決し、 色のコントラストを検証し、dna.json とバックアップを保存し、フォントをダウンロードします。カードを表示する (py engine/mv.py cartao)。ユーザーは特定の要素を固定(--lock traço=indice)したり、 再抽選(py engine/roll_dna.py --reroll <traço>)できます。手動で要素を選択しないでください。
  3. dna.json に名前を保存 → channel.name。
  4. 画像モデルを使わないアートルート:"Chunky rounded-square heads" という線のみがコード内に描画されています (engine/art/characters.py)。抽選で別の線が出た場合、または --lock build=3 で固定した場合は、 _head/_torso/_legs に従って characters.py に新しい線を実装するか、画像モデルを使用します。
  5. セットアップ後、チャンネルのDNAは固定されます。各動画では、動画固有の要素のみが再抽選されます。

2. 各動画 — ワークフロー

ユーザーの開始コマンド:「動画を作って:[テーマ]、[長さ]」(または "make a video: …")。

#ステップコマンドユーザーに表示して一時停止?
1動画フォルダ作成 + 動画固有の抽選(脚本の形式、フック、動機、サムネイルレイアウト、強調)py engine/mv.py novo <slug>—
2videos/<slug>/script.txt に脚本(プレーンテキスト) + プラン数値(単語数、場所、キャラクター数)ファイル作成はい:脚本+選択項目を表示し、OKを待つ
3art.json + テーマに応じた新しいplates/tilesを engine/art/plates.py と tiles.py に作成ファイル作成—
4アート → 切り抜き → リギングpy engine/mv.py arte <slug>アートのコンタクトシートを表示
5音声 + 単語タイミングpy engine/mv.py voz <slug>長さとwhisperの誤差を報告
6video.json + videos/<slug>/shots/01_story.js のショット(templates/shots_modelo.js をベースに)ファイル作成—
7コンタクトシート(2秒に1フレーム)→ 修正 → 繰り返しpy engine/mv.py contato <slug>—
8レンダリング + 音声 + QCpy engine/mv.py render <slug>—
9サムネイルpy engine/mv.py capa <slug>—
10ログ + 納品(動画、サムネイル、ハッシュタグ付き字幕)py engine/mv.py log <slug>はい:納品完了

コンタクトシート/スチル/レンダリングで --formato paisagem を指定すると1920x1080で生成され、デフォルトは縦型1080x1920です。 特定の時点を確認するには:py engine/mv.py stills <slug> 0,3.2,10.5。

2.1 サイズ(長さに応じたスケーリング)

  • 単語数:Kokoro pt-BR(速い、1.0でも)で毎分約205語。遅い音声では約175語。
  • 場所:分数 × pace.places_per_min(DNAから)。縦型では約3秒ごとにカット(毎分約20ショット)。 〜30%が大きなplate(キャラクターあり)、残りはクローズアップのtile(1クワッドあたり4つ)。
  • 主要キャラクター:3分未満で1〜2人、3分以上で2〜3人。
  • チャプター(脚本内の ## 行):2分未満ではなし。5分までで3〜4、10分までで5〜8。
  • レンダリング:--partes 4(デフォルト)。3分以上の動画:4〜6パート。

2.2 縦型(Reels/TikTok/Shorts)— 検証済みデフォルト

  • 冒頭とエンディングのジングルなし: 音声はフレーム0から始まります。video.json に title も outro_plate もなし。 (16:9ではDNAのジングルを使用。)
  • フレーム0は決して空にしない: フックはすでに画面に表示されている必要があります(write/numberでは t0 = sh.start - 0.4)。
  • すべてのショットは sh.vert({ vw, vf }) を呼び出します — referencia/motor.md を参照。
  • 字幕は縦型のみに焼き付けます(1〜3単語、発話されている単語を強調)。16:9には字幕はありません。
  • セーフゾーン:右側50〜80%の高さ(アプリのボタン)と下部15%には重要なものを配置しない。 HUDは左側に、動機カウンターは右上に配置します。
  • フックと構成:referencia/retencao.md に従ってください(保持率で検証済み)。

3. スタイルルール(譲歩不可)

  • フラットベクター、輪郭線なし、最大1つの影(同じ色でより暗いもの)、グラデーションなし、 テクスチャなし、絵文字なし、チャンネルロゴなし、実在の人物の写真なし。
  • 色:パレットの5色 + dna.json の11のコードカラーのみ。ショット内では ENGINE.C.<cor>、 ENGINE.font(px)、ENGINE.rgba(hex, alpha) を使用 — 固定のhexやフォント名は使用しないでください。 コード内のアートでは ROLE["ice"|"stone"|"pine"|"coal"|"berry"] を使用します(任意のパレットから計算された役割)。
  • テキストは世界内のオブジェクト(黒板、看板、甲羅、カード、画面)にのみ表示 — 場所が情報を伝えられる場合は、 アートの上にカードを単独で配置しないでください。plateの空欄に書き込みます。
  • 1秒以上静止状態は禁止。すべてのキャラクターは呼吸、まばたき、自分のセリフに合わせて演技します (指さし、紹介、肩をすくめる、喜ぶなど)。DNAの pace.new_thing_every_s ごとに何か新しいものが必要です。
  • 連続する2つのショットで同じ場所を使用してはいけません。ズームは元のピクセルの1.33倍以下。
  • エントリーはスプリング/ポップ/パフ効果を使用し、単純なフェードは使用しません。間違ったアイデアには赤いバツ印。

4. アート

コードルート(デフォルト、無料): plates と tiles は engine/art/plates.py と tiles.py 内のSVG関数で、 (svg, meta) を返します。Plates: 1920x1080(世界座標)、空、中央に自由な床、meta には floor_y、blanks(コードが書き込む場所)、 portals(≥ 400 px、トランジションのズーム用)、anchors を含みます。Tiles: オブジェクトのクローズアップ、1クワッドあたり4つ (make_art.py が白いガターで2x2を組み立て、切り抜き、metaを変換します)。マップ: 投影された経度/緯度の輪郭(pacific_map、brazil_map を参照)。 キャラクター: art.json 内の各キャラクターの辞書(パレットからの色、キャラクター間で変化する肌の色)。

画像モデルルート(オプション): referencia/especificacao-original.md(<art> セクション)のスタイルコアを使用して画像を生成し、 videos/<slug>/art/ に同じ名前で保存します。グリッド(*_grid.png)上で矩形を測定して meta JSONを記述します。 パイプラインの残り(切り抜き、リギング、アニメーション)は同じです。 シートはクロマキー背景(緑 #00B140、またはパレットに緑がある場合はマゼンタ)で、前面は腕なし。

5. 音声

  • デフォルト:Kokoro(mv.py voz)、DNAのナレーターテーブルからの音声、速度 1.0〜1.1(テンポ変更は不可)。
  • より自然:既存のオーディオファイルを指定 → py engine/mv.py voz <slug> --wav arquivo.wav(自分の声、ElevenLabs、Chatterbox…)。 脚本は話されるテキストと一致している必要があります。whisperがすべてを再同期します。
  • 「速射砲」感を減らす:--pausa-max 0.35 --pausa-manter 0.28。
  • voice.py は、単語の5%以上が聞き取れなかった場合に失敗します — 音声をやり直してください。強制しないでください。

6. レンダリング前のチェック(コンタクトシート)

レンダリング前に修正する:空のまたははみ出した看板、顔の上のテキスト、黒い境界線、浮いている足、 連続する同じ場所、DNAの間隔の2倍以上新しいものがない区間、空のフレーム0、縦型で端で切れたテキスト、 DNAから外れたもの(フォント、色、カード、トランジション)。 レンダリング後、QCは計画外の1フレームのジャンプを指摘します — それぞれ調査します(stills)。 オーディオ:ゲートは音声が音楽+効果音より15dB以上大きいこと、背景が1%未満のフレームで最も大きいことを要求。 出力は-14 LUFS、ピーク-1 dB。

7. 納品

  • 動画:videos/<slug>/<slug>_vertical.mp4(または16:9では <slug>.mp4)とサムネイル。
  • 字幕の準備完了:1行目=フック、2〜3文でテーマのキーワード(検索は字幕を読みます)、 コメントを促す質問、最大5つの関連ハッシュタグ(Instagramの制限)。
  • 簡略化された事実や歴史のポピュラーバージョンについて注意を促す。
  • mv.py log <slug> — 動画固有の抽選は、過去5件の形式/フック/動機/サムネイルの繰り返しを防ぎます。

8. エンジンは動画ごとに改善される

バグや制限? engine/ 内を修正し(動画のファイルだけではなく)、教訓をスキルの referencia/licoes.md に記録します。 大きなパッチの前にショットのバックアップを取ります。長時間のレンダリング:再実行可能なパートに分割します。

参考文献

  • referencia/motor.md — ショットのAPI(S、sh.*、キャラクター、ポーズ、縦型カメラ)。
  • referencia/retencao.md — フック構造、最終呼びかけ、リズム。
  • referencia/licoes.md — 壊れたものすべてとその修正方法。
  • referencia/especificacao-original.md — 完全な仕様(DNAの要素、リギング、アニメーション、サウンド)。
  • workspace/exemplos/ — 2つの完全な動画:el-nino(縦型、神話と現実)と primeiro-cartao(16:9、時系列の物語)。 学習または再構築するには:videos/ にコピーし、mv.py arte + mv.py contato を実行します(words.js はすでに準備されています)。

関連スキル