diff --git a/devTools/embed_favicon.py b/devTools/embed_favicon.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6c44e54a1918d438ba193c4cd7aa9f234ff302e
--- /dev/null
+++ b/devTools/embed_favicon.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+
+'''
+Script for embedding favicons into the SugarCube Header.
+
+Script file is expected to reside in devTools directory.
+
+Note: This does not actually check the image file's contents for size detection.
+
+Usage:
+python3 embed_favicon.py
+'''
+
+import sys
+import os
+import re
+import base64
+
+# file extensions eligible for use as favicons and their mimetype
+ext2mimetype = {
+    '.png': 'image/png',
+    '.ico': 'image/x-icon'
+}
+
+# reads a file, turns it into a data uri
+def data_uri_from_file(filename, mimetype):
+    data = open(filename,'rb').read()
+    base64data = base64.b64encode(data).decode('ascii')
+    out = 'data:%s;base64,%s'%(mimetype, base64data)
+    return out
+
+if __name__ == "__main__":
+    # find project root directory path
+    # (script file is expected to reside in devTools)
+    project_root_path = os.path.dirname(os.path.dirname(__file__))
+    # path to SugarCube's header.html
+    header_html_path = os.path.join(
+        project_root_path,
+        'devTools/tweeGo/storyFormats/sugarcube-2/header.html'
+    )
+    # path to directory containing all favicons to embed
+    favicons_source_path = os.path.join(
+        project_root_path,
+        'resources/raster/favicon/'
+    )
+    # walk directory for all files
+    favicons_paths = [
+    os.path.join(dirpath, filename) 
+    for dirpath, dirnames, filenames in os.walk(favicons_source_path) 
+    for filename in filenames
+    ]
+    # ignore files with unknown extensions
+    favicons_paths = [f for f in favicons_paths if f[-4:] in ext2mimetype.keys()]
+    
+    # prepare embedded data
+    size_from_filename = re.compile(r'([0-9]+)\....$')
+    favicons_html = []
+    for fp in favicons_paths:
+        # get mimetype by file extension
+        mimetype = ext2mimetype[fp[-4:]]
+        if (mimetype == 'image/x-icon'):
+            # assume sizes in ico
+            sizes = '16x16 32x32 64x64'
+        else:
+            # guess icon size from file name
+            size = size_from_filename.search(fp).group(1)
+            sizes = '%sx%s'%(size, size)
+        data = data_uri_from_file(fp, mimetype)
+        favicons_html.append(
+            # prepare html with favicon data embedded
+            '<link rel="icon" type="%s" sizes="%s" href="%s">\n'%(
+                mimetype, sizes, data
+            )
+        )
+
+    # modify header file
+    with open(header_html_path,'r+') as hf:
+        lines_in = hf.readlines() # read whole file
+        lines_out = []
+        for line in lines_in:
+            # remove all currently embedded favicons
+            if (not (line.startswith('<link') and 'icon' in line)):
+                lines_out.append(line)
+            # embed favicons into head
+            if (line.startswith('<head>')):
+                lines_out.extend(favicons_html)
+        hf.seek(0) # move to beginning of file
+        hf.write(''.join(lines_out)) # overwrite with new data
+        hf.truncate() # remove trailing old data