vosプログラムをリミックスする
vos.so/gallery のすべての動画はプログラムです。 入力 + 決定論的関数 → 動画。リミックスとは、そのプログラムの JSON設定を編集し、その結果をユーザーのアカウント上に プライベート な vos としてプッシュし、系譜を残すことです。ローカルで編集し、プラットフォームが検証、 コンパイル、プレビューをレンダリングします。
セットアップ
npm i -D @vosjs/cli # fetch/check/push/pull ループ
このループにブラウザは不要です(プレビューのレンダリングはプラットフォーム上で行われます)。
CLIが利用できない場合、すべての操作はプレーンなHTTPでも機能します:
references/remix-contract.md に各エンドポイントがドキュメント化されています。
認証情報(決して出力しないでください)
2つの形式があり、両方とも Authorization: Bearer として使用します。
- リミックスグラント (
vos_rg_…) — ユーザーのプロンプトに含まれている場合に使用します。 24時間の有効期間、1つのソースvosに紐付き、最大5回のプッシュが可能です。 - デュラブルキー (
vos_sk_…) — 問い合わせる前に以下の順序で解決します:VOS_API_KEY環境変数、次に~/.config/vos/credentialsの最初の行。 人間は https://vos.so/app/api でキーを作成します。 - 認証情報がない場合 — クレーム可能なプッシュ(プログラムのみ):
vos push my-remix.json --claimable --title "My remix" # → claim: https://vos.so/claim/… expires: <今から72時間> # CLIがない場合、または古いCLIの場合?同じことをプレーンHTTPで: curl -s -X POST https://vos.so/api/claim \ -H 'content-type: application/json' \ -d '{"title": "My remix", "config": <VosConfigJson>}' # → { "claimUrl": "https://vos.so/claim/…", "expiresAt": "…" }claimUrlをユーザーに渡し、それ以外の場所には渡さないでください — これが唯一の参照であり、 唯一の認証情報です。リンクは72時間有効です。クレームされなかった作業はその後削除されます(データ損失ではなく意図的なクリーンアップです — 期限切れの場合は再プッシュしてください)。クレームによりvosはユーザーのライブラリに移動し、ホストされたプレビューが開始されます。クレーム後の反復はユーザーのキーを使用します(以下のループ)。 制限:設定ファイル200KB以下、ネットワークあたり1日5回のプッシュまで。
CLIはグラントとキーを自動的に解決します(export VOS_API_KEY=…)。どの
形式でも公開はできません。プッシュされたvosは、人間がvos.soで公開するまでプライベートのままです。
ループ
-
取得 ソースプログラムを取得します(公開プログラムは認証不要):
vos fetch https://vos.so/vos/<id> # またはIDのみ # → <slug>/config.json (params保持) + <slug>/vos.json (追跡用) -
編集
config.jsonをローカルで編集します。関数フィールド(setup、createContent、createTimeline、onFrame)はJavaScript 文字列 です — TypeScript構文や${}テンプレート補間は使用できません。 1〜2の軸を決定的に変更します(パレット、モーション文法、密度) — 決して 10%の微調整の重複は避けてください。プログラムがparamsを宣言している場合は、関数文字列の手術よりも それらのノブを再調整または拡張することを優先してください。 -
ノブとルックを宣言 — リミックスのコントロールサーフェス。目的に基づいた名前のパラメータ2〜4個と、プリセット2〜3個。 これはルールのある技術です:
references/params-knobs.md。 -
ローカルでチェック プッシュする前に:
vos check <slug>/config.json # 移行 → スキーマ → 構文 → コンパイル → リント vos still <slug>/config.json probe.webp --time 2 # 実行 — コンパイルはチェック済み # ただしモジュールは決して実行しません。実行時 # エラー(関数自身の宣言に対するTDZ)はチェックだけでは # 目に見えません。コード編集のたびに、プッシュ前に必ず静止画を # レンダリングしてください。すべてのエラーを修正し、決定論に関する警告を真剣に受け止めてください(実行ごとに異なるレンダリング結果になる設定は、 定義上、壊れています)。
-
プッシュ 系譜を持つプライベートvosとして(CLIは設定ファイルの隣にある
vos.jsonを読み取り、remixOfIdのクレジットを設定します):vos push <slug>/config.json --title "Aurora Ribbons — dusk" # → Created private vos <id> # watch: https://vos.so/vos/<id> # studio: https://vos.so/studio?vos=<id> -
反復 — 以降の編集は同じvosのバージョンになります:
vos push <slug>/config.json --vos <id> --note "cooler palette, slower drift"ディレクトリは
vos.jsonを通じて自身のvosを追跡するため、ベースバージョンは 自動的に引き継がれます。前回のプッシュ以降に人間がスタジオで編集した場合、プッシュは その変更ログとともに拒否されます。--noteは引き継ぎメッセージです — 人間が最初に読むものです。--labelはバージョン名です。 -
編集のたびにプル — 人間が微調整した可能性があります:
vos pull <slug> # ベースからの変更を確認し、同期各バージョンを属性付きで出力します(
v3 (studio · warmer): knob hue 0.2→0.35とそのノート)、config.jsonを先頭に同期し(以前のコピーはconfig.backup.jsonとして保持)、 ベースを再設定します。人間が編集したノードは保護されています:それらに触れるプッシュは、--override <id>を渡さない限り拒否されます — これはユーザーの指示が明示的にそのノードを ターゲットにしている場合にのみ行ってください。ユーザーによるノブの操作は嗜好データです: 次に何をするかを決める前に変更ログを読んでください。 -
両方のリンクを返す — ウォッチページ(プレビュー、ノブ、コード)とスタジオ (
https://vos.so/studio?vos=<id>)を返します。ユーザーはスタジオでノブを微調整できます。 公開はユーザーがvos.soで行う操作です。
プッシュを誠実に保つルール
- プライベートが契約です。
visibility: "public"を試みないでください — プライベートに固定され、 キーによる公開は設計上拒否されます。 - クォータを意識する:デュラブルキーは24時間に50vosまで作成可能。グラントは5回までプッシュ可能。 多数のvosを作成する代わりに、1つのvosでバージョンを反復してください。
- サーバーレンダリングの制約(プレビューフリートはソフトウェアGLを使用):
透過マテリアルに
THREE.DoubleSideは使用不可、dispersionは使用不可、 取得するアセットはすべてフリートが到達可能な絶対httpsURLである必要があります。 - すべてのノブは機能しなければなりません。 コードが決して読み取らないパラメータは、
パラメータがないより悪いです —
references/params-knobs.mdの誠実性セクションを参照してください。 - 3Dモデル差し替え(ショーケースプログラムへのGLB):
references/3d-recipe.md。 - 完全なエンドポイントリファレンス、クォータ、エラーテーブル:
references/remix-contract.md。