diff --git a/README.md b/README.md
index 83e2e93..ec1ec12 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,11 @@
## Hellapagos
Traduko de [Hellapagos](http://www.hellapagos.com/)
+
+## Generado
+
+Uzu `python generate.py`. Vi bezonas krome:
+
+* inkscape
+* imagemagic, aka `convert`
+ * mi havis [jena](https://stackoverflow.com/questions/52998331/imagemagick-security-policy-pdf-blocking-conversion) problemo, kun permesojn, sed facile adapteblas
diff --git a/generate.py b/generate.py
new file mode 100644
index 0000000..3bc67ab
--- /dev/null
+++ b/generate.py
@@ -0,0 +1,18 @@
+import jinja2, yaml
+import subprocess, textwrap
+
+kartoj = yaml.safe_load(open("kartoj.yaml").read()) # listo de kartoj
+for k in kartoj: #trancxu tekston al sammlongaj lineoj
+ k["titolo"] = textwrap.wrap(k["titolo"], 13)
+ k["teksto"] = textwrap.wrap(k["teksto"], 23)
+kartoj = [k for k in kartoj for i in range(k["kvanto"])] # adpatas la liston por kvanto de karto
+pagxoj = [kartoj[i:i+9] for i in range(0, len(kartoj), 9)] #disigas la kartaro en pagxojn po de 9 kartoj
+
+for i, pagxo in enumerate(pagxoj):
+ template_str = open("templates/sxablono.svg.jinja2").read()
+ t = jinja2.Template(template_str)
+ kartoj_offsets = zip(pagxo, [(0,0), (61,0), (122,0), (0,91), (61,91), (122,91), (0,182), (61,182), (122,182)])
+ r = t.render(kartoj_offsets=kartoj_offsets)
+ open('svg/{}.svg'.format(i), "w").write(r)
+ subprocess.check_output(['inkscape','-z', 'svg/{}.svg'.format(i), '-e', 'svg/{}.png'.format(i)])
+subprocess.check_output(['convert', 'svg/*.png', 'ludo.pdf'])
diff --git a/templates/sxablono.svg.jinja2 b/templates/sxablono.svg.jinja2
new file mode 100644
index 0000000..d429cc5
--- /dev/null
+++ b/templates/sxablono.svg.jinja2
@@ -0,0 +1,32 @@
+
+{% macro karto(name, value='', type='text', size=20) %}
+
+{% endmacro %}
+
+