Voicebar
A voice-first keyboard for Android that works alongside Gboard. Tap Voice, talk, and a tidy message lands in the box.
翻譯準備中
Fold papers, web pages, files, and AI replies into five levels of detail. Zoom from an overview to the original text.
翻譯準備中
生產力Python · JavaScriptGitHub @chenxiachan自行安裝營運者未確認
試用過了嗎? 點一下就好,不需要登入。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗🚀 New: TextFold in your browser! One click on the browser extension transfers the page you are reading to TextFold. For Chrome · Edge · Brave
English · 简体中文
Paste a link: any web page · arXiv · PubMed Central · bioRxiv · medRxiv · Wikipedia · GitHub Drop files, one or several: PDF · Word · PowerPoint · Excel · EPUB · HTML · CSV · pictures · Markdown · text Works with: Claude Code · Pi · Zotero · Obsidian · your browser
Try the demo → or download the app ↓ · What's new ↓
Choose the level of detail you need, and lower your cognitive load.
| Level | Each paragraph becomes | In whose words | |
|---|---|---|---|
| 1 | Full | the paragraph as written | the author's |
| 2 | Brief | its one to three key sentences, verbatim | the author's |
| 3 | Key | its point and the reason for it | AI, resting on the Brief sentences |
| 4 | Takeaway | one line on the spine of its section | AI |
| 5 | Topic | a few words; the text becomes a map of section cards | AI |
Your agent writes more than you have time to read. A Claude Code mod folds every reply the same way, one key per level, and an extension does the same in Pi. More ↓
A button for Chrome, Edge and Brave sends the page you are reading to TextFold as you see it: signed in, past a paywall you pay for, drawn by the page's scripts. The browser finds its article the way reading views do, with its headings, figures, formulas and footnotes, and TextFold folds it. With TextFold open, its reader opens beside the page. Firefox is not supported yet.
Install it from GitHub. The button is in review for the Chrome Web Store; until it is there:
python3 -m pip install -U textfold, then python3 -m textfold capture install once.extension folder. Download the repository as a ZIP and unzip it, or git clone https://github.com/chenxiachan/textfold.git. The folder is ready as it is: nothing to build.chrome://extensions (edge://extensions in Edge), turn on Developer mode, choose Load unpacked, and pick the extension folder.Keep the folder where it is: the browser loads the button from it. To update, download it again into the same place and click ↻ on the button's card in chrome://extensions. Once the button is in the Chrome Web Store, remove this copy before installing it from there. To see the levels, connect a model ↓.
The button reads a page only when you click it, and hands it to TextFold on this computer and to nothing else (privacy policy). docs/web-capture.md tells how it works.
python3 -m textfold get hands your agent or script a document one level at a time, and an open format lets any program read and write folded text. For agents ↓Words that travel. As you zoom, every word that stays slides to its new place and the rest fade around it.
Zoom under your fingers. Stop halfway, turn back, or open one paragraph alone.
Beside the original. Open a paper's or a PDF's own pages next to the text, each paragraph shown where it stands on its page.
Ask AI about exactly what you read. Select a passage, or ask about the whole text: the short answer comes first, and each point links to the paragraph it rests on. With Look it up on the web, an agent on your computer searches the web too.
Notes that zoom with the text. Highlight and write in the margin; what you marked stays as you zoom out, and is saved with the page.
Your language. Read in many languages, translated sentence by sentence, with every formula as typeset. A document's own levels are written in its own language.
Your library, in order. Search it with ⌘K, keep documents in folders (drag one in, or right-click it), and list it by kind, by when each came in, or by when you last opened it.
Download the app for macOS (Apple silicon or Intel) or Windows. Everything it needs is inside, Python included.
Or install the Python package, on any system and for your own pipeline:
python3 -m pip install textfold
python3 -m textfold serve
Open http://localhost:3017. The first time, connect a model; then paste a link or drop a file, and pick a language. You need Python 3.9 or newer (the one macOS ships with works).
| Paste or drop | What TextFold reads |
|---|---|
| A paper's link or DOI: arXiv, PubMed Central, bioRxiv, medRxiv | its text as the site structures it (an arXiv paper without an HTML version is read from its PDF; another DOI needs an open full text in Europe PMC) |
| Any other web page | its article, without the menus, the adverts, or the text it hides from its readers |
| A page open in your browser | the page as you see it, signed in or subscribed, with what its scripts drew: click TextFold's button. Works in your browser ↑ |
| A Wikipedia article, a GitHub repository | the article; the README, with its pictures |
| A PDF | the paper online when the PDF names one, with your file beside it; any other PDF, on your computer: read by TextFold itself, figures included, or more completely by the PDF engine (MinerU, about 3.4 GB, installed once from the landing), which a scanned PDF needs |
| A Word, PowerPoint or Excel file, a CSV, an EPUB, a saved web page | the document with its headings, tables, pictures and formulas: read by TextFold itself, or more completely by the PDF engine once it is installed |
| A picture | its text, read by the PDF engine |
| An item of your Zotero library | its arXiv paper, else its PDF or other file, else its DOI. Works on your Zotero ↓ |
| A Markdown or text file | the file as written |
What you read is kept in your system's folder for app data, shared with the desktop app.
git clone https://github.com/chenxiachan/textfold.git
cd textfold
python3 -m pip install -r requirements.txt
python3 -m textfold serve
What you read is then kept in the clone.
TextFold uses a model you already have, and there is no account to create. It looks for one when it starts; if it finds none, the first page offers the ways in.
| You have | What to do |
|---|---|
| Claude Code, Codex, Pi or WorkBuddy | Nothing. TextFold finds it and uses it. WorkBuddy (experimental) brings its models, on your WorkBuddy sign-in; CodeBuddy's own CLI works too. |
| A ChatGPT plan | Click Use my ChatGPT plan. A small bridge starts on your computer and signs in with your account (needs Node.js). |
| Nothing yet | Click OpenRouter in one click. Authorize once, and free models are ready. |
| An API key | Settings › Add provider: Anthropic, OpenAI, DeepSeek, Qwen, Zhipu GLM, Kimi, MiniMax, Google, Ollama, or any OpenAI-compatible endpoint. |
Your questions can go to a stronger model than the one that writes the levels: Settings › Models › Answering questions, with how hard it reasons.
| Do | To |
|---|---|
| Pinch, or ⌘ / Ctrl + scroll | zoom around the pointer |
1 to 5 | jump to a level |
| Cards or Map, beside the levels at Topic | the sections and their topics as cards, or as a mind map |
| Click a paragraph | open just that paragraph |
| Click a figure | see it enlarged |
| Original, at the top | read beside the paper's PDF |
| Save, at the top | keep the page as one file, as Markdown at the level you read, or only your notes |
| Aa, at the top | light or dark, the default or paper style, the text's size, serif or sans-serif, the line spacing, the column's width, and which margins show |
F | focus: the text alone, the bars back at the screen's edge |
| Full screen, in Aa | the window fills the screen (⌃⌘F on a Mac, F11 on Windows) |
| Select text | highlight, write a note, or ask |
| Ask the paper, bottom right | ask about the whole text (Look it up on the web, beside the question: an agent on your computer searches the web too) |
L | next language |
⌘F (Ctrl+F) | find words in the text: at the level you read, and in the author's words that level leaves out (the paragraph opens at Full while you are there); Enter and ⇧Enter step through them |
⌘K (Ctrl+K) or / | search your library |
| ⌘ / Ctrl or Shift + click in the sidebar | pick several documents, to move into a folder or delete together |
| The pin, at the top of the sidebar | keep the sidebar open beside the text |
Bring a text in from your Zotero library, link what you read to your Obsidian notes, and fold your agent's replies where you work. (Your browser: above ↑.)
Click Zotero library, under the drop zone, and your library is there as Zotero shows it: your collections, your group libraries, a search. Read opens any item.
To turn it on, in Zotero 7: Settings › Advanced › Allow other applications on this computer to communicate with Zotero.
TextFold Bridge, an Obsidian plugin by @adalach, links your notes to what you read in TextFold, the way Zotero and its citation plugins work together: TextFold keeps the documents and what you wrote on them, and your notes keep links into them.
textfold:// link opens the document at its paragraph, note or level. Hover it in Obsidian to read the passage.Set it up:
python3 -m textfold serve), and keep it open while you use the plugin. It needs TextFold 0.10.18 or later, and the plugin talks to it on 127.0.0.1 only.TextFold puts the five levels on every reply in Claude Code and in Pi. Press 5 for the answer in one sentence, 3 for the point of every paragraph, 1 for every word (in Pi, hold Alt). Nothing is paraphrased, so at every level you read exactly what the model said.
It needs Claude Code 2.1.287 or later, in the terminal or in the Code tab of the Desktop app.
claude plugin marketplace add chenxiachan/textfold
claude plugin install textfold@textfold
| Key | Level | What you get |
|---|---|---|
| 1 | Full | every word Claude wrote |
| 2 | Brief | each point, with the reason behind it |
| 3 | Points | just the points, at a glance |
| 4 | Outline | the map of a long reply: its sections, and what each one says (a reply without headings shows its points) |
| 5 | Gist | the answer, in one sentence |
Type the digit while the prompt is empty, or pick a level in the row above the prompt. Short replies stay whole: one under about 80 words, or one a fold would barely shorten, always shows as written.
Start folded. A session starts at Full. To start at another level, run /config and set Starting level; in the session, the row above the prompt and the keys 1 to 5 still change it.
Why you can trust a fold. TextFold asks Claude to lead with the point: the answer first in every reply, the key sentence first in every paragraph. A fold keeps what Claude put first. There is no second model and no summary, so a fold costs nothing and takes no time.
More in plugins/textfold.
An extension puts the same five levels on every reply in Pi. It needs Pi 1.2.0 or later, on Node 22.15 or later.
git clone https://github.com/chenxiachan/textfold.git
pi install ./textfold/plugins/pi-textfold
Hold Alt and type the digit, click a level in the row above the prompt, or type /fold and a level: /fold 3, /fold points, /fold off. Every reply folds in place, the earlier ones too, and so does the model's thinking, so a long coding turn reads in a few lines. The level stays with the session, and /fold calibrate teaches the keys on any keyboard. On a Mac, let the terminal send Option as Meta, or Option+1 types ¡. It folds with the mod's own engine, so a reply reads the same at each level in Claude Code and in Pi.
More in plugins/pi-textfold. Contributed by @jlamweil.
python3 -m textfold get gives a document one level at a time, coarsest first, so an agent reads the map before it spends its context on the whole text:
python3 -m textfold get https://arxiv.org/abs/2512.23916 # the map: every section's topic
python3 -m textfold get 2512.23916 --level key --section 3 # one section: its points, each with its reason
python3 -m textfold get report.pdf --json # the whole document, in the TextFold format
A document not folded yet is folded first, with the model you connected. Every line a model wrote is marked as such and anchored to the author's sentences it rests on: docs/format.md describes the format, for any program that reads or writes folded text.
A running TextFold (the app, or python3 -m textfold serve) says where it is in server.json, in its data folder (~/Library/Application Support/TextFold on a Mac, %LOCALAPPDATA%\TextFold on Windows, ~/.local/share/textfold on Linux, the clone when run from one): {"format": "textfold/server", "version": 1, "url": "http://127.0.0.1:<port>", "port": <port>, "pid": <pid>, "textfold": "<version>", "started": "<UTC time>"}. The file goes when the server stops; one left behind (a server ended outright) names an address that answers nothing.
An agent in a browser that offers WebMCP, a draft web standard (tried in Codex's own browser), finds TextFold's own operations on its pages as tools: it reads the passage you are reading or selected, and, when you ask, saves a note on an exact passage, imports a file or a Zotero item, or sorts your folders. Nothing changes in a browser without it. docs/webmcp.md lists the tools. Contributed by @peitianyi23-sudo.
Save, at the top of the reader, keeps a page as one HTML file that opens anywhere without a server: its levels, the notes you choose and, if you like, its original PDF to read beside it. It can also keep the whole text as Markdown at the level you are reading, your notes under their paragraphs (at Topic, an outline that a mind-map plugin draws), or only your notes, as a page, a PDF, Markdown for Obsidian or JSON. From the command line, the page without your notes:
python3 -m textfold export 2512.23916
TextFold is a tool, and its license covers its code. When you share a file, follow the terms of the original text, shown under its title.
mirasim claude, can be added in Settings under Agents on this computer: write its command, choose which agent it runs as, and Detect lists its models. The PDF engine (MinerU, about 3.4 GB) goes beside your library, so on Windows it is no longer on C: when your library is on D:. You can also choose an empty folder for it in Settings before you install it. When a long PDF's levels are written but its argument links cannot be made, the levels are kept and it opens without the links. A relay that sends a whole reply under a stream's header is read too. Thanks to @Gazerrr03, @nasodaengineer and @HamiltonZeng.
Contributions are welcome: start with CONTRIBUTING.md.
If TextFold helps you read, ⭐ star it so others can find it.
Built on trafilatura, which finds the article on a web page, Defuddle and Readability, which find it in your browser, pdf-inspector, which reads a PDF's own text, PDFium by way of pypdfium2, which cuts its figures, MinerU, the PDF engine, and mammoth, which reads Word files; PDFs are shown with PDF.js and formulas with KaTeX, set in Latin Modern Math. Thanks to their authors.
Apache 2.0 © 2026 Xia Chen · Development · Format · Contributing · Security · Feedback
<article>\tag{A} gives a formula its own number, \notag and a starred environment give none, and \eqref{…} shows the number of the formula \label{…} names, as a link to it. A formula of several lines (aligned) keeps its lines. A paper's formulas are set in Latin Modern Math, the type of LaTeX. A table from Markdown, a web page or a document has every cell ruled and every other row shaded. A formula set apart from the text can be selected like words, to highlight it, write a note on it or ask about it, and dragged out by its handle, as a paragraph can, with its number and a link back to it. A Markdown document already in your library shows them so too, with its levels and notes as they were.\text{} read as written (50% off, not 50\% off), and the normal text of a Word formula no longer breaks it. A Markdown document's front matter gives its authors as Quarto writes them, without their affiliations. The Python package starts again on Python 3.9, 3.10 and 3.11. Thanks to @vcdim, @Pharex38 and @adalach.textfold:// link to a later part of a split paragraph opens it. Thanks to @LumenYoung and @adalach.F leaves the text alone on the screen. The sidebar can be pinned beside the text./fold calibrate on any keyboard. Thanks to @jlamweil.python3 -m textfold get <link> --level topic prints a document's map, and --section unfolds the part that matters. More ↑