Changelog
0.0.1 - 2026-11-12
The first version of BeamSetto: one Python application that works in two steps (read the
EVO tracks, build the BeamNG levels), each usable on its own. It reads the game's files from a
folder that holds them under their game paths. It doesn't read content.kspkg: getting the files
into a folder is up to you, and the project doesn't provide or describe a way to do it. Tested
with Assetto Corsa EVO 0.9.1 and BeamNG.drive 0.40.5; Laguna Seca and the Nürburgring were built
and driven in game. Not converted yet: sound, fog and haze, EVO's road variation and imperfection
layers, layered materials blended by a mask, decals on walls, start lights, the pit lane's AI
road, and the trees' branch and leaf flutter. Released under the GNU Affero General Public
License v3 (AGPL-3.0-only).
Added
beamsetto, the one command of the tool, with a group of subcommands per step (evo,beamng), and-q/--quiet(errors only, no progress),-v/--verbose(debug messages) and-V/--version. It runs with uv:uv run beamsetto, oruv tool install .to have it everywhere.beamsetto evo schema: reads the game's data schemas from yourAssettoCorsaEVO.exeand caches them; nothing of the game is shipped with the tool.beamsetto evo tracks: the tracks of the game with their layouts and game modes.beamsetto evo export: writes everything a track is made of, as the game reads it, from a folder holding the game's files.- One file per part of the circuit (track, surfaces, layouts, objects, instances, lights,
decals, splines, zones, start positions, marshals, baked lighting, sound, cameras,
particles);
--partexports only some. - Every object placed exactly where the game places it, sub-scenes included.
- Per layout: its game modes, AI line, pit line, control points, rubber map, and the menu's picture and map of it.
- The meshes (every LOD), materials (resolved through their parents) and textures (the game's own data as ordinary DDS files) the track reaches, written once for all tracks.
- Runs on every CPU it may use (its affinity; at most 61 on Windows); a run only rewrites the assets that changed in the game.
- Missing or broken game files are listed with what references them.
- One file per part of the circuit (track, surfaces, layouts, objects, instances, lights,
decals, splines, zones, start positions, marshals, baked lighting, sound, cameras,
particles);
beamsetto evo info: what an export holds, part by part.beamsetto.evo, the same as a Python library (export_tracks).beamsetto beamng list: the exported tracks, their layouts and the levels they become.beamsetto beamng build: builds a BeamNG.drive mod per track, with a level per EVO layout, each part of the track in the BeamNG system made for it, as BeamNG builds its own levels:- every mesh placed where EVO places it (checked to 1 mm), with EVO's levels of detail; roads, kerbs and every driving surface stay EVO's exact meshes;
- collision exactly where EVO has it, with the grip of each EVO surface;
- EVO's materials and textures (normal maps converted, packed maps split, sRGB maps read as EVO's sampler reads them); layered materials with constant layer weights drawn with EVO's weights; the asphalt's fine detail (EVO's world-projected detail maps) as BeamNG detail maps;
- EVO's decorative landscape as a terrain: its layers, textures, tiling and colours, within millimetres of EVO's ground, under every road and run-off (under the lower road where one passes under another, as at Suzuka's crossover), quick to load;
- EVO's grass as BeamNG billboard grass made of EVO's own grass picture, at EVO's height and density (its density set by BeamNG's graphics setting), never on roads, kerbs or gravel traps; EVO's small plants as ground cover too;
- trees, crowds and props as forest items, each exactly where and as EVO draws it, stretch included; the few that collide in EVO collide in BeamNG too;
- wind: the trees and bushes EVO sways bend from their base in BeamNG's forest wind, and the grass sways at EVO's intensity;
- EVO's sun, date and time, or your own with
--whenand--location; - a view distance that reaches EVO's farthest scenery from anywhere on the circuit (or EVO's own far plane), up to BeamNG's 25 km;
- a spawn point (and big-map travel point) at every EVO start position: garages, pit boxes, pit lane, grid, hot-lap starts, car parks…, facing as EVO's cars do;
- EVO's own menu picture and map of each layout as the level's (and its AI race's) preview;
- EVO's lights as BeamNG's point and spot lights at EVO's brightness, switched on at night;
- EVO's ground decals (tyre marks, paint) as BeamNG decal roads of EVO's size, the right way round (the tyre marks EVO flips get mirrored textures);
- the racing line's rubber, from EVO's per-layout rubber map, as BeamNG rubber decals with EVO's colour and gloss per asphalt;
- racing: a BeamNG quick race (and the freeroam time trial BeamNG makes of it) for every layout with timing lines (Nürburgring Touristenfahrten as an A-to-B), with EVO's timing lines, race spawn and hot-stint spawn; an invisible AI road along EVO's own AI line, between its track limits, for BeamNG's AI and traffic, which also draws the circuit on BeamNG's minimap and big map;
- an AI race per layout (a BeamNG mission) on EVO's grid: laps, number of opponents and their cars chosen on BeamNG's mission screen;
- EVO's TV cameras as camera bookmarks;
- the level's details in BeamNG's level list from EVO's data: venue, country, region, track type and length, game modes, altitude, grid and pit boxes, size; credits to Assetto Corsa EVO and BeamSetto;
- runs on every CPU it may use (at most 61 on Windows); only what changed is written again, and the shared files no level uses any more are deleted.
beamsetto beamng install: links built mods into BeamNG.drive'smods/unpacked.beamsetto.beamng, the same as a Python library (build_track).- A
Dockerfile: the command in a small image (Python 3.14, uv, the locked dependencies, a non-root user), the current folder mounted as its working folder. - GitLab CI:
.gitlab-ci.ymlruns the checks ofmake check(ruff and mypy --strict) on every branch, beside Auto DevOps, which builds the image.