The scene store
Browse, preview, fork and install community scenes from scenes.frameos.net - on cloud-managed frames with one click, or on a self-hosted backend by pasting a link.
scenes.frameos.net is the FrameOS scene store: calendars, dashboards, galleries, message boards, generative art - published by the community and by the FrameOS project, and installable on any frame. Signed in to FrameOS Cloud, the same store is the first page of Scenes in the rail; on a backend it's Scenes → Public scene store. Scenes sit on shelves by category - Real time is the one for scenes that redraw every second - with their install counts, sorted by Most installed, Latest or A to Z.
Each scene page is a small workspace with four panels you can toggle - Info (publisher, install count, the FrameOS version it needs, description and gallery), Editor (the same node-graph scene editor the backend has, so you can read exactly what a scene does before you install it), AI (edit it in plain language) and Preview, a live preview rendered in your browser. A version dropdown in the bar swaps the whole workspace to any published version, and Download .zip hands you the scene as a file.
The preview is the real FrameOS renderer compiled to WebAssembly, and it can show the scene the way a panel would: tick Dither and pick the panel to simulate - Spectra 6, 7-color ACeP, black/white/red, black/white/yellow, 4 or 16 greys, plain black and white - and the frame is dithered with the device's own algorithm. Or pick a real frame from the Device menu above Resolution - a Seeed reTerminal, a Waveshare PhotoPainter, an Inky, a HyperPixel - and the preview takes that panel's size and inks. It has a browser-only assets folder (kept in your browser, seeded with sample photos) so slideshow and SD-card scenes render too, an Auto apply switch that re-renders as you change state fields, and an opt-in real-time mode for scenes that want to animate. JavaScript clocks run in the scene's time zone. A scene that calls a pay-per-request service (OpenAI, say), or one that brings its own code for a service and would run it with your keys, never renders on its own - it says which of the two it is and waits for you to click Run preview each time the scene changes, so a browse never spends your credits. An unedited FrameOS app doesn't count as bringing its own code. The picture stays pinned at the top while the log, the settings and the state form scroll under it: drag the handle under it to resize it, or double-click the handle to fit it again. The log has a handle of its own. A button in the preview is held like a frame's key, so long presses and double presses work. Tick Memory limit and pick a device (ESP32 with 8 or 16 MB, Pi Zero, Pi) to render under that frame's memory: the preview shows the peak and says "out of memory" where the frame would.
Install a scene
The Install button opens one dialog with every way in:
- On a cloud-managed frame: sign in, click Install on the scene page or on its tile, and pick the frame (or frames) - the scene is added next to the frame's existing scenes and pushed within seconds (or as soon as an offline frame reconnects). The frame remembers where the scene came from and which version it is on. When a newer version is published, the scene's image says Update available - on the cloud, a backend and the frame's own admin page - and Update to latest in its … menu takes it there.
- On a self-hosted backend: copy the Install on a self-hosted FrameOS link and paste it into the search box of a frame's Add scene drawer in the backend. You rarely need the link: Add scene → Scene store lists the public store on every backend, linked to a cloud account or not, grouped into the same shelves as the store front.
- On a standalone frame: open Add scene on the frame's admin page - the store is listed there first. Download zip and upload works too.
Installing a store scene on a backend grants it the service keys it declares; revoke them under the frame's settings, Service keys for store scenes.
Every scene carries tags for what its apps may do on the frame - runs shell commands, reads all files, reads assets folder, writes assets folder, uses OpenAI key - on its tile, in the install dialog and on the frame (permissions). Installing a scene is approving its tags, and Update to latest says which ones a new version adds, in red when it gains shell, file or write access. The cloud never runs the shell apps (Chromium screenshot and RTSP snapshot) at all; on a self-hosted or standalone frame, install scenes that use them only from publishers you trust. (Such a scene needs no separate on-panel approval on the frame: the install is the approval.)
Your scenes
Signed in, the scenes library has My cloud scenes (the old scenes.frameos.net/my-scenes address still leads there), in two shelves: Published in the store and Private scenes. Everything private is yours alone until you click Make public. Scenes get here five ways:
- New blank scene - an empty scene in the hosted editor.
- Create a scene with AI - describe what you want and the scene assistant builds it as a new private scene.
- Fork any store scene ("Save a copy as a new private scene in your account"), then edit it in the hosted editor.
- Upload a scene ZIP exported from a backend or a frame; the cover image in the zip becomes the scene's preview. A zip holding a legacy compiled scene (Nim code nodes or Nim apps) is refused - run it through the converter first.
- From a linked backend: the Save to cloud (private) item in a scene's … menu pushes it straight to your account, and your private scenes appear under Add scene → Private scenes (and Scenes → My cloud scenes) on every machine you link.
A private scene's install link carries a sharing secret, so you can hand it to a friend without publishing. A version is the whole scene - diagram, description, tags, category and the image gallery - so editing the listing or reordering images shows up as Unsaved changes and lands with the next save. Unsaved edits are kept in your browser: leave a scene page and come back, and the editor restores them with a Discard button next to them. Versions are immutable - Save as new version asks for a one-line "What changed?" that heads the version in the dropdown and on the public page, and you can yank a bad version so new installs skip it. A scene the store has pulled stays readable and deletable by its owner.
Build and edit scenes with AI
Every scene you own has an AI panel (and the store's front page has a Create a scene with AI card). The assistant can't deploy on its own: installing on a frame from the chat is an Approve card you click. Settings → Usage shows what you've used and has a Turn AI off switch. Describe the scene, or the change - "add a theme selector", "make the clock bigger, show the weather for Tallinn" - and the assistant edits the node graph, the JavaScript apps and the state fields, checks the result against a catalog-aware linter and renders it inline before handing it over. It can look at that render too, so this looks cramped gets a fix for what you actually see; you then save it as a new version, with the prompt pre-filled as the change note. It renders at the size the Preview panel is set to, and at others when a scene has to work at several. A reply can run to 40 rounds of edits and renders; one that runs out says how far it got, so you can say continue. Long edits keep running if your connection drops and pick up where they were. The prompt is never stored inside the scene, so the scenes.json you download or publish doesn't carry it. The same assistant is available to scripts and agents through the cloud's MCP server.
Published scenes, private ones included, pass an automated content check on their name, description and preview image. Limits while in beta: 200 scenes per account, 100 MB of private storage (public scenes are free), 8 MB per scene ZIP.
Publishing for others
Make a scene public and it appears in the store under your publisher page. Give it a good preview image (in the Preview panel, Save to images uploads the current render to the scene's gallery; Download PNG hands you the same frame as a file; drag gallery images to reorder them, the first one leads) and a description that says which API keys it needs - it doubles as the summary in the card Discord and Slack unfurl for the scene's link. There are no ratings or comments by design - install counts and the diagram speak for the scene.
A scene that plays a Photos album carries the album's share link, and whoever has the scene can open the album - so the store refuses to make such a scene public or give it a sharing link. Keep it private, or build a public version around a different source.