Communitygithub.com

Sticky Director — AI映画監督プレイブック

Sticky Character Studioを直接操作 — ローカルの写真(例:Google Flow)と音楽から、無音の感情的なショートフィルム(孤独、社会不安、燃え尽き症候群、規律)を制作、編集、プレビュー、書き出しします。ユーザーがStickyフーディーキャラクターの動画、ストーリーボード、またはサイレントフィルムの作成・編集・プレビュー・レンダリングを依頼したときに使用してください。

Sticky Director — AI映画監督プレイブック とは?

Sticky Directorは、アニメーションと無声映画のためのローカルエンジンです。リグされた黒いシルエットのキャラクター(グレーのフーディー着用)が、ユーザーが提供した写真や音楽の前で、カメラワークやキャプションとともに演技します。このツールはMCPツール(`.mcp.json`で`sticky-studio`を登録)またはCLI(`node cli.js`)を通じて操作でき、どちらも自動的に`server.js`を起動して、ヘッドレスChrome上でスタジオを開きます。 主な機能:写真の読み込み、音楽の分析(BPM・ビート検出)、テンプレート(孤独な3AM、社会不安、燃え尽き症候群、規律)の適用、シーンの設定・更新、感情(10種類)やジェスチャー(18種類)、カメラエフェクト(Ken Burns、前景オーバーレイ)、アンビエントベッド(雨、風、心拍など)の制御が可能です。`sticky_get_project`でプロジェクト全体を取得し、`sticky_set_project`でストーリーボードを一括適用できます。出力は60fpsのH.264+AACのMP4動画です。 このスキルは、ユーザーの写真と音楽から感情的なアーク(例:孤立→限界→解放→希望)を構築し、各シーンにジェスチャー、感情、移行効果、サブタイトルを割り当てることで、プロフェッショナルなサイレントショートフィルムを生成します。最終的な動画は`sticky_export_mp4`で書き出し、品質確認のために`sticky_render_frame`で任意のフレームをPNGとしてレンダリングできます。

対応~Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/sijanpaudel6-hash/stickyman/tree/HEAD/.agent/skills/sticky-director

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

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

ドキュメント

Sticky Director — AI映画監督プレイブック は何をしますか?

このリポジトリは、ローカルアニメーション&無声映画エンジンです。リグされた黒いシルエットのキャラクター(グレーのフーディー着用)が、写真(例:Google Flow画像)の前で演技し、音楽、環境音、カメラワーク、キャプションが付きます。MCPツール(.mcp.json で sticky-studio → node mcp-server.js を登録)または CLI(node cli.js …)を通じてディレクションします。どちらも自動的に server.js を起動し、キャンバス操作でスタジオが開きます(ディスプレイがない場合はヘッドレスChromium)。

必ず絶対ファイルパスを渡してください。以下のすべてのIDは検証されます。未知の値は warnings として返され、適用されません。必ず警告を確認してください。

Antigravity からの実行: sticky-studio MCPツールが利用できない場合は、リポジトリルートからCLIを使用してください。すべてのMCPツールにはCLIの双子(下記テーブル)があり、node cli.js snapshot <t> <abs.png> でPNGを書き出し、それをビジョンで開けます。すべてのコマンドは自動的にスタジオサーバーを起動します。


ツール (MCP) ↔ CLI

MCPツールCLI機能
sticky_statusnode cli.js statusモード、アスペクト比、尺、BPM/拍数、接続タブ、シーン一覧を表示
sticky_get_projectnode cli.js get-project [out.json]フラットなエージェント形式でプロジェクト全体を取得(シーン、fxMarkers、mediaCards、audio.beats/strongBeats、背景 + lightProfile)
sticky_load_audionode cli.js load-audio <path> --mode silent音楽/ナレーションを読み込み → {duration, bpm, beats[], strongBeats[]} を返す
sticky_import_photosnode cli.js import-photos <p1> <p2> … [--auto-build]写真を登録 → [{bgId, name, path, width, height, lightProfile}] を返す
sticky_apply_templatenode cli.js template <id> [--no-photos]音声と写真にフィットした無声映画のストーリーボードを読み込む
sticky_set_project`node cli.js set-project <file.json'{…}'>`
sticky_update_scene`node cli.js update-scene <indexid> '{…}'`
sticky_split_scenenode cli.js split <timeSec> [--no-snap]指定時刻で分割(最も近いビートにスナップ:±0.35秒)
sticky_add_fxnode cli.js add-fx <type> <timeSec> [--duration s]カメラパンチ / SFX / card を追加
sticky_render_framenode cli.js snapshot <timeSec> [out.png]正確なフレームをPNGで出力(MCPでは画像としても返す)
sticky_export_mp4node cli.js exportリアルタイムレンダリング → exports/sticky_video_*.mp4(60 fps H.264 + AAC)

