Communitygithub.com

oneamitj/onevideo

プロンプトから洗練されたショート動画を作成します。プロダクト、アプリデモ、解説動画などをHTML/CSS/SVG/WebGLでアニメーション化し、オリジナル音楽と声優ナレーションを追加してMP4で書き出します。

onevideo とは?

OneVideoは、AIエージェント(Claude Code、Cursor、Codexなど)が、テキストプロンプトから完全なショート動画を制作できるようにするスキルです。物理的な製品の宣伝、アプリやコードのデモ、アイデアの説明、発表、広告、リール、予告編、データストーリー、キネティックタイポグラフィなど、あらゆる種類の動画を生成できます。仕組みとしては、各シーンが時間の純粋な関数としてアニメーションするWebページを生成し、ヘッドレスChromiumでレンダリング、FFmpegで動画に変換します。BGMはシーンに合わせて自動作曲され、音響効果も付与可能。ローカルのテキスト読み上げによるナレーションと多言語キャプションにも対応しており、右から左の言語も扱えます。重要なのは、すべてが無料のローカルツールで動作するため、有料APIやストック素材のサブスクリプション、透かしなどが一切不要な点です。対応プラットフォームはmacOS、Linux、Windowsで、Python、Playwright、FFmpegがあればすぐに実行できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add oneamitj/onevideo

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

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

ドキュメント

onevideo は何をしますか?

あなたはディレクター、デザイナー、編集者、そして作曲家です。プロンプト(そしてユーザーが共有できるもの:写真、ロゴ、コードベース、URL)から、まさにこのテーマのために作られたと感じられる短い動画を制作し、このマシン上で無料ツールを使ってレンダリングします。

仕組み。動画はWebページです。<section class="scene"> ごとに1シーン、stage.js によってアニメーション化され、すべてのフレームが時間の純粋な関数になります。render.py がページを提供し、ヘッドレスChromiumでフレームごとにシークしてスクリーンショットをFFmpegにパイプします。timeline.json がすべてのタイミングを保持し、music.py がそれに合わせてオリジナルスコア(ビートに合わせたカット、ビルドアップ、最後の一撃)とキーマッチングされた効果音を作曲し、voice.py がローカルのテキスト読み上げでラインを読み上げてキャプションを書き、assemble.py が音量を調整し、-14 LUFSでマスタリングして多重化します。費用は一切かからず、マシンの外に出るものはありません。

以下 SKILL_DIR はこのファイルを含むフォルダを指します。python3(Windows:python)を使用してください。すべてのスクリプトには --help があります。

実行

  1. マシンをチェックする
  2. ブリーフを理解する(質問するか、仮定する)
  3. 計画する
  4. 構成を構築する(ボイスオーバーがある場合は最初に)
  5. 見た目とリント
  6. 音楽とエフェクト
  7. レンダリングと納品

ユーザーには短い更新(計画準備完了、下書き準備完了)で知らせ、逐一のコメントはしないでください。

1. マシンをチェックする

python3 SKILL_DIR/scripts/doctor.py

ready が false の場合、fix 内のコマンドを実行します(通常は pip install playwright、そしてChromeまたはEdgeがインストールされていない場合は python3 -m playwright install chromium)。後で使用するために3つの情報をメモしておきます:browser.gpu(false はWebGLがソフトウェアで動作することを意味するため、3Dは小さく抑える)、network(npmレジストリはフォント、アイコン、three.jsを提供し、GitHubリリースは音声モデルを提供する)、voice.kokoro(自然なボイスオーバーが利用可能、または pip install kokoro-onnx でインストール可能)。

2. ブリーフを理解する

以下を把握します:

  • サブジェクトタイプ:物理的な製品、アプリ/ソフトウェア/コード、ウェブサイト、アイデアまたはコンセプト、イベントまたは発表、データ、ブランドまたは人物、場所またはサービス、チュートリアル。references/storyboards.md の該当セクションを読んでください。
  • 事実:ユーザーが与えた具体的な事実すべてをリストアップします(名前、価格、日付、仕様、数値、主張、URL、引用)。これらのみが動画内で事実として表示される可能性があります。トーン、ジョーク、フレーミングはあなたが自由に創作しますが、事実は創作してはいけません。
  • ソース:コードベースまたはURLがある場合は、最初にそれを検査します(実際のコピー、色、フォント、UIフロー。機密情報、トークン、内部URL、実際の顧客データは決して検査しません)。ユーザーからの写真やロゴは、あなたが描くものよりも優先されます。

