paper-console logo

paper-console

A small, self-hosted thermal printer for news, weather, puzzles, email, and more.

Developer ToolsSelf-HostedPythonMIT 306 18Health 82
GitHub

What is it?

What it is

A compact, self‑hosted thermal printer (PC‑1) that prints news, weather, puzzles, email, and more to physical paper, controlled by a rotary dial and button on a Raspberry Pi Zero 2 W.

Why it exists

To give users a tangible, subscription‑free way to receive curated information and entertainment without a screen, using only local hardware and open‑source software.

Who should use it

DIY makers, Raspberry Pi enthusiasts, hobbyists who enjoy building physical devices and want a low‑cost, screen‑less daily information printer

Who should avoid it

Users who need high‑volume printing, non‑technical users without basic Linux/command‑line skills, or those who prefer cloud‑based services

How it works

A quick walkthrough in plain English

How paper-console works

Step 1 of 3

You interact with it

Open paper-console, send a request, or connect it to your stack.

Features

Small, self‑hosted thermal printer with no screen
Fully modular channel system (8 rotary dial positions)
Configurable via web UI (no subscriptions, no cloud services)
Built on Raspberry Pi Zero 2 W with low power consumption
Supports a wide range of printable modules (news, weather, puzzles, email, QR codes, etc.)
Physical paper output for tangible information
Open‑source Python/FastAPI backend and React/Vite frontend
Docker‑ready for software‑only testing
Factory reset and Wi‑Fi setup via captive portal
Supports scheduled printing and quick‑action button menu

Advantages

  • Privacy‑first design (no cloud or API keys required)
  • Low cost and low power (Pi Zero 2 W)
  • Physical output eliminates screen fatigue
  • Extensible module architecture allows adding new content types
  • Easy local deployment and configuration
  • Supports offline operation once data is cached
  • Open source community contributions possible
  • Built‑in Wi‑Fi setup and OTA update support
  • Hardware‑centric design encourages learning electronics
  • No subscription fees or recurring costs

Disadvantages

  • Requires Raspberry Pi hardware and assembly skills
  • Thermal paper is consumable and limited to 58 mm width
  • Limited to Pi Zero 2 W (no native support for larger Pi models)
  • No built‑in display or touch interface for complex interactions
  • Printer reliability depends on power supply and serial connection
  • Setup can be challenging for non‑technical users
  • Limited to text/bitmap output (no high‑resolution graphics)
  • Requires Wi‑Fi network for initial configuration and updates
  • Hardware maintenance (printer, button, dial) may be needed over time

Installation

docker

1. Create a Dockerfile in the repo root:
   ```Dockerfile
   FROM python:3.12-bookworm

   WORKDIR /paper-console

   COPY . .

   RUN apt update && apt install -y sudo npm nodejs network-manager

   RUN pip install Pillow
   RUN pip install fastapi uvicorn[standard] pydantic requests
   RUN pip install feedparser icalendar pytz python-dateutil astral beautifulsoup4
   RUN pip install pytest

   RUN python3 -m venv .venv; ./.venv/bin/python -m pip install -r requirements-dev.txt

   ENTRYPOINT ["./run.sh"]
   ```
2. Build the image:
   ```bash
   docker buildx build -t local/pc-1 .
   ```
3. Run the container:
   ```bash
   docker run --rm -it -p 8000:8000 local/pc-1
   ```
4. Access the app at `http://localhost:8000`.
5. Use the mock printer output in the terminal.

native

1. Install Python dependencies on the Pi:
   ```bash
   ./.venv/bin/python -m pip install -r requirements-pi.txt
   ```
2. Run the setup script to configure hardware and services:
   ```bash
   cd ~/paper-console
   chmod +x scripts/setup_pi.sh
   sudo scripts/setup_pi.sh
   ```
   The script sets the hostname, installs Nginx and Avahi, configures a systemd service, and adds the user to the `lp` group.
3. Start the application (handled by the systemd service `pc-1.service`).
4. Access the device via web UI at `http://pc-1.local` (or the chosen hostname).

FAQ

How do I set up PC‑1 on a Raspberry Pi Zero 2 W?

First connect the hardware following the wiring tables in the README: power the Pi and printer from a 5 V 5 A supply, wire the 58 mm thermal printer to the GPIO serial pins (TX, RX, DTR, GND), connect the 8‑position rotary switch to the designated GPIO pins, and attach the momentary push button. After wiring, run the setup script: ```bash cd ~/paper-console chmod +x scripts/setup_pi.sh sudo scripts/setup_pi.sh ``` The script configures the hostname, installs Nginx and Avahi for mDNS, sets up the systemd service, and adds the user to the `lp` group for printer access. Once the Pi reboots, you can access the device at `http://pc‑1.local` or `http://10.42.0.1` during setup.

Can I run PC‑1 without a Raspberry Pi, for example in Docker or on my laptop?

Yes. The repository includes a Dockerfile that builds a container with the same Python dependencies and a mock printer that outputs to the terminal. Build and run the image with: ```bash docker buildx build -t local/pc-1 . docker run --rm -it -p 8000:8000 local/pc-1 ``` The API is available at `http://localhost:8000` and the mock printer prints to the container’s console. For local development on a Unix‑like shell, simply run `./run.sh` or `uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload` after installing the dev requirements. Both methods allow you to test logic, view printed output, and run the web UI at `http://localhost:5173` after `npm run dev` in the `web` directory.

How do I configure channels, modules, and schedules using the web UI?

Open the settings UI at `http://pc‑1.local` (or `http://localhost:8000` if running locally). Under **Global Settings** you can set location, time format, and other system options. Channels are displayed as cards; each card represents a rotary dial position (1‑8). Use the up/down arrows next to a channel title to reorder entire channels. Inside a channel card, you can add modules (e.g., News, Weather, Sudoku) and reorder them with the arrow buttons. To schedule automatic printing, click the clock icon on a channel and set the desired times. All changes are auto‑saved to `config.json`. The UI also provides a **Reset All Settings** button that restores factory defaults.

What is the procedure for a factory reset or Wi‑Fi reset?

Press and hold the button for about 15 seconds to trigger a factory reset. This clears all settings, restores the default configuration, and reboots the device. For a Wi‑Fi reset, hold the button for ~5 seconds to bring up the Quick Actions menu, then press the option labeled "Reset WiFi" (usually option 4). The device will return to setup mode and print a new setup receipt with a fresh SSID and password.

What are the Quick Actions and how do I use them?

When you hold the button for ~5 seconds, a half‑line paper cue appears and the Quick Actions menu is printed. The options are: 1. Table of Contents 2. System Monitor 3. Reprint Setup Instructions 4. Reset WiFi 5. Reset Factory Settings 8. Cancel Select an option by pressing the corresponding number on the rotary dial. The menu exits automatically after a choice or after 2 minutes of inactivity. Holding the button for ~15 seconds bypasses the menu and performs a factory reset.

Loading documentation…
View on GitHub

Featured in Videos

YouTube tutorials and walkthroughs for paper-console

s5

896,635 views

Starts at 00:00

Share

Alternatives

Similar projects ranked by category, topics, and text overlap.

Compare
paper-console | MushyBook