Launch kit — リリースと共にメディアを出荷する
あなたはリリースのメディアを制作しているのであって、動画を制作しているわけではありません。出荷される機能のワンテイクが、リリースに必要なすべてのアセットになります。それは宛先ごとに構成、サイズ調整、検証され、編集可能なドキュメントとして保持されるため、次のリリースは再撮影ではなく再レンダリングで済みます。すべてはデータです。プレビューはレンダリングそのものです。4Kまでのすべての解像度で無料でエクスポートでき、透かしは入りません。エンジンはMITライセンスです。
このキットは、vos deliverという1つの動詞でレンダリングされます。その元となるドキュメントには、作品のテイストが込められています。すべてのカードは「ポスター」ドキュメントのフレームです(プレーンなテイクであり、そのカードがポスターの意図する位置に配置され、単語とマークがクリップとして配置されています)。すべてのカットは、vos planがそのドキュメントに提案したモーション(エントランス、エンドカード、キャプション、BGM)を再生します。静止画の瞬間はストーリーから生まれ、2人の検証者が言葉で問題点を指摘します。deliverが何かを合成することはありません。あなたの判断は、3つのファイル(BRAND.md、LAUNCH.md、actions.json)、1つの選択(カードが従うポスターを、棚からどれにするか)、そして1つの決定(どの瞬間がストーリーか)にのみ注がれ、手動での切り抜きには決して使いません。
セットアップ
npm i -D @vosjs/cli # vos CLI (テイクパイプライン含む)
```\n`ffmpeg` がPATH上にあると、CLIが出力しないもの(Product HuntのホバーGIF)をカバーし、`vos validate --picture` が動画の最初と最後のフレームを読み取れるようになります。MP4レンダリングにはシステムのChromeが必要です(`--format mp4`)。
## 1. リリースを確立する
録画を始める前に、以下の5つの事実を確定させます。
- **何が出荷されたか** — 機能、バージョン文字列、それが動作するURL。
- **どの宛先か** — チャンネルごとのスペック表はデータとして出荷されます。
`node_modules/@vosjs/cli/schema/channel-specs.json` を参照します(CWS、Product Hunt、
X、LinkedIn、GitHub、OG、YouTube。サイズ、数、バイト数と時間の上限、
ワードポリシー、宛先ごとの安全な矩形領域、そして各画像のジャンル
`screenshot` は実際のページ、`card` はポスタードキュメントのフレームです。
`references/channel-specs.md` は同じデータを表形式で示しています)。
**これをループ処理し、手動で寸法を入力しないでください。** このリリースがどのチャンネルに出荷されるかを尋ねます。デフォルトは前回のリリースのセットです。JSONには `verified` 日付が含まれています。四半期以上経過している場合は、出荷前にチャンネルのドキュメントをスポットチェックしてください。
- **ブランド** — アセットを作成する前に解決します。決してレイアウトのパレットをデフォルトにしないでください。プロジェクトフォルダの `BRAND.md` がブランドキットです(フロントマターにカラーロール `bgA bgB bgC ink accent`、
フォントロール `fontDisplay fontBody`、`logoUrl`(タイル状のアイコンではなく、ベアマーク)、`wordmark`、そして `look` を含みます。これはプレゼンテーションであり、サイト自身の基盤が求めるものです。
ペーパーサイトなら `plate`、ダークサイトなら `dark`、それ以外は `gradient`)。
ない場合は、`vos brand <url>` がサイトの `/design.md`、`/llms.txt`、そしてページ自体からそれを目撃し、すべてのロールとその出典を書き出します。それを読み、ページが言えないことを修正し、`vos recipe push BRAND.md --folder <slug>` で保存します。テイクの横(またはテイクの親フォルダ)に配置します。`plan` と `deliver` はフラグなしでそこを読みます。
- **ワード** — テイクの横にある `LAUNCH.md` が、リリースのロールをフロントマターに持ちます。フラグなしで読み取られます。
```yaml
headline: "2〜6語を\n最大3行で" # ポスターとエンドカード
kicker: "PRODUCT V2.1" # なし = ワードマークと--release
music: upbeat # カタログスラッグまたはムード。なし = 無音
entrance: tilt-in # tilt-in | pull-out | rise | none
endCard: on # 公式のEndカードテンプレート。noneでオフ。タイトル、vos id、またはdoc.jsonで別のものを指定
with: "Split cover, landscape@end" # オプション:任意のテンプレートをアンカー(@end | @start | @step:<id> | @<秒数>)に配置
captions: on # noneでビートキャプションをオフ
poster: poster/landscape # オプション:すべてのカードの元となるドキュメント
poster-tile: poster/tile # オプション:単独で名前付けされた1つのクラス
ヘッドラインはリリースが発する1行です。\n を使って複数行にわたって記述します。vos plan はカットのモーションを提案する際にモーションロールを読み取り、plan --style は言葉をポスターにタイプします。deliver は poster ロールのみを読み取り、ない場合はテイクの横にある poster/<class>/doc.json を探します。
- レイアウト — カードが従うポスターで、棚に置かれます。vos.so の公式
Poster familiesプロジェクトには、アスペクトクラス(landscape, square, portrait, tile)ごとに1つの雛形が、そのPOSTER.mdとともにあり、各クラスがいつ採用されるべきかが記述されています。自分で作るプロジェクトも同じ形式です。vos folder pull poster-familiesでそれらをvos idとともに一覧表示します。レイアウト名や--layoutフラグはありません。雛形がそのままレイアウトであり、データによってコピーされます。
宛先がビューポートを決定します。すべての録画に先立ってです。映像解像度 = ビューポートです。1280×720のテイクで1920×1080の動画スペックを誠実に満たすことはできません。1080pキットの場合は1920×1080で、宛先がそれより大きい場合は2560×1440で録画します。
作業がvos.soプロジェクト(フォルダ)に置かれる場合は、最初にプルし、その中のすべての .md レシピを読みます。LAUNCH.md はこのループを、CUT.md がカットを束縛するように束縛し、POSTER.md はポスターを束縛します。レシピはこのスキルのデフォルトを上書きします。
2. ソース: 実物のワンテイク
キットは製品から作られます。モックアップからではありません(ストアポリシーも同意しています。誤解を招くリスティング画像は削除対象の違反です)。
録画前に、セットのようにコンテンツをステージングします。 プレミアムなローンチ画像とスクリーングラブを分けるものの半分は、画面上に何があるかです。actions.jsonは、誇らしいスクリーンショットが見せるであろう状態に製品を残さなければなりません。すなわち、ラベルが入力され、実際のデータのように見え、機能がストーリーの途中にある状態です。ポスターやストアの静止画が切り出される前に。deliver は空白の瞬間(壁紙、空のキャンバス)をドロップし、その旨を伝えますが、あなたのためにセットをステージングすることはできません。
ストーリーを actions.json に記述します。 ステップには id を与えます(瞬間や再レンダリングループはこれでアドレス指定します)。ビートに値する箇所には caption を与えます(2〜8語。plan は、言葉を受け取るカット上で、そのステップの瞬間に下3分の1として提案します)。ナビゲートするクリックの後には、読み込みのための wait を入れます。静止画はそのwaitの終わりに読み取られるため、フレームはスピナーではなくページを示します。
- 新しい録画:
product-videoスキルのループ(探索 →actions.json→vos record --strict→doc.jsonを調整)。actions.jsonをリポジトリに保持します。それは次回のリリースのスクリプトです。 - 出荷された機能がログインの背後にある場合: スクリプトの前にセッションを確定します。
product-videoスキルのラダーに従います(詳細は https://vos.so/llms-full.txt の「Sessions」を参照)。リポジトリに既にあるテスト認証から1つを作成するか、カメラオフでフォームをスクリプト化するか、人間が一度サインインする(vos session open <url> --name <app>、その後--session <app>)か、拡張機能で録画してあなたがカットします。--storage-state <file>を付けて録画します。リリースはバージョンごとに再録画するため、人間を必要としない段階を選びましょう。それが次回のリリースでも機能するものです。本番パスワードを入力したり受け入れたりしないでください。状態ファイルはテイクの外、gitの外に保管します。デモアカウントから録画してください。実際の顧客データを表示するストアリスティングは削除対象のミスです。 - 既存のテイク:
vos-cutスキルでカットします。ホストされたテイクはvos fetch <vosId|watch-url> --out dir --mediaでローカルに取り込みます。 - 撮影済み製品の新しいバージョン:
vos recordで同じテイクに再録画します(映像は置き換えられ、カットはdoc.prev.jsonとして存続します)。その後vos plan take --reuseで新しい録画にカットを再タイミングし、追従できなかったものを報告します。決してゼロから始めないでください。すべての修正はdoc.jsonへの編集です。
他の場所でレンダリングされたモーショングラフィックセグメントは入力です。それはドキュメント内でメディアオーバーレイクリップまたは背景としてドロップインされます。逆はありません。
3. ポスターとモーション: ドキュメントとして
カットはデータによって動きます。 新しい vos plan は、カットのモーションを LAUNCH.md のロールから doc.json に提案します。カードのエントランス、エンドカード(vos.so の公式 End card テンプレート、最後に配置されます。カードは最後のフレームの1秒間のフリーズの後退し、次にマーク、ヘッドラインが単語ごとに到着し、リリース行とURLが地面に落ち着きます。そのクリップは from: endcard とスタンプされます)、with: がアンカーに名前を付けるテンプレート、ステップごとのキャプション、BGM、そしてテイクにマイクがない場合のすべてのプレス時のクリック音。すべての提案は安定したIDを持ちます(bed、click-<n>、caption-<step>)。既存のカットでは --motion が再提案します。リフレッシュは決して行わないため、削除されたエンドカードは削除されたままです。テンプレートは、棚にあるプレーンなテイクであり、そのクリップは安定したIDを持ちます。参照は、公式棚のタイトル("End card"、"Split cover, square")、vos id、またはディスク上のドキュメントです。スタジオでテイクを開けば、見たものがキットがレンダリングするものです。
vos plan take --motion --release v2.1
ポスターはドキュメントであり、プレーンなテイクです。 カードは frame.inset によって配置され(負の値で端からはみ出します)、チルトトラックの静止ポーズによって傾けられ、言葉とマークはオーバーレイクリップとして安定したID(stage-title、stage-kicker、stage-brand、stage-mark)を持ち、最後のセグメントには後続の hold があり、その開始が静止画です。リリースが必要とするアスペクトクラス(landscape, square, portrait, tile)ごとに1つずつ、テイク自身の映像から作成します。
cp -r take poster/landscape # または vos duplicate <take vosId> してから fetch --media
vos plan poster/landscape --style <poster vosId|doc.json> --headline "…" --kicker "…"
vos frames poster/landscape --frame <rest>; vos validate poster/landscape
vos push poster/landscape --folder <project-slug> --label "poster, landscape"
plan --style <poster> は、レイアウト(カードの配置とプレゼンテーション、LAUNCH.md またはフラグからリリースの言葉がパッチ適用されたステージクリップ、残りの傾き、ホールド)をテイクにコピーし、テイク自身のアスペクト、クローム、カットを保持します。BRAND.md の logoUrl からのブランドのマークは stage-mark のために brand/ にフェッチされ、追従できなかったものは報告されます。セグメントを瞬間(ズームの頂点、クリック後の落ち着いたレスポンス)に絞り込みます。これにより、残りは機能であり、コールドオープンではありません。ホールドまで製品はカード内で再生され続けることができます。次に、静止フレームを見ます。ポスターはプッシュされる前に目で判断されます。人間がスタジオで開き、カードをドラッグし、その場で言葉を打ち直し、ホールドを移動します。vos pull --media でそれをダウンロードし、次のリリースでは、自身のプッシュされたドキュメントから同じ plan --style で言葉を付け替えます。
4. デリバリー
vos deliver take --to cws,producthunt,x,linkedin,og,github,youtube --release v2.1
1回のパスで、動詞があなたが手動で決めていたことを決定します。
- 瞬間。 静止時間はストーリーから来ます。各ステップの終わりと落ち着き(クリックに続く待機の終わり)、次にズームの頂点、そしてスプレッド。各候補は実際のページとして一度読み取られます。空白はドロップされ、同じフレームの2つは1つにまとめられ、ドロップされたものはすべて
skipped[]に報告されます。--times step:<id>[+offset]で1つを指定します。 - スクリーンショット は実際のページで、フルブリードです。ストアのスチルとギャラリーは、デフォルトでカットのズーム、チルト、クロームを削除します(
--composedで保持し、ピクチャーパスは拒否します)。