Skip to content

Chapter 6 of 6

UI, Skins, Sound, and Scripting

The ui folder of a car mod holds the metadata and preview imagery shown in the game's selection menu. ui_car.json is a structured file describing the car's name, brand, class (such as GT3 or F1), search tags, price, power, torque, mass, topSpeed, acceleration, braking and handling ratings, a freeform description, and additional specs. A logo.png displaying the manufacturer's badge often sits alongside it. For tracks, ui_track.json provides the equivalent name, country, length, pitboxes count, description, and spec data. Each livery lives in its own subfolder under the skins directory, containing that skin's textures, a preview.jpg so the livery shows up in the selection menu, a ui_skin.json with skin-specific metadata (driver name, team, country, number, sponsors), and a skin.ini that defines DRIVER_NAME, TEAM_NAME, SUIT, HELMET, GLOVES, NUMBER, and FLAG for the in-cockpit driver model.

Sound modding centers on FMOD Studio, with car sounds stored as compiled .bank files inside the sfx folder. The guid.txt file in that same folder maps FMOD event GUIDs back to the friendly text names Assetto Corsa expects, so renaming or remixing sounds is a matter of editing GUIDs rather than code. Common FMOD events include Engine (the main engine sound that varies with RPM and load), Skid (tire skidding when wheels lose traction), plus extras such as transmission, aero, and limiter sounds. FMOD Parameters are variables like RPM, Load, and Speed that drive sound behavior; Pitch (often RPM-linked) changes playback speed, Volume sets loudness, and Reverb simulates environmental echo. Cars can have different mixes for Interior cockpit views versus Exterior external cameras, and a music.bank stores the menu and replay music. For digital dashboards, a fonts folder inside the car mod can hold custom font files used by digital_instruments.ini.

Python scripting in Assetto Corsa powers in-game apps, widgets, and background scripts. Apps are installed under apps/python/[app_name] in the AC directory and follow a simple lifecycle: acMain(ac_version) runs once when the app starts to perform initialization, and acUpdate(delta_t) is called every frame with the time elapsed since the previous frame so the app can update its display. Helpers such as ac.initApp() return an app ID, ac.addLabel() and ac.addButton() create UI elements, ac.log() writes debug messages, and a large family of ac.getCar*() functions pulls live telemetry including speed, RPM, gear, fuel, throttle, brake, steer angle, slip, slip angle, slip ratio, grip, friction, temperature, pressure, damage, position, velocity, and much more for each individual wheel. ac.getSessionState() retrieves lap time and position, while ac.getCarTyreSlip*() functions expose detailed slip data per wheel position (front, rear, left, right, or any combination such as front-left or rear-right) for advanced telemetry apps. Content Manager's App Manager provides a graphical way to install, configure, and toggle these apps without manually editing files.

All chapters
  1. 1Modding Foundations: Formats, Tools, and Folder Structure
  2. 2Car Physics Configuration Files
  3. 3Visual Assets: 3D Models, Textures, and Shaders
  4. 4Track Modding Essentials
  5. 5Custom Shaders Patch (CSP) and Extensions
  6. 6UI, Skins, Sound, and Scripting

Drill it

Reading is not remembering. These come from the Assetto Corsa Modding Cards deck:

Q

What is the primary 3D model format used in Assetto Corsa?

.kn5

Q

Which file format is standard for textures in Assetto Corsa to ensure optimal performance?

.dds (DirectDraw Surface)

Q

What text-based file format is used for almost all configuration in Assetto Corsa modding?

.ini

Q

What is the purpose of the data.acd file?

It is an encrypted archive of the car's physics and configuration data (the data folder).