Choose a guided path

Supported imports

ActionInputSource
Import a ViewA complete 2:1 equirectangular JPEG, PNG, or HEIC image; a complete Package v2 ZIP containing a View; or a legacy/simple flat View ZIPPhotos for images; Files or a direct public HTTPS URL for images and ZIPs
Import a RoomA complete Package v2 ZIP containing a Room; or a legacy/simple flat Room ZIPFiles or a direct public HTTPS URL

Complete Package v2 import is available in Locus 1.2.1 and later. The 4K minimum for directly imported panorama images, including Browser images, is separate from either ZIP format. Complete packages preserve stable IDs and update semantics. Flat compatibility ZIPs and direct panorama images receive a new UUID on every import.

Try three complete Rooms

With a Locus build that supports Room v5, download any ZIP, save it to Files, then choose Import a Room. These public examples include desk seats and visitor-controlled lights. They match the September 5, 2026 authoring export (Atrium Loft 1.0.14, Courtyard Gallery 1.0.16, Horizon Atelier 1.0.18).

Requires Room v5 support. Early Locus 1.1.0 builds (1–3) do not support these ZIPs. Room v5 is supported from Locus 1.1.0 build 4, including Locus 1.1.1. Check your build in Settings → Help & About → About Locus.
Not the in-app 1.1.5 or 1.2.0 Rooms. The App Store built-ins and Library revisions for Locus 1.1.5 add sofa and lounge seats plus hideable desk groups; Locus 1.2.0 further groups related seats in the Seats picker with authored seat groups. These downloadable ZIPs stay on the earlier desk-seat packages so authors can study the base Room v5 contract, without lounge seats, Hide Desk, or seat groups. For lounge seats and Hide Desk authoring, see the format reference; for seat groups, see the seat groups reference.

Using an older build? Download a previous compatible version: Atrium Loft, Courtyard Gallery, Horizon Atelier.

Use these examples with Locus under the Locus asset rights.

Try experimental Room animations

Cloud Fan Pavilion is a free Room you can download in Locus Places with a broad-leaf plant moving continuously in the breeze. The animation metadata, playback, Quick Controls and Motion settings, speed, and replay intervals are experimental and may change.

Bring your own Room

Use the modeling, material, and lighting workflow you already know. Locus only requires a self-contained USDZ and explicit metadata for openings, seats, optional tabletop mappings and wall or roof entity references, optional visitor-controlled lights, optional lounge seats and hideable desk groups (Locus 1.1.5), optional seat groups (Locus 1.2.0), and—when you choose to experiment—Room animations.

Canonical complete Package v2

complete-place.zip
├── locusplace.json
└── catalog/
    ├── destinations/<destination-id>/destination.json
    ├── spaces/<space-id>/space.json
    └── experiences/<experience-id>/experience.json   # optional

Put locusplace.json and catalog/ directly at the ZIP root—never inside an outer wrapper folder. Content assets stay under their matching destination, space, or Experience directory. Locus accepts the same ZIP bytes with a .zip or .locusplace filename.

This format preserves authored stable IDs, View media and masks, sourceImage, View-owned USDZ midground scenery and renderer-owned water, View and Room sound, Room animations, video surfaces and seat groups, provenance, and supported bundled Experiences. Its manifest declares packageID, contentVersion, minimumAppVersion, content IDs, file hashes and sizes, and contentHash. Locus validates the exact inventory, safe paths, hashes, resource limits, capabilities, and minimum app version. A malformed complete package is rejected rather than retried as a flat ZIP.

The package is data, not code. In the same Locus binary, supported Room and View data works the same when bundled, downloaded from the Library, or imported from a complete public ZIP. Source may affect entitlement, updates, storage, removal, and labels; it does not unlock renderer features. Packages cannot include scripts, plugins, dynamic libraries, or executable extensions. Read the security boundary and future-extension rule.

Legacy/simple Room ZIP layout

my-room.zip
├── space.json
├── provenance.json
├── teleport-points.json
├── scene.usdz
├── thumbnail.jpg
├── sound.json         # optional, Locus 1.1.4
└── forest-air.m4a     # one or more, only with sound.json

In this compatibility format, all five files are required at the ZIP root. space.json contains displayName; it does not contain an asset ID, and each import receives a new UUID. Do not add a parent folder, editable source, GLB, source textures, or any other file. Locus does not generate a thumbnail when one is missing. A Room may also carry its own sound: add sound.json and its audio files at the root, described in the format reference. Every audio file must be named by a source in sound.json, and audio without it is rejected.

Legacy/simple View ZIP layout

my-view.zip
├── view.json
├── provenance.json
├── panorama.jpg
├── thumbnail.jpg
├── lighting.jpg       # optional
├── sound.json         # optional, Locus 1.1.4
└── waterfall.m4a      # one or more, only with sound.json

The panorama must be a complete 2:1 equirectangular image. A packaged View can set starting direction, brightness, contrast, saturation, Room lighting, horizon pitch, and optional sunlight in view.json. A user can change these later with Edit View. A View may also carry its own sound on the same terms as a Room, described in the format reference.

Adjust a View in Locus

Edit View provides View Brightness, Contrast, Color, Room Lighting, Add Sunlight, Sun Position, Sunlight Strength, and Turn the View. The settings are saved for that View.

View appearance fields

FieldUse
panorama.initialYawDegreesStarting direction.
environment.skyGainEVVisible View brightness.
environment.exposureEVRoom-lighting intensity.
environment.horizonPitchDegreesHorizon adjustment.
environment.colorGrade.contrastContrast from 0.5 to 2.0; 1.0 is neutral.
environment.colorGrade.saturationSaturation from 0 to 2.0; 1.0 is neutral.
environment.directSunOptional sun direction and strength.
environment.conditionView v2 suggestion for the Room Lights switch: day, dusk, night, or overcast.

Provenance

Every Room and View needs provenance.json. Record the creator or agency, rights, requested credit, changes, and AI use truthfully. Supply exactly one of license or rights, as described in the format reference. When aiGenerated is true, include aiProvider; when false, omit it. The license describes rights in the asset; an App Store EULA is not an asset license. See Locus asset rights for Locus-authored examples.

Pack and validate a compatibility ZIP

The current public Python tools only build and validate the legacy/simple flat format; they do not validate complete Package v2. Keep the five Room files or four required View files in one directory. Run the included tools on macOS:

python3 tools/pack_locus_asset.py /absolute/path/to/asset /absolute/path/to/asset.zip
python3 tools/validate_locus_asset.py /absolute/path/to/asset.zip

The Room validator uses Xcode's usdchecker. A valid result checks the archive and machine-readable assets; it does not replace importing the exact ZIP and trying every seat.