プロジェクトデータ・履歴

OpenGraphs のプロジェクトは JSON で表現され、IndexedDB に自動保存されます。バージョン履歴で任意の時点のスナップショットに戻せます。

ファイル形式

プロジェクトは .opengraphs 拡張子の JSON ファイルとして保存されます。トップレベル構造:

{
  "name": "My Project",
  "compositions": [
    {
      "id": "main",
      "name": "Main",
      "width": 1280,
      "height": 720,
      "duration": 3,
      "fps": 30,
      "background": [10, 20, 40],
      "layers": [ /* ... */ ]
    }
  ]
}

主要スキーマ

レイヤー (Layer)

{
  "id": "layer-1234",
  "name": "Background",
  "type": "shape" | "video" | "text" | "group" | "adjustment" | ...,
  "width": 1280,
  "height": 720,
  "color": [255, 255, 255],
  "blendMode": "normal" | "multiply" | "screen" | ...,
  "opacity": 100,
  "parentId": "layer-other",
  "transform": { "anchor_point": [0.5, 0.5], "position": [0, 0], "scale": [100, 100], "rotation": 0, "opacity": 100 },
  "objects": [ /* Object 配列 */ ],
  "effects": [ /* EffectData 配列 */ ],
  "masks": [ /* MaskData 配列 */ ],
  "time_remap": [ { "time": 0, "value": 0 }, { "time": 3, "value": 3 } ]
}

オブジェクト (Object)

{
  "id": "obj-1",
  "type": "2d" | "text" | "image" | "video" | "audio" | "shader" | "group" | "adjustment" | "cloner" | "3d_primitive" | "3d_light",
  "name": "My Shape",
  "width": 200,
  "height": 200,
  "fill_color": [100, 150, 255],
  "stroke_color": [255, 255, 255],
  "cloner": { "count": 10, "mode": "linear" | "circular" | "grid", "offset": { "x": 20, "y": 0, "rotation": 18, "scale": 0 }, "radius": 120, "indexExpression": "", "source": { /* ソース Object */ } }
}

エフェクト (EffectData)

{
  "id": "fx-1",
  "name": "Bloom",
  "enabled": true,
  "params": {
    "threshold": 0.7,
    "intensity": 1.2,
    "radius": 4
  }
}

マスク (MaskData) v1.5+

{
  "enabled": true,
  "shape": "rectangle" | "ellipse" | "polygon",
  "position": [0, 0],
  "scale": [100, 100],
  "rotation": 0,
  "feather": 0,
  "inverted": false
}

キーフレーム (KeyframeData)

{ "time": 0.5, "value": 100, "easing": "linear" | "ease-in" | "ease-out" | "hold" | "step" }

自動保存

30 秒ごとにプロジェクト全体が IndexedDB (データベース名 opengraphs-autosave) に自動保存されます。ブラウザを閉じても、次回開いたときに復元できます。

復元方法

復元は アプリ UI 内のバナー から行います。起動時に前回セッションの未保存データが見つかると、画面上部にバナーが表示され、「復元」または「破棄」を選べます。ブラウザの confirm() ダイアログは使用しません。

自動復元 (silent)

Version History モーダル内の Auto-restore on startup チェックボックスを ON にすると、確認バナーを出さずに次回起動時に自動で復元します。

バージョン履歴

トップツールバーの Version History から、現在の状態をスナップショットとして保存し、過去のバージョンに戻せます。最大 30 件保持 (古いものから自動削除)。

使い方

  1. Version History をクリック → モーダルが開く。
  2. 上部の入力欄に説明 (例: "after intro animation") を入れて Snapshot ボタンで保存。
  3. リストから任意のバージョンの Restore をクリック。確認ダイアログは表示されず、インラインで「Current unsaved changes will be lost.」の警告と [Yes, restore] / [Cancel] ボタンが現れる。

Smart Relink ボタンは、外部画像 / 動画ファイルへの参照を SHA-256 ハッシュで管理する機能。プロジェクトファイル間で同じファイルを再利用できます。

  • プロジェクト保存時に参照ファイルの SHA-256 を記録。
  • 別の環境で開いたとき、ファイルが消えていてもライブラリから再リンク可能。

Undo / Redo

Ctrl+Z / Ctrl+Shift+Z で取り消し / やり直し。状態は localStorage に永続化。