deephaven-plugin-speed-reader
A deephaven.ui element that reads text to you one word at a time — rapid serial visual presentation (RSVP), the technique behind Spritz-style readers.
Because the words appear in a fixed position, your eyes never move between them. The highlighted pivot letter marks the optimal recognition point, the spot the eye naturally focuses on, and it stays put no matter how long the word is.
Install
pip install deephaven-plugin-speed-reader
Restart the Deephaven server so it picks up the plugin.
Usage
speed_reader takes a string and returns an element. There is no hook to call and nothing to
mount.
from deephaven import ui
from deephaven_plugin_speed_reader import speed_reader
@ui.component
def my_panel():
return speed_reader("The quick brown fox jumps over the lazy dog", default_wpm=400)
my_reader = my_panel()
Options
text is the single positional argument; everything else is optional.
| Option | Type | Default | Notes |
|---|---|---|---|
text |
str |
— | The text to read out, split on whitespace. |
wpm |
int |
unset | Words per minute, for controlled use. When set, this wins over the slider. |
default_wpm |
int |
300 |
Starting words per minute, for uncontrolled use. |
on_wpm_change |
Callable[[int]] |
— | Called with the new value whenever the speed control is adjusted. |
auto_start |
bool |
True |
Begin reading as soon as the component renders. |
loop |
bool |
False |
Restart from the first word after the last. |
show_controls |
bool |
True |
Show the play/pause, restart and speed controls. |
on_complete |
Callable[[]] |
— | Called when the last word has been shown; with loop, once per pass. |
Speed is clamped to 60–1200 wpm.
Controlled vs uncontrolled speed
Follows the same convention as other deephaven.ui inputs.
Uncontrolled — the component owns the speed. Simplest, and the slider works on its own:
speed_reader(passage, default_wpm=350)
Controlled — Python owns the speed, so anything can drive it. Pass wpm and update it from
on_wpm_change, or the slider will appear stuck:
@ui.component
def my_panel():
wpm, set_wpm = ui.use_state(300)
return ui.flex(
speed_reader(passage, wpm=wpm, on_wpm_change=set_wpm),
ui.button("Speed read", on_press=lambda _e: set_wpm(800)),
direction="column",
)
Reading text from a table
speed_reader takes a plain string, so any source works — including a table cell:
@ui.component
def article_reader():
body, set_body = ui.use_state("Click a row to start reading.")
return ui.flex(
ui.table(articles, on_row_press=lambda row: set_body(row["Body"]["value"])),
speed_reader(body, default_wpm=400),
)
New text resets the reader to the first word.
See examples/ for complete, runnable panels.
Contributing
See AGENTS.md for the dev loop, project layout, and how to build, test, and lint.
License
Apache-2.0
Metadata
Release files for deephaven-plugin-speed-reader 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| deephaven_plugin_speed_reader-0.1.0.tar.gz | 17.0 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| deephaven_plugin_speed_reader-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.7 kB
Release files / deephaven_plugin_speed_reader-0.1.0.tar.gz
| Download URL | deephaven_plugin_speed_reader-0.1.0.tar.gz |
|---|---|
| Size | 17.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b9467d39481f5a9ed25d229118c372d674b696c82a16c501d7af1b25b633efd
|
|
BLAKE2b-256 checksum How to use checksums |
19885544de0d170b34eb8ba5819256ae4c9901f6cc7dcaab6c5f55240dce41e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logRelease files / deephaven_plugin_speed_reader-0.1.0-py3-none-any.whl
| Download URL | deephaven_plugin_speed_reader-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1051f79b945600c58ab21b9f9bc9fc558b39d0306c61eacdccea7750a3cd13d6
|
|
BLAKE2b-256 checksum How to use checksums |
0445ff0d838b1879efa9f0baebda70605eaeb65aeb62e8368ff21d68c584ccda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logSecurity for deephaven-plugin-speed-reader 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for deephaven_plugin_speed_reader-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.