VRS X Operator's Handbook
- 01. Startup and Login
- 02. General Settings
- 03. Feeds and Merged Feeds
- 04. Server Settings
- 05. Resources and Visuals
- 06. Users and Security
- 07. Backup, Update, Recovery
- 08. Troubleshooting
- 09. Feeds: Smart Ports and MLAT
- 10. Feed Filter
- 11. Merged Feeds
- 12. Resources: Flags and Silhouettes
- 13. Custom Operator Logo
- 14. Aircraft Colors and Operator Colors
- 15. AircraftDB Editor and Custom Photos
- 16. Coverage
- 17. Aircraft Model and Operator Aliases
01. Startup and Login
Startup and Login
1. First startup
- Start the VRS X service/application.
- Open the admin panel:
- default:
http://localhost:8085/admin - if
AdminPortwas changed:http://<host>:<admin-port>/admin
- default:
- Complete activation (if required).
- Set the administrator password.
2. If the admin panel does not open
The most common issue is a port conflict.
Linux
ss -ltnp | rg ':8085|:5000|:8080'
Windows (PowerShell)
Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -in 8080,8085,5000}
If the port is already in use:
- Stop the conflicting application.
- Open the admin panel.
- Change
Admin Portto a free port. - Save the configuration and restart VRS X.
3. Minimal post-install workflow
General Settings- set core radar options.Feeds- add at least one data source.Server Settings- configure ports and network access.- Restart the service.
- Verify:
http://<host>:<web-port>/AircraftList.jsonhttp://<host>:<admin-port>/admin
02. General Settings
General Settings
General Settings should contain only global radar behavior and presentation options.
What to configure here
- Instance name and high-level identity settings.
- General map behavior and display options.
- User-facing options rather than infrastructure options.
Recommended configuration order
- Set general options.
- Save.
- Go to
Feedsand configure data sources. - Return to visual fine-tuning only after feed data is stable.
Best practices
- Apply small changes and save in steps.
- After major changes, refresh radar and verify
AircraftList.json. - Avoid mixing UI changes and infrastructure changes in one pass.
Current UI behavior notes
Theme modes and map controls
- Available themes in radar UI:
Classic,Futuristic,OverFuture,Phosphor CRT. - Map action controls (zoom, layers, location, visual panel) use a unified button layout.
- In
FuturisticandOverFuture, controls should be displayed as standalone buttons without an extra outer frame around the whole control group. Phosphor CRTis an immersive retro mode: it uses one fixed CRT-styled map layer, hides modern map/label tuning controls, applies a phosphor treatment to operator logos, draws OpenAIP airspace boundaries and airports as lightweight CRT vectors when an OpenAIP API key is configured, and supports keyboard selection withArrowUp/ArrowDown,ArrowLeft/ArrowRight,Enter, andEscape.- After frontend updates, use a hard refresh to make sure the latest CSS is loaded.
Mobile aircraft detail sheet
- On mobile viewport, selecting an aircraft opens a bottom sheet in collapsed mode.
- Tap the sheet handle or swipe up to expand the sheet.
- Swipe down (when detail scroll is already at top) to collapse.
- Closing aircraft detail resets sheet state and scroll position.
- UI is safe-area aware (
viewport-fit=cover), so bottom spacing should respect device insets on iOS-like devices.
Aircraft list sorting
- Sortable columns include
Op,ICAO,Reg,Callsign,Alt,Spd. - Sorting preference is persisted in browser storage.
03. Feeds and Merged Feeds
Feeds and Merged Feeds
This page is a quick navigator for feed topics.
Recommended order
- Configure feed source and MLAT behavior.
- Use
Add Feed Setfor multi-port receivers on one IP. - Configure merged feeds.
- Check merged feed coverage if you need to validate reception footprint.
- Apply feed filter rules last.
Detailed pages:
Add Feed Set
Use /admin/feeds -> Add Feed Set when one receiver exposes several standard ports from the same address. It is a shortcut, not a separate feed type: VRS X creates normal feeds underneath with names like FEED01_ADSB, FEED01_MLAT, and FEED01_MLATHUB.
Typical use:
- enter one
Base Name, - enter one
Address / IP, - select the primary ADS-B port (
30003or30005), - optionally add dedicated MLAT (
30105or30106), - optionally add MLAT Hub (
31005or31006), - optionally attach all created feeds to an existing merged feed.
Important behavior:
- all generated feeds are TCP active feeds,
- custom ports, passive mode, and serial receivers still require normal
Add Feed, - endpoints already configured with the same normalized address and port are skipped,
- when not linking to a merged feed, primary ADS-B stays visible in the radar dropdown while MLAT-only feeds stay hidden by default,
- when linking to a merged feed, the visibility checkbox applies to created feeds and the selected merged feed receives all new source IDs.
Coverage after merged feeds
/admin/coverage works on enabled merged feeds. It visualizes where aircraft were actually observed by the merged feed sources and can be used to validate coverage holes, inactive sources, and archive history. See 16-Coverage.md.
Common issue: selected feed still shows too much
Symptom: selecting a specific feed still shows aircraft from other feeds.
Checklist:
- Verify
feedIdmapping in output data. - Verify frontend sends the correct
feedparameter. - Compare
All feedsvs single feed for the same bbox. - Repeat test on a second feed for the same user.
- Remember there is a short stability window: aircraft recently seen by selected feed can remain visible briefly to reduce flicker.
- For merged feeds, filtering remains anchored to selected feed ID (no automatic expansion to all merged sources).
04. Server Settings
Server Settings
Treat Server Settings as infrastructure and maintenance.
1. Web Server Port and Admin Port
Web Server Port
- Port used by the public radar (
/AircraftList.json, map frontend).
Admin Port
- Port used by the admin panel (
/admin). - Recommended: use a dedicated admin port, separate from radar.
If AdminPort = 0 or equals WebServerPort, admin endpoints share the same port as public radar, which increases exposure.
2. Network Binding
This setting controls whether the server listens on:
- localhost only,
- all interfaces (
0.0.0.0) for LAN/VPN/public routing.
Default for new installs: all interfaces. This is intentional for headless/server deployments so the activation page and admin panel can be reached from another machine on the network.
A restart is required after changing binding behavior.
3. Radar Visibility
This setting controls radar authentication:
Public- radar is accessible without login.Private- radar requires authentication.
This is independent from Network Binding. Setting the radar to Private does not force localhost-only binding; use Network Binding for that.
4. Database and Imports
Database File Name
- SQLite database file path/name.
- Changing it may require restart.
Data import options
- OpenSky CSV
- ADS-B Exchange JSON/NDJSON
- Airport CSV (OurAirports-compatible)
- BaseStation SQLite upload (
BaseStation.sqb,.sqlite,.db,.sqlite3)
BaseStation file import note:
- Use the file selector in Server Settings (no manual path typing required).
Replace- swaps the whole DB file and creates a.bakbackup.Merge- keeps current DB file and upserts aircraft records byModeS.
ADSBX note:
basic-ac-db.json.gzincludes nativemilflag support (military classification).- There is no dedicated
governmentfield in this dataset.
Recommended process:
- Confirm source URL is valid and in expected format.
- Run import.
- Check server logs.
- Verify results on map/list.
AircraftDB Editor and custom photos
Dedicated guide:
Quick summary:
ModeSmust stay unique (duplicate create/update is blocked),- editor provides
Load existing aircraftpath for duplicate ICAO conflicts, - custom aircraft photo can be uploaded per ICAO and has priority over PlaneSpotters.
5. Configuration Backup
This section provides:
- settings export,
- settings import.
After importing configuration:
- verify ports,
- verify binding,
- restart service if required.
6. Danger Zone
Clear Application Data removes critical data (configuration, users, mappings, database).
Use only when:
- performing full instance reset,
- current backups exist,
- irreversible data loss is accepted.
05. Resources and Visuals
Resources and Visuals
1. Navigation
This page is a quick navigator for visual resources and marker customization.
Recommended reading:
- 12-Resources-Flags-and-Silhouettes.md
- 13-Custom-Operator-Logo.md
- 14-Aircraft-Colors-and-Operator-Colors.md
- 17-Aircraft-Model-and-Operator-Aliases.md
2. Type Icon Mapping (quick note)
Use Type Icon Mapping after resources are loaded.
Current UI behavior:
- mappings are displayed sorted by
ICAO Type Code, - filter matches both
ICAO Type CodeandIcon Name.
3. If resources are loaded but still not visible
Checklist:
- verify CSV keys match ZIP asset naming,
- clear browser cache,
- confirm icon mapping is not overriding expected silhouette behavior,
- verify aircraft records include the expected type/operator metadata,
- use
Aircraft Modelswhen aircraft have an ICAO type code but no model name, - use
Operator Aliaseswhen callsign/operator codes should resolve to carrier display names.
4. Theme-related map visuals
- Map controls (zoom, layers, location, visual settings) use one unified visual style.
- In
FuturisticandOverFuture, controls should not have an extra outer frame around grouped buttons. - If old framing still appears after deployment, clear browser cache and reload the page.
06. Users and Security
Users and Security
1. User management
In Users:
- create operator accounts,
- reset/change passwords,
- remove unused accounts.
Avoid using one shared account for multiple operators.
2. Public vs private radar
Radar Visibility controls radar access mode:
Public- no login required for radar view.Private- login required.
This does not replace network-level controls (ports, firewall, binding). A private radar can still listen on all interfaces so headless installs are reachable over LAN/VPN.
3. Baseline hardening
- Use a dedicated
AdminPort. - Restrict admin port access at firewall level (LAN/VPN admin clients only).
- Use a strong admin password.
- Rotate password after deployment.
- Do not expose admin panel publicly unless required.
4. Safe change procedure
- Apply configuration change.
- Save.
- Restart service when required.
- Verify:
- radar endpoint works,
- admin endpoint works,
- authentication works.
07. Backup, Update, Recovery
Backup, Update, Recovery
1. Minimum backup before changes
Before major changes, create:
- configuration export (
Configuration Export), - database export (
Database Export), - backup of the instance data directory.
2. Update process (operational model)
Safe minimal flow:
- stop service,
- backup,
- replace binaries,
- start service,
- verify endpoints.
Post-update checks:
http://<host>:<web-port>/AircraftList.jsonhttp://<host>:<admin-port>/admin- hard refresh the radar page to load current static assets,
- verify at least one desktop and one mobile UI smoke check.
Recommended UI smoke checks:
- switch theme to
FuturisticandOverFutureand verify map controls have no extra outer frame, - on mobile viewport, open aircraft detail sheet and verify expand/collapse gestures,
- verify aircraft list sorting by
Regworks and persists after page reload, - verify mobile bottom spacing is correct on devices with safe-area insets.
3. Recovery after failed deployment
- Stop service.
- Restore previous binaries.
- Restore configuration and/or database from backup.
- Start service.
- Verify feeds and admin access.
4. What to log after deployment
Track:
- release version,
- date and host,
- changed ports/binding settings,
- endpoint verification results.
08. Troubleshooting
Troubleshooting
1. /admin returns Invalid url
Most common causes:
- port conflict,
- admin is running on a different port than expected,
- reverse proxy path/port mismatch.
Check:
- which process listens on admin port,
AdminPortandWebServerPortvalues in config,curl -I http://<host>:<admin-port>/adminafter restart.
2. Radar works locally but not on LAN
Check:
Network Bindingis set to all interfaces,- host firewall rules,
- service is listening on
0.0.0.0:<port>.
Do not use Radar Visibility to fix LAN reachability. Radar Visibility controls login requirements; Network Binding controls which interfaces the server listens on.
Linux example:
ss -ltnp | rg ':8080|:5000|:8085'
curl -I http://<lan-ip>:<port>/admin
3. AircraftList.json becomes empty after some time
Possible causes:
- feed connection loss,
- background exception stopping host,
- overload or unstable upstream data patterns.
Check:
- service logs (
journalctl -u vrsx), - feed status and message throughput,
- process uptime after errors.
4. Aircraft positions jump backward or flicker
Common causes:
- MLAT instability,
- low-quality feed or high jitter,
- mixed sources without stable source-priority logic.
Diagnostic flow:
- compare same feed in VRS X vs reference VRS,
- test single feed instead of
All feeds, - compare JSON output over identical bbox/time intervals.
5. Resource import says success, but no visual effect
- Verify
Loadedcounters. - Verify CSV keys match asset names.
- Clear browser cache.
- Verify icon/type mapping and metadata consistency.
6. Map controls show strange outer frames in Futuristic / OverFuture
Symptoms:
- zoom/layer/location control groups have extra rectangular outlines around button stacks.
Recovery steps:
- perform hard refresh (
Ctrl+Shift+RorCmd+Shift+R), - clear site cache and reload,
- verify the active theme is really
FuturisticorOverFuture, - if issue persists, redeploy frontend static assets and refresh again.
7. Mobile aircraft detail sheet does not collapse/expand as expected
Check:
- sheet can expand by tapping handle or swiping up,
- collapse gesture works only when detail content scroll is at top,
- after closing selected aircraft and reopening, sheet should start collapsed.
8. Bottom sheet is clipped by device home indicator (mobile)
Check:
- confirm frontend HTML uses viewport meta with
viewport-fit=cover, - clear browser cache so updated CSS safe-area rules are applied,
- retest on real device (some desktop emulators do not reproduce full safe-area behavior).
9. Marker colors from Aircraft Colors / Operator Colors are not visible
Check:
Color by operatoris enabled in label settings,- mapping key format is valid (
ICAO hexfor Aircraft Colors, operator code for Operator Colors), - if both mappings exist, remember Aircraft Colors override Operator Colors,
- emergency or selected marker style can temporarily override normal tint.
10. Custom operator logo upload is rejected or not used
Common causes:
- invalid proportions (must be
17:4), - image is too small for template (
85x20minimum for downscale path), - existing logo conflict with
overwritedisabled, - invalid operator/type key format.
Check:
- upload with naming rule
OPERATORorOPERATOR-ICAOTYPE, - if prompted, use explicit downscale to
85x20, - confirm
OperatorFlagsList.csvand resource status are updated, - refresh browser cache and verify with specific aircraft type.
11. AircraftDB Editor shows duplicate ICAO conflict
Symptoms:
- save returns conflict and message that aircraft already exists.
Expected behavior:
- app prevents duplicate
ModeSrows, - editor shows
Load existing aircraftaction for the conflicting ICAO.
Resolution:
- load existing record,
- apply edits there,
- save update instead of creating a second record.
12. Custom aircraft photo upload succeeds but detail still shows fallback image
Check:
- ICAO in editor is valid and matches the aircraft (
6hex chars), - custom photo status in editor shows
custom photo available, - hard refresh detail panel to bypass stale browser cache,
- if needed, delete and re-upload photo (system keeps only one custom photo variant per ICAO).
09. Feeds: Smart Ports and MLAT
Feeds: Smart Ports and MLAT
1. Feed basics
In Feeds, define raw data sources (Mode-S Raw, BaseStation).
Mode-S Raw covers both:
- Beast family binary (
30005,30006,30105,31005,31006) - AVR / raw text (
30002,*8D...;)
For each feed, configure:
AddressandPortFormatConnectionTypeEnabledVisible in Radar Dropdown- optional
Receiver Location
After save:
- verify connection status,
- verify message counters increase,
- verify
AircraftList.jsonis non-empty.
2. Smart profile ports
Known smart profiles:
30002->[ADS-B] AVR/Raw Text30003->[ADS-B] BaseStation/SBS Text30005->[ADS-B] Beast/Binary30006->[ADS-B] BeastReduce30105->[MLAT] Beast/Binary30106->[MLAT] BaseStation/SBS Text31005->[MLAT Hub] Beast/Binary31006->[MLAT Hub] BeastReduce
When one of these ports is entered, feed editor pre-applies matching format/MLAT defaults.
3. Quick Add: Feed Set
Use /admin/feeds -> Add Feed Set when one feeder exposes several related ports on the same IP.
The dialog asks for:
Base Name- auto-filled as the first unusedFEEDxxfamily, for exampleFEED01,Address / IP- shared by all generated feeds,Primary Feed- required ADS-B source,30003or30005,Dedicated MLAT Feed- optional30105or30106,MLAT Hub Feed- optional31005or31006,Receiver Location- copied to every generated feed,- optional
Add created feeds to merged feed.
The UI saves ordinary feeds underneath, for example:
FEED01_ADSBFEED01_MLATFEED01_MLATHUB
FEED01_MLATHUB is still stored as an MLAT feed internally (IsMlatFeed = true).
This keeps backward compatibility with existing configuration while making multi-port feeders faster to add.
Generated feed behavior:
- every created feed is a normal TCP active feed,
- smart port profiles still set parser/MLAT defaults,
- duplicate endpoints with the same normalized address and port are skipped,
- if all requested endpoints already exist, nothing is created,
- if no merged feed is selected, primary ADS-B feeds stay visible in the radar dropdown and MLAT-only feeds stay hidden by default,
- if a merged feed is selected, all newly created feed IDs are appended to that merged feed and the visibility checkbox is applied to created feeds.
Use normal Add Feed instead when the source needs:
- a custom port outside the smart profile list,
- passive TCP mode,
- serial receiver configuration,
- unusual format settings.
Known readsb ports without a feed profile:
30047-> JSON position stream, not a raw feed input30152-> HTTP API JSON, not a raw feed input
4. MLAT options
Feed-level MLAT controls:
MLAT Feedforces all positions from feed to be treated as MLAT-derived.- Use
MLAT Feedonly for dedicated MLAT streams without reliable MLAT marker tagging. - For mixed ADS-B + MLAT streams, keep
MLAT Feeddisabled and rely on per-message MLAT detection. Assume DF18 CF1 = ICAOis experimental and should be enabled only for known-compatible sources.
5. BeastReduce and MLAT Hub
BeastReduce is still Beast on the wire.
- Use the same
Mode-S Rawparser as for normal Beast. - The difference is reduced rate / lower bandwidth, not a different binary format.
MLAT Hub is a consolidated MLAT-results output, not a primary ADS-B receiver feed.
31005and31006are usually advanced, MLAT-only sources.- They should not be presented as a normal full-traffic ADS-B feed.
- Default
MLAT Feed = onis appropriate for these dedicated MLAT outputs.
6. Quick verification
- open aircraft detail panel,
- check
Position Source(MLAT positionorADS-B position), - compare behavior before and after MLAT option changes.
7. UI visibility note
Visible in Radar Dropdown controls whether a feed appears in frontend All feeds / feed selector.
10. Feed Filter
Feed Filter
1. What Feed Filter does
Feed Filter filters messages before they are propagated to the rest of the system.
2. Main options
Enable Feed Filterenables/disables filtering globally.Prohibit MLAT Positionsstrips MLAT lat/lon/track from BaseStation and drops MLAT Mode-S frames.Block Unfilterable Feedsblocks passthrough/raw feeds that cannot be filtered per message.
3. ICAO filter mode
Blocklist(ProhibitIcaos=true): ICAOs in list/ranges are blocked.Allowlist(ProhibitIcaos=false): only ICAOs in list/ranges are allowed.- Individual ICAO entries must be exactly 6 hex characters.
- ICAO ranges are inclusive (
startandendincluded).
4. Apply behavior
- no service restart required,
- settings are hot-reloaded,
- frontend/admin message indicates changes usually become visible within 2-5 minutes.
5. Safe rollout sequence
- verify raw feed flow first (without filter),
- enable filter with minimal scope,
- validate map and list output after each step,
- only then add additional ICAO rules/ranges.
11. Merged Feeds
Merged Feeds
1. Purpose
Merged Feeds build one logical output from multiple source feeds.
Recommended model:
- keep physical sources in
Feeds, - expose combined output via merged feeds where needed.
2. Merged feed options
Each merged feed has:
NameSource Feeds(receiverIds)EnabledVisible in Radar DropdownICAO Timeout (ms)Ignore Aircraft with No Position
3. Runtime logic
For each ICAO:
- one source feed is selected as active owner,
- duplicate frames from other sources are suppressed,
- if active source is silent longer than
ICAO Timeout, ownership may switch to another source.
4. ID namespace
Merged feed IDs use dedicated range starting from 10000, reducing collision risk with regular feed IDs.
5. Workflow notes
- Feed editor contains shortcut
Add to merged feedfor smart-profile ports. - Final source assignment should be verified in
Merged Feedspanel. - Merged feeds can be selected as source in
Rebroadcast Servers.
12. Resources: Flags and Silhouettes
Resources: Flags and Silhouettes
1. Upload packages
Typical uploads:
OperatorFlags.zip(orAirlineLogos.zip) + optionalOperatorFlagsList.csvDVSilhouettes.zip(orSilhouettes.zip) + optionalSilhouettes.csv
Supported image formats:
.bmp.png
2. Runtime lookup logic
Operator flags:
- frontend requests
/api/images/operator-flags/{operatorCode}.png?icaoType={type}, - lookup priority is
OPERATOR-ICAOTYPEfirst, thenOPERATOR.
Silhouettes:
- frontend requests
/api/images/silhouette/{icaoType}.png, - lookup first uses
Silhouettes.csv, - fallback tries direct
DVSilhouettes/{icaoType}.bmp/pngfile.
If resource is not found, API returns transparent image instead of broken image icon.
3. CSV behavior on upload
- separately uploaded CSV has priority over CSV found inside ZIP,
- for
flags, if CSV is missing system can regenerateOperatorFlagsList.csvfrom image files, - for
silhouettes, provideSilhouettes.csvfor deterministic mapping.
4. Verification after upload
- check
Loadedcounters in admin panel, - verify operator flags in list/detail,
- verify silhouettes in aircraft detail panel,
- hard refresh browser if old cache is still used.
13. Custom Operator Logo
Custom Operator Logo
Custom operator logos are managed in /admin/resources under the custom operator logo section.
1. Naming and priority
Allowed naming patterns:
- generic logo:
OPERATOR.bmporOPERATOR.png - type-specific logo:
OPERATOR-ICAOTYPE.bmporOPERATOR-ICAOTYPE.png
Runtime priority:
- type-specific logo is preferred,
- generic logo is fallback.
Examples:
DLH.pngapplies to all Lufthansa aircraft that resolve toDLH,DLH-A321.pngapplies only when the resolved operator isDLHand the aircraft ICAO type isA321,- if both files exist,
DLH-A321.pngwins forA321aircraft andDLH.pngremains the generic fallback.
2. Admin workflow
In /admin/resources:
- enter the operator code,
- optionally enter the ICAO type for a type-specific logo,
- upload a
.bmpor.pngimage, - confirm downscale if the image has correct proportions but is larger than
85x20, - enable overwrite only when replacing an existing logo for the same key.
The same page lists uploaded custom logos and allows deleting them. Deleting a custom logo removes the file, synchronizes metadata, and reloads resources immediately.
3. Validation rules
- file type must be
.bmpor.png, - file size limit is
2 MB, - required aspect ratio is
17:4, - template size is
85x20, - if image has valid ratio but larger dimensions, explicit downscale confirmation is required,
- operator code accepts
A-Z,0-9,@,.,_,+,-(2-40chars), - optional ICAO type accepts
A-Z,0-9(2-12chars).
4. Overwrite behavior
- if target logo already exists and
overwrite=false, upload returns conflict, - when saving one extension, counterpart extension for same key is removed to keep deterministic lookup.
5. Storage and metadata
- files are stored in
Images/AirlineLogos, - upload metadata is tracked in
custom-operator-flags.json, - after upload/delete,
OperatorFlagsList.csvis synchronized, - resource service is reloaded immediately.
6. Troubleshooting
- If the uploaded image is rejected, check aspect ratio first. Valid examples are
85x20,170x40, and255x60. - If the logo uploads but is not visible, verify the operator code used by the aircraft. Operator aliases can help callsign-derived codes resolve to expected carrier names, but logo lookup still needs matching operator/type metadata.
- If an older logo keeps appearing, clear browser cache and verify that the opposite extension was removed for the same key.
14. Aircraft Colors and Operator Colors
Aircraft Colors and Operator Colors
1. Color priority chain
Marker color priority:
Aircraft Colorsby ICAO hex has highest priority,- if missing,
Operator Colorsis used, - if both missing, default marker color is used.
2. Operator color resolution
Operator Colors lookup order:
- first 3 characters of callsign,
operatorFlagCodefrom aircraft database record.
3. Visual modifiers
Color by operatorin label config must be enabled for custom tinting.- Emergency squawk rendering forces emergency red.
- Selected marker style can force yellow selection (unless
preservemode is used).
4. Admin/API behavior
- both mappings are upsert-style (
PUTcreates or updates existing key), - mappings are persisted in data directory JSON files,
- stored mappings are sorted by key on save.
5. Quick diagnostic checklist
- verify key format (
ICAO hexfor Aircraft Colors, operator code for Operator Colors), - verify
Color by operatoris enabled, - remember Aircraft Colors overrides Operator Colors,
- verify emergency/selection state is not masking expected tint.
15. AircraftDB Editor and Custom Photos
AircraftDB Editor and Custom Photos
1. AircraftDB Editor workflow
- search supports ICAO, registration, owner, manufacturer, and type,
- search returns up to 50 results,
- selecting row loads full record by
AircraftID, - create/update/delete operations refresh database lookup cache.
2. Duplicate ModeS behavior
ModeSis unique (ICAO hex),- creating/updating with existing
ModeSreturns conflict (DUPLICATE_MODES), - UI shows conflict warning and offers
Load existing aircraft, - recommended path is to load existing record and update it instead of creating duplicate.
3. Custom aircraft photo upload
Requirements:
- valid ICAO hex (
[0-9A-F]{6}), - allowed formats:
PNG,JPG/JPEG,WEBP,BMP, - max size:
8 MB, - image signature is validated server-side.
Storage behavior:
- stored path:
Images/AircraftPhotos/{ICAO}.{ext}, - uploading new custom photo removes previous custom variants for same ICAO.
4. Display priority logic
Aircraft detail photo source order:
- custom local aircraft photo,
- PlaneSpotters fallback.
Deleting custom photo restores PlaneSpotters fallback behavior.
16. Coverage
Coverage
/admin/coverage is an admin-only coverage explorer for enabled merged feeds.
It answers a practical question: where did this merged feed actually observe aircraft? It does not draw theoretical antenna range from receiver coordinates. The footprint is built from received aircraft positions.
1. What it shows
Coverage is calculated per enabled merged feed and includes:
- live coverage for the current local day,
- archived daily snapshots from the local coverage database,
- a merged footprint polygon,
- source feed activity for every source inside the merged feed,
- basic intensity statistics such as active cells and observed cell-hours.
The page is useful for:
- spotting holes in receiver coverage,
- finding inactive or weak source feeds,
- comparing coverage before and after feed changes,
- validating whether a merged feed is receiving data from expected regions.
2. Live mode
Live mode reads the in-memory coverage collector and refreshes automatically.
Important details:
- live coverage is for the current local date,
- the UI refreshes the live snapshot every 15 seconds,
- only aircraft with latitude and longitude contribute to coverage,
- source activity is grouped by the direct feed that produced the position,
- merged feed membership comes from the current configuration.
3. Archive mode
Archive mode reads persisted daily snapshots from coverage.sqlite.
Important details:
- dates are listed per merged feed,
- the archive uses the server's local timezone,
- current state is flushed before archive reads so recent activity is not lost,
- old data is retained for 365 days,
- snapshots are still tied to the merged feed/source identities from configuration.
4. Protected merged feeds
Coverage follows merged feed access rules.
If a merged feed is password protected:
- the coverage entry appears locked,
- the admin must unlock it with the feed password,
- if the merged feed depends on multiple protected source requirements, more than one password may be required,
- archive date counts and snapshots are hidden until access is unlocked.
5. Metrics
Common fields:
Sources- number of source feeds in the merged feed,Active Sources- sources that contributed at least one coverage cell for the selected day,Active Cells- unique coverage cells observed by the merged feed,Peak Active Hours / Cell- longest observed time in one cell,Total Cell Hours- sum of observed cell time across all active cells,Footprint Polygons- rendered coverage areas after simplification and gap fill.
Source rows show:
- feed name,
- receiver location if configured,
- active cell count,
- active hours,
- last seen time.
6. Footprint logic
The raw collector stores positions in map cells and 15-minute time bins. The visible footprint is simplified to a coarser display grid and small linear gaps are closed before polygons are built.
This makes the map stable and readable while still preserving real coverage shape. Small gaps can be filled; large gaps remain visible.
7. Limitations
Coverage means observed traffic, not guaranteed radio range.
Empty or weak coverage can mean:
- the receiver was down,
- there was little traffic in that area,
- positions arrived without latitude/longitude,
- a source was not part of the selected merged feed,
- the merged feed or source configuration changed during the day.
Receiver coordinates are displayed as source metadata when available, but they do not create coverage by themselves.
8. Troubleshooting
- If no merged feeds are listed, create and enable a merged feed first.
- If a merged feed is locked, unlock it with the feed password.
- If there are no archive dates, wait for data to be collected and persisted.
- If live coverage is empty, verify source feeds are connected and aircraft positions include latitude/longitude.
- If a source has no receiver location, assign one in
/admin/locations; this improves source context but does not change the observed footprint.
17. Aircraft Model and Operator Aliases
Aircraft Model and Operator Aliases
These tools live in the admin Visuals group:
/admin/aircraft-model-mappings- menu labelAircraft Models,/admin/operator-aliases- menu labelOperator Aliases.
They are still present in the admin panel. If they are not visible, expand Visuals in the left menu or open the direct routes above.
1. Aircraft Models
Aircraft Models maps an ICAO aircraft type code to a readable model name.
Use it when aircraft have a type code such as A321, B738, or B77W, but the aircraft database record does not contain an exact model.
Runtime behavior:
- an exact model from the aircraft database wins,
- if the exact model is missing, VRS X looks up the ICAO type code in
Aircraft Models, - if there is no mapping, the model remains empty.
Example:
- type code:
A321, - model name:
Airbus A321, - aircraft without an exact database model can display
Airbus A321.
Validation:
- ICAO type code must be
2-8characters, - allowed type code characters are
A-Zand0-9, - model name is required and is stored trimmed,
- very long model names are shortened to 160 characters.
CSV import:
- file extension must be
.csv, - maximum upload size is
5 MB, - format is semicolon-separated:
icao_type;model_name, - optional headers such as
icao_type;model_nameare accepted, - duplicate ICAO type rows inside the same import are skipped,
- existing mappings are updated when the imported model name changes.
Mappings are stored in aircraft-model-mappings.json in the VRS X data directory.
2. Operator Aliases
Operator Aliases maps an operator code to a carrier display name.
Use it when the aircraft list has a callsign/operator code such as DLH, BAW, or RYR, and you want the UI/API to expose a readable name such as Lufthansa, British Airways, or Ryanair.
Runtime behavior:
- if the aircraft has
OperatorFlagCode, that code is used first, - otherwise VRS X derives a code from the callsign prefix,
- the derived callsign prefix must be two or three letters followed by a digit, for example
DLH123->DLH, - VRS X looks up that code in
Operator Aliases, - the matched display name is exposed as
operatorName.
Validation:
- operator code must be
2-40characters, - allowed characters are
A-Z,0-9,@,.,_,+, and-, - display name is required and is stored trimmed.
CSV import:
- file extension must be
.csv, - maximum upload size is
5 MB, - format is semicolon-separated:
code;display_name, - optional header
code;display_nameis accepted, - existing aliases are updated when the imported display name changes.
Aliases are stored in operator-aliases.json in the VRS X data directory.
3. Relationship to colors and logos
These mappings do not replace resource files.
Use:
Operator Aliasesfor readable carrier names,Operator Colorsfor marker tinting by operator code,Custom Operator Logofor customOPERATOR.bmp/pngorOPERATOR-ICAOTYPE.bmp/pngresources,Aircraft Modelsfor filling missing display model names by ICAO type.
If a logo or color does not apply, first verify which operator code the aircraft resolves to. The direct routes above are the fastest way to check and maintain mappings.