FrameOS Cloud 4/4: cloud store and private cloud scenes - #257
Merged
Conversation
This was referenced Jul 14, 2026
mariusandra
added a commit
that referenced
this pull request
Jul 15, 2026
Split out of #257. Device runtime, firmware pipeline, and embedded frontend workflows: - Streaming decode of multi-MB PNGs and chunked HTTP bodies, so downloads are no longer size-limited by fragmentation; images too large for the device paint a download-failure frame instead of 'No image provided' - Memory-aware scene node cache (frame-sized images are not pinned), OOM-aborted renders that leak the heap beyond recovery trigger a restart; render errors paint into the live canvas - Serialized scenes.json writers, reliable OTA acknowledgement, post-flash reboot/reconnect, and the state partition survives re-flashing - Content-addressed firmware download URLs with no-store responses; stale firmware cache invalidates on source changes - USB serial render lifecycle events with Pi event parity; frontend USB commands fall back to HTTP when the port is stale; post-deploy USB preview retries until the first render exists; identical-board reconnects require explicit reselection - Document the no-image-proxies-for-frames rule Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
mariusandra
added a commit
that referenced
this pull request
Jul 15, 2026
Split out of #257. The embedded scene editor and in-browser scene runtime: - Embeddable AGPL scene editor bundle published as the frameos-editor npm package: full scene workspace panels, theme support via init message, light-mode diagram styling, hashed entry files, and a demo page; standalone embeds answer API calls with synthetic 404s - frameos-wasm npm package (moved to frameos/wasm): typed wrapper around the emscripten wasm preview worker with a showIf-aware management interface; preview HTTP goes client-side first so the same-origin proxy only carries CORS-blocked hosts - Live preview: renders keep unapplied form edits, one action row, "Save screenshot" in the Preview panel, event buttons send their label in the payload - Release plumbing: publish-npm workflow job, per-package version sync in tools/update_versions.py (editor gets its own component hash in versions.json), pnpm workspace + Dockerfile entries - Auth-guard redirects use replace instead of push so Back does not loop through the redirect The regenerated frontend/src/generated/builtinApps.ts snapshot includes app data from sibling PRs split out of #257 (bird journal app, gallery error-image change); `pnpm --dir frontend run build` regenerates it from the checked-out sources. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 18, 2026
Rebased onto main after #265 merged: the phase-2 delta (store publishing, install by URL, private cloud scenes, save-modal polish, review fixes and the visual-cloud-store snapshots) squashed into one commit on top of the squash-merged stack. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mariusandra
force-pushed
the
backend-cloud-connect
branch
from
August 1, 2026 23:59
d522e9c to
2fa511d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Final part of the FrameOS Cloud stack — on top of #263 (linking), #264 (cloud login), and #265 (backups). This PR now carries only the store + private cloud scenes work; the earlier phases were split into the stack below (and ESP32/JS-runtime/editor work went to #258/#259/#260 before that).
store:publishscope): publish scenes as immutable versions to the cloud store; the connected provider's store repository is auto-seeded per project (with provider-change migration of the old marker), and store templates show author/version/risk flags plus a "View store page" link. Installing a scene flagged as running shell commands asks for confirmation on every install path, drag-and-drop included<meta name="frameos:zip">tag; URLs on the linked provider get the link token attached so private cloud scenes install too<img>tags can't carry the link token (the proxy only relaysimage/*responses); "Save to private cloud" from the scene dropdowns and template modal, with a visibility control (keep / private / public) and private/public tags on the listed scenes. The section hides on frame admin pages and when the cloud feature is disabledimage_scene_id)visual-cloud-store.spec.tssnapshots the states: populated drive (private/public/shell-flagged/newer-FrameOS scenes), empty drive, not-connected promo, and the save modal (PNGs are CI-rendered)Test plan
pytest test_cloud_store.py test_repositories.py test_templates.py— green (full backend suite passes)test_cloud_e2e.py(FRAMEOS_CLOUD_E2E_URL)pnpm --dir frontend run buildpassesvisual-cloud-store.spec.tspasses locally against the fixture backend🤖 Generated with Claude Code