| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| archive | < 4 hours ago | ||
| README.md | < 4 hours ago | 14.9 kB | |
| mova_10.0.56-0_amd64.deb | < 4 hours ago | 10.8 MB | |
| mova-dbgsym_10.0.56-0_amd64.deb | < 4 hours ago | 860.1 kB | |
| mova_10.0.56-0_amd64.changes | < 4 hours ago | 2.2 kB | |
| mova_10.0.56-0_amd64.buildinfo | < 4 hours ago | 8.7 kB | |
| mova_10.0.56-0_arm64.buildinfo | < 4 hours ago | 9.0 kB | |
| mova_10.0.56-0_arm64.changes | < 4 hours ago | 2.2 kB | |
| mova_10.0.56-0.dsc | < 4 hours ago | 1.2 kB | |
| mova_10.0.56-0.tar.gz | < 4 hours ago | 10.6 MB | |
| mova_10.0.56-0_arm64.deb | < 4 hours ago | 9.8 MB | |
| mova-dbgsym_10.0.56-0_arm64.deb | < 4 hours ago | 1.1 MB | |
| Totals: 12 Items | 33.1 MB | 0 |
Mova — Multilingual PDF Reader with Text-to-Speech
Mova is a desktop PDF reader written in Rust. It combines PDF viewing, multilingual text-to-speech, synchronized word highlighting, side-by-side PDF comparison, intuitive navigation, and automatic reading-progress restoration.
Project website: https://sourceforge.net/projects/mova/
This README documents features found in the supplied Rust source code. Check the SourceForge project for actual downloadable builds, licensing, and supported platforms. Speech and highlighting require extractable PDF text and functioning local dependencies.
Overview
Mova is designed for reading books, educational materials, documentation, and translated texts. Unlike a basic PDF viewer, Mova can speak the text while marking the corresponding words directly on the rendered page. It offers a book-like two-page layout, an enlarged single-page view, and an optional comparison view showing an original PDF next to a second PDF such as a translation.
Complete feature list
PDF viewing
- Open a local PDF through a native file chooser.
- Optionally open a PDF passed as the first command-line argument.
- Automatically reopen the last available PDF on startup.
- Display consecutive PDF pages side by side, like an open book.
- Switch to Single Page for a larger page view.
- Scroll horizontally and vertically when content exceeds the window.
- Navigate with Previous, Next, and direct page-number entry.
- Navigate by horizontal mouse gestures: swipe left for the next page and right for the previous page.
- Display page counts and current page or spread information.
- Render pages using PDFium, with a configured target width of 1200 pixels and maximum height of 1600 pixels.
Text-to-speech
- Read extractable text from PDF documents aloud.
- Select from 25 speech-language entries.
- Change speech speed using a slider ranging from 80 to 600 (shown in the interface as words per minute).
- Start and stop speech with dedicated controls.
- Click a word in the primary PDF to start reading at that position.
- Use Reset to clear a selected starting position.
- Read the current page or visible two-page spread.
- Enable Read to end of PDF for continuous narration through subsequent pages.
- Automatically update the visible page while reading through the document.
- Process speech in a background thread so the interface remains responsive.
- Reconstruct sentences across lines and page boundaries.
- Handle Unicode character positions, repeated words, common abbreviations, punctuation, and soft-hyphen fragments in the text-to-speech mapping.
Synchronized highlighting
Mova extracts the bounding boxes of individual words using pdftotext -bbox-layout. During playback, the speech engine emits word-position events, which Mova maps back to the PDF page.
- Spoken words appear with a translucent yellow highlight and orange outline.
- The current line is tracked during narration.
- The viewer scrolls to keep spoken text visible when necessary.
- Scrolling avoids recentering the page after every word.
- A chosen starting line can be indicated in blue before playback.
Note: These features depend on a usable text layer. Image-only scanned PDFs require external OCR; Mova does not implement OCR.
Supported speech languages
| Language | Code | Language | Code |
|---|---|---|---|
| Polish | pl |
English | en |
| German | de |
French | fr-fr |
| Spanish | es |
Italian | it |
| Portuguese | pt |
Dutch | nl |
| Czech | cs |
Slovak | sk |
| Ukrainian | uk |
Russian | ru |
| Romanian | ro |
Hungarian | hu |
| Turkish | tr |
Danish | da |
| Swedish | sv |
Norwegian | nb |
| Finnish | fi |
Greek | el |
| Japanese | ja |
Korean | ko |
| Chinese (Mandarin) | cmn |
Arabic | ar |
| Hindi | hi |
English is selected by default for a fresh configuration. Actual voice availability and pronunciation quality depend on the speech engine and system environment. Mova does not automatically detect document language or translate text.
Parallel PDF and translation comparison
Mova can display a second PDF beside the primary document. This is particularly useful for comparing a foreign-language book with an existing translated edition.
- Select Open PDF and load the primary document.
- Select Add translation and choose the second PDF.
- Read the primary document on the left and compare it with the second document on the right.
- Navigate both documents using the same page index.
- Select Close translation to return to normal viewing.
In comparison mode, navigation advances one page at a time and is restricted to the common available page range when both page counts are known. Speech and click-to-read operate only on the primary, left-hand PDF. The right-hand PDF is a visual reference.
This feature does not automatically translate text, synchronize different pagination schemes, or align paragraphs semantically. For best results, use documents with corresponding page structures.
Navigation and reading modes
| Mode | Pages displayed | Navigation step | Speech without “Read to end” |
|---|---|---|---|
| Two-page mode | Two consecutive pages | Two pages | Visible spread |
| Single Page | One large page | One page | Current page |
| Parallel comparison | Primary and comparison pages side by side | One page | Primary page only |
The page-number field accepts a target page number, with validation for invalid or out-of-range values. In two-page mode, Mova aligns the requested page with the beginning of its spread.
Horizontal mouse swipes turn pages. The gesture logic distinguishes intentional swipes from clicks and vertical movement. When pages change, Mova attempts to play a short, locally generated page-turn sound through paplay, aplay, or ffplay, whichever is available. The sound is optional.
Interface and accessibility-oriented design
Mova provides a light, paper-inspired interface with dark text, a restrained color palette, and an emphasis on document visibility.
- Readable interface: Larger text, larger controls, stronger contrast, and generous spacing; enabled by default.
- Compact interface: A denser alternative for users who prefer smaller controls.
- F2 shortcut: Switch between readable and compact styles.
- Auto-hiding toolbar: Controls appear near the top edge, while loading, or during interaction, and hide after a short delay.
- Responsive toolbar: Controls scale and wrap when the window is narrower.
- Word tracking: Highlighting and automatic scrolling support following the text while listening.
- Flexible layout: Choose one-page or two-page display according to reading preferences.
These features may help language learners and readers who prefer combined visual and audio reading. They do not constitute a claim of compliance with a particular accessibility standard.
Saved reading progress and preferences
Mova saves application state locally in JSON, including:
- Last opened PDF file.
- Reading position for each previously opened PDF.
- Previously selected comparison PDF path.
- Selected speech language and speed.
- Read to end of PDF setting.
- Single Page setting.
- Readable/compact interface preference.
- Window position and dimensions, when available.
Settings are saved periodically, approximately once per second, and during relevant actions and shutdown. When Mova starts without an explicit PDF argument, it attempts to reopen the last accessible document. If there is no document, it displays a welcome screen with an Open PDF button.
The progress file is stored in the operating system's configuration directory:
pdf-reader-mova/reading-progress.json
Background loading and local caches
Mova loads PDFs on background threads and displays progress indicators showing the number of pages loaded. Primary and comparison documents have separate loading states. Errors are shown in the application interface.
Rendered PDF pages are cached in a directory beside the original file:
<document-name>.mova-pages/
The cache stores rendered RGBA page data and a manifest. It is checked against the PDF's size, modification timestamp, page count, and rendering configuration. Outdated or incomplete page caches are regenerated.
Word coordinates are extracted using the external pdftotext -bbox-layout command and cached in a neighboring .bbox.html file. Mova checks that cached coordinates are valid and current before reusing them. Temporary files help avoid replacing valid data with incomplete extraction output.
Privacy and local files: The supplied source processes local files, saves local caches, and stores preferences locally. No cloud account, telemetry service, or remote document-upload feature is implemented in this source.
Getting started
- Visit the Mova SourceForge project and check the Files section for available releases.
- Follow any platform-specific installation instructions included with the release.
- Ensure that PDFium,
pdftotext, and the required speech/audio components are available for the build. - Launch Mova and select Open PDF.
- Choose the appropriate Lang and adjust Speed.
- Select Read, or click a word to start from that point.
- Enable Read to end of PDF for continuous narration.
- Switch to Single Page, navigate using buttons or gestures, or add a comparison PDF.
If the installed executable is named mova, the intended command-line usage is:
mova
mova "/path/to/document.pdf"
The executable name and available installation packages depend on the release.
Toolbar reference
| Control | Function |
|---|---|
| Open PDF | Open a primary PDF file. |
| Add translation | Open a second PDF alongside the primary one. |
| Close translation | Close the second PDF. |
| Previous / Next | Move between pages or spreads. |
| Page / Go | Jump directly to a page. |
| Read | Start spoken narration. |
| Stop | Stop narration. |
| Reset | Clear the selected speech starting word. |
| Single Page | Toggle one-page display. |
| Read to end of PDF | Continue speech to the end of the document. |
| Lang | Select the speech language. |
| Speed | Adjust the speech rate. |
| F2 | Toggle interface readability style. |
Technology and implementation
Mova is implemented in Rust and uses the following components in its supplied source:
| Component | Purpose |
|---|---|
eframe / egui |
Native desktop user interface and interaction. |
egui_extras |
Image loader integration. |
pdfium-render |
PDF loading and page rendering. |
pdftotext |
Extraction of text and word bounding boxes. |
roxmltree |
Parsing extracted layout markup. |
espeaker |
Speech synthesis and word callbacks. |
rodio (via espeaker) |
Audio playback. |
crossbeam-channel |
Communication between background threads and UI. |
serde / serde_json |
Saved preferences and progress. |
rfd |
Native PDF file chooser. |
dirs |
Configuration directory location. |
anyhow |
Error handling and diagnostic messages. |
Background PDF loading and speech playback use message channels. Session identifiers help ignore stale events after switching files or restarting playback. Atomic stop flags support interruption of narration. The source also includes tests for Unicode word positions, sentence boundaries, soft hyphens, mouse gestures, and click-to-read mapping.
Requirements
The supplied source does not specify a definitive supported operating-system list, minimum hardware specification, or published installer format. Check the project's release files for those details.
Required or relevant components include:
- A compatible PDFium runtime.
pdftotextwith-bbox-layoutsupport (commonly provided by Poppler utilities).- A working audio device and the speech synthesis environment required by
espeaker. - The desktop runtime and libraries required by the particular Mova build.
- Write access to the configuration directory and preferably the PDF directory for cache files.
- Optionally
paplay,aplay, orffplayfor page-turn audio effects.
Troubleshooting
PDF opens but cannot be read aloud: Confirm that the PDF has selectable/extractable text, that the speech engine is available, and that audio output works. Image-only scans require external OCR.
Text extraction fails: Ensure pdftotext is installed and available on the command path. Check file permissions and whether the PDF is readable.
Page rendering fails: Check that the PDF is valid and the required PDFium runtime is installed.
Word highlighting is inaccurate: Complex PDF layouts, unusual encodings, or incorrect text layers can interfere with word-coordinate extraction.
Translated pages do not match: Parallel mode uses matching page indices, not automatic translation or paragraph alignment. Choose corresponding editions.
No page-turn sound: Install a supported external audio player if you want the optional effect. Page navigation can still work silently.
Reading progress is missing: Check that the original PDF remains at its saved path and that Mova can write to its configuration directory.
Large cache files: Rendering long PDFs can create sizable local caches. The initial opening may take longer than subsequent openings.
Current limitations
The supplied source does not implement OCR, automatic PDF translation, automatic language detection, PDF editing, annotations, form filling, audio export, cloud synchronization, dedicated full-text search, or semantic alignment of translated documents. Do not assume these functions are available unless a later release explicitly adds them.
Who is Mova for?
Language learners can listen to a document while tracking its words and comparing it with a translated edition. Students and researchers can read long PDFs with optional spoken narration. Book readers can use the two-page layout and saved positions to continue where they left off. Readers who benefit from audio support can combine adjustable speech speed with visual word tracking. Translators and bilingual readers can inspect two existing PDF editions side by side.
Project information
Project name: Mova
Category: Desktop PDF reader / text-to-speech reading assistant
Implementation language: Rust
Project page: https://sourceforge.net/projects/mova/
Documentation basis: Supplied Rust application source (main.rs)
For current downloads, release notes, platform support, and license information, refer to the official SourceForge project page.