- Дата публикации
Как превратить 54 тысячи сообщений из Telegram в офлайн‑«мозг» в Obsidian
Что появилось / что изменилось
Автор собрал рабочий конвейер, который превращает экспорт Telegram (54 тысячи сообщений из 500+ каналов и чатов) в структурированную базу знаний в Obsidian. Главное, что вы получаете:
- Автоматическая конвертация экспорта Telegram Desktop (JSON + HTML) в Markdown‑заметки для Obsidian.
- Сохранение структуры: личные чаты, группы, каналы, «Избранное», контакты — раскладываются по папкам
Contacts/,Saved Messages/,Personal Chats/,Groups/,Channels/,Other Chats/. - Работа с медиа: скрипт индексирует все файлы экспорта, находит реальные пути к фото, видео, документам и копирует их в хранилище Obsidian.
- Сохранение форматирования и метаданных: даты, типы чатов, авторы сообщений.
- Возможность группировать сообщения по дням (
GROUP_BY_DAY=true), чтобы длинные чаты не превращались в один гигантский файл. - Настройка через переменные окружения: можно указать путь к
result.json, директорию экспорта Telegram и папку для Obsidian‑хранилища. - Подключение LLM‑чата к полученной базе знаний: как локально (на случай отключения интернета), так и через веб‑API.
- Дополнительно автор использует эмбеддинговую нейросеть, чтобы автоматически строить связи между заметками и получить офлайн‑клон «мозга» 500+ человек.
Цифровой масштаб: 54 000+ сообщений, более 500 каналов и чатов, полный экспорт Telegram в одном Obsidian‑хранилище.
Как это работает
Базовая идея простая: Telegram экспортирует историю чатов, Python‑скрипт превращает её в Markdown и раскладывает по структуре Obsidian.
-
Экспорт из Telegram Desktop
Telegram создаёт папку вида:
DataExport_YYYY-MM-DD/ ├── result.json # метаданные экспорта ├── chats/ │ ├── chat_001/ │ │ ├── messages.html │ │ └── photos/ │ └── chat_002/ ├── profile_pictures/ └── export_results.html -
Конфигурация через переменные окружения
В коде задаются пути и режимы работы:
JSON_FILE = os.getenv('TELEGRAM_JSON_FILE', 'result.json') EXPORT_BASE = Path(os.getenv('TELEGRAM_EXPORT_BASE', '.')) OUTPUT_DIR = Path(os.getenv('OBSIDIAN_OUTPUT_DIR', 'Telegram_Export')) PATCH_FILE = Path(os.getenv('PATCH_FILE', 'patch.txt')) GENERATE_PATCH_FILE = os.getenv('GENERATE_PATCH_FILE', 'true').lower() == 'true' COPY_MEDIA = os.getenv('COPY_MEDIA', 'true').lower() == 'true' GROUP_BY_DAY = os.getenv('GROUP_BY_DAY', 'true').lower() == 'true'Это позволяет запускать один и тот же скрипт на разных экспортных папках и управлять копированием медиа.
-
Класс конвертера
Класс
TelegramToObsidianхранит данные экспорта, счётчики статистики (количество чатов, сообщений, медиа, контактов) и индексы для поиска файлов. Он отвечает за полный цикл: от чтения JSON до генерации Markdown и копирования файлов. -
Индексация медиа через
patch.txtПроблема: пути к медиа в JSON часто не совпадают с реальной файловой структурой. Решение — сначала обойти весь экспорт и сохранить дерево файлов:
result = subprocess.run( ['ls', '-R', str(EXPORT_BASE)], capture_output=True, text=True, check=True, encoding='utf-8' ) with open(PATCH_FILE, 'w', encoding='utf-8') as f: f.write(result.stdout)Затем метод
index_media_from_patchпроходит поpatch.txt, собирает пути ко всем медиафайлам с расширениями.jpg,.png,.gif,.webp,.mp4,.webm,.pdf,.zip,.mp3и создаёт словарьmedia_indexс несколькими ключами на один файл: по имени и по относительному пути внутриchats/. -
Поиск медиафайлов по нескольким стратегиям
Метод
find_media_fileсначала фильтрует «пустые» и не включённые в экспорт файлы, а дальше пробует четыре варианта:- поиск по имени файла в
media_index; - поиск по полному пути из JSON;
- перебор индекса с совпадением по имени;
- попытка собрать путь относительно
EXPORT_BASEс разными вариантами (chats/, безchats/и т.п.).
Это повышает шанс найти реальный файл даже при хаотичной структуре экспорта.
- поиск по имени файла в
-
Генерация структуры Obsidian
На выходе получается папка
Telegram_Export/с подкаталогами под типы чатов и индексным файломIndex.md. Каждый чат превращается в один или несколько Markdown‑файлов (если включено группирование по дням), медиа копируются рядом или в отдельные подпапки. -
Слой эмбеддингов и LLM‑чат
После конвертации автор прогоняет заметки через эмбеддинговую нейросеть, строит связи между похожими фрагментами и подключает чат с LLM. Чат умеет работать как с локальной моделью, так и через веб‑API. В итоге вы можете общаться с собственной базой знаний как с ассистентом.
Что это значит для вас
Этот подход полезен, если вы живёте в Telegram: читаете каналы, учитесь по постам, общаетесь в рабочих чатах, а потом не можете ничего найти через пару месяцев.
Где это помогает:
- Личная база знаний. Все важные посты, обсуждения, гайды и ссылки переезжают в Obsidian. Дальше вы связываете их с заметками из других источников.
- Исследовательские и рабочие проекты. Можно собрать историю обсуждений из групп и каналов, раскидать по темам и подключить LLM для быстрых ответов по этому корпусу.
- Офлайн‑доступ. Если вы боитесь блокировок или потери доступа к Telegram, Obsidian‑хранилище на диске даёт резервную копию знаний.
- Навигация по огромным чатам. Опция
GROUP_BY_DAYпревращает бесконечные ветки обсуждений в ежедневные дайджесты.
Где не стоит ждать чудес:
- Если вы не пользуетесь Obsidian и не готовы к файловой модели заметок, придётся сначала освоить сам инструмент.
- Если у вас несколько гигабайт медиа, конвертация и индексация займут заметное время и место на диске.
- Без эмбеддингов и LLM это всё равно просто структурированная история чатов — ценность даёт именно последующая работа с заметками.
Продукт строится вокруг Telegram Desktop и локального Python‑скрипта. Для запуска не нужен VPN, но для использования LLM через внешние API доступ к интернету потребуется. Локальный режим LLM решает эту проблему, если вы готовы настраивать модели у себя.
Место на рынке
Решение конкурирует не с конкретным сервисом, а с целым классом подходов:
- Встроенный поиск Telegram ограничен и плохо работает как долговременная память: нет нормальных тэгов, ссылок между заметками, графа знаний.
- Облачные сервисы заметок (Notion, Evernote) дают удобный интерфейс, но не предлагают прямой и детальный импорт Telegram‑экспорта на уровне отдельных сообщений и медиа.
- Obsidian‑плагины для Telegram обычно работают через ботов и не рассчитаны на массовый импорт 54 000+ сообщений из 500+ чатов с сохранением структуры экспорта.
Здесь ставка на другое: полный контроль у пользователя, локальное хранилище, чёткая структура папок и возможность подключить любые эмбеддинговые модели и LLM по своему выбору. Если вы уже живёте в Obsidian и хотите забрать туда свой Telegram, это более прямой и детальный путь, чем точечные боты или ручной копипаст.