Skip to content

leavesofgrass/star

Repository files navigation

⭐ star — Speaking Terminal Access Reader

CI PyPI Python License: GPL-3.0-or-later

star is an accessible, GUI-first document reader and Markdown authoring tool with built-in text-to-speech. It opens PDFs, Word/EPUB/PowerPoint, web pages, spreadsheets, and more, reads them aloud, and highlights each word as it is spoken — with no cloud account and no internet required. You can also write in it: create documents from scratch, format Markdown, and dictate straight into the text.

star is built for students with print disabilities — people who work with dense, heavily formatted documents and need a reading tool that gets out of the way. The Qt GUI is the primary interface (it launches by default and is where development is focused), with a keyboard shortcut for every command; a full-featured, keyboard-driven curses terminal UI remains available with --tui for headless or text-only environments.

It draws design inspiration from Emacspeak, Kurzweil 1000, Natural Reader, and Central Access Reader.


🚀 Quick start

Install on any platform with Python 3.11+:

pipx install star-reader        # isolated app install (recommended)
# or:  pip install star-reader  # into the current environment

star grows on demand — it fetches optional features the first time you use them, so you don't need to pick extras up front. Want everything available offline right away? pipx install "star-reader[all]".

Run it:

star                 # launch the Qt GUI (the primary interface)
star document.pdf    # open a document
star --tui           # force the terminal UI (headless / text-only)

Your first 60 seconds (in the GUI):

  • Press Ctrl+O to open a document — or just read the welcome page it opens on.
  • Press Space to hear it read aloud, with each word highlighted as it's spoken.
  • Put the caret on a word and press Ctrl+D for an offline definition.
  • Press Ctrl+N to start writing your own document; Ctrl+E toggles edit mode.

Where next:

Optional features

star runs out of the box on nothing but the Python standard library, and grows on demand — no pip install step anywhere. Whenever you reach for a feature that needs an add-on (OCR, offline dictionary, summarize, translate, knowledge-graph extras, dictation, …), star offers to download it in the background and the feature then works in the same session — no restart. On first launch the GUI also shows a short optional-features chooser: pick the Thin or All preset, or tick exactly the capabilities you want. Re-open it any time from Tools → Install Optional Features…. "All" now means literally everything (including the large speech-to-text and named-entity packs); the download size is shown upfront.

Prefer the command line? star --deps shows what's installed, star --install-optional fetches features, star --plugins list lists the pluggable backends/formats/exporters, and star --check-update checks PyPI.

Prefer the command line or a scripted setup? star --install-optional installs the all preset; star --install-optional thin or star --install-optional ocr,dictionary install a preset or a comma-separated list of features; run it with no value to list every feature with its size. star --plugins list and star --check-update round out the CLI. Advanced users can still install extras the classic way — pip install "star-reader[all]", or groups like star-reader[translate,vocab] — but the normal path is one click, in-app.

Full instructions (wheel, single-file star.pyz, native engines, per-platform notes) are in the Installation guide.