get_status、get_project、set_project、update_scene は スタジオタブが開いていなくても動作します。projects/live_state.json を読み書きし、スタジオが接続時にそれを読み込みます。


リファレンスID

感情 (10種類)

ID用途
neutralデフォルト、穏やか
happy温かみ、安堵、小さな成功
tired午前3時、燃え尽き、疲労
crying悲嘆、崩壊(silentMouth: quiver と組み合わせる)
angryフラストレーション
shockedパニック、気づき
skeptical疑問、横目
confused「?」な瞬間
excitedハイテンション(星の目)
deadpan虚無感、無感覚

ジェスチャー (18種類) — gesture

ID説明最適なビュー
pocketフーディーのポケットに手を入れる(デフォルトのくつろぎスタイル)any
idleリラックスした腕(歩くときに振る)any
talking音声に反応するハンドビート(ナレーション時)front
explain両手のひらを広げるfront
point_screen横を指す(メディアカードに向かって)front
point_viewerカメラを指すfront / 3/4
crossed腕を組むfront
facepalm手で顔を覆うfront
hands_head両手を頭に(パニック)front
shrug肩をすくめる、手のひらを上にfront
wave手を振る挨拶front
typing机に座ってタイピング(机とスツールが描画される)自動 3/4–サイド
slouch_lonely深く前かがみ、頭を垂れ、ゆっくりとした重い呼吸front / 3/4
heavy_sigh4.5秒のサイクル:吸気 → ホールド → 崩れる(自動呼吸フォーリー)front / 3/4
check_phone_dark光るスマホを保持;顔とフーディーに青色の光の円錐front / 3/4
sit_curb_hug_knees地面に座って膝を抱え、頭を下げる自動 3/4
look_back_horizon立ち、景色を見つめ、風がフーディーをなびかせるback / 3/4
pull_hood_upアクション:後ろに手を回してフードをかぶる(シーン開始から約2.3秒)front

ボディ & ポーズのキー

