Name your train stops from a text template, and let the circuit network fill in the blanks.
Wire signals into the combinator's input side, wire a train stop to its output side, type a name like {icon} Unload, and the stop follows whatever is on the wire.
The strongest signal wins -- the biggest count on the wire.
Positive or negative, your choice. Match positive signals for stock readings, or negative ones for deficits -- a requester circuit emitting -400 iron is asking for 400 iron, and the most negative wins. That lets a deficit circuit stay negative end to end instead of needing an inverting combinator. Signals of the other sign are ignored, and zero never counts.
Equal counts fall back to signal-picker order, so a tie can never make a station name flicker back and forth.


Why this one
Other mods rename stops from a signal. This one lets you write the name, and put the signal inside it — anywhere you like, next to your own words and your own rich text.
Interrupt wildcards
Factorio ships "any item" / "any fluid" symbols for train interrupts. Drop them straight into the station name and the real signal fills them in:
{fluid} pickup -> [fluid=crude-oil] pickup
{item} drop off -> [item=iron-ore] drop off
Type {item}, {fluid}, {fuel} or {signal} -- or click the real interrupt symbols from the Wildcards row, which do exactly the same thing.
A wildcard is also a type filter, and that is the genuinely useful part. A renamer using the fluid wildcard, fed an item, decides the cargo is not its business: it declines to rename and falls back instead. So an item renamer and a fluid renamer can watch the same wire, and only the right one acts.
| Wildcard | Matches |
|---|---|
{item} |
items |
{fluid} |
fluids |
{fuel} |
items that actually burn |
{signal} |
anything |
Template placeholders
| Placeholder | Becomes | Example |
|---|---|---|
{icon} |
icon of the winning signal | [item=iron-plate] |
{Name} |
prettified name | Iron Plate |
{name} |
prototype name | iron-plate |
{count} |
signal value | 1200 |
{type} |
signal type | item |
{quality} |
quality, blank when normal | uncommon |
{{ }} |
literal braces | { } |
A template with no placeholder is just a static name. Anything else you type, including your own rich text, passes through untouched.
Red or green, independently
Each renamer reads one wire colour, and only its input side. That is the point: run the station's own control signals — train limit, priority — on the other colour through the same physical wire run, and they will never pollute the name.
The combinator outputs nothing. Its "output side" is where you attach the station, not a source of signals.
When the wire goes quiet
Choose per combinator: keep the current name (default — avoids re-pathing trains every time the wire falls silent), or write a fallback name you configure.
Performance
Two settings you can change mid-game: rename interval (default 30 ticks) and wire re-scan interval (default 120).
The expensive job — walking the wire graph to find stops — is staggered across ticks, so per-tick cost stays flat as your base grows instead of spiking. The name is written only when it actually changed, graph walks are bounded, and a save with no renamers in it costs a single table lookup per tick.
A warning that applies to every dynamic naming mod
Renaming a station re-paths trains already heading to it. If the only [iron-plate] stop renames itself to [copper-plate], a train waiting for iron retargets and delivers to the wrong place. This is inherent to the idea, not a bug in this mod. The standard mitigation is a dummy stop per resource with its train limit set to 0, so a name always exists to path to.
Blueprints and copy-paste
Everything a renamer knows -- template, wire colour, sign, fallback -- travels with it:
- Blueprints, including books, export and import
- Ghost revival, so construction bots rebuild a configured renamer
- Copy-paste (shift + right-click, then shift + left-click), the standard Factorio way
- Undo/redo and surface cloning
For other mods
remote.call("station-renamer-combinator", "get_config", unit_number)
remote.call("station-renamer-combinator", "set_config", unit_number,
{ template = "{Name} in", wire = "green" })
remote.call("station-renamer-combinator", "copy_config", from_unit, to_unit)
remote.call("station-renamer-combinator", "list")
Invalid values are rejected rather than stored.
Open source
MIT, and genuinely open — fork it, send a PR, or open an issue. The repo has a three-tier automated test suite (host Lua, data stage, and real in-game integration on a headless server) that runs on every push.
Prior art gratefully acknowledged: Dynamic Train Stop Naming by RasmusStagsted, Smart Train Combinator by kardagan, and the 1.1-era Stringy Train Stops. No code was copied from any of them.