This is a command line utility written in Rust that helps you plan factories in Satisfactory.

Overview

Satisfactory Factory Planning Utility

This is a command line utility written in Rust that helps you plan factories in Satisfactory.

Tell it what you want to create and at what rates, and it will tell you what machines and input resources you need in order to create those products at those rates.

Additionally, tell it what resources you have access to, and it will adjust its output to compensate. If you provide information on what rate you produce those resources, it can tell you how much you can make with those resources, and which resource is the bottleneck to your production.

Installation

Download the latest release zip, unzip satisfactory_factory_planner.exe and recipes.json to a folder, and run the executable from a command line.

Sample Output

>satisfactory_factory_planner.exe "computer: 5"

Tree:
 * 5.00 Computer: 2.00 Manufacturer
   * 50.00 Circuit Board: 6.67 Assembler
     * 100.00 Copper Sheet: 10.00 Constructor
       * 200.00 Copper Ingot: 6.67 Smeltery
         - 200.00 Copper Ore
     * 200.00 Plastic: 10.00 Refinery
       - 300.00 Crude Oil
     < 100.00 Heavy Oil Residue
   * 45.00 Cable: 1.50 Constructor
     * 90.00 Wire: 3.00 Constructor
       * 45.00 Copper Ingot: 1.50 Smeltery
         - 45.00 Copper Ore
   * 90.00 Plastic: 4.50 Refinery
     - 135.00 Crude Oil
   < 45.00 Heavy Oil Residue
   * 260.00 Screw: 6.50 Constructor
     * 65.00 Iron Rod: 4.33 Constructor
       * 65.00 Iron Ingot: 2.17 Smeltery
         - 65.00 Iron Ore

Input Ingredients:
 * 245.00 Copper Ore
 * 435.00 Crude Oil
 * 65.00 Iron Ore

Intermediate Ingredients:
 * 90.00 Wire
 * 245.00 Copper Ingot
 * 100.00 Copper Sheet
 * 65.00 Iron Ingot
 * 260.00 Screw
 * 290.00 Plastic
 * 45.00 Cable
 * 50.00 Circuit Board
 * 65.00 Iron Rod

Output Products:
 * 5.00 Computer

Byproducts:
 * 145.00 Heavy Oil Residue

Machines:
 * Refinery
   - 14.50 for Plastics
 * Assembler
   - 6.67 for Circuit Boards
 * Constructor
   - 10.00 for Copper Sheets
   - 4.33 for Iron Rods
   - 6.50 for Screws
   - 3.00 for Wires
   - 1.50 for Cables
 * Manufacturer
   - 2.00 for Computers
 * Smeltery
   - 8.17 for Copper Ingots
   - 2.17 for Iron Ingots

Example Usages

  • satisfactory_factory_planner.exe "iron ingot: 120" - Figure out how much iron ore & how many smelters you need to produce 120 iron ingots per minute

  • [.exe] cable - Plan a basic factory that produces 30 cables / minute (if no output rate and no input ingredient rates are provided, the rate produced by 1 machine is assumed)

  • [.exe] "modular frame: 10" "copper ingot, reinforced iron plate" - Plan a factory that produces 10 modular frames / minute, taking into account that you already have infrastructure to produce copper ingots and reinforced iron plates

  • [.exe] "encased industrial beam" "steel ingot: 60, concrete: 90" - Figure out how many encased industrial beams you can produce, if you are producing 60 steel ingots and 90 concrete per minute

  • [.exe] "motor: 5" "iron ingot: 60" - Determine if you are able to produce 5 motors / minute, given you have access to only 60 iron ingots / minute. If not, the reported output quantity will be lower. (in this case, you will see a result for a factory that only produces ~2.67 motors / minute)

  • [.exe] "motor: 5, heavy modular frame: 10, cable: 50, plastic: 50" - See what kind of factory would be needed to produce the ingredients for a single manufaturer every minute

Further Usage Details

By default, the program will choose the first applicable recipe from recipes.json for each of the products it utilizes, and will use those to plan your factory. If you would like it to use alternative recipes, you can list the recipes in the file for a given product with --list-recipes, and then select that recipe's index for use in planning with --recipes.

Updating Recipes

The included recipes.json file was generated using the pair utility Satisfactory Recipe Importer, using the Docs.json file included with Update 8 of Satisfactory. For future updates, you may need to re-run the utility to get up-to-date recipes.

Options

  • -p, --show-perfect-splits - Convert final machine counts to perfect split whole numbers, and list the underclocks for them

Example:

>[.exe] "steel beam: 50" --show-perfect-splits

Tree:
 * 50.00 Steel Beam: 3.33 Constructor
   * 200.00 Steel Ingot: 4.44 Foundry
     - 200.00 Iron Ore
     - 200.00 Coal Ore

Input Ingredients:
 * 200.00 Coal Ore
 * 200.00 Iron Ore

Intermediate Ingredients:
 * 200.00 Steel Ingot

