247 людей у vault: GEDCOM, Python і трохи ISI
У мене був родовід на 247 людей у MyHeritage — і AI-агент який щодня читає мої нотатки, але не знав хто такий «брат». Один вечір, один Python-скрипт і 247 markdown-файлів — тепер Сюзанна знає всіх.
← Серія статей: Генеалогія
19 червня 2026 я написав Python-скрипт. Увечері того ж дня у vault з'явилось 247 файлів.
У мене був родовід на 247 людей зібраний між 2009 і 2011 роком. Він жив у MyHeritage — платформі для сімейних дерев. Я зрідка заходив туди, але як інструмент щоденного використання він не існував.
Тим часом я почав вести щоденні нотатки і помітив проблему: щоразу, коли я згадував когось із роду — агент не знав, хто ця людина. «Брат» — а через кого? «Тітка» — а з якого боку? Без контексту нотатка слабша. А ще — Inverse Summary Inference, про що нижче.
Так родовід, що пролежав п'ятнадцять років мертвим вантажем на чужій платформі, за один вечір перетворився на живу частину vault.
Що таке GEDCOM і чому він лежав без діла
GEDCOM (Genealogical Data Communication) — стандартний формат для сімейних дерев. Звичайний текстовий файл з теґованою структурою. MyHeritage, Ancestry та більшість інших платформ підтримують експорт у .ged.
Виглядає це так:
0 @I1@ INDI
1 NAME Микола /Лавринович/
2 GIVN Микола
2 SURN Лавринович
1 SEX M
1 BIRT
2 DATE 1906
1 DEAT
2 DATE MAR 1997
1 FAMC @F1@Один блок на особу. Зв'язки через ID сімей (@F1@ тощо). Читається просто — парсити теж не складно.
Але між «є .ged файл» і «247 markdown-файлів у vault з wikilinks» (внутрішні посилання Obsidian, що зв'язують нотатки одна з одною і будують граф) — Python-скрипт.
Архітектура: два шари
Перш ніж писати код — треба було вирішити де ці люди живуть у vault і як співвідносяться з активним шаром.
У мене вже є People/ — профілі живих людей з якими я реально взаємодію: колеги, друзі, родина. Там є Vika L., Serhiy K. та інші. Це активний шар — він оновлюється, там є нотатки, тікети, last_contact.
Родовід — інший за природою. Більшість із 247 людей я ніколи не зустрічав. Деякі померли до мого народження. Це архів, не активний шар.
Тому рішення: два окремих домени.
Genealogy/People/ — архів
Всі 247 осіб з GEDCOM живуть тут. Тільки генеалогічні дані: дати, місця, зв'язки, фото якщо є. Я не редагую ці файли вручну — скрипт перезаписує їх при кожному повторному імпорті.
Структура файлу особи:
type: genealogy_person
gedcom_id: "@I49@"
full_name_uk: "Микола Вікторович Лавринович"
birth_date: 1906
birth_place: "[[Genealogy/Places/Rossyya]]"
death_date: MAR 1997
gender: M
father: "[[Genealogy/People/Lavrynovych Vyktor]]"
spouses: ["[[Genealogy/People/Aleksandra (1910)]]"]
children: ["[[Genealogy/People/Lavrynovych Vytalyy (1935)]]"]
people_ref:gedcom_id — оригінальний ID з .ged файлу (@I49@ з прикладу вище), потрібен щоб при повторному імпорті скрипт впізнавав ту саму людину і не плодив дублікати. spouses і children — списки wikilinks на файли інших осіб у тій самій Genealogy/People/, так граф зв'язків будується сам через стандартні посилання Obsidian. death_date тут навмисно рядком (MAR 1997), а не датою — GEDCOM часто містить лише місяць і рік, без дня.
Поле people_ref — лінк на профіль у People/ якщо для цієї людини він існує. Це міст між двома шарами.
People/ — активний шар
Тут — тільки ті хто є в моєму реальному житті. Для них є окремий профіль з повним контекстом. Вони можуть мати genealogy_ref — посилання назад у Genealogy/People/.
Так граф зв'язків між шарами є, але вони не змішуються.
Genealogy/Places/
Окрема папка для місць — Сагунівка, Кожани, Бобринецький район. Кожне місце — окремий файл з координатами і типом. Це дозволяє робити dataview-запити по географії — Dataview це плагін Obsidian, який дає шукати і фільтрувати нотатки за їхніми полями, як маленька база даних всередині vault.
Скрипт: GEDCOM → Obsidian

Скрипт — Python, ~940 рядків, весь код на GitHub. Читає .ged файл, парсить кожну особу (INDI), кожну сім'ю (FAM), кожне місце (PLAC), і генерує markdown-файли. Якщо у вас теж є експорт з MyHeritage чи Ancestry — можете взяти цей скрипт як основу і адаптувати під свою структуру vault.
Основні кроки:
1. Парсинг GEDCOM
def parse_gedcom(filepath):
individuals = {}
families = {}
# читаємо теги рівнями 0, 1, 2
# збираємо INDI блоки → словник {id: {name, birth, death, ...}}
# збираємо FAM блоки → пари HUSB/WIFE + CHIL2. Побудова зв'язків
Після парсингу знаємо ID кожної особи і ID сімей. З сімей — хто чий батько/мати/дитина/подружжя. Формуємо для кожної особи списки father, mother, spouses, children, siblings.
3. Транслітерація та файлові імена
GEDCOM зберігає імена так, як були введені — у нашому випадку переважно кирилицею. Ім'я файлу має бути читабельним і унікальним. Скрипт транслітерує прізвище і ім'я латиницею і додає рік народження для унікальності:
Лавринович Микола 1906 → Lavrynovych Nykolay (1906).md4. Генерація markdown
Для кожної особи — YAML frontmatter + таблиця основних даних + секції Батьки / Подружжя / Діти / Брати-сестри / Нотатки. Всі зв'язки як wikilinks на файли в Genealogy/People/.
Другий скрипт: українізація імен
Окремий файл, ~360 рядків — заповнює поле full_name_uk вже після імпорту. GEDCOM містив імена у різних форматах: російськомовні, скорочені, іноді латиницею. Скрипт проходить по всіх файлах у Genealogy/People/ і намагається:
- транслітерувати з латиниці
- конвертувати з російської форми в українську (Николай → Микола, Виктор → Віктор)
- зберегти оригінал у
full_name_ru
Результат — кожна особа має і оригінальне ім'я і українську версію.
ISI і чому зв'язки важливіші за дати
ISI — Inverse Summary Inference. Це коли агент читає нотатки за певний період і будує зв'язний контекст: хто є хто, що відбувалось, як події пов'язані між собою.
До імпорту: я пишу «брат приїхав». Агент бачить слово «брат» — але не знає хто саме, через кого пов'язані, яке прізвище. При ISI ця нотатка матиме нижчу якість — агент не може зв'язати її з контекстом роду.
Після імпорту: у People/ є профіль з genealogy_ref. У Genealogy/People/ є його файл з батьком, матір'ю, ланцюжком до спільного предка. Агент при ISI може відновити повний контекст зв'язку.
Це і є «золотий час моїх трудів» — дані зібрані у 2009–2011, але реально почали працювати тільки зараз.

Результат
247 файлів. 21 місце. Mermaid-діаграма п'яти поколінь у Genealogy.md.
Що змінилось для агента: тепер при будь-якій згадці людини з роду — є файл з повним контекстом зв'язків. Не треба пояснювати ланцюжок. Нотатка про зустріч з братом автоматично несе в собі весь генеалогічний контекст.
Що змінилось для мене: родовід перестав бути архівом на платформі куди я заходжу раз на рік. Він тепер частина системи, де я думаю щодня.