Import a Layout from TrainController

Last updated: July 8, 2026

Concept

Importing a TrainController project is how most operators create their first RailCommand layout. You upload a .yrrg or .yrl file (up to 50 MB) and RailScanPro builds a brand-new layout from it: the track plan, switchboards, accessories, and — optionally — your roster and trains.

The mental model is derived-not-stored. Your file is parsed into a staged preview; nothing is saved until you press Create. The graph, signal topology, and block wiring are not copied verbatim — they are derived when the layout is created. In between, you review the decoded objects in per-type Transform Tables and resolve anything the decoder flagged instead of guessing. Import is web-only — it always happens in the browser.

How To

Prerequisites: a TrainController .yrrg/.yrl export (max 50 MB); you own the file or are authorized to import it; you are signed in as the organization that will own the layout.

  1. From RailCommand Layouts (/app/railcommand/layouts) click Import from TrainController, or go straight to /app/railcommand/layouts/import/traincontroller.
  2. Drag your file onto the drop zone or use Browse Files. Tick "I own this layout file or am authorized to import it..." (required), then click Analyze File. The file uploads and is parsed server-side; nothing is written yet.
  3. Review the Transform Tables. One tab per object type — Turnouts, Toggles, Signals, Sensors, Blocks, Routes, Connectors, Controls, plus Roster/Trains when the file carries rolling stock, and Warnings. Each tab badge shows its count.
  4. On each tab, use the include checkbox to keep or drop a row, edit fields inline (name, panel, DCC, aspects, speeds), fix a placement with the COL:ROW field, or use Add row to insert one. Panel and per-column filters narrow large tables; the footer flags any included row missing a position.
  5. Resolve the flagged uncertainty. On Signals, any head whose facing the decoder could not determine shows a Needs direction flag — pick N/E/S/W (a suggestion is offered) or exclude the row. On Trains, expand a flagged train and set the member's Dir to forward or reversed. The importer flags rather than guesses; every included flag must be cleared before you continue.
  6. Click Create layout (it shows the object count). The graph, signal topology, and block wiring derive at this step, and the summary reports what materialized.

Troubleshooting

"Invalid file type" or "File size exceeds 50 MB" — Only .yrrg/.yrl files up to 50 MB are accepted. Re-export a fresh project from TrainController.

Create layout is disabled with a lock reason — An included signal, train member, or row still needs attention. Follow the amber "Signals tab" / "Trains tab" link, pick a value or exclude the row, then create.

A refresh sent me back to Upload — The staged review lives only in your session, so refreshing or leaving discards it. Re-upload to restart — nothing was written to your account.

An included row didn't appear after Create — A row flagged "N need a position" does not materialize until it has a COL:ROW placement.

A sensor is locked with "Imported with block" — Expected: block-embedded contacts import their occupancy with the block, not as standalone sensors.

Rolling stock is missing — Confirm "Import rolling stock & trains with this layout" is on, or import it later from Asset Management at /app/asset-management/import.

Safety Notes

Import is a web-only authoring action. The ownership attestation is required for legal reasons, and the whole flow runs in the browser — it never actuates hardware. Creating a layout writes a definition; it does not energize track, throw a turnout, or drive a command station. The DCC addresses, aspect counts, and switch times you enter are stored configuration only.

Running the layout happens later on the RailCommand desktop, which presents state and forwards operator intent; the local/UE5 runtime owns all safety-critical execution — interlocking, movement authority, and emergency stop. Correct addresses and facings at import make that runtime correct, but neither the web nor the desktop UI actuates hardware itself.