All Projects → mfarragher → obsidiantools

mfarragher / obsidiantools

Licence: other
Obsidian tools - a Python package for analysing an Obsidian.md vault

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to obsidiantools

life-disciplines-projects
Life-Disciplines-Projects (LDP) is a life-management framework built within Obsidian. Feel free to transform it for your own personal needs.
Stars: ✭ 130 (-27.37%)
Mutual labels:  obsidian-md, obsidian-community
obsidian-journey-plugin
Discover the story between your notes in Obsidian
Stars: ✭ 93 (-48.04%)
Mutual labels:  note-taking, obsidian-md
obsidian-sanctum
A minimalist theme for Obsidian.md, with the aim of creating a serene space of retreat, for thought and uninterrupted work.
Stars: ✭ 161 (-10.06%)
Mutual labels:  obsidian-md, obsidian-community
keep-it-markdown
Convert Google Keep notes dynamically to markdown for Obsidian and Notion using the unofficial Keep API
Stars: ✭ 125 (-30.17%)
Mutual labels:  note-taking, obsidian-md
osmosnote
The knowledge IDE
Stars: ✭ 69 (-61.45%)
Mutual labels:  note-taking, knowledge-management
zettelstore
This is a mirror of https://zettelstore.de
Stars: ✭ 16 (-91.06%)
Mutual labels:  note-taking, knowledge-management
Monocorpus
A notepad for software and machine learning
Stars: ✭ 234 (+30.73%)
Mutual labels:  note-taking
hp2p
Heavy Peer To Peer: a MPI based benchmark for network diagnostic
Stars: ✭ 17 (-90.5%)
Mutual labels:  network-analysis
Archivy
Archivy is a self-hosted knowledge repository that allows you to safely preserve useful content that contributes to your own personal, searchable and extendable wiki.
Stars: ✭ 2,746 (+1434.08%)
Mutual labels:  note-taking
Sublimenotebook
📝 Make Sublime Text your favorite note taking/journal application
Stars: ✭ 203 (+13.41%)
Mutual labels:  note-taking
obsidian-advanced-slides
Create markdown-based reveal.js presentations in Obsidian
Stars: ✭ 407 (+127.37%)
Mutual labels:  obsidian-md
obsidian-simple-embeds
A plugin for Obsidian that automatically turns links into embeds.
Stars: ✭ 131 (-26.82%)
Mutual labels:  obsidian-md
Butterfly
🎨 Powerful, minimalistic, cross-platform, opensource note-taking app
Stars: ✭ 381 (+112.85%)
Mutual labels:  note-taking
Web
A free, open-source, and completely encrypted notes app. https://standardnotes.com
Stars: ✭ 3,061 (+1610.06%)
Mutual labels:  note-taking
obsidian42-jump-to-date
Jump to a date via a convenient popup form. This plugin is a part of the Obsidian42 family of Obsidian plugins.
Stars: ✭ 28 (-84.36%)
Mutual labels:  obsidian-md
Meemo
Meemo - Your personal notes
Stars: ✭ 227 (+26.82%)
Mutual labels:  note-taking
quentier
Cross-platform desktop Evernote client
Stars: ✭ 115 (-35.75%)
Mutual labels:  note-taking
Tomboy Ng
Next generation of Tomboy
Stars: ✭ 226 (+26.26%)
Mutual labels:  note-taking
mark-idea
一款私有云笔记,git + markdown
Stars: ✭ 182 (+1.68%)
Mutual labels:  note-taking
obsidian-fullscreen-plugin
No description or website provided.
Stars: ✭ 30 (-83.24%)
Mutual labels:  obsidian-md

PyPI version PyPI version Licence Documentation codecov

obsidiantools 🪨⚒️

obsidiantools is a Python package for getting structured metadata about your Obsidian.md notes and analysing your vault. Complement your Obsidian workflows by getting metrics and detail about all your notes in one place through the widely-used Python data stack.

It's incredibly easy to explore structured data on your vault through this fluent interface. This is all the code you need to generate a vault object that stores all the data:

import obsidiantools.api as otools

vault = otools.Vault(<VAULT_DIRECTORY>).connect().gather()

