Server-side exporter for @meframe/core (browser-driven, multipart upload via injected store)
npm install @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.
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
- 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).
- ServerExporter
- exportToStore({ model, exportOptions, pageUrl?, key?, metadata?, abortSignal? })
Types are exported from @meframe/server root entry.
- 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 / (default /meframe-workers/...). If you do not pass workerPath, @meframe/server will start a temporary local server that serves @meframe/core/dist/workers and inject its base URL.
Local end-to-end (writes packages/server/examples/local/out.mp4):
``bash
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" \
pnpm --filter @meframe/server dev
`
S3 example (reference; requires AWS creds + bucket CORS exposing ETag):
`bash``
MEFRAME_CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
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