Revert to saved M{{mapBank.pending}}M{{mapBank.pending}} switch pending — {{t.mapSwitchBlockReason || 'lift throttle to apply safely'}}.
Monitoring only - live data is shown but your tune is not affecting the car. Hit Connect to control the engine.
{{mapBankHydrationWarning}}
{{tr(grp.title)}}
{{tr(it.label)}}
APP v{{appVersion}} IS PAIRED WITH AN OLDER/CACHED VEHICLE CONTROLLER{{ctrlVersion ? ' (v' + ctrlVersion + ')' : ''}} — edits, resets and the DYNO are disabled until they match. Close BeamNG COMPLETELY and relaunch (the game caches vehicle code). Still here after a restart? Delete older OE ProTune zips from your mods folder, then use Clear Cache in the launcher.
{{tr('Yellow = investigate, red = lift. The values a tuner watches during a pull.')}}
{{tr(g.label)}}{{tv(g.key, g.unit)}}
{{tr(g.label)}}
{{tr('Dyno / AFR')}}
{{tr('Full-throttle pull from low RPM to the limiter. Red = engine (crank) HP, yellow = torque (lb-ft). First pull saves a baseline. Runtime wheel HP is MEASURED through the drivetrain like a hub dyno - the loss slider on Limiters is just your crank-estimate factor.')}}
Start gearStart RPM(auto)
Status{{dynoStatus}}
Tip: pull in 3rd gear or higher for comparable numbers - low gears read lower because the engine spins up so fast its own inertia eats torque, exactly like a real inertia dyno.
Baseline (crank){{dynoBasePeak().hp.toFixed(1)}} hp @ {{dynoBasePeak().hpRpm}} | {{dynoBasePeak().tq.toFixed(1)}} lb-ft
This pull (crank){{dynoCurPeak().hp.toFixed(1)}} hp @ {{dynoCurPeak().hpRpm}} | {{dynoCurPeak().tq.toFixed(1)}} lb-ft
≈ wheel HP (-{{(settings.drivetrainLoss||15)}}%){{(dynoCurPeak().hp*(1-(settings.drivetrainLoss||15)/100)).toFixed(1)}} whp
Gain vs baseline{{dynoGain('hp') >= 0 ? '+' : ''}}{{dynoGain('hp').toFixed(1)}} hp ({{dynoGainPct() >= 0 ? '+' : ''}}{{dynoGainPct().toFixed(1)}}%) / {{dynoGain('tq') >= 0 ? '+' : ''}}{{dynoGain('tq').toFixed(1)}} lb-ft
Cursor{{dynoText || 'hover the graph to scrub'}}
Live AFR{{afrText()}}
Wheel power (live est.){{tv('wheelPowerHp','whp')}}
{{tr('Build Card')}}
{{tr('A shareable spec sheet for your build. Do a dyno pull to lock in VERIFIED power, then hit Snapshot Mode and screenshot it to flex on the crew.')}}
{{!cardPower() ? tr('NO DATA - drive it hard or dyno it') : (cardPower().verified ? (tr('DYNO VERIFIED - crank') + (cardPower().date ? ' · ' + cardPower().date : '')) : (cardPower().ecupeak ? tr('ECU PEAK - logged while driving (dyno it for the curve + gains)') : tr('RATED - run a dyno to verify')))}}
Min health / Peak IDC{{logStat('engineHealth','min')}}% / {{logStat('injectorDuty','max')}}%
{{tr('Log Navigator')}}
Drag on the lanes to scrub. Drag the window on the Navigator strip to pan; drag its edges to zoom.
Parameter list (at cursor)
{{p.label}}{{p.val}}
Record a log (Connect + drive), then scrub the cursor to read every channel here.
{{tr('Mixture Map')}}
Auto learns from strict steady-state driving and clean WOT pulls. Pull learning starts only after tip-in fuel has cleared, TPS is steady, RPM is rising in one forward gear and no limiter, shift, power-adder, misfire or fuel-pressure fault is active. Pull-only cells need two agreeing passes before Apply marks them ready. Idle control and true closed-throttle coast are ignored; real low-throttle cruise is allowed. Evidence expires after 30 minutes. Start below the region you need and use a taller gear on very fast cars. Red adds fuel; blue removes it.
Applying to: {{mixApplyTarget()}} Apply changes Ready cells only, consumes their evidence, then requires a re-drive.
This is the game PC's authoritative tune catalog. Loading, presets and reset apply to the same live ECU; saving, deleting and importing remain on the game PC.
Waiting for saved tunes from the game PC...
Tune name
Presets
Factory reset
Switchable MAPs
Four live calibrations, one working tune. You always edit a separate working copy; a MAP slot only changes when you press Save.
Tune the car live first, then press Save to M1–M4. The saved slot becomes the ACTIVE MAP (save-as); the previous slot keeps its last saved copy.
Empty slots don't need activating first. Saving over a different occupied MAP asks for a second CONFIRM click — and so does Clear.
Per-MAP: rev limit, launch, boost control incl. Boost by Gear / Speed, pops and the other performance settings. Shared by all four: engine hardware, sensors, safety systems and table axes.
If an action would replace working edits, the tuner asks whether to Save, Discard or Cancel. Store ECU saves the whole recovery package and never overwrites a MAP slot.
M{{b.index}}ACTIVEPENDINGDEFAULTEMPTY
Saved copy unchanged · live working tune has edits{{b.name}} · base target peak {{b.peakBoostKpa | number:0}} kPa abs
Name it, tune live, then Save to M{{b.index}}.
Wheel / keyboard bindings
Open BeamNG's native binding editor so keys, controllers and steering-wheel buttons work normally and conflicts are visible. No default keys are assigned.
Quick-save backups
Backups store the whole tune package, including all four Switchable MAPs, and restore all four when loaded. A backup made before the Switchable MAPs update holds a single tune: loading it leaves your MAPs alone and becomes the unsaved working tune instead.
Previous Store ECU save (kept automatically)
Backup {{s.index+1}}: {{s.name}}
Tune library (Save As / Open)
Opening a tune saved before the Switchable MAPs update never touches your MAPs: it loads as the unsaved working tune, and you choose Save to M1–M4 to keep it on a slot (an empty slot takes the tune's name automatically). Newer library saves carry all four MAPs and restore them.
{{e.name}}
Share this tune
Import a shared tune
A pasted tune code carries one tune, so importing it never touches your four MAPs — it becomes the unsaved working tune and you choose where to Save it. A complete tune file carries all four MAPs and replaces them.
Shared tune files already found on the game PC are listed below. Import or refresh files from Basic Studio on the game PC.
Live gauges in any browser — second monitor, laptop, or a phone/tablet on the same private local network. Read-only: the dash shows the ECU, it can never change the tune. Network addresses and QR codes stay hidden by default for stream safety.
Phone access is working from a setup done by an earlier version, so nothing is broken and you do not have to do anything. When convenient, run EnableRemoteDash_LAN.bat once to get the full verified check (network profile, firewall, IP Helper, both ports and the relay).
SERVER COULD NOT BIND ITS PORT — usually an older Remote Dash relay is still holding it. Click Open setup folder, double-click EnableRemoteDash_LAN.bat, accept the Windows administrator prompt, then click the server button once to stop and again to restart.
PHONE ACCESS NEEDS A ONE-TIME VERIFIED SETUP — click Open setup folder, double-click EnableRemoteDash_LAN.bat, and accept the Windows administrator prompt. It selects a physical Private adapter, checks IP Helper, the firewall, both ports and the relay before reporting success. Then toggle the server OFF and ON here. No address is printed or copied by the setup tool.
{{remote.setupMessage}} Windows Settings → Network & Internet → your active connection → Network profile type → Private.
PHONE ACCESS DROPPED — the Windows relay stopped (usually after the PC sleeps or the network reconnects). The PC address above still works. Double-click ReviveRemoteDash.bat and accept the administrator prompt.
PHONE ACCESS CAN'T START — no safe private-network address was found this session. Disconnect VPNs, confirm the Windows connection is Private, then run EnableRemoteDash_LAN.bat again and restart the server.
Phone / LAN address{{shownUrl(remote.lanUrl)}}
Screens connected{{remote.clients}}
Protocolv{{remote.protocolVersion}}
Network address & QR are hidden — safe to show on stream. Browser clients are not sent the PC's adapter list or setup diagnostics, and Copy Safe Diagnostics removes addresses, URLs, adapter/WiFi names, user names and paths. Reveal the address only when entering it on your own device; it hides again automatically after 60 seconds or when you leave this page.
Studio writer{{remote.writerConnected ? (remote.writerLabel || 'CONNECTED') : 'Waiting for first tuning browser'}}
Point your phone, tablet or laptop camera at this code. Use the same private local network; Guest WiFi, VPNs and router client-isolation modes can block device-to-device access.
How to use
Both copied addresses open the Basic Dashboard first. On a second monitor, use the PC URL. On a phone or laptop, use the Phone / Laptop URL ending in :8237 or scan the QR code — never use 127.0.0.1 on another device. Both devices must be on the same private local subnet. Avoid Guest WiFi, disconnect VPNs while testing, and temporarily disable phone cellular data if it keeps switching away from WiFi. If support is needed, use Copy Safe Diagnostics.
Basic Dashboard, Basic Studio and Pro Studio
BASIC DASHBOARD is the original gauges, Dyno, Runtime and Graph display. BASIC STUDIO is the approachable full tuning app. PRO STUDIO is the professional desktop workspace with the same live calibration and includes its own Logging workspace. Gauge and logging views remain read-only.
Pro Studio editing
{{remote.write ? 'First tuning browser gets the one writer slot automatically' : 'Locked — all browsers are view-only'}}
PRO STUDIO EDITING IS ON FOR THIS GAME SESSION. The first Basic Studio or Pro Studio browser becomes the only writer automatically; other browsers remain read-only until that writer closes or you revoke it. Dangerous reset/preset/axis commands stay separately blocked above. Keep this in-game app open while tuning remotely; closing it saves recovery and locks browser editing.
Enable the dash server above first, then a remote-editing switch appears here.
This browser mirrors the live ECU. Tune files, Store, server setup and writer administration stay on the game PC.
Editing role{{remoteClient.authenticated ? 'WRITER — changes enabled' : (remoteClient.writerConnected ? 'READ ONLY — another Studio is writer' : 'READ ONLY — enable Pro Studio Editing in BeamNG')}}
Last command{{remoteClient.commandPhase ? (remoteClient.commandPhase | uppercase) : 'None'}} {{remoteClient.commandMessage}}
The live ECU has unsaved changes. Store them from the in-game app before changing vehicle or closing the game.
{{tr('Help')}}
{{help}}
{{tr('Help Me — Tune Doctor')}}
{{diagIntro()}}
{{d.title}}
{{d.advice}}
Naturally aspirated engine — the Boost table has no effect on this car.
VE Table fuels the engine in MODELLED mode only — switch Fuel equation on Fuel Setup to Modelled to use it. In Traditional mode the VE table is ignored. Editing VE invalidates Mixture Map evidence learned from the old values.
Shifts your Base duty slider per cell — 50 = neutral. Sculpt high-RPM columns DOWN to calm big-turbo boost hunting.
Amt
KEYBOARD TUNING ON (driving paused, Esc exits) arrows move, Shift+arrows select, Q / A adjust (Shift = x5), type a number then Enter, O smooth, Ctrl+I interp, Ctrl+C/V copy paste, K 3D view, F I L V B W jump tables, Ctrl+S store
Drag rotates, wheel zooms, click a point to select that cell (Ctrl = column, Shift = row). Edit with the bar above or keyboard mode.
☑ 3D☑ ColoursDrag to rotate • wheel to zoom • click a node to select
TuningLIVE ECU
{{rowLabel(tr(row[0]))}}{{tv(row[1],row[2])}}
Limits / Engine ProtectionSAFETY
{{rowLabel(tr(row[0]))}}{{tv(row[1],row[2])}}
Knock Level{{tv('knockLevel','')}}
Knock Retard{{tv('knockRetard',' deg')}}
Live InstrumentsSENSORS
ECT ({{tempU()}}){{tempVal('ectC')}}
IAT ({{tempU()}}){{tempVal('iatC')}}
OIL ({{tempU()}}){{tempVal('oilC')}}
EGT ({{tempU()}}){{tempVal('egtC')}}
{{t.isDiesel ? 'AFR' : 'LAMBDA 1'}}
TP (Main){{(t.tps || 0) | number:0}}%
Boost by Gear / Speed
The Boost Target table is the base aim; targets are absolute kPa (zero gauge boost = live barometric pressure). In Closed Loop these tables add a pressure trim; in Open Loop pressure trims are ignored. Typical target trims are ±10–40 kPa (1.5–6 psi). Wastegate duty trims work in both modes and multiply feed-forward duty (60% base with -30% trim = 42%); in Gear + Speed the two duty trims add first and the sum is capped at ±100% (-30% and -20% act as -50%). Speed uses BeamNG ground speed, not driven-wheel speed. Each M1-M4 MAP saves its own shaping tables.
Not available on this engine. A naturally aspirated engine has no boost actuator; a supercharger's boost is mechanical.
OPEN LOOP: only WG duty trims are active. Target-pressure trims require Closed Loop.
LEGACY PROFILE ACTIVE: first gear uses 60% and second uses 80% of gauge target. Select a modern mode below to replace it with explicit tables.
LEGACY PROFILE SUPERSEDED: with a shaping mode selected the loop behaves as plain Closed Loop — the 60/80% profile is inactive. Pick Closed Loop on Boost Control to retire the label.
FACTORY BOOST TARGET: the Boost Target table is untouched, so the base aim is your wastegate spring / stock boost ({{tv('boostBaseTargetKpa','kPa abs')}}) — not the table's seed value. Edit the Boost Target table to aim it yourself.
Target shaping source
{{boostShapeUnit('rate')}}
Closed Loop only · 0 = immediate
{{boostShapeUnit('rate')}}
Closed Loop only · 0 = immediate / safest
{{boostShapeUnit('time')}}
Gear modes only · only delays an increase
Gear correctionAdds to base target · N/R uses G1
Gear
Target trim ({{boostShapeUnit('pressure')}})inactive in Open Loop
WG duty trim (%)
G{{row.gear}}
target delta
× base duty
Ground-speed correctionAdds to base target · interpolated
{{speedUnit()}}
Target trim ({{boostShapeUnit('pressure')}})inactive in Open Loop
WG duty trim (%)
{{boostSpeedLabel(row.speed)}}
target delta
× base duty
Live calculation
{{boostTargetMath()}}
Base target {{tv('boostBaseTargetKpa','kPa abs')}} → shaped request {{tv('boostRequestedTargetKpa','kPa abs')}} → active/ramped target {{tv('boostTargetKpa','kPa abs')}} | Base duty {{tv('boostBaseWastegateDuty','%',1)}} → feed-forward {{tv('boostFeedforwardDuty','%',1)}} → final WG {{tv('wastegateDuty','%',1)}}
NO NITROUS SYSTEM INSTALLED — an ECU can only control hardware the car actually has. Fit a N2O kit in the vehicle Parts menu; these settings stay saved and go live the moment a kit is installed.
New to tuning? Pick a chapter - each is a short set of step-by-step lessons that guide you and highlight what to click. {{lessonsDone()}}/{{lessons.length}} complete