Files
ToastconcernandClaude Opus 5.5 b0609d3664 Studio: movable areas and workspaces in Frame Studio's own Blender-like style
- ImGui's docking branch (1.91.5): the 3D Viewport, Outliner, Properties and Timeline are areas on a gutter, each
  with a header. Drag an area by its header's editor button to dock it elsewhere (as a tab, or splitting an area);
  click it to show another editor there. Layouts are kept between runs; Window > Reset Layout restores them.
- Workspaces in the top bar: Layout, Walking, Headset. Ctrl+Space maximizes the 3D Viewport.
- 3D Viewport header: Arrange / Draw Floor, View, Select, Add, Object menus, Global / Local, the world layer and
  shading (Material, Solid, Wireframe; GPU Cost, Overdraw, Leave Out in its menu). In the view: the toolbar (T), a
  chip naming the home and selection, navigation buttons under the axes, a sidebar (N: Item, Tool, View).
- Properties: tabs as icons down its left edge (Object, World, Environment, Bundle, Headset); sections are panels on
  lighter boxes; labels right-aligned in a column. Sound is part of the Environment tab.
- Timeline: transport in its header, a ruler in seconds with the playhead. Status bar: what the mouse does.
- Keys: Shift+A add menu, X asks before deleting, F3 menu search, Alt+A, Space, Numpad 1/3/7 views, T, N.
- Inter (SIL OFL) built in as the interface font; a palette of cool greys, one blue, Frame Studio's orange.
- ImGui patches (marked Frame Studio): the submenu triangle, and dropdown arrows drawn small on the field.
- Self-test: an area dragged to dock elsewhere, Reset Layout, workspaces, F3 (104/104).
- Guides follow the new menus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:14:46 -05:00

102 lines
4.8 KiB
Markdown

# Bundles
A **bundle** (`.fbundle`) is several environments in one file: a collection to share, or to install on the headset
in one go. Each environment in it stays its own environment. On the headset, a bundle is unpacked into the `.fenv`
files it holds, and the Environments panel lists each one separately.
## Making a bundle in Frame Studio
Everything is in **File > Bundle** and on the **Bundle** tab in Properties.
1. **File > Bundle > New Bundle** starts an empty one, and the **Bundle** tab opens.
2. Give it a **Name**. It's the bundle's own name; each environment keeps its name.
3. Add environments:
- **Add the Open Environment**: the environment you have open, as it was last saved. Save first (Ctrl+S) to
include your latest changes. A home that has never been saved can't be added yet.
- **My Environments ▾**: anything you've saved.
- **Add .fenv...**: any `.fenv` file. You can pick several at once.
Each row shows the environment's picture, name and size. **▲** moves it up: the order is kept in the file.
**✕** takes it out of the bundle; the `.fenv` file itself stays where it is. Double-click a row to open that
environment.
4. **Save Bundle...** writes the `.fbundle`. The environments are stored as they are, not packed a second time, so
saving is quick, and the bundle is about as big as its environments together.
## Opening a bundle
**File > Bundle > Open Bundle...**, **File > Open...**, or dropping a `.fbundle` on the window opens the bundle on the
Bundle tab. Its environments are listed in place; nothing is unpacked yet.
- Double-click an environment to open it. It is unpacked into a scratch folder first.
- Add, remove or reorder environments, then **Save Bundle** (the same file) or **Save Bundle As...** (a new one).
- **Unpack into My Environments** copies every environment out of the bundle into My Environments. An identical
environment already there is skipped. A different one with the same name is kept, and the bundle's copy is added
as "name 2".
## Installing a bundle on the Steam Frame
- **From Studio**: with the bundle saved, choose **Install on Steam Frame...** on the Bundle tab or in the Bundle
menu. The bundle is added to the **Headset** tab's install list. Then choose **Install Frame Home** there. The
Headset tab's **Add .fenv or .fbundle...** button adds bundles too.
- **Without Studio**: give the bundle to the stand-alone installer like any environment
(see [install-frame-home.md](install-frame-home.md)):
```sh
sh install-frame-home.sh --host steamos@frame my-collection.fbundle
```
On Windows, drop it onto `Install Frame Home.bat`, or run
`powershell -ExecutionPolicy Bypass -File install-frame-home.ps1 my-collection.fbundle`.
- **By hand**: copy the `.fbundle` into `~/frame-home/envs` on the headset.
On the headset, Frame Home's Environments panel unpacks any bundle in `~/frame-home/envs` in the background. Each
environment becomes its own `.fenv`, and the bundle is then deleted to save space. An environment already there is
kept, as above. A bundle that's damaged, or still being copied, is left alone and tried again once it changes.
A bundle never changes which environment is shown. When you install `.fenv` files and bundles together, the first
`.fenv` is the one shown.
## From the command line
`fenv-tool` (built with Frame Home, see [building.md](building.md)) makes and reads bundles:
```sh
fenv-tool bundle "My collection.fbundle" --name "My collection" calm.fenv beach.fenv night.fenv
fenv-tool info "My collection.fbundle" # each environment: name, size, picture, damaged or not
fenv-tool unbundle "My collection.fbundle" out-folder # the .fenv files, one each
```
## What's inside
A `.fbundle` is a ZIP archive:
```
my-collection.fbundle
├── bundle.json the bundle's name and its environments, in order
└── environments/
├── calm.fenv each environment, stored as it is
├── beach.fenv
└── night.fenv
```
```json
{
"format": "fbundle",
"version": 1,
"name": "My collection",
"environments": [
{ "file": "environments/calm.fenv", "name": "Calm", "size": 94371840 }
]
}
```
- The `.fenv` files are *stored*, not compressed again: they're already compressed inside, so packing and unpacking
are just copies, and each one can be read in place (Studio reads names and pictures without unpacking).
- Bundles over 4 GB use ZIP64. Any ZIP tool can open a bundle.
- Two environments with the same file name get "name 2"; names are compared without regard to case, so they unpack
separately on Windows too.
- Every member's checksum is verified when it's unpacked: a damaged bundle stops without leaving half a file.
The format is in `src/fenv_bundle.h`; `.fenv` itself is described in
[environments-and-fenv.md](environments-and-fenv.md).