Meadow Slides
Meadowのルック&フィールでデッキを作成します。小さなJSON仕様からスクリプトで生成されるため、すべてのスライドがMeadowの営業用デッキと同じグリッド、タイプスケール、カラーに配置されます。コンテンツを作成し、レイアウトを選択すれば、スクリプトがピクセル単位の処理を行い、コピーが収まらない場合に警告します。
scripts/meadow_deck.py spec.json -> .pptx (+ --figma-json layout for Figma)
scripts/preview.py .pptx -> PNG per slide + contact sheet (LibreOffice or Keynote)
scripts/figma_render.js draws one slide of the layout dump through use_figma
scripts/install_fonts.sh installs Geist / Geist Mono / Syne for the current user
references/layouts.md すべてのレイアウト、そのフィールド、および使用タイミング <- specを書く前に読むこと
references/design-system.md レイアウトの背後にあるトークンとルール <- レイアウトから外れる場合に読むこと
references/image-prompts.md デッキの画像用プロンプトライブラリ <- デッキに新しい画像が必要な場合に読むこと
references/figma.md Figma出力のレシピとその落とし穴 <- Figmaが必要な場合のみ読むこと
examples/sample-deck.json 主要レイアウトをカバーする6枚のスライドデッキ(架空データ)
examples/skill-intro-deck.json このスキルを紹介するデッキ(README画像)
ワークフロー
- まずコンテンツを入手する。 各スライドのメッセージを質問する(または、ブリーフィング / 既存デッキ / ドキュメントから抽出する)。ユーザーがソースデッキをリレイアウト用に渡した場合は、そのコピーを一字一句そのまま維持する。変更を依頼された部分のみを変更し、カットや新しい見出しの提案は別途行う。ユーザーは、自分のテキストが無言で書き換えられることに気づくものである。
- アウトラインを作成する。 1スライドにつき1つのアイデア。各スライドを
references/layouts.mdのレイアウトにマッピングする(カバー → コンテンツスライド → コンタクトが一般的な流れ)。デッキが約6枚を超える場合やブリーフィングが曖昧な場合は、ユーザーにアウトラインを提示する。それ以外の場合は、すぐに構築に進む。 - 数値を確認する。 商用デッキは予算、CPM/CPV、ビュー数に依存する。派生数値(CPM = 予算 / ビュー数 × 1000、合計、パーセンテージ)は、タイプセットの前に再計算する。それらが合わない場合でも、ユーザーが与えた数値をタイプセットし、どの数値がどれだけ矛盾しているかをユーザーに伝える。クライアントも同じ計算を行う。
- specを作成する (
deck.json)。例とreferences/layouts.mdを参照すること。画像は、バンドルされている短い名前(wave-05、meadow-night-02、people-02-camera-blue)またはパスで指定する。 - ビルドする:
python3 scripts/meadow_deck.py deck.json -o deck.pptx。すべてのWARNをバグとして扱う。コピーを短くする、スライドを分割する、またはレイアウトを変更して、再ビルドする。WARN行は、テキストのオーバーフロー、Syne で設定されたキリル文字(Syne にキリルグリフがない場合)、スライド上の複数のアクセントプレート、およびすべてのビルドで実行されるアライメントゲートをカバーする。- ピル、チップ、ボタン、バッジ内でテキストが光学的に中央揃えになっていない(インクパディング左右、キャップハイト上下が1.5px以内で一致する必要がある)。
- コンテンツが96pxのサイドマージンを超えている(画像がスライドからはみ出すのは問題ない)。
- エッジがほぼ揃っているが1〜4px離れている:スナップするか、明確に離す。
- 同じサイズのカードの行またはスタック内のギャップが不均一。
新しいピル型の要素は、
Slide.pill()を介してサイズ設定と中央揃えが行われる。他のテキストにインラインで続くテキスト(数字の後のアイコン、単位、バッジ)は、flow=Trueで構築され、収まりがチェックされるが、グリッドには拘束されない。
- 確認する。 最も速く、どこでも動作する方法:ビルドに
--png preview/を追加する。Pillow で同じレイアウトを描画し、Keynote と同じ方法でテキストを測定する。Mac でPPTXがフォントを正しく取得しているか確認するには、qlmanage -t -s 1600 -o preview/ deck.pptxでシステム経由でスライド1をレンダリングする(アプリは開かない)。python3 scripts/preview.py deck.pptxは LibreOffice を使用し、最後の手段として Keynote を使用する:Keynote スクリプトはハングし、ユーザーの画面にダイアログを残す可能性があるため、ループ内でリトライしない。contact-sheet.pngと個々のスライドを開く。配置、混み具合、写真上のコントラスト、空のハーフカード、フッターとの干渉を確認する。Office レンダリングにはフォントのインストールが必要(scripts/install_fonts.sh)。 - 納品する .pptx ファイル。受信者にはフォント(
assets/fonts、すべてOFLの下で無料)が必要であること、または--portableビルドを使用するべきであることを伝える(以下参照)。 - Figma(オプション) 依頼があった場合:
references/figma.mdに従う。依頼がない限り、誰かのFigmaファイルに書き込まない。
Meadowの見た目にするためのルール
これらは、人々が最初に確認するルールです。レイアウトはすでにこれらを適用しているため、主にコピーを作成したりレイアウトを変更したりする場合に重要です。
- 暗いキャンバス、1つのライムプレート。 背景 #0E1013、カード #1A1D21、内部行 #23262B。ライム #D3FF31 は、スライドが伝える 1つの こと(オファー、結果、重要なコールアウト)を示します。スライドに2つのライムプレートがあると、階層が平坦になります。アクセントが必要だからといって、ランダムなカードをライムに塗らないでください。スライドにアクセントがなくても構いません。ライム上のテキストはニアブラックであり、白であってはなりません。
- フォント。 ラテン文字で書かれた見出しは Syne で設定されます(ロシア語のデッキ内であっても、カバーの「Meadow Slides」のような製品名は Syne)。キリル文字を含む見出しは Geist です。Syne にはキリル文字がないためです。スクリプトは見出しごとに(カバー、セクション、ステートメント、スライド、コンタクトタイトル)判断するため、設定したい言語でタイトルを記述してください。本文は常に Geist、ラベルは Geist Mono の大文字、独立した数字/KPIは Syne(約36pxから)。
- グリッド。 96px マージン、上部にヘッダー(モノアイブロウ + 64px タイトル)、コンテンツは y=264 から y=944 の間、フッター = ロゴ +
NN / NN。ギャップ 24、カード半径 24、パディング 40。 - サーフェスで表現し、ストロークで表現しない。 カードは塗りつぶしで区切られ、輪郭線では区切られません。輪郭線のある唯一の要素はカテゴリチップ(1px 白 18%)です。
- コピーに競合他社名を含めない。 クライアントのロゴや推薦文は、ユーザーが提供した場合のみ使用します。
- タイポグラフィ: スクリプトは短い前置詞/接続詞とダッシュをNBSPで接着し、行が「в」「и」「—」で終わらないようにします。ロシア語デッキでは、数字を
10 000+、$5 000、1,5 млнのように記述します。 - チャート: ライム上の無地のダークバー、またはダーク上のライム、ゼロベースライン、データに比例した高さ。ライム上の半透明の黒は濁って見えるため、使用しないでください。
画像
バンドルされているもの:6つの抽象的な青/ライムの波(wave-01…06)、3つの夜の草原(meadow-night-01…03)、4つのライフスタイル人物写真(people-…)、および白のプラットフォームグリフ(instagram、tiktok、youtube、vk、telegram、x、linkedin、twitch)。波はカバーとセクションブレイクに、草原はコンタクトとクロージングスライドに、人物写真はコンタクトと画像テキストスライドに適しています。
デッキに新しいものが必要な場合(コンテンツファクトリーフロアのようなテーマ別カバー、ケーススタディのシーンなど)、references/image-prompts.md からプロンプトを作成します:ハウススタイルのプレフィックス + シーン + それが埋めるスロットの構図に関する注記。画像生成ツールが接続されている場合(例:Magnific MCP images_generate)、生成を提案します。それ以外の場合は、プロンプトを提供し、返されたファイルをパスでspecに組み込みます。
出力バリアント
--portable:すべてのウェイトを同じファミリーのRegular/Boldにマッピングします。Google スライドへのインポートや、フォントをインストールできない受信者向けに使用します。階層は維持されますが、ニュアンスは失われます。--figma-json layout.json:計算されたレイアウトをFigmaレンダラーにダンプします。- スピーカーノート:任意のスライドに
"notes"を追加します。これらはPPTXの隣にdeck-notes.mdとして出力されます。なぜなら、Keynote は python-pptx で書かれたノートスライドを含むPPTXを開くことを拒否するためです。--embed-notesを使用すると、PowerPointでのみ開かれるデッキのために、ノートをPPTX内部に埋め込みます。 - PDF:
--pdf deck.pdfを追加します(すべてのスライドのフル1920×1080レンダリング、テキストは選択不可)。誰かが送信または閲覧用にPDFを要求した場合に使用します。Keynote や LibreOffice は必要ありません。
レイアウトが合わない場合
コンテンツを詰め込むよりも、2つのスライドに分割することを優先します。スライドが本当に新しい配置を必要とする場合は、同じヘルパー(header、card、grid、bullets、kpi_tile、footer)とトークンから構築された layout_<name> 関数を scripts/meadow_deck.py に追加し、システムを継承させます。その前に references/design-system.md を読んでください。