-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
Runtime configuration lives in projects/ed-autojump/config.toml. The file is
TOML; section headers match the Config dataclass sections in
projects/ed-core/src/ed_core/config.py. Any key not present in a file falls
back to the code default shown below.
Run from projects/ed-autojump/ so the CLI finds config.toml at its default
relative path, or pass --config <path> explicitly.
The loader layers four sources, each overriding the last:
defaults -> config.toml -> config.local.toml -> .env / ED_AUTOJUMP_* env vars
-
config.toml— the committed, tracked config. The live file already sets[menu_nav].enabled, the calibrated[vision]region, and other machine values. -
config.local.toml— sits next toconfig.toml, gitignored. The non-committed place for machine-local overrides — e.g. the operator's[overlay] cv_debug = true. Same TOML shape asconfig.toml. -
.env— aKEY=VALUEfile next to the config, loaded before env-var overrides. Real environment variables win over.envvalues. This is where the launcher VISION toggle persistsED_AUTOJUMP_OVERLAY_CV_DEBUG=1. -
ED_AUTOJUMP_<SECTION>_<KEY>env vars — override a single scalar key. The section and key are upper-cased (ED_AUTOJUMP_VISION_ENABLED,ED_AUTOJUMP_MENU_NAV_KEY_DELAY_MS). Scalar fields only (str/int/float/ bool); tuple/dict fields (regions, profile maps, class overrides) are deliberately env-unreachable — use a TOML layer for those. Booleans accept1/true/yes/onand0/false/no/off(anything else raises rather than guessing a behavior).
Describes the expected ship for pre-flight sanity checking.
| Key | Default | Description |
|---|---|---|
expected_ship |
"mandalay" |
Ship type name (Frontier internal ID) |
expected_max_jump_range_ly |
31.288 |
Expected unladen jump range |
expected_fuel_capacity_t |
32.0 |
Expected fuel tank capacity in tonnes |
required_modules |
["int_fuelscoop_*", "int_detailedsurfacescanner_tiny"] |
Modules the pre-flight expects fitted |
required_modules_v2 |
["int_dockingcomputer_advanced"] |
Additional modules for the docking flow |
Route planning and fuel-safety settings.
| Key | Default | Description |
|---|---|---|
mode |
"external_spansh" |
Routing mode; currently only external_spansh is wired |
destination |
"Beagle Point" |
Target system for Spansh auto-plot (overridable with --destination) |
efficiency |
60 |
Spansh routing efficiency (%) |
range_margin |
0.97 |
Fraction of jump range to use in route calculations |
fuel_safety_threshold |
0.20 |
Minimum fuel fraction before triggering the scoop (also controlled per-step by refuel_below in arrival.toml) |
danger_classes |
white-dwarf / neutron / black-hole / Wolf-Rayet set | Star classes the route filter refuses to jump to |
The danger-class set (white dwarfs D*, neutron stars N, black holes H,
Wolf-Rayets W*, plus AeBe/TTS) has a code default and is overridable as a
TOML list. target_next_route checks every hop's FSDTarget.StarClass against
it and fails closed if a dangerous star is the next jump — the bot aborts
rather than engaging the FSD.
Controls which exploration actions are active.
| Key | Default | Description |
|---|---|---|
honk |
true |
Fire the discovery scanner on arrival / startup |
fss |
"off" |
FSS mode: "off", "keyboard_sweep", or "cv_assisted" — the latter two are framework stubs |
dss |
"off" |
DSS mode: "off", "high_value_only", or "all" — framework stubs |
dss_max_distance_ls |
50000.0 |
DSS body-distance cap (Ls) |
dss_per_system_cap |
4 |
Max DSS targets per system |
dss_tier_threshold |
1 |
Minimum body tier to DSS |
body_tour_enabled |
false |
Opt-in in-system body tour (SC-assist orbit each unexplored body between the star orbit and target_next_route). Off = byte-identical to the plain jump loop |
body_tour_dwell_s |
2.0 |
Post-AutoScan pacing loiter (sleeper, not a gate) |
body_tour_max_bodies |
5 |
Max bodies toured per system |
body_tour_max_rows |
8 |
Max nav-list rows scanned |
body_tour_orbit_timeout_s |
120.0 |
Per-body backstop (never a success gate) |
body_tour_min_bodies |
0 |
Only tour a system whose honk BodyCount >= this (0 = every system) |
nav_panel_ocr_enabled |
false |
OCR the NAVIGATION panel and pick bodies/target by NAME instead of a blind row walk. Off until a per-ship calibration frame validates the region |
nav_panel_region |
[505, 435, 410, 330] |
Nav-panel body-name column crop [x, y, w, h] @1920×1080 |
nav_panel_region_by_ship |
{} |
Per-ship nav-panel region override (cockpit geometry shifts per hull); empty = single-ship |
The live
config.tomlcurrently setsbody_tour_enabled = falsewith wider scan bounds (body_tour_max_bodies = 40,body_tour_max_rows = 60). Body touring is disabled pending an in-game fix — see the comment inconfig.toml.
Safety thresholds and emergency behavior.
| Key | Default | Description |
|---|---|---|
hull_panic_threshold |
0.70 |
Trip the panic switch if hull integrity falls below this fraction |
heat_panic_threshold |
1.00 |
Trip the panic switch if heat level reaches this value |
heatsink_threshold |
0.80 |
Heat-sink watchdog threshold |
no_journal_timeout_s |
90.0 |
Trip panic if no journal event arrives within this window |
panic_hotkey |
"ctrl+alt+p" |
Global panic hotkey (requires the hotkey extra / keyboard lib) |
legal_state_allowed |
["Clean", "Allied"] |
Legal states the bot will fly under |
engagement_debounce_timeout_s |
30.0 |
Clear the debounce flag and retry if StartJump does not follow within this many seconds of pressing the FSD |
Key dispatch behavior.
| Key | Default | Description |
|---|---|---|
backend |
"pydirectinput" |
Input backend (only pydirectinput, via the pydirectinput-rgx fork, is used) |
key_delay_ms |
75 |
Milliseconds between individual key events |
pitch_up_default_s |
2.0 |
Default pitch-hold duration for the pitch step |
The class_pitch_overrides dict maps star-class codes to pitch-hold durations
(used by the pitch_compass step). Defaults cover K/G/F/B/A/O/M/L/T/Y and the
danger classes.
Controls the bundled preset and automatic swap behavior.
| Key | Default | Description |
|---|---|---|
preset_name |
"ED-AFK" |
Name of the preset to install / swap |
auto_swap_start_preset |
true |
Automatically activate the preset at run start |
restore_on_exit |
true |
Restore the original StartPreset on clean exit |
EDHM (Elite Dangerous HUD Mod) detection and HUD override settings.
| Key | Default | Description |
|---|---|---|
edhm_detect |
true |
Detect EDHM installation |
edhm_preset_to_offer |
"ED-AFK-CV.json" |
EDHM preset offered when EDHM is present |
graphics_override_fallback |
true |
Write GraphicsConfigurationOverride.xml if EDHM is not detected |
EDDN (Elite Dangerous Data Network) publisher settings.
| Key | Default | Description |
|---|---|---|
publish |
true |
Publish FSS discovery scan events to EDDN |
software_name |
"ED-AFK / ed-autojump" |
Software name sent in EDDN headers |
software_version |
"0.2.0" |
Software version string sent in EDDN headers |
uploader_id |
"" |
EDDN uploader ID (empty = not sent) |
File system paths. All values support %ENVVAR% expansion.
| Key | Default | Description |
|---|---|---|
journal_dir |
%USERPROFILE%\Saved Games\Frontier Developments\Elite Dangerous |
Elite journal directory |
binds_dir |
%LOCALAPPDATA%\Frontier Developments\Elite Dangerous\Options\Bindings |
Elite bindings directory |
log_dir |
./logs |
Bot log output directory |
calibration_dir |
./calibration |
Calibration output directory (annotated screenshots) |
MinEdLauncher integration.
| Key | Default | Description |
|---|---|---|
mel_path |
"" |
Explicit path to MinEdLauncher.exe; empty = auto-detect |
default_commander |
"CmdrOne" |
Commander used by --launch when --commander is not passed |
default_auth |
"frontier" |
Auth method: "frontier" or "steam"
|
default_product |
"edo" |
Game edition: "edo" (Odyssey) or "edh4" (Horizons 4.0) |
default_group |
"CmdrFour" |
Default private group to join after launch |
autorun |
true |
Pass /autorun to MEL (skip update check) |
autoquit |
true |
Pass /autoquit to MEL |
skip_install_prompt |
true |
Pass /skipinstallprompt to MEL |
dryrun_timeout_s |
10.0 |
Timeout for the MEL /dryrun pre-flight auth check |
launch_timeout_s |
120.0 |
Max wait after MEL spawn for the main menu to appear |
menu_audio_sustain_s |
2.0 |
Seconds of continuous audio before treating it as menu music (not the intro cutscene) |
post_fileheader_wait_s |
10.0 |
Wait after Fileheader journal event before treating the menu as interactive |
[launcher.profiles] — maps commander names to MinEdLauncher .cred
profile slugs (defaults CmdrOne→account1 … CmdrFour→account4):
[launcher.profiles]
CmdrOne = "account1"
CmdrFour = "account4"Main-menu keyboard navigation (used by --launch after MEL reaches the main
menu).
| Key | Default | Description |
|---|---|---|
enabled |
false |
Enable menu navigation; must be true for --launch to drive menus |
post_main_menu_buffer_s |
3.0 |
Wait after detecting main menu before sending keys |
key_delay_ms |
250 |
Delay between arrow-key presses in the menu |
load_game_timeout_s |
180.0 |
Max wait for LoadGame journal event after navigation |
dismiss_dialogs |
true |
Send Space+Escape after main-menu detect (clears update/EULA dialogs) |
group_owner_commander |
"CmdrFour" |
Commander who owns the private group (skips select-group step for them) |
calibration |
{} |
Per-commander press counts, populated by calibrate-menu
|
[menu_nav.calibration.<Commander>] — populated by calibrate-menu:
[menu_nav.calibration.CmdrOne]
continue_key = "space"
pg_nav_direction = "right"
pg_nav_count = 1
group_nav_direction = "down"
group_nav_count = 3Nav-compass alignment settings. Disabled by default until calibrated.
| Key | Default | Description |
|---|---|---|
enabled |
false |
Enable compass alignment; set true after calibrating |
backend |
"yolo-onnx" |
Compass reader backend: "cyan", "yolo-onnx", "ultralytics", or "opencv" (see below) |
capture_backend |
"gdi" |
Screen capture backend: "gdi" (default) or "dxcam"
|
model_onnx |
"" |
Path to a .onnx compass model; empty = vendored compass.onnx
|
model_pt |
"" |
Path to a .pt compass model; empty = vendored compass.pt
|
conf_threshold |
0.25 |
Model detection confidence threshold |
require_agreement |
false |
Require two backends to agree on the dot position |
agree_tol |
0.2 |
Agreement tolerance when require_agreement is on |
region |
[0, 0, 0, 0] |
Screen rect [x, y, w, h] for the compass crop; (0,0,0,0) = uncalibrated (vision stays off) |
compass_radius |
0.0 |
Compass disc half-extent in pixels; 0 = derive from crop at read-time |
align_tol |
0.20 |
Alignment tolerance — dot within this fraction of centre = aligned |
deadzone |
0.08 |
Ignore offsets below this fraction (sub-dot noise suppression) |
gain |
2.0 |
Proportional gain for pitch/yaw corrections |
min_press_s |
0.10 |
Minimum key-press duration per correction |
max_press_s |
0.70 |
Maximum key-press duration per correction |
search_press_s |
0.2 |
Press duration used when searching for a lost target |
settle_s |
1.4 |
Wait after each key release (ship momentum decay time) |
max_iters |
40 |
Max correction iterations per orient_compass call |
timeout_s |
45.0 |
Abort alignment after this many seconds |
align_samples |
7 |
Reads per measurement; temporal-median spike rejection |
widget_ring_alignment |
true |
Enable the widget-ring fine alignment pass after coarse orient |
widget_crop |
[360, 200, 1200, 680] |
Screen rect for the HUD mouse widget (centred on 960,540 @1080p) |
widget_ring_on_miss |
"required" |
What to do when the widget is not detected (see below) |
align_tol note: the live knob is config.toml [vision] align_tol (both
the dataclass default and the TOML now agree at 0.20; the operator loosened it
0.12 → 0.20 on 2026-07-11 so the coarse compass hands off to the widget ring
sooner — the widget fine-pass owns jump-time precision). The invariant
deadzone*sqrt(2) <= align_tol (0.113 ≤ 0.20) still holds.
widget_ring_on_miss — three modes (default is "required"):
-
"required"(default) — the mouse widget is mandatory. If it is not detected at launch, the preflight HALTS loudly and refuses to fly until the operator makes the widget visible and relaunches. Chosen after a live run flew a whole session compass-only (withalign_tolloosened, a silent degrade left every FSD engage misaligned). -
"degrade"— skip the fine pass and jump compass-only; if genuinely off-target the FSD charge aborts and autorecovery fixes it. -
"fail_closed"— never jump on an unconfirmed fine-orient: the preflight warns and the required fine step fails per jump until the widget is detectable (flies but never jumps).
Backends:
-
"cyan"— validated for this machine; finds the cyan target dot; ring-centered, tolerates head-sway -
"yolo-onnx"— light path usingonnxruntimeon the vendoredcompass.onnx -
"ultralytics"— heavy path using full PyTorch runtime oncompass.pt; opt-in only -
"opencv"— colour-free shape detector; no model weights; also the always-on fallback
Older CV pipeline (not the default path — used when the cv extra is installed
and a legacy capture flow is active).
| Key | Default | Description |
|---|---|---|
capture_backend |
"dxcam-cpp" |
Screen capture backend for the CV pipeline: "dxcam-cpp" or "gdi"
|
require_sdr |
true |
Reject frames that appear to be HDR (non-SDR pixel values) |
require_borderless_windowed |
true |
Reject captures that look like the wrong window mode |
target_resolution |
(1920, 1080) |
Expected screen resolution; frames at other sizes are rejected |
ocr_engine |
"tesseract" |
OCR backend for the legacy pipeline (the active nav-panel path uses WinRT OCR, no tesseract binary) |
Note:
[cv]is distinct from[vision].[vision]controls nav-compass alignment (the active default path);[cv]controls the older capture/OCR pipeline installed with thecvextra.
In-system navigation robustness.
| Key | Default | Description |
|---|---|---|
retarget_route_before_engage |
true |
Press TargetNextRouteSystem before each engage to lock the next route star deterministically |
supercruise_assist |
false |
Enable SC-assist via blue-zone throttle (off until the docking/orbit flow lands) |
sc_assist_throttle_action |
"SetSpeed75" |
Throttle action used to engage SC-assist in blue-zone mode |
SC-assist note: Elite Dangerous has no keybind for Supercruise Assist. The bot uses throttle-mode: in ED's right panel / flight settings, set Supercruise Assist to engage on blue-zone throttle. Then
sc_assist_throttle_actionis pressed with a target locked to engage it.
EDMCOverlay in-game status overlay (cosmetic; fail-soft — a broken overlay never blocks a flight).
| Key | Default | Description |
|---|---|---|
enabled |
true |
Enable the overlay |
console |
true |
Also mirror execution info to the launch terminal (stdout); independent sink from the in-game overlay |
host |
"127.0.0.1" |
EDMCOverlay TCP server host |
port |
5010 |
EDMCOverlay TCP server port |
exe_path |
"" |
Explicit path to EDMCOverlay.exe; empty = auto-detect |
connect_timeout_s |
30.0 |
Wait for an already-running server before attempting to launch it |
launch_if_absent |
true |
Launch EDMCOverlay.exe if no server is found |
launch_settle_s |
2.0 |
Pause after launching EDMCOverlay before reconnecting |
launch_connect_timeout_s |
10.0 |
Timeout for post-launch connection |
keepalive_s |
4.0 |
Re-send overlay slots this often |
x |
20 |
Overlay X position (virtual 1280×1024 overlay coords) |
y |
40 |
Overlay Y position |
color |
"yellow" |
Text colour |
size |
"normal" |
Text size: "normal" or "large"
|
ttl |
6 |
Slot TTL in seconds (must be > keepalive_s) |
cv_debug |
false |
Draw a labeled box over every region a named CV/OCR grabber captures (white look / green hit / red miss). Opt-in |
cv_debug_ttl_s |
2.0 |
Flash duration for each CV-debug box |
CV debug boxes (cv_debug) are DEFAULT OFF and opt-in. Turn them on via the
launcher VISION toggle — which writes ED_AUTOJUMP_OVERLAY_CV_DEBUG=1 into
projects/ed-autojump/.env (local, gitignored) — or set cv_debug = true in
config.local.toml. A real env var of the same name wins over .env. Fail-soft:
with no EDMCOverlay or the overlay disabled, no boxes are drawn. Their on-screen
placement uses a screen→overlay transform tuned by calibrate-overlay.