Skip to main content
Назад до блогу
obsidianmiroautomationtoolsopen-source

Виношу дошки з Miro в Obsidian

Кнопка Export у Miro дає PNG чи PDF — це фото даних, не самі дані. А якщо твої дошки — це load-bearing мапи мислення за роки, вони мають жити в Obsidian: editable, searchable, у локальному vault'і. Як я виніс boards з Miro через REST API і конвертував у Excalidraw / Obsidian Canvas — зі збереженням позицій, кольорів, шрифтів, curved connectors, mindmap nodes — і урок ширший за Miro: SaaS треба сприймати з exit plan'ом ще ДО першого використання.

Опубліковано 30 червня 2026 р.6 хв читання

Будь-який інструмент, що живе в браузері, тримає тебе за заручника свого UI. Особливо коли в нього вкладено час, картки, дошки — і ти раптом розумієш, що твій map of thinking лежить на чужому сервері, у форматі, який неможливо відкрити без їхньої сторінки.

Я маю кілька Miro-дошок, які вже стали load-bearing — на них рефлексії, плани, ментальні карти за роки. Кнопка Export дає тобі PNG чи PDF. Це не дані — це фото даних.

Чому забирати

Vendor lock-in — це не теоретична проблема. Це конкретно: щоб скачати свої власні дані через API, треба upgrade до Expert tier. Тобто ти платиш за дозвіл забрати своє.

Я давно живу за принципом Obsidian-first: усе важливе має лежати в локальному vault'і, у plain files, які можна git-нути, grep-нути, прочитати через 10 років. Інструмент, що не дає експорту в такий формат — це інструмент, з якого треба тікати, поки залежність не стала непереборною.

Чому Export не рятує

Кнопка Export у Miro дає PNG чи PDF. Це raster — структура втрачена. Не можна змінити текст у box'і. Не можна перетягнути shape. Не можна grep'нути напис. Це funeral картки, не сама картка.

В Obsidian є дві альтернативи, що живуть у vault'і: Excalidraw plugin і native Canvas. Обидва — JSON. Обидва — editable. Обидва — searchable. Обидва — у твоєму vault'і поруч із нотатками, і grep'нути по тексту можна прямо з Obsidian.

Як виносити коли нема кнопки 'Export to Obsidian'

Якщо UI Export не дає те, що треба — лізти в API. Miro має REST API: повертає JSON опис кожного shape'а на дошці. Excalidraw і Obsidian Canvas — обидва open-format JSON. Між ними — mapping.

Я написав два Python скрипти. miro_to_excalidraw.py і miro_to_canvas.py. Standard library only — нуль deps. Запускаєш з токеном і board ID, отримуєш файл, кидаєш у vault.

Що збереглось при конвертації

Завдання — не просто перенести shapes, а зберегти візуал так, щоб дошка читалась так само, як на Miro.

  • Позиції та розміри — координати кожного shape'а 1:1
  • Кольори з fill opacity (40% жовтий лишається 40% жовтим)
  • Borders — колір, ширина, стиль (solid/dashed)
  • Шрифти та alignment — monospace лишається monospace, center лишається center
  • Connectors — стрілки прикріплені у точках, де їх прикріплював Miro
  • Curved connectors — bow дуги замість прямих ліній
  • Images embedded у файл (а не зовнішні URL)
  • Mindmap nodes — текст витягнутий з experimental Mindmap API
  • Z-ordering — overlap не плутається

Де було незручно

Miro API має пару дірок, з якими довелось працювати reverse-engineering'ом.

  • Curved connectors — Miro не експозить control points у API. Тому замість точного оригінального вигину я синтезую bow — арку фіксованого радіусу між двома endpoint'ами. Візуально близько, mathematically не identical.
  • Z-index — Miro API взагалі не повертає поле z. Який shape має бути зверху, який знизу? Heuristic: більший за площею = далі назад. Це працює, бо в реальних дошках великі контейнери, як правило, сидять під дрібнішими елементами.
  • Mindmap — текст mindmap nodes недоступний через звичайний items API. Треба окремий call до experimental Mindmap endpoint. Filled nodes стають boxes, unfilled — plain text.

Excalidraw vs Canvas — як вибрати

Якщо ти думаєш у стилі drawings — sketchy lines, hand-drawn feel, freeform compositions — обирай Excalidraw. Excalidraw plugin рендерить файл у тому ж естетичному стилі, який ти бачив у whiteboards.

Якщо твої дошки — це переважно прямокутники з текстом, з'єднані стрілками, і ти живеш у Obsidian як у second brain — обирай Canvas. Canvas — native, відкривається в один клік, інтегрований із backlinks і tags vault'у.

Я конвертую одні дошки в Excalidraw (де важливий visual style), інші — в Canvas (де важлива швидкість і native feel). Repo підтримує обидва формати — обираєш на запуску.

Підсумок

Python 3, standard library only. Без pip install, без virtualenv, без node_modules. python3 miro_to_excalidraw.py 'BOARD_ID' 'output.excalidraw' — і файл у тебе в руках.

Repo: github.com/oleksiimazurenko/miro-to-obsidian. MIT license. PR welcome — особливо для edge case'ів, які я ще не зустрів.

Урок ширший за Miro

SaaS lock-in — це наркотик. Перші місяці він безкоштовний. Шість місяців — звичка. Рік — твої дані живуть у форматі, який можна прочитати тільки через їхній UI. Два — ти платиш Expert tier щоб видобути своє.

Висновок — не "не використовуй SaaS". Висновок — кожен інструмент, який стає load-bearing, треба сприймати з exit plan'ом ще ДО першого використання. Питання "як я звідси вийду коли мені знадобиться" — таке ж важливе, як "наскільки зручний UI". Інструмент без plain-text експорту або open API — це інструмент із прихованою ціною, яку ти платиш через 2 роки.

Obsidian-first не тому що Obsidian ідеальний. А тому що plain markdown файли — це формат, який переживе сам Obsidian. Так само як plain JSON файл Excalidraw переживе сам plugin. Так само як цей Python скрипт переживе сам Miro.

Помітили помилку?

Невірний факт, кривий переклад, щось звучить неправдиво в цій статті? Напишіть мені — своєю мовою.