Close
0%
0%

Retro Raspberry Pi TV Brings Back Channel Surfing

3D-printed Raspberry Pi TV that plays curated clips via a local Flask backend for full offline content control.

Similar projects worth following
TVArgenta is a fully offline retro television built around a Raspberry Pi, designed to recreate the feeling of flipping through TV channels — but with your own curated content. What started as a nostalgic experiment with old Argentinian commercials evolved into a complete media platform. The system includes both a frontend player (running directly on the Pi in kiosk mode) and a Flask-based backend for managing videos, metadata, tags, and channel logic. Users can upload and organize videos, define “channels” based on tag priorities or exclusions, and even enable features like child-safe mode to automatically filter unsuitable content. Each video entry maintains synchronized metadata and thumbnails, with automatic checks to detect missing or orphaned files. Interaction happens through a rotary encoder, used for zapping between channels, navigating menus, or adjusting volume.

What TVArgenta is (high level)



TVArgenta is a self-contained retro TV experience built around a Raspberry Pi. It is:

  1. Offline-first — all videos and metadata live locally on the device (no streaming required).
  2. Oldschool — a rotary encoder acts as the old-school dial for channel surfing.
  3. Nostalgic UI — CRT-style blue menus, static noise between channels and short intros to create the authentic feeling of zapping.
  4. Shareable — the enclosure and the backend were designed so other makers can adopt and adapt the system to their own content (commercials, family videos, short documentaries, regional clips, whatever defines “home”).


🧱 Hardware Setup

The core of the system is a Raspberry Pi 4, running a lightweight Python stack.
It connects to:

  • a 4.3” DSI touchscreen (800x480)

  • a KY-040 rotary encoder (for zapping and menu navigation)

  • an amplifier + 3W speaker

  • and a status LED connected to GPIO25

  • an additional button behind to turn the tv on and to pass to the next video within the same channel

The whole setup lives inside a 3D-printed case, designed to look like a mini CRT with vintage proportions.

💻 Software Architecture

TVArgenta runs as two complementary layers:

  1. Frontend Player (Kiosk Mode)

    • Runs Chromium in fullscreen kiosk mode on boot.

    • The web UI displays video playback, menus, and overlays in a retro CRT style (scanlines, flicker, noise).

    • It reacts to encoder input and internal logic handled by Flask routes and JavaScript events.

    • Playback is driven by an HTML5 <video> element pointing to locally stored MP4s under /srv/tvargenta/content/videos/.

  2. Backend Manager (Flask Web App)

    • Runs locally on the same Pi.

    • Provides an interface for uploading, tagging, and organizing videos, defining channels, and managing configuration JSONs (metadata.json, canales.json, etc.).

    • Handles automatic thumbnail generation, tag synchronization, and orphan file cleanup.

    • Exposes REST endpoints for real-time feedback (upload status, processing steps, etc.).

Both layers share the same content directory, allowing the system to manage everything offline, without cloud dependencies or external CDNs.

🧩 Content Logic

Each video has an entry in metadata.json, which stores tags, duration, and other fields.
When the Pi boots, it compares the /content/videos/ folder against this JSON — marking any missing files as “ghosts” and generating new thumbnails if needed.
Channels are defined in canales.json, each with their own set of priorities (like “Comedy”, “Music”, or “90s Ads”).

A “child mode” toggle hides all clips marked with NOATP (not suitable for all audiences).
The result: a dynamic, rules-based offline TV that feels surprisingly alive.

🎛️ Interaction and UX

The rotary encoder is the soul of the interface. Turning it changes channels; pressing it opens menus.
There’s even visual and audio feedback — flicker, scan lines, and zapping sounds — to simulate analog tuning.
The UI follows a retro 90s vibe with pixel fonts and minimal overlays, rendered in real-time on the Pi display.

Design and enclosure

The visual goal was to evoke the look and proportions of small 90s CRT TVs without being a bulky full-size set. The enclosure is 3D printed with snap-fit joins and uses M3 screws for the parts that need serviceability (screen, Pi, speaker, encoder). I designed internal mounting points for neat cable routing and easy removal of the Pi for maintenance.

I uploaded the 3D files to MakerWorld so other makers can print their own shells or adapt the design.

  • 1 × Raspberry Pi 4 2GB
  • 1 × 4.3inch Capacitive Touch Display for Raspberry Pi, DSI Interface, 800×480
  • 1 × Rotary Encoder Module KY-040
  • 1 × Micro speaker 3 Watt 4 Ohm closed audio and subwoofer speaker.
  • 1 × MAX98357A I2S 3W Mono amplifier class D

