OC family tree maker, with a portrait in every box
Tap a character, pick their picture from your device, add species, pronouns and age. The pictures never leave this browser.
Legend
Start your characters' family, or load the example and see portraits in the boxes.
Your tree and its portraits are kept in this browser only, apart from the plain family tree page's. Clearing site data deletes them; save a file to keep them or move them to another device.
How portraits work
Open a character's sheet and tap Choose a picture. The file is read by this page in your browser; it is cut to a square from the middle (slide Move the crop if the face is off to one side) and shrunk to 256 × 256 pixels, or smaller if your picture is. Pick Circle or Square for how it sits in the box.
The shrunken copy is stored inside the tree, as text: a picture with see-through parts stays a PNG, anything else becomes a JPEG. A 256 px JPEG usually takes 20 to 50 KB, so a tree of 30 portraited characters is around 1 to 1.5 MB. Your original file is not kept or changed.
Because the portrait lives in the tree, Save file keeps it, Open file brings it back on another device, and the PNG, SVG and PDF exports draw it in the box. A file with portraits also opens on the plain family tree page, which shows them but has no picker.
Check reads the year number in each person's born and died text and lists every continuity problem: a parent younger than their child, or younger at the birth than the age you set (12 unless you change it; adoptive and foster parents only have to be older); a child born more than a year after a parent died; anyone who is their own ancestor through a loop of parent links; a death before the birth; and, if you turn it on, partners who were never alive at the same time. Tap a problem to centre that person. A date with no number ("the winter the river froze") or with two ("12/3/1802") is listed as not checked, never guessed, and two dates in different eras are not compared, because the check cannot know which era came first. A character's age stands in when neither a parent nor their child has a birth year. It never changes your tree.
Character fields
- Species
- Free text, shown under the name: "Moth-folk", "half-dragon", "android, model K".
- Pronouns
- Free text, any set, kept in the sheet and the saved file and read out by screen readers with the name.
- Age
- Free text, because invented species age differently: "17", "about 300", "built 6 years ago". A plain number shows as "age 17".
- Signature colour
- Any colour; a dot in the corner of the box and the ring round the portrait.
In the example, Sable Vey is fox-folk at "300-ish", Grell is a 112-year-old troll who uses they/them, and Wick is a clockwork automaton adopted by Marrow and Sable (the dashed line), with a square portrait. Ember has no portrait, to show the plain box. All of them, and their pictures, were made up and drawn for this page.
What it cannot do
It does not draw or generate characters: the portraits are pictures you already have. The crop is a centred square that slides along the long side, with no zoom or rotation, so crop tightly in a photo editor first if the face is small. Animated GIFs become a still frame, and HEIC photos open only in browsers that can read them (mostly Safari); convert them to JPEG elsewhere.
At 256 px, a portrait in a big printed tree or a zoomed SVG looks soft. Names longer than about 13 letters are shortened in a box with a portrait; the full name stays in the sheet and the file.
No account and no upload: nothing you pick or type is sent anywhere. This browser keeps about 5 MB for the site; when your trees fill most of it, the page says so, and once it is full new changes are kept only in a saved file. The undo history holds copies of the tree in memory, so a tree with very many portraits uses more memory as you edit.