openvibers/openvibe.studio STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenVibe.Studio", |
| 3 | "stage": "beta", |
| 4 | "code": true, |
| 5 | "product": "Photo and Light, the creative apps on the OpenVibe network", |
| 6 | "runtime": "node 22, Express, the OpenVibe Shared shell and the openvibe-sdk SSO client; the apps themselves are Rust compiled to WebAssembly (Trunk for PhotoCraft, cargo xtask web for LightCraft) and served as static bundles", |
| 7 | "port": 5155, |
| 8 | "drill_port": 15155, |
| 9 | "domain": "openvibe.studio", |
| 10 | "contracts": "openvibe-contracts v0.419.0, openvibe-sdk v0.161.0, openvibe-shared v4.238.0", |
| 11 | "capabilities": [ |
| 12 | "studio.apps.list", |
| 13 | "studio.files.list", |
| 14 | "studio.file.open", |
| 15 | "studio.file.save" |
| 16 | ], |
| 17 | "deployed": false, |
| 18 | "deployment": "Not deployed in this pull request. openvibe.studio stays parked until the owner launches it; the service listens on 127.0.0.1:5155 and the drill port is 15155. The bundles are built by the bundles workflow on every push to main and published as the release bundles-<photo tag>-<light tag> with a SHA256SUMS file; scripts/fetch-bundles.sh fetches that release on the host with curl (no GitHub account), checks the sums and swaps the tree in one step. No bundle is kept in git.", |
| 19 | "bases": [ |
| 20 | { |
| 21 | "id": "photo", |
| 22 | "name": "PhotoCraft", |
| 23 | "repository": "https://github.com/storytold/photocraft", |
| 24 | "tag": "v0.21.0", |
| 25 | "licence": "MIT OR Apache-2.0", |
| 26 | "licence_files": [ |
| 27 | "LICENSE-MIT", |
| 28 | "LICENSE-APACHE", |
| 29 | "NOTICE", |
| 30 | "ATTRIBUTION.md" |
| 31 | ], |
| 32 | "built_by": "our CI (Rust stable, wasm32-unknown-unknown, Trunk 0.21.14)", |
| 33 | "why": "the published web release archive does not start, so the build is made from the pinned tag and checked by a first-frame smoke test", |
| 34 | "adapter": "server/adapters/photo.js", |
| 35 | "capabilities": { |
| 36 | "open": true, |
| 37 | "save": false, |
| 38 | "commands": false |
| 39 | } |
| 40 | }, |
| 41 | { |
| 42 | "id": "light", |
| 43 | "name": "LightCraft", |
| 44 | "repository": "https://github.com/storytold/lightcraft", |
| 45 | "tag": "v0.19.0", |
| 46 | "licence": "MIT OR Apache-2.0", |
| 47 | "licence_files": [ |
| 48 | "LICENSE-MIT", |
| 49 | "LICENSE-APACHE", |
| 50 | "NOTICE", |
| 51 | "ATTRIBUTION.md", |
| 52 | "OFL-biz-ud-pgothic.txt", |
| 53 | "OFL-noto-sans-thai.txt" |
| 54 | ], |
| 55 | "built_by": "our CI (Rust stable, wasm32-unknown-unknown, cargo xtask web, wasm-bindgen 0.2.129)", |
| 56 | "why": "its web build works and speaks the documented host bridge, so files can be opened and exports handed over", |
| 57 | "adapter": "server/adapters/light.js", |
| 58 | "capabilities": { |
| 59 | "open": true, |
| 60 | "save": true, |
| 61 | "commands": true |
| 62 | } |
| 63 | } |
| 64 | ], |
| 65 | "excluded": [ |
| 66 | { |
| 67 | "name": "Cut (FilmCraft)", |
| 68 | "reason": "desktop and agent only; not part of Studio v0" |
| 69 | } |
| 70 | ], |
| 71 | "features": [ |
| 72 | "one service for both apps, modelled on OpenVibe.Computer: the Shared navbar, the sign-in, STATUS.json and a pinned security workflow", |
| 73 | "the apps are served at /photo and /light inside our own layer: the navbar sits outside the app frame", |
| 74 | "one adapter per app with the same contract (open(file), save(), commands()), so a base can be swapped", |
| 75 | "Open from OpenVibe: the files a person owns in OpenVibe.Download and the pictures in OpenVibe.Pics", |
| 76 | "Save to OpenVibe: an export goes to the person's OpenVibe.Download drive (start, parts, complete)", |
| 77 | "the headers the WebAssembly builds need: application/wasm, no-cache on the loader, immutable on the hashed parts, no COOP/COEP (the builds are not cross-origin isolated and do not need it)", |
| 78 | "a build smoke test that fails the build unless the app reaches its first frame in headless Chrome", |
| 79 | "the home states the measured limits, credits each upstream project and links its licence" |
| 80 | ], |
| 81 | "limits_measured": [ |
| 82 | "LightCraft reaches its first frame in about 2.5 s at 1280 px and 0.6 s at 390 px; PhotoCraft in about 1.3 s once its loader path is right", |
| 83 | "a 4 GB Photoshop file passes PhotoCraft's cap but uses 2.7-3.0 GB of memory: a phone with 4 GB can run out of memory on big files", |
| 84 | "neither app works offline: there is no service worker", |
| 85 | "OpenVibe.Download has no route that hands a file's bytes to a person's token yet, so a file opens here only through a public share link" |
| 86 | ], |
| 87 | "tests": [ |
| 88 | "the build smoke test (scripts/smoke.js, run by the bundles workflow)", |
| 89 | "the headers of the bundles (server/bundles.js)", |
| 90 | "the adapter contract with a fake app (test/adapters.test.js)", |
| 91 | "the sign-in gating of Save, the files listing and the page rendering (test/studio.test.js)", |
| 92 | "the OpenVibe.Download client (test/media.test.js)" |
| 93 | ], |
| 94 | "updated": "2026-11-13" |
| 95 | } |
| 96 |