Communitygithub.com

sohamthebuilder/finance-story

60秒の9:16アニメーションストーリーリールを生成します。金融・銀行・市場のアイデア(Sensex、Nifty、FPI、レポ金利、インフレ、EMI、IPOなど)を、漫画風のアナロジーワールドを通して、ElevenLabsの英語(インド英語)ナレーター、音楽、ソフトな効果音とともに説明します。すべてのフレームはRemotionとstory-animatorパイプラインでコード描画されます。プレゼンターは登場しません。

finance-story とは?

このスキルは、金融・経済の概念を60秒の縦型(9:16)アニメーション動画に変換するためのツールです。ユーザーが「金融リール」「マーケットニュース解説」「『Xとは何か』動画」などをリクエストした際に使用します。核心となるのは**story-animatorパイプライン**で、これに従って全体のストーリーテリング(8ビート形式)、ブランドガイドライン、SEBI安全ルールが適用されます。全てのフレームはReactベースのフレームワークRemotionを用いてコードで生成され、ElevenLabsのインド英語ナレーター(Rameez)が音声を担当し、BGMと3つのソフトな効果音が加わります。ワークフローは「提案(Gate 1)」と「制作(Gate 2)」の2段階に分かれており、ユーザーの確認なしにはクレジットが消費されない安全な設計です。事実確認は必ず複数のソースで行い、すべての数値と出典を`sources.md`に記録します。完成後は、InstagramとYouTube向けのキャプション、説明文も自動生成します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sohamthebuilder/insta-studio/tree/HEAD/examples/finance-unboring

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

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

ドキュメント

Finance Story

金融のアイデアを短いアニメーションストーリーで伝えます。1つの可愛いアナロジーワールド(例えば、黒板がSensexの得点板になっている教室)が説明全体を担います。ナレーターが語り、すべてのビートが話し言葉に合わせられます。これはstory-animatorパイプラインです。まず~/.claude/skills/story-animator/SKILL.mdとそのreferences/を読み、それに従ってください。このスキルは、その上にユーザーの金融リールに関する好みを追加するものです。

まずブランドガイドを読んでください。 /Users/sohambhattacharya/Documents/Personal/projects/story-animator/brand/BRAND.md を何かを書く前に読んでください。このガイドは、トーン(シンプルで人間味があり、emダッシュ、セミコロン、堅苦しい表現は使わない)、8ビートのストーリー構成、パレット、フォント、セーフゾーン、キャプション形式、そして**SEBI安全ルール(セクション7)**を定めています。このファイルと矛盾する場合は、ブランドガイドが優先されます。リールのテンプレート(カバー、フックカード、テキスト行、ビッグナンバー、実用用語カード、エンドカード)はbrand/studio/src/templates/reel.tsxにあります。該当するビートではこれらをコピーまたはインポートし、リールカバーはfinance-socialスキルを使ってレンダリングしてください。

承認済みの参考作品(2026-11-04、「これは良かった」)はexamples/sensex-classroom/(Film.tsx、story.ts、audio_cues.json)です。新しい作品を作る前にこれを読んでください。アナロジーワールド、得点板、ビーンのキャラクター、トークン、9:16のカメラ、クロージングカードが示されています。