動画を変える可能性がある場合にのみ、最大4つの質問を一度だけ行い、それぞれに推奨されるデフォルトを提供します(利用可能な場合はask-userツールを使用):

  1. どこに投稿されますか?(フォーマットと長さを設定)
  2. どんな雰囲気ですか?(この主題に合った3つのトーンを提案、references/motion-design.md のトーンテーブルを参照)
  3. ボイスオーバーは?(なし、またはどの言語)
  4. アセットと必須事項:ロゴ、写真、ブランドカラー、行動を促すフレーズ、2つか3つの重要な事実。

プロンプトがすでに答えていることはスキップします。ユーザーが「ただ作って」と言ったり、離れていたり、曖昧に答えたりする場合は、デフォルトを使用してそれを1行で述べてください:

判断デフォルト
フォーマット16:9 1920x1080;Reels、TikTok、Shorts、Storiesに言及している場合は最初に9:16
長さプロモーションは約20秒(15~30秒);解説やチュートリアルは30~60秒
トーンサブジェクトとユーザーの書き方から推測
音楽オン。スタイルはトーンから
ボイスオフ。ただし、30秒以上の解説/チュートリアルの場合は除く
言語プロンプトの言語

明確に役立つ場合に、ブロックせずに簡潔に1つか2つの改善を提案します:ソーシャル用の9:16カット、イラストの代わりの実際の製品写真、長い解説用のボイスオーバー、翻訳版、広告用の6秒バンパー、消音視聴用のキャプション。

3. 計画する

references/storyboards.md の最後にあるテンプレートを使用して OUT/plan.md を書きます:アングル(この動画を具体的にする一文)、オーディエンス、唯一の要点、フック(最初の2秒)、シーンテーブル(ID、長さ、エネルギー、画面上の正確なテキスト、ビジュアルとモーション、トランジション、サウンド)、ボイスライン(ある場合)、ポスターモーメント、シェアコピーのドラフト。読み取り予算を確認します:シーンは約 (長さ - 0.6) / 0.3 語を保持できます。ボイスオーバーがある場合は、実際の音声からシーンをサイジングします:python3 SKILL_DIR/scripts/voice.py --say "line" --lang es --out OUT/work/l1.wav は長さを出力します(話す速度は言語や声によって大きく異なります)。ユーザーが計画の承認を求めた場合は、短い要約を表示して待ちます。そうでなければ続行します。

4. 構成を構築する

python3 SKILL_DIR/scripts/new_video.py OUT --title "Tidepool launch" --format landscape --lang en [--fonts "Fraunces" "Inter"] [--3d]

これにより OUT/comp/(ランタイム、スタートページ、タイムライン、文字列、フォント)と OUT/work/ が作成されます。その後:

  1. comp/timeline.json を編集:シーン(id、dur、energy 0~1、transition、音楽ヒント)、music(スタイル、シード、エンディング)、sfx、voice.lines。完全なフィールドリストは references/runtime-api.md の最後にあります。
  2. python3 SKILL_DIR/scripts/timeline.py comp --snap はテンポを選び、すべてのカットをビートに移動します。長さを変更するたびに再度実行します。
  3. ボイスオーバーがある場合:python3 SKILL_DIR/scripts/voice.py comp。ボイストラック、キャプション、単語ごとのタイミング(comp/voice.json)を書き込み、シーンを超えて実行されるラインを報告します。それらのシーンを長くするか、単語を切り、再度スナップして再実行します。キャプションは安全領域の下部のバンドに焼き付けられ、.safe はそれに干渉しないように縮小されるため、ページレイアウトの前にこれを行います。
  4. comp/index.html と comp/strings/<lang>.json を書きます。最初に references/runtime-api.md を読んでください。ビジュアルには references/visual-toolkit.md(3D製品、イラスト製品、ユーザー写真、モックアップ、コード、チャート、地図、アイコン)を、レイアウト、タイポグラフィ、色、モーションには references/motion-design.md を使用します。

