Stand Alone Mode — E-Learning Lab
Stand Alone Mode is an optional authoring workflow that replaces Vizard Inspector with Blender and targets WebXR / standalone VR headsets (e.g. Meta Quest) instead of a tethered Vizard runtime. All existing Vizard-based workflows are completely unchanged when the flag is False.

Enabling Stand Alone Mode
Open global_config/globalConfig.py and set:
STAND_ALONE_MODE = True
Set it back to False at any time to return to the standard Vizard Inspector workflow.
What Changes When Enabled
1. Blender replaces Vizard Inspector
Any action that would normally open Vizard Inspector now opens Blender instead:
| Action | Normal mode | Stand Alone mode |
|---|---|---|
| Double-click environment | Opens Inspector | Opens in Blender |
| Double-click scene object | Opens Inspector | Opens in Blender |
| Double-click avatar | Opens Inspector | Opens in Blender |
| Right-click → Edit Model | Opens Inspector | Opens in Blender |
| Preview window Edit button | Opens Inspector | Opens in Blender |

2. .glb / .gltf files are kept as primary assets
When a .glb or .gltf file is dropped into the Environments, Objects, or Avatars asset bins:
- The
.glb/.gltfis kept as the primary asset file. - A temporary
.osgbis created only to capture the thumbnail screenshot. - The
.osgbis automatically deleted ~4 seconds after the thumbnail is saved.
In normal mode the original non-OSGB file is deleted after conversion. In Stand Alone mode the original is always preserved.
3. _tag node convention for interactive objects
The Scene Objects panel (the checkboxes for Grabbable, Animate, Visible, etc.) normally scans all group nodes in the loaded Vizard scene. In Stand Alone mode it filters to only nodes whose name ends with _tag.
When authoring a model in Blender, name any object you want to be interactive with a _tag suffix:
Chair_tag ← will appear in the panel as "Chair_tag", can be marked Grabbable
Lever_tag ← will appear as "Lever_tag", can be marked Animate
BackgroundWall ← will NOT appear (no _tag suffix)
Can then check "Grabbable", "Hidden" in the E-Learning Lab GUI

Authoring Workflow
Step 1 — Enable the flag
# global_config/globalConfig.py
STAND_ALONE_MODE = True
Step 2 — Prepare your .glb models in Blender
- Name any interactive objects with a
_tagsuffix (e.g.Door_tag,Button_tag). - Export as
.glb(File → Export → glTF 2.0, format = GLB).
Step 3 — Import models into the E-Learning Lab
Drag .glb files from Windows Explorer onto the Environments or Objects asset bins. The app will:
1. Copy the file to Assets/Environments/ (or Assets/Objects/).
2. Capture a thumbnail (via a temporary .osgb — deleted automatically).
3. Display the model in the gallery with its thumbnail.
Step 4 — Build your sequence
Drag environment thumbnails from the Environments panel onto either:
- The Scenes list (left panel) — adds as a new slide, or replaces the currently-selected blank slide.
- The Preview image (centre area) — same behaviour.
The scene appears in the list and loads in the Vizard preview window. You can then:
- Add Audio, Prompts, Images, Video, or Quiz files to the scene as normal.
- Right-click a scene → Edit in Blender to open the .glb for further editing.
- Use the Scene Objects panel to mark _tag nodes as Grabbable, Animate, or Visible.
Step 5 — Run in WebXR
Click "Run Session" and Choose "Single WebXR"

Usage
The server opens the browser automatically. On a Quest headset, open the URL in the Meta Browser.
What the WebXR runner reads from your project
- 3D environment for each scene
- 360 video for scenes named with a 360 suffix (see below)
- 360 image for scenes named with a 360 suffix
- Scene order and transition type (Key Press / Timer / Release Object)
- Grabbable, animate, visible object lists per scene
- Per-scene audio (
.wav,.mp3,.ogg) - Whole-sequence background audio
- Session audio loop setting
- Immersive-augmented reality
360 media scenes

Scenes whose names end with a recognized suffix are rendered as immersive 360 spheres instead of (or alongside) a .glb model. The media file is looked up in the Videos/ subfolder first, then the project root as a fallback.
| Scene name suffix | Format | Description |
|---|---|---|
_360_stereo |
Top-Bottom stereo | Top half → left eye, bottom half → right eye |
_180_stereo |
Side-by-Side stereo | Left half → left eye, right half → right eye |
_360 |
Mono equirectangular | Single sphere, both eyes |
Supported file formats:
| Type | Extensions | Notes |
|---|---|---|
| Video | .mp4, .webm |
Browser-native only — .avi, .mkv, .mov are not supported and will be skipped |
| Image | .jpg, .jpeg, .png, .webp |
Always supported |
A 360 scene does not require a .glb file — the .osgb placeholder that Vizard creates is ignored by the WebXR runner. Scenes with no .glb and no recognised 360 media are skipped with a SKIP message in the console.
On desktop, stereo scenes show the left-eye view. In the headset, each eye receives the correct half of the image automatically via WebXR layer masking.
Accessing from a Quest 3 or other device

The server binds to all network interfaces and automatically launches a Cloudflare HTTPS tunnel if cloudflared is installed. The tunnel URL appears in the console a few seconds after startup — open it in the Meta Browser and tap Enter VR.
One-time install (Windows 11 — winget is built in):
winget install cloudflare.cloudflared --accept-package-agreements --accept-source-agreements
After that, just run the server as normal. No second terminal, no account, no sign-in (press "Run Session" in the E-Learning Lab to start the session where users can connect)
If cloudflared is not installed the server still works locally — it just prints the install hint instead.
| Where you're accessing from | URL to use | VR works? |
|---|---|---|
| Same PC | http://localhost:8765 |
Yes |
| Same WiFi — flat preview only | http://192.168.x.x:8765 |
No (HTTP) |
| Quest 3 / any network | https://xxxxx.trycloudflare.com |
Yes (HTTPS) |
The tunnel URL changes each session (free tier limitation) but no account is required.
Interaction in the headset
| Input | Action |
|---|---|
| Right controller squeeze (grip) | Next scene |
| Left controller squeeze (grip) | Previous scene |
Trigger near a _tag object |
Grab / release object |
| Left thumbstick | Move forward / back / strafe (relative to head direction) |
| Right thumbstick left / right | Snap-turn 45° left / right (turns in place) |
| Timer transition | Auto-advances after configured duration |
Desktop preview (no headset required)
| Input | Action |
|---|---|
W / A / S / D |
Fly camera |
| Mouse drag | Look around |
→ / N |
Next scene |
← / P |
Previous scene |
AR mode
Right click on a scene to set in AR Mode
Limitations & Planned Next Steps
- 360 video formats — Only
.mp4and.webmplay in browsers. Existing.aviand.mkvfiles (e.g. from older Vizard projects) must be converted to.mp4(e.g. with ffmpeg) for WebXR playback. The Vizard runtime is unaffected and continues to use the original formats. .osgbscenes — Standard (non-Stand Alone) scenes in.osgbformat are not loadable by Three.js and will be skipped by the WebXR runner. Only.glb/.gltfscenes and recognised 360 media are served.- Multi-user networking — Not yet implemented in the WebXR runner (single-user only).
- Quiz UI — Not yet implemented in the WebXR runner.