✨ Highlights

  • Reads aloud with live word highlighting in both the Qt GUI and the terminal TUI — including in-process eSpeak-NG with true audio-position sync.
  • Many TTS engines + Voice Manager: pyttsx3 (SAPI5 / NSSpeechSynthesizer), macOS say, eSpeak-NG, Festival, Piper (neural, offline, free), Coqui, DECtalk, and opt-in ElevenLabs cloud neural voices (text leaves your machine only after you set a key and choose the cloud voice; any failure falls back to a local engine) — browse, filter, preview, and favorite voices in the Voice Manager (F4), with one-click download of offline Piper neural voices.
  • Opens almost anything: PDF (incl. OCR), DOCX, PPTX, EPUB, HTML, Markdown, spreadsheets, DAISY/DTBook, and dozens more formats.
  • Write, don't just read: create a document from scratch (File ▸ New, Ctrl+N), format Markdown from an edit-mode toolbar and a Format menu (Bold Ctrl+B, Italic Ctrl+I, Underline Ctrl+U, headings, lists, quotes, links Ctrl+K, inline code, rules) with full Undo/Redo, and dictate straight into the text with Voice Typing (Tools ▸ Voice Typing, Ctrl+Alt+K).
  • Find, bookmark, and search: incremental find in document (Ctrl+F), named bookmarks (Ctrl+M) with back/forward history (Alt+←/→), and full-text search inside every document in your library.
  • Study & spaced repetition: turn highlights and notes into a review deck (FSRS scheduler), review due cards in-app (Study ▸ Review Due Cards…, Ctrl+Shift+F5), auto-generate cloze cards, and optionally two-way sync with Anki.
  • Study tools: notes & annotations, a citation manager, summarization, Anki flashcard export, document translation (15 languages, no API key), RSS/Atom feed reading, and a difficult-word overlay.
  • Richer documents: inline LaTeX math rendered as readable Unicode, accessible tables that keep their header structure, clickable footnotes (with a ↩ backlink), and image captions / alt text.
  • Knowledge graph: link annotations across documents with typed relations (CONFLICTS_WITH, SUPPORTS, CITES, …), extract concepts, view the graph interactively, and export to SVG/PlantUML/DOT/JSON.
  • Export: Markdown, HTML, EPUB, PDF (with highlights), BRF braille, TTS audio (WAV/MP3/OGG/MP4), chaptered M4B audiobooks (chapters from headings; needs ffmpeg), karaoke video (MP4), Anki decks, and synchronized SRT/VTT subtitles.
  • Extensible: TTS engines, document formats, and export targets are discovered through importlib.metadata entry-points — installing a third-party plugin package adds backends, loaders, or exporters with no changes to star itself.
  • Accessibility-first: NVDA/JAWS/Orca/VoiceOver compatible, screen-reader announcements for playback / load / theme / find results, a high-contrast (AAA) theme with automatic light / dark / high-contrast following your OS, a Reading Font chooser (OpenDyslexic, Atkinson Hyperlegible, Lexend — auto-fetched and applied across the whole UI), syllable splitting (display-only decoding aid), a caret-tracking reading ruler, four colorblind-friendly themes + custom CSS themes, bionic reading, adjustable spacing (WCAG 1.4.12), and high-DPI support.
  • Guided tour & translations: a skippable first-run walkthrough (replay any time from Help ▸ Guided Tour, Shift+F1), Help ▸ Check for Updates, and a translated interface — terminal UI included — in Spanish, French, German, and Portuguese, with a first-run language picker in the Qt GUI (the TUI honors the ui_language setting). Right-to-left interface languages mirror the whole app — Arabic is included as a first catalog.
  • Fast on huge documents: opt-in pagination renders only a window of a very large document at a time, dropping first paint on a ~500-page file from seconds to well under one (off by default).
  • Sync without losing work: reading progress and annotations from two machines now merge instead of last-write-wins — position resolves by a policy you pick (newest / furthest / manual) and notes union by id.
  • Graceful degradation: every third-party dependency is optional and guarded, so the core runs on the Python standard library alone.
  • One-click optional features: when a capability needs an add-on, star downloads it in the background — no pip install step anywhere — and it works right away (only the large speech-to-text pack needs a restart). Driven by a first-run chooser or star --install-optional.
  • One tabbed Preferences dialog: every reader setting — Reading, Reading Aids, Voice, Display, Fonts, General — in Edit ▸ Preferences… (Ctrl+,), with Apply and Restore Defaults.
  • Clear, consistent UI: an all-icon toolbar with descriptive tooltips (vector glyphs drawn programmatically and tinted to your theme — no image files); a readable welcome page that reads aloud like any document; and F1 opens the bundled README as a document on every install.

See the full feature reference for everything.


📚 Documentation

Guide What's in it
Examples Runnable, task-focused examples (CLI text extraction, the Python library, read-aloud & authoring walkthroughs) with a catalog mapping every area
Installation PyPI / wheel / zipapp install, optional packages, native engines, platform notes
Usage Guide Running star, the quick command reference, full keyboard map, M-x commands, CLI options
Features The complete feature reference
Knowledge Graph Typed relations between annotations, concept extraction, graph view, and export
Configuration Every settings.json key
Architecture & Contributing Package layout, distribution artifacts, contributing, tests
Changelog Full record of changes
Build guide Building the cross-platform wheel and the self-contained Windows star.exe / macOS .app

➡️ Browse all docs in the docs/ directory.


📦 Distribution

The pure-Python wheel (pip install star-reader) is star's primary, stable distribution; it works on macOS, Linux, and Windows alike. For anyone who can't install Python, every GitHub Release also attaches double-click binaries for all three desktops — a self-contained Windows star-<version>-windows-x64.exe (Python, the GUI, and all loaders baked in; DECtalk excluded from the public exe), a macOS star-<version>-macos-arm64.dmg (Apple-Silicon; uses the built-in Apple voices), and a Linux AppImage. A single-file star.pyz zipapp is build-it-yourself. See Installation and BUILD.md.


🤝 Contributing

Contributions are welcome — please open an issue before a PR for anything beyond small fixes. Keep every third-party dependency optional and guarded, target Python 3.11, and document new keybindings and M-x commands. See Architecture & Contributing for the full guidelines and how to run the test suite.


📜 License

star — Speaking Terminal Access Reader Copyright 2026 Jon Pielaet

Free software under the GNU General Public License version 3 or later. This program is distributed in the hope that it will be useful, but without any warranty. See the LICENSE file, or run M-x license in the app, for the full text.

About

A keyboard-driven text-to-speech reading application designed for students with print disabilities.

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors