Skip to main content

Preset Packs

Nebulus preset packs are portable JSON files for sharing presentation and processing choices. They are not complete receiver profiles. A receiver profile contains local operational state such as selected adapters, radio channel, Link ID, keys, recording directory, and network destinations; those values never belong in a community preset.

The format is deliberately data-only. Nebulus does not execute scripts, load plugins, fetch assets, or interpret shaders from a pack.

How The Pieces Fit

ObjectLifetimeContains
Receiver profileLocal and editableHardware, radio, secrets, routes, telemetry, audio, VPN, decoder policy, and a reference to an OSD profile
OSD profileLocal and editableIndicator layout, visibility, graphs, scale, and overlay appearance
Application themeGlobalNebulus interface palette
Preset packInstalled, immutable, and versionedAny combination of portable OSD, theme, route, telemetry, and performance components

Installing an OSD component creates or refreshes a local OSD profile carrying the pack ID and version as provenance. A receiver profile references that OSD profile by local ID. This allows several aircraft to reuse one layout while still switching to the correct OSD when a receiver profile is selected.

Themes remain global. A pack may include one, but applying an OSD does not change the theme unless the theme component is selected in the preview.

Install And Apply

Open Settings → Preset packs and select Install file. Nebulus validates the file before showing it and presents each available component as a separate checkbox. Nothing is applied until Install and apply is pressed.

Installed versions are kept side-by-side. Updating from 1.0.0 to 1.1.0 does not modify a receiver profile automatically: install the new file, inspect its components, and apply it explicitly. Removing an installed pack keeps any derived local OSD and receiver profiles.

ComponentResult
OSDCreates or refreshes a local OSD profile and selects it for the active receiver profile
ThemeChanges the global GUI theme
RoutesReplaces the active profile's auxiliary payload routes
TelemetryReplaces protocol and filter policy while preserving the local MAVLink signing key
PerformanceApplies codec preference and RTP reorder policy

UDP route templates never carry a destination. They are installed disabled with a loopback placeholder and must be configured locally before use.

Install From A URL

The preset manager also accepts an HTTPS URL. Paste either of these into Preset or registry URL and select Open URL:

  • a direct .nebulus-preset.json URL
  • a registry index containing several preset versions
  • a normal GitHub blob URL; Nebulus converts it to the corresponding raw URL

Downloads run outside the receiver/UI thread and are limited to 512 KiB. HTTP is rejected except for localhost, 127.0.0.1, and ::1, which keeps local development convenient without allowing an Internet download to downgrade to plaintext. Browser builds additionally require the host to allow CORS. GitHub raw-content URLs already do.

Opening a URL still leads to the same component preview as a local file. A download never applies a profile on its own.

Export A Pack

Select Export current in the same section. Enter a namespaced ID such as pilotname.race-osd, a SemVer version, author, and license, then choose the components to include. Nebulus writes a .nebulus-preset.json file.

Export is structural rather than a redaction pass: the public Rust types have no fields capable of holding these values:

  • WFB and MAVLink signing keys
  • USB device identities
  • radio channel, width, offset, or Link ID
  • recording and filesystem paths
  • VPN credentials
  • UDP hosts and ports
  • logs, history, or runtime metrics

The schema is available at apps/nebulus/presets/schema-v1.json. The repository also includes an openipc-standard example.

Pack Shape

{
"$schema": "https://raw.githubusercontent.com/neelsani/openipc-rs/master/apps/nebulus/presets/schema-v1.json",
"schemaVersion": 1,
"id": "pilotname.race-osd",
"version": "1.0.0",
"name": "Race OSD",
"author": "Pilot Name",
"license": "MIT",
"minimumNebulusVersion": "0.1.29",
"components": {
"osd": { "name": "Race OSD" },
"theme": "macchiato",
"performance": {
"codecPreference": "auto",
"rtpReorder": false
}
}
}

schemaVersion governs the JSON structure. version identifies the immutable pack release. Nebulus rejects unsupported schema versions, malformed SemVer, packs requiring a newer app, unknown fields, oversized files, and invalid component ranges.

OSD telemetry indicators consume Nebulus's normalized telemetry state rather than a route ID. A selected route with the Telemetry to OSD action can feed that state from MAVLink, MSP, or CRSF, so an OSD layout remains reusable when a pilot changes radio ports or telemetry protocols.

Community Distribution

A pack can be hosted as an unchanged JSON file in a GitHub repository, release, or any HTTPS static host. A registry is another static JSON file; it does not run a server-side API or install code.

{
"$schema": "https://raw.githubusercontent.com/neelsani/openipc-rs/master/apps/nebulus/presets/registry-schema-v1.json",
"schemaVersion": 1,
"name": "Community race presets",
"description": "OSD and routing presets maintained by our group.",
"homepage": "https://github.com/example/nebulus-presets",
"presets": [
{
"id": "example.race-osd",
"version": "1.2.0",
"name": "Race OSD",
"author": "Example FPV",
"license": "MIT",
"description": "Compact race overlay.",
"downloadUrl": "race-osd.nebulus-preset.json",
"sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
}
]
}

downloadUrl may be absolute or relative to the registry file. IDs and versions must match the downloaded pack. When sha256 is present, Nebulus also verifies the exact downloaded bytes before parsing them. Registries can list several versions of one ID; installing a newer version remains an explicit choice.

For GitHub, commit the registry and packs together, then give users either the raw registry URL or its ordinary github.com/.../blob/... page URL. Pinning downloadUrl to a commit SHA makes the advertised version immutable. The repository includes a working registry.json and its registry-schema-v1.json.

Author and license fields are descriptive metadata, not proof of identity. Nebulus does not currently sign packs or attest their publisher, so a community registry should publish the SHA-256 field and distribute its registry URL from a trusted page. A checksum detects a changed pack, but it does not protect against an attacker who can replace both the registry and its checksums. Even an untrusted pack cannot execute code or carry the local-only fields listed above, but users should still inspect its component preview before applying it.