The operating system for smart frames

Turn a Raspberry Pi or ESP32, and any display - e-ink, HDMI or LCD - into a calendar, dashboard or art frame that runs itself. Everything renders on the device. Run it standalone, control it with a self-hosted backend, or manage it from FrameOS Cloud - the frame works the same either way.

Free & open source since 2023 (AGPL-3.0) · Works offline · Cloud optional · Yours forever

13.3 inch Spectra 6 color e-ink panel in a 3D-printed rosewood frameA portable HDMI monitor showing the FrameOS welcome screen from a Raspberry PiTwo e-ink frames with 3D-printed kickstands
A 13.3" Spectra 6 color e-ink panel in a 3D-printed frame

JSX + Tailwind on a microcontroller

Written like a web app. Running on an ESP32.

Build a frame's UI like a web app: a .tsx file with Tailwind classes, onClick, sliders and text fields, which all build up to an SVG. The ESP32 renders it on the chip, React-style, redrawing only what changed - no server, no browser. The same file runs on a Pi, on HDMI, on e-paper and in your browser.

All scenes in the store
The FrameOS scene editor with the Kitchen sink scene's app.tsx beside its live preview as a SenseCAP Indicator

Kitchen sink in the scene editor: switches, a slider you drag, a form with a keyboard on the screen, a paint canvas and Lights Out - six touch pages in one file. Previewed as a SenseCAP Indicator inside the ESP32's 8 MB of memory.

~85 ms

from tap to picture

A tap on a JSX smart-home panel on a 480x480 SenseCAP Indicator. Only what changed is redrawn.

29.5 fps

animated JSX

The DVD logo bounce, written as JSX, on the same ESP32-S3 LCD.

Real UI

not just pictures

Flexbox and grid, gradients, inline SVG icons, inputs with an on-screen keyboard, select boxes and lists that scroll.

One file

every screen

sm: to 2xl: and portrait: follow the panel, and app.frame.color says when to switch to high contrast.

Made for photography

Colors that actually look good

FrameOS maps each image's luminance histogram, and fits its range onto the shades the panel can actually show. We then dither with a hashed jitter to smooth out jagged lines and gradients. Drag the handle to compare. Want more? Grade each photo by hand, or manage your whole library with the built-in Photos feature.Color controls guide →Photos guide →

A hoverfly in front of a purple flower, from Wikimedia Commons, dithered for a Spectra 6 panel with no adjustments
A hoverfly in front of a purple flower, from Wikimedia Commons, dithered for a Spectra 6 panel after the automatic fit
FrameOSClipped
Left of the handle: FrameOS. Right of the handle: Clipped.

Each pair is the editor's preview for a 7.3" Spectra 6 panel at its real 800x480 pixels.

Pick your hardware

Raspberry Pi or ESP32?

A Raspberry Pi is the classic option. Any model from the Zero W to the Pi 5 will do. Supports 120+ e-ink panels and other outputs like HDMI. You can manage the frame through their own admin page and HTTP API. Boot from a prebuilt SD image or install on any Linux with a shell script.

An ESP32-S3 lets you build battery-powered frames that deep-sleep between refreshes. It's still the full FrameOS experience. Everything is rendered on device, including 50MB JPEGs. The easiest start is a ready-made Seeed Studio reTerminal: pick its preset and flash it from the browser. Waveshare's PhotoPainter, Seeed's XIAO ePaper boards, TRMNL kits and custom setups work too. Boards without PSRAM (e.g. ESP32-C3) run as thin clients.

Pick your software

How do you want to get started?

All three render on the device, and a frame can move between them without reflashing.

Choose a path to see the next step.

Batteries included

Static or real time

One OS for both kinds of frame. On e-ink, a scene renders when it's due and the frame sleeps in between. On a touch screen it runs live, answers taps and redraws only what changed. Either way, scenes install with one click and are editable down to the source.

Static

Photos, calendars, weather and art for e-ink. A scene renders on a schedule or at the press of a button, and an ESP32 deep-sleeps on its battery in between.

Real time

Dashboards, lists and controls for touch screens. Tuned for the ESP32, where a tap answers in under a tenth of a second and the DVD logo runs at about 29 fps. Everything's even smoother on a Raspberry Pi.

Also intelligent

Just ask for a scene

Plug in your own agent, chat with the assistant in FrameOS Cloud, or talk to the frame itself. A scene the AI makes is rendered and checked before it reaches a frame, and a switch in Settings turns AI off.

$ claude mcp add \
  --transport http frameos \
  https://cloud.frameos.net/api/mcp \
  --header "Authorization: Bearer …"

Connect your own agent

Add FrameOS as an MCP server in Claude Code, Cursor or any other MCP client, from FrameOS Cloud or your own backend. Around 80 tools - frames, screenshots, scenes, renders, photo albums - and an agent only changes a frame when you ask it to.

MCP server guide →

Make the clock bigger, show the weather for Tallinn

Put a weather scene on the hallway frame

Ask inside FrameOS Cloud

Every scene has an AI panel. Describe the scene or the change: the assistant edits the code, renders the result, looks at it and fixes what's off, then you save it. Ask on the frames page and it puts scenes on your frames. A self-hosted backend has it too, with your OpenAI key.

Scene AI guide →

REFRESHheld

Make a scene that counts down to Friday

Hold a button and say it

On a frame with a microphone, like the Seeed reTerminal E1002, the Sticky or the Waveshare PhotoPainter, hold the voice key and talk. It switches scenes, changes settings, plays an album, or has the AI build a new scene, shown as a preview until you install it.

Voice chat guide →

Case Maker

Design a printable case around your exact frame

The FrameOS Case Maker generates parametric, 3D-printable enclosures for supported panels and Raspberry Pi layouts. Pick a template, tune the depth and bezel, add wall mounts, kickstands, USB-C cutouts and screw posts, then download the STL.

It is built for the same hardware database as the docs, so common Waveshare and Pimoroni builds start from sane dimensions instead of a blank CAD file.

The FrameOS Case Maker interface for configuring a 3D-printed frame enclosure

Watch a full build (Raspberry Pi)

From bare panel to finished frame

Recorded over a year ago, before FrameOS Cloud and ESP32 support existed.

Build your first frame this weekend

A standalone Pi, a self-hosted backend, or a FrameOS Cloud account - the guide walks through all three, and the frame you end up with is the same.