Output Products:
 * 50.00 Steel Beam

Machines:
 * Foundry
   - 4.44 for Steel Ingots, or 2^1 * 3^1 = 6 at 74.07%
 * Constructor
   - 3.33 for Steel Beams, or 2^2 * 3^0 = 4 at 83.33%
  • -s, --resupply-insufficient - If not enough input resources are available, then resupply more to fulfill the requested quota, instead of limiting the output totals

Example:

>[.exe] "steel beam: 60" "steel ingot: 160" --resupply-insufficient

Tree:
 * 60.00 Steel Beam: 4.00 Constructor
   - 160.00 Steel Ingot
   * 80.00 Steel Ingot: 1.78 Foundry
     - 80.00 Iron Ore
     - 80.00 Coal Ore

Input Ingredients:
 * 160.00 Steel Ingot
 * 80.00 Iron Ore
 * 80.00 Coal Ore

Intermediate Ingredients:
 * 80.00 Steel Ingot

Output Products:
 * 60.00 Steel Beam

Machines:
 * Constructor
   - 4.00 for Steel Beams
 * Foundry
   - 1.78 for Steel Ingots
  • -c, --recipe-config <RECIPE_CONFIG>
    Specify a custom config file for crafting recipes [default: recipes.json]

Example:

>[.exe] "steel beam: 60" --recipe-config my-recipes.json

Tree:
 * 60.00 Steel Beam: 4.00 Constructor
   * 240.00 Steel Ingot: 4.00 Foundry
     * 160.00 Iron Ingot: 5.33 Smeltery
       - 160.00 Iron Ore
     - 160.00 Coal Ore

Input Ingredients:
 * 160.00 Coal Ore
 * 160.00 Iron Ore

Intermediate Ingredients:
 * 160.00 Iron Ingot
 * 240.00 Steel Ingot

Output Products:
 * 60.00 Steel Beam

Machines:
 * Foundry
   - 4.00 for Steel Ingots
 * Constructor
   - 4.00 for Steel Beams
 * Smeltery
   - 5.33 for Iron Ingots
  • -l, --list-recipes - List all recipes that produce the given products passed to <WANT>

Example:

>[.exe] fuel --list-recipes

Fuel:
 1.
    Ingredients:
     - 60.00 Crude Oil/min
    Products:
     - 40.00 Fuel/min
     - 30.00 Polymer Resin/min

 2.
    Ingredients:
     - 60.00 Heavy Oil Residue/min
    Products:
     - 40.00 Fuel/min
  • -r, --recipes - Specify by index the recipes you would like to use per each product. Syntax is name:index[,name:index[,...]]

Example:

>[.exe] fuel:20 --recipes fuel:1

Tree:
 * 20.00 Fuel: 0.50 Refinery
   - 30.00 Crude Oil
 < 15.00 Polymer Resin

Input Ingredients:
 * 30.00 Crude Oil

Output Products:
 * 20.00 Fuel

Byproducts:
 * 15.00 Polymer Resin

Machines:
 * Refinery
   - 0.50 for Fuels

>[.exe] fuel:20 --recipes fuel:2

Tree:
 * 20.00 Fuel: 0.50 Refinery
   * 30.00 Heavy Oil Residue: 3.00 Refinery
     - 90.00 Crude Oil
   < 60.00 Plastic

Input Ingredients:
 * 90.00 Crude Oil

Intermediate Ingredients:
 * 30.00 Heavy Oil Residue

Output Products:
 * 20.00 Fuel

Byproducts:
 * 60.00 Plastic

Machines:
 * Refinery
   - 0.50 for Fuels
   - 3.00 for Heavy Oil Residues
  • -b, --reuse-byproducts - !! EXPERIMENTAL !! Allow the reuse of byproduct outputs from the system as inputs

Example:

>[.exe] "plastic: 45, fuel: 20" --reuse-byproducts

Tree:
 * 45.00 Plastic: 2.25 Refinery
   - 67.50 Crude Oil
 > 22.50 Heavy Oil Residue

 * 20.00 Fuel: 0.50 Refinery
   < 22.50 Heavy Oil Residue
   * 7.50 Heavy Oil Residue: 0.38 Refinery
     - 11.25 Crude Oil
   > 7.50 Rubber

Input Ingredients:
 * 78.75 Crude Oil

Intermediate Ingredients:
 * 7.50 Heavy Oil Residue

Output Products:
 * 20.00 Fuel
 * 45.00 Plastic

Byproducts:
 * 7.50 Rubber

Machines:
 * Refinery
   - 2.25 for Plastics
   - 0.38 for Heavy Oil Residues
   - 0.50 for Fuels

Known Flaws

  • Byproducts are not utilized in the production chain Enable experimental byproduct reuse with the --reuse-byproducts flag

Other Notes

