"""Assemble la maquette autonome (une seule page HTML, images intégrées) depuis template.html. À lancer dans le dossier où le pipeline a écrit ses sorties (scene.json, eau_crop.json, sol2035.jpg, solauj.jpg, eau_crop.jpg, bulles/). C'est la maquette de test publiée le 27/09 ; la version de production (LOT Q2+) vit dans src/ et ne passe pas par ce fichier. """ import base64, json, os, sys ici = os.path.dirname(os.path.abspath(__file__)) b64 = lambda f, m: "data:%s;base64,%s" % (m, base64.b64encode(open(f, "rb").read()).decode()) t = open(os.path.join(ici, "template.html")).read() bulles = {f[:-4]: b64("bulles/" + f, "image/png") for f in sorted(os.listdir("bulles"))} t = (t.replace("__SCENE__", open("scene.json").read()) .replace("__BULLES__", json.dumps(bulles)) .replace("__EAUPTS__", open("eau_crop.json").read()) .replace("__SOL2035__", b64("sol2035.jpg", "image/jpeg")) .replace("__SOLAUJ__", b64("solauj.jpg", "image/jpeg")) .replace("__EAU__", b64("eau_crop.jpg", "image/jpeg"))) sortie = sys.argv[1] if len(sys.argv) > 1 else "quelque-part-en-2035.html" open(sortie, "w").write(t) print(sortie, "%.2f Mo" % (len(t.encode()) / 1e6))