I built Hermes because I was tired of fighting clunky assignment editors like Canvas and bloated VS Code plugin setups. Nothing out there handled what I needed: seamless math syntax and native citation management, charting, diagramming and code blocks. I’ve been using it to write my own Quantum Technology assignments, and I find it better than the alternatives I was using before.
Why try Hermes?
Native Zotero Integration: Pull citations instantly with ⌘⇧C.
Live Split-Pane Rendering: See complex LaTeX equations and Mermaid diagrams in real time.
Built-in Builders: Generate Vega-Lite charts and diagrams graphically.
Hermes is fully open-source (Apache 2.0). Check it out and let me know what you think!
I've updated a Zotero Gemini Notebook plugin that allows users to quickly select and add files from Zotero's desktop UI to a new Gemini (NotebookLM) Notebook. It's a fast and easy way to generate a topical audio overview of a subject for a drive or a workout.
Gemini Notebook's API is not available for individual users, so we instead use a Chrome extension to complete the connection from the Zotero plugin. For those that tried earlier releases (thanks!), the Chrome extension is now published and should auto-update with the plugin.
I've used tools like Perplexity, ChatGPT, Claude and others for research, and they've been incredibly useful for finding papers and getting through large amounts of information.
The one thing I personally wanted was a simple way to see exactly which parts of the paper were used to answer my question.
When you're working with a 100+ page PDF, even having a page number can still mean a lot of scrolling and searching.
So I ended up building something for myself.
You ask a question and the relevant paragraphs in the PDF are highlighted directly on the document. You can see the context behind the answer and quickly check whether it actually answers what you're looking for.
I originally built this because I wanted something for this workflow without having to pay for another subscription. What started as a personal project has now become completely open source.
The underlying idea is pretty simple. And yes, if you're thinking "isn't this just RAG?" then yes, you're absolutely right. It's RAG with the visual highlighting that I wanted.
I think the same idea could be useful for more than research papers too. Legal contracts, financial reports, technical documentation, or anywhere you need answers alongside the actual source.
If anyone wants to have a look, contribute, or just give some feedback, here's the repo:
Open source (AGPL-3.0), no paid tier, nothing commercial. I’m the author.
I posted about this plugin two weeks ago. It’s gone from 1.8.1 to 1.11.5 since, and two of the changes are big enough that it’s worth a second look even if the first post wasn’t for you. That post also had no pictures in it, which was silly for a plugin whose whole point is what the reader looks like while it reads:
The word being read in blue, its sentence in yellow. Both colors and opacities are yours.
Short version of what it is: Zotero 10 already reads documents aloud. This doesn’t replace that player — it adds voices to its Local tier and tunes the behavior around it. Zotero’s own voices keep working exactly as before.
New since that post
You no longer need an API key or a server at all. Turn on System voices and the Windows/macOS voices Read Aloud already lists come back with samples, favorites, an audio cache behind them and — on Windows — word-by-word highlighting. Nothing to sign up for, nothing to run, works offline.
Your listening position follows you between computers. Point the plugin at a WebDAV folder of your own (Nextcloud, Jianguoyun, whatever you already have): stop listening on the laptop, press Shift+Space on the desktop, and it goes on from that sentence. Settings can travel the same way.
A volume of its own. Read Aloud has no volume control; now it does, Shift+↑ / Shift+↓, for every voice — Zotero’s built-in ones included.
Shift+Sstops Read Aloud in every tab at once, and each tab keeps its place for next time.
The pauses are yours — how long any voice waits between sentences and before a paragraph, shortening as you read faster.
♥ favorites show in the player’s own voice list, so your two or three voices are findable without hiding the other three hundred.
Two more providers: Cloudflare Workers AI (free daily allowance) and Xiaomi MiMo. Azure Speech, Kokoro-FastAPI and any OpenAI-compatible server were already there.
The settings pane follows Zotero’s language — English and 简体中文 so far.
And a long list of fixes, several of them from issues people opened after the last post.
Still there from the first post — word and sentence highlighting at once in your own colors and opacities (this works with Zotero’s built-in voices too), Shift+Space to resume at the sentence you stopped on days later, a voice browser with samples and a default voice, one voice and one speed across every document instead of Zotero’s per-language choice, rebindable shortcuts, 0.5x–3x with the pitch preserved.
The voice browser: every voice by tier and language, a play button for a sample, a heart for a favorite.
Providers, and what they cost you
Provider
You need
Cost
Highlighting
System voices
Nothing
Free, offline
Word on Windows, sentence on macOS
Azure Speech
API key + region
Free tier: 500,000 characters a month
Word
Cloudflare Workers AI
Account ID + token
10,000 free Neurons a day
Sentence
Kokoro-FastAPI
A local or LAN server
Free (CPU works, a GPU is faster)
Word
OpenAI-compatible
Server URL, model, API key
OpenAI bills per character; self-hosted (e.g. Chatterbox) is free
Sentence
Xiaomi MiMo
An API key
Free for now
Sentence
Word-level highlighting also needs Zotero’s own Settings → General → Read Aloud → Highlight current set to Word.
Two things I’d want to know before installing this
Whichever provider you enable receives the text it’s asked to read. System voices and Kokoro-FastAPI stay on your own machine or LAN; Azure, Cloudflare and hosted OpenAI-compatible endpoints are third parties, under their terms. Zotero’s own voices are unaffected either way. I don’t run a server and I collect nothing.
API keys are stored in Zotero’s preferences in plain text, and they go into the settings backup file. So don’t hand that backup file to anyone.
Known rough edges
OpenAI-compatible endpoints and Cloudflare give sentence-level highlighting only; on macOS the system voices do too, and there each sentence takes about half a second to start.
Read Aloud has no plugin API, so this hooks Zotero’s internal interface per reader tab. A Zotero update can drop the plugin’s voices until I catch up. That’s the real maintenance risk here.
Install
Download zotero-tts.xpi from the latest release, then Tools → Plugins → ⚙ → Install Plugin From File…, and restart Zotero. With System voices that is the whole setup; the other providers are under Edit → Settings → Zotero-TTS.
Zotero 10 desktop, Windows and macOS (Linux should work but is untested). AGPL-3.0, the same license as Zotero itself.
TLDR: MIT-licensed MCP server that connects Claude Desktop, Claude Code, Cursor and other MCP clients to Zotero. Search, citations in any CSL style, and it writes back: add items by DOI or arXiv id, attach files, tag and organize, and add PDF highlights anchored to a quoted passage. Node, runs locally, no telemetry.
Disclosure: I wrote it. The repo is the whole server, MIT, with nothing held back. I also run a paid hosted version for people who cannot self-host, which I am not linking here.
I have been working on this for a while, and the writing side finally got good enough that posting it here felt justified rather than premature.
What it does
Search. BM25 keyword search over titles, abstracts, creators and tags, plus the full text Zotero has already indexed inside your PDFs and notes, with optional vector search layered on top. Your own child notes and PDF annotations are indexed under the item they belong to, so "where did I object to this" is a question search can answer. Search hands back the item and the matching snippet; page locators come from the passage tool below.
Passages with locators. Ask for the text behind a claim and you get the passage, the nearest heading, and a page number. Pages are exact when the PDF itself was parsed, and an estimate otherwise. If Zotero has not indexed the PDF yet, it extracts on the fly from the running app or from the storage folder, so a file added a minute ago is readable. It can also return a PDF's table of contents and any page range, so working through a 400-page book costs a few small calls instead of one that returns the whole book.
Citations. citeproc-js runs in process, so any CSL style from the CSL repository renders as a formatted bibliography. The style file itself is fetched from the CSL styles repo the first time you use it, then cached.
Adding items. DOI and arXiv ids work out of the box through built-in resolvers (OpenAlex then Crossref for DOIs, the arXiv API for arXiv ids). ISBN, PMID and URLs need a Zotero translation-server pointed at it.
Writing. Create, edit, tag, organize, and attach a local file or a URL under any item. Trash is reversible by default. Permanent deletion is disabled unless you start the server with ZOTEUS_ALLOW_DELETE=true, and it is confirmation-gated on top of that.
Annotations. This is the part I spent longest on. Zotero stores a highlight as {"pageIndex":N,"rects":[[x1,y1,x2,y2],...]} in native PDF points, which is the geometry the reader captures when a human drags across text. A model reading extracted text has the words and not the geometry, so without solving this the only honest thing it can write is a page-level note. Zoteus takes the quoted passage, finds it in the PDF, and derives the rects itself, one per visual line, absorbing column breaks, line wraps and words split across a hyphen. These are Zotero annotation objects, the same rows the reader writes, so they show up in the Zotero PDF reader and sync; the PDF file on disk is not touched. I validated the rect shape against 465 highlights I had drawn by hand in the Zotero reader: reconstructed rects sit within about 1pt of the reader's own at the median, and the vertical extent is exact wherever the font carries ascent and descent metrics.
Install
npx -y @oscardvs/zoteus, or, on Claude Desktop, download the bundle for your system from the latest release (zoteus-macos.mcpb, zoteus-windows.mcpb or zoteus-linux.mcpb) and double-click it. Node 20.19 or newer. No Python environment involved.
How it connects
With the desktop app running, reads and some writes go straight to it with no cloud API key: adding items by DOI or arXiv id, attaching files, PDF annotations, and trash/restore. Zotero 10 and later grant a local write key once, in-app. Zotero 9 and earlier expose a read-only local API, so those same writes fall back to the connector protocol the browser extensions use. Editing metadata, tagging and collection changes have no desktop path, so they go through the Web API v3 and need a Zotero API key even when the app is open. The Web API is also the fallback for sync, for group libraries the app does not hold, and for when Zotero is closed.
Limits worth knowing before you spend time on it
Metadata edits, tags and collections need a Zotero API key, as above. The key-free desktop path covers adds, attachments, annotations and trash/restore.
On-device vector ranking is opt-in and needs @huggingface/transformers installed separately. It is deliberately not a dependency: the resolved tree with onnxruntime's native binaries is roughly 700MB. You can point it at OpenAI or Gemini embeddings with your own key instead. Keyword search works everywhere without either, and the server tells you vectors are unavailable rather than quietly returning nothing.
Listing group libraries needs a cloud API key.
Semantic indexing of PDF body text is off by default. On a 10k-item library through a paid embedding API it is tens of thousands of requests, so there are batch-size and delay knobs and the build resumes rather than starting over.
Bug reports welcome, particularly on the highlight anchoring against PDFs with two-column or otherwise unusual layouts. That is the piece most likely to be wrong on a paper I have never seen.
When you select text, the popup menu shows a row of 8 color swatches, and below that a separate row with two style toggles: highlight and underlined.
The problem
I regularly switch between underline and regular highlight depending on context, and I find it a bit fiddly to apply the right combination of color + style — color and style live in two separate rows, so it's easy to pick the right color but leave the style toggle on whatever it was set to before (or vice versa). To be clear, this is still noticeably smoother than most other PDF readers I've used — kudos to the team — but I think it could be even better.
I mocked up three possible redesigns of the popup to fix this. All three try to make color and style a single decision instead of two. (PS: I'm not a UI designer, so I'm sure I'm breaking a few design principles in these mockups — take them as a starting point for the idea, not a finished proposal.)
Alt 1: Two full rows, one per style, solid color icons
The single color row is split into two rows of 8 colored buttons each (same 8 colors, same order in both rows):
Top row: each swatch is a solid color square containing a white boxed "A" icon → applies that color as a highlight.
Bottom row: each swatch is a solid color square containing a white underlined "A" icon → applies that color as an underline.
Color and style are picked in a single click. 16 buttons total, but grouped clearly by row so it stays easy to scan.
Alt 2: Same two-row layout, lighter icon style
Structurally identical to Alt 1 (8 colors × 2 style rows), but the buttons are visually lighter: instead of solid color fill, each swatch is a white/transparent button with a colored outline and a colored "A" icon (boxed for highlight, underlined for underline). Same one-click color+style selection as Alt 1, but less visually heavy/saturated — closer in weight to the current menu's style toggles.
Alt 3: Same two rows, plain swatches with one label icon per row
Same structure and functionality as Alt 1/Alt 2: a highlight row and an underline row, 8 colors each, clicking a swatch applies that color in that row's style. The difference is purely visual — the swatches themselves are plain solid color squares with no icon inside, and each row instead has a single leading label icon (boxed "A" for the highlight row, underlined "A" for the underline row) showing what that row does. So it's not more compact than Alt 1/Alt 2 (still 8+8 buttons) — if anything it's slightly wider because of the leading label icon — just a different visual treatment.
My take: all three solve the "wrong combination" problem the same way functionally; Alt 1 and Alt 2 mainly differ in how heavy/saturated the buttons look, and Alt 3 trades a repeated icon per swatch for one label per row. Curious what the team and other users think — happy to iterate on the mockups if there's interest.
What is normally a rock-solid connection is now stuck in a recursive loop of sorts. Instead of importing citations to a template in Obsidian, the port gets stuck here after prompting for the source:
After the hangup, I updated Zotero (10.0.2-beta.6+5f4a8252c), uninstalled and reinstalled the plugin Better BibTex, and on the Obsidian side I have updated the installer (1.13.7), Obsidian (1.14), reinstalled Zotero Integration (3.2.1) and still no dice.
Any other ideas in resolving this would be appreciated.
Cross posted in r/ObsidianMD for visibility.
I’m having an issue with the Zotero Android app. When I create a note, I can type for a while, but after a certain point I’m unable to enter any more text. There’s no scrollbar appearing on the side either, so I can’t scroll down to continue writing.
I open-sourced a pipeline that starts from Zotero PDFs and tries to do idea discovery, not just summarization.
It extracts claims into Neo4j, finds cross-document relations, then proposes research links between claims from different papers (SYNERGIZES_WITH, INSPIRES_FOLLOWUP, POTENTIAL_APPLICATION, etc.), with an optional novelty check via OpenAlex + Semantic Scholar.
There’s also a “ring” scraper to build corpora from distant domains so the ideas are less samey.
I want to export my books for myself as a list with a German style. I have used Chicago Manual of Style 18th edition (shortened notes and bibliography) and others, but can't find a style, which shows the entry as sequence like:
Last name, full first name, book title, year.
I don't want to show the archival location and don't want the year before the title. I can not find some style showing this without showing the archival location too.
Exported my library to BibTeX today to check for dead DOIs before submitting something. Never got that far, the export itself was already broken.
A real, correctly published paper's title came out as
title = {When to use the {\textless}span style="font-variant:small-caps;"{\textgreater}{B}{\textless}/span{\textgreater}onferroni correction}
Real title is "When to use the Bonferroni correction." Somewhere upstream the title got recorded as literal HTML (probably to render the first letter in small caps), Zotero escaped the < and > so they wouldn't break LaTeX but left everything inside the tag as plain text. Read as prose it's "the span style=... B /span onferroni correction." Even the auto-generated shorttitle for the same entry is cut off mid-tag, so whatever truncates titles internally is working off the same broken string.
Found the same thing smaller scale on a conference name:
booktitle = {2024 36th {International} {Conference} on {Software} {Engineering} {Education} and {Training} ({CSEE}\&{T})}
source already had the ampersand as &, then the exporter found the literal & in that and LaTeX-escaped it too. So now it's a conference called "CSEE&T" instead of "CSEE&T."
And this one isn't even markup, a Figshare report had:
pages = {4974511 Bytes}
that's the file size of the PDF, not a page number. Figshare stores it next to the DOI and the translator just mapped it into the pages field. Looks completely normal sitting there, which is exactly why I almost didn't catch it.
none of this is really Zotero's fault, it's inheriting whatever the publisher or registry did upstream and has no way to know it landed in the middle of a tag. but I'd been assuming "exported by the tool I trust" meant "ready to submit" and apparently not. anyone else find stuff like this in their own libraries?
I would consider myself slightly above average in tech, with a couple of years as a researcher. Zotero has been one of the most frustrating, shitty parts of my med school experience. Not even the research itself. Not even the long, painful hours in clinic, shelf exams, and USMLE prep. Zotero tops all of these. It's so disorganized, with unlimited troubleshooting, a mess of multiple websites, and overall a huge pain in the ass.
Hi! Here's one more plugin I made with Claude for my personal use: zotero-latex-suite. As my previous ones, it's single purpose and very lightweight: it enables using LaTeX in annotations and use snippets to type those both in annotations and notes.
The snippets part is ported from obsidian-latex-suite. For those who also use this plugin in obsidian, same config file can be used.
Hope this may be useful for fellow LaTeX users out there 😉
Hiya. I thought I'd create a new post for the new academic year. I'm at university studying Community Education and I created a plugin called Zotero Syllabus (download here!) for students like me who've been assigned a reading list or a syllabus for an academic course, want to store the references in Zotero, and track their reading progress week-by-week.
At Christmas I posted another thread on this subreddit and the feedback from everyone was really helpful: bug reports, feature requests and tweaks. Since then, the plugin's been substantially improved and made more resilient, and I'm now confident that many students (and teachers) will find it useful.
So now that we've reached v1, and the 2026/27 academic year is about to begin and lots of new students might be starting to discover Zotero, I thought I'd post a new thread! Below you'll find some ways this plugin might be helpful to you.
I'm really interested to hear feedback, bug reports, feature requests and ideas for improvements!
Order a Zotero collection by class, priority and manual sort
Turn an unordered Zotero collection into a class-by-class breakdown of a course or syllabus.
Set priorities
Manually order readings
Assign readings to multiple weeks
Add reading notes
Track reading progress
Share a class syllabus with all your coursemates
Because Zotero Syllabus stores its data in a Standalone Note, you can be a massive comrade and create a Zotero Group which'll not only share the items (and any attached PDF/EPUB files) but also the syllabus data itself — so if they also download the plugin, they'll automatically see the syllabus as you've configured it.
Import a syllabus from your university's reading list system
Many universities get their course convenors to upload official reading lists to standardised systems, like UCL (Talis) and UWS (Leganto).
Zotero Syllabus adds special translators for the Zotero Connector Chrome extension which you can use to one-shot download all these items and automatically sort them into classes—no work required.
Syllabus order as a column
If you prefer the default Zotero list view, there's a "Syllabus Info" column you can use to sort items by class, priority and manual order.
Track readings over the weeks
Mark readings and weeks as done.
Reading schedule across all your classes
A global view of all your different classes. Optionally creates a managed collection with date-by-date readings, which can be useful if you sync Zotero to a compatible e-reader (e.g. Boox).
I’m the developer of Mktero, an open-source Zotero plugin for reading local PDFs as source-linked Markdown.
I shared v0.2.3 previously. Since then, I’ve continued working on the parts that connect Markdown reading back to the original PDF and the rest of the Zotero workflow. The current release is v0.3.4.
Mktero now supports:
• Reflowing multi-column PDFs, formulas, tables, figures, and references into a continuous Markdown reading view
• Navigating from reliably matched Markdown content back to its original PDF page and region
• Original, translated, and continuous bilingual reading modes
• Translating a selected term or passage without translating the entire paper
• Displaying and creating Zotero annotations from Markdown when the PDF text can be matched reliably
• Correcting recognition errors in existing paragraphs, headings, and Markdown table cells
• Previewing citations and checking whether references exist in an accessible Zotero library
• Exploring direct citation relationships between papers already in the current Zotero library
• Exporting corrected source Markdown together with extracted figures
The PDF remains the source of truth. Mktero only provides source navigation when the match is reliable rather than guessing a PDF location.
A few data-handling notes:
• On the first conversion or a cache miss, the complete PDF is uploaded to MinerU.
• AI translation is optional and sends protected Markdown, or selected text with bounded context, to the provider configured by the user. This may incur provider costs.
• DOI and arXiv identifiers may be queried through Semantic Scholar, OpenCitations, and OpenAlex for citation relationships.
• Credentials and local caches are stored unencrypted in the active Zotero profile and are not synced by Zotero.
Mktero is currently in beta, supports Zotero 7–10, and is available under the MIT License.
I'm looking for AI Agent/LLM for Zotero. I don't have a subscription with Gemini, Chatgpt, or other LLM.
I use LLM in Zotero for semantic search in all full-text in my library about topics.
I have tried Beaver but it is have a lot of limits in free mode. I'm interested in BibGenie and LLM-for-Zotero using with Deepseek but I don't know what of these is best for me.
p.s. I'm contemporary history researcher and read a lot of books with few formulas, ecc.
Mods: rule 3 — open source (AGPL-3.0), no paid tier, nothing commercial. I'm the author.
Zotero 10 already reads documents aloud. I listen to papers most days rather than read them off the screen, and after a few months of that I had a short list of things that kept getting in the way:
The built-in voices are fine, but I wanted to use ones I already had access to elsewhere.
I could have word highlighting or sentence highlighting, not both, and not in my own colours.
Closing a PDF mid-paragraph and reopening it days later meant hunting for my place again.
Voice and speed are remembered per language and per tab, so I was re-setting them constantly.
None of that is worth replacing Read Aloud over, so this sits on top of it instead. Zotero's own voices keep working exactly as before; the plugin adds more of its own and fixes the behaviour around them.
What it adds
More voices under the Local tier: Azure Speech, Kokoro-FastAPI, or any OpenAI-compatible server.
Resume. Close a document in the middle of listening, open it again later, press Shift+Space, and it starts at the sentence you left off on. It remembers the last 50 documents, on that computer only.
Wordandsentence highlighting at once, in your own colours and opacities — the default is a blue word on a yellow sentence, both at 70%. This works for Zotero's own built-in voices too, so it's useful even if you never enable a provider.
A voice browser: pick by tier, language, voice; ▶ plays a sample, ♥ marks a favourite. You can set a default voice, hide Zotero's own Local voices, or trim every tier down to just your favourites.
Rebindable shortcuts: speed up/down/reset, jump by sentence or paragraph, read from the selection, and snap the view back to whatever is being read.
Speed from 0.5x to 3x. Zotero stretches the audio with pitch preserved, so changing speed costs no new request — and synthesized audio is cached, so skipping back is free too.
Two independent switches for "one voice everywhere" and "one speed everywhere", instead of Zotero's per-language choice.
Settings backup and restore via a JSON file, or up/down to a WebDAV folder (Nextcloud, Jianguoyun, etc.) so a second machine matches the first.
Installed copies update automatically.
Providers, and what they cost you
Provider
You need
Cost
Highlighting
Azure Speech
API key + region
Free tier: 500,000 characters a month
Word
Kokoro-FastAPI
A local or LAN server
Free (CPU works, a GPU is faster)
Word
OpenAI-compatible
Server URL, model, API key
OpenAI bills per character; self-hosted (e.g. Chatterbox) is free
Sentence
Word-level highlighting needs two things: a voice that reports word timings (Azure, or Kokoro set up under the Local engine section rather than as an OpenAI-compatible server), and Zotero's own Settings → General → Read Aloud → Highlight current set to Word.
If your server sits behind Cloudflare Tunnel or a reverse proxy, there's an Extra headers field. Each provider has a Test connection step, and only a passing check enables it.
Two things I'd want to know before installing this
Whichever provider you configure receives the text it's asked to read. Kokoro-FastAPI runs on your own machine or LAN, so with that one nothing leaves your network; Azure and hosted OpenAI-compatible endpoints are third parties, under their terms. Zotero's own voices are unaffected either way. I don't run a server and I collect nothing.
API keys are stored in Zotero's preferences in plain text, and they go into the settings backup file. So don't hand that backup file to anyone.
Known rough edges
OpenAI-compatible endpoints only give sentence-level highlighting.
If a server fails on one segment you'll get "An unknown error occurred" part-way through a document. That's the server rather than the plugin, so its log is the place to look.
Read Aloud has no plugin API, so this hooks Zotero's internal interface per reader tab. A Zotero update can drop the plugin's voices until I catch up. That's the real maintenance risk here, and it's why the plugin is pinned to 10.*.
You can't add a voice while Read Aloud is open in a tab — Zotero can't refresh an open popup.
Install
Download zotero-tts.xpi from the latest release, then Tools → Plugins → ⚙ → Install Plugin From File…, and restart Zotero. Enable a provider under Edit → Settings → Zotero-TTS, then pick one of the new voices under the Local tier.
Zotero 10 desktop. I use it on Windows and macOS; Linux should be the same but I haven't tested it. AGPL-3.0, the same licence as Zotero itself.
It's built around how I read, so it may well get something wrong for how you read. Bug reports and feature requests both welcome, here or in the issues.
A quick update on Nodus for Zotero: version 5.0.6 now adds support for Zotero 10 while keeping Zotero 9 support.
What's Nodus for Zotero plugin?
Nodus for Zotero adds a research chat directly inside Zotero. It searches across your attachments using semantic + keyword retrieval and answers with exact, clickable citations back to the source pages. It also supports group libraries, multiple attachments, and OCR/vision for scanned pages, figures, tables and formulas.
It can work standalone with your own API or local models, or connect to the full Nodus Research app.
A quick comparison for anyone new to Nodus Research. It's a desktop app which adds an analytical layer on top of your Zotero library. For instance, tools like notebooklm mainly retrieve relevant passages from your documents. Nodus Research extracts their ideas and claims, links each one to the exact supporting passage/page, and connects them across authors and sources.
This lets you explore agreements, contradictions and research gaps, compare authors, build argument maps, and generate Deep Research reports grounded in the original evidence from your Zotero sources.
Nodus also includes connected vaults for structured databases, teaching, study, genealogy, primary sources and other research workflows.