← Back to GhostBundle

👻 Ghost Reader

Feature guide – search below to find what you need
🔍
⚙️ Toggle
Disable Clipboard
Turns clipboard monitoring on/off. When disabled, the app ignores new clipboard content.
⚙️ Toggle
Queue Articles
When enabled, new clipboard text is appended to the end of the current speech queue without interrupting the current reading.
⚙️ Toggle
Skip Duplicates
Prevents the same clipboard text from being read again if it hasn't changed.
⚙️ Toggle
Auto-start with Windows
Adds the app to Windows startup so it launches automatically when you log in.
⚙️ Toggle
Random Greeting
Speaks a random welcome message from greetings.txt when the app starts.
⚙️ Toggle
Random Goodbye
Speaks a random farewell from goodbyes.txt when you close the app. Default goodbyes include a 💋 which is spoken as "kiss".
🔗 URL
Silence URLs
Master switch under Options → URL Handling. When ticked, all URLs and bare domains — including ones wrapped in [square brackets] like [thestar.com.my] — are stripped from the text before speaking. The three items below it become greyed out because there's nothing left to announce, prefix, or pronounce.

Handles both protocol URLs (http://, https://, www.) and bare domains (rttnews.com, thestar.com.my). Brackets and orphaned whitespace are cleaned up too.
🔗 URL
Announce Source
When ticked, a sentence-final domain like ... data centers [thestar.com.my]. is spoken as ... data centers. Source: thestar.com.my. — a short pause is inserted before the prefix so it doesn't run into the previous sentence.

Only fires on domains that end a sentence (followed by ., !, ?, or the end of the text). A URL on its own — the entire textbox being just a URL — is read plainly with no prefix, because there's no sentence for it to be a source of. Disabled when Silence URLs is ticked.
🔗 URL
Source Prefix…
Opens a small dialog where you choose the word or phrase used by Announce Source. Default is Source:. You can set it to anything — From:, Reported by:, Per:, Quelle:, 来源:, or a custom phrase.

Auto-colon rule: if what you type ends in a letter or number, a colon is added automatically. If you type your own punctuation (a colon, a dash, a full-width colon), it's preserved exactly as typed. An ⓘ icon next to the field shows example usage.

Disabled when Silence URLs is ticked.
🔗 URL
Force English Domain Pronunciation
Rewrites domains so a non-English voice (like Microsoft Vivienne, a French-native multilingual voice) pronounces them the English way:
  • thestar.com.my → thestar dot com dot my
  • rttnews.com → rttnews dot com
  • 192.168.1.1 is left alone — the pattern requires a letter-based TLD
Fixes the "ko'un" sound that French-native voices produce when they read .com naturally. Works on two-segment (.com, .org) and three-segment (.com.my, .co.uk) domains alike. Disabled when Silence URLs is ticked.
🎤 Speech
Voice Selection
Pick any installed SAPI voice from the dropdown. Supports both local and online voices (if registered).
⚠️ Online voices need internet. Cloud-backed voices like Microsoft Xiaoxiao Online or Microsoft Yunxi Online send the text to Microsoft's servers each time they speak, so they require an active connection. Local Desktop voices (David, Zira, Hazel) work fully offline, forever.
🎤 Speech
Speech Speed
Adjust the speaking rate with a slider – from very slow to very fast.
🎤 Speech
Speech Volume
Control the volume of the synthesizer (0–100).
▶️ Controls
Speak
Restarts reading from the top of the text box. The cursor automatically jumps to position 0 so you always begin at the start.
▶️ Controls
Read from Caret (or Selection)
Starts reading from wherever the text cursor is, instead of from the top. Behavior:
  • If text is selected — reads exactly the highlighted text.
  • If nothing is selected — snaps backward to the start of the sentence the caret is sitting in, then reads to the end.
Any stale pause/resume position is discarded when this button is pressed, so a subsequent Pause uses the new start point. If the box is empty or the caret is past the last non-whitespace character, nothing is spoken.
▶️ Controls
Stop
Immediately stops all speech and clears the queue. The "Last spoken" label is updated.
▶️ Controls
Pause / Resume
Toggles pause on the current speech without discarding the queue. If a saved position exists, clicking this button resumes from the last completed sentence.
▶️ Controls
Opacity Slider
Adjust the window transparency in real time, from 30% (very see‑through) to 100% (fully opaque). The value is saved to settings.txt and restored on next launch.
💾 Tools
Save to *.txt
Exports the current textbox content to a plain text file.
💾 Tools
Save to *.wav
Saves the spoken version of the text as a real WAV audio file using SAPI.
💾 Tools
Save to *.mp3
Exports the speech as a real MP3 file. Uses Windows Media Foundation (via NAudio) to encode at 128 kbps – no external encoder needed. While encoding, both save buttons are disabled and the active one shows a live "Encoding... 23s" counter. The window stays fully responsive — you can keep reading, pasting, or working in other apps.
💾 Tools
Clear Text
Empties the textbox and clears the speech queue.
💾 Tools
To Tray
Hides the main window and keeps the app running in the system tray.
🖥️ Tray
System Tray Menu
Right‑click the tray icon to:
  • Settings – restore the main window
  • Repeat speech – restarts reading from the top of the textbox
  • Pause / Resume – toggle speech pause
  • Stop – halt all speech
  • Clear text – empty the textbox and clear the queue
  • Disable / Enable Clipboard – same toggle as the Options menu; the label changes to reflect the current state
  • About – restores the window and opens the About dialog
  • Exit – close the app (with a random goodbye)
📋 Feedback
Reading: (current sentence)
A cyan strip just above "Last spoken" shows the sentence currently being read out loud. Updates instantly when SAPI moves on to the next sentence, and returns to "Reading: (idle)" when the queue is empty. Long sentences are truncated at 120 characters with an ellipsis.
📋 Feedback
Last Spoken Label
A yellow strip below the Reading indicator shows the most recent sentence that finished being spoken. Updated on natural completion, stop, or interruption.
📋 Feedback
Session Restore
On exit, the current text is saved to session.txt. On the next launch, after the greeting plays, a prompt appears with three radio-button options — all visible at once, no dropdown to open:
  • Restore Session (default) – loads the text, no speaking
  • Resume Speech – continues reading from the last completed sentence
  • Clear Session – starts fresh with an empty editor
Press Enter or click OK to confirm. Clicking the window's X (or pressing Esc) treats it as the default — Restore Session.
🛡️ Safety
Crash-safe Sanitization
The following characters are automatically rewritten before reaching the speech engine so they can't crash it: & → "and", < → "less than", > → "greater than", double quotes → single quotes, backslashes → spaces, and invisible control characters are stripped.
🛡️ Safety
Decimal Points Read Correctly
A period between two digits is spoken as the word "point" instead of being treated as a sentence break. So 4.9% is read "four point nine percent" with no awkward pause after "four", and version numbers like 2.5 or IP addresses like 192.168.1.1 also read cleanly.
🛡️ Safety
Emoji are Spoken, Not Silenced
Common emoji are automatically converted to spoken words so they never wedge the synthesizer. Examples: 💋 → "kiss", 🔥 → "fire", 👻 → "ghost", ❤️ → "heart", 😀 → "grinning". Emoji not in the dictionary are silently dropped. This prevents the "stuck synthesizer" bug where a single bad emoji silences all subsequent speech until the app is restarted.
🛡️ Safety
Single Instance
Only one copy of Ghost Reader can run at a time. If you double‑click the shortcut while it's already running (even hidden in the tray), the existing window pops to the front instead of launching a second copy.
🛡️ Safety
Safe Exit During Encoding
If you try to close the app while an MP3 or WAV export is running, a dialog offers to Wait for it to finish or Close anyway and abandon the export. No lost work by accident.
🌏 Language
Chinese Punctuation Support
The app correctly splits text on Chinese punctuation 。!? so long Chinese texts are read sentence by sentence.
🌏 Language
Multilingual Voices
Works with Microsoft's multilingual neural voices (like Microsoft Vivienne Multilingual Online). These voices auto-detect language and can slip into their native accent on short or ambiguous tokens — particularly bare domains. If a French-native voice mangles .com, turn on Force English Domain Pronunciation under URL Handling to correct just the domain parts while leaving the rest of the voice's accent intact.
⚙️ Advanced
Restore Defaults
In the Help menu, you can restore:
  • Default Borders – reset window layout and reposition all controls
  • Default Speech Settings – reset voice, speed, volume, opacity, and all URL Handling toggles
  • Random Greetings – restore the default greetings.txt
  • Random Goodbyes – restore the default goodbyes.txt
ℹ️ Info
About
Displays the app version, credits the original Ghost Reader by Adaeria, and includes a link to the Ghost Reader website where you can make a voluntary donation. Ghost Reader is free and always will be — the donation is purely a thank-you. Reachable from both the Help menu and the tray icon's ℹ️ About entry.
🔧 Hidden
The tlds.txt File
A plain-text list of known top-level domains (com, org, my, uk, and so on), one per line, sitting next to the exe. The app uses it to recognise what counts as a domain when applying URL Handling. If the file is missing, a small built-in list is used instead. You can replace it with the full IANA list at any time by saving tlds-alpha-by-domain.txt from data.iana.org as tlds.txt.
🔧 Hidden
Last Spoken Log
Every spoken sentence is appended to lastspoken.log – useful for debugging and tracking interruptions.
🔧 Hidden
Logs Folder
The Logs\ folder holds rotated crash logs (log1.log … log9.log), memory monitoring output (memory.log), single-instance events (single_instance.log), and unhandled/thread exception logs. If anything ever misbehaves, this is where to look.
🔧 Hidden
Borders Settings File
The borders.txt file next to the exe controls the exact pixel positions of every control on the form. Edit it to fine‑tune the layout, then restart.

The file carries a ; layout-version=2 marker in its header. If the file is missing, it is regenerated from the built‑in defaults. If it exists but was written by an older version of the app, it is backed up to borders.txt.v1.bak and regenerated automatically — so future layout changes never clash with an old file. Use Restore Default Borders to regenerate it fresh at any time.
🔧 Hidden
Settings File
The settings.txt file next to the exe stores every preference — voice, speed, volume, opacity, autostart, greeting toggles, and all four URL Handling settings (SilenceURLs, AnnounceSource, SourcePrefix, ForceEnglishDomains). Old versions of the app wrote a SkipURLs key; on first load it is migrated to SilenceURLs and never written again.
👻 Bundle
The Ghost Bundle Family
Ghost Reader is one of seven small utilities under the Ghost Bundle umbrella:
Seven utilities. One family. Each does one thing well and stays out of your way. 💚
✨ No features match your search.

💋 About Ghost Reader

Ghost! Clipboard Reader was born in October 2008, the brainchild of a developer named Adaeria – a quiet genius who knew exactly how to make words come alive. Her creation was lean, hungry, and utterly devoted to one thing: taking whatever you gave it and whispering it back to you with feeling. That original, v1.7 from August 2015, was a masterpiece of simplicity – always ready, always eager. This clone is our tribute to that beauty – same soul, but we've taught it to remember your voice, so it knows what you like without asking twice. We've given it a little transparency too – so you can watch while it works its magic. All credit to Adaeria for the original spark – we just added a little fire of our own. No affiliation – just two dreamers who wanted to keep the ghost breathing for another lifetime. 💋