@meframe/server
v0.1.1
Published
Server-side exporter for @meframe/core (browser-driven, multipart upload via injected store)
Maintainers
Readme
@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/coreexport in a real Chromium instance (viapuppeteer-core) - Streams mux output into multipart parts (no full MP4
Blobin Node memory) - Supports cancellation (
AbortSignal) and progress callback (onProgress)
See:
packages/server/examples/README.mdfor example usage (local + S3)packages/server/docs/INTEGRATION.mdfor a complete integration guide (Chinese)packages/server/docs/ARCHITECTURE.mdfor architecture and constraints
Design goals
- No cloud SDK dependency: upload is abstracted via
MultipartObjectStore. - Low memory: avoid returning a full MP4
Blobto Node; stream mux output into multipart parts. - Works with existing web pipeline: reuse
@meframe/coreexport flow (OPFS + WebCodecs + workers).
Public API
ServerExporterexportToStore({ 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-coreinternally, so production must provide a Chromium/Chrome binary and passbrowser.executablePathwhen creatingServerExporter(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.1orhttps://...) viapageUrlbefore running the runner. - Worker files must be accessible to the page at
/<workerPath>/...(default/meframe-workers/...). If you do not passworkerPath,@meframe/serverwill start a temporary local server that serves@meframe/core/dist/workersand inject its base URL.
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 devS3 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