@meframe/server
@meframe/server is a Node.js package that runs @meframe/core export inside a real Chromium instance (via browser automation) and uploads the output using an injected multipart store interface.
Status
Experimental, but functional.
Current capabilities:
- Runs
@meframe/core export in a real Chromium instance (via puppeteer-core)
- Streams mux output into multipart parts (no full MP4
Blob in Node memory)
- Supports cancellation (
AbortSignal) and progress callback (onProgress)
See:
packages/server/examples/README.md for example usage (local + S3)
packages/server/docs/INTEGRATION.md for a complete integration guide (Chinese)
packages/server/docs/ARCHITECTURE.md for architecture and constraints
Design goals
- No cloud SDK dependency: upload is abstracted via
MultipartObjectStore.
- Low memory: avoid returning a full MP4
Blob to Node; stream mux output into multipart parts.
- Works with existing web pipeline: reuse
@meframe/core export flow (OPFS + WebCodecs + workers).
Public API
ServerExporter
exportToStore({ model, exportOptions, pageUrl?, key?, metadata?, abortSignal? })
Types are exported from @meframe/server root entry.
Notes / requirements
- Chromium is not bundled: this package depends on
puppeteer-core internally, so production must provide a Chromium/Chrome binary and pass browser.executablePath when creating ServerExporter (or load it from your own config system).
- Secure context is required for WebCodecs: the exporter should navigate to a trustworthy origin (e.g.
http://127.0.0.1 or https://...) via pageUrl before running the runner.
- Worker files must be accessible to the page at
/<workerPath>/... (default /meframe-workers/...). The local example serves them from @meframe/core/dist/workers.
Run examples
Local end-to-end (writes packages/server/examples/local/out.mp4):
pnpm --filter @meframe/core build
pnpm --filter @meframe/adapter-medeo build
pnpm --filter @meframe/server build
MEFRAME_CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
MEFRAME_WORKER_PATH="https://medeo.app/fe-assets/meframe-workers-2" \
pnpm --filter @meframe/server dev
S3 example (reference; requires AWS creds + bucket CORS exposing ETag):
MEFRAME_CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
MEFRAME_WORKER_PATH="https://medeo.app/fe-assets/meframe-workers-2" \
MEFRAME_RUNNER_PAGE_URL="https://your-domain.example/meframe-runner.html" \
S3_BUCKET="your-bucket" \
MEDEO_PUBLIC_BASE_URL="https://cdn.example.com" \
node packages/server/examples/s3/export-to-s3.mjs