diff --git a/reprodExperiment.py b/reprodExperiment.py
new file mode 100644
index 0000000000000000000000000000000000000000..90eec3ff61c12d1b9c3c3330bd735dd9b89a7411
--- /dev/null
+++ b/reprodExperiment.py
@@ -0,0 +1,138 @@
+import os
+import git
+import subprocess
+import sys
+from git import repo
+import yaml
+
+path = "./"
+
+repository = None
+
+inputFolder = None
+inputFiles = []
+
+paramsFolder = None
+
+commandsFile = None
+
+experimentName = None
+
+outputFolder = None
+outputFiles = []
+
+def isGitRepo(path) -> bool:
+    try:
+        git.Repo(path)
+        return True
+    except git.exc.InvalidGitRepositoryError:
+        return False
+def init(pathInput) -> None :
+    global repository,path,experimentName
+    if isGitRepo(pathInput):
+        path += pathInput
+        if not (pathInput[len(pathInput)-1] == "/"):
+            path+="/"
+        repository = git.Repo(path)
+        experimentName = repository.active_branch.name
+        os.chdir(path)
+    else :
+        raise Exception(f"{pathInput} is not a git repository")
+
+def fileExists(fileName) -> bool:
+    return os.path.exists(fileName)
+
+def folderExists(folderName) -> bool:
+    return os.path.isdir(folderName)
+
+def searchForInputFolder() -> None:
+    global inputFolder
+    print("Searching for input folder...")
+    if folderExists("inputs"):
+        inputFolder = "inputs"
+        print(f"{path}{inputFolder} found !")
+    else:
+        raise Exception(f"{path}/inputs folder does not exist")
+
+def searchForOutputFolder() -> None:
+    global outputFolder
+    print("Searching for output folder...")
+    if folderExists("outputs"):
+        outputFolder = "outputs"
+        print(f"{path}{outputFolder} found !")
+    else:
+        raise Exception(f"{path}/outputs folder does not exist")
+
+def searchForParamsFolder() -> None:
+    global paramsFolder
+    if folderExists("params"):
+        paramsFolder = "params"
+    else:
+        raise Exception(f"{path}/params folder does not exist")
+
+def askForCommandsFile() -> None:
+    global commandsFile
+    commandsFile = input("Enter the name of the commands file: ")
+    if commandsFile == "":
+        raise Exception("No commands file given")
+    if not fileExists(commandsFile):
+        raise Exception(f"{commandsFile} file does not exist")
+
+def runExperiment() -> None:
+    print("Trying to run experiment")
+    file = open(commandsFile, "r")
+    for line in file.read().splitlines():
+        print(f"running {line} ...")
+        process = subprocess.run(line,shell=True)
+        process.check_returncode()
+        print("done")
+
+def scanInputFiles() -> None:
+    for file in os.listdir(inputFolder):
+        inputFiles.append(file)
+
+def scanOutputsGenerated() -> None:
+    print(outputFolder)
+    for file in os.listdir(outputFolder):
+        outputFiles.append(file)
+
+def writeInYaml() -> None:
+    with open("experimentResume.yaml", "r") as yamlFile:
+        cur_yaml = yaml.safe_load(yamlFile)
+        cur_yaml.update({"name":experimentName})
+        cur_yaml.update({"commands":commandsFile})
+        cur_yaml.update({"inputs":inputFiles})
+        cur_yaml.update({"outputs":outputFiles})
+        print(cur_yaml)
+    with open('experimentResume.yaml', 'w') as yamlFile:
+        yaml.safe_dump(cur_yaml, yamlFile)
+
+def branchExists(branchName) -> bool:
+    return branchName in repository.references
+
+def pushBranch(version=1) -> None:
+    print(experimentName)
+    while (branchExists(f"{experimentName}Experiment{version}")):
+        version += 1
+    else:
+        repository.git.checkout('-b', f"{experimentName}Experiment{version}")
+        repository.git.add(all=True)
+        repository.git.commit(m=f"{experimentName}Experiment{version}")
+        repository.git.push('--set-upstream', repository.remote().name, f"{experimentName}Experiment{version}")
+        repository.git.checkout(experimentName)
+            
+
+if (__name__ == "__main__"):
+    if (len(sys.argv) <2):
+        raise Exception("No experiment folder given")
+    init(sys.argv[1])
+    repository.active_branch.checkout()
+    searchForInputFolder()
+    scanInputFiles()
+    searchForOutputFolder()
+    searchForParamsFolder()
+    askForCommandsFile()
+    runExperiment()
+    scanOutputsGenerated()
+    writeInYaml()
+    pushBranch()
\ No newline at end of file