How to build a Raspberry Pi powered teleprompter

There are many options for content creators when it comes to teleprompters, but the most affordable ones involve an app on your phone that can be clunky or additional hardware that might not work well with your camera setup. However, you can build your own Raspberry Pi powered teleprompter using some Python code, basic electronic components, and 3D printed parts.

What You Need: Raspberry Pi Teleprompter

Raspberry Pi Teleprompter software setup: install dependencies and scripts

The Python code requires some dependencies. You need to install two libraries: Tkinter and Pynput, as well as Adafruit’s Blinka layer.

1. Install Tkinter with the apt-get command in the terminal. Tkinter is a Python library for creating basic graphical user interfaces and is used here to create the teleprompter part of the project.

sudo apt-get install python-tk

2. Install Pynput with pip3. Pynput is a Python library for keyboard and mouse simulators. For this project it will be used to simulate the scrolling of the mouse for the text box created with Tkinter.

pip3 install pynput

3rd Install Blinka,, an Adafruit CircuitPython compatibility layer for single board computers running Linux. Blinka allows you to run CircuitPython libraries in addition to Python libraries. Basic setup involves just entering these three commands:

sudo pip3 install --upgrade adafruit-python-shell


sudo python3

If you have any problems, see Adafruits Blinka installation instructions.

4th Download all three .py files From my Github page and put it in your / home / pi directory.

Python scripts for Raspberry Pi teleprompter

The software for the teleprompter includes two Python scripts (which you downloaded above) and a bash script. The first python is the actual teleprompter app written with Tkinter. The code creates a scrollable text box that you can use to view your scripts. There is also a button on the side of the app. When you click on it, you can open text files to load into the text box. If you need to make changes to your script while it’s open in the app, you can type it right into the text box.

(Image credit: Toms Hardware)

The second Python script is used to control the teleprompter app with external digital inputs. In this program we use the Pynput library and Blinka to simulate mouse scrolling input and the buttons. It can be seen as a control interface for the Tkinter script.

When the toggle is on, Pynput will begin scrolling so your teleprompter can run. There are also two buttons available to increase or decrease the scrolling speed. Finally, an additional button is available to toggle between the Teleprompter app in full screen mode or in the window on the Pi.

We can use a bash script to run the two python scripts at the same time. The bash script is started from the terminal with “sudo ./”.

Wiring the Raspberry Pi Teleprompter

We use an Adafruit Perma-Proto HAT as an interface to the buttons for controlling the teleprompter on the Raspberry Pi. It’s a blank breadboard-style circuit board that allows you to easily solder circuitry for use with the Pi. It has broken out power, ground, and GPIO pins and labeled.

The Fritzing circuit diagram shows you how to wire up the three buttons and the slide switch. The two buttons on the top left of the Perma-Proto HAT control the speed of the teleprompter and the one button on the right switches between full screen and window mode.

(Image credit: Toms Hardware)

The switch controls whether the teleprompter is running or not. In addition, the HDMI decoder board can receive ground and 5V power from the Perma-Proto HAT. Otherwise it needs to be powered via USB.

3D printing of the Raspberry Pi Teleprompter

There are three 3D printed parts that you will need to create the teleprompter’s body. The .STL files can be downloaded from my GitHub page. The two larger parts snap together to form the main part of the teleprompter. One side has a tripod connection and a recess for a DSLR lens. The other side has brackets and cutouts for the reflective acrylic, the screen, and the Raspberry Pi.

It is important to print the part black or paint it afterwards. It needs to be dark so you can see the reflection of the screen in the acrylic.

The third 3D printed part is a circuit board bracket for the HDMI decoder board that is used with the 5 inch HDMI monitor that carries the video signal from the Raspberry Pi.

Assembling the Raspberry Pi Teleprompter

After you’ve 3D printed your parts, it’s time to put them together.

1. Attach two M2.5 standoffs with two M2.5 nuts in the front mounting holes of the front 3D printed part for the Raspberry Pi.

(Image credit: Toms Hardware)

2. Attach the PCB bracket for the HDMI decoder Circuit board with four M3 nuts and screws on the underside of the 3D printed part.

(Image credit: Toms Hardware)

3rd USe two M2.5 spacers to attach the Raspberry Pi to the assembled M2.5 spacers. The Pi mounts on the front of the teleprompter for easy access.

(Image credit: Toms Hardware)

4th Place the Perma-Proto HAT on the GPIO header of the Raspberry Pi and attach it to the M2.5 standoffs with two M2.5 screws.

(Image credit: Toms Hardware)

5. Insert the 5 “screen into the 3D printed part and careful Run its flexible plug through the floor of the case. Be careful as the plug is easily damaged. Then insert the connector into the slot on the HDMI decoder board.

(Image credit: Toms Hardware)

6th Mount the HDMI decoder board with 4 M3 screws on the 3D printed circuit board carrier.

(Image credit: Toms Hardware)

7th Run an HDMI cable between the Raspberry Pi and the HDMI decoder board. You can use any cable you want, but a modular ribbon cable can keep the structure compact. However, similar to the connection of the screen, they can be sensitive. So handle it carefully.

(Image credit: Toms Hardware)

And that completes the hardware assembly for the teleprompter!

8th. Cut out a piece of acrylic about 109mm by 127mm. To do this, use a safety knife or other cutting tool recommended for acrylic. Then slide the acrylic into the slots on the 3D printed part.

Display device of the Raspberry Pi teleprompter

The final step is to invert the Raspberry Pi’s display so that it is mirrored on the screen and properly reflected in the acrylic. To do this, edit the /boot/config.txt file a little. We’ll list the changes below, but you can see them in mine too Example file config.txt.

1. Open /boot/config.txt for editing.

sudo nano /boot/config.txt

2. Disable the FKMS graphics driver by placing a # sign (to comment out) in front of each line that contains dtoverlay = vc4-kms-v3d. Usually this is not recommended, but older graphics give you more control over how the display is flipped and inverted.

3rd Force a resolution of 800 x 480 by making sure the “Force a Specific HDMI Mode” section looks like you see it below. The resolution of the screen is also forced to 800×480 because the HDMI decoder has no scaling.

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_cvt 800 480 60 6 0 0 0

4th Add the line display_rotate = 0x20000. added at the end of the config.txt to reverse the display.


5. Save and restart your Pi. New.

After rebooting, your Pi’s display will be mirrored but displayed correctly in the acrylic so it can be a teleprompter.

Using the Raspberry Pi Teleprompter

There are a few different workflows you can use with your Raspberry Pi teleprompter. You can use VNC or SSH to remotely access the Pi to load your video scripts and run your code, or you can still use a wireless keyboard and mouse to use the teleprompter’s display as a monitor for the Pi.

If you go further, you can have the bash script run on every startup (see how to run a script on Raspberry Pi boot). However you want to use it, you have a compact and open source teleprompter option that you can use during your videos or presentations.

About Willie Ash

Check Also

Don’t commit yourself! Here are solid alternatives for Apple’s weaker software

One of the best things about Apple’s Macintosh computers is that they come with a …

Leave a Reply

Your email address will not be published.