{"id":40339155,"url":"https://github.com/yantar92/org-capture-ref","last_synced_at":"2026-01-20T08:38:18.810Z","repository":{"id":45296296,"uuid":"289832674","full_name":"yantar92/org-capture-ref","owner":"yantar92","description":"Extract metadata/bibtex info from websites for org-capture","archived":false,"fork":false,"pushed_at":"2025-10-21T14:03:32.000Z","size":1109,"stargazers_count":78,"open_issues_count":4,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-21T16:07:53.731Z","etag":null,"topics":["bibtex","capturing-links","emacs","metadata-extractor","org-mode"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yantar92.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-24T05:04:15.000Z","updated_at":"2025-10-21T14:03:37.000Z","dependencies_parsed_at":"2024-07-30T10:34:19.972Z","dependency_job_id":"ba10fd24-a07d-4459-b0ab-052b75cfa29e","html_url":"https://github.com/yantar92/org-capture-ref","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yantar92/org-capture-ref","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yantar92%2Forg-capture-ref","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yantar92%2Forg-capture-ref/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yantar92%2Forg-capture-ref/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yantar92%2Forg-capture-ref/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yantar92","download_url":"https://codeload.github.com/yantar92/org-capture-ref/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yantar92%2Forg-capture-ref/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28599193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bibtex","capturing-links","emacs","metadata-extractor","org-mode"],"created_at":"2026-01-20T08:38:17.004Z","updated_at":"2026-01-20T08:38:18.798Z","avatar_url":"https://github.com/yantar92.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Table of Contents\n\n1.  [Extracting metadata (including BiBTeX) from websites to be used by Org mode capture](#org4a077fa)\n    1.  [Installation](#org8cebc83)\n        1.  [Using straight.el](#org8f9c93e)\n        2.  [Using quelpa](#org9540bd0)\n        3.  [Using direct download](#orgebcf583)\n    2.  [Usage](#org6bd78c4)\n        1.  [Capture setup](#orgfdceccb)\n        2.  [Capturing links from browser](#orgac54b32)\n        3.  [Capturing rss links from elfeed](#org70db0fe)\n    3.  [Extra features](#orgf74ed99)\n        1.  [Detecting existing captures](#orgd84bfd3)\n        2.  [Integration with qutebrowser](#qute_integration)\n    4.  [Customisation](#orgb3cf7ab)\n        1.  [Retrieving BiBTeX / metadata fields](#org8e927eb)\n        2.  [Key generation](#orga95bf6e)\n        3.  [Formatting BiBTeX entry](#orgec6f48c)\n        4.  [Validating the BiBTeX entry](#org35a6869)\n    5.  [Planned features](#orgf64f6a8)\n\n\n\u003ca id=\"org4a077fa\"\u003e\u003c/a\u003e\n\n# Extracting metadata (including BiBTeX) from websites to be used by Org mode capture\n\nThis package is inspired by [org-ref](https://github.com/jkitchin/org-ref), extending org-ref's idea to auto-retrieve BiBTeX from scientific paper links. Instead of limiting BiBTeX generation to research purposes (scientific articles and books), this package auto-generates BiBTeX for any possible web link (Youtube videos, blog posts, reddit threads, etc).\n\nMore precisely, relevant metadata, like author, title, publisher, publication date, etc, is extracted from an arbitrary web link. The metadata can be transformed into a BiBTeX entry or used directly in Org mode capture template.\n\nUnlike `org-ref`, this package is designed to be used together with [org-capture](https://orgmode.org/manual/Capture.html#Capture). The package is created assuming that the links/articles/books are captured from web sources using the following methods:\n\n-   [org-protocol](https://orgmode.org/manual/The-capture-protocol.html#The-capture-protocol) from system browser\n-   org-protocol from [elfeed](https://github.com/skeeto/elfeed/)\n-   org-capture from Emacs buffers\n\nThe generated BiBTeX for web links can be directly inserted into a `.bib` file and handled by org-ref just like any other book/paper.\nAlternatively (recommended), the metadata can be kept in org-mode entries as the main bibliography source (and tangled into the .bib file if needed). An example of such setup can be found in [this blog post](http://cachestocaches.com/2020/3/org-mode-annotated-bibliography/).\n\nThe package also tries to make sure that no duplicate links are captured. If a duplicate is found, there is an option to display the location of the duplicate. The duplicate can also be updated according to the newly extracted metadata. For example, a research publication published online does not initially contain the journal volume number. The captured online publication can be later updated as the publication page is updated.\n\nBelow are examples of captured web links. The links are captured as todo-entries in org-mode with BiBTeX stored and code block within the entry.\n\n![img](info-output.png)\n\nGithub page with BiBTeX\n\n![img](capture1.png)\n\nGithub page with metadata\n\n![img](capture1-v2.png)\n\nReddit post\n\n![img](capture2.png)\nScientific article\n\n![img](capture5.png)\n\n\n\u003ca id=\"org8cebc83\"\u003e\u003c/a\u003e\n\n## Installation\n\nThe package is currently not on Melpa/Elpa. It is possible to install package directly downloading the `.el` files from Github or using package managers with git support:\n\n\n\u003ca id=\"org8f9c93e\"\u003e\u003c/a\u003e\n\n### Using [straight.el](https://github.com/raxod502/straight.el/)\n\n    (straight-use-package '(org-capture-ref :type git :host github :repo \"yantar92/org-capture-ref\"))\n\nor with [use-package](https://github.com/jwiegley/use-package/)\n\n    (use-package org-capture-ref\n      :straight (org-capture-ref :type git :host github :repo \"yantar92/org-capture-ref\"))\n\n\n\u003ca id=\"org9540bd0\"\u003e\u003c/a\u003e\n\n### Using [quelpa](https://github.com/quelpa/quelpa)\n\n    (quelpa '(org-capture-ref :repo \"yantar92/org-capture-ref\" :fetcher github))\n\n\n\u003ca id=\"orgebcf583\"\u003e\u003c/a\u003e\n\n### Using direct download\n\n1.  Download `org-capture-ref.el` from this page and save it somewhere in Emacs [load-path](https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Libraries.html#Lisp-Libraries)\n2.  Open the file in Emacs\n3.  Run `M-x package-install-from-buffer \u003cRET\u003e`\n4.  Put `(require 'org-capture-ref)` somewhere in your init file\n\n\n\u003ca id=\"org6bd78c4\"\u003e\u003c/a\u003e\n\n## Usage\n\n\n\u003ca id=\"orgfdceccb\"\u003e\u003c/a\u003e\n\n### Capture setup\n\nBelow is example configuration defining org capture template using org-capture-ref, [asoc.el](https://github.com/troyp/asoc.el), [s.el](https://github.com/magnars/s.el) and [doct](https://github.com/progfolio/doct). You will need to install these packages to make the example work:\n\n1.  Using [straight.el](https://github.com/raxod502/straight.el/)\n    \n        (straight-use-package '(asoc.el :type git :host github :repo \"troyp/asoc.el\"))\n        (straight-use-package s)\n        (straight-use-package doct)\n\n2.  Using [straight.el](https://github.com/raxod502/straight.el/) with [use-package](https://github.com/jwiegley/use-package/)\n    \n        (use-package asoc\n            :straight (asoc.el :type git :host github :repo \"troyp/asoc.el\"))\n        (use-package s\n          :straight t)\n        (use-package doct\n          :straight t)\n\n3.  Using [quelpa](https://github.com/quelpa/quelpa)\n    \n        (quelpa '(asoc :repo \"troyp/asoc.el\" :fetcher github))\n        (quelpa 's)\n        (quelpa 'doct)\n\n4.  Using direct download\n\nFollow instructions from [Using direct download](#orgebcf583). The packages can be downloaded from the following websites:\n\n-   \u003chttps://github.com/troyp/asoc.el\u003e\n-   \u003chttps://github.com/magnars/s.el\u003e\n-   \u003chttps://github.com/progfolio/doct/\u003e\n\nThe example will define two new capture templates:\n\n-   **Silent link (B):** create a new TODO entry in `~/Org/inbox.org` containing author, journal/website, year, and title of the web-page + the generated BiBTeX (see examples above);\n-   **Interactive link (b):** interactive version of the above. It opens Emacs frame allowing to modify the link before confirming the capture.\n\nThese capture templates can later be called from inside Emacs or from browser (using [org-protocol](https://orgmode.org/manual/The-capture-protocol.html#The-capture-protocol)).\n\n    (require 'org-capture)\n    (require 'asoc)\n    (require 'doct)\n    (require 'org-capture-ref)\n    (let ((templates (doct '( :group \"Browser link\"\n     \t\t\t  :type entry\n     \t\t\t  :file \"~/Org/inbox.org\"\n     \t\t\t  :fetch-bibtex (lambda () (org-capture-ref-process-capture)) ; this must run first\n                              :link-type (lambda () (org-capture-ref-get-bibtex-field :type))\n                              :extra (lambda () (if (org-capture-ref-get-bibtex-field :journal)\n    \t\t\t\t\t   (s-join \"\\n\"\n                                                       '(\"- [ ] download and attach pdf\"\n    \t\t\t\t\t\t     \"- [ ] [[elisp:org-attach-open][read paper capturing interesting references]]\"\n    \t\t\t\t\t\t     \"- [ ] [[elisp:(browse-url (url-encode-url (format \\\"https://www.semanticscholar.org/search?q=%s\\\" (org-entry-get nil \\\"TITLE\\\"))))][check citing articles]]\"\n    \t\t\t\t\t\t     \"- [ ] [[elisp:(browse-url (url-encode-url (format \\\"https://www.connectedpapers.com/search?q=%s\\\" (org-entry-get nil \\\"TITLE\\\"))))][check related articles]]\"\n                                                         \"- [ ] check if bibtex entry has missing fields\"))\n                                             \"\"))\n                              :org-entry (lambda () (org-capture-ref-get-org-entry))\n    \t\t\t  :template\n                              (\"%{fetch-bibtex}* TODO %?%{space}%{org-entry}\"\n                               \"%{extra}\"\n                               \"- Keywords: #%{link-type}\")\n    \t\t\t  :children ((\"Interactive link\"\n    \t\t\t\t      :keys \"b\"\n    \t\t\t\t      :clock-in t\n                                          :space \" \"\n    \t\t\t\t      :clock-resume t\n    \t\t\t\t      )\n    \t\t\t\t     (\"Silent link\"\n    \t\t\t\t      :keys \"B\"\n                                          :space \"\"\n    \t\t\t\t      :immediate-finish t))))))\n      (dolist (template templates)\n        (asoc-put! org-capture-templates\n    \t       (car template)\n    \t       (cdr  template)\n    \t       'replace)))\n\n**TL;DR how the above code works**: Call `org-capture-ref-process-capture` at the beginning to scrape BiBTeX from the link. Then use `org-capture-ref-get-org-entry` to format the heading (according to `org-capture-ref-headline-format`). Alternatively it is possible to use `org-capture-ref-get-bibtex-field` to get metadata directly (`:bibtex-string` field will contain formatted BiBTeX entry).\n\n\n\u003ca id=\"orgac54b32\"\u003e\u003c/a\u003e\n\n### Capturing links from browser\n\nThe above capture templates can be used via  [org-protocol](https://orgmode.org/manual/The-capture-protocol.html#The-capture-protocol):\n\n-   For popular browsers like Firefox, see [Alphapapa's org-protocol instructions](https://github.com/alphapapa/org-protocol-capture-html#org-protocol-instructions)\n-   For Qutebrowser, see [Integration with qutebrowser](#qute_integration) section below.\n\n\n\u003ca id=\"org70db0fe\"\u003e\u003c/a\u003e\n\n### Capturing rss links from [elfeed](https://github.com/skeeto/elfeed/)\n\nExample configuration for capturing `elfeed` entries (assuming the capture template above). `Elfeed` entry object is passed to org-capture-ref via `:elfeed-data`.\n\n    (defun yant/elfeed-capture-entry ()\n      \"Capture selected entries into inbox.\"\n      (interactive)\n      (elfeed-search-tag-all 'opened)\n      (previous-logical-line)\n      (let ((entries (elfeed-search-selected)))\n        (cl-loop for entry in entries\n    \t     do (elfeed-untag entry 'unread)\n    \t     when (elfeed-entry-link entry)\n    \t     do (flet ((raise-frame nil nil))\n    \t\t  (org-protocol-capture (list :template \"B\"\n    \t\t\t\t\t      :url it\n    \t\t\t\t\t      :title (format \"%s: %s\"\n    \t\t\t\t\t\t\t     (elfeed-feed-title (elfeed-entry-feed entry))\n    \t\t\t\t\t\t\t     (elfeed-entry-title entry))\n                                                  :elfeed-data entry))))\n        (mapc #'elfeed-search-update-entry entries)\n        (unless (use-region-p) (forward-line))))\n\nThe above function should be ran (`M-x yant/elfeed-capture-entry \u003cRET\u003e`) with point at an `elfeed` entry.\n\n\n\u003ca id=\"orgf74ed99\"\u003e\u003c/a\u003e\n\n## Extra features\n\n\n\u003ca id=\"orgd84bfd3\"\u003e\u003c/a\u003e\n\n### Detecting existing captures\n\nOrg-capture-ref checks if there are any existing headlines containing the captured link already. By default, :ID: {cite key of the BiBTeX}, :Source: {URL}, :URL: {URL} properties, and article title for journal publications  are checked in all files searchable by `org-search-view`.\n\nIf org-capture-ref finds that the captured link already exist in org files the matching entry is shown by default unless capture template has `:immediate-finish t`. The is the queried to update the existing entry according to the current metadata. If the user agrees, normal Org capture buffer will be displayed and the captured heading will be interactively merged with the existing link capture.\n\n\n\u003ca id=\"qute_integration\"\u003e\u003c/a\u003e\n\n### Integration with [qutebrowser](https://github.com/qutebrowser/qutebrowser/)\n\nThe web-page contents loaded in qutebrowser can be reused by org-capture-ref without a need to load the page again for parsing. This also means that content requiring authorisation can be parsed by the package.\n\nIf one wants to use this feature, extra argument `html` will need to be provided to org-protocol from qutebrowser userscript.\n\nIn addition, package logs can be shown as qutebrowser messages if `qutebrowser-fifo` is provided.\n\nAn example of bookmarking userscript is below:\n\n    rawurlencode() {\n        local string=\"${1}\"\n        local strlen=${#string}\n        local encoded=\"\"\n        local pos c o\n    \n        for (( pos=0 ; pos\u003cstrlen ; pos++ )); do\n    \tc=${string:$pos:1}\n    \tcase \"$c\" in\n                [-_.~a-zA-Zа-яА-Я0-9] ) o=\"${c}\" ;;\n    \t    [\\[\\]] ) o=\"|\" ;;\n    \t    * )               printf -v o '%%%02x' \"'$c\"\n    \tesac\n    \tencoded+=\"${o}\"\n        done\n        echo \"${encoded}\"    # You can either set a return variable (FASTER) \n        REPLY=\"${encoded}\"   #+or echo the result (EASIER)... or both... :p\n    }\n    \n    # Returns a string in which the sequences with percent (%) signs followed by\n    # two hex digits have been replaced with literal characters.\n    rawurldecode() {\n    \n        # This is perhaps a risky gambit, but since all escape characters must be\n        # encoded, we can replace %NN with \\xNN and pass the lot to printf -b, which\n        # will decode hex for us\n    \n        printf -v REPLY '%b' \"${1//%/\\\\x}\" # You can either set a return variable (FASTER)\n    \n        #  echo \"${REPLY}\"  #+or echo the result (EASIER)... or both... :p\n    }\n    \n    \n    # Initialize all the option variables.\n    # This ensures we are not contaminated by variables from the environment.\n    TEMPLATE=\"b\"\n    FORCE=\"\"\n    \n    while :; do\n        case $1 in\n    \t--force)       # Takes an option argument; ensure it has been specified.\n    \t    FORCE=\"t\"\n    \t    shift\n                ;;\n            --silent)\n    \t    TEMPLATE=\"B\"\n                shift\n                ;;\n            --rss)\n                TEMPLATE=\"r\"\n                shift\n                ;;\n            *)\n                break\n        esac\n        shift \n    done \n    \n    rawurlencode \"$QUTE_URL\"\n    URL=\"$REPLY\"\n    \n    TITLE=\"$(echo $QUTE_TITLE | sed -r 's/\u0026//g')\"\n    \n    SELECTED_TEXT=\"$QUTE_SELECTED_TEXT\"\n    \n    (emacsclient \"org-protocol://capture?template=$TEMPLATE\u0026url=$URL\u0026title=$TITLE\u0026body=$SELECTED_TEXT\u0026html=$QUTE_HTML\u0026qutebrowser-fifo=$QUTE_FIFO\"\\\n         \u0026\u0026 echo \"message-info '$(cat ~/Org/inbox.org | grep \\* | tail -n1)'\" \u003e\u003e \"$QUTE_FIFO\" || echo \"message-error \\\"Bookmark not saved!\\\"\" \u003e\u003e \"$QUTE_FIFO\");\n\n\n\u003ca id=\"orgb3cf7ab\"\u003e\u003c/a\u003e\n\n## Customisation\n\nThe main function used in the package is `org-capture-ref-process-capture`. It takes the capture info from org-protocol, loads the link html (by default), and parses it to obtain and verify the BiBTeX. The parsing is done in the following steps:\n\n1.  The capture info is scraped to get the necessary BiBTeX fields according to `org-capture-ref-get-bibtex-functions`\n2.  Unique BiBTeX key is generated according to `org-capture-ref-generate-key-functions`\n3.  The obtained BiBTeX fields and the key are used to format (`org-capture-ref-get-formatted-bibtex-functions`) and cleanup (`org-capture-ref-clean-bibtex-hook`) BiBTeX entry\n4.  The generated entry is verified (by default, it is checked if the link is already present in org files) according to `org-capture-ref-check-bibtex-functions`\n\n\n\u003ca id=\"org8e927eb\"\u003e\u003c/a\u003e\n\n### Retrieving BiBTeX / metadata fields\n\nWhen capture is done from `elfeed`, org-capture-ref first attempts to use the feed entry metadata to obtain all the necessary information. Otherwise, the BiBTeX information is retrieved by scraping the web-page (downloading it when necessary according to `org-capture-ref-get-buffer-functions`).\n\nThe necessary BiBTeX fields are the fields defined in `org-capture-ref-field-regexps`, though individual website parsers may add extra fields. For example, `elfeed` entries often contain keywords information.\n\nAny captured link is assigned with `howpublished` field, which is simply web-site name without front `www` part and the tail `.com/org/...` part.\n\nBy default, the BiBTeX entry has `@misc` type (see `org-capture-ref-default-type`).\n\nIf capture information or website contains a DOI, \u003chttps://doi.org\u003e is used to obtain the BiBTeX.\nIf capture information or website contains a ISBN, \u003chttps://ottobib.com\u003e is used to obtain the BiBTeX.\n\nParsers for the following websites are available:\n\n-   Scientific articles from APS, Springer, Wiley, Tandfonline, Semanticscholar, Sciencedirect, Sciencemag, ProQuest, ArXiv, and AMS publishers\n-   Google scholar BiBTeX page\n-   Wikipedia\n-   Goodreads\n-   Amazon (books)\n-   Github repos, commits, issues, files, and pull requests\n-   Reddit threads and comments\n-   Youtube video pages\n-   \u003chttps://habr.com\u003e articles\n-   Wechat articles\n-   \u003chttps://author.today\u003e books\n-   \u003chttps://fantlab.ru\u003e book pages\n-   \u003chttps://ficbook.net\u003e book pages\n-   \u003chttps://lesswrong.com\u003e articles\n\nSpecial parsers for the following RSS feeds are available (via `elfeed`):\n\n-   \u003chttps://habr.com\u003e articles\n-   Reddit\n-   TED rss feeds\n\n**Contributions implementing additional parsers are welcome.**\n\nIf the above parsers did not scrape (or mark missing) all the fields from `org-capture-ref-field-regexps`, generic html parser looking for DOIs, html metadata, and OpenGraph metadata is used to obtain them. This is often sufficient, but may not be accurate.\n\nOne can find information about writing own parsers in docstrings of `org-capture-ref-get-bibtex-functions` and `org-capture-ref-get-bibtex-from-elfeed-functions`.\n\n\n\u003ca id=\"orga95bf6e\"\u003e\u003c/a\u003e\n\n### Key generation\n\norg-capture-ref relies on the fact the BiBTeX keys are unique for each entry and will remain unique if the same entry will be captured in future.\n\nThe key generation methods are defined in `org-capture-ref-generate-key-functions`.\n\n\n\u003ca id=\"orgec6f48c\"\u003e\u003c/a\u003e\n\n### Formatting BiBTeX entry\n\nBy default, the BiBTeX entry is formatted according to `org-capture-ref-default-bibtex-template` with all the missing fields removed.\nThen some common cleanups are applied to the entry (similar to org-ref, see `org-capture-ref-get-formatted-bibtex-functions`).\n\nThe behaviour can be customised by customising `org-capture-ref-get-formatted-bibtex-functions`.\n\n\n\u003ca id=\"org35a6869\"\u003e\u003c/a\u003e\n\n### Validating the BiBTeX entry\n\nThe common problem (at least, for me) of capturing the same links multiple times is avoided by verifying uniqueness of the captured entry. By default, the BiBTeX key, URL (as in generated BiBTeX), and the original link as passed to org-protocol are searched in org files. If a match is found, capture process is terminated, warning is shown, and the matching org entry is revealed.\n\nIt is assumed that the BiBTeX key is stored as org entry's :ID: property and the URL (org link URL) are stored as org entry's :Source: property.\n\nThe validation can be customised in `org-capture-ref-check-bibtex-functions`.\n\nBy default, search is done via `grep` (if installed). It can be switched to built-in `org-search-view` (for URL validation) and to `org-id-find` (for BiBTeX key validation) by customising `org-capture-ref-check-regexp-method` and `org-capture-ref-check-key-method`, respectively.\n\n\n\u003ca id=\"orgf64f6a8\"\u003e\u003c/a\u003e\n\n## Planned features\n\n-   [X] Parsing amazon/goodreads for ISBN and generating BiBTeX using the obtained ISBN\n-   [X] Use DOM as main method to parse html\n-   [ ] Automatically tangle the generated BiBTeX into .bib file (for org-ref integration)\n-   [ ] Provide custom note function for org-ref\n-   [ ] Add support of major browsers, probably using \u003chttps://github.com/maxnikulin/linkremark\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyantar92%2Forg-capture-ref","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyantar92%2Forg-capture-ref","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyantar92%2Forg-capture-ref/lists"}