Omni
Omni is the backend for the SimStad exhibition. It has two responsibilities:
- Communication: a WebSocket service connects the visitor Interface to the Unreal Engine application.
- Content management: a Django database and admin site store the cities, map media, stories, legends, translations, and other exhibition content used by the Interface.
The communication framework can also be used independently of SimStad. See the general Omni guide for the WebSocket protocol and integration details.
Install Omni locally
Omni requires Python 3.10 and Pipenv. Clone the repository and create its environment:
git clone https://github.com/c-toolbox/SimStad-Omni.git
cd SimStad-Omni
python -m pipenv install
python -m pipenv shell
python manage.py migrate --run-syncdb
python manage.py createsuperuser
python manage.py runserver
The superuser account is required to administer exhibition content. Once the development server is running, open http://localhost:8000/admin/ and sign in with that account.
WebSocket communication also requires Redis. Install Redis for the normal configuration, or use Django Channels' in-memory channel layer for local development as described in the repository README. The in-memory option is not suitable for a multi-process production deployment.
For a deployed installation, use the server address instead of localhost and follow your organization's Django deployment, HTTPS, backup, and access-control practices. The Interface computer must be able to reach Omni's HTTP API and WebSocket endpoint.
Media synchronization
Omni stores uploaded and generated files below the Django MEDIA_ROOT, normally in its media folder. MEDIA_URL exposes those files over HTTP, but the installed Interface and Unreal Engine application still require local copies at their expected paths.
File synchronization is therefore essential for Omni to work with the other SimStad applications. Share the complete media folder with the Interface and media/rasters with Unreal's DigitalTwin/Datasets folder. Follow the Synchronization guide to configure Syncthing, direct local paths, or Windows directory junctions before testing exhibition content.
Admin website

The admin site is divided into two applications.
Communication
- Services create the host and client tokens used by Unreal Engine and the Interface.
- Live sessions show currently connected applications.
- Session logs record completed sessions and are useful when investigating restarts or connection problems.
For a SimStad installation, create one Service before creating the City Exhibit.
SimStad content
The SimStad models form a hierarchy. Configure them in this order so that each required dependency already exists:
- City Exhibits define the map extent, output resolution, orientation, communication Service, and featured Collections.
- Collections group related Scenarios into chapters shown on the Interface home screen.
- Scenarios combine Rasters into layers and add the visitor-facing story and Legend.
- Rasters store the map images and videos projected onto the city model.
- Legends explain colors and symbols used by datasets.
- Legend Symbols provide reusable graphics for Legend entries.
- Localized Strings define shared Interface labels and information text in Swedish and English.
- Tags provide optional categories for organizing Rasters.
Media folder structure
Omni stores uploaded media and generated previews under MEDIA_ROOT, normally the project's media folder:
media/
├── collections/ Collection preview images
├── legends/ Legend images attached to Scenarios
├── legendsymbols/ Symbols used in generated Legends
├── minimaps/ Reduced-size versions of Rasters
├── rasters/ Full-resolution Rasters
└── thumbnails/ Small Raster thumbnails
The Interface requires the complete folder because it uses Collection images, Legends, Symbols, previews, and full media. Unreal Engine only requires the contents of rasters, which must be available in its DigitalTwin/Datasets folder. See the Synchronization guide for local and multi-computer configurations.
API reference
The Interface loads content from Omni's HTTP API. Exhibition maintainers normally manage that content through the admin site and do not need to call the API directly. See the Omni API reference when developing another Interface or troubleshooting the data returned by Omni.
Legend pages are the main browser-facing exception. They render a Scenario description and Legend for display on surrounding screens. Their URLs and PIXILAB setup are documented in the Blocks guide.



