Handmade Stage Film(ハンドメイドステージフィルム) は何をしますか?
ハロウィンの夜、何もやることがない。黒いボブの少女がペンキで塗った段ボールのソファに座り、ピンクのドリンクを手に、段ボールのリモコンをクリックする。段ボールのテレビが砂嵐に変わり、小さなゴーストが画面に現れ、やがて画面から剥がれ落ちて浮かんでいく。彼女のカップのそばでホバリングし(「一口飲みたかったんだね」)、チェック柄のテーブルに降り立つ。テーブルでは巨大なフォークがペイントされたベリーの皿を突き刺している(「ガーデニア、ベリーズ、ヨーグルト」)。そして一口飲むと、彼女は巨大な魔女の帽子の上に座り、周りに星がポンポンと現れる(「…完全に魔法」)。カップのクローズアップには「マジックプリティウォーター」と矢印が走り書きされ、最後のカードにはロゴ、カップ、ゴースト、「ハロウィン限定」、そして販売場所が表示される。すべてのフレームはブランド自身の7枚のキャンペーン写真から生成されます。
このスキルは4つの部分から構成されています:
scripts/generate.mjs- 静止画をパーツに変換:9:16のキーフレーム(Nano Banana 2が追加部分をペイントし、元のピクセルを上に重ねる)、Klingクリップ、切り抜き小道具、再配置されたラベル、ロゴ。scripts/reel.mjs- クリップを1つのリールにカットし、フィルムの時計に合わせます。scripts/sfx.mjs- サウンドを合成:オリジナルの音楽ボックスワルツと、各イベントに対応する効果音。scripts/render.mjs- すべてをステージショーとして再生:12fpsのステップ動作、手ぶれ、動く粒子、人形、破れた紙のキャプション、矢印付きタグ、テレビ画面のオンオフ、最後のカード。ヘッドレスChromeとFFmpegを使用してローカルでレンダリングします。
セットアップ(各マシンで1回)
このスキルのフォルダ内で実行:
npm install
これによりpuppeteer-coreとffmpeg-staticがインストールされます。Google Chromeがインストールされている必要があります。または、CHROME_PATHをChrome/Chromiumの実行ファイルに設定してください(npx @puppeteer/browsers install chrome-headless-shell@stableでパスが表示されます)。
映像にはNano Banana 2とKling 2.5 TurboのAPIキーが必要です。スクリプトはモデルAPIゲートウェイを通じてこれらを呼び出します。キーはhttps://fal.ai/dashboard/keys で作成します。ユーザーは自分のターミナルでFAL_KEYとして設定します(シェルプロファイルなど)。チャット内でキーを貼り付けるように依頼したり、キーを印刷したりしないでください。
コスト
モデル使用料(ユーザー自身のAPIキーに請求):各静止画を9:16に拡張するごとに0.08ドル(各editも同様)、各5秒クリップに0.35ドル、各切り抜きに数分の1セント(2026年10月時点の価格)。7枚の静止画と5つのクリップからなるフィルムの場合、約2.30ドルです。リール、人形、キャプション、サウンド、最終MP4は自分のマシンで無料で作成されます。生成前にユーザーにコストを伝えてください。
成功のポイント
- 重要な部分は手を加えない自社写真。 拡張とすべてのクリップはブランドの実際の静止画から始まります。
extendは元のピクセルをAI版の上に重ね、relabelはクリップでラベルがぼやけたフレームに鮮明なラベルを再配置します。 - スライドショーではなくストーリー。 ショット間で少しだけプロットを計画し、ショット間を移動する1つのアイテム(ここではテレビから逃げ出すゴースト人形)を用意します。キャプションはスローガンではなく、短いストーリービートです。
- わざと不器用に。 すべての動きは1/12秒のステップと微かな揺れで行われ、人形はキー上でぐらつき、キャプションは3ステップでポップオンし、矢印は3ストロークで描かれます。滑らかにしないでください。
- 製品とブランドの両方を半々に。 製品はほとんどのショットに登場し、1回はタグ付きのクローズアップがあります。最後のカードはロゴ、製品、名前、購入場所です。
ワークフロー
- 収集 - 1回の撮影から4~8枚の静止画(3:4、4:5、9:16)、製品名、一行(フレーバー、素材など)、メモ(「ハロウィン限定」)、CTA。静止画の下部に印刷されたロゴやバッジがあるかどうかを確認する(フレームからペイントで消去され、最後のカード用にキーアウトされます)。
- スクリプト(生成前に表示する):ショットの順序、プロット、各クリップで動くもの(1つか2つの小さなアクション、製品は静止)、切り抜いて人形にする小道具とその動き、キャプションとタグ、費用。15~20秒に抑える。
- キーフレーム:
node scripts/generate.mjs extend --in still.jpg --out keys/<shot>.png --cover <rows>を、9:16でない各静止画に対して実行(--cover= 元画像の下部にある印刷ロゴ帯の高さ(ピクセル単位)、ある場合)。それぞれをフルサイズで確認:モデルが新しい帯に鏡像や重複したオブジェクトを残した場合、同じ写真のプレーンなテクスチャで覆う。 - 試作:プロットのフックとなるショットの1つのクリップ:
node scripts/generate.mjs clip --start keys/<shot>.png --prompt "…" --out clips/<shot>.mp4。プロンプトには動くものだけを指定(「彼女はリモコンのボタンを一つ、親指で押す。カップは直立して静止したまま」)。固定された接尾辞により、カメラ、セット、顔、製品は変更されない。表示してから残りを実行する。 - クリップ:その他の動くショット用。各クリップをフレームごとに確認:アクションが着地する位置(サウンドと人形をその位置に配置するため)と、製品上の小さなテキストがぼやける箇所を確認。
relabel --clip … --key keys/<shot>.png --box x,y,w,h(キーフレーム内のラベルのボックス)でラベルを修正するか、製品が動く前のフレームのみを使用する。すべてのショットにクリップが必要なわけではない:製品のクローズアップは、ゆっくりとしたプッシュイン(still、box、boxTo)の方が適している場合が多い。 - 小道具:
cutout --in keys/<shot>.png --box x,y,w,h --out props/<name>.pngを各人形(キャラクター、星、花、ベリー、手の中の製品)に対して実行。editは何かを削除した皿用(ゴーストのいないテレビ画面など)。ロゴ:wordmark --in still.jpg --box x,y,w,h --out props/wordmark.png。最後のカードの背景は、キーフレームの1つから切り取ったペンキの壁の部分。 effect.jsonの構築 -examples/example.json(ショットと最後のカードを参照)から作成し、node scripts/reel.mjs effect.json --out reel.mp4を実行、"reel": "reel.mp4"を設定。- サウンド:
node scripts/sfx.mjs effect.json --out stage.m4a、次に"music": "stage.m4a"を設定。タイミングを変更した後は毎回再実行。--no-bed --music track.mp3でワルツを、ユーザーが使用許可を持つトラックに置き換える。 - 検証:
node scripts/validate.mjs effect.json— すべてのエラーを修正し、警告をユーザーに読み上げる。 - ドラフト:
node scripts/render.mjs effect.json --quality draft --width 540 --out draft.mp4を実行し、各ショットから1フレームを確認:キャプション、タグ、人形が顔や製品にかかっていないこと、プラットフォームのボタンが表示される右側14%を避けていること。 - 最終版:
node scripts/render.mjs effect.json --out film.mp4 --poster poster.pngを実行。小紅書(Xiaohongshu)用には、3:4バージョンにクロップ:ffmpeg -i film.mp4 -vf crop=720:960:0:160 -c:a copy film-3x4.mp4(デフォルトの720幅の場合)。上下160ピクセルに重要なものが入っていないことを確認。
ショット
すべての位置は1080×1920フレームピクセル単位です。各ショットは次のいずれか:
- クリップショット:
clip(reel.mjsがカットするファイル)、fromとto(クリップ内の秒数)、speed(0.5 = 半分の速度。12ステップ再生で短い良い部分の全フレームを使用)、hold(最初のフレームが動く前に保持する秒数)。 - 静止画ショット:
still(画像)、len、boxとboxTo([x, y, width]9:16ウィンドウを画像ピクセル単位で指定。ビューが一方から他方へ移動)。
すべてのショットには以下を追加可能:
captions:{ "text", "at", "out", "x", "y", "rot", "size" }— 手書き文字が書かれた破れた紙片。\nで改行。tags:{ "text", "at", "x", "y", "to": [x, y], "ink": "dark" | "light", "rot", "size" }— 手書き文字と、toに向かって描かれる矢印。puppets:{ "image", "path": [[t, x, y, width, rotation], …], "sound", "exit", "flip", "wobble" }— キー間を移動する切り抜き(tはショット内の秒数、xとyは中心)。幅0のキーが現れ、次のステップで全幅になるのはポップイン。"exit": trueでなければ最後のキーを保持。soundは最初のキーで再生。screen:{ "rect": [x, y, w, h], "off", "static", "plate", "plateAt" }— テレビやスマホの画面。offまで黒、staticまで砂嵐、plateAtからplate(画面が空になった同じキーフレーム)を表示するので、人形が中から這い出せる。sounds:[[t, "kind"], …]—click、tvon、static、ghost、boing、tap、pop、whoosh、land、stab、sip、sparkle、chime、paper、scribble、cut。カット、キャプション、タグ、画面、soundを持つ人形は自動的に効果音が割り当てられます。
最後のカード
end:len、bg(9:16のペンキの壁)、wordmark(wordmarkY、wordmarkWidth)、name(nameY、nameSize)、line(lineY)、note(noteX、noteY、紙片に表示)、cta(ctaY、ピル型に表示)、そしてショットと同様のpuppets(端からスライドインする手の中の製品、キャラクター、星など)。各要素には…At時間があります。
フィールド
| フィールド | 必須 | 注意事項 |
|---|---|---|
reel | はい | ビデオファイルへのパス(JSONファイルからの相対パス)。すべてのクリップショットをscripts/reel.mjsで1つの無音9:16リール(reel.mp4)にカットしたもの。 |
shots | はい | 2~10エントリのリスト:clip、from、to、speed、hold、still、len — フィルムの順序:クリップショット(静止画のAIクリップ)と静止画ショット(ゆっくり移動する静止画)。詳細はSKILL.mdの「ショット」を参照。 |
end.bg | いいえ | 画像へのパス(JSONファイルからの相対パス) — 最後のカードの背景:写真から取ったペンキの壁や背景、9:16。 |
end.wordmark | いいえ | 画像へのパス(JSONファイルからの相対パス) — 透明背景のロゴ(scripts/generate.mjs wordmark)。 |
end.name | いいえ | テキスト、4単語未満 — 最後のカードに手書きされる製品名。 |
end.line | いいえ | テキスト、6単語未満 — 名前の下の短い一行(例:フレーバー)。 |
end.note | いいえ | テキスト、4単語未満 — 破れた紙片に表示(例:「ハロウィン限定」)。 |
end.cta | いいえ | テキスト、12単語未満。 |
music | いいえ | オーディオファイルへのパス(JSONファイルからの相対パス) — scripts/sfx.mjsからのサウンドトラック(stage.m4a)。 |
palette | いいえ | #RRGGBB形式の色。キー:ink(キャプションと暗いタグ)、paper(紙片と明るいタグ)、accent(CTAピル)。 |
ヒント
- クリップのプロンプトはタイトに:1つか2つの小さなアクション、無表情な顔、「カップは直立して静止、ラベルはカメラに向けて」。大きなジェスチャーは顔やラベルをぼやけさせる。
- Klingは独自のタイミングを選ぶ:アクションが着地する位置を確認し、クリック、カット、人形をそのフレームに配置する(丸い数字ではない)。
- ストーリーに1つの旅人を与える:ある写真から切り抜いた人形が次のショットに登場することで、7枚の静止画が1つのフィルムに結びつく。
- 人形は新しいアートではなく、写真自体から切り抜く:同じペンキ、紙、光が一体化させる。
- キャプションは3~4単語に抑える。絵がほとんどの情報を伝える。
出力
H.264 MP4、1080×1920、30fps(画像は毎秒12ステップで動く)、15~20秒(サウンド付き)、ポスターフレーム(PNG)付き。