Annotate documents live with AI, on your terms.
Open the app · Source code · 日本語 · 简体中文
Tell Astra what matters in a document. Watch annotations arrive, refine them by hand, and take the useful parts with you.
Actual English recording, annotation phase only, 4× playback. Three pages were processed concurrently by GPT-6 Astra through the local Codex App Server. The app retained a human note and respected seven exact label names. This is recorded model output, not simulated animation. The source is the OpenAI DALL·E paper, selected pages 1, 2 and 5, under CC BY 4.0.
- Open Astra Annotator.
- Open a PDF, Office document or supported image. You can add rectangles, labels and notes immediately.
- For AI, open Connection settings and enter your HTTPS API endpoint and API key. The provider must support the OpenAI Responses API, image input, structured output, streaming and browser CORS.
- Write an instruction and select Run. Up to three pages run at once. Labels are generated from your instruction unless you supply exact names and definitions under Labels · optional.
The website is a static GitHub Pages app. Files are processed in your browser; page images are sent to your configured provider only when you run AI. Your key stays in the current tab's memory, is never included in the published code, and is cleared on reload. API usage is billed by your provider. Export your work before closing the tab.
Explore the paper demo loads saved, real GPT-6 Astra results without making a model request. A new Run uses your own connection.
- Import multiple documents into one uncluttered workspace.
- Draw a region or add a note yourself; edit labels, excerpts and LaTeX.
- Give natural-language instructions without choosing a task mode first.
- Watch validated regions arrive before the final model response. Incomplete results remain unconfirmed.
- Keep manually created or edited annotations when you rerun AI.
- Generate labels dynamically, or enforce your own exact label names and definitions.
- Extract PNG regions, text, tables and mathematical expressions.
- Export annotated PDFs, JSON, CSV, Markdown and ZIP collections.
- Switch between English (default), Japanese and Simplified Chinese without changing source text.
| Capability | GitHub Pages / browser only | Local or connected document server |
|---|---|---|
| PDF rendering | PDF.js; source pages stay local | document-svg plus verified demo rendering |
| PNG / JPEG / WebP | Browser image decoder | Server image decoder |
| TIFF | Depends on browser decoder; use PNG or a server if unsupported | Supported single-page images |
| DOCX / PPTX / XLSX | Text-focused, reflowed previews with layout warnings | Native conversion previews; review conversion warnings |
| AI | Your API key and a CORS-enabled Responses endpoint | OpenAI, Azure, compatible API or authenticated Codex App Server |
| Annotated PDF / PNG / JSON / CSV / Markdown | Yes | Yes |
| Native DOCX / PPTX exports; spreadsheet cell workflows | Connect a document API server | Supported in the relevant local workflows |
Browser Office previews do not preserve the original page layout. They make the content available for annotation and extraction. For native Office output or Codex, run the local version or enter an accessible Document server URL in Settings. GitHub Pages itself cannot start a CLI. A remote document server must allow the Pages origin through CORS; use HTTPS and authentication when exposing one remotely.
Use Node.js 22.13 or newer.
npm ci
npm run build
npm startOpen localhost:3001. The local default is Codex App Server / GPT-6 Astra, using your signed-in Codex CLI. Alternatively, configure an API provider in Settings. API keys are not stored in browser storage. For development, run npm run dev and open port 5173.
Build the static app with npm run build:pages; its output is dist-pages/, configured for /DocumentAnnotationAgent/. The Pages workflow tests the static build before publishing main.
The recorded three-page run returned 60 AI annotations plus one preserved manual note in about 124 seconds. Every AI label matched the seven supplied names. Two model findings remained uncertain. This demonstrates the workflow, not a benchmark of OCR accuracy: small lettering, mathematical glyphs and complex tables still need review.
npm test
npm run lint
npm run build
npm run build:pages
npm run test:static-pages
npm run test:browser-e2e
npm run test:agent-sse-browser-e2eDefault tests use fixtures and make no paid model calls. Live scripts require an explicit opt-in. Empty or interrupted responses show actionable errors; uploads and model calls are not silently replayed.


