Recorder

Recorder is a background service that stores simulation data (messages published on the RTI), temporarily in memory or permanently in a database file, called the log. The log can then be used to play back messages, in real time, or faster or slower than recorded. Each log contains metadata such as which launch configuration, scenario and participants part of the session, as well as when and for how long. Logs can also contain bookmarks, manually or automatically created during the session, e.g. highlighting a significant point in time in a scenario.

Most of the action happens behind the scene. Recorder automatically discovers clients and channels to record. Interaction with the application is mainly done via the RTI control panel.

voice-vcs Runtime and recorder control cards in the RTI control panel during playback

In evaluation mode, the Recorder is limited to in-memory recording only.

Installing

Download the package (Windows, MacOS or Linux). The install process is similar to that of the RTI.

Once installed, the Recorder runs as a background service on your computer, and you can use the RTI control panel to interact with it.

The service records all federations (one log directory each) and stores logs in:

Platform Data directory
Windows Data in the install directory
MacOS /Applications/Inhumate/Recorder/Data
Linux /opt/inhumate/recorder/data

On Linux, settings such as RTI_URL go in /opt/inhumate/recorder/conf/recorder.env.

Recording and Playback

By default, the Recorder follows runtime control. A new log starts when a scenario starts running, and it ends when the scenario ends or is reset. A few seconds of traffic from before the start are included, so initial state messages aren’t lost. Recording can be turned off from the control panel, and that choice is remembered between restarts.

Each log is a single SQLite file, <log id>.sqlite, in the data directory. Log files can be copied between computers. Files added to the data directory are picked up automatically. If the index gets out of sync, restart with --reindex.

Loading a log switches the federation to playback. Starting the scenario while playback is paused creates a copy of the log up to that point and continues recording live from there, which is handy for trying out a different course of action from a given point. See recorder control for marks, locking and other log operations.

In fast-time runs, the Recorder takes part in stepping automatically, so a log recorded in fast time plays back like any other.

Reference logs

A previously recorded log can be loaded as a reference log, for example a baseline run to compare new runs against. While a scenario runs or plays back, the reference log’s data is published in sync on the same channels, prefixed with ref/ (e.g. ref/rti/entity). By default it includes entities, positions, entity and timeline events, and measurements.

Command Line

The service is started as recorder -F -w -d <data directory>. To run the Recorder manually, for example against a different RTI or data directory:

recorder -r ws://rti-host:8000 -d ./data     # record to ./data
recorder                                     # record in memory only
recorder -c daily -d ./data                  # continuous recording, one log per day
Option Description
-r, --rti <url> RTI to connect to
-d, --data <dir> Data directory. Without it, logs are kept in memory only.
-f, --federation <id> Federation to record
-F, --multi-federation Record every federation, each in a subdirectory of the data directory
-c, --continuous [daily\|hourly] Record all the time, regardless of runtime state, in one log or a new log per day or hour
-D, --disabled Start with recording disabled
-p, --prebuffer <seconds> How much traffic from before the start to include (default 2.5)
-i, --reindex Rebuild the log index
--reference-log <id or path> Load a reference log on startup
--reference-filter-mode <mode> whitelist (default), blacklist or all
--reference-channels <list> Comma-separated channels for the reference filter
-w, --web Enable the web server, used for downloading log files (port 8001, change with --web-port)

The reference log options are ignored in multi-federation mode. Use the control panel or the CLI instead.

Working with log files

Log files can be inspected without an RTI. Listing commands print tab-separated output, which is handy for spreadsheets and scripts:

recorder info data/*.sqlite                              # summary of one or more logs
recorder channels data/LOG.sqlite                        # also: clients, measures
recorder messages -f 10 -t 20 data/LOG.sqlite rti/entity # messages on a channel, 10-20 s
recorder measurements -r 1 data/LOG.sqlite speed         # measurements, aggregated to 1 s
recorder insert-measurements -f speed.csv -i speed data/LOG.sqlite
recorder repair data/LOG.sqlite                          # fix a log that wasn't closed properly

insert-measurements adds externally computed measurements to a log. It reads a CSV or TSV file with a time column and either a value column or mean, min, max, duration and count columns.

To play back specific log files without a data directory, pass them as arguments: recorder -r ws://rti-host:8000 LOG.sqlite.


Copyright © Inhumate AB 2026