The same API runs on Cloudflare D1/R2 with Browser Rendering, or on Node 24+ with SQLite, files, and Chromium. Use the public studio or deploy your own copy under the MIT license.
npm ci
npm ci --prefix packages/cli
npm run build:cli
npx playwright install chromium
npm run build
# Set a stable 32-byte base64 ENCRYPTION_KEY and APP_URL
# in the server process environment before starting.
npm startNode does not automatically load dotenv files. Keep the encryption key stable across restarts to retain access to encrypted provider keys. Set APP_URL to the canonical external origin and preserve DATA_DIR with its database and assets.
# Supply ENCRYPTION_KEY and APP_URL in the Compose environment.
docker compose up --build -d
docker compose logs --tail=100 studioThe container binds to 0.0.0.0:8787; Compose persists /data in a named volume. Use HTTPS at a reverse proxy for public hosting. Cloudflare operators provision their own D1/R2/browser bindings, apply migrations, and set secrets before deploying.
Export boundaries
- Import remote media before cloud binary export; the renderer has no external network access.
- Rendering is bounded by bytes and pixels: 16 megapixels per checked object/page and 64 megapixels per workload.
- WebM records actual motion; MP4 requires a supported encoder. Cloud motion is limited to 60 seconds. Browser and cloud motion exports share timeline audio cue timing and mixing; listen to the actual output.
- SVG is static. HTML may include the trusted interactive viewer. PPTX preserves legacy editable text/primitives and rasterizes structured layouts/components. React exports runnable frontend source with the document, component runtime and embedded media; GLB/glTF export scene geometry, materials, skinning and sampled animation.
- Selected Google Fonts are fetched from official font hosts with byte/time limits and embedded before isolated rendering. Local fonts need no font request; unavailable selected Google fonts return an explicit export error.
- Google Slides supports native text/shapes/HTTPS images; unsupported complex/private-image content fails explicitly.
- Provider and Google success require your credentials and account access. Browser WebMCP remains experimental.
Dependency audit findings and their runtime boundaries are disclosed in the deployment guide. Successful rendering tests do not mean the dependency tree is audit-clean.