ページのルール(レンダラーがこれらに依存するため):

  • 時間からのみアニメーション:Stage API、CSSキーフレームループ、または frame(t) コールバック。Math.random() の代わりに Stage.random(seed)。タイマーや Date は使用禁止。
  • ページが読み込むものはすべて、相対パス(フォント、画像、three.js)で comp/ 内に配置します。CDNは使用禁止。
  • テキストは実際のDOMテキストのままにします(画像に焼き付けない)。これにより、QA、キャプション、翻訳が機能します。
  • var(--u) でサイジングし、テキストを .safe 内に収め、各シーンに不透明な背景を与え、配信するすべてのフォーマットのレイアウトルールを記述します(.fmt-vertical ...)。

5. 見た目とリント

このゲートは、高価なレンダリングの前にほとんどの問題をキャッチします。

python3 SKILL_DIR/scripts/render.py OUT/comp --stills auto --sheet OUT/work/sheet.png

シート画像を開き、視聴者としてすべてのフレームを見ます:最初のフレームで主題は明確か、クリップ、衝突、小さすぎる、コントラストが低い、空の部分はないか、トランジションフレームは濁っていないか。修正して繰り返します。その後:

python3 SKILL_DIR/scripts/render.py OUT/comp --qa

QAは、読むには短すぎるテキスト、フレーム外または安全領域外のテキスト、オーバーフロー、重なり(キャプション含む)、小さすぎるタイプ、低コントラスト(実際のピクセルで測定)、ランタイム警告を報告します。すべてのエラーと、正当化できないすべての警告を修正します。きれいになるまで両方を再実行します。縦型または翻訳バージョンの場合は、--format と --lang を指定して同じ2つのコマンドを実行します。

6. 音楽とエフェクト

python3 SKILL_DIR/scripts/render.py OUT/comp --cues      # アニメーションからのサウンドキュー(ポップ、タイピング、クリック)
python3 SKILL_DIR/scripts/music.py OUT/comp              # スコア+エフェクト -> comp/audio/

大きなヒット(衝撃、スティンガー、クラッシュ)は話し言葉の外に配置します:行間の隙間に移動します。同じスタイルで別の曲が必要な場合は music.seed を変更し、別の雰囲気が必要な場合は music.style を変更します。スタイル、シーンヒント、エフェクト、声、言語は references/audio.md にあります。ユーザー自身のトラックを使用する場合は、そこの「ユーザー自身の音楽を使用する」に従います。

7. レンダリングと納品

python3 SKILL_DIR/scripts/render.py OUT/comp --out OUT/work/video.mp4 --poster-at 6.2 --poster OUT/<slug>-poster.jpg
python3 SKILL_DIR/scripts/assemble.py OUT/comp --video OUT/work/video.mp4 --out OUT/<slug>-16x9.mp4

--poster-at は最も安定したフレームの時間(タイトルが完全に入り、トランジション中ではない)。これがフレーム0になり、Slack、X、Discord、およびほとんどのプレーヤーが表示するサムネイルになります。ループし、カバーをアップロードできるReels、TikTok、Shortsの場合は、--no-bake を追加します。JPGは保存されますが、フレーム0は実際の最初のフレームのままなので、ループがタイトルをフラッシュしません。render.py はETAを出力します。長い、または3Dが多い作品の場合は、最初に --quality draft でレンダリングして表示します。シェルツールは約10分後にコマンドを停止することが多く、GPUのないマシンでの3Dは1フレームあたり約1秒かかるため、長時間のレンダリングはバックグラウンドで開始し、ログをポーリングします:

nohup python3 SKILL_DIR/scripts/render.py OUT/comp --out OUT/work/video.mp4 --poster-at 6.2 > OUT/work/render.log 2>&1 &
tail -n 3 OUT/work/render.log     # JSON結果が表示されるまで繰り返す

他のフォーマット:--format vertical|square|portrait(最初にそのフォーマットの静止画を確認)。翻訳:strings/xx.json で --lang xx、references/global.md を参照。小さなプレビュー用の --gif OUT/<slug>.gif を追加します。

OUT/ に納品:MP4ファイル、ポスターJPG、ボイスがある場合は <slug>.srt(comp/captions.srt のコピー)、share.txt(動画の言語で1~3行、そのまま投稿可能で、具体的で、「シェアできることを嬉しく思います」などは不使用)。その後、ユーザーにファイルの場所、創造的なアングルを一文で、そして1つか2つの次のステップ(縦型カット、別の音楽シードまたはスタイル、別のフック、翻訳、ボイスオーバー)を伝えます。references/platforms.md には仕様、安全ゾーン、納品物セットがあります。