キー値
poserig(関節あり、デフォルト)・v1スプライト:front, bust, side, back
viewfront, threeQuarter, side, back
hoodUptrue / false(フードはすべてのビューに描画;背面ビューはデフォルトでアップ)
walkSpeed0 静止 ・ 0.1–1.0 歩行 ・ 1.1–2.5 ジョギング → 全力疾走
walkDirleft, right
walkInPlacetrue(その場で歩く)/ false(フレーム内を移動、画面外に出ると反対側から出現)
wind0..1(裾、ドローストリング、フード)
silentMouthclosed(デフォルト)・ sigh ・ quiver(泣く/不安)
handLeft, handRightauto, relaxed, open_palm, pointing, fist, holding_prop, in_pocket
propnone, phone, mug, mic, controller, book
spineLean, headTilt, headNod度(≈ −25〜25;headNod + は下を向く)
ikPins`{ rightHand
x, y, scale, flipX位置 0..1(x 0.5 = 中央;y ≈ 0.55 = 下3分の1に立つ)、サイズ(1 = デフォルト)、ミラー
motionbreathe(サイレント時のデフォルト)、talk_bounce、walk、shake(震え)、float、none
emotion上のテーブルを参照

背景 — background

ビルトイン:paper_sketch、cozy_night、rainy_window、streetlight(真夜中の街灯)、classroom(夕日の机)、dark_spotlight、rooftop_dusk、green_screen。 写真:sticky_import_photos が返す bgId を使用するか、または絶対パスの写真パスを background に直接入れても構いません(自動でインポートされます)。

写真カメラ & 深度

キー値
kenBurnsnone、push_in、pull_out、drift_left、drift_right、breathing(写真は100%、キャラクターは30%動く → パララックス)
foregroundnone、bokeh、rain_streaks、window_reflection
camerastatic、zoom_in、zoom_out、pan_right、handheld(kenBurns の上に適用)
atmospheredust(音楽のビートで光る)、rain、none
dutchScene / spotlightSceneシーン全体の傾いた地平線 / 背景が60%暗くなる

ライトマッチ(写真調和) — lightMatch

true = 推奨(tint 0.35, rim 0.55, exposure 0.5)・ false = オフ ・ 数値 0..1 = 全体の強さ ・ または { tint, rim, exposure, side }。side は auto(写真から自動) | left | right | back(逆光、両エッジ)。 すべての写真シーンで true を使用してください。 夕日や逆光の地平線では rim(0.7–0.9)を上げ、look_back_horizon では side: "back" を使用します。

トランジション(シーンの入り方) — transitionType、transitionDur(0–2秒)

cut ・ dissolve(両方のショットをライブでレンダリングしブレンド) ・ fade_black(時間経過、孤独) ・ fade_white(フラッシュバック、気づき、希望)。シーン0で dissolve または fade_black を使うと、黒からフェードインします。fadeOutEnd: true で映画の最後を黒にフェードアウトします。

アンビエントBGM(連続、シーンごと) — ambientBed、ambientVol 0..1

IDムード
none—
rain_window柔らかな雨 + 遠くの雷(足音も濡れた感じに)
night_wind孤独な真夜中の風
vinyl_crackle温かみのあるローファイノイズ
clock_ticking60BPMの残響のあるチクタク:午前3時、不眠、虚無感
heartbeat深くこもった心拍:不安、パニック
crowd_muffleローパスされたざわめき:人混みの中の孤独

FXマーカー — sticky_add_fx / fxMarkers: [{type, timeSec, …}]

  • カメラパンチ: snap_zoom(1.0→1.25倍、顔にバネのようにズーム)、dutch_tilt、shake、spotlight(+ duration、intensity 0..3、dir ±1(ダッチ用))
  • SFX / フォーリー (10種類): whoosh、pop、vine_boom、record_scratch、shutter、typing、footstep_wet、heavy_sigh_breath、phone_vibrate、door_close_echo(+ volume)
  • シーンには transitionSfx(カット時に再生されるSFX)と foley: true(各かかと着地時に自動で足音 + ため息呼吸;サイレントモードではデフォルトでオン)も設定可能
  • メディアカード: type: "card" で、card: {kind: image|meme|post|note, text, imagePath, side: auto|left|right, hold, size}

プロジェクトレベルのキー(sticky_set_project)

キー値
modesilent(音楽のみ、口は決してリップシンクしない)・ voiceover
aspectRatio16:9 ・ 16:9-letterbox(2.35:1シネマバー) ・ 9:16(Shorts / Reels / TikTok、720×1280)
fadeOutEndtrue または秒数
masterAmbientVol0..1
captionStylecinematic(無声映画のセリフ体)、pop、karaoke、classic、off、または `{mode, highlight, position: bottom
snapToBeatsデフォルト true:カットは最も近いビートにスナップ
scenesフラットなシーンオブジェクト。タイミング:すべてのシーンに start/end を与えるか、どちらも与えずに duration / weight(音楽に合わせて分散)を使用
fxMarkers上記参照
mediaCards`[{sceneIndex

テンプレート — sticky_apply_template

loneliness_3am(暗闇でスマホ → フードをかぶった雨の散歩 → 縁石にひざを抱えて座る → 夜明けの地平線) ・ social_anxiety(隅で前かがみ + 群衆のつぶやき → 心拍でパニック → 外に出て風に当たる → 安堵のため息) ・ burnout(机でタイピング → 時計で虚ろなまなざし → 黒にフェード → 雨の散歩) ・ discipline(疲れた起床 → フードをかぶる → 1.2倍ジョギング → 2.0倍で日の出へ全力疾走)。


ディレクションワークフロー

  1. 見て、聴く。 ユーザーの写真をビジョンで確認し(画像ファイルを読む)、感情のアーク(例:孤立 → 限界点 → 解放 → 希望)を決定します。sticky_load_audio {path, mode: "silent"} で音楽を読み込み、duration、bpm、strongBeats(最適なカットポイント)に注意します。
  2. 写真をインポートしてマッピングする。 ストーリー順に sticky_import_photos {paths: [...]} を実行します。各 lightProfile(tone 暖かい/冷たい、brightness、lightFrom)を使用してビートを選択します。暗く冷たい部屋は check_phone_dark / slouch_lonely + clock_ticking に適しています。雨の通りはフードをかぶった pocket の散歩 + rain_window + rain_streaks に適しています。夕日とスカイラインは look_back_horizon(背面ビュー、lightMatch {rim: 0.8, side: "back"})+ night_wind に適しています。
  3. ストーリーボードを構築する。 1回の sticky_set_project 呼び出しで:mode: "silent"、captionStyle: "cinematic"、fadeOutEnd: true、そして写真ごとに1シーン。各シーンに background(パスまたはbgId)、gesture、emotion、view、hoodUp、kenBurns、lightMatch: true、ambientBed、transitionType(最初のシーンは fade_black、ほとんどは dissolve 1.0–1.5秒、時間の飛躍には fade_black、希望への転換には fade_white)、短い詩的な subtitle(8語以下、または空)、そして weight を強調のために設定します。いくつかの fxMarkers(phone_vibrate、door_close_echo、感情のピークに snap_zoom)を追加します。結果の warnings を確認します。
  4. 視覚的に検査する。 2~3の重要なタイミングで sticky_render_frame を実行:最初のシーン内(フェード後、約1.5秒)、映画の中盤、クライマックスで。キャラクターが完全にフレーム内に収まり地面に立っていること(y、scale、x を調整)、リムと色合いが写真に合っていること(lightMatch を調整)、キャプションが読めてカードに隠れていないこと、顔がカードで隠れていないことを確認します。sticky_update_scene で修正し、再レンダリングします。
  5. 書き出す。 ユーザーの準備ができたら sticky_export_mp4 で書き出します。所要時間は映画の長さ+エンコード時間程度です。mp4Path を報告します。

感情的な無声短編のためのテイストガイド

  • ショットは少なめで長めに(4~8秒)。strongBeats でカットします。heavy_sigh と slouch_lonely は少なくとも1サイクル以上(≥ 4.5秒)の余裕を持たせます。
  • hoodUp: true = 引きこもり / 雨 / 不安;フードを下ろす = 開放感、安堵。
  • walkSpeed は憂鬱な散歩には 0.4–0.6、決然としたジョギングには 1.2、クライマックスの全力疾走には 2.0+ のみ使用します。
  • 感情と口をペアにします:crying + quiver、tired + sigh。サイレントモードでは決して talking を使用しません。
  • シーンごとに1つのアンビエントベッドを 0.4–0.8 の音量で使用します。カットに合わせてベッドを変更し、新しい場所を示します。
  • 9:16 の場合は、x ≈ 0.5、scale 0.9–1.1 を維持します。キャプションとカードは自動的に位置が調整されます。

ストーリーボードの例

{
  "mode": "silent", "aspectRatio": "16:9-letterbox", "captionStyle": "cinematic", "fadeOutEnd": true,
  "scenes": [
    { "title": "3 AM", "background": "/abs/photos/bedroom.jpg", "gesture": "check_phone_dark", "emotion": "tired",
      "kenBurns": "push_in", "lightMatch": true, "ambientBed": "clock_ticking", "transitionType": "fade_black", "transitionDur": 1.2, "subtitle": "3:07 AM." },
    { "title": "雨の散歩", "background": "/abs/photos/street.jpg", "gesture": "pocket", "view": "threeQuarter", "hoodUp": true,
      "walkSpeed": 0.55, "walkInPlace": false, "x": 0.25, "foreground": "rain_streaks", "ambientBed": "rain_window",
      "lightMatch": true, "transitionType": "dissolve", "transitionDur": 1.2, "weight": 1.2 },
    { "title": "夜明け", "background": "/abs/photos/sunset.jpg", "gesture": "look_back_horizon", "view": "back", "wind": 0.6,
      "lightMatch": { "rim": 0.8, "side": "back" }, "kenBurns": "pull_out", "ambientBed": "night_wind",
      "transitionType": "fade_white", "subtitle": "それでも太陽は昇ってきた。" }
  ],
  "fxMarkers": [ { "type": "phone_vibrate", "timeSec": 0.8 } ]
}

関連スキル