ArTchie Studios

Scene Set Hub

Named groups of scenes with per-scene enabled flags. One-click Load (first enabled scene Single, the rest Additive) or Load Additive. Reorder, duplicate, capture the open setup, validate missing files, and optionally sync enabled flags into Build Settings.

Editor-only. Unity 2021.3+. Lives in Rivet.Editor (includePlatforms: Editor). No extra packages.

Editor window

ArTchie / Rivet / Scene Set Hub

Control What it does
Create set Adds a named set (unique, trimmed).
Rename / Duplicate / Delete Renames the selected set, copies it as Name Copy (then Name Copy 2…), or removes it (delete asks first). Duplicate persists immediately.
Add scene / Add selected Object field or current Project selection. Only Assets/**/*.unity.
Capture open scenes Replaces the selected set from currently loaded scenes (EditorSceneManager.GetSceneManagerSetup order, enabled=true). Untitled / Packages/ / Library/ paths are skipped. Empty capture is allowed in the window (writes an empty set).
Enabled toggle / Up / Down / Remove Per-scene flag used by Load. Up/Down reorder and persist immediately.
Missing paths Scenes not on disk draw in red. The Scenes header shows a missing count.
Load First enabled scene on disk: OpenSceneMode.Single. Remaining enabled: Additive. Prompts to save dirty scenes.
Load Additive Every enabled scene Additive. Same save-dirty prompt.
Sync enabled to Build Settings For scenes in the selected set that exist on disk, set EditorBuildSettings.scenes enabled to match and add missing build entries. Does not remove unrelated build scenes.
Copy JSON / Write report Dumps all sets. Report: <project>/RivetReports/scene-set-hub.json.
Reload file Re-reads the persist file.

Persist path: <project>/ProjectSettings/RivetSceneSets.json (creates ProjectSettings/ if needed). Skips Packages/ and Library/.

Batchmode (CI)

Unity -batchmode -nographics -quit -projectPath <proj> -executeMethod Rivet.SceneSetHub.RunBatch -rivet-set Gameplay -rivet-action list -rivet-out <file.json>
Unity -batchmode -nographics -quit -projectPath <proj> -executeMethod Rivet.SceneSetHub.RunBatch -rivet-set Gameplay -rivet-action load -rivet-fail
Unity -batchmode -nographics -quit -projectPath <proj> -executeMethod Rivet.SceneSetHub.RunBatch -rivet-set Gameplay -rivet-action capture -rivet-allow-empty
Unity -batchmode -nographics -quit -projectPath <proj> -executeMethod Rivet.SceneSetHub.RunBatch -rivet-set Gameplay -rivet-action add-scene -rivet-scene Assets/Foo.unity
Unity -batchmode -nographics -quit -projectPath <proj> -executeMethod Rivet.SceneSetHub.RunBatch -rivet-set Gameplay -rivet-action sync-build
Arg Meaning
-rivet-action list|load|load-additive|capture|add-scene|remove-scene|duplicate|sync-build Default list.
-rivet-set <name> Target set. Case-insensitive. Required for every action except list.
-rivet-scene <Assets/Foo.unity> Scene path for add-scene / remove-scene.
-rivet-allow-empty capture only: write an empty set when no project scenes are loaded.
-rivet-out <file.json> Output path. Default: <project>/RivetReports/scene-set-hub.json
-rivet-fail Exit code 1 if load / load-additive and the named set is missing.

Action details:

Action Behavior
list Dump all sets.
load / load-additive Open enabled on-disk scenes. Same Single/Additive rules as the window.
capture Create or replace -rivet-set from loaded setup-order scenes (enabled=true). With no open project scenes, fails unless -rivet-allow-empty.
add-scene Append -rivet-scene (enabled=true). Creates the set if missing. Already-present paths are a no-op success.
remove-scene Drop -rivet-scene from the named set. Missing set fails. Missing path is a no-op success.
duplicate Writes Name Copy (then Name Copy 2…) with the same scene list.
sync-build Requires -rivet-set. Same as the window button: match enabled flags and add missing build entries; do not strip unrelated build scenes.

Unknown -rivet-action, a load that cannot open any enabled scene on disk, capture with no scenes and no -rivet-allow-empty, invalid add-scene path, or a missing set for duplicate / remove-scene / sync-build, exits 1 in batch even without -rivet-fail.

RunBatch only calls EditorApplication.Exit when Application.isBatchMode is true. It logs action=, count=, missing=, loaded=, and the output path.

Also accepts -rivet-set=Gameplay / -rivet-action=list / -rivet-out=file.json / -rivet-scene=Assets/Foo.unity.

JSON

The report is always a dump of all sets, plus what this run did. missingCount is the number of listed scene paths that are not on disk. Persist JSON does not store exists (computed at report time).

{
  "tool": "SceneSetHub",
  "generatedUtc": "2026-08-18T04:00:00Z",
  "action": "load",
  "requestedSet": "Gameplay",
  "found": true,
  "loaded": ["Assets/Scenes/Boot.unity", "Assets/Scenes/Hud.unity"],
  "count": 1,
  "missingCount": 0,
  "items": [
    {
      "name": "Gameplay",
      "scenes": [
        { "path": "Assets/Scenes/Boot.unity", "enabled": true, "exists": true },
        { "path": "Assets/Scenes/Hud.unity", "enabled": true, "exists": true }
      ]
    }
  ]
}

Persist file

ProjectSettings/RivetSceneSets.json:

{
  "sets": [
    {
      "name": "Gameplay",
      "scenes": [
        { "path": "Assets/Scenes/Boot.unity", "enabled": true }
      ]
    }
  ]
}

Hand-written JSON is parsed with a small built-in reader (no Newtonsoft). A missing or unreadable file starts as an empty store.

Notes

  • Disabled scenes and missing files are skipped on load (missing files log a warning).
  • Empty projects and a missing RivetReports / ProjectSettings folder are fine.
  • Window Load / Load Additive still prompt to save dirty scenes (SaveCurrentModifiedScenesIfUserWantsTo).
  • Untitled (no path) scenes are not captured.
  • sync-build never removes Build Settings entries that are not in the named set.
  • Does not touch runtime player code.

Source in the box: Assets/ArTchie Studios/ArTchie-Suite/com.artchie.rivet/Documentation/SceneSetHub.md