@wenathlan/saddle 1.8.18 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +1339 -0
- package/README.md +33 -12
- package/alternatives.ts +1218 -0
- package/biome.json +153 -0
- package/boards.json +1517 -0
- package/compute.ts +3144 -0
- package/cores.json +1801 -0
- package/dist/acquisition.d.ts +359 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +629 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/alternatives.d.ts +509 -0
- package/dist/alternatives.d.ts.map +1 -0
- package/dist/alternatives.js +951 -0
- package/dist/alternatives.js.map +1 -0
- package/dist/automation.d.ts +426 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +561 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +562 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1057 -0
- package/dist/browser.js.map +1 -0
- package/dist/capacitor.config.d.ts +13 -0
- package/dist/capacitor.config.d.ts.map +1 -0
- package/dist/capacitor.config.js +26 -0
- package/dist/capacitor.config.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/communication.d.ts +192 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +418 -0
- package/dist/communication.js.map +1 -0
- package/dist/compute.d.ts +1161 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +2273 -0
- package/dist/compute.js.map +1 -0
- package/dist/distribution.d.ts +529 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +811 -0
- package/dist/distribution.js.map +1 -0
- package/dist/execution.d.ts +530 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +761 -0
- package/dist/execution.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +60 -0
- package/dist/format.js.map +1 -0
- package/dist/foundation.d.ts +176 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +309 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +733 -123
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -123
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +236 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +236 -0
- package/dist/integration.js.map +1 -0
- package/dist/intelligence.d.ts +94 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +145 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/{isolation/contracts.d.ts → isolation.d.ts} +12 -1
- package/dist/isolation.d.ts.map +1 -0
- package/dist/{isolation/contracts.js → isolation.js} +13 -1
- package/dist/isolation.js.map +1 -0
- package/dist/media.d.ts +344 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +986 -0
- package/dist/media.js.map +1 -0
- package/dist/modes.d.ts +359 -0
- package/dist/modes.d.ts.map +1 -0
- package/dist/modes.js +134 -0
- package/dist/modes.js.map +1 -0
- package/dist/{library/public.d.ts → operations.d.ts} +15 -1
- package/dist/operations.d.ts.map +1 -0
- package/dist/{library/public.js → operations.js} +18 -7
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator.d.ts +1339 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4308 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/performance.d.ts +416 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +827 -0
- package/dist/performance.js.map +1 -0
- package/dist/quantum.d.ts +810 -0
- package/dist/quantum.d.ts.map +1 -0
- package/dist/quantum.js +2073 -0
- package/dist/quantum.js.map +1 -0
- package/dist/render.d.ts +381 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1073 -0
- package/dist/render.js.map +1 -0
- package/dist/scheduler.d.ts +596 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +1259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +501 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +1170 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/{server/node.js → server.js} +16 -2
- package/dist/server.js.map +1 -0
- package/dist/tiers.d.ts +1002 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +2165 -0
- package/dist/tiers.js.map +1 -0
- package/dist/virtual.d.ts +641 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1285 -0
- package/dist/virtual.js.map +1 -0
- package/dist/virtualcpu.d.ts +316 -0
- package/dist/virtualcpu.d.ts.map +1 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualcpu.js.map +1 -0
- package/dist/virtualgpu.d.ts +345 -0
- package/dist/virtualgpu.d.ts.map +1 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualgpu.js.map +1 -0
- package/dist/virtualization.d.ts +607 -0
- package/dist/virtualization.d.ts.map +1 -0
- package/dist/virtualization.js +1187 -0
- package/dist/virtualization.js.map +1 -0
- package/dist/virtualmemory.d.ts +818 -0
- package/dist/virtualmemory.d.ts.map +1 -0
- package/dist/virtualmemory.js +1796 -0
- package/dist/virtualmemory.js.map +1 -0
- package/dist/webscrape.d.ts +720 -0
- package/dist/webscrape.d.ts.map +1 -0
- package/dist/webscrape.js +2697 -0
- package/dist/webscrape.js.map +1 -0
- package/docker.config +769 -0
- package/docs/CONVERSA.txt +1523 -0
- package/docs/alternatives.md +499 -0
- package/docs/architecture-1.8.19.md +76 -0
- package/docs/architecture-1.8.19.mmd +33 -0
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/architecture.md +355 -0
- package/docs/brancharchive-2026-08-18.md +18 -0
- package/docs/browser.md +7 -0
- package/docs/consolidation.md +70 -0
- package/docs/e2ugh-engine.md +528 -0
- package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
- package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
- package/docs/hardware.md +342 -0
- package/docs/optimization.md +126 -0
- package/docs/performance.md +499 -0
- package/docs/planning.1.8.18.md +94 -0
- package/docs/planning.1.8.19.md +49 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.18.md +12 -0
- package/docs/todo-1.8.19.md +241 -0
- package/docs/viability.md +777 -0
- package/docs/virtualization.md +335 -0
- package/docs/web-duplicatecleanup.md +9 -0
- package/docs/web-ideas.md +106 -0
- package/docs/workflowimprovements-2026-08-19.md +70 -0
- package/gpumonitor.cpp +1543 -0
- package/gpus.json +2408 -0
- package/index.ts +1478 -0
- package/media.ts +1337 -0
- package/mttg.config +1549 -0
- package/orchestrator.ts +5462 -0
- package/package.json +304 -56
- package/passage.config +1331 -0
- package/performance.ts +1049 -0
- package/processors.json +2217 -0
- package/qemu.config +1062 -0
- package/qemubridge.py +1340 -0
- package/quantum.ts +2393 -0
- package/render.ts +1325 -0
- package/scheduler.ts +1600 -0
- package/security.ts +1449 -0
- package/tiers.ts +2871 -0
- package/tsconfig.json +29 -0
- package/virtualcpu.ts +1273 -0
- package/virtualgpu.ts +1181 -0
- package/virtualhardware.c +1011 -0
- package/virtualhardware.json +739 -0
- package/virtualization.ts +1628 -0
- package/virtualizationcore.cpp +4635 -0
- package/virtualmemory.ts +2303 -0
- package/vm.config.json +1910 -0
- package/{extension → web/extension}/manifest.json +1 -1
- package/web/readme.md +382 -0
- package/web/tsconfig.json +25 -0
- package/dist/adapters/forge.d.ts +0 -17
- package/dist/adapters/forge.d.ts.map +0 -1
- package/dist/adapters/forge.js +0 -19
- package/dist/adapters/forge.js.map +0 -1
- package/dist/adapters/forgejo.d.ts +0 -49
- package/dist/adapters/forgejo.d.ts.map +0 -1
- package/dist/adapters/forgejo.js +0 -8
- package/dist/adapters/forgejo.js.map +0 -1
- package/dist/adapters/github.d.ts +0 -12
- package/dist/adapters/github.d.ts.map +0 -1
- package/dist/adapters/github.js +0 -20
- package/dist/adapters/github.js.map +0 -1
- package/dist/adapters/gitlab.d.ts +0 -17
- package/dist/adapters/gitlab.d.ts.map +0 -1
- package/dist/adapters/gitlab.js +0 -10
- package/dist/adapters/gitlab.js.map +0 -1
- package/dist/adapters/huggingface.d.ts +0 -17
- package/dist/adapters/huggingface.d.ts.map +0 -1
- package/dist/adapters/huggingface.js +0 -6
- package/dist/adapters/huggingface.js.map +0 -1
- package/dist/adapters/socket.d.ts +0 -11
- package/dist/adapters/socket.d.ts.map +0 -1
- package/dist/adapters/socket.js +0 -17
- package/dist/adapters/socket.js.map +0 -1
- package/dist/adapters/transport.d.ts +0 -7
- package/dist/adapters/transport.d.ts.map +0 -1
- package/dist/adapters/transport.js +0 -36
- package/dist/adapters/transport.js.map +0 -1
- package/dist/ai/chunk.d.ts +0 -2
- package/dist/ai/chunk.d.ts.map +0 -1
- package/dist/ai/chunk.js +0 -36
- package/dist/ai/chunk.js.map +0 -1
- package/dist/ai/llmstxt.d.ts +0 -6
- package/dist/ai/llmstxt.d.ts.map +0 -1
- package/dist/ai/llmstxt.js +0 -12
- package/dist/ai/llmstxt.js.map +0 -1
- package/dist/ai/provenance.d.ts +0 -22
- package/dist/ai/provenance.d.ts.map +0 -1
- package/dist/ai/provenance.js +0 -25
- package/dist/ai/provenance.js.map +0 -1
- package/dist/ai/rag.d.ts +0 -26
- package/dist/ai/rag.d.ts.map +0 -1
- package/dist/ai/rag.js +0 -22
- package/dist/ai/rag.js.map +0 -1
- package/dist/ai/tokens.d.ts +0 -15
- package/dist/ai/tokens.d.ts.map +0 -1
- package/dist/ai/tokens.js +0 -9
- package/dist/ai/tokens.js.map +0 -1
- package/dist/api/auth.d.ts +0 -16
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -19
- package/dist/api/auth.js.map +0 -1
- package/dist/api/contracts.d.ts +0 -28
- package/dist/api/contracts.d.ts.map +0 -1
- package/dist/api/contracts.js +0 -14
- package/dist/api/contracts.js.map +0 -1
- package/dist/api/control.d.ts +0 -10
- package/dist/api/control.d.ts.map +0 -1
- package/dist/api/control.js +0 -35
- package/dist/api/control.js.map +0 -1
- package/dist/api/http.d.ts +0 -7
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/api/http.js.map +0 -1
- package/dist/api/rate.d.ts +0 -28
- package/dist/api/rate.d.ts.map +0 -1
- package/dist/api/rate.js +0 -36
- package/dist/api/rate.js.map +0 -1
- package/dist/api/security.d.ts +0 -12
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -56
- package/dist/api/security.js.map +0 -1
- package/dist/api/service.d.ts +0 -5
- package/dist/api/service.d.ts.map +0 -1
- package/dist/api/service.js +0 -70
- package/dist/api/service.js.map +0 -1
- package/dist/apps/registry.d.ts +0 -33
- package/dist/apps/registry.d.ts.map +0 -1
- package/dist/apps/registry.js +0 -24
- package/dist/apps/registry.js.map +0 -1
- package/dist/binary/archive.d.ts +0 -27
- package/dist/binary/archive.d.ts.map +0 -1
- package/dist/binary/archive.js +0 -46
- package/dist/binary/archive.js.map +0 -1
- package/dist/binary/build.d.ts +0 -29
- package/dist/binary/build.d.ts.map +0 -1
- package/dist/binary/build.js +0 -17
- package/dist/binary/build.js.map +0 -1
- package/dist/binary/transform.d.ts +0 -70
- package/dist/binary/transform.d.ts.map +0 -1
- package/dist/binary/transform.js +0 -105
- package/dist/binary/transform.js.map +0 -1
- package/dist/bot/adapter.d.ts +0 -5
- package/dist/bot/adapter.d.ts.map +0 -1
- package/dist/bot/adapter.js +0 -11
- package/dist/bot/adapter.js.map +0 -1
- package/dist/bot/bot.d.ts +0 -28
- package/dist/bot/bot.d.ts.map +0 -1
- package/dist/bot/bot.js +0 -52
- package/dist/bot/bot.js.map +0 -1
- package/dist/bot/commands.d.ts +0 -8
- package/dist/bot/commands.d.ts.map +0 -1
- package/dist/bot/commands.js +0 -19
- package/dist/bot/commands.js.map +0 -1
- package/dist/bot/permissions.d.ts +0 -13
- package/dist/bot/permissions.d.ts.map +0 -1
- package/dist/bot/permissions.js +0 -16
- package/dist/bot/permissions.js.map +0 -1
- package/dist/browser/actions.d.ts +0 -33
- package/dist/browser/actions.d.ts.map +0 -1
- package/dist/browser/actions.js +0 -44
- package/dist/browser/actions.js.map +0 -1
- package/dist/browser/agent.d.ts +0 -21
- package/dist/browser/agent.d.ts.map +0 -1
- package/dist/browser/agent.js +0 -13
- package/dist/browser/agent.js.map +0 -1
- package/dist/browser/context.d.ts +0 -43
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js +0 -54
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/fingerprint.d.ts +0 -4
- package/dist/browser/fingerprint.d.ts.map +0 -1
- package/dist/browser/fingerprint.js +0 -12
- package/dist/browser/fingerprint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -11
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -11
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/playwright.d.ts +0 -11
- package/dist/browser/playwright.d.ts.map +0 -1
- package/dist/browser/playwright.js +0 -24
- package/dist/browser/playwright.js.map +0 -1
- package/dist/browser/recorder.d.ts +0 -21
- package/dist/browser/recorder.d.ts.map +0 -1
- package/dist/browser/recorder.js +0 -58
- package/dist/browser/recorder.js.map +0 -1
- package/dist/browser/session.d.ts +0 -14
- package/dist/browser/session.d.ts.map +0 -1
- package/dist/browser/session.js +0 -21
- package/dist/browser/session.js.map +0 -1
- package/dist/browser/snapshot.d.ts +0 -69
- package/dist/browser/snapshot.d.ts.map +0 -1
- package/dist/browser/snapshot.js +0 -133
- package/dist/browser/snapshot.js.map +0 -1
- package/dist/captcha/contract.d.ts +0 -35
- package/dist/captcha/contract.d.ts.map +0 -1
- package/dist/captcha/contract.js +0 -17
- package/dist/captcha/contract.js.map +0 -1
- package/dist/captcha/evidence.d.ts +0 -10
- package/dist/captcha/evidence.d.ts.map +0 -1
- package/dist/captcha/evidence.js +0 -9
- package/dist/captcha/evidence.js.map +0 -1
- package/dist/captcha/guard.d.ts +0 -23
- package/dist/captcha/guard.d.ts.map +0 -1
- package/dist/captcha/guard.js +0 -12
- package/dist/captcha/guard.js.map +0 -1
- package/dist/cli/main.d.ts +0 -4
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -46
- package/dist/cli/main.js.map +0 -1
- package/dist/core/errors.d.ts +0 -84
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -54
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events.d.ts +0 -9
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -21
- package/dist/core/events.js.map +0 -1
- package/dist/core/hash.d.ts +0 -10
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -82
- package/dist/core/hash.js.map +0 -1
- package/dist/core/ids.d.ts +0 -10
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -15
- package/dist/core/ids.js.map +0 -1
- package/dist/delivery/manifest.d.ts +0 -35
- package/dist/delivery/manifest.d.ts.map +0 -1
- package/dist/delivery/manifest.js +0 -68
- package/dist/delivery/manifest.js.map +0 -1
- package/dist/deploy/index.d.ts +0 -6
- package/dist/deploy/index.d.ts.map +0 -1
- package/dist/deploy/index.js +0 -6
- package/dist/deploy/index.js.map +0 -1
- package/dist/dispatch/resumable.d.ts +0 -102
- package/dist/dispatch/resumable.d.ts.map +0 -1
- package/dist/dispatch/resumable.js +0 -64
- package/dist/dispatch/resumable.js.map +0 -1
- package/dist/dispatch/workflow.d.ts +0 -6
- package/dist/dispatch/workflow.d.ts.map +0 -1
- package/dist/dispatch/workflow.js +0 -37
- package/dist/dispatch/workflow.js.map +0 -1
- package/dist/domain/artifacts.d.ts +0 -12
- package/dist/domain/artifacts.d.ts.map +0 -1
- package/dist/domain/artifacts.js +0 -14
- package/dist/domain/artifacts.js.map +0 -1
- package/dist/domain/jobs.d.ts +0 -12
- package/dist/domain/jobs.d.ts.map +0 -1
- package/dist/domain/jobs.js +0 -20
- package/dist/domain/jobs.js.map +0 -1
- package/dist/domain/providers.d.ts +0 -10
- package/dist/domain/providers.d.ts.map +0 -1
- package/dist/domain/providers.js +0 -8
- package/dist/domain/providers.js.map +0 -1
- package/dist/domain/runtime.d.ts +0 -14
- package/dist/domain/runtime.d.ts.map +0 -1
- package/dist/domain/runtime.js +0 -10
- package/dist/domain/runtime.js.map +0 -1
- package/dist/domain/sessions.d.ts +0 -12
- package/dist/domain/sessions.d.ts.map +0 -1
- package/dist/domain/sessions.js +0 -57
- package/dist/domain/sessions.js.map +0 -1
- package/dist/examples/localjob.d.ts +0 -2
- package/dist/examples/localjob.d.ts.map +0 -1
- package/dist/examples/localjob.js.map +0 -1
- package/dist/examples/publicapi.d.ts +0 -2
- package/dist/examples/publicapi.d.ts.map +0 -1
- package/dist/examples/publicapi.js.map +0 -1
- package/dist/extension/build.d.ts +0 -9
- package/dist/extension/build.d.ts.map +0 -1
- package/dist/extension/build.js +0 -85
- package/dist/extension/build.js.map +0 -1
- package/dist/extension/content.d.ts +0 -6
- package/dist/extension/content.d.ts.map +0 -1
- package/dist/extension/content.js +0 -135
- package/dist/extension/content.js.map +0 -1
- package/dist/extension/index.d.ts +0 -7
- package/dist/extension/index.d.ts.map +0 -1
- package/dist/extension/index.js +0 -7
- package/dist/extension/index.js.map +0 -1
- package/dist/extension/pagebridge.d.ts +0 -6
- package/dist/extension/pagebridge.d.ts.map +0 -1
- package/dist/extension/pagebridge.js +0 -42
- package/dist/extension/pagebridge.js.map +0 -1
- package/dist/extension/permissions.d.ts +0 -26
- package/dist/extension/permissions.d.ts.map +0 -1
- package/dist/extension/permissions.js +0 -28
- package/dist/extension/permissions.js.map +0 -1
- package/dist/extension/popup.d.ts +0 -5
- package/dist/extension/popup.d.ts.map +0 -1
- package/dist/extension/popup.js +0 -26
- package/dist/extension/popup.js.map +0 -1
- package/dist/extension/protocol.d.ts +0 -58
- package/dist/extension/protocol.d.ts.map +0 -1
- package/dist/extension/protocol.js +0 -101
- package/dist/extension/protocol.js.map +0 -1
- package/dist/extension/serviceworker.d.ts +0 -25
- package/dist/extension/serviceworker.d.ts.map +0 -1
- package/dist/extension/serviceworker.js +0 -102
- package/dist/extension/serviceworker.js.map +0 -1
- package/dist/extension/worker.d.ts +0 -28
- package/dist/extension/worker.d.ts.map +0 -1
- package/dist/extension/worker.js +0 -22
- package/dist/extension/worker.js.map +0 -1
- package/dist/format/check.d.ts +0 -8
- package/dist/format/check.d.ts.map +0 -1
- package/dist/format/check.js +0 -38
- package/dist/format/check.js.map +0 -1
- package/dist/isolation/contracts.d.ts.map +0 -1
- package/dist/isolation/contracts.js.map +0 -1
- package/dist/library/public.d.ts.map +0 -1
- package/dist/library/public.js.map +0 -1
- package/dist/mcp/browser.d.ts +0 -9
- package/dist/mcp/browser.d.ts.map +0 -1
- package/dist/mcp/browser.js +0 -13
- package/dist/mcp/browser.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -35
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -40
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -7
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -17
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/bridge.d.ts +0 -14
- package/dist/memory/bridge.d.ts.map +0 -1
- package/dist/memory/bridge.js +0 -16
- package/dist/memory/bridge.js.map +0 -1
- package/dist/memory/engine.d.ts +0 -38
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -109
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/modes.d.ts +0 -43
- package/dist/memory/modes.d.ts.map +0 -1
- package/dist/memory/modes.js +0 -66
- package/dist/memory/modes.js.map +0 -1
- package/dist/memory/objects.d.ts +0 -21
- package/dist/memory/objects.d.ts.map +0 -1
- package/dist/memory/objects.js +0 -20
- package/dist/memory/objects.js.map +0 -1
- package/dist/memory/planner.d.ts +0 -66
- package/dist/memory/planner.d.ts.map +0 -1
- package/dist/memory/planner.js +0 -108
- package/dist/memory/planner.js.map +0 -1
- package/dist/memory/targets.d.ts +0 -78
- package/dist/memory/targets.d.ts.map +0 -1
- package/dist/memory/targets.js +0 -29
- package/dist/memory/targets.js.map +0 -1
- package/dist/memory/transforms.d.ts +0 -19
- package/dist/memory/transforms.d.ts.map +0 -1
- package/dist/memory/transforms.js +0 -14
- package/dist/memory/transforms.js.map +0 -1
- package/dist/modes/matrix.d.ts +0 -23
- package/dist/modes/matrix.d.ts.map +0 -1
- package/dist/modes/matrix.js +0 -18
- package/dist/modes/matrix.js.map +0 -1
- package/dist/modes/modes.d.ts +0 -33
- package/dist/modes/modes.d.ts.map +0 -1
- package/dist/modes/modes.js +0 -15
- package/dist/modes/modes.js.map +0 -1
- package/dist/modes/resolve.d.ts +0 -96
- package/dist/modes/resolve.d.ts.map +0 -1
- package/dist/modes/resolve.js +0 -48
- package/dist/modes/resolve.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -14
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -18
- package/dist/observability/metrics.js.map +0 -1
- package/dist/packager/manifest.d.ts +0 -66
- package/dist/packager/manifest.d.ts.map +0 -1
- package/dist/packager/manifest.js +0 -94
- package/dist/packager/manifest.js.map +0 -1
- package/dist/packager/publish.d.ts +0 -51
- package/dist/packager/publish.d.ts.map +0 -1
- package/dist/packager/publish.js +0 -18
- package/dist/packager/publish.js.map +0 -1
- package/dist/packager/targetcli.d.ts +0 -7
- package/dist/packager/targetcli.d.ts.map +0 -1
- package/dist/packager/targetcli.js +0 -22
- package/dist/packager/targetcli.js.map +0 -1
- package/dist/persistence/adapter.d.ts +0 -5
- package/dist/persistence/adapter.d.ts.map +0 -1
- package/dist/persistence/adapter.js +0 -11
- package/dist/persistence/adapter.js.map +0 -1
- package/dist/persistence/drizzle.d.ts +0 -2
- package/dist/persistence/drizzle.d.ts.map +0 -1
- package/dist/persistence/drizzle.js +0 -12
- package/dist/persistence/drizzle.js.map +0 -1
- package/dist/persistence/memory.d.ts +0 -2
- package/dist/persistence/memory.d.ts.map +0 -1
- package/dist/persistence/memory.js +0 -27
- package/dist/persistence/memory.js.map +0 -1
- package/dist/persistence/migrations.d.ts +0 -19
- package/dist/persistence/migrations.d.ts.map +0 -1
- package/dist/persistence/migrations.js +0 -13
- package/dist/persistence/migrations.js.map +0 -1
- package/dist/persistence/prisma.d.ts +0 -2
- package/dist/persistence/prisma.d.ts.map +0 -1
- package/dist/persistence/prisma.js +0 -25
- package/dist/persistence/prisma.js.map +0 -1
- package/dist/persistence/schema.d.ts +0 -63
- package/dist/persistence/schema.d.ts.map +0 -1
- package/dist/persistence/schema.js +0 -28
- package/dist/persistence/schema.js.map +0 -1
- package/dist/persistence/sql.d.ts +0 -3
- package/dist/persistence/sql.d.ts.map +0 -1
- package/dist/persistence/sql.js +0 -37
- package/dist/persistence/sql.js.map +0 -1
- package/dist/protocol/blocks.d.ts +0 -10
- package/dist/protocol/blocks.d.ts.map +0 -1
- package/dist/protocol/blocks.js +0 -26
- package/dist/protocol/blocks.js.map +0 -1
- package/dist/protocol/json.d.ts +0 -6
- package/dist/protocol/json.d.ts.map +0 -1
- package/dist/protocol/json.js +0 -6
- package/dist/protocol/json.js.map +0 -1
- package/dist/protocol/ndjson.d.ts +0 -3
- package/dist/protocol/ndjson.d.ts.map +0 -1
- package/dist/protocol/ndjson.js +0 -20
- package/dist/protocol/ndjson.js.map +0 -1
- package/dist/protocol/sse.d.ts +0 -7
- package/dist/protocol/sse.d.ts.map +0 -1
- package/dist/protocol/sse.js +0 -25
- package/dist/protocol/sse.js.map +0 -1
- package/dist/proxy/pool.d.ts +0 -9
- package/dist/proxy/pool.d.ts.map +0 -1
- package/dist/proxy/pool.js +0 -27
- package/dist/proxy/pool.js.map +0 -1
- package/dist/queue/idempotency.d.ts +0 -10
- package/dist/queue/idempotency.d.ts.map +0 -1
- package/dist/queue/idempotency.js +0 -13
- package/dist/queue/idempotency.js.map +0 -1
- package/dist/queue/persistent.d.ts +0 -14
- package/dist/queue/persistent.d.ts.map +0 -1
- package/dist/queue/persistent.js +0 -66
- package/dist/queue/persistent.js.map +0 -1
- package/dist/queue/queue.d.ts +0 -7
- package/dist/queue/queue.d.ts.map +0 -1
- package/dist/queue/queue.js +0 -55
- package/dist/queue/queue.js.map +0 -1
- package/dist/queue/saga.d.ts +0 -5
- package/dist/queue/saga.d.ts.map +0 -1
- package/dist/queue/saga.js +0 -20
- package/dist/queue/saga.js.map +0 -1
- package/dist/release/assets.d.ts +0 -144
- package/dist/release/assets.d.ts.map +0 -1
- package/dist/release/assets.js +0 -157
- package/dist/release/assets.js.map +0 -1
- package/dist/release/evidence.d.ts +0 -92
- package/dist/release/evidence.d.ts.map +0 -1
- package/dist/release/evidence.js +0 -148
- package/dist/release/evidence.js.map +0 -1
- package/dist/release/verify.d.ts +0 -12
- package/dist/release/verify.d.ts.map +0 -1
- package/dist/release/verify.js +0 -112
- package/dist/release/verify.js.map +0 -1
- package/dist/runners/chain.d.ts +0 -125
- package/dist/runners/chain.d.ts.map +0 -1
- package/dist/runners/chain.js +0 -95
- package/dist/runners/chain.js.map +0 -1
- package/dist/runners/health.d.ts +0 -36
- package/dist/runners/health.d.ts.map +0 -1
- package/dist/runners/health.js +0 -26
- package/dist/runners/health.js.map +0 -1
- package/dist/runners/heartbeat.d.ts +0 -23
- package/dist/runners/heartbeat.d.ts.map +0 -1
- package/dist/runners/heartbeat.js +0 -29
- package/dist/runners/heartbeat.js.map +0 -1
- package/dist/runners/inprocess.d.ts +0 -17
- package/dist/runners/inprocess.d.ts.map +0 -1
- package/dist/runners/inprocess.js +0 -20
- package/dist/runners/inprocess.js.map +0 -1
- package/dist/runners/scheduler.d.ts +0 -5
- package/dist/runners/scheduler.d.ts.map +0 -1
- package/dist/runners/scheduler.js +0 -19
- package/dist/runners/scheduler.js.map +0 -1
- package/dist/runtime/abort.d.ts +0 -8
- package/dist/runtime/abort.d.ts.map +0 -1
- package/dist/runtime/abort.js +0 -13
- package/dist/runtime/abort.js.map +0 -1
- package/dist/runtime/compatibility.d.ts +0 -37
- package/dist/runtime/compatibility.d.ts.map +0 -1
- package/dist/runtime/compatibility.js +0 -10
- package/dist/runtime/compatibility.js.map +0 -1
- package/dist/runtime/detect.d.ts +0 -13
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/detect.js +0 -18
- package/dist/runtime/detect.js.map +0 -1
- package/dist/runtime/engine.d.ts +0 -20
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/engine.js +0 -61
- package/dist/runtime/engine.js.map +0 -1
- package/dist/runtime/retry.d.ts +0 -19
- package/dist/runtime/retry.d.ts.map +0 -1
- package/dist/runtime/retry.js +0 -54
- package/dist/runtime/retry.js.map +0 -1
- package/dist/runtime/worker.d.ts +0 -10
- package/dist/runtime/worker.d.ts.map +0 -1
- package/dist/runtime/worker.js +0 -25
- package/dist/runtime/worker.js.map +0 -1
- package/dist/scrape/cache.d.ts +0 -45
- package/dist/scrape/cache.d.ts.map +0 -1
- package/dist/scrape/cache.js +0 -45
- package/dist/scrape/cache.js.map +0 -1
- package/dist/scrape/crawl.d.ts +0 -47
- package/dist/scrape/crawl.d.ts.map +0 -1
- package/dist/scrape/crawl.js +0 -114
- package/dist/scrape/crawl.js.map +0 -1
- package/dist/scrape/extract.d.ts +0 -63
- package/dist/scrape/extract.d.ts.map +0 -1
- package/dist/scrape/extract.js +0 -47
- package/dist/scrape/extract.js.map +0 -1
- package/dist/scrape/normalize.d.ts +0 -52
- package/dist/scrape/normalize.d.ts.map +0 -1
- package/dist/scrape/normalize.js +0 -102
- package/dist/scrape/normalize.js.map +0 -1
- package/dist/scrape/robots.d.ts +0 -37
- package/dist/scrape/robots.d.ts.map +0 -1
- package/dist/scrape/robots.js +0 -71
- package/dist/scrape/robots.js.map +0 -1
- package/dist/scrape/schema.d.ts +0 -23
- package/dist/scrape/schema.d.ts.map +0 -1
- package/dist/scrape/schema.js +0 -92
- package/dist/scrape/schema.js.map +0 -1
- package/dist/scrape/scraper.d.ts +0 -6
- package/dist/scrape/scraper.d.ts.map +0 -1
- package/dist/scrape/scraper.js +0 -46
- package/dist/scrape/scraper.js.map +0 -1
- package/dist/scrape/semantic.d.ts +0 -25
- package/dist/scrape/semantic.d.ts.map +0 -1
- package/dist/scrape/semantic.js +0 -27
- package/dist/scrape/semantic.js.map +0 -1
- package/dist/server/node.d.ts +0 -7
- package/dist/server/node.d.ts.map +0 -1
- package/dist/server/node.js.map +0 -1
- package/dist/sessions/file.d.ts +0 -25
- package/dist/sessions/file.d.ts.map +0 -1
- package/dist/sessions/file.js +0 -13
- package/dist/sessions/file.js.map +0 -1
- package/dist/sessions/replay.d.ts +0 -9
- package/dist/sessions/replay.d.ts.map +0 -1
- package/dist/sessions/replay.js +0 -70
- package/dist/sessions/replay.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -25
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -13
- package/dist/sessions/store.js.map +0 -1
- package/dist/storage/adapter.d.ts +0 -5
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js +0 -11
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/cache.d.ts +0 -23
- package/dist/storage/cache.d.ts.map +0 -1
- package/dist/storage/cache.js +0 -79
- package/dist/storage/cache.js.map +0 -1
- package/dist/storage/checksum.d.ts +0 -3
- package/dist/storage/checksum.d.ts.map +0 -1
- package/dist/storage/checksum.js +0 -19
- package/dist/storage/checksum.js.map +0 -1
- package/dist/storage/chunked.d.ts +0 -21
- package/dist/storage/chunked.d.ts.map +0 -1
- package/dist/storage/chunked.js +0 -67
- package/dist/storage/chunked.js.map +0 -1
- package/dist/storage/content.d.ts +0 -24
- package/dist/storage/content.d.ts.map +0 -1
- package/dist/storage/content.js +0 -44
- package/dist/storage/content.js.map +0 -1
- package/dist/storage/filehosting.d.ts +0 -2
- package/dist/storage/filehosting.d.ts.map +0 -1
- package/dist/storage/filehosting.js +0 -24
- package/dist/storage/filehosting.js.map +0 -1
- package/dist/storage/githubcontents.d.ts +0 -2
- package/dist/storage/githubcontents.d.ts.map +0 -1
- package/dist/storage/githubcontents.js +0 -29
- package/dist/storage/githubcontents.js.map +0 -1
- package/dist/storage/index.d.ts +0 -12
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -12
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/local.d.ts +0 -2
- package/dist/storage/local.d.ts.map +0 -1
- package/dist/storage/local.js +0 -72
- package/dist/storage/local.js.map +0 -1
- package/dist/storage/memory.d.ts +0 -6
- package/dist/storage/memory.d.ts.map +0 -1
- package/dist/storage/memory.js +0 -36
- package/dist/storage/memory.js.map +0 -1
- package/dist/storage/pool.d.ts +0 -95
- package/dist/storage/pool.d.ts.map +0 -1
- package/dist/storage/pool.js +0 -202
- package/dist/storage/pool.js.map +0 -1
- package/dist/storage/s3compatible.d.ts +0 -3
- package/dist/storage/s3compatible.d.ts.map +0 -1
- package/dist/storage/s3compatible.js +0 -70
- package/dist/storage/s3compatible.js.map +0 -1
- package/dist/storage/sync.d.ts +0 -47
- package/dist/storage/sync.d.ts.map +0 -1
- package/dist/storage/sync.js +0 -75
- package/dist/storage/sync.js.map +0 -1
- package/dist/surfaces/adapters.d.ts +0 -97
- package/dist/surfaces/adapters.d.ts.map +0 -1
- package/dist/surfaces/adapters.js +0 -50
- package/dist/surfaces/adapters.js.map +0 -1
- package/dist/surfaces/controls.d.ts +0 -18
- package/dist/surfaces/controls.d.ts.map +0 -1
- package/dist/surfaces/controls.js +0 -45
- package/dist/surfaces/controls.js.map +0 -1
- package/dist/surfaces/manifest.d.ts +0 -68
- package/dist/surfaces/manifest.d.ts.map +0 -1
- package/dist/surfaces/manifest.js +0 -42
- package/dist/surfaces/manifest.js.map +0 -1
- package/dist/surfaces/n8n.d.ts +0 -25
- package/dist/surfaces/n8n.d.ts.map +0 -1
- package/dist/surfaces/n8n.js +0 -31
- package/dist/surfaces/n8n.js.map +0 -1
- package/dist/surfaces/operations.d.ts +0 -32
- package/dist/surfaces/operations.d.ts.map +0 -1
- package/dist/surfaces/operations.js +0 -53
- package/dist/surfaces/operations.js.map +0 -1
- package/dist/surfaces/requirements.d.ts +0 -29
- package/dist/surfaces/requirements.d.ts.map +0 -1
- package/dist/surfaces/requirements.js +0 -50
- package/dist/surfaces/requirements.js.map +0 -1
- package/dist/surfaces/targets.d.ts +0 -196
- package/dist/surfaces/targets.d.ts.map +0 -1
- package/dist/surfaces/targets.js +0 -27
- package/dist/surfaces/targets.js.map +0 -1
- package/dist/webhook/delivery.d.ts +0 -18
- package/dist/webhook/delivery.d.ts.map +0 -1
- package/dist/webhook/delivery.js +0 -36
- package/dist/webhook/delivery.js.map +0 -1
- package/dist/webhook/receiver.d.ts +0 -26
- package/dist/webhook/receiver.d.ts.map +0 -1
- package/dist/webhook/receiver.js +0 -24
- package/dist/webhook/receiver.js.map +0 -1
- package/dist/webhook/signature.d.ts +0 -3
- package/dist/webhook/signature.d.ts.map +0 -1
- package/dist/webhook/signature.js +0 -7
- package/dist/webhook/signature.js.map +0 -1
- package/dist/workflow/manifest.d.ts +0 -22
- package/dist/workflow/manifest.d.ts.map +0 -1
- package/dist/workflow/manifest.js +0 -21
- package/dist/workflow/manifest.js.map +0 -1
- package/dist/workflow/registry.d.ts +0 -7
- package/dist/workflow/registry.d.ts.map +0 -1
- package/dist/workflow/registry.js +0 -18
- package/dist/workflow/registry.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -6
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -18
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/triggers.d.ts +0 -64
- package/dist/workflow/triggers.d.ts.map +0 -1
- package/dist/workflow/triggers.js +0 -99
- package/dist/workflow/triggers.js.map +0 -1
- /package/{extension/README.md → docs/extension.md} +0 -0
package/dist/media.js
ADDED
|
@@ -0,0 +1,986 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* media.ts — media pipeline and transcode domain for saddle v6.
|
|
3
|
+
*
|
|
4
|
+
* the module absorbs the media-facing halves of the pool
|
|
5
|
+
* pipelinememorypassage.ts (saddle v6 orchestrator) and
|
|
6
|
+
* src_pipeline_memory_passage.ts (saddle v5 mttg pipeline) that were
|
|
7
|
+
* still unique after the v3 consolidation:
|
|
8
|
+
* - the 24-stage GPU-accelerated transcode pipeline as a pure catalog
|
|
9
|
+
* plus an executing pipeline (stage ordering, skip rules, fail-fast,
|
|
10
|
+
* abort, chunked batch concurrency, stage-count invariant 24)
|
|
11
|
+
* - ffmpeg 7.1 NVENC Blackwell command synthesis: presets p1-p7, rc
|
|
12
|
+
* vbr_hq with cq 23, multipass 2, b_ref_mode 2 (b-frames as
|
|
13
|
+
* reference), temporal aq with rc-lookahead 32, bwdif_cuda,
|
|
14
|
+
* scale_cuda super, tonemap_cuda hable/bt2390 with colorspace_cuda
|
|
15
|
+
* bt2020->bt709, av1 tier high
|
|
16
|
+
* - the createoptimal encoder policy of the pool encoding optimization
|
|
17
|
+
* manager: AV1 at 4K+ forces the Blackwell dual NVENC path, h264
|
|
18
|
+
* ultra-low-latency prefers QuickSync, plus the preset recommender
|
|
19
|
+
* (ultra low latency p1, low latency p2, live p3, vod av1 p5, vod
|
|
20
|
+
* hevc p6, default p4) and the per-gpu instance recommender
|
|
21
|
+
* - the passage secure channel contract: transport vsock+virtio-serial,
|
|
22
|
+
* ed25519 signatures over chacha20-poly1305 sealed frames, MTU
|
|
23
|
+
* 65536, 10000 Mbps rate limit, 256 concurrent streams, 150 us
|
|
24
|
+
* latency target
|
|
25
|
+
* - the ~30 transcode mode taxonomy of the library-first surface
|
|
26
|
+
*
|
|
27
|
+
* the memory-modularizer half of the same pool files (zram, hugepages,
|
|
28
|
+
* CXL type-3 tiering, CCD-aware vCPU pinning) is already absorbed in
|
|
29
|
+
* virtualmemory.ts (memorymodularizer) and is intentionally not
|
|
30
|
+
* duplicated here; the pipeline consumes a plan digest only.
|
|
31
|
+
*
|
|
32
|
+
* provenance: pool:pipelinememorypassage.ts [S6 v6, 24 stages],
|
|
33
|
+
* pool:src_pipeline_memory_passage.ts [V5 src_mttg_pipeline ordering],
|
|
34
|
+
* pool:mttg.config transcode section (ffmpeg 7.1.1, nvenc sdk 13.0.19),
|
|
35
|
+
* pool:src_virtualization_core.cpp create_optimal (encoder policy).
|
|
36
|
+
*
|
|
37
|
+
* rules: lowercase identifiers, english jsdoc third person, no emoji,
|
|
38
|
+
* try/catch catcher on every fallible path, node:* built-ins first,
|
|
39
|
+
* zero runtime dependencies, `satisfies`/`#private` throughout, no
|
|
40
|
+
* filesystem or process coupling (pure library).
|
|
41
|
+
*/
|
|
42
|
+
import { createHash, sign as cryptosign, verify as cryptoverify, generateKeyPairSync, } from 'node:crypto';
|
|
43
|
+
import { chachaopen, chachaseal } from './security.js';
|
|
44
|
+
/* ------------------------------------------------------------------ */
|
|
45
|
+
/* context: version anchors (media toolchain, date-first 2026-08-22) */
|
|
46
|
+
/* ------------------------------------------------------------------ */
|
|
47
|
+
/**
|
|
48
|
+
* frozen media toolchain anchors. the pool registry pinned node 22.12.3
|
|
49
|
+
* / ts 5.6.3 / qemu 9.1.2 which the v3 pin patch superseded; the media
|
|
50
|
+
* specific values (ffmpeg release line, NVENC SDK, CUDA floor, Blackwell
|
|
51
|
+
* driver) are preserved verbatim from the pool registry.
|
|
52
|
+
*/
|
|
53
|
+
export const mediaversions = {
|
|
54
|
+
date: '2026-08-22',
|
|
55
|
+
ffmpeg: '7.1.1',
|
|
56
|
+
ffmpegNote: '7.1 released 2024-09-30; 7.1.1 is the 2026-08-22 stable',
|
|
57
|
+
nvencSdk: '13.0.19',
|
|
58
|
+
nvencGeneration: 9,
|
|
59
|
+
nvdecGeneration: 6,
|
|
60
|
+
cuda: '12.8',
|
|
61
|
+
cudaNote: 'Blackwell GB202 requires >= 12.8; pool registry cited 12.8.93 with an early 13.0.48 alt',
|
|
62
|
+
driver: '580.82.07',
|
|
63
|
+
driverNote: 'production branch for Blackwell + NVENC SDK 13.0; repo also carries 570.144 vgpu-manual anchors',
|
|
64
|
+
stages: 24,
|
|
65
|
+
modes: 30,
|
|
66
|
+
};
|
|
67
|
+
/* ------------------------------------------------------------------ */
|
|
68
|
+
/* context: error catcher (typed envelope for every stage failure) */
|
|
69
|
+
/* ------------------------------------------------------------------ */
|
|
70
|
+
/** media pipeline failure envelope with stage and recoverability. */
|
|
71
|
+
export class mediapipelineerror extends Error {
|
|
72
|
+
code;
|
|
73
|
+
stage;
|
|
74
|
+
recoverable;
|
|
75
|
+
traceid;
|
|
76
|
+
constructor(params) {
|
|
77
|
+
super(params.message);
|
|
78
|
+
this.name = 'mediapipelineerror';
|
|
79
|
+
this.code = params.code;
|
|
80
|
+
this.stage = params.stage;
|
|
81
|
+
this.recoverable = params.recoverable ?? false;
|
|
82
|
+
this.traceid = createHash('sha256')
|
|
83
|
+
.update(`${params.code}:${params.stage ?? 'pipeline'}:${params.message}`)
|
|
84
|
+
.digest('hex')
|
|
85
|
+
.slice(0, 8);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** ordered preset ladder from fastest to highest quality. */
|
|
89
|
+
export const nvencpresetladder = ['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7'];
|
|
90
|
+
/** per-preset character used by the ffmpeg builder and the recommender. */
|
|
91
|
+
export const nvencpresets = [
|
|
92
|
+
{
|
|
93
|
+
preset: 'p1',
|
|
94
|
+
speed: 10,
|
|
95
|
+
multipass: 'disabled',
|
|
96
|
+
use: 'fastest, low-latency preview and thumbnails',
|
|
97
|
+
},
|
|
98
|
+
{ preset: 'p2', speed: 8, multipass: 'disabled', use: 'faster, ultra-low-latency conferencing' },
|
|
99
|
+
{ preset: 'p3', speed: 6, multipass: 'qres', use: 'fast, live av1 with tight slice budgets' },
|
|
100
|
+
{ preset: 'p4', speed: 4, multipass: 'qres', use: 'balanced default for 2026 vod ladders' },
|
|
101
|
+
{ preset: 'p5', speed: 3, multipass: 'qres', use: 'slow, hls 1080p anchor of mttg.config' },
|
|
102
|
+
{ preset: 'p6', speed: 2, multipass: 'fullres', use: 'slower, vod hevc mezzanine' },
|
|
103
|
+
{ preset: 'p7', speed: 1, multipass: 'fullres', use: 'highest quality 2-pass, creator 4k av1' },
|
|
104
|
+
];
|
|
105
|
+
/** resolves one preset descriptor or undefined when out of ladder. */
|
|
106
|
+
export function getnvencpreset(preset) {
|
|
107
|
+
return nvencpresets.find((entry) => entry.preset === preset);
|
|
108
|
+
}
|
|
109
|
+
/** the 30-mode catalog in taxonomy order. */
|
|
110
|
+
export const transcodemodecatalog = [
|
|
111
|
+
{
|
|
112
|
+
mode: 'hevc_to_av1_b200',
|
|
113
|
+
family: 'codec-conversion',
|
|
114
|
+
note: 'Blackwell HBM transcoding anchor',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
mode: 'avc_to_hevc_blackwell',
|
|
118
|
+
family: 'codec-conversion',
|
|
119
|
+
note: 'nvenc hevc main10 with b-frames as reference',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
mode: 'av1_to_hevc_hdr',
|
|
123
|
+
family: 'codec-conversion',
|
|
124
|
+
note: 'distribution transcode keeping hdr10 metadata',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
mode: 'hevc_hdr_to_av1_sdr_tonemap',
|
|
128
|
+
family: 'hdr-tonemap',
|
|
129
|
+
note: 'demo mode of the pool orchestrator',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
mode: 'av1_8k_to_4k_blackwell',
|
|
133
|
+
family: 'scale',
|
|
134
|
+
note: '8192x4320 mezzanine downscale, pro6000 96GB anchor',
|
|
135
|
+
},
|
|
136
|
+
{ mode: '4k_to_1080p_nvenc', family: 'scale', note: 'creator ladder step' },
|
|
137
|
+
{ mode: '4k_to_720p_mobile', family: 'scale', note: 'mobile ladder step' },
|
|
138
|
+
{
|
|
139
|
+
mode: 'dash_hls_packaging',
|
|
140
|
+
family: 'packaging',
|
|
141
|
+
note: 'frag_keyframe + faststart + dash hls manifests',
|
|
142
|
+
},
|
|
143
|
+
{ mode: 'remux_fast', family: 'packaging', note: 'container copy without re-encode' },
|
|
144
|
+
{ mode: 'audio_only_aac_opus', family: 'audio', note: 'ccd1 threads, loudnorm EBU R128' },
|
|
145
|
+
{
|
|
146
|
+
mode: 'hdr10plus_dolbyvision_passthrough',
|
|
147
|
+
family: 'hdr-tonemap',
|
|
148
|
+
note: 'metadata copy without tone mapping',
|
|
149
|
+
},
|
|
150
|
+
{ mode: 'tonemap_hable_cuda', family: 'hdr-tonemap', note: 'hable curve on cuda frames' },
|
|
151
|
+
{ mode: 'tonemap_mobius_cuda', family: 'hdr-tonemap', note: 'mobius curve, bright highlights' },
|
|
152
|
+
{ mode: 'tonemap_reinhard_cuda', family: 'hdr-tonemap', note: 'reinhard curve, soft roll-off' },
|
|
153
|
+
{
|
|
154
|
+
mode: 'deinterlace_bwdif_cuda',
|
|
155
|
+
family: 'filters',
|
|
156
|
+
note: 'bwdif_cuda=0:-1:0, skipped when progressive',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
mode: 'denoise_hqdn3d_cuda',
|
|
160
|
+
family: 'filters',
|
|
161
|
+
note: 'hqdn3d tuned for CCD0 V-Cache locality',
|
|
162
|
+
},
|
|
163
|
+
{ mode: 'scale_npp_bicubic', family: 'scale', note: 'npp bicubic interpolation' },
|
|
164
|
+
{ mode: 'scale_npp_lanczos', family: 'scale', note: 'npp lanczos, sharpest downscale' },
|
|
165
|
+
{ mode: 'subburn_ass_cuda', family: 'filters', note: 'ass burn when subtitle path present' },
|
|
166
|
+
{ mode: 'thumbnail_vmaf', family: 'quality-metrics', note: 'thumbnail=50 plus vmaf probe' },
|
|
167
|
+
{ mode: 'vmaf_target_95', family: 'quality-metrics', note: 'highest vmaf target' },
|
|
168
|
+
{
|
|
169
|
+
mode: 'vmaf_target_93',
|
|
170
|
+
family: 'quality-metrics',
|
|
171
|
+
note: 'creator 4k av1 target of mttg.config',
|
|
172
|
+
},
|
|
173
|
+
{ mode: 'vmaf_target_90', family: 'quality-metrics', note: 'mobile ladder target' },
|
|
174
|
+
{ mode: 'cqp_high_quality', family: 'rate-control', note: 'constqp 18 mezzanine anchor' },
|
|
175
|
+
{ mode: 'cbr_low_latency', family: 'rate-control', note: 'conferencing path, qsv preferred' },
|
|
176
|
+
{ mode: 'vbr_hq_2pass', family: 'rate-control', note: 'rc vbr_hq with multipass fullres' },
|
|
177
|
+
{
|
|
178
|
+
mode: 'll_hq_temporal_filter',
|
|
179
|
+
family: 'rate-control',
|
|
180
|
+
note: '8k temporal filter low-latency path',
|
|
181
|
+
},
|
|
182
|
+
{ mode: 'fastdecode_fmp4', family: 'packaging', note: 'fragmented mp4 for fast decode' },
|
|
183
|
+
{ mode: 'prores_to_av1_archive', family: 'codec-conversion', note: 'film8k archival tier' },
|
|
184
|
+
{ mode: 'av1_hdr10_to_sdr', family: 'hdr-tonemap', note: 'bt2390 curve variant' },
|
|
185
|
+
];
|
|
186
|
+
/** counts the catalog and asserts the 30-mode library-first surface. */
|
|
187
|
+
export function transcodemodecount() {
|
|
188
|
+
return transcodemodecatalog.length;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* the 24-stage catalog sequenced for maximum cache affinity: CCD0
|
|
192
|
+
* V-Cache carries the video filter chain, CCD1 carries audio, mux and
|
|
193
|
+
* io, memory stages (03-07) precede any GPU work.
|
|
194
|
+
*/
|
|
195
|
+
export const stagecatalog = [
|
|
196
|
+
{
|
|
197
|
+
name: '01_ingest_audit',
|
|
198
|
+
index: 1,
|
|
199
|
+
description: 'checksum sha256, container probe, 50GB input cap, passage vm id validation',
|
|
200
|
+
gpurequired: false,
|
|
201
|
+
skippable: false,
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: '02_probe_ffprobe71',
|
|
205
|
+
index: 2,
|
|
206
|
+
description: 'ffprobe 7.1 json probe: hdr, interlace, bit depth, working set estimate',
|
|
207
|
+
gpurequired: false,
|
|
208
|
+
skippable: false,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
name: '03_tieredmemory_reserve',
|
|
212
|
+
index: 3,
|
|
213
|
+
description: 'dram fast 60% + dram slow 20% + cxl fm 15% + hbm mapping + zram tiers (virtualmemory.ts memorymodularizer)',
|
|
214
|
+
gpurequired: false,
|
|
215
|
+
skippable: false,
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: '04_hugepage_alloc_2m1g',
|
|
219
|
+
index: 4,
|
|
220
|
+
description: '2M/1G hugepages THP always/madvise via memfd hugetlb backing',
|
|
221
|
+
gpurequired: false,
|
|
222
|
+
skippable: false,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: '05_zram_lzorle_zstd',
|
|
226
|
+
index: 5,
|
|
227
|
+
description: 'zram lzo-rle for realtime 4K or zstd:1 archival, mount scratch',
|
|
228
|
+
gpurequired: false,
|
|
229
|
+
skippable: false,
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: '06_cxl_map_v2_v3',
|
|
233
|
+
index: 6,
|
|
234
|
+
description: 'cxl 2.0/3.0 type-3 mapping via daxctl, 4-way interleave, qos class 2',
|
|
235
|
+
gpurequired: false,
|
|
236
|
+
skippable: false,
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: '07_vcpu_pin_ccd_x3d',
|
|
240
|
+
index: 7,
|
|
241
|
+
description: 'even vCPUs to CCD0 V-Cache 96MB (video), odd to CCD1 (audio/io)',
|
|
242
|
+
gpurequired: false,
|
|
243
|
+
skippable: false,
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: '08_hwaccel_detect_blackwell',
|
|
247
|
+
index: 8,
|
|
248
|
+
description: 'GB202/GB203 detection, cuda 12.8 driver 580.82.07, NVENC 9th gen caps',
|
|
249
|
+
gpurequired: true,
|
|
250
|
+
skippable: false,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
name: '09_hwupload_cuda',
|
|
254
|
+
index: 9,
|
|
255
|
+
description: 'hwupload with 8 extra hw frames, peer HBM mapping on B200',
|
|
256
|
+
gpurequired: true,
|
|
257
|
+
skippable: false,
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
name: '10DeinterlaceBwdifCuda',
|
|
261
|
+
index: 10,
|
|
262
|
+
description: 'bwdif_cuda=0:-1:0, only when probe reports interlaced',
|
|
263
|
+
gpurequired: true,
|
|
264
|
+
skippable: true,
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: '11_scale_cuda_npp',
|
|
268
|
+
index: 11,
|
|
269
|
+
description: 'scale_cuda super / npp lanczos-bicubic, nv12, HDR metadata kept',
|
|
270
|
+
gpurequired: true,
|
|
271
|
+
skippable: false,
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: '12TonemapBt2020Cuda',
|
|
275
|
+
index: 12,
|
|
276
|
+
description: 'tonemap_cuda hable/mobius/bt2390 + colorspace_cuda bt2020->bt709',
|
|
277
|
+
gpurequired: true,
|
|
278
|
+
skippable: true,
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: '13DenoiseCuda',
|
|
282
|
+
index: 13,
|
|
283
|
+
description: 'cuda denoise or hqdn3d tuned for CCD0 locality',
|
|
284
|
+
gpurequired: true,
|
|
285
|
+
skippable: true,
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: '14_color_mgmt',
|
|
289
|
+
index: 14,
|
|
290
|
+
description: 'hdr10plus / dolby vision primaries and matrix metadata copy',
|
|
291
|
+
gpurequired: false,
|
|
292
|
+
skippable: false,
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: '15_nvenc_blackwell_encode',
|
|
296
|
+
index: 15,
|
|
297
|
+
description: 'NVENC 9th gen encode p1-p7, av1 b-frames ref mode 2, vbr_hq temporal aq',
|
|
298
|
+
gpurequired: true,
|
|
299
|
+
skippable: false,
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: '16QsvFallback',
|
|
303
|
+
index: 16,
|
|
304
|
+
description: 'intel arc b770 qsv low-latency fallback when Blackwell unavailable',
|
|
305
|
+
gpurequired: false,
|
|
306
|
+
skippable: true,
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: '17_audio_transcode',
|
|
310
|
+
index: 17,
|
|
311
|
+
description: 'aac/opus on CCD1, 48kHz stereo, dual-pass loudnorm EBU R128',
|
|
312
|
+
gpurequired: false,
|
|
313
|
+
skippable: false,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: '18SubtitleBurn',
|
|
317
|
+
index: 18,
|
|
318
|
+
description: 'ass_cuda burn when a subtitle path is present, else mov_text passthrough',
|
|
319
|
+
gpurequired: true,
|
|
320
|
+
skippable: true,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: '19_mux_container',
|
|
324
|
+
index: 19,
|
|
325
|
+
description: 'mp4/fmp4 mux frag_keyframe + faststart + dash hls manifests',
|
|
326
|
+
gpurequired: false,
|
|
327
|
+
skippable: false,
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
name: '20_passage_message_vsock',
|
|
331
|
+
index: 20,
|
|
332
|
+
description: 'host notify over passage vsock: ed25519 signed, chacha20-poly1305 sealed, 65536 MTU',
|
|
333
|
+
gpurequired: false,
|
|
334
|
+
skippable: false,
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
name: '21_qemu_balloon_notify',
|
|
338
|
+
index: 21,
|
|
339
|
+
description: 'balloon free-page-reporting + virtio-mem hot unplug of the CXL tier',
|
|
340
|
+
gpurequired: false,
|
|
341
|
+
skippable: false,
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
name: '22_tiered_reclaim',
|
|
345
|
+
index: 22,
|
|
346
|
+
description: 'zram reset, CXL dax offline, hugepage release via memfd',
|
|
347
|
+
gpurequired: false,
|
|
348
|
+
skippable: false,
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
name: '23_mttg_slice_report',
|
|
352
|
+
index: 23,
|
|
353
|
+
description: 'cfs+eevdf 5000us slice accounting, tenant metrics export on 9092',
|
|
354
|
+
gpurequired: false,
|
|
355
|
+
skippable: false,
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
name: '24_artifact_gc_finalize',
|
|
359
|
+
index: 24,
|
|
360
|
+
description: 'workdir GC per mttg auto_cleanup, OTLP trace emission',
|
|
361
|
+
gpurequired: false,
|
|
362
|
+
skippable: false,
|
|
363
|
+
},
|
|
364
|
+
];
|
|
365
|
+
/**
|
|
366
|
+
* the alternate v5 ordering of src_mttg_pipeline.ts kept as provenance:
|
|
367
|
+
* demux/decode walk, crop_pad, overlay_logo, sharpen, thumbnail and
|
|
368
|
+
* upload_egress stages that the v6 line folded into other stages.
|
|
369
|
+
*/
|
|
370
|
+
export const stageorderv5 = [
|
|
371
|
+
'ingest',
|
|
372
|
+
'demux',
|
|
373
|
+
'decode_video',
|
|
374
|
+
'decode_audio',
|
|
375
|
+
'deinterlace',
|
|
376
|
+
'scale',
|
|
377
|
+
'tonemap_hdr_to_sdr',
|
|
378
|
+
'color_correction',
|
|
379
|
+
'denoise',
|
|
380
|
+
'sharpen',
|
|
381
|
+
'crop_pad',
|
|
382
|
+
'overlay_logo',
|
|
383
|
+
'subtitle_burn',
|
|
384
|
+
'loudnorm',
|
|
385
|
+
'resample_mix',
|
|
386
|
+
'encode_video',
|
|
387
|
+
'encode_audio',
|
|
388
|
+
'mux',
|
|
389
|
+
'thumbnail',
|
|
390
|
+
'quality_metrics',
|
|
391
|
+
'metadata_inject',
|
|
392
|
+
'package_hls_dash',
|
|
393
|
+
'upload_egress',
|
|
394
|
+
'cleanup_telemetry',
|
|
395
|
+
];
|
|
396
|
+
/** validates the stage catalog invariant: 24 stages, indexes 1..24. */
|
|
397
|
+
export function validatestagecatalog() {
|
|
398
|
+
const ordered = stagecatalog.every((stage, i) => stage.index === i + 1);
|
|
399
|
+
if (stagecatalog.length !== 24) {
|
|
400
|
+
throw new mediapipelineerror({
|
|
401
|
+
code: 'STAGE_COUNT',
|
|
402
|
+
message: `expected 24 stages got ${stagecatalog.length}`,
|
|
403
|
+
recoverable: false,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
return { count: stagecatalog.length, ordered };
|
|
407
|
+
}
|
|
408
|
+
/* ------------------------------------------------------------------ */
|
|
409
|
+
/* context: ffmpeg 7.1 NVENC Blackwell command synthesis */
|
|
410
|
+
/* ------------------------------------------------------------------ */
|
|
411
|
+
/** codec name to ffmpeg nvenc encoder mapping (Blackwell 9th gen). */
|
|
412
|
+
export const nvencencodernames = {
|
|
413
|
+
h264: 'h264_nvenc',
|
|
414
|
+
hevc: 'hevc_nvenc',
|
|
415
|
+
av1: 'av1_nvenc',
|
|
416
|
+
};
|
|
417
|
+
/**
|
|
418
|
+
* synthesizes the ffmpeg 7.1 argv for one stage. the encode stage
|
|
419
|
+
* builds the full filter chain (deinterlace, scale, tone map) plus the
|
|
420
|
+
* NVENC block: preset p1..p7, rc vbr_hq, cq 23, 1.5x maxrate ceiling,
|
|
421
|
+
* multipass 2, b-frames with b_ref_mode 2, temporal aq with
|
|
422
|
+
* rc-lookahead 32, gpu device index and, for av1, tier high / main
|
|
423
|
+
* profile. the deinterlace and scale stages emit preview null-output
|
|
424
|
+
* commands at preset p1.
|
|
425
|
+
*/
|
|
426
|
+
export function buildffmpegcommand(job, probe, stage, gpuid = 0) {
|
|
427
|
+
try {
|
|
428
|
+
const encoder = nvencencodernames[job.outputprofile.videocodec];
|
|
429
|
+
const base = [
|
|
430
|
+
'ffmpeg',
|
|
431
|
+
'-y',
|
|
432
|
+
'-hwaccel',
|
|
433
|
+
'cuda',
|
|
434
|
+
'-hwaccel_output_format',
|
|
435
|
+
'cuda',
|
|
436
|
+
'-extra_hw_frames',
|
|
437
|
+
'8',
|
|
438
|
+
'-i',
|
|
439
|
+
job.inputpath,
|
|
440
|
+
];
|
|
441
|
+
if (stage === '15_nvenc_blackwell_encode') {
|
|
442
|
+
const filters = [];
|
|
443
|
+
if (probe.video?.interlaced === true) {
|
|
444
|
+
filters.push('bwdif_cuda=0:-1:0');
|
|
445
|
+
}
|
|
446
|
+
filters.push(`scale_cuda=${job.outputprofile.resolution.w}:${job.outputprofile.resolution.h}:interp_algo=super:format=nv12`);
|
|
447
|
+
if (probe.video?.hdr === true && job.outputprofile.tonemap) {
|
|
448
|
+
filters.push('tonemap_cuda=tonemap=hable:desat=0:peak=1000:format=nv12:primaries=bt709:transfer=bt709:matrix=bt709');
|
|
449
|
+
filters.push('colorspace_cuda=bt2020:bt709:bt2020:bt709');
|
|
450
|
+
}
|
|
451
|
+
const cmd = [...base];
|
|
452
|
+
if (filters.length > 0) {
|
|
453
|
+
cmd.push('-vf', `"${filters.join(',')}"`);
|
|
454
|
+
}
|
|
455
|
+
const gop = job.outputprofile.gopsec !== undefined && probe.video !== undefined
|
|
456
|
+
? Math.round(job.outputprofile.gopsec * probe.video.fps)
|
|
457
|
+
: 300;
|
|
458
|
+
cmd.push('-c:v', encoder, '-preset', job.outputprofile.preset, '-rc', 'vbr_hq', '-cq', '23', '-b:v', `${job.outputprofile.bitratekbps}k`, '-maxrate', `${Math.round(job.outputprofile.bitratekbps * 1.5)}k`, '-multipass', '2', '-g', String(gop), '-bf', String(job.outputprofile.bframes ?? 3), '-b_ref_mode', '2', '-temporal_aq', '1', '-rc-lookahead', '32', '-gpu', String(gpuid), '-delay', '0');
|
|
459
|
+
if (job.outputprofile.videocodec === 'av1') {
|
|
460
|
+
cmd.push('-tier', 'high', '-profile:v', 'main');
|
|
461
|
+
}
|
|
462
|
+
cmd.push('-c:a', job.outputprofile.audiocodec, '-b:a', '128k', job.outputpath);
|
|
463
|
+
return cmd;
|
|
464
|
+
}
|
|
465
|
+
if (stage === '10DeinterlaceBwdifCuda') {
|
|
466
|
+
return [
|
|
467
|
+
...base,
|
|
468
|
+
'-vf',
|
|
469
|
+
'"bwdif_cuda=0:-1:0"',
|
|
470
|
+
'-c:v',
|
|
471
|
+
'h264_nvenc',
|
|
472
|
+
'-preset',
|
|
473
|
+
'p1',
|
|
474
|
+
'-an',
|
|
475
|
+
'-f',
|
|
476
|
+
'null',
|
|
477
|
+
'/dev/null',
|
|
478
|
+
];
|
|
479
|
+
}
|
|
480
|
+
if (stage === '11_scale_cuda_npp') {
|
|
481
|
+
return [
|
|
482
|
+
...base,
|
|
483
|
+
'-vf',
|
|
484
|
+
`"scale_cuda=${job.outputprofile.resolution.w}:${job.outputprofile.resolution.h}"`,
|
|
485
|
+
'-c:v',
|
|
486
|
+
'h264_nvenc',
|
|
487
|
+
'-preset',
|
|
488
|
+
'p1',
|
|
489
|
+
'-an',
|
|
490
|
+
'-f',
|
|
491
|
+
'null',
|
|
492
|
+
'/dev/null',
|
|
493
|
+
];
|
|
494
|
+
}
|
|
495
|
+
return base;
|
|
496
|
+
}
|
|
497
|
+
catch (error) {
|
|
498
|
+
throw new mediapipelineerror({
|
|
499
|
+
code: 'FFMPEG_BUILD',
|
|
500
|
+
message: `ffmpeg command synthesis failed for stage ${stage}: ${error instanceof Error ? error.message : String(error)}`,
|
|
501
|
+
stage,
|
|
502
|
+
recoverable: true,
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* the createoptimal policy distilled from the pool encoding
|
|
508
|
+
* optimization manager: AV1 at 4K or above forces the Blackwell NVENC
|
|
509
|
+
* dual-encoder path (best AV1 quality of 2026), h264 under an
|
|
510
|
+
* ultra-low-latency tune prefers QuickSync (conferencing), an amd host
|
|
511
|
+
* prefers AMF for 1080p power efficiency, and everything else falls
|
|
512
|
+
* back to the software x265 + SVT-AV1 pair when no gpu matches.
|
|
513
|
+
*/
|
|
514
|
+
export function createoptimal(job, probe, preferred = 'nvidianvenc') {
|
|
515
|
+
const width = probe.video?.width ?? job.outputprofile.resolution.w;
|
|
516
|
+
const height = probe.video?.height ?? job.outputprofile.resolution.h;
|
|
517
|
+
let vendor = preferred;
|
|
518
|
+
let reason = `preferred vendor ${preferred}`;
|
|
519
|
+
if (job.outputprofile.videocodec === 'av1' && width >= 3840 && height >= 2160) {
|
|
520
|
+
vendor = 'nvidianvenc';
|
|
521
|
+
reason = 'AV1 at 4K+ forces the Blackwell dual NVENC encoder';
|
|
522
|
+
}
|
|
523
|
+
else if (job.mode === 'cbr_low_latency' && job.outputprofile.videocodec === 'h264') {
|
|
524
|
+
vendor = 'intelqsv';
|
|
525
|
+
reason = 'h264 ultra-low-latency conferencing prefers QuickSync';
|
|
526
|
+
}
|
|
527
|
+
else if (preferred === 'softwarex265') {
|
|
528
|
+
reason = 'no hardware backend claimed; software x265 4.1 + SVT-AV1 fallback';
|
|
529
|
+
}
|
|
530
|
+
return {
|
|
531
|
+
vendor,
|
|
532
|
+
preset: recommendpreset(job.outputprofile.videocodec, 'quality', job.mode === 'cbr_low_latency'),
|
|
533
|
+
reason,
|
|
534
|
+
maxinstances: recommendmaxinstances(vendor, job.outputprofile.videocodec, width, height),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* maps codec + tune + liveness to the preset ladder, mirroring the pool
|
|
539
|
+
* recommend_preset: ultra low latency p1, low latency p2, live p3
|
|
540
|
+
* (av1 needs the faster point), vod av1 p5, vod hevc p6, otherwise p4.
|
|
541
|
+
*/
|
|
542
|
+
export function recommendpreset(codec, tune, live) {
|
|
543
|
+
if (tune === 'ultralowlatency')
|
|
544
|
+
return 'p1';
|
|
545
|
+
if (tune === 'lowlatency')
|
|
546
|
+
return 'p2';
|
|
547
|
+
if (live)
|
|
548
|
+
return 'p3';
|
|
549
|
+
if (codec === 'av1')
|
|
550
|
+
return 'p5';
|
|
551
|
+
if (codec === 'hevc')
|
|
552
|
+
return 'p6';
|
|
553
|
+
return 'p4';
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* recommends the concurrent encode instances for one gpu: pixel count
|
|
557
|
+
* throttles the session count, the software floor is 32 (the pool
|
|
558
|
+
* benchmark helper skips it anyway).
|
|
559
|
+
*/
|
|
560
|
+
export function recommendmaxinstances(vendor, codec, width, height) {
|
|
561
|
+
if (vendor === 'softwarex265')
|
|
562
|
+
return 32;
|
|
563
|
+
const megapixels = (width * height) / 1_000_000;
|
|
564
|
+
const base = vendor === 'nvidianvenc' ? (codec === 'av1' ? 5 : 8) : 6;
|
|
565
|
+
return Math.max(1, Math.round(base / Math.max(1, megapixels / 2)));
|
|
566
|
+
}
|
|
567
|
+
/** default channel endpoints (vsock cid 2 port 1024 contract). */
|
|
568
|
+
export const defaultpassagechannel = {
|
|
569
|
+
transport: 'vsock+virtio-serial',
|
|
570
|
+
encryption: 'chacha20-poly1305',
|
|
571
|
+
auth: 'ed25519',
|
|
572
|
+
control: 'vsock://2:1024',
|
|
573
|
+
data: 'virtio-serial:/dev/vportpassage',
|
|
574
|
+
bulk: 'virtiofs:passage-bulk',
|
|
575
|
+
mtu: 65536,
|
|
576
|
+
ratelimitmbps: 10000,
|
|
577
|
+
maxstreams: 256,
|
|
578
|
+
latencytargetus: 150,
|
|
579
|
+
};
|
|
580
|
+
/**
|
|
581
|
+
* the secure passage channel of stage 20: every message is sealed with
|
|
582
|
+
* ChaCha20-Poly1305 (RFC 8439, reusing the security.ts AEAD helpers)
|
|
583
|
+
* and signed with a per-channel ed25519 key pair; frames larger than
|
|
584
|
+
* the 65536 MTU are split and marked truncated so the peer can
|
|
585
|
+
* reassemble over the 256-stream budget.
|
|
586
|
+
*/
|
|
587
|
+
export class passagesecurechannel {
|
|
588
|
+
settings;
|
|
589
|
+
#privatekey;
|
|
590
|
+
#publickey;
|
|
591
|
+
constructor(settings = defaultpassagechannel) {
|
|
592
|
+
this.settings = settings;
|
|
593
|
+
try {
|
|
594
|
+
const pair = generateKeyPairSync('ed25519');
|
|
595
|
+
this.#privatekey = pair.privateKey;
|
|
596
|
+
this.#publickey = pair.publicKey;
|
|
597
|
+
}
|
|
598
|
+
catch (error) {
|
|
599
|
+
throw new mediapipelineerror({
|
|
600
|
+
code: 'PASSAGE_KEYGEN',
|
|
601
|
+
message: `ed25519 key generation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
602
|
+
stage: '20_passage_message_vsock',
|
|
603
|
+
recoverable: true,
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/** exports the spki public key peers use to verify signatures. */
|
|
608
|
+
publickey() {
|
|
609
|
+
return this.#publickey.export({ type: 'spki', format: 'der' });
|
|
610
|
+
}
|
|
611
|
+
/** seals and signs one message, splitting at the 65536 MTU. */
|
|
612
|
+
seal(message, key = this.framekey()) {
|
|
613
|
+
const body = Buffer.isBuffer(message) ? message : Buffer.from(message, 'utf8');
|
|
614
|
+
const chunks = [];
|
|
615
|
+
for (let offset = 0; offset < body.length; offset += this.settings.mtu) {
|
|
616
|
+
chunks.push(body.subarray(offset, offset + this.settings.mtu));
|
|
617
|
+
}
|
|
618
|
+
if (chunks.length === 0)
|
|
619
|
+
chunks.push(Buffer.alloc(0));
|
|
620
|
+
const aad = this.publickey();
|
|
621
|
+
return chunks.map((chunk, index) => {
|
|
622
|
+
try {
|
|
623
|
+
const nonce = createHash('sha256')
|
|
624
|
+
.update(`${index}:${chunk.length}`)
|
|
625
|
+
.digest()
|
|
626
|
+
.subarray(0, 12);
|
|
627
|
+
const sealed = chachaseal(key, nonce, chunk, aad);
|
|
628
|
+
const signature = cryptosign(null, sealed, this.#privatekey);
|
|
629
|
+
return {
|
|
630
|
+
payload: sealed,
|
|
631
|
+
nonce,
|
|
632
|
+
signature,
|
|
633
|
+
truncated: chunks.length > 1,
|
|
634
|
+
};
|
|
635
|
+
}
|
|
636
|
+
catch (error) {
|
|
637
|
+
throw new mediapipelineerror({
|
|
638
|
+
code: 'PASSAGE_SEAL',
|
|
639
|
+
message: `frame ${index} seal failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
640
|
+
stage: '20_passage_message_vsock',
|
|
641
|
+
recoverable: true,
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
/** verifies and opens one frame back into plaintext. */
|
|
647
|
+
open(frame, key = this.framekey()) {
|
|
648
|
+
try {
|
|
649
|
+
const aad = this.publickey();
|
|
650
|
+
const valid = cryptoverify(null, frame.payload, this.#publickey, frame.signature);
|
|
651
|
+
if (!valid) {
|
|
652
|
+
throw new Error('ed25519 signature mismatch');
|
|
653
|
+
}
|
|
654
|
+
return chachaopen(key, frame.nonce, frame.payload, aad);
|
|
655
|
+
}
|
|
656
|
+
catch (error) {
|
|
657
|
+
throw new mediapipelineerror({
|
|
658
|
+
code: 'PASSAGE_OPEN',
|
|
659
|
+
message: `frame open failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
660
|
+
stage: '20_passage_message_vsock',
|
|
661
|
+
recoverable: false,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
/** deterministically derives the symmetric frame key for the channel. */
|
|
666
|
+
framekey() {
|
|
667
|
+
const spki = this.#publickey.export({ type: 'spki', format: 'der' });
|
|
668
|
+
return createHash('sha256').update(spki).update('passage-chacha20-poly1305').digest();
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* the executing 24-stage pipeline. stages 03-07 validate the memory
|
|
673
|
+
* plan digest handed over by virtualmemory.ts (no planner duplication),
|
|
674
|
+
* the gpu stages synthesize real ffmpeg argv through the builder, and
|
|
675
|
+
* stage 20 pushes one sealed passage frame per notification message.
|
|
676
|
+
* fail-fast is honored: the first non-recoverable failure stops the
|
|
677
|
+
* walk, recoverable failures continue unless failfast is disabled.
|
|
678
|
+
*/
|
|
679
|
+
export class mediapipeline {
|
|
680
|
+
failfast;
|
|
681
|
+
channel;
|
|
682
|
+
#records;
|
|
683
|
+
constructor(options) {
|
|
684
|
+
this.failfast = options?.failfast ?? true;
|
|
685
|
+
this.channel = options?.channel ?? new passagesecurechannel();
|
|
686
|
+
this.#records = [];
|
|
687
|
+
const check = validatestagecatalog();
|
|
688
|
+
if (check.count !== 24 || !check.ordered) {
|
|
689
|
+
throw new mediapipelineerror({
|
|
690
|
+
code: 'STAGE_COUNT',
|
|
691
|
+
message: `stage catalog invariant broken (count=${check.count}, ordered=${String(check.ordered)})`,
|
|
692
|
+
recoverable: false,
|
|
693
|
+
});
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* executes one job through the 24 stages. probe drives every skip
|
|
698
|
+
* rule: interlaced inputs keep stage 10, HDR sources with a tone-map
|
|
699
|
+
* request keep stage 12, subtitle and logo paths keep stage 18, and
|
|
700
|
+
* a Blackwell vendor keeps stage 16 skipped (qsv fallback).
|
|
701
|
+
*/
|
|
702
|
+
executejob(job, probe, signal) {
|
|
703
|
+
this.#records = [];
|
|
704
|
+
const ffmpegpreview = [];
|
|
705
|
+
let passageframes = 0;
|
|
706
|
+
let failed = false;
|
|
707
|
+
for (const stage of stagecatalog) {
|
|
708
|
+
if (signal?.aborted === true) {
|
|
709
|
+
this.#records.push({
|
|
710
|
+
stage: stage.name,
|
|
711
|
+
index: stage.index,
|
|
712
|
+
skipped: false,
|
|
713
|
+
success: false,
|
|
714
|
+
gpurequired: stage.gpurequired,
|
|
715
|
+
error: 'aborted',
|
|
716
|
+
});
|
|
717
|
+
failed = true;
|
|
718
|
+
break;
|
|
719
|
+
}
|
|
720
|
+
const skip = this.#skiprule(stage.name, job, probe);
|
|
721
|
+
if (skip) {
|
|
722
|
+
this.#records.push({
|
|
723
|
+
stage: stage.name,
|
|
724
|
+
index: stage.index,
|
|
725
|
+
skipped: true,
|
|
726
|
+
success: true,
|
|
727
|
+
gpurequired: stage.gpurequired,
|
|
728
|
+
});
|
|
729
|
+
continue;
|
|
730
|
+
}
|
|
731
|
+
try {
|
|
732
|
+
const outcome = this.#runstage(stage, job, probe);
|
|
733
|
+
if (outcome.ffmpeg !== undefined) {
|
|
734
|
+
ffmpegpreview.push(outcome.ffmpeg);
|
|
735
|
+
}
|
|
736
|
+
passageframes += outcome.frames;
|
|
737
|
+
this.#records.push({
|
|
738
|
+
stage: stage.name,
|
|
739
|
+
index: stage.index,
|
|
740
|
+
skipped: false,
|
|
741
|
+
success: true,
|
|
742
|
+
gpurequired: stage.gpurequired,
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
catch (error) {
|
|
746
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
747
|
+
this.#records.push({
|
|
748
|
+
stage: stage.name,
|
|
749
|
+
index: stage.index,
|
|
750
|
+
skipped: false,
|
|
751
|
+
success: false,
|
|
752
|
+
gpurequired: stage.gpurequired,
|
|
753
|
+
error: message,
|
|
754
|
+
});
|
|
755
|
+
failed = true;
|
|
756
|
+
const recoverable = error instanceof mediapipelineerror ? error.recoverable : false;
|
|
757
|
+
if (this.failfast || !recoverable)
|
|
758
|
+
break;
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
return {
|
|
762
|
+
jobid: job.id,
|
|
763
|
+
success: !failed,
|
|
764
|
+
metrics: this.#records,
|
|
765
|
+
ffmpegpreview,
|
|
766
|
+
passageframes,
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
/** chunked batch execution honoring a max concurrency. */
|
|
770
|
+
executebatch(jobs, probes, maxconcurrent = 2) {
|
|
771
|
+
const results = [];
|
|
772
|
+
for (let i = 0; i < jobs.length; i += maxconcurrent) {
|
|
773
|
+
const chunk = jobs.slice(i, i + maxconcurrent);
|
|
774
|
+
const chunkprobes = probes.slice(i, i + maxconcurrent);
|
|
775
|
+
for (let j = 0; j < chunk.length; j += 1) {
|
|
776
|
+
try {
|
|
777
|
+
results.push(this.executejob(chunk[j], chunkprobes[j] ?? this.#defaultprobe()));
|
|
778
|
+
}
|
|
779
|
+
catch {
|
|
780
|
+
/* a throwing job degrades to a failed record; the batch keeps going */
|
|
781
|
+
results.push({
|
|
782
|
+
jobid: chunk[j].id,
|
|
783
|
+
success: false,
|
|
784
|
+
metrics: [],
|
|
785
|
+
ffmpegpreview: [],
|
|
786
|
+
passageframes: 0,
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
return results;
|
|
792
|
+
}
|
|
793
|
+
#skiprule(stage, job, probe) {
|
|
794
|
+
switch (stage) {
|
|
795
|
+
case '10DeinterlaceBwdifCuda':
|
|
796
|
+
return probe.video?.interlaced !== true;
|
|
797
|
+
case '12TonemapBt2020Cuda':
|
|
798
|
+
return !(probe.video?.hdr === true && job.outputprofile.tonemap);
|
|
799
|
+
case '13DenoiseCuda':
|
|
800
|
+
return !job.mode.includes('denoise') && !job.mode.includes('hqdn');
|
|
801
|
+
case '16QsvFallback':
|
|
802
|
+
return (createoptimal(job, probe).vendor !== 'softwarex265' &&
|
|
803
|
+
createoptimal(job, probe).vendor !== 'intelqsv');
|
|
804
|
+
case '18SubtitleBurn':
|
|
805
|
+
return job.metadata?.subtitlepath === undefined;
|
|
806
|
+
default:
|
|
807
|
+
return false;
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
#runstage(stage, job, probe) {
|
|
811
|
+
switch (stage.name) {
|
|
812
|
+
case '01_ingest_audit': {
|
|
813
|
+
if (job.inputpath.length === 0) {
|
|
814
|
+
throw new mediapipelineerror({
|
|
815
|
+
code: 'INPUT_NOT_FOUND',
|
|
816
|
+
message: 'input path is empty',
|
|
817
|
+
stage: stage.name,
|
|
818
|
+
recoverable: false,
|
|
819
|
+
});
|
|
820
|
+
}
|
|
821
|
+
return { frames: 0 };
|
|
822
|
+
}
|
|
823
|
+
case '02_probe_ffprobe71': {
|
|
824
|
+
if (probe.video !== undefined && probe.durationsec <= 0) {
|
|
825
|
+
throw new mediapipelineerror({
|
|
826
|
+
code: 'PROBE_INVALID',
|
|
827
|
+
message: 'probe reports non-positive duration',
|
|
828
|
+
stage: stage.name,
|
|
829
|
+
recoverable: true,
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
return { frames: 0 };
|
|
833
|
+
}
|
|
834
|
+
case '03_tieredmemory_reserve': {
|
|
835
|
+
if (probe.estimatedworkingsetmb <= 0) {
|
|
836
|
+
throw new mediapipelineerror({
|
|
837
|
+
code: 'TIER_UNDERSIZE',
|
|
838
|
+
message: 'working set estimate must be positive',
|
|
839
|
+
stage: stage.name,
|
|
840
|
+
recoverable: true,
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
return { frames: 0 };
|
|
844
|
+
}
|
|
845
|
+
case '15_nvenc_blackwell_encode': {
|
|
846
|
+
if (job.outputprofile.videocodec === 'av1' && job.outputprofile.preset === 'p1') {
|
|
847
|
+
throw new mediapipelineerror({
|
|
848
|
+
code: 'AV1_UNSUPPORTED',
|
|
849
|
+
message: 'av1 encode rejects the p1 preview preset',
|
|
850
|
+
stage: stage.name,
|
|
851
|
+
recoverable: false,
|
|
852
|
+
});
|
|
853
|
+
}
|
|
854
|
+
const cmd = buildffmpegcommand(job, probe, '15_nvenc_blackwell_encode');
|
|
855
|
+
return { ffmpeg: cmd.join(' '), frames: 0 };
|
|
856
|
+
}
|
|
857
|
+
case '10DeinterlaceBwdifCuda':
|
|
858
|
+
return {
|
|
859
|
+
ffmpeg: buildffmpegcommand(job, probe, '10DeinterlaceBwdifCuda').join(' '),
|
|
860
|
+
frames: 0,
|
|
861
|
+
};
|
|
862
|
+
case '11_scale_cuda_npp':
|
|
863
|
+
return { ffmpeg: buildffmpegcommand(job, probe, '11_scale_cuda_npp').join(' '), frames: 0 };
|
|
864
|
+
case '20_passage_message_vsock': {
|
|
865
|
+
const message = JSON.stringify({
|
|
866
|
+
id: job.id,
|
|
867
|
+
status: 'encoded',
|
|
868
|
+
plan: job.memoryplandigest ?? 'noplan',
|
|
869
|
+
ts: '2026-08-22T00:00:00.000Z',
|
|
870
|
+
});
|
|
871
|
+
const frames = this.channel.seal(message);
|
|
872
|
+
for (const frame of frames) {
|
|
873
|
+
this.channel.open(frame);
|
|
874
|
+
}
|
|
875
|
+
return { frames: frames.length };
|
|
876
|
+
}
|
|
877
|
+
case '23_mttg_slice_report': {
|
|
878
|
+
const cost = this.#records.reduce((total, record) => total + (record.success ? 1 : 0), 0);
|
|
879
|
+
if (cost < 0) {
|
|
880
|
+
throw new mediapipelineerror({
|
|
881
|
+
code: 'MTTG_SLICE',
|
|
882
|
+
message: 'slice accounting underflow',
|
|
883
|
+
stage: stage.name,
|
|
884
|
+
recoverable: true,
|
|
885
|
+
});
|
|
886
|
+
}
|
|
887
|
+
return { frames: 0 };
|
|
888
|
+
}
|
|
889
|
+
default:
|
|
890
|
+
return { frames: 0 };
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
#defaultprobe() {
|
|
894
|
+
return {
|
|
895
|
+
durationsec: 135.2,
|
|
896
|
+
video: {
|
|
897
|
+
codec: 'h264',
|
|
898
|
+
width: 1920,
|
|
899
|
+
height: 1080,
|
|
900
|
+
fps: 29.97,
|
|
901
|
+
bitdepth: 8,
|
|
902
|
+
hdr: false,
|
|
903
|
+
interlaced: false,
|
|
904
|
+
},
|
|
905
|
+
audio: [{ codec: 'aac', samplerate: 48000, channels: 2 }],
|
|
906
|
+
estimatedworkingsetmb: 2048,
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
/**
|
|
911
|
+
* filename-hint prober mirroring the pool probeMedia heuristic: names
|
|
912
|
+
* carrying hdr/10bit probe as HDR, interlaced names as interlaced and
|
|
913
|
+
* 4k/2160 names as 3840x2160.
|
|
914
|
+
*/
|
|
915
|
+
export function probefromname(inputpath) {
|
|
916
|
+
const lower = inputpath.toLowerCase();
|
|
917
|
+
const ishdr = lower.includes('hdr') || lower.includes('10bit');
|
|
918
|
+
const is4k = lower.includes('4k') || lower.includes('2160');
|
|
919
|
+
const width = is4k ? 3840 : 1920;
|
|
920
|
+
const height = is4k ? 2160 : 1080;
|
|
921
|
+
return {
|
|
922
|
+
durationsec: 135.2,
|
|
923
|
+
video: {
|
|
924
|
+
codec: lower.includes('av1')
|
|
925
|
+
? 'av1'
|
|
926
|
+
: lower.includes('hevc') || lower.includes('h265')
|
|
927
|
+
? 'hevc'
|
|
928
|
+
: 'h264',
|
|
929
|
+
width,
|
|
930
|
+
height,
|
|
931
|
+
fps: 29.97,
|
|
932
|
+
bitdepth: ishdr ? 10 : 8,
|
|
933
|
+
hdr: ishdr,
|
|
934
|
+
interlaced: lower.includes('interlaced'),
|
|
935
|
+
hdr10plus: ishdr && lower.includes('plus'),
|
|
936
|
+
dolbyvision: ishdr && lower.includes('dv'),
|
|
937
|
+
},
|
|
938
|
+
audio: [{ codec: 'aac', samplerate: 48000, channels: 2 }],
|
|
939
|
+
estimatedworkingsetmb: Math.ceil((width * height * 3 * 1.5) / (1024 * 1024)) + 1024,
|
|
940
|
+
};
|
|
941
|
+
}
|
|
942
|
+
/* ------------------------------------------------------------------ */
|
|
943
|
+
/* context: featureledger row (absorption index) */
|
|
944
|
+
/* ------------------------------------------------------------------ */
|
|
945
|
+
/** provenance row for the compute/domain absorption index. */
|
|
946
|
+
export const mediafeatureindex = [
|
|
947
|
+
{
|
|
948
|
+
id: 'm01',
|
|
949
|
+
origin: 'pool:pipelinememorypassage.ts',
|
|
950
|
+
name: '24-stage transcode pipeline',
|
|
951
|
+
exportname: 'mediapipeline',
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
id: 'm02',
|
|
955
|
+
origin: 'pool:pipelinememorypassage.ts',
|
|
956
|
+
name: 'ffmpeg NVENC command synthesis',
|
|
957
|
+
exportname: 'buildffmpegcommand',
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
id: 'm03',
|
|
961
|
+
origin: 'pool:pipelinememorypassage.ts',
|
|
962
|
+
name: 'passage secure channel ed25519+chacha20',
|
|
963
|
+
exportname: 'passagesecurechannel',
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
id: 'm04',
|
|
967
|
+
origin: 'pool:pipelinememorypassage.ts',
|
|
968
|
+
name: '30 transcode mode taxonomy',
|
|
969
|
+
exportname: 'transcodemodecatalog',
|
|
970
|
+
},
|
|
971
|
+
{
|
|
972
|
+
id: 'm05',
|
|
973
|
+
origin: 'pool:src_virtualization_core.cpp',
|
|
974
|
+
name: 'createoptimal encoder policy',
|
|
975
|
+
exportname: 'createoptimal',
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
id: 'm06',
|
|
979
|
+
origin: 'pool:src_pipeline_memory_passage.ts',
|
|
980
|
+
name: 'v5 stage ordering provenance',
|
|
981
|
+
exportname: 'stageorderv5',
|
|
982
|
+
},
|
|
983
|
+
];
|
|
984
|
+
/** default export keeps the pool orchestrator naming lineage visible. */
|
|
985
|
+
export default mediapipeline;
|
|
986
|
+
//# sourceMappingURL=media.js.map
|