{"id":25432363,"url":"https://github.com/drprojects/nora","last_synced_at":"2025-07-21T03:10:37.737Z","repository":{"id":234180559,"uuid":"624809694","full_name":"drprojects/nora","owner":"drprojects","description":"A python-populated Notion template to help you keep track of the papers you read 📜, their authors 👤,  your notes 📝, and more 🔥","archived":false,"fork":false,"pushed_at":"2025-07-16T11:46:18.000Z","size":70,"stargazers_count":38,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-17T15:44:20.841Z","etag":null,"topics":["arxiv","authors","notes","notion","papers","research-tool","zotero"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drprojects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-04-07T10:03:33.000Z","updated_at":"2025-07-16T11:46:21.000Z","dependencies_parsed_at":"2024-05-23T08:47:08.443Z","dependency_job_id":"d7c863f5-1409-43de-a710-4a8214ea0a70","html_url":"https://github.com/drprojects/nora","commit_stats":null,"previous_names":["drprojects/nora"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/drprojects/nora","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drprojects%2Fnora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drprojects%2Fnora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drprojects%2Fnora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drprojects%2Fnora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drprojects","download_url":"https://codeload.github.com/drprojects/nora/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drprojects%2Fnora/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266232227,"owners_count":23896562,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["arxiv","authors","notes","notion","papers","research-tool","zotero"],"created_at":"2025-02-17T04:50:08.726Z","updated_at":"2025-07-21T03:10:37.699Z","avatar_url":"https://github.com/drprojects.png","language":"Python","readme":"\u003cdiv align=\"center\"\u003e\n\n# NoRA - Notion Research Assistant \n\n[![python](https://img.shields.io/badge/-Python-blue?logo=python\u0026logoColor=white)](https://github.com/pre-commit/pre-commit)\n[![hydra](https://img.shields.io/badge/Config-Hydra_1.2-89b8cd)](https://hydra.cc/)\n[![license](https://img.shields.io/badge/License-MIT-green.svg?labelColor=gray)](https://github.com/ashleve/lightning-hydra-template#license)\n\nA Notion template to help you keep track of the papers you read 📜, their authors 👤, \nyour notes 📝, and more 🔥\n\n**_If you ❤️ or simply use this project, don't forget to give the repository a ⭐,\nit means a lot to us !_**\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## 📌  Introduction\n\nThis project was built as a [Notion](https://www.notion.so)-based alternative to \nreference management softwares such as Zotero and Mendeley.\n\nIt is composed of the **NoRA Notion template** for you to build on top of, as \nwell as **NoRA-Tools** to programmatically:\n- 🔥 upload papers to your NoRA library as easily as with \n[Zotero Connector](https://www.zotero.org/download/connectors) from a simple URL or an identifier\n- 🔥 move all your already-existing Zotero library to NoRA\n\n### 🧪  NoRA template\n\nThe NoRA template provides you with a structure of interconnected databases to \nkeep track of your research papers and notes.\nMore specifically, the template contains the following databases:\n- `🏗️ Projects`\n- `📜 Papers`\n- `👤 People`\n- `🏢 Affiliations`\n- `🤹 Conferences \u0026 journals`\n- `🧲 Key topics`\n\nThe inner workings of the template are quite straightforward, the best way to \nget familiar with it is probably to play with it 😉 !\n\n### 🛠  NoRA-Tools\n\nThe NoRA-Tools provide functionalities to programmatically upload data to your \nNoRA template. The main functionalities are:\n\n- uploading a paper and associated metadata to NoRA from a URL or \nfrom an identifier (DOI, ISBN, PMID, arXiv ID), exactly like with \n[Zotero Connector](https://www.zotero.org/download/connectors)\n- uploading your whole Zotero library to NoRA \n\nYou can freely modify or extend the NoRA template. However, keep in mind that if \nyou want to use NoRA-Tools after modifying some sensitive page fields, you may \nneed to adjust your [Notion configuration](###notion-configuration) accordingly.\n\n\u003cbr\u003e\n\n## 🧱  Installation\n\n### Requirements\n- `npm` installed\n- `conda` installed\n- Notion account\n\n### Installing the template in Notion\n\nSimply duplicate the [NoRA template](https://silent-switch-780.notion.site/Template-research-library-286d3393a7e845c6a689a5c693790987) to your personal Notion account.\n\n### Installing NoRA-Tools on your machine\n\n```bash\n# clone project\ngit clone --recurse-submodules https://github.com/drprojects/nora\n\n# create a 'nora' conda environment with required dependencies\ncd nora\nconda env create -f nora.yml\n\n# install the npm server\ncd src/translation_server\nnpm install\ncd ../..\n```\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eSetting up NoRA-Tools for simpler bash commands (optional, \u003ci\u003eUnix machines only\u003c/i\u003e)\u003c/b\u003e\u003c/summary\u003e\n\nAs you will see below, executing NoRA-Tools requires activating a conda \nenvironment and calling a python script following a specific syntax. \nFor more convenience, it is also possible to configure NoRA to be called \nusing a simpler bash syntax on Unix machines. \n\nTo set this up on your machine, you simply need to run the following \nscript once and for all:\n\n```bash\nscripts/add_nora_to_path_unix\n```\n\nMake sure your restart your terminal ro source the `.bashrc` to apply \nthe changes:\n\n```bash\nsource ~/.bashrc\n```\n\n\u003c/details\u003e\n\n### Notion configuration\n\nNext, you will need to configure your NoRA-Tools to connect to your NoRA databases in Notion.\nTo this end, do the following:\n- [Create an integration](https://developers.notion.com/docs/create-a-notion-integration) for your NoRA workspace\n- [Recover your **API secret token**](https://developers.notion.com/docs/create-a-notion-integration#get-your-api-secret)\n- For each database in the NoRA template (ie Papers, People, Affiliations, Venues, Topics):\n  - [Give your integration permission to access this database](https://developers.notion.com/docs/create-a-notion-integration#give-your-integration-page-permissions)\n  - Recover your **database ID**. For this, open the database page **in a browser**. The\ndatabase ID is a 32-alphanumeric-character that can be recovered from the URL of the page:\n`https://www.notion.so/this_is_your_32_character_database_id?v=you_can_ignore_the_rest`\n\nOnce you have recovered your **API secret token** and the **database IDs**, you must save \nthese in the `configs/notion/default.yaml` file:\n\n````yaml\n# Adapt to your own Notion library.\n# See https://developers.notion.com/docs/create-a-notion-integration\ntoken: \"your_api_secret_token\"\npapers_db_id: \"your_papers_database_id\"\npeople_db_id: \"your_people_database_id\"\naffiliations_db_id: \"your_affiliations_database_id\"\nvenues_db_id: \"your_venues_database_id\"\ntopics_db_id: \"your_topics_database_id\"\n````\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e⚠️ Want to modify some field names in NoRA ?️\u003c/b\u003e\u003c/summary\u003e\n\nBy default, NoRA-Tools expect the attribute fields (eg column names in Notion) of your papers, people, etc. to have specific values.\nIf you want to adjust those, you will also need to adjust the `configs/notion/default.yaml` file:\n\n````yaml\n# If you happen to modify your field names in Notion, update the\n# following database-specific keys\nperson_keys:\n    name: 'Name'\n    affiliations: '🏢 Affiliations'\n    papers: '📜 Papers'\n    website: 'Website'\n\npaper_keys:\n    name: 'Name'\n    authors: '👤 Authors'\n    abstract:  'Abstract'\n    topics: '🧲 Key topics'\n    url: 'URL'\n    to_read: 'Reading status'\n    year: 'Year'\n    venue:  '🤹 Venue'\n\naffiliation_keys:\n    name: 'Name'\n\nvenue_keys:\n    name: 'Name'\n````\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e\n⚠️ Want to add your own 🤹 Conferences \u0026 journals ?️\u003c/b\u003e\u003c/summary\u003e\n\nBy default, when parsing a paper from a remote database, NoRA-Tools will try to \nfigure out which `🤹 Conferences \u0026 journals` to place it under. However, one \ncan hardly account for all possible conference and journal names, nor for all \nthe slight formatting differences used to describe how a paper was published. \nYet, we attempt to group the most frequent ones using a predefined `VENUES` \ndictionary in `src/utils/venues.py`.\n\nIf many papers from your library are from a conference or journal absent from \nthis dictionary, and you would like them to be grouped under the same \n`🤹 Conferences \u0026 journals` item, you can simply append your own entries in \n`VENUES`, using the following format:\n\n````python\nlowercase_match_to_search_for_in_remote_metadata: 'shorthand_under_which_to_group'\n````\n\n\u003c/details\u003e\n\n\n### Zotero configuration (optional)\n\nIf you intend to move your whole Zotero library to Notion, you will need to configure \nyour NoRA-Tools accordingly.\nTo this end, you will need to:\n- Get your Zotero **library ID** by checking the UserID in your [profile settings](https://www.zotero.org/settings/keys)\n- Create a Zotero **API key** in your [profile settings](https://www.zotero.org/settings/keys)\n\nYou can then save your Zotero **library ID** and **API key** in the \n`configs/zotero/default.yaml` file:\n\n````yaml\n# Adapt to your own Zotero library\nlibrary_id: 'your_library_id'\napi_token: 'your_api_key'\n````\n\nBy default, the `collections` (eg folders) in your Zotero library will be used to \npopulate the `Key Topics` field of your papers in NoRA.\nIf you want to exclude some of your collections from this behavior, your can list \nthem in:\n\n````yaml\nignored_collections: ['collection name 1', 'collection name 2']\n````\n\n### Proxy configuration (optional)\n\nIf your machine has a proxy, you will need to configure your NoRA-Tools to use it.\nTo this end, specify your `$HTTP_PROXY` and `$HTTPS_PROXY` in the \n`configs/proxy/default.yaml` file:\n\n````yaml\nhttp_proxy: 'your_http_proxy'\nhttps_proxy: 'your_https_proxy'\n````\n\n\u003cbr\u003e\n\n## ⚡  Using NoRA-Tools\n\n### Uploading a paper to NoRA\n\nNoRA-Tools mimics the behavior of the \n[Zotero Connector](https://www.zotero.org/download/connectors), which \nhas two mechanisms for uploading a paper.\n\nFrom a URL:\n\n```bash\n# In your activated nora conda environment\npython nora.py url=https://arxiv.org/abs/2204.07548\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eIf you set up NoRA for simpler Unix commands\u003c/summary\u003e\n\n```bash\nnora url=https://arxiv.org/abs/2204.07548\n```\n\n\u003c/details\u003e\n\nFrom an identifier (DOI, ISBN, PMID, arXiv ID):\n\n```bash\n# In your activated nora conda environment\npython nora.py \"id='2204.07548'\"\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eIf you set up NoRA for simpler Unix commands\u003c/summary\u003e\n\n```bash\nnora \"id='2204.07548'\"\n```\n\n\u003c/details\u003e\n\n\u003e **Note**: we use [hydra](https://hydra.cc) for parsing shell commands and \n\u003e recommend using quotes as shown above when querying `id=...`. This is to\n\u003e avoid some potential trailing zeros to be ignored when parsing your shell \n\u003e arguments. For more details on this, see the \n\u003e [hydra documentation](https://hydra.cc/docs/1.2/advanced/override_grammar/basic/#quoted-values).\n\n\u003e **Note**: NoRA uses `psutil.net_connections()` which requires sudo \n\u003e privileges on macOS. Unfortunately, there is no workaround this, you will\n\u003e need to run `nora` as sudo on macOS.\n\n### Uploading your entire Zotero library to NoRA\n\n```bash\npython nora.py zotero.upload=True\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eIf you set up NoRA for simpler Unix commands\u003c/summary\u003e\n\n```bash\nnora zotero.upload=True\n```\n\n\u003c/details\u003e\n\n\u003cbr\u003e\n\n## License\n\nNoRA is released under the MIT License.\n\n```\nMIT License\n\nCopyright (c) 2023-2024 Damien Robert\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrprojects%2Fnora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrprojects%2Fnora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrprojects%2Fnora/lists"}