クリエイティブの法則

  • 2秒以内にフックする。 最初に計画します。フレーム1で何か視覚的なことが起こります。ロゴや黒からのスローフェードで開いてはいけません。
  • 対象を見せる。 製品、使用中のUI、アイデアを画像として。どの動画にも当てはまる抽象的な図形は、単なる埋め草です。
  • 具体的に。 対象自身の言葉、色、オブジェクト、数値を使用します。禁止:「ワークフローを合理化」、「パワーを解放」、「革命」、「次世代」、「シームレス」、「ゲームチェンジャー」。
  • シーンごとに1つのアイデア、 そして視線が留まる場所を1つ。
  • 読みやすい。 素早く入り、そのまま保持:完全に安定して1語あたり約0.3秒、1~3語では最低0.8秒。保持時間を減らす前に、まず語数を減らします。
  • 生き生きと。 シーケンシャルな表示、シミュレートされたクリックやタイピング、カメラのドリフト、パララックス。2秒以上静止してはいけません。
  • 音と映像は一体。 ビートに合わせてカット、明らかにするときにヒット、意図的に無音。
  • すべてのフレームが投稿可能。 どのフレームで一時停止しても、デザインされたように見えるべきです。
  • 短く。 ソーシャルでは15~30秒、解説では最大60秒。決して引き伸ばさない。
  • 正直に。 創作した事実、数値、推薦の言葉、賞、パートナーロゴは使用禁止。イラストは製品にない機能を示してはいけません。

権利と安全性

  • 実在の人物:創作した肖像や声は使用禁止。写真や録音は、ユーザーが提供し、権利を有している場合のみ使用します。
  • 他の企業のロゴ、製品、キャラクター、および与えられていない推薦を暗示するものは使用禁止。
  • 音楽は動画ごとに生成され、自由に使用できます。ユーザー提供のトラックは、ユーザーが使用許可を確認している必要があります。
  • ダウンロードしたアセットは、そのライセンスを comp/assets/LICENSES.json に記録し、必要なクレジットは共有テキストに含めます。
  • 健康、金融、法的な主張:ユーザーが提供したもののみ、ユーザーの主張として表現します。
  • フラッシング:1秒間に3回以下のフラッシュ。render.py は検出時に警告します。

何かが壊れたとき

症状修正方法
ページが準備できたと認識されない表示されたコンソールエラーを読む;ビルダーのタイプミス、または Stage.start() の欠落
「セレクタが一致しませんでした」要素が別のシーンにあるか、クラス名が異なる
フォントが間違っている、または欠落assets/fonts/fonts.css と fetch_assets が出力したファミリー名を確認;非ラテン文字の場合はスクリプトフォントを追加
3Dが遅い、または真っ白doctor.py でgpu false:キャンバスを小さく、mat.glassFast、または2D/SVGに変更;ESモジュールはプレビューに render.py --serve が必要
その言語のボイスがないキャプションのみ、ユーザーからの録音、または別のエンジン(audio.md)
音楽が大きすぎる、または小さすぎるassemble.py --music-gain -3、またはシーンの energy を下げる
ffmpegにlibx264がないpip install imageio-ffmpeg
レンダリングが遅すぎる反復中は --quality draft;コア数の多いマシンでは --workers

リファレンスファイル

  • references/runtime-api.md:stage.js API。index.html を書く前に読んでください。
  • references/storyboards.md:フック、サブジェクトごとのビートシート、エンディング、計画テンプレート。
  • references/motion-design.md:トーン、フォーマットごとのレイアウト、タイポグラフィ、色、タイミング、トランジション、可読性。
  • references/visual-toolkit.md:3Dおよびイラスト製品、ユーザー写真、モックアップ、コード、チャート、地図、アイコン、無料アセットソースとライセンス。
  • references/audio.md:音楽スタイルとスコアリングのヒント、効果音、ボイスエンジンと言語、ミキシング、ユーザー音楽。
  • references/platforms.md:フォーマット、長さ、安全ゾーン、キャプション、エンコーディング、納品物。
  • references/global.md:言語とスクリプト、RTL、フォント、翻訳、他のオペレーティングシステムとエージェント。

関連スキル