diff --git a/README.md b/README.md
index 0d8c70b5..a76c9402 100644
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@ This project is based on ES5. Some ES2015 features are used but most of them are
For most assets I use Adobe Photoshop, you can find them in `assets/`.
-You will need a Texture Packer license in order to regenerate the atlas. If you don't have one but want to contribute assets, let me know and I might compile it for you. I'm currently switching to an open source solution but I can't give an estimate when thats done.
+You can use the Texture Packing python script in [res_pipeline](/res_pipeline) to generate packed textures. Default builds over [res_built/atlas](/res_built/atlas). Requires [free-tex-packer-cli](https://github.com/odrick/free-tex-packer-cli). Thanks to [Theisen1337](https://github.com/theisen1337) for intergrating.
+
diff --git a/res_pipeline/Pack_images.py b/res_pipeline/Pack_images.py
new file mode 100644
index 00000000..16d49125
--- /dev/null
+++ b/res_pipeline/Pack_images.py
@@ -0,0 +1,64 @@
+from __future__ import print_function
+import os
+
+"""
+
+ @author: Thomas Theis
+ June 2020
+ GNU General Public License v3.0
+
+"""
+os.system("free-tex-packer-cli --project .\shapez_size_100.ftpp")
+os.system("free-tex-packer-cli --project .\shapez_size_75.ftpp")
+os.system("free-tex-packer-cli --project .\shapez_size_50.ftpp")
+os.system("free-tex-packer-cli --project .\shapez_size_25.ftpp")
+os.system("free-tex-packer-cli --project .\shapez_size_10.ftpp")
+
+
+
+def update_file( filename, match , replacement ):
+ """
+
+ Update Line in file, where match.
+
+ """
+
+ # Read File
+ with open(filename, 'r') as file:
+ # Read list of lines into a list object
+ data = list(file.readlines())
+
+ # Loop through lines in file backwards, (meta: I know the keyword is at the bottem of the file.)
+ for i in range(len(data) -1, 0, -1):
+
+ # Check for Match
+ if match in data[i]:
+
+ # Print data before updated.
+ print("\n\nUpdated the line:")
+ print(data[i])
+ print("New line:")
+
+
+ # Update data
+ data[i] = replacement
+
+ # Print New data
+ print(data[i],"\n\n")
+
+ # Break loop
+ break
+
+
+ # Re-Open file to write
+ with open(filename, 'w') as file:
+
+ # Write modified data.
+ file.writelines( data )
+
+
+update_file("../res_built/atlas/atlas0_100.json", "image", ' "image": "atlas0_100.png",\n')
+update_file("../res_built/atlas/atlas0_75.json", "image", ' "image": "atlas0_75.png",\n')
+update_file("../res_built/atlas/atlas0_50.json", "image", ' "image": "atlas0_50.png",\n')
+update_file("../res_built/atlas/atlas0_25.json", "image", ' "image": "atlas0_25.png",\n')
+update_file("../res_built/atlas/atlas0_10.json", "image", ' "image": "atlas0_10.png",\n')
diff --git a/res_pipeline/Steps.txt b/res_pipeline/Steps.txt
new file mode 100644
index 00000000..8e2cb2f3
--- /dev/null
+++ b/res_pipeline/Steps.txt
@@ -0,0 +1,9 @@
+You need to download free-tex-packer-cli from node.
+
+1. npm install -g free-tex-packer-cli
+
+2. run the python script.
+
+
+*** NOTE ***
+If you see flashing on the edges of animation textures i.e. belts. Try changing the "alphaThreshold" (between 0 and 1.0) key in the *.ftpp files
\ No newline at end of file
diff --git a/res_pipeline/shapez_size_10.ftpp b/res_pipeline/shapez_size_10.ftpp
new file mode 100644
index 00000000..60d43a06
--- /dev/null
+++ b/res_pipeline/shapez_size_10.ftpp
@@ -0,0 +1,38 @@
+{
+ "meta": {
+ "version": "0.6.5"
+ },
+ "savePath": "",
+ "images": [],
+ "folders": [
+ "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites"
+ ],
+ "packOptions": {
+ "textureName": "../res_built/atlas/atlas0_10",
+ "textureFormat": "png",
+ "removeFileExtension": false,
+ "prependFolderName": true,
+ "scale": 0.1,
+ "scaleMethod": "BICUBIC",
+ "filter": "none",
+ "exporter": "JSON (hash)",
+ "base64Export": false,
+ "tinify": false,
+ "tinifyKey": "",
+ "fileName": "pack-resultxx",
+ "savePath": "",
+ "width": 2048,
+ "height": 2048,
+ "fixedSize": false,
+ "powerOfTwo": false,
+ "padding": 0,
+ "extrude": 2,
+ "allowRotation": false,
+ "allowTrim": true,
+ "trimMode": "trim",
+ "alphaThreshold": 0.5,
+ "detectIdentical": true,
+ "packer": "MaxRectsBin",
+ "packerMethod": "BestShortSideFit"
+ }
+}
\ No newline at end of file
diff --git a/res_pipeline/shapez_size_100.ftpp b/res_pipeline/shapez_size_100.ftpp
new file mode 100644
index 00000000..7f2ae82b
--- /dev/null
+++ b/res_pipeline/shapez_size_100.ftpp
@@ -0,0 +1,38 @@
+{
+ "meta": {
+ "version": "0.6.5"
+ },
+ "savePath": "",
+ "images": [],
+ "folders": [
+ "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites"
+ ],
+ "packOptions": {
+ "textureName": "../res_built/atlas/atlas0_100",
+ "textureFormat": "png",
+ "removeFileExtension": false,
+ "prependFolderName": true,
+ "scale": 1,
+ "scaleMethod": "BICUBIC",
+ "filter": "none",
+ "exporter": "JSON (hash)",
+ "base64Export": false,
+ "tinify": false,
+ "tinifyKey": "",
+ "fileName": "pack-resultxx",
+ "savePath": "",
+ "width": 2048,
+ "height": 2048,
+ "fixedSize": false,
+ "powerOfTwo": false,
+ "padding": 0,
+ "extrude": 2,
+ "allowRotation": false,
+ "allowTrim": true,
+ "trimMode": "trim",
+ "alphaThreshold": 0.5,
+ "detectIdentical": true,
+ "packer": "MaxRectsBin",
+ "packerMethod": "BestShortSideFit"
+ }
+}
\ No newline at end of file
diff --git a/res_pipeline/shapez_size_25.ftpp b/res_pipeline/shapez_size_25.ftpp
new file mode 100644
index 00000000..bf26e3a6
--- /dev/null
+++ b/res_pipeline/shapez_size_25.ftpp
@@ -0,0 +1,38 @@
+{
+ "meta": {
+ "version": "0.6.5"
+ },
+ "savePath": "",
+ "images": [],
+ "folders": [
+ "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites"
+ ],
+ "packOptions": {
+ "textureName": "../res_built/atlas/atlas0_25",
+ "textureFormat": "png",
+ "removeFileExtension": false,
+ "prependFolderName": true,
+ "scale": 0.25,
+ "scaleMethod": "BICUBIC",
+ "filter": "none",
+ "exporter": "JSON (hash)",
+ "base64Export": false,
+ "tinify": false,
+ "tinifyKey": "",
+ "fileName": "pack-resultxx",
+ "savePath": "",
+ "width": 2048,
+ "height": 2048,
+ "fixedSize": false,
+ "powerOfTwo": false,
+ "padding": 0,
+ "extrude": 2,
+ "allowRotation": false,
+ "allowTrim": true,
+ "trimMode": "trim",
+ "alphaThreshold": 0.5,
+ "detectIdentical": true,
+ "packer": "MaxRectsBin",
+ "packerMethod": "BestShortSideFit"
+ }
+}
\ No newline at end of file
diff --git a/res_pipeline/shapez_size_50.ftpp b/res_pipeline/shapez_size_50.ftpp
new file mode 100644
index 00000000..d470c710
--- /dev/null
+++ b/res_pipeline/shapez_size_50.ftpp
@@ -0,0 +1,38 @@
+{
+ "meta": {
+ "version": "0.6.5"
+ },
+ "savePath": "",
+ "images": [],
+ "folders": [
+ "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites"
+ ],
+ "packOptions": {
+ "textureName": "../res_built/atlas/atlas0_50",
+ "textureFormat": "png",
+ "removeFileExtension": false,
+ "prependFolderName": true,
+ "scale": 0.5,
+ "scaleMethod": "BICUBIC",
+ "filter": "none",
+ "exporter": "JSON (hash)",
+ "base64Export": false,
+ "tinify": false,
+ "tinifyKey": "",
+ "fileName": "pack-resultxx",
+ "savePath": "",
+ "width": 2048,
+ "height": 2048,
+ "fixedSize": false,
+ "powerOfTwo": false,
+ "padding": 0,
+ "extrude": 2,
+ "allowRotation": false,
+ "allowTrim": true,
+ "trimMode": "trim",
+ "alphaThreshold": 0.5,
+ "detectIdentical": true,
+ "packer": "MaxRectsBin",
+ "packerMethod": "BestShortSideFit"
+ }
+}
\ No newline at end of file
diff --git a/res_pipeline/shapez_size_75.ftpp b/res_pipeline/shapez_size_75.ftpp
new file mode 100644
index 00000000..a0252dcd
--- /dev/null
+++ b/res_pipeline/shapez_size_75.ftpp
@@ -0,0 +1,38 @@
+{
+ "meta": {
+ "version": "0.6.5"
+ },
+ "savePath": "",
+ "images": [],
+ "folders": [
+ "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites"
+ ],
+ "packOptions": {
+ "textureName": "../res_built/atlas/atlas0_75",
+ "textureFormat": "png",
+ "removeFileExtension": false,
+ "prependFolderName": true,
+ "scale": 0.75,
+ "scaleMethod": "BICUBIC",
+ "filter": "none",
+ "exporter": "JSON (hash)",
+ "base64Export": false,
+ "tinify": false,
+ "tinifyKey": "",
+ "fileName": "pack-resultxx",
+ "savePath": "",
+ "width": 2048,
+ "height": 2048,
+ "fixedSize": false,
+ "powerOfTwo": false,
+ "padding": 0,
+ "extrude": 2,
+ "allowRotation": false,
+ "allowTrim": true,
+ "trimMode": "trim",
+ "alphaThreshold": 0.5,
+ "detectIdentical": true,
+ "packer": "MaxRectsBin",
+ "packerMethod": "BestShortSideFit"
+ }
+}
\ No newline at end of file