1.7.20
Swofty Launcher for F1 25 1.7.20 gives each profile its own addon list, warns when an addon career sits on the Steam save and offers to restore it, lets you resize table columns, installs a build faster, stops a freeze when a session starts, and fixes crashes on teams with three cars and on replays of large grids.
Crashes
- A team with more than two cars no longer ends the game as the session loads. Session strategy pairs only the first two cars of a team; the others stay unpaired and still race.
[strategy]inloader.lognames each such team once per session.SWOFTY_TEAMMATE_PAIRS_GUARD=0turns it off. - Replays and flashbacks on large grids record every car's state in full. Before, a state too big for the recorder's buffer was dropped, and going back through the replay could close the game. The
[replay]lines inloader.lognote each buffer that was grown. When a state still can't be held, it is left out of the recording and the replay keeps that car's current state. If the game closes after that, the crash window names the replay and suggests turning Flashbacks off.SWOFTY_REPLAY_GRID_GUARD=0turns the guard off. - A frame that places more than 128 buffers on one of the game's upload heaps no longer writes the extra record over the heap's command list data. The extra record is skipped.
[gfx] placed recordsinloader.logshows the most records a frame has used, every 15 seconds and at each new maximum above 64, and the crash report's game state includes it.SWOFTY_PLACED_RECORD_GUARD=0turns off the skip; the counting stays on. - The game's 30-second hang watchdog is now also held back while a session or front-end load is still working after its flow has started (up to 5 minutes), not only while the flow is starting, as long as the game has been silent for under 180 seconds. When it isn't held,
[core] boot watchdog grace declinedinloader.loggives the reason once: shutdown flag set, 180 seconds reached, no flow loading, or the newest flow too old.
Graphics
SWOFTY_OVERLAY_FG=1draws the in-game overlay into the game's back buffer before frame generation, so generated frames carry it. The overlay is one frame late. Off by default;"overlay_fg": trueinswofty/assets.jsondoes the same. Where it can't draw, one[overlay]line inloader.logsays why (overlay, logging).SWOFTY_SRV_CLAMP=1clamps a shader resource view that asks for more array slices or mip levels than its texture has, and skips one that starts past the last slice. Off by default; it must be exactly1.[gfx] srvlines inloader.logshow each clamp, and[gfx] srv clamp is offshows it isn't armed.
Performance
- Starting a session no longer freezes the game for one to five seconds while the core checks which cars the AI teams use. The check now remembers its answers for the rest of the session start: 20 checks took 1.5 ms in all in testing, where they took 1.5 to 4.6 seconds before.
- A build is placed into the game folder with hard links instead of copies, so Play spends less time writing files. Rebuilding a profile never rewrites a file the game folder links to. When linking fails, for example across drives, the install falls back to copying. The install output says
installing: hard linksorinstalling: copy, with the number of files linked and copied.SWOFTY_INSTALL_COPY=1copies every file.
Launcher
- Table column headers can be dragged to resize. Double-click a handle to put the column back to its default width. Columns can't go narrower than 48 pixels, and widening one takes the room from the fixed-width columns you haven't resized.
- Each profile lists only its own addons and the built-in ones. An addon you install joins the active profile, turned off, at the end of the list. An addon installed from
vanillajoins no profile. Add addons above the list opens a searchable picker of installed addons the profile doesn't have, and the Addon Browser shows Add to with the profile's name on an addon installed through another profile. Remove from with the profile's name, in the addon's panel, takes it out of that profile only and keeps its settings. Profiles you already have keep the addons they list now;vanillastill shows every installed addon (adding an addon to a profile). - Remove in an addon's panel is now Uninstall, which deletes the addon's files and takes it out of every profile.
- Uninstalling an addon no longer freezes the launcher while its files are deleted.
- A profile with Use launcher saves off keeps its careers in the Steam save. If F1 25 was started from Steam without the launcher, it can drop addon careers, such as Progressive Career, from that save. The launcher checks at its start and when F1 25 closes outside it. When it finds careers that were probably lost, the Saves page, the Addons page and the play bar show the careers, the date of the version that still has them and Restore. Restore keeps the save it replaces as
before-restore. Every session on the Steam save now writesbefore-sessionandafter-sessionsnapshots to the Steam vault, and the Saves page warns about addon careers on it (Addon careers on the Steam save). - Restoring a save right after a Play session or another restore ends waits up to 2 seconds for it to let go, instead of refusing at once.
- When Play is refused because game files changed, the message now tells missing files from edited ones. If both are present it says how many of each and that restoring the game files fixes both; if only files are missing it says so, and the message names the files or counts them.
Addons
- F1 25 RE-Optimization is no longer in the launcher download. Install it from the Addon Browser like any other addon. It comes from xanpavle, and its page there describes its settings (Swofty's addons).
- Each Classic Seasons season and each season box from an addon now has a Time Trial leaderboard of its own, with its own cars and its own saved times. Before, boxes copied from the F1 2025 list shared one board, and a Time Trial counted the cars of every list on it, which could pass the game's limit of 26 cars.
- A saved Grid Editor change on a Classic Seasons season's line-up no longer stops Play with "no row matches, even after every addon's changes". Classic Seasons adds those line-ups when the game starts, after the build, so the build skips the change and lists it as skipped; the season's own line-up loads as before.
- A build now warns when an addon puts files in a folder such as
f1_2026_vehicle_package/at the game root, where the game never reads them. The warning names the addon, the folder and the number of files, and says the folder belongs under2025_asset_groups/.
Career
- Career Editor can set the car number of your own driver ("Driver (you)"). Before, it failed with "the core's set_car_number did not write the number".
- Row ids that addons'
add-rowoperations keep are now kept per profile. When an id clashes in one profile, the row moves to a new id in that profile only; other profiles keep the id their careers hold. Existingrow-ids.jsonfiles load as they are (kept ids).
Addon authors
content.package1.2 has aleaderboardfield:"box"(the default) gives the package its own Time Trial leaderboard,"addon"shares one across the addon,"group:<name>"shares one across the packages that name the group, and"stock:<label>"uses one of the game's.database.entrant_list_setcan set the label itself. A launcher before 1.7.20 ignores the field (Leaderboards).leaderboards.leaderboard_descriptorrows have ids up to 255, kept between builds (stat ids).- The
set_car_numbercareer operation takes the driver's save id: the stat id, with the domain in bits 14 and 15. A player driver passes its full id. - Garage art surfaces are written with the game's streaming descriptor fragment.
team.garagerecords are still off by default;SWOFTY_GARAGE_ART=1applies them andSWOFTY_GARAGE_DESC=0writes the earlier two-fragment surfaces (garage).