The recipe information the program draws from is contained inside recipes.json. Currently, the file contains all recipes availabe within the game as of Update 8. This includes all alternative recipes. Additional recipes, if you like, can be added by modifying recipes.json. This is left as an exercise to the user :).

If the game updates with new recipes, you can try running the Satisfactory Recipe Importer to automatically generate a new recipes.json file for the updated version of the game.



I hope you enjoy using my program!~ ❤️

You might also like...
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team

yb (Yocto Buddy) yb is designed to make it easy to setup and (perhaps more importantly) keep Yocto environments up-to-date and in-sync with your team.

🔣 nerdfix helps you to find/fix obsolete Nerd Font icons in your project.

🔣 nerdfix nerdfix helps you to find/fix obsolete Nerd Font icons in your project. 💭 Why Nerd Fonts is used in many projects for a beautiful UI. It p

Sleek is a CLI tool for formatting SQL. It helps you maintain a consistent style across your SQL code, enhancing readability and productivity.

Sleek: SQL Formatter ✨ Sleek is a CLI tool for formatting SQL. It helps you maintain a consistent style across your SQL code, enhancing readability an

A Turing-complete but dead-simple spaced repetition CLI that helps you learn stuff.

Forne — Learn Stuff Forne is a Turing-complete spaced repetition engine to help you learn stuff your way. What does that mean? Well, there are a few p

Rust command line utility to quickly display useful secrets in a Kubernetes namespace
Rust command line utility to quickly display useful secrets in a Kubernetes namespace

kube-secrets This is a command line utility for quickly looking at secrets in a Kubernetes namespace that are typically looked at by humans. It specif

fixred is a command line utility to fix outdated links in files with redirect URLs.
fixred is a command line utility to fix outdated links in files with redirect URLs.

fixred fixred is a command line utility to fix outdated links in files with redirect URLs. Installation fixred is installed via cargo package manager.

 A command-line utility that creates project structure.
A command-line utility that creates project structure.

petridish A command-line utility that creates project structure. If you have heard of the cookiecutter project, petridish is a rust implementation of

Command line utility for controlling LIFX smart lights

lifxc is a command line utility for controlling LIFX smart lights. Currently, communication over the LIFX LAN protocol is supported.

Gecko's trusty package manager and command-line utility.
Gecko's trusty package manager and command-line utility.

Geckos have super-powers, ya'know? Grip is Gecko's trusty package manager and command-line utility. USAGE: grip [FLAGS] [file] [SUBCOMMAND] FLAGS

Owner
Maurdekye
Maurdekye
Mafa is a command-line tool that helps people interact with online websites in a terminal(tty).

Table of Contents A Small Demo Installation Prerequisite Option 1: Cargo install (recommended) Option 2: Build from source Option 3: Prebuilt binaries

Michael Lee 6 Jul 10, 2023
Mafa is a command-line tool that helps people interact with online websites in a terminal(tty).

A Small Demo Installation Prerequisite Option 1: Cargo install (recommended) Option 2: Build from source Option 3: Prebuilt binaries Mafa is for me? W

Michael Lee 6 Jul 23, 2023
A simplified recreation of the command-line utility grep written in Rust.

smolgrep A simplified recreation of the command-line utility grep written in Rust. Download and run Download Rust On Mac/Linux Open a terminal and ent

Thi Dinh 0 Dec 27, 2021
A command-line utility which aligns a block of text within the terminal (or a specified number of columns), written in Rust.

align: a command line utility for aligning text. ⭐ Overview Aligns text within the terminal (or a specified number of columns). The text is treated as

Khalil Ouali 6 Aug 11, 2023
Small command-line tool to switch monitor inputs from command line

swmon Small command-line tool to switch monitor inputs from command line Installation git clone https://github.com/cr1901/swmon cargo install --path .

William D. Jones 5 Aug 20, 2022
rpm (Rust project manager) is a tool that helps you to manage your rust projects

rpm rpm (Rust project manager) is a open source tool for managing your rust project in an organized way Installation # make sure you have rust install

Dilshad 4 May 4, 2023
A Rust CLI tool that helps you enforce Git policies through Git hooks both server and client side

GitPolicyEnforcer This is a command line utility written in Rust, that helps you utilize Git hooks, to enforce various policies. It currently supports

Vagelis Prokopiou 4 Aug 14, 2022
Deadliner helps you keep track of the time left for your deadline by dynamically updating the wallpaper of your desktop with the time left.

Deadliner Watch the YouTube video What's Deadliner? Deadliner is a cross-platform desktop application for setting deadline for a project and keeping t

Deadliner 34 Dec 16, 2022
gfold is a CLI-driven application that helps you keep track of multiple Git repositories.

gfold is a CLI-driven application that helps you keep track of multiple Git repositories.

Nick Gerace 215 Jan 4, 2023
Helps you keep track of time for team members across different time zones & DST changes

Teamdate Helps you keep track of time for team members across different timezones and other daylight saving changes based off their location. Because

Alex Snaps 7 Jan 9, 2023