3dspeex: a talking 3D printer
My 3D printer, a Sovol SV08, has a little screen and a knob. You turn the knob to move through menus on the screen, and you click it to pick things. Without being able to see the screen, I was left counting clicks, and there was no way I was going to memorize how many turns it takes to reach "cancel print" when something goes wrong.
So I made the printer talk. 3dspeex is a screen reader for the printer's own display. It reads the menu aloud as you turn the knob, reads the status screen, and tells you what the printer is up to: heating, print progress, finished prints, and errors. It runs on the printer itself and talks through a USB speaker or headset plugged into it.
It's new, and I'd love to hear from you, whether you try it on your own printer, find something it reads wrong, or just have an idea. Send me a note.
What it sounds like⌗
Turn the knob in a menu and it says where you are. Entering a menu names it, and turning within it names just the item:
"Prepare: Back" … "Move Z" … "Speed: 100%, editing" … "Speed: 105%, done"
With the menu closed, turning the knob steps through the status screen one item at a time, most interesting first: what the printer is doing, progress, print time, then temperatures, fan and speed. Turn back past the first item and it reads the whole screen at once:
"nozzle 25° fan 0%. bed 24° speed 100%. 0% 00:00. Ready"
The knob always interrupts, like a screen reader. Everything else waits its turn, so a "print complete" doesn't get cut off by a temperature update.
The tiny screen is full of abbreviations that make no sense out loud, so 3dspeex rewords them for speech without changing what's on the screen. Ex0:220 ( 215) becomes "nozzle target 220, now 215°", and Load Fil. fast becomes "Load filament fast". It also catches the stuff espeak-ng would otherwise mangle, like reading "Offset Z:0.125" as "Offset Z colon…" or "+.01" as "plus dot zero one".
On its own, without the knob, it announces:
- messages the printer puts on the screen
- print started, paused, resumed, complete, cancelled, or failed
- print progress, every 10% by default
- heaters getting a new target, and reaching it
- errors and shutdown reasons
Settings from the knob⌗
At the end of the main menu there's a Screen reader menu. It sets the speech rate and volume, how often print progress is spoken (off, or every 1, 5, 10 or 25 percent), and whether to read the chatty info lines printed during calibration. Each change takes effect as you turn, so you hear the new rate saying its own value. Settings are saved, and changing them never restarts Klipper, so you can turn the volume up in the middle of a print.
If you list a few espeak-ng voices in the config, the menu gets a Voice item too, and each voice introduces itself as you turn past it.
How it works⌗
The SV08 runs Klipper, open-source printer firmware written mostly in Python. Klipper loads extra modules from a folder, and 3dspeex is one of them. It sits inside Klipper, sees everything the display sees, and hands the text to a small helper program that speaks it with espeak-ng. If you'd rather use a different speech engine, you can swap out the helper.
There's also kcon, a line-based console for sending G-code to Klipper and reading the replies. It's handy over SSH with a screen reader.
Trying it⌗
You'll need a Klipper printer with a screen and a knob, and a USB speaker or headset. Everything is installed on the printer itself, so first log in to it over SSH as the user Klipper runs as. On the SV08 that's sovol:
ssh sovol@your-printers-address
git clone https://github.com/daiverd/3dspeex.git ~/3dspeex
cd ~/3dspeex
./install.sh
Plug in your USB speaker or headset before you run the installer. Most printer boards have onboard or HDMI audio that would otherwise get the speech, so when the installer finds a USB sound card, it makes that the printer's sound output. It sets everything else up too, and restarts Klipper, but only once it has checked that no print is running. The README covers the voice, speed and volume settings, updating, and troubleshooting.
Some caveats:
- I built it on my SV08. Other Klipper printers with a screen and knob should work, but nobody has tested them yet. This is a community effort, so if you have one, please reach out.
- Touchscreen-only printers aren't supported yet.
3dspeex is free software under the GPLv3, the same license as Klipper. It's on GitHub at daiverd/3dspeex.
If you try it, tell me how it went, especially on a printer other than the SV08. Bug reports, wishes, and "it worked!" are all welcome through my contact page.