View all 6 components

  • Project Major Update — TVArgenta Evolves Again!

    Ricardo Sappia7 hours ago 0 comments

    It’s been a while since the last major update, and this one really pushes TVArgenta forward into a more complete, seamless, and user-friendly retro system. What started as a nostalgic Raspberry Pi TV is now turning into a full-featured hybrid that bridges two eras — and makes setup easier than ever.

    🆕 W hat’s New

    • Ready-to-flash system image — everything comes pre-configured, no manual setup required.
    • RetroPie integration — switch effortlessly between TV mode and gaming mode.
    • Bluetooth controller pairing — connect your controller by cable or wirelessly for instant play.
    • Wi-Fi management — new on-screen network setup lets you connect or change networks directly.
    • Multi-language support — both the TV interface and the web management pages can now be displayed in multiple languages. Reworked web management pages — redesigned layout for smoother content editing and easier uploads.
    • New on-screen overlays — refreshed menu system directly on the TV display for quicker navigation.

    All these improvements aim to make TVArgenta feel more alive, flexible, and approachable — whether you’re using it as a nostalgic TV, a gaming console, or both. Every function now feels more tightly integrated, and the experience more polished.

    Detailed instructions on how to flash and use the new image will be available soon on GitHub, along with the official download link once it goes live.

  • TV mode meets gaming mode — the hybrid is complete.​

    Ricardo Sappia10/27/2025 at 14:19 0 comments

    This log documents a major update: integration of RetroPie, turning the retro TV experience into something one can now play as well as watch.

    The case has been modified to allow an USB connection from the outside, opening new posibilites of inputs. 

View all 2 project logs

  • 1
    Step 1: Basic Raspberry Pi Configuration

    We prepare the SD card (in this case, I’m using a 64 GB one). For that, we use Raspberry Pi Imager. Make sure to select the following options:

    In the hostname field, I make sure to set argentv.local (we’ll use it later, but you can choose any hostname you like).

    Make sure to configure the Wi-Fi credentials, language, and region. Leave SSH enabled so you can access the Raspberry Pi remotely later on:

    Click Install, and we’ll meet again in a few minutes 😉 […] Once the flashing process is done, insert the SD card into the Raspberry Pi. If you see the following screens, you’re on the right track:


  • 2
    Prepare remote access to the RPI

    Next, we’ll try to access the Raspberry Pi remotely. Open your command console and type:

    ssh argentv.local

    You might see the following message:

    If that happens, try this:

    ssh-keygen -R argentv.local

    Once done, try again with ssh argentv.local, and this time you should see something like this:

    After typing yes, new certificates will be installed, and the SSH connection to the Raspberry Pi will be established.

    During the setup, my username was “rs”. Yours might differ — keep that in mind for the next steps.

    Since this is the very first boot after formatting the SD card, let’s run the following commands:

    sudo apt update && sudo apt upgrade –y
  • 3
    Prepare to clone the GitHub Repo

     Now let’s clone the GitHub repository. Before that, we need to configure our SSH keys.

    If you already have SSH keys, skip this step

    ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub 2>/dev/null || true

     Generate a new key (ED25519). Choose a helpful comment:

    ssh-keygen -t ed25519 -C "pi@argentv"

     Press Enter to accept the default path (~/.ssh/id_ed25519). You can leave the passphrase empty (just press Enter) or add one for better security.

    Show the public key (this one goes to GitHub)

    cat ~/.ssh/id_ed25519.pub

     (Optional) Load it into the SSH agent so you don’t have to enter your passphrase every time

    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519

     Copy that public key and add it to your GitHub account: GitHub → your avatar → Settings → SSH and GPG keys → New SSH key → paste the key.

    Test the connection with GitHub (it should greet you with your username)

    ssh -T git@github.com

View all 8 instructions

Enjoy this project?

Share

Discussions

Samir wrote 5 days ago point

Really cool project Ricardo! Reminds me of those old TV's from former Yugoslavia, I saw them once in a museum. Keep it up!

  Are you sure? yes | no

Ricardo Sappia wrote 10/23/2025 at 12:25 point

wow, thanks! That means a lot to me :) I will continue to document the missing steps as soon  as I am done with some new features ;)

  Are you sure? yes | no

jurquijo wrote 10/23/2025 at 12:14 point

Very well done and some of the best documentation of every step of the process I've seen on hackaday. ¡Bárbaro!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates