# Blueprint generator

The public website, portable Windows application and corresponding source archive include the same generator. Open the in-app Help for a complete walkthrough of its controls.

## September 2026 generator update

- Substations use a fixed full-reach lattice: 18 / 20 / 22 / 24 / 28 tiles for normal through legendary quality, with at least four corners. The snap period is the distance between boundary pole centers. Repeating a block shares its boundary poles, rather than leaving a gap. Copper wires are exported explicitly.
- If a long row blocks every possible lattice phase, the generator reduces the repeatable machine block instead of squeezing poles together. The production-chain export includes every resulting block and its final partial block.
- The preview is intentionally a deterministic symbol diagram, not a sprite animation or a game simulation. Icons are fitted and clipped to their actual integer-aligned tile footprints. Belts join edge-to-edge, turns follow adjoining belt directions, and underground routes are dashed. Inserters use a one-tile top-down arm symbol facing their pickup side.
- In the horizontal version, input inserters pick up north from the input belt and drop south into the machine. Output inserters pick up north from the machine and drop south onto the output belt. Side inserters without a reachable belt are no longer placed.
- Fluid manifolds use horizontal as well as perpendicular underground runs. Refineries alternate mirroring, inspired by the supplied four-refinery Oil Processing blueprint. Compact zero-gap rows are preferred; machine spacing increases only where Beacon coverage needs it.
- Recipe fluidbox indices are preserved, including basic oil processing's input 2 and output 3. Chemical-plant ports use the actual left/right positions instead of an invented central fluid port.
- Each generator is limited to its own product. The production-chain toggle includes that product's enabled sub-processes, merges compatible demand within this chain before rounding machine counts, and keeps different recipes/qualities/modules/inserters separate. The generator receives no data from other product targets. Material transport between different process blocks and raw-resource extraction still need to be added in game.
- Production alignment uses explicit left, right, top and bottom boundary lines. The machine row supplies the alignment lines; every physical entity also supplies collision boundaries, including Beacons, belts, inserters and pipes. The fixed Substation grid supplies the inward-facing limits: bottom face of the top row, top face of the bottom row, right face of the left column and left face of the right column. Center targets the Substation midpoint alone. A fixed Roboport in the way replaces the blocked limit with its first facing edge. The connected production block moves together until its limiting edge meets that face, with no empty tile. A centered axis takes priority over approaching an edge on the other axis. If necessary, the planner uses another full-reach cell size or fewer machines per repeatable block. No entity is moved past a hard Substation boundary, and annotation sizes never affect this calculation.
- A separate Horizontal / Vertical switch chooses the orientation of production and its belt/pipe lanes. Vertical rotates machines, Beacons, belts, splitters, inserters and fluid connections together before applying the Substation grid and alignment in preview/world axes. Exported directions, rectangular tile footprints, mirrored refinery ports, fluid-lane metadata and snap periods follow the rotation. Production-chain blocks use the same orientation. Product icons and In/Out markers remain upright.
- Every machine carries its own centered product icon, including different recipes in the same machine type within a chain. Item and fluid lanes use material icons with the text In or Out. Labels are placed after the physical geometry is fixed and move to nearby free tiles if they overlap. Labels cannot affect alignment, the snap period or exported positions; combined chains resolve label overlaps again after their blocks are assembled.
- Belt quality is no longer configurable anywhere in the generator or throughput panels. Belt type and researched stack size determine capacity. Belts, underground belts and splitters export at normal quality, including when old settings contain a higher belt quality. The Help text uses the same throughput rules.
- Belt runs start and end at the machine row's outer edges. Beacons, pipe manifolds and labels cannot lengthen them. Parallel-lane splitters fit inside the same span, on the horizontal or vertical axis selected for the blueprint.
- Changes to targets, amounts, recipes, machine/module/quality settings, coverage, orientation, alignment and snap-to-grid regenerate the relevant plan and string. Copy remains unavailable until compression of the current plan has completed; raw JSON is never mislabeled as an import string.
- Roboports are fixed: each Substation has one 4×4 Roboport exactly above or below it, as selected by the user. Above means the Roboport’s bottom edge touches the Substation’s top edge; below means its top edge touches the Substation’s bottom edge. Their centers stay three tiles apart. Orientation and alignment never move a Roboport to another face, change its side or omit it to make room. Each process block fits around this fixed support lattice before merging, so identical boundary Roboports and Substations are shared by adjacent chain blocks. Coverage checks use the occupied footprint; collision checks include neighbouring tile copies.

The short UI notice now asks users to try the string in game because the preview may display details incorrectly. This is not a claim of an in-game import test.

## Known limits

The generator is a structural layout planner. Inter-process transport, mixed input-belt feeding, specialised machine fluid port maps and requested module qualities still require in-game review where the UI reports a warning. The interactive chain export refuses oversized requests (over 4096 machines or 25000 entities) instead of silently omitting demand. Passive spoilage has no placeable machine and is rejected in chain exports. If a production layout cannot fit the fixed support lattice even after reducing the repeatable block, the UI asks for a different Beacon count or Substation quality instead of exporting missing or moved supports.

## Verification and reference data

Run the geometry regressions with:

`node --experimental-strip-types --test app/blueprint-public/*.test.mjs`

These cover entity and annotation collisions, all four inserter tiers, full-reach quality grids and shared tile boundaries, both layout orientations, rectangular machine/splitter footprints, Substation-based centering, all four facing-edge limits, fixed Roboport positions on either selected side and shared chain boundaries, mirrored fluid-network connectivity/isolation, basic oil port indices, demand merging within one product chain, complete repeated/partial process blocks, per-machine product icons, string decompression and belt-preview topology. They do not replace a Factorio import/play test.

Official reference data:

- [Substation reach and coverage](https://wiki.factorio.com/Substation)
- [Wube entity prototypes, including inserter pickup/drop vectors and refinery ports](https://github.com/wube/factorio-data/blob/master/base/prototypes/entity/entities.lua)
- [Wube recipes and explicit fluidbox indices](https://github.com/wube/factorio-data/blob/master/base/prototypes/recipe.lua)
- [Blueprint wire tuples](https://lua-api.factorio.com/latest/concepts/BlueprintWire.html)

No original game entity sprite sheets or Factorio installation files are included. The preview uses the existing icon collection and original SVG symbols; the release does not load a local game installation.