ユーザーの好み(フィードバックからの抜粋)

  1. プレゼンターなし。ホストや画面下部で話すキャラクターは絶対に描かないでください。ユーザーは以前の「finance-reel」スタイルのプレゼンターとそのルール(Zaraの声、Hinglish、1画面1数字のミニマルな見た目)を廃止しました。明示的に要求されない限り、それらを復活させないでください。

  2. story-animatorの外観。柔らかくフラットな絵本スタイルの漫画ワールドで、可愛いキャラクター(丸いビーンボディ、Faceによる大きな目)、1つの暖かい光源、穏やかなカメラワーク、Patrick Handの字幕を使います。色でストーリーを語ります:良い時は暖色、憂鬱な時は灰色がかった青、転機で再び暖色になります。

  3. 作品全体で1つのアナロジーワールド。すべての概念をその世界の何かにマッピングします:

    • インデックスは壁の得点板や黒板で、実際の数字を表示;
    • 企業は生徒で、大企業は大きな生徒;
    • 外国マネー(FPI)は窓から飛び出したり戻ってくる紙飛行機;
    • 石油は机の上の樽で、値段が下がると小さくなる。 ストーリーの形を保ってください:導入 → 問題(何か憂鬱なこと) → 転機(「すると…2つのことが変わった」) → 結果(数字が跳ね上がる) → 1行の教訓。離れて戻ってくるトークンオブジェクトを1つ選びます(紙飛行機)。
  4. 言語と声: 英語のナレーション、声はRameez | Documentary Narrator(RG0hCuGFvl2jxhd4LmtU、インド英語アクセント)、モデルeleven_v4、2テイク。略語はドットで区切って(F.P.I.s)、数字は単語で書きます(「twelve hundred and twenty-five」)。ライトタグのみ使用:[excited]、[curious]、[warm, storytelling]、[softly]、[building]、[brightly]、[delighted]、[warmly]。両方のテイクを--model mediumで文字起こしし、すべての単語を正しく発音している方を採用してください。リール#1では、テイクBが「investors」ではなく「industries」と発音していました。

  5. 形と長さ: 9:16、60秒(durationFrames: 1800)。Rameezは約2.7語/秒で話します:132語で49.5秒でした。そのため、60秒を声で満たすには約150~155語を書いてください。そうしないと、最後の約10秒は音楽に乗せた応援とクロージングカードになり、ユーザーはそれを承認しました。

  6. 正直な数字。 すべての数値をウェブ検索でファクトチェックしてください(市場データはmode extended、2つ以上のソース)。実際の数値(インデックスの終値、変動ポイント)を得点板に表示し、ソース間で一致しない数値は表示しないでください(リール#1ではブレント価格)。ソースをリンク付きでユーザーにリストしてください。市場データ(Sensex、Nifty、株価)は最近でも古くても構いませんが、必ず2つ以上のソースで検証し、正確な日付を添える必要があります(2026-11-05にユーザーがルール変更)。経済指標(レポ金利、CPI、GDP)は、日付付きの最新の公式数値を使用してください。すべての数値をリールフォルダ内のsources.mdに保存します(BRAND.md 7.3)。

  7. クロージングカード(最後の約7秒):概念を1行で(「Sensex:インドのトップ30社のクラス平均」)、関連するワンライナー、次に「教育目的のみ。投資助言ではありません。」と、日付付きの数値/ソース行。実際の企業ロゴは使用禁止。

  8. サウンド: 音楽+3つの控えめな効果音(柔らかな紙飛行機のスウィッシュ、軽いコインのカスケード、明るく柔らかなチャイム)、それぞれキーワードの直後に配置。音楽:eleven_music_v2_5、1テイク、遊び心あふれるピチカートとマリンバ、ストーリーに沿った弧を描く(憂鬱な部分では落ち込み、転機で盛り上がり、結果で喜びの高まり)。ミキシングは音楽gain_db約**−3.5**、sfx_bus_db−13。これにより、Rameezの下で背景は16.8 dBになりました。−9では22 dBで小さすぎました。

  9. 保存&共有で締める(毎回)。 ナレーターの最後の行で、視聴者にリールが役に立ったら保存して共有するよう促し、finance.unboringの名前を出します。トピックに合わせて調整します。例:「役に立ちましたか?次に誰かが『Sensexが上がった』と言った時のために保存して、まだ理解していない友達と共有してください。financeドットunboringをフォローしてください。」ナレーションではハンドルを「finance dot unboring」と書き、正しく発音されるようにし、クロージングカードでは概念行の下、免責事項の上に**@finance.unboring**と書きます。この行を約150語の予算に含めてください。

  10. デザインされたカバー(毎回、2026-11-07のルール)。 リールのフレームをカバーに使わないでください。フレームはフィードで見栄えが悪く、開く理由になりません。すべてのリールには、独自の1080×1920カバーが付属し、(a) トピックを記載し、(b) リールが本当に答える質問やギャップで視聴者の好奇心をそそり、(c) Miniのリアクションと、このトピック用に描かれたグラフィックを表示します。ゴールドワード1つ、ヘッドラインは最大5単語、すべて3:4の中央領域内に収めます(BRAND.md 5.1)。

ワークフロー:2つのゲート、承認前は費用をかけない

ユーザーが入力を提供します:教えるコンセプト、フックアイデア、ストーリーアングル(オプションでニュース項目)。

ゲート1:提案(1メッセージ、クレジット消費なし)

  1. すべての数値をファクトチェック(WebSearch extended、2つ以上のソース)。
  2. ユーザーが確認するための4つのパートを含む1つのメッセージを送信します:
    • スクリプト: 3文での概要、トークン、全文ナレーション(約150語)。ナレーションは保存&共有のライン(下記ルール9)で終わります。
    • 音声: 提案する音声(デフォルトはRameez、RG0hCuGFvl2jxhd4LmtU)と、creative_list_voicesからの無料preview_url、さらにトピックが異なる雰囲気を示唆する場合の1~2の代替案とプレビューリンク。
    • ストーリーボード: ビートテーブル(# / ナレーション行 / 見えるもの / カメラ)、クロージングカードを含む。
    • カバー: トピックタグ、好奇心をそそるヘッドライン(ゴールドワードをマーク)、Miniとアートが何をしているか。 また、ソースとコスト(ナレーション約1,800クレジット(2テイク)、音楽900、効果音各約17、合計約2,750)もリストします。
  3. 停止して待ちます。 ユーザーが4つすべてを確認するまで、クレジットを使わず、何もレンダリングしないでください。ユーザーが何かを変更した場合は、修正したパートを送り返し、再度待ちます。

ゲート2:制作(ユーザー確認後)

  1. プロジェクト: cp -R ~/.claude/skills/story-animator/template ./<slug> を他のプロジェクトの隣に配置し、npm installを実行し、既存のfaster-whisper venvを再利用するか(ln -s ../sensex-class-average/.venv .venv)、新しく作成します。SHAPES["9:16"]を設定します。
  2. 音声 → タイミング → story.ts (SUBS、CUES、CAM)、story-animatorのステップ4~5に従います。
  3. 描画: アナロジーが合う場合はexamples/sensex-classroom/Film.tsxから始め、その部品(Room、WindowPane、SunShaft、Board、Bean、Desk、Plane + arcAt、Confetti、Card)を再利用します。そうでなければ、同じスタイルで新しい世界を構築します。
  4. 各ビートでコンタクトシートを作成し、修正します:
    • 9:16では、被写体を字幕の上に保ちます。 ワイドショットのカメラcyは、ワールドy 478~790の行で約560でした。cy 520では字幕が最前列に重なりました。
    • フレームの半分を空のままにしないでください。 黒板のアップでは、その下にキャラクターが見えるようにします(彼らは常に画面に表示され、キューで「こんにちは」とバウンドし、突然現れたりしません)。
    • 9:16での可視ワールドは約607/z × 1080/zです。「50人分」の瞬間には、z ≈ 0.58まで引き離します。
  5. カバー: リールプロジェクト独自のワールドとキャラクターで描くか、brand/studio/src/templates/reel.tsxのReelCoverを新しいアートで拡張します。out/cover.pngにレンダリングします。3:4のクロップと小さな電話フィードサイズ(約360 px幅)を確認します。トピックとヘッドラインがまだ読める必要があります。
  6. サウンド → ミックス → レンダリング → ffprobe (1080×1920、h264 + aac、60秒)。リールとカバーを送信します。音声、消費クレジット、測定内容、ソースを報告します。ユーザーに一度視聴するよう依頼します。

出力後:説明文(常に、同じ配信メッセージ内で)

リールは**@finance.unboring**からInstagram(リール)とYouTube(ショート)に投稿されます。完成したリールごとに、コードブロック内にコピー&ペースト可能なテキストを提供します:

  • Instagramのキャプション: フックライン;3~5行の短い説明文;保存&共有+@finance.unboringをフォローする行;「データ:<ソース、日付>。教育目的のみ。投資助言ではありません。」;3~5個のハッシュタグ(#financeunboringを含む)(Instagramの投稿は5つまで)。BRAND.mdのセクション6の正確なテンプレートに従ってください。
  • YouTubeショートのタイトル: 70文字未満、最後に#Shorts。
  • YouTubeの説明: 2~3行の説明文、@finance.unboringをフォロー、ソース、免責事項、4~6個のハッシュタグ。

関連スキル