RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

Server CommandsGE UtilitiesGame Engine MainNavigation GraphScreenshot CaptureServerServer ConnectionSpawnpoint ManagerSimulation TimeVehicle SpawningSuspension Frequency Tester
Gameplay AchievementGameplay CityDiscoverForce FieldGarage ModeMarker InteractionParking SystemGameplay Playmode MarkersGameplay PoliceGameplay RallyGameplay Rally LoopGameplay Raw POIsGameplay Skidpad TestSpeed Trap LeaderboardsSpeed Traps and CamerasGameplay StatisticsTaxi Ride SystemTraffic SystemVehicle PerformanceWalking
Rally Audio ManagerRally Camera Path PlayerRally ClientRally Cut CaptureRally EnumsRally Extension HelperRally GeometryRally ManagerRecce ManagerRecce AppRecce SettingsRally Settings ManagerSnap-to-RoadTraffic Exclusion ZonesRally UtilityRally Vehicle CaptureRally Vehicle Tracker
Rally CodriverRally Mission SettingsRally PacenotePacenote GeneratorPacenote WaypointNotebook PathStructured Pacenote DataSystem PacenotesWaypoint Types
Library CompositorStructured Pacenote SchemaText CompositorVisual Compositor

UI

Resources

BeamNG Game Engine Lua Cheat SheetGE Developer RecipesMCP Server Setup

// RLS.STUDIOS=true

Premium Mods for BeamNG.drive. Career systems, custom vehicles, and immersive gameplay experiences.

Index

HomeProjectsPatreon

Socials

DiscordPatreon (RLS)Patreon (Vehicles)

© 2026 RLS Studios. All rights reserved.

Modding since 2024

API ReferenceGE Extensionsgameplayrallynotebookstructured

Visual Compositor

Generates visual pacenote icon data for the HUD display. Converts structured pacenote attributes (corner severity, modifiers, cautions) into icon descriptions consumed by the CEF UI layer.

Generates visual pacenote icon data for the HUD display. Converts structured pacenote attributes (corner severity, modifiers, cautions) into icon descriptions consumed by the CEF UI layer.


Constructor

local VisualCompositor = require('/lua/ge/extensions/gameplay/rally/notebook/structured/visualCompositor')
local vc = VisualCompositor(textCompositor)

Public API

FunctionSignatureReturnsDescription
C:compositeVisual(pacenote, noteAttrs, distBeforeMeters, distAfterMeters)table[]Generates array of visual icon objects for a pacenote
M.init(textCompositor)nilinit

Internals

FunctionSignatureDescription
C:_getMaxTransitionDistance()Returns level 3 threshold from text compositor config
C:_getCornerData(noteAttrs)Maps corner attributes to visual turn type, direction, modifiers

How It Works

  1. Corner data extraction: Maps corner severity/direction to visual icon types using the text compositor's config (severity lookup finds closest configured value)
  2. Caution handling: Prepends caution or double-caution icons when noteAttrs.caution > 0
  3. Corner icons: Creates turn icons with direction (left/right mirroring), severity text, radius change modifiers, and "don't cut" badges
  4. Modifier icons: Iterates modifier fields (modNarrows, modWater, modJump, modCrest, modBumpy, modBump) up to max 4 notes total
  5. Finish line: Always appended when noteAttrs.finishLine is set
  6. Distance/into decoration: First icon gets "into" styling if previous note is within transition distance; last icon gets the distance string

Visual Icon Object Structure

Each icon in the returned array contains:

{
  id = "pacenote_name_1",     -- unique ID for UI
  pnId = pacenote.id,         -- pacenote reference ID
  type = "turn3",             -- icon font ID
  isLeft = false,             -- mirror icon for left turns
  size = 2,                   -- container size in REMs
  turnTypeValue = "3",        -- text overlay (1-6, SQ, etc.)
  turnModifier = "opens",     -- informational modifier icon
  colorNoteIcon = "#fff",     -- icon color
  colorNoteText = "#fff",     -- text color
  background = {
    color = 'var(--bng-cool-gray-600)',
    strokeColor = 'var(--bng-cool-gray-500)',
    opacity = 0.6
  },
  isInto = false,             -- "into" chained background style
  intoColor = nil,            -- into color override
  distance = "150",           -- distance string (last icon only)
  colorDistance = "#fff",      -- distance text color
  additionalNote = {          -- top-right badge (cut/don't cut)
    color = '#fff',
    icon = "dontCut",
    text = nil
  }
}
-- Generate visual icons for a pacenote
local vc = VisualCompositor(textCompositor)
local icons = vc:compositeVisual(pacenote, noteAttrs, 80, 200)
-- icons is an array of visual icon objects sent to guihooks.trigger('showVisualPacenote2', ...)

See Also

  • Library Compositor - Related reference
  • Structured Pacenote Schema - Related reference
  • TextCompositor - Structured Pacenote Text Generation - Related reference
  • Gameplay Systems Guide - Guide

Text Compositor

Converts structured pacenote data into human-readable text strings for co-driver audio. Handles distance rounding, unit conversions, and phrase enumeration for TTS audio generation.

Notebook Tests

Unit tests for notebook structured data serialization and deserialization. Validates that structured pacenote fields survive round-trip save/load.

On this page

ConstructorPublic APIInternalsHow It WorksVisual Icon Object StructureSee Also