diff --git a/h-3xPlusUn/text2image.py b/h-3xPlusUn/text2image.py
new file mode 100644
index 0000000000000000000000000000000000000000..1032fa2c3b9ddbbf27e4e99bf10e317be6d40eef
--- /dev/null
+++ b/h-3xPlusUn/text2image.py
@@ -0,0 +1,80 @@
+import sys
+# Importing the Image module from the PIL library
+from PIL import Image
+# Importing the NumPy library and aliasing it as 'np'
+import numpy as np
+
+####
+VERBOSE=False
+K=10 # scaling factor
+
+COLDEF=[10,20,30] #default
+COLP=[100,100,155] #. 
+COL0=[255,255,255] #0
+COL1=[0,0,255] #1
+
+# correspondance color and characters
+TABCOL=[COLP,COL0,COL1]
+TABPOS=".01"
+
+
+def matrix2image(nparray,X,Y,filenameout):
+    # Creating an image object 'img' from the NumPy array 'data'NP
+    # specifying the color mode as 'RGB'
+    img = Image.fromarray(nparray, 'RGB')
+    img = img.resize((K*X,K*Y),resample=Image.BOX) #Image.LANCZOS
+    img.save(filenameout)
+    print("---wrote:%s"%filenameout)
+
+
+def readfile(filename):
+    f = open(filename, "r")
+    dat=[]
+    maxlen=0 # maxlen of a line
+    for x in f:
+        x= x.rstrip() # removes trailing whitespaces and newlines
+        dat.append(x)
+        if (len(x)>maxlen):
+            maxlen=len(x)
+    if VERBOSE:
+        for line in dat:
+            print(line)
+    return (dat,maxlen,len(dat))
+
+
+def color(charin):
+    """ char to color"""
+    pos=TABPOS.index(charin)
+    return TABCOL[pos]
+
+def array2NParray(arrayIn,X,Y):
+    nparray = np.zeros((Y, X, 3), dtype=np.uint8)
+    for j in range(Y):
+        line=arrayIn[j]
+        # parsing one line
+        # print("debug line:%s",line)
+        for i in range(X):
+            if i<len(line):
+                char=line[i]
+                nparray[j][i]= color(char)
+            else:
+                nparray[j][i]=COLDEF
+            #print("i,j,v %d,%d,%s"%(i,j,nparray[j][i]))
+            
+    return nparray
+
+def transformToImage(filename):
+    content,X,Y=readfile(filename)
+    print("XY: (%d,%d)"%(X,Y))
+    nparray=array2NParray(content,X,Y)
+    filenameout=filename+".png"
+    matrix2image(nparray,X,Y,filenameout)
+
+# main
+if (len(sys.argv)<2):
+    print("give filenames txt to convert")
+    sys.exit()
+    
+for i in range(len(sys.argv)-1):
+    filename=sys.argv[i+1]
+    transformToImage(filename)
diff --git a/m-metastatis/matrixcalc.py b/m-metastatis/matrixcalc.py
new file mode 100644
index 0000000000000000000000000000000000000000..28d8d9cc149229cb2c07925837b2b80607d2c101
--- /dev/null
+++ b/m-metastatis/matrixcalc.py
@@ -0,0 +1,51 @@
+N=4
+M=2**N
+A= [[0] * M for i in range(M) ]  # waw! creatio of a two-dminesional array 
+
+# local transition rule in thirds
+PTRANS=[0, 2, 2, 0]
+
+
+# from decimal to binarray
+def arrayconfig(iconfig):
+    array=[]
+    for i in range(N):
+        bit=iconfig%2
+        array.append(bit)
+        iconfig//=2
+    return array
+
+# one active transiton in place pos
+def transAc(x, pos):
+    y= x.copy()
+    y[pos]= 1 - y[pos]
+    return y
+
+# assume square matrix
+def prettyprint(matrix):
+    for i in range(len(matrix)):
+        print(matrix[i])
+
+################################
+for iconfig in range(M):
+    x= arrayconfig(iconfig)
+    for pos in range(N):
+        T1= transAc(x, pos) if x[pos]==0 else x
+        T0= transAc(x, pos) if x[pos]==1 else x
+        index1= iconfig + 2 **pos if x[pos]==0 else iconfig
+        index0= iconfig - 2 **pos if x[pos]==1 else iconfig
+        s=x[pos-1]+x[pos]+x[(pos+1)%N]
+        part1=" ic:%d(%s) pos:%d S:%d"%(iconfig, x, pos, s)
+        parta= "i1:%d(%s) %d"%(index1, str(T1), PTRANS[s])
+        partb= "i0:%d(%s) %d"%(index0, str(T0),  3- PTRANS[s])
+        print(part1, parta, partb)
+
+        A[iconfig][index1]+= PTRANS[s]
+        A[iconfig][index0]+= 3 - PTRANS[s]
+
+    print("--")
+
+
+
+
+prettyprint(A)
\ No newline at end of file