Repository navigation
Releases
Cloudy Reader 0.0.3
Cloudy Reader reads National Science Bowl questions aloud on a Mac, using local text-to-speech voices.
This release adds the macOS voices and a new look, removes the Paste and Speak Clipboard buttons, and fixes how the choice letters W, X, Y, and Z are spoken.
Requirements
- An Apple Silicon Mac (arm64).
- macOS 26.2 or later. The bundled libraries set this floor.
- About 4.2 GB of free disk space: about 1.1 GB for the app and the rest for the voices and the engines.
- A network connection for the first launch. Daily use works offline.
Install
Use the disk image unless you prefer the zip. Both files hold the same app.
Install from the disk image (recommended)
-
Download
Cloudy-Reader-0.0.3-macos-arm64.dmg(about 432 MB) from Assets below. -
Check the SHA-256 in Terminal, from the folder that holds the file:
echo "568ca7bfff458814c180c575c5454e30e187d37a09dc9a638c5abebb5c0a1341 Cloudy-Reader-0.0.3-macos-arm64.dmg" | shasum -a 256 -c
The output must read
Cloudy-Reader-0.0.3-macos-arm64.dmg: OK. Any other output means a damaged download: download the file again. -
Open the disk image: double-click it in Finder.
-
Drag
Cloudy Readeronto theApplicationslink beside it. -
Eject the disk image.
-
Open the app for the first time as described below.
Install from the zip
-
Download
Cloudy-Reader-0.0.3-macos-arm64.zip(about 460 MB) from Assets below. -
Check the SHA-256 in Terminal, from the folder that holds the file:
echo "98f2b79d2875aa1eb46042c099b3d57bca33c95be1c433955ae43f4ed2a2321b Cloudy-Reader-0.0.3-macos-arm64.zip" | shasum -a 256 -c
The output must read
Cloudy-Reader-0.0.3-macos-arm64.zip: OK. Any other output means a damaged download: download the file again. -
Unzip the file: double-click it in Finder.
-
Move
Cloudy Reader.appto/Applicationsbefore you open it. -
Open the app for the first time as described below.
Open the app for the first time
The app is ad-hoc signed. An ad-hoc signature uses no Apple Developer ID, and the app is not notarized.
macOS flags a downloaded copy as quarantined. Gatekeeper blocks the first launch and says it cannot verify the app. The dialog wording differs between macOS versions.
To approve the blocked app:
- Open the app once, then close the warning dialog.
- Open System Settings > Privacy & Security.
- Scroll to Security. Find the message about Cloudy Reader.
- Click Open Anyway. Confirm with your password or Touch ID.
- Open the app again and click Open.
Approve only an app that you built or that comes from a source you trust.
You can remove the quarantine flag in Terminal instead. This skips the Gatekeeper prompt, so use it only for an app you trust:
xattr -dr com.apple.quarantine "/Applications/Cloudy Reader.app"First launch
The disk image and the zip hold no voice files and no engine files. The app downloads them in the background at the first launch. The macOS voices need no download.
- Order: the Piper voices, then the Kokoro voices, then Chatterbox Turbo, then Qwen3-TTS.
- Disk check: before each engine, the app checks the free disk space and skips an engine that does not fit.
- Source: Hugging Face over HTTPS. The app checks every file against a pinned SHA-256 value.
- Progress: the status bar shows a label for each group, such as
Downloading Qwen3-TTS… 42% (829 MB of 2.0 GB), and a progress bar. - A group's voices appear in the menu when that group ends. Speak works as soon as a voice appears.
- A failed file is tried again at the next start. A retry in the same run resumes a partial file.
- With no network at the first launch, nothing downloads. Speak still works with a macOS voice, and the other voices download when you start the app again with a network.
--offlineskips the download and the name lookups:open -a "Cloudy Reader" --args --offline. Quit the app first.CLOUDYREADER_OFFLINE=1has the same effect.
What is in this release
Added
- macOS voices. The Voice menu has a new macOS section with the English voices installed on your Mac, without the novelty voices. They need no download.
- Start voice. The app picks a macOS voice by itself only when no other voice is installed.
- Letters on macOS voices. The macOS voices say the choice letters W, X, Y, and Z by name. Enhanced and Premium voices were not checked.
Changed
- New look. The window has a new look: more space around the controls, Voice and Rotation at the same width, and the buttons Repeat, Stop and Speak, with Speak as the default.
- Spoken script. The Spoken script sits under the question and is open by default. It fills as you add text, a moment after each change, and it needs no network.
- Voice menu. Every voice shows its name, accent and gender where known, its engine, and its quality, such as 8-bit or Enhanced. A Kokoro voice shows its published grade, such as
Grade A. - About panel. A new About panel opens from the app menu. It has no buttons; Escape or Command-W closes it.
- Status bar. The status bar draws its warning and error icons as lines. While the voices download, "No voice is installed." is information, not a warning.
- Build check. A release build now stops when the app would carry the home folder, user name, or build folder of the machine that built it.
Removed
- Paste and Speak Clipboard. The Paste and Speak Clipboard buttons are gone, with the Speak Clipboard command (Shift-Command-V). Command-V in the question box still pastes.
- Clipboard. The app no longer reads the clipboard by itself.
Fixed
- Choice letters. The choice letters W, X, Y, and Z are now said by name on Qwen3-TTS (Ryan, Aiden) and Chatterbox Turbo, not read as words like "way" or "see". Each letter plays a checked recording made with the same voice.
- Voices. Qwen3-TTS: Ryan and Aiden. Chatterbox Turbo: its built-in voice. The Piper and Kokoro voices said the letters correctly before and are unchanged.
Same as 0.0.2
- Downloads. The first launch downloads the same files as in 0.0.2: the Piper and Kokoro voice files and the Chatterbox Turbo and Qwen3-TTS engine files, about 3.05 GB in all.
- Manual. Read it at https://cloudyreader.com.
Known limits
- Apple Silicon only. There is no Intel build.
- The app is ad-hoc signed and not notarized. The disk image is not signed or notarized either. The first launch needs a one-time approval.
- The first launch downloads the voices and both engines.
- On a Mac with no English macOS voice, a failed first download leaves no voice, and Speak stays off.
- The next start tries the missing files again. See No voice is installed.
- Piper voice genders are a guess: nobody has checked the 5 voices by ear. Men only and Women only rotation uses them.
- A Kokoro voice wraps each line in about 0.4 s of near silence. Its pauses, except the one after a choice letter, run about 0.8 s longer than the inserted silence.
- On a Mac with less than 24 GiB of memory, one of Chatterbox Turbo and Qwen3-TTS stays loaded. Switching between them reloads the engine.
- One reading holds at most 8,000 characters with Chatterbox Turbo or Qwen3-TTS.
- An engine can fail to say a short part, such as a single hard word. The status bar then reads
<engine> could not say '<part>'; try another voice. - With Read answer line on, the answer letter can be mispronounced on Qwen3-TTS and Chatterbox Turbo, and Ryan can fail to read an answer that starts with a lone letter. The choice letters themselves are fine.
License
- Cloudy Reader is licensed under the Apache License 2.0.
- The app also bundles GPL components, such as
piper-ttsandjdk4py, plusphonemizer-forkin a build with Kokoro. - The original Chatterbox Turbo model by Resemble AI is MIT licensed, and the card of its mlx-community MLX conversion lists Apache-2.0. Qwen3-TTS is Apache-2.0, in an MLX build by mlx-community.
- The macOS voices come with macOS. Cloudy Reader neither downloads nor redistributes them.
- Distributing the app is subject to those licenses. This is not legal advice.
- Details: the License section of the README.
Cloudy Reader is an independent project. It is not affiliated with, endorsed by, or sponsored by the U.S. Department of Energy or the National Science Bowl.
Checksum
SHA-256 of Cloudy-Reader-0.0.3-macos-arm64.dmg:
SHA256 568ca7bfff458814c180c575c5454e30e187d37a09dc9a638c5abebb5c0a1341
SHA-256 of Cloudy-Reader-0.0.3-macos-arm64.zip:
SHA256 98f2b79d2875aa1eb46042c099b3d57bca33c95be1c433955ae43f4ed2a2321b
Cloudy Reader 0.0.2
Cloudy Reader reads National Science Bowl questions aloud on a Mac, using local text-to-speech voices.
This release adds two voice engines, a disk image installer, and pronunciation fixes.
Requirements
- An Apple Silicon Mac (arm64).
- macOS 26.2 or later. The bundled libraries set this floor.
- About 4.2 GB of free disk space: about 1.1 GB for the app and the rest for the voices and the engines.
- A network connection for the first launch. Daily use works offline.
Install
Use the disk image unless you prefer the zip. Both files hold the same app.
Install from the disk image (recommended)
-
Download
Cloudy-Reader-0.0.2-macos-arm64.dmg(about 431 MB) from Assets below. -
Check the SHA-256 in Terminal, from the folder that holds the file:
echo "1d0c56d65b631bfa681e4644a35ee43aed84187897763e618d93a4e6537b7de9 Cloudy-Reader-0.0.2-macos-arm64.dmg" | shasum -a 256 -c
The output must read
Cloudy-Reader-0.0.2-macos-arm64.dmg: OK. Any other output means a damaged download: download the file again. -
Open the disk image: double-click it in Finder.
-
Drag
Cloudy Readeronto theApplicationslink beside it. -
Eject the disk image.
-
Open the app for the first time as described below.
Install from the zip
-
Download
Cloudy-Reader-0.0.2-macos-arm64.zip(about 460 MB) from Assets below. -
Check the SHA-256 in Terminal, from the folder that holds the file:
echo "b36a1a8e5e38417569cb72f0c824e275b820ada164722ea92f35465ad62072fd Cloudy-Reader-0.0.2-macos-arm64.zip" | shasum -a 256 -c
The output must read
Cloudy-Reader-0.0.2-macos-arm64.zip: OK. Any other output means a damaged download: download the file again. -
Unzip the file: double-click it in Finder.
-
Move
Cloudy Reader.appto/Applicationsbefore you open it. -
Open the app for the first time as described below.
Open the app for the first time
The app is ad-hoc signed. An ad-hoc signature uses no Apple Developer ID, and the app is not notarized.
macOS flags a downloaded copy as quarantined. Gatekeeper blocks the first launch and says it cannot verify the app. The dialog wording differs between macOS versions.
To approve the blocked app:
- Open the app once, then close the warning dialog.
- Open System Settings > Privacy & Security.
- Scroll to Security. Find the message about Cloudy Reader.
- Click Open Anyway. Confirm with your password or Touch ID.
- Open the app again and click Open.
Approve only an app that you built or that comes from a source you trust.
You can remove the quarantine flag in Terminal instead. This skips the Gatekeeper prompt, so use it only for an app you trust:
xattr -dr com.apple.quarantine "/Applications/Cloudy Reader.app"First launch
The disk image and the zip hold no voices and no engines. The app downloads them in the background at the first launch.
- Order: the Piper voices, then the Kokoro voices, then Chatterbox Turbo, then Qwen3-TTS.
- Disk check: before each engine, the app checks the free disk space and skips an engine that does not fit.
- Source: Hugging Face over HTTPS. The app checks every file against a pinned SHA-256 value.
- Progress: the status bar shows a label for each group, such as
Downloading Qwen3-TTS… 20% (412 of 1,974 MB), and a progress bar. - A group's voices appear in the menu when that group ends. Speak works as soon as a voice appears.
- A failed file is tried again at the next start. A retry in the same run resumes a partial file.
- With no network at the first launch, nothing downloads and Speak stays off. Start the app again with a network.
--offlineskips the download and the name lookups:open -a "Cloudy Reader" --args --offline. Quit the app first.CLOUDYREADER_OFFLINE=1has the same effect.
What is in this release
- Disk image. The release adds a disk image beside the zip. Open it and drag Cloudy Reader onto the Applications link.
- Checksum files. Each installer has a
.sha256file in Assets with the same value as the Checksum section below. - Two voice engines. Chatterbox Turbo adds one built-in voice. Qwen3-TTS adds two voices, Aiden (male) and Ryan (male).
- Engine behavior. Both engines run on your Mac, and neither clones a voice. The same text with the same voice sounds the same each time.
- Voice order. The menu lists Kokoro, Chatterbox Turbo, Qwen3-TTS, then Piper. Chatterbox Turbo and Qwen3-TTS have no grade, so their voices sort by name.
- Window look. The question sits in a card, and the spoken script sits in its own panel. Only one progress bar shows at a time, and VoiceOver announces warnings and
Voices downloaded.as well as errors. - Dimmed voices. A voice that cannot run yet shows dimmed, with its reason in the row, such as
not downloaded yetoroffline: not downloaded. - Skipped engines. A skipped engine shows
<engine> not downloaded: <reason>in an empty status bar, such asnot enough disk space: needs 3.3 GB, 1.1 GB free. - First use. The first reading with an engine shows
Preparing… loading Chatterbox Turbo (first use only). - Saved voice. A saved voice that is not ready at start gives way to another voice. A note in the status bar says so.
- Rotation. Chatterbox Turbo has no gender label and never rotates. US only adds Aiden, and Men only adds Aiden and Ryan.
- Offline guard. An engine loads only files on your Mac and never contacts the network itself.
- Pinned engine files. Each engine file has a commit-pinned address and a SHA-256 value. The app checks the SHA-256 again before the first load and refuses pickle files.
- No IPA. Chatterbox Turbo and Qwen3-TTS take no IPA. They say a respelled word from its respelling, and a lexicon word or a checked chemical name as printed. The warning counts both as hard words.
- Ranges. A tight en dash between two ascending numbers reads as "to":
5–10 gramsis "5 to 10 grams". A hyphen or a spaced dash reads as "to" only before a unit, a percent sign, or a noun such aspages. - Comparisons.
x<3reads as "x is less than 3", andx>=3reads as "x is greater than or equal to 3". - Function names.
sin θreads as "sine theta", and40sin(30°)reads as "40 sine(30 degrees)". The word table also coverscos,tan,ln, and more. - Logarithms.
log3 10reads as "log base 3 of 10". A number glued tologwith no argument stays whole, solog100 = 2reads as "log 100 equals 2". - Units after "a" or "an". The unit is singular:
a 2 kg cartreads as "a 2 kilogram cart". - Say-as guides. A say-as guide after an expression that starts with a function name covers the whole expression.
- Manual. Read it at https://cloudyreader.com.
Known limits
- Apple Silicon only. There is no Intel build.
- The app is ad-hoc signed and not notarized. The disk image is not signed or notarized either. The first launch needs a one-time approval.
- The first launch downloads the voices and both engines.
- On a fresh install, a failed first download shows no warning, because the status bar already holds "No voice is installed." The next start tries the missing files again. See No voice is installed.
- Piper voice genders are a guess: nobody has checked the 5 voices by ear. Men only and Women only rotation uses them.
- A Kokoro voice wraps each line in about 0.4 s of near silence. Its pauses, except the one after a choice letter, run about 0.8 s longer than the inserted silence.
- On a Mac with less than 24 GiB of memory, one of Chatterbox Turbo and Qwen3-TTS stays loaded. Switching between them reloads the engine.
- One reading holds at most 8,000 characters with Chatterbox Turbo or Qwen3-TTS.
- An engine can fail to say a short part, such as a choice letter. The status bar then reads
<engine> could not say '<part>'; try another voice.
License
- Cloudy Reader is licensed under the Apache License 2.0.
- The app also bundles GPL components, such as
piper-ttsandjdk4py, plusphonemizer-forkin a build with Kokoro. - The original Chatterbox Turbo model by Resemble AI is MIT licensed, and the card of its mlx-community MLX conversion lists Apache-2.0. Qwen3-TTS is Apache-2.0, in an MLX build by mlx-community.
- Distributing the app is subject to those licenses. This is not legal advice.
- Details: the License section of the README.
Cloudy Reader is an independent project. It is not affiliated with, endorsed by, or sponsored by the U.S. Department of Energy or the National Science Bowl.
Checksum
SHA-256 of Cloudy-Reader-0.0.2-macos-arm64.dmg:
SHA256 1d0c56d65b631bfa681e4644a35ee43aed84187897763e618d93a4e6537b7de9
SHA-256 of Cloudy-Reader-0.0.2-macos-arm64.zip:
SHA256 b36a1a8e5e38417569cb72f0c824e275b820ada164722ea92f35465ad62072fd
Cloudy Reader 0.0.1
Cloudy Reader reads National Science Bowl questions aloud on a Mac, using local text-to-speech voices.
This is the first public release.
Requirements
- An Apple Silicon Mac (arm64).
- macOS 26.2 or later. The bundled libraries set this floor.
- About 1.8 GB of free disk space: about 1.1 GB for the app and 0.66 GB for the voices.
- A network connection for the first launch. Daily use works offline.
Install
-
Download
Cloudy-Reader-0.0.1-macos-arm64.zip(about 459 MB) from Assets below. -
Check the SHA-256 in Terminal, from the folder that holds the zip:
echo "cf363ff419296e00b1d4406a7d846329f4712e0ac86bd9c022e8c1c70fd8ce6d Cloudy-Reader-0.0.1-macos-arm64.zip" | shasum -a 256 -c
The output must read
Cloudy-Reader-0.0.1-macos-arm64.zip: OK. Any other output means a damaged download: download the zip again. -
Unzip the file: double-click it in Finder.
-
Move
Cloudy Reader.appto/Applicationsbefore you open it. -
Open the app for the first time as described below.
Open the app for the first time
The app is ad-hoc signed. An ad-hoc signature uses no Apple Developer ID, and the app is not notarized.
macOS flags a downloaded copy as quarantined. Gatekeeper blocks the first launch and says it cannot verify the app. The dialog wording differs between macOS versions.
To approve the blocked app:
- Open the app once, then close the warning dialog.
- Open System Settings > Privacy & Security.
- Scroll to Security. Find the message about Cloudy Reader.
- Click Open Anyway. Confirm with your password or Touch ID.
- Open the app again and click Open.
Approve only an app that you built or that comes from a source you trust.
You can remove the quarantine flag in Terminal instead. This skips the Gatekeeper prompt, so use it only for an app you trust:
xattr -dr com.apple.quarantine "/Applications/Cloudy Reader.app"First launch
The zip holds no voices. The app downloads them in the background at the first launch.
- Order: the 5 Piper voices first (10 files, about 316 MB), then Kokoro (30 files, about 342 MB).
- Size: 40 files, about 0.66 GB in all.
- Source: Hugging Face over HTTPS. The app checks every file against a pinned SHA-256 value.
- Progress: the status bar shows "Downloading voices… N%" and a progress bar.
- Speak works as soon as the first voice is installed.
- A failed file is tried again at the next start.
--offlineskips the download and the name lookups:open -a "Cloudy Reader" --args --offline. Quit the app first.CLOUDYREADER_OFFLINE=1has the same effect.
Start with no network
- The Voice menu is dimmed and shows "No voice installed".
- The status bar shows "No voice is installed."
- Speak stays off until a voice is installed.
- Start the app again with a network to download the voices.
What is in this release
- Voice rotation. Six modes: No rotation, Round robin, Random shuffle, US only (random shuffle), Men only, and Women only.
- 33 voices. 5 Piper voices and 28 Kokoro voices, in US and UK English.
- Voice order. The list shows the best voices first inside each engine, Kokoro before Piper. A new install starts on the best installed voice.
- Choice pause. The app inserts 300 ms of exact silence after each choice letter (W, X, Y, Z). It cuts a voice's own silence there, so the pause lasts about 0.3 to 0.4 s. It inserts 700 ms after the stem when choices follow.
- Built-in lexicon. Hard science words have a pronunciation entry.
- Formulas. Formulas are spelled as letters and number words.
- Fractions. Fractions, mixed numbers, and glyphs such as ½ read as words. 1/7 is "one seventh", and 2½ is "two and one half". They work in the stem, the choices, the answer line, and say-as guide words.
- Splits. A split of 100 into multiples of 5 reads as a pair: 50/50 is "fifty-fifty", and 60/40 is "sixty-forty".
- Not a fraction. A slash in m/s, √10/5, 1.5/2, or 3/9/2024 is not read as a fraction.
- Name check. OPSIN checks systematic chemical names on your Mac. It works offline.
- Name lookups. PubChem and UniProt lookups are on by default. Their answers do not change the sound. The Online lookups checkbox,
--offline, orCLOUDYREADER_OFFLINE=1turns them off. - Manual. Read it at https://cloudyreader.com.
Known limits
- Apple Silicon only. There is no Intel build.
- The app is ad-hoc signed and not notarized. The first launch needs a one-time approval.
- The first launch downloads about 0.66 GB of voices.
- Piper voice genders are a guess: nobody has checked the 5 voices by ear. Men only and Women only rotation uses them.
- A Kokoro voice wraps each line in about 0.4 s of near silence. Its pauses, except the one after a choice letter, run about 0.8 s longer than the inserted silence.
License
- Cloudy Reader is licensed under the Apache License 2.0.
- The app also bundles GPL components, such as
piper-ttsandjdk4py, plusphonemizer-forkin a build with Kokoro. - Distributing the app is subject to those licenses. This is not legal advice.
- Details: the License section of the README.
Cloudy Reader is an independent project. It is not affiliated with, endorsed by, or sponsored by the U.S. Department of Energy or the National Science Bowl.
Checksum
SHA-256 of Cloudy-Reader-0.0.1-macos-arm64.zip:
SHA256 cf363ff419296e00b1d4406a7d846329f4712e0ac86bd9c022e8c1c70fd8ce6d