title: .h2p Diff Tool tags: zebra h1: This is a simple Python script I wrote to compare two `.h2p` patches. I wrote it for Zebra, but it should work for any U-He synth that uses the same preset format. ```py #!/usr/bin/env python import argparse from collections import defaultdict def read_lines_from(fn): a = readfrom(fn) if a is None: return None else: return a.rstrip().splitlines() def parse_mod(lines,mods): mod = None for line in lines: if line.startswith("//"): return if line.startswith("#cm="): _, mod = line.split("=") elif mod is not None: if "=" in line: k,v = line.split("=") mods[mod][k] = v def main(): parser = argparse.ArgumentParser(prog="h2pdiff",description="simple h2p diff") parser.add_argument("left",type=str) parser.add_argument("right",type=str) ns = parser.parse_args() left_fn = ns.left right_fn = ns.right left = read_lines_from(left_fn) right = read_lines_from(right_fn) left_mods = defaultdict(dict) right_mods = defaultdict(dict) parse_mod(left,left_mods) parse_mod(right,right_mods) for k in left_mods.keys(): lm = left_mods[k] rm = right_mods[k] for kk in lm.keys(): lv = lm[kk] rv = rm[kk] if lv != rv: print(f"{k}:{kk} {lv} != {rv}") if __name__ == "__main__": main() ```