Preview of a blueprint string. This is a technical description of the blueprint string format, used to share blueprints with other users.
A blueprint string is a JSON representation of the blueprint, compressed with zlib deflate using compression level 9 and then encoded using base64 with a version byte in front of the encoded string. The version byte is currently 0 (for all Factorio versions through 1.1).
So to get the JSON representation of a blueprint from a blueprint string, skip the first byte, base64 decode the string, and finally decompress using zlib inflate.
Json representation of a blueprint/blueprint book
The json representation of a blueprint or blueprint book is one large object inside another "wrapping" object, its key inside that object is either blueprint or blueprint-book.
Blueprint book object
Key
Description
Data type
item
String, the name of the item that was saved ("blueprint-book" in vanilla).
String
label
String, the name of the blueprint set by the user.
String
label_color
The color of the label of this blueprint. Optional. #Color object .
Object
blueprints
The actual content of the blueprint book, array of objects containing an "index" key and 0-based value and a "blueprint" key with a #Blueprint object as the value.
Array
active_index
Index of the currently selected blueprint, 0-based.
Integer
icons
The icons of the blueprint book set by the user, array of #Icon objects .
Array
description
The description of the blueprint book. Optional.
String
version
The map version of the map the blueprint was created in, see Version string format .
Integer (long)
Blueprint object
Key
Description
Data type
item
String, the name of the item that was saved ("blueprint" in vanilla).
String
label
String, the name of the blueprint set by the user.
String
label_color
The color of the label of this blueprint. Optional. #Color object .
Object
entities
The actual content of the blueprint, array of #Entity objects .
Array
tiles
The tiles included in the blueprint, array of #Tile objects .
Array
icons
The icons of the blueprint set by the user, array of #Icon objects .
Array
schedules
The schedules for trains in this blueprint, array of #Schedule objects .
Array
description
The description of the blueprint. Optional.
String
snap-to-grid
The dimensions of the grid to use for snapping. Optional. #Position object .
Object
absolute-snapping
Whether the blueprint uses absolute or relative snapping. Optional.
Boolean
position-relative-to-grid
Offset relative to the global absolute snapping grid. Optional. #Position object .
Object
version
The map version of the map the blueprint was created in.
Integer (long)
Icon object
Key
Description
Data type
index
Index of the icon, 1-based.
Integer
signal
The icon that is displayed, #SignalID object .
Object
SignalID object
Key
Description
Data type
name
Name of the signal prototype this signal is set to.
String
type
Type of the signal. Either "item", "fluid" or "virtual". Note for 2.x: property appears to be optional
String
Entity object
Key
Description
Data type
entity_number
Index of the entity, 1-based.
Integer
name
Prototype name of the entity (e.g. "offshore-pump").
String
position
#Position object , position of the entity within the blueprint.
Object
direction
Direction of the entity, uint (optional). Note for 2.x: Direction appears to be double the previous values
Integer
orientation
Orientation of cargo wagon or locomotive, value 0 to 1 (optional).
Floating Point
connections
Circuit connection, object with keys starting from 1, values are #Connection objects (optional).
Object
neighbours
Copper wire connections, array of entity_numbers (optional).
Array
control_behavior
#Control behavior object of this entity (optional).
Object
items
Item requests by this entity, this is what defines the item-request-proxy when the blueprint is placed, optional. #Item request object
Object
recipe
Name of the recipe prototype this assembling machine is set to, optional, string.
String
bar
Used by Prototype/Container , optional. The index of the first inaccessible item slot due to limiting with the red "bar". 0-based Types/ItemStackIndex .
Integer
ammo_inventory
Ammo inventory of an entity (e.g. Spidertron ), optional. #Inventory object
Object
trunk_inventory
Boot/Luggage inventory of an entity (e.g. storage inventory of a Spidertron), optional. #Inventory object
Object
inventory
Cargo wagon inventory configuration, optional. #Inventory object
Object
infinity_settings
Used by Prototype/InfinityContainer , optional. #Infinity settings object
Object
type
Type of the underground belt or loader, optional. Either "input" or "output".
String
input_priority
Input priority of the splitter, optional. Either "right" or "left", "none" is omitted.
String
output_priority
Output priority of the splitter, optional. Either "right" or "left", "none" is omitted.
String
filter
Filter of the splitter, optional. Name of the item prototype the filter is set to, string.
String
filters
Filters of the filter inserter or loader, optional. Array of #Item filter objects .
Array
filter_mode
Filter mode of the filter inserter, optional. Either "whitelist" or "blacklist".
String
override_stack_size
The stack size the inserter is set to, optional. Types/uint8 .
Integer
drop_position
The drop position the inserter is set to, optional. #Position object .
Object
pickup_position
The pickup position the inserter is set to, optional. #Position object .
Object
request_filters
Used by Prototype/LogisticContainer , optional. #Logistic filter object .
Array
request_from_buffers
Boolean. Whether this requester chest can request from buffer chests.
Boolean
parameters
Used by Programmable speaker , optional. #Speaker parameter object .
Object
alert_parameters
Used by Programmable speaker , optional. #Speaker alert parameter object
Object
auto_launch
Used by the rocket silo, optional. Boolean, whether auto launch is enabled.
Boolean
variation
Used by Prototype/SimpleEntityWithForce or Prototype/SimpleEntityWithOwner , optional. Types/GraphicsVariation
color
Color of the Prototype/SimpleEntityWithForce , Prototype/SimpleEntityWithOwner , or train station, optional. #Color object .
Object
station
The name of the train station, optional.
String
manual_trains_limit
The manually set train limit of the train station, optional.
Integer
switch_state
The current state of the power switch, optional.
Boolean
tags
Dictionary of arbitrary data, optional. Tags .
Object
Inventory object
Key
Description
Data type
filters
Array of #Item filter objects .
Array
bar
The index of the first inaccessible item slot due to limiting with the red "bar". 0-based, optional. Types/ItemStackIndex .
Integer
Schedule object
Key
Description
Data type
schedule
Array of #Schedule Record objects .
Array
locomotives
Array of entity numbers of locomotives using this schedule.
Array
Schedule Record object
Key
Description
Data type
station
The name of the stop for this schedule record.
String
wait_conditions
Array of #Wait Condition objects .
Array
temporary
Whether this is a temporary schedule record. Optional.
Boolean
Wait Condition object
Key
Description
Data type
type
One of "time", "inactivity", "full", "empty", "item_count", "circuit", "robots_inactive", "fluid_count", "passenger_present", "passenger_not_present".
String
compare_type
Either "and", or "or". Tells how this condition is to be compared with the preceding conditions in the corresponding wait_conditions array.
String
ticks
Number of ticks to wait or of inactivity. Only present when type is "time" or "inactivity". Optional.
uint
condition
CircuitCondition object , only present when type is "item_count", "circuit" or "fluid_count".
Object
Tile object
Key
Description
Data type
name
Prototype name of the tile (e.g. "concrete")
String
position
#Position object , position of the entity within the blueprint.
Object
Position object
Key
Description
Data type
x
X position within the blueprint, 0 is the center.
Floating point
y
Y position within the blueprint, 0 is the center.
Floating point
Connection object
Object containing information about the connections to other entities formed by red or green wires.
Key
Description
Data type
1
First connection point. The default for everything that doesn't have multiple connection points.#Connection point object
Object
2
Second connection point. For example, the "output" part of an arithmetic combinator.#Connection point object
Object
Connection point object
The actual point where a wire is connected to. Contains information about where it is connected to.
Key
Description
Data type
red
An array of #Connection data object containing all the connections from this point created by red wire.
Array
green
An array of #Connection data object containing all the connections from this point created by green wire.
Array
Connection data object
Information about a single connection between two connection points.
Key
Description
Data type
entity_id
ID of the entity this connection is connected with.
Integer
circuit_id
The circuit connector id of the entity this connection is connected to, see defines.circuit_connector_id .
Integer
Item request object
1 or more instances of key/value pairs.
Key is the name of the item, string.
Value is the amount of items to be requested, Types/ItemCountType .
Item filter object
Key
Description
Data type
name
Name of the item prototype this filter is set to.
String
index
Index of the filter, 1-based.
Integer
Infinity settings object
Key
Description
Data type
remove_unfiltered_items
Boolean. Whether the "remove unfiltered items" checkbox is checked.
Boolean
filters
Filters of the infinity container, optional. Array of #Infinity filter objects .
Array
Infinity filter object
Key
Description
Data type
name
Name of the item prototype the filter is set to, string.
String
count
Number the filter is set to, Types/ItemCountType .
Integer
mode
Mode of the filter. Either "at-least", "at-most", or "exactly".
String
index
Index of the filter, 1-based.
Integer
Logistic filter object
Key
Description
Data type
name
Name of the item prototype this filter is set to.
String
index
Index of the filter, 1-based.
Integer
count
Number the filter is set to, Types/ItemCountType . Is 0 for storage chests.
Integer
Speaker parameter object
Key
Description
Data type
playback_volume
Types/double . Volume of the speaker.
Floating point
playback_globally
Boolean, whether global playback is enabled.
Boolean
allow_polyphony
Boolean, whether polyphony is allowed.
Boolean
Speaker alert parameter object
Key
Description
Data type
show_alert
Boolean, whether an alert is shown.
Boolean
show_on_map
Boolean, whether an alert icon is shown on the map.
Boolean
icon_signal_id
The icon that is displayed with the alert, #SignalID object .
Object
alert_message
String, message of the alert.
String
Color object
Key
Description
Data type
r
red, number from 0 to 1.
Floating point
g
green, number from 0 to 1.
Floating point
b
blue, number from 0 to 1.
Floating point
a
transparency, number from 0 to 1.
Floating point
Control behavior object
ALL fields are optional and depend on the type of the entity.
Key
Description
Data type
logistic_condition
CircuitCondition
Object
connect_to_logistic_network
Whether this entity is connected to the logistic network and enables/disables based on logistic_condition.
Boolean
circuit_close_signal
Whether this rail signal can be closed by circuit_condition.
Boolean
circuit_read_signal
Whether or not to read the state of this rail/chain signal.
Boolean
red_output_signal
#SignalID to use if the rail/chain signal is currently red.
Object
orange_output_signal
#SignalID to use if the rail/chain signal is currently orange.
Object
green_output_signal
#SignalID to use if the rail/chain signal is currently green.
Object
blue_output_signal
#SignalID to use if the chain signal is currently blue.
Object
circuit_condition
CircuitCondition
Object
circuit_enable_disable
Enable or disable based on circuit_condition.
Boolean
send_to_train
Send circuit values to the train to use in schedule conditions.
Boolean
read_from_train
Get the currently stopped trains cargo.
Boolean
read_stopped_train
Get the currently stopped trains ID.
Boolean
train_stopped_signal
#SignalID to output the train ID on.
Object
set_trains_limit
Whether this stations trains limit will be set through circuit values.
Boolean
trains_limit_signal
#SignalID to use to set the trains limit.
Object
read_trains_count
Whether to read this stations currently on route trains count.
Boolean
trains_count_signal
#SignalID to output the on route trains count on.
Object
read_logistics
Whether this roboport should output the contents of its network.
Boolean
read_robot_stats
Whether this roboport should output the robot stats of its network.
Boolean
available_logistic_output_signal
#SignalID to output available logistic robots on.
Object
total_logistic_output_signal
#SignalID to output the total count of logistic robots on.
Object
available_construction_output_signal
#SignalID to output available construction robots on.
Object
total_construction_output_signal
#SignalID to output the total count of construction robots on.
Object
circuit_open_gate
Whether to limit the gate opening with circuit_condition.
Boolean
circuit_read_sensor
Whether to send the wall-gate proximity sensor to the circuit network.
Boolean
output_signal
#SignalID to output the wall-gate sensor / accumulator charge on.
Object
circuit_read_hand_contents
Whether to read this belts content or inserters hand.
Boolean
circuit_contents_read_mode
defines.control_behavior.transport_belt.content_read_mode
Integer
circuit_mode_of_operation
Integer
circuit_hand_read_mode
defines.control_behavior.inserter.hand_read_mode
Integer
circuit_set_stack_size
Whether to set the inserters stack size from a circuit signal.
Boolean
stack_control_input_signal
#SignalID to use to set the inserters stack size.
Object
circuit_read_resources
Whether this miner should output its remaining resource amounts to the circuit network.
Boolean
circuit_resource_read_mode
defines.control_behavior.mining_drill.resource_read_mode
Integer
is_on
Whether this constant combinator is currently on or off.
Boolean
filters
Array of ConstantCombinatorParameters .
Array
arithmetic_conditions
ArithmeticCombinatorParameters
Object
decider_conditions
DeciderCombinatorParameters
Object
circuit_parameters
ProgrammableSpeakerCircuitParameters
Object
use_colors
Whether this lamp should use colors or not.
Boolean
Example code
On a typical Bash command line, the blueprint can be decoded like so:
echo " $blueprint_string " | cut -c2- | base64 -d | pigz -d
How to decode a string to lua table:
local str = "$blueprint_string" ;
local bp_to_table = function ( instr )
--[[version and the body part]]
local version = string.sub ( instr , 1 , 1 );
local body = string.sub ( instr , 2 );
--[[then decode it]]
local json_str = game . decode_string ( body );
--[[then turn it into table]]
local output = game . json_to_table ( json_str );
return output ;
end
--[[and this could test if it print properly]]
game . print ( serpent . block ( bp_to_table ( str ) ) );