These are the basics of the method calls:

  • connect(): connect your notes together in a graph structure and get metadata on links (e.g. wikilinks, backlinks, etc.) There ais the option to support the inclusion of 'attachment' files in the graph.
  • gather(): gather the plaintext content from your notes in one place. This includes the 'source text' that represent how your notes are written. There are arguments to support what text you want to remove, e.g. remove code.

See some of the key features below - all accessible from the vault object either through a method or an attribute.

The package is built to support the 'shortest path when possible' option for links. This should cover the vast majority of vaults that people create. See the wiki for more info on what sort of wikilink syntax is not well-supported and how the graph may be slightly different to what you see in the Obsidian app.

💡 Key features

This is how obsidiantools can complement your workflows for note-taking:

  • Access a networkx graph of your vault (vault.graph)
    • NetworkX is the main Python library for network analysis, enabling sophisticated analyses of your vault.
    • NetworkX also supports the ability to export your graph to other data formats.
    • When instantiating a vault, the analysis can also be filtered on specific subdirectories.
  • Get summary stats about your notes & files, e.g. number of backlinks and wikilinks, in a Pandas dataframe
    • Get the dataframe via vault.get_note_metadata() (notes / md files), vault.get_media_file_metadata() (media files that can be embedded in notes) and vault.get_canvas_file_metadata() (canvas files).
  • Retrieve detail about your notes' links and metadata as built-in Python types
    • The main indices of files are md_file_index, media_file_index and canvas_file_index (canvas files).
    • Check whether files included as links in the vault actually exist, via vault attributes like nonexistent_notes, nonexistent_media_files and nonexistent_canvas_files.
    • Check whether actual files are isolated in the graph ('orphans'), via vault attributes like isolated_notes, isolated_media_files and isolated_canvas_files.
    • You can access all the note & file links in one place, or you can load them for an individual note:
      • e.g. vault.backlinks_index for all backlinks in the vault
      • e.g. vault.get_backlinks(<NOTE>) for the backlinks of an individual note
    • md note info:
      • The various types of links:
        • Wikilinks (incl. header links, links with alt text)
        • Embedded files
        • Backlinks
        • Markdown links
      • Front matter via vault.get_front_matter(<NOTE>) or vault.front_matter_index
      • Tags via vault.get_tags(<NOTE>) or vault.tags_index. Nested tags are supported.
      • LaTeX math via vault.get_math(<NOTE>) or vault.math_index
      • As long as gather() is called:
        • Get source text of note (via vault.get_source_text(<NOTE>)). This tries to represent how a note's text appears in Obsidian's 'source mode'.
        • Get readable text of note (via vault.get_readable_text(<NOTE>)). This tries to reduce note text to minimal markdown formatting, e.g. preserving paragraphs, headers and punctuation. Only slight processing is needed for various forms of NLP analysis.
    • canvas file info:
      • The JSON content of each canvas file is stored as a Python dict in vault.canvas_content_index
      • Data to recreate the layout of content in a canvas file via the vault.canvas_graph_detail_index dict

Check out the functionality in the demo repo. Launch the '15 minutes' demo in a virtual machine via Binder:

Documentation Binder

There are other API features that try to mirror the Obsidian.md app, for your convenience when working with Python, but they are no substitute for the interactivity of the app!

The text from vault notes goes through this process: markdown → split out front matter from text → HTML → ASCII plaintext.

⏲️ Installation

pip install obsidiantools

Requires Python 3.9 or higher.

🖇️ Dependencies

  • Main libraries:
    • markdown
    • pymdown-extensions
    • html2text
    • pandas
    • numpy
    • networkx
  • Libraries for front matter and HTML:
    • python-frontmatter
    • beautifulsoup4
    • lxml
    • bleach

All of these libraries are needed so that the package can separate note text from front matter in a generalised approach.

🏗️ Tests

A small 'dummy vault' vault of lipsum notes is in tests/vault-stub (generated with help of the lorem-markdownum tool). Sense-checking on the API functionality was also done on a personal vault of over 800 notes.

I am not sure how the parsing will work outside of Latin languages - if you have ideas on how that can be supported feel free to suggest a feature or pull request.

⚖️ Licence

Modified BSD (3-clause)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].