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



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. Try it below, it's live!
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 →


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.

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.









