@hypit/hypit 0.0.1 → 0.1.0
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/LICENSE +26 -0
- package/README.md +203 -0
- package/README.zh-CN.md +195 -0
- package/bin/hypit.mjs +46 -0
- package/dist/public/artifact.d.ts +75 -0
- package/dist/public/author-kit.d.ts +559 -0
- package/dist/public/browser-capture.d.ts +56 -0
- package/dist/public/caption.d.ts +751 -0
- package/dist/public/composition.d.ts +672 -0
- package/dist/public/endpoint-kit.d.ts +366 -0
- package/dist/public/generation.d.ts +591 -0
- package/dist/public/hyperframes.d.ts +774 -0
- package/dist/public/media.d.ts +708 -0
- package/dist/public/model-kit.d.ts +523 -0
- package/dist/public/narrative.d.ts +315 -0
- package/dist/public/program-space.d.ts +193 -0
- package/dist/public/runtime-kit.d.ts +427 -0
- package/dist/public/semantic-track.d.ts +418 -0
- package/dist/public/spatial.d.ts +1193 -0
- package/dist/public/speech.d.ts +391 -0
- package/dist/public/studio-adapter.d.ts +686 -0
- package/dist/public/svs.d.ts +311 -0
- package/dist/public/temporal-markup.d.ts +343 -0
- package/dist/public/temporal.d.ts +497 -0
- package/dist/public/text.d.ts +817 -0
- package/dist/public/visual-ir.d.ts +98 -0
- package/docs/public/hypit-logo-dark.svg +36 -0
- package/docs/public/hypit-logo-light.svg +38 -0
- package/examples/README.md +24 -0
- package/examples/minimal-author-package/README.md +18 -0
- package/examples/minimal-author-package/packages/example-component/README.md +44 -0
- package/examples/minimal-author-package/packages/example-component/package.json +27 -0
- package/examples/minimal-author-package/packages/example-component/preview/Box.png +0 -0
- package/examples/minimal-author-package/packages/example-component/preview/build.svrun +6 -0
- package/examples/minimal-author-package/packages/example-component/preview/preview.svml +47 -0
- package/examples/minimal-author-package/packages/example-component/preview/recipes.svs +8 -0
- package/examples/minimal-author-package/packages/example-component/src/activation.ts +10 -0
- package/examples/minimal-author-package/packages/example-component/src/component.ts +44 -0
- package/examples/minimal-author-package/packages/example-component/src/fragment.ts +32 -0
- package/examples/minimal-author-package/packages/example-component/src/index.ts +6 -0
- package/examples/minimal-author-package/packages/example-component/src/manifest.ts +82 -0
- package/examples/minimal-author-package/packages/example-component/src/style.ts +13 -0
- package/examples/minimal-author-package/packages/example-component/src/surface.ts +41 -0
- package/examples/minimal-author-package/packages/example-component/src/temporal.ts +6 -0
- package/examples/minimal-author-package/packages/example-component/tsconfig.json +18 -0
- package/examples/semantic-composition/README.md +35 -0
- package/examples/semantic-composition/chat.svml +25 -0
- package/examples/semantic-composition/chat.svrun +6 -0
- package/examples/semantic-composition/chat.svs +4 -0
- package/examples/semantic-composition/hypit.runtime.json +8 -0
- package/examples/semantic-composition/packages/chat-scene/README.md +29 -0
- package/examples/semantic-composition/packages/chat-scene/package.json +11 -0
- package/examples/semantic-composition/packages/chat-scene/src/activation.ts +112 -0
- package/examples/semantic-composition/packages/chat-scene/src/render.ts +64 -0
- package/examples/semantic-composition/packages/chat-scene/tsconfig.json +18 -0
- package/examples/semantic-composition/packages/responsive-explainer/README.md +45 -0
- package/examples/semantic-composition/packages/responsive-explainer/package.json +11 -0
- package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +90 -0
- package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +68 -0
- package/examples/semantic-composition/packages/responsive-explainer/tsconfig.json +18 -0
- package/package.json +259 -7
- package/packages/artifact/README.md +10 -0
- package/packages/artifact/package.json +16 -0
- package/packages/artifact/src/activation.ts +8 -0
- package/packages/artifact/src/index.ts +24 -0
- package/packages/audio-track/README.md +43 -0
- package/packages/audio-track/package.json +36 -0
- package/packages/audio-track/src/activation.ts +20 -0
- package/packages/audio-track/src/component.ts +40 -0
- package/packages/audio-track/src/fragment.ts +63 -0
- package/packages/audio-track/src/index.ts +7 -0
- package/packages/audio-track/src/manifest.ts +151 -0
- package/packages/audio-track/src/program.ts +254 -0
- package/packages/audio-track/src/surface.ts +187 -0
- package/packages/audio-track/src/types.ts +62 -0
- package/packages/audio-track-studio/README.md +3 -0
- package/packages/audio-track-studio/package.json +14 -0
- package/packages/audio-track-studio/src/activation.ts +7 -0
- package/packages/audio-track-studio/src/index.ts +72 -0
- package/packages/author-kit/README.md +31 -0
- package/packages/author-kit/package.json +16 -0
- package/packages/author-kit/src/index.ts +59 -0
- package/packages/background-removal/README.md +29 -0
- package/packages/background-removal/package.json +16 -0
- package/packages/background-removal/src/activation.ts +18 -0
- package/packages/background-removal/src/component.ts +32 -0
- package/packages/background-removal/src/fragment.ts +18 -0
- package/packages/background-removal/src/index.ts +6 -0
- package/packages/background-removal/src/manifest.ts +45 -0
- package/packages/background-removal/src/program.ts +19 -0
- package/packages/background-removal/src/surface.ts +27 -0
- package/packages/background-removal/src/types.ts +5 -0
- package/packages/browser-capture/README.md +82 -0
- package/packages/browser-capture/package.json +15 -0
- package/packages/browser-capture/src/browser.ts +19 -0
- package/packages/browser-capture/src/index.ts +198 -0
- package/packages/build-result/package.json +13 -0
- package/packages/build-result/src/decode.ts +286 -0
- package/packages/build-result/src/index.ts +25 -0
- package/packages/build-result/src/store.ts +505 -0
- package/packages/build-result/src/types.ts +354 -0
- package/packages/build-result/src/writer.ts +184 -0
- package/packages/build-result-fs/README.md +29 -0
- package/packages/build-result-fs/package.json +17 -0
- package/packages/build-result-fs/src/activation.ts +62 -0
- package/packages/build-result-fs/src/index.ts +1 -0
- package/packages/build-result-kit/README.md +10 -0
- package/packages/build-result-kit/package.json +15 -0
- package/packages/build-result-kit/src/index.ts +144 -0
- package/packages/build-result-s3/README.md +49 -0
- package/packages/build-result-s3/package.json +19 -0
- package/packages/build-result-s3/src/activation.ts +71 -0
- package/packages/build-result-s3/src/client.ts +254 -0
- package/packages/build-result-s3/src/index.ts +4 -0
- package/packages/build-result-s3/src/repository.ts +361 -0
- package/packages/caption/README.md +77 -0
- package/packages/caption/package.json +28 -0
- package/packages/caption/src/activation.ts +17 -0
- package/packages/caption/src/component.ts +38 -0
- package/packages/caption/src/display.ts +111 -0
- package/packages/caption/src/error.ts +9 -0
- package/packages/caption/src/fragment.ts +26 -0
- package/packages/caption/src/index.ts +33 -0
- package/packages/caption/src/manifest.ts +97 -0
- package/packages/caption/src/style.ts +170 -0
- package/packages/caption/src/surface.ts +96 -0
- package/packages/caption/src/temporalize.ts +124 -0
- package/packages/caption/src/types.ts +71 -0
- package/packages/caption-fine/README.md +108 -0
- package/packages/caption-fine/package.json +30 -0
- package/packages/caption-fine/preview/Track.png +0 -0
- package/packages/caption-fine/src/activation.ts +32 -0
- package/packages/caption-fine/src/component.ts +58 -0
- package/packages/caption-fine/src/fragment.ts +112 -0
- package/packages/caption-fine/src/index.ts +19 -0
- package/packages/caption-fine/src/manifest.ts +383 -0
- package/packages/caption-fine/src/recipe.ts +120 -0
- package/packages/caption-fine/src/render.ts +1133 -0
- package/packages/caption-fine/src/schedule.ts +126 -0
- package/packages/caption-fine/src/spacing.ts +69 -0
- package/packages/caption-fine/src/style.ts +370 -0
- package/packages/caption-fine/src/surface.ts +152 -0
- package/packages/caption-fine/src/types.ts +191 -0
- package/packages/caption-fine-studio/README.md +3 -0
- package/packages/caption-fine-studio/package.json +15 -0
- package/packages/caption-fine-studio/src/activation.ts +7 -0
- package/packages/caption-fine-studio/src/index.ts +163 -0
- package/packages/cli/README.md +51 -0
- package/packages/cli/package.json +33 -0
- package/packages/cli/src/arguments.ts +605 -0
- package/packages/cli/src/build-planning.ts +460 -0
- package/packages/cli/src/command.ts +202 -0
- package/packages/cli/src/commands/environment.ts +391 -0
- package/packages/cli/src/commands/execution.ts +321 -0
- package/packages/cli/src/commands/results.ts +187 -0
- package/packages/cli/src/commands/types.ts +9 -0
- package/packages/cli/src/distribution.ts +74 -0
- package/packages/cli/src/index.ts +30 -0
- package/packages/cli/src/machine-view.ts +28 -0
- package/packages/cli/src/main.ts +654 -0
- package/packages/cli/src/oauth.ts +228 -0
- package/packages/cli/src/observation.ts +203 -0
- package/packages/cli/src/output.ts +1007 -0
- package/packages/cli/src/paths.ts +7 -0
- package/packages/cli/src/project-context.ts +38 -0
- package/packages/cli/src/reachability.ts +91 -0
- package/packages/cli/src/result-export.ts +148 -0
- package/packages/cli/src/result-query.ts +46 -0
- package/packages/cli/src/run-file.ts +186 -0
- package/packages/cli/src/runtime-port.ts +13 -0
- package/packages/cli/src/runtime-selection.ts +94 -0
- package/packages/cli/src/runtime-view.ts +15 -0
- package/packages/cli/src/source-discovery.ts +150 -0
- package/packages/cli/src/source-packages.ts +91 -0
- package/packages/cli/src/view.ts +228 -0
- package/packages/comment-sticker/README.md +41 -0
- package/packages/comment-sticker/package.json +29 -0
- package/packages/comment-sticker/preview/Track.png +0 -0
- package/packages/comment-sticker/src/activation.ts +32 -0
- package/packages/comment-sticker/src/author.ts +148 -0
- package/packages/comment-sticker/src/component.ts +97 -0
- package/packages/comment-sticker/src/fragment.ts +124 -0
- package/packages/comment-sticker/src/index.ts +8 -0
- package/packages/comment-sticker/src/manifest.ts +373 -0
- package/packages/comment-sticker/src/program.ts +610 -0
- package/packages/comment-sticker/src/surface.ts +172 -0
- package/packages/comment-sticker/src/types.ts +109 -0
- package/packages/comment-sticker-studio/README.md +3 -0
- package/packages/comment-sticker-studio/package.json +14 -0
- package/packages/comment-sticker-studio/src/activation.ts +7 -0
- package/packages/comment-sticker-studio/src/index.ts +132 -0
- package/packages/compiler-markup-node/README.md +12 -0
- package/packages/compiler-markup-node/package.json +22 -0
- package/packages/compiler-markup-node/src/index.ts +59 -0
- package/packages/compiler-node/README.md +60 -0
- package/packages/compiler-node/package.json +25 -0
- package/packages/compiler-node/src/compiler.ts +207 -0
- package/packages/compiler-node/src/error.ts +11 -0
- package/packages/compiler-node/src/graph-query.ts +51 -0
- package/packages/compiler-node/src/index.ts +27 -0
- package/packages/compiler-node/src/modules.ts +107 -0
- package/packages/compiler-node/src/run.ts +355 -0
- package/packages/component-kit/README.md +97 -0
- package/packages/component-kit/package.json +13 -0
- package/packages/component-kit/src/index.ts +155 -0
- package/packages/composition/README.md +53 -0
- package/packages/composition/package.json +29 -0
- package/packages/composition/src/activation.ts +3 -0
- package/packages/composition/src/component.ts +10 -0
- package/packages/composition/src/index.ts +18 -0
- package/packages/composition/src/manifest.ts +13 -0
- package/packages/composition/src/schema.ts +194 -0
- package/packages/composition/src/track.ts +1403 -0
- package/packages/core/README.md +22 -0
- package/packages/core/package.json +13 -0
- package/packages/core/src/error.ts +12 -0
- package/packages/core/src/graph.ts +341 -0
- package/packages/core/src/index.ts +32 -0
- package/packages/core/src/link.ts +240 -0
- package/packages/core/src/machine.ts +60 -0
- package/packages/core/src/plan.ts +504 -0
- package/packages/core/src/reducer.ts +428 -0
- package/packages/core/src/reference.ts +25 -0
- package/packages/core/src/slice.ts +108 -0
- package/packages/credential-store-env/README.md +11 -0
- package/packages/credential-store-env/package.json +17 -0
- package/packages/credential-store-env/src/activation.ts +25 -0
- package/packages/credential-store-env/src/index.ts +23 -0
- package/packages/credential-store-os/README.md +13 -0
- package/packages/credential-store-os/package.json +22 -0
- package/packages/credential-store-os/runtime/windows-credential.ps1 +59 -0
- package/packages/credential-store-os/src/activation.ts +32 -0
- package/packages/credential-store-os/src/index.ts +2 -0
- package/packages/credential-store-os/src/store.ts +196 -0
- package/packages/deck-track/README.md +52 -0
- package/packages/deck-track/package.json +35 -0
- package/packages/deck-track/preview/DepthStack.png +0 -0
- package/packages/deck-track/src/activation.ts +32 -0
- package/packages/deck-track/src/author.ts +217 -0
- package/packages/deck-track/src/component.ts +86 -0
- package/packages/deck-track/src/fragment.ts +148 -0
- package/packages/deck-track/src/index.ts +16 -0
- package/packages/deck-track/src/lower.ts +370 -0
- package/packages/deck-track/src/manifest.ts +438 -0
- package/packages/deck-track/src/program.ts +367 -0
- package/packages/deck-track/src/surface.ts +286 -0
- package/packages/deck-track/src/types.ts +119 -0
- package/packages/deck-track-studio/README.md +3 -0
- package/packages/deck-track-studio/package.json +14 -0
- package/packages/deck-track-studio/src/activation.ts +7 -0
- package/packages/deck-track-studio/src/index.ts +134 -0
- package/packages/driver-node/README.md +23 -0
- package/packages/driver-node/package.json +18 -0
- package/packages/driver-node/src/driver.ts +616 -0
- package/packages/driver-node/src/index.ts +10 -0
- package/packages/driver-node/src/planning.ts +67 -0
- package/packages/driver-node/src/registry.ts +234 -0
- package/packages/driver-node/src/resources.ts +36 -0
- package/packages/driver-node/src/types.ts +69 -0
- package/packages/elaborator/README.md +74 -0
- package/packages/elaborator/package.json +16 -0
- package/packages/elaborator/src/author.ts +308 -0
- package/packages/elaborator/src/fragment.ts +505 -0
- package/packages/elaborator/src/frontend-facet.ts +30 -0
- package/packages/elaborator/src/index.ts +78 -0
- package/packages/elaborator/src/source.ts +608 -0
- package/packages/endpoint-kit/README.md +111 -0
- package/packages/endpoint-kit/package.json +14 -0
- package/packages/endpoint-kit/src/index.ts +488 -0
- package/packages/estimate/README.md +32 -0
- package/packages/estimate/package.json +20 -0
- package/packages/estimate/src/activation.ts +11 -0
- package/packages/estimate/src/index.ts +16 -0
- package/packages/estimate/src/manifest.ts +34 -0
- package/packages/estimate/src/policy.ts +70 -0
- package/packages/estimate/src/program.ts +196 -0
- package/packages/estimate/src/types.ts +15 -0
- package/packages/film/README.md +49 -0
- package/packages/film/package.json +34 -0
- package/packages/film/src/activation.ts +16 -0
- package/packages/film/src/component.ts +61 -0
- package/packages/film/src/fragment.ts +83 -0
- package/packages/film/src/index.ts +11 -0
- package/packages/film/src/manifest.ts +152 -0
- package/packages/film/src/program.ts +110 -0
- package/packages/film/src/recipe.ts +24 -0
- package/packages/film/src/surface.ts +146 -0
- package/packages/film/src/types.ts +26 -0
- package/packages/film-studio/package.json +16 -0
- package/packages/film-studio/src/activation.ts +8 -0
- package/packages/film-studio/src/index.ts +17 -0
- package/packages/fonts-open/README.md +77 -0
- package/packages/fonts-open/package.json +130 -0
- package/packages/fonts-open/src/activation.ts +30 -0
- package/packages/fonts-open/src/catalog.ts +317 -0
- package/packages/fonts-open/src/index.ts +13 -0
- package/packages/fonts-open/src/manifest.ts +83 -0
- package/packages/fonts-open/src/surface.ts +239 -0
- package/packages/generation/README.md +19 -0
- package/packages/generation/package.json +23 -0
- package/packages/generation/src/activation.ts +9 -0
- package/packages/generation/src/component.ts +77 -0
- package/packages/generation/src/identity.ts +80 -0
- package/packages/generation/src/index.ts +79 -0
- package/packages/generation/src/manifest.ts +65 -0
- package/packages/generation/src/mapping.ts +231 -0
- package/packages/generation/src/ports.ts +222 -0
- package/packages/generation/src/request.ts +427 -0
- package/packages/generation/src/schema.ts +62 -0
- package/packages/generation/src/types.ts +17 -0
- package/packages/gpt-image/README.md +54 -0
- package/packages/gpt-image/package.json +34 -0
- package/packages/gpt-image/src/activation.ts +39 -0
- package/packages/gpt-image/src/fragment.ts +101 -0
- package/packages/gpt-image/src/index.ts +203 -0
- package/packages/gpt-image/src/surface.ts +194 -0
- package/packages/gpt-image-kits/README.md +44 -0
- package/packages/gpt-image-kits/kits/phone-ugc-v1.svs +34 -0
- package/packages/gpt-image-kits/package.json +15 -0
- package/packages/grok-imagine/README.md +21 -0
- package/packages/grok-imagine/package.json +21 -0
- package/packages/grok-imagine/src/activation.ts +29 -0
- package/packages/grok-imagine/src/index.ts +174 -0
- package/packages/grok-imagine/src/surface.ts +149 -0
- package/packages/host/README.md +5 -0
- package/packages/host/package.json +10 -0
- package/packages/host/src/facet.ts +6 -0
- package/packages/host/src/frontend.ts +56 -0
- package/packages/host/src/index.ts +9 -0
- package/packages/hyperframes/README.md +69 -0
- package/packages/hyperframes/package.json +36 -0
- package/packages/hyperframes/src/activation.ts +8 -0
- package/packages/hyperframes/src/browser-program.ts +79 -0
- package/packages/hyperframes/src/component.ts +32 -0
- package/packages/hyperframes/src/document.ts +827 -0
- package/packages/hyperframes/src/fragment.ts +32 -0
- package/packages/hyperframes/src/index.ts +13 -0
- package/packages/hyperframes/src/manifest.ts +67 -0
- package/packages/hyperframes/src/project.ts +118 -0
- package/packages/hyperframes/src/text.ts +1179 -0
- package/packages/hyperframes/src/types.ts +38 -0
- package/packages/image-compose/README.md +25 -0
- package/packages/image-compose/package.json +18 -0
- package/packages/image-compose/src/activation.ts +21 -0
- package/packages/image-compose/src/component.ts +100 -0
- package/packages/image-compose/src/fragment.ts +54 -0
- package/packages/image-compose/src/index.ts +10 -0
- package/packages/image-compose/src/manifest.ts +119 -0
- package/packages/image-compose/src/program.ts +75 -0
- package/packages/image-compose/src/surface.ts +83 -0
- package/packages/image-compose/src/types.ts +22 -0
- package/packages/image-transform/README.md +29 -0
- package/packages/image-transform/package.json +21 -0
- package/packages/image-transform/src/activation.ts +33 -0
- package/packages/image-transform/src/component.ts +67 -0
- package/packages/image-transform/src/fragment.ts +25 -0
- package/packages/image-transform/src/index.ts +13 -0
- package/packages/image-transform/src/manifest.ts +209 -0
- package/packages/image-transform/src/program.ts +23 -0
- package/packages/image-transform/src/surface.ts +216 -0
- package/packages/image-transform/src/types.ts +20 -0
- package/packages/interview-emoji-reveal/README.md +39 -0
- package/packages/interview-emoji-reveal/package.json +23 -0
- package/packages/interview-emoji-reveal/preview/Track.png +0 -0
- package/packages/interview-emoji-reveal/src/activation.ts +14 -0
- package/packages/interview-emoji-reveal/src/component.ts +45 -0
- package/packages/interview-emoji-reveal/src/fragment.ts +62 -0
- package/packages/interview-emoji-reveal/src/index.ts +16 -0
- package/packages/interview-emoji-reveal/src/manifest.ts +174 -0
- package/packages/interview-emoji-reveal/src/program.ts +242 -0
- package/packages/interview-emoji-reveal/src/style.ts +47 -0
- package/packages/interview-emoji-reveal/src/surface.ts +110 -0
- package/packages/interview-emoji-reveal/src/types.ts +52 -0
- package/packages/markup/README.md +81 -0
- package/packages/markup/package.json +16 -0
- package/packages/markup/src/element.ts +39 -0
- package/packages/markup/src/error.ts +20 -0
- package/packages/markup/src/frontend.ts +518 -0
- package/packages/markup/src/host-facet.ts +115 -0
- package/packages/markup/src/index.ts +25 -0
- package/packages/markup/src/registry.ts +83 -0
- package/packages/markup/src/syntax.ts +271 -0
- package/packages/markup/src/types.ts +246 -0
- package/packages/media/README.md +37 -0
- package/packages/media/package.json +19 -0
- package/packages/media/src/activation.ts +38 -0
- package/packages/media/src/component.ts +16 -0
- package/packages/media/src/frame-range.ts +33 -0
- package/packages/media/src/identity.ts +227 -0
- package/packages/media/src/index.ts +15 -0
- package/packages/media/src/manifest.ts +122 -0
- package/packages/media/src/render.ts +140 -0
- package/packages/media/src/schema.ts +69 -0
- package/packages/media/src/surface.ts +150 -0
- package/packages/media/src/types.ts +121 -0
- package/packages/media-execution/README.md +28 -0
- package/packages/media-execution/package.json +17 -0
- package/packages/media-execution/src/execute.ts +1322 -0
- package/packages/media-execution/src/index.ts +16 -0
- package/packages/media-execution/src/probe.ts +315 -0
- package/packages/media-execution/src/surface.ts +286 -0
- package/packages/media-execution/src/toolchain.ts +81 -0
- package/packages/media-execution/src/webp.ts +200 -0
- package/packages/media-pipeline/README.md +113 -0
- package/packages/media-pipeline/package.json +27 -0
- package/packages/media-pipeline/src/activation.ts +47 -0
- package/packages/media-pipeline/src/audio-plan.ts +113 -0
- package/packages/media-pipeline/src/component.ts +373 -0
- package/packages/media-pipeline/src/fragment.ts +167 -0
- package/packages/media-pipeline/src/index.ts +46 -0
- package/packages/media-pipeline/src/manifest.ts +653 -0
- package/packages/media-pipeline/src/operations.ts +248 -0
- package/packages/media-pipeline/src/selection.ts +110 -0
- package/packages/media-pipeline/src/surface.ts +389 -0
- package/packages/media-pipeline/src/types.ts +175 -0
- package/packages/media-track/README.md +197 -0
- package/packages/media-track/package.json +29 -0
- package/packages/media-track/preview/Track.png +0 -0
- package/packages/media-track/preview/build.svrun +5 -0
- package/packages/media-track/preview/flush.png +0 -0
- package/packages/media-track/preview/preview.svml +47 -0
- package/packages/media-track/preview/recipes.svs +23 -0
- package/packages/media-track/preview/rounded.png +0 -0
- package/packages/media-track/src/activation.ts +20 -0
- package/packages/media-track/src/author.ts +317 -0
- package/packages/media-track/src/component.ts +162 -0
- package/packages/media-track/src/fragment.ts +57 -0
- package/packages/media-track/src/index.ts +65 -0
- package/packages/media-track/src/layers.ts +308 -0
- package/packages/media-track/src/lower.ts +335 -0
- package/packages/media-track/src/manifest.ts +624 -0
- package/packages/media-track/src/motion.ts +387 -0
- package/packages/media-track/src/performance.ts +37 -0
- package/packages/media-track/src/presentation.ts +35 -0
- package/packages/media-track/src/program.ts +565 -0
- package/packages/media-track/src/sampling.ts +118 -0
- package/packages/media-track/src/sequence.ts +403 -0
- package/packages/media-track/src/sounds.ts +71 -0
- package/packages/media-track/src/surface.ts +668 -0
- package/packages/media-track/src/types.ts +311 -0
- package/packages/media-track-studio/README.md +3 -0
- package/packages/media-track-studio/package.json +15 -0
- package/packages/media-track-studio/src/activation.ts +7 -0
- package/packages/media-track-studio/src/index.ts +235 -0
- package/packages/mimo-speech/README.md +33 -0
- package/packages/mimo-speech/package.json +21 -0
- package/packages/mimo-speech/src/activation.ts +32 -0
- package/packages/mimo-speech/src/fragment.ts +11 -0
- package/packages/mimo-speech/src/index.ts +160 -0
- package/packages/mimo-speech/src/surface.ts +193 -0
- package/packages/minimax-h3/README.md +21 -0
- package/packages/minimax-h3/package.json +21 -0
- package/packages/minimax-h3/src/activation.ts +14 -0
- package/packages/minimax-h3/src/index.ts +188 -0
- package/packages/minimax-h3/src/surface.ts +87 -0
- package/packages/model-kit/README.md +52 -0
- package/packages/model-kit/package.json +19 -0
- package/packages/model-kit/src/index.ts +728 -0
- package/packages/nano-banana/README.md +23 -0
- package/packages/nano-banana/package.json +21 -0
- package/packages/nano-banana/src/activation.ts +14 -0
- package/packages/nano-banana/src/index.ts +172 -0
- package/packages/nano-banana/src/surface.ts +120 -0
- package/packages/narrative/README.md +7 -0
- package/packages/narrative/package.json +17 -0
- package/packages/narrative/src/activation.ts +7 -0
- package/packages/narrative/src/component.ts +33 -0
- package/packages/narrative/src/identity.ts +131 -0
- package/packages/narrative/src/index.ts +11 -0
- package/packages/narrative/src/manifest.ts +30 -0
- package/packages/narrative/src/schema.ts +89 -0
- package/packages/narrative/src/types.ts +141 -0
- package/packages/package-loader-node/README.md +23 -0
- package/packages/package-loader-node/package.json +15 -0
- package/packages/package-loader-node/src/contribution.ts +97 -0
- package/packages/package-loader-node/src/distribution-resolution.ts +146 -0
- package/packages/package-loader-node/src/index.ts +27 -0
- package/packages/package-loader-node/src/loader.ts +301 -0
- package/packages/package-loader-node/src/location.ts +279 -0
- package/packages/package-loader-node/src/types.ts +60 -0
- package/packages/program-space/README.md +20 -0
- package/packages/program-space/package.json +17 -0
- package/packages/program-space/src/activation.ts +19 -0
- package/packages/program-space/src/index.ts +107 -0
- package/packages/program-space/src/surface.ts +55 -0
- package/packages/protocol/README.md +11 -0
- package/packages/protocol/package.json +10 -0
- package/packages/protocol/src/build-id.ts +52 -0
- package/packages/protocol/src/build.ts +265 -0
- package/packages/protocol/src/canonical.ts +37 -0
- package/packages/protocol/src/error.ts +11 -0
- package/packages/protocol/src/identity.ts +59 -0
- package/packages/protocol/src/index.ts +9 -0
- package/packages/protocol/src/module.ts +67 -0
- package/packages/protocol/src/value.ts +88 -0
- package/packages/provider-hyperframes-aws-lambda/README.md +30 -0
- package/packages/provider-hyperframes-aws-lambda/package.json +30 -0
- package/packages/provider-hyperframes-aws-lambda/src/activation.ts +97 -0
- package/packages/provider-hyperframes-aws-lambda/src/client.ts +114 -0
- package/packages/provider-hyperframes-aws-lambda/src/index.ts +21 -0
- package/packages/provider-hyperframes-aws-lambda/src/provider.ts +522 -0
- package/packages/provider-hyperframes-local/README.md +129 -0
- package/packages/provider-hyperframes-local/package.json +34 -0
- package/packages/provider-hyperframes-local/src/activation.ts +107 -0
- package/packages/provider-hyperframes-local/src/capture-process.ts +110 -0
- package/packages/provider-hyperframes-local/src/capture-worker.ts +17 -0
- package/packages/provider-hyperframes-local/src/capture.ts +184 -0
- package/packages/provider-hyperframes-local/src/index.ts +10 -0
- package/packages/provider-hyperframes-local/src/options.ts +19 -0
- package/packages/provider-hyperframes-local/src/output.ts +73 -0
- package/packages/provider-hyperframes-local/src/process.ts +83 -0
- package/packages/provider-hyperframes-local/src/program.ts +58 -0
- package/packages/provider-hyperframes-local/src/provider.ts +62 -0
- package/packages/provider-hyperframes-local/src/render.ts +114 -0
- package/packages/provider-hyperframes-local/src/sampling.ts +89 -0
- package/packages/provider-hypihub/README.md +143 -0
- package/packages/provider-hypihub/package.json +26 -0
- package/packages/provider-hypihub/src/activation.ts +91 -0
- package/packages/provider-hypihub/src/index.ts +2 -0
- package/packages/provider-hypihub/src/mapping.ts +145 -0
- package/packages/provider-hypihub/src/oauth.ts +113 -0
- package/packages/provider-hypihub/src/provider.ts +566 -0
- package/packages/provider-hypihub/src/routes.ts +134 -0
- package/packages/provider-hypihub/src/upload.ts +402 -0
- package/packages/provider-image-opencv-local/README.md +16 -0
- package/packages/provider-image-opencv-local/package.json +27 -0
- package/packages/provider-image-opencv-local/runtime/raster_execute.py +299 -0
- package/packages/provider-image-opencv-local/src/activation.ts +61 -0
- package/packages/provider-image-opencv-local/src/deployment.ts +68 -0
- package/packages/provider-image-opencv-local/src/index.ts +2 -0
- package/packages/provider-image-opencv-local/src/program.ts +60 -0
- package/packages/provider-image-opencv-local/src/provider.ts +155 -0
- package/packages/provider-kie/README.md +134 -0
- package/packages/provider-kie/package.json +43 -0
- package/packages/provider-kie/src/activation.ts +71 -0
- package/packages/provider-kie/src/index.ts +10 -0
- package/packages/provider-kie/src/mapping.ts +182 -0
- package/packages/provider-kie/src/provider.ts +657 -0
- package/packages/provider-kie/src/routes.ts +150 -0
- package/packages/provider-media-local/README.md +58 -0
- package/packages/provider-media-local/package.json +28 -0
- package/packages/provider-media-local/src/activation.ts +65 -0
- package/packages/provider-media-local/src/index.ts +2 -0
- package/packages/provider-media-local/src/program.ts +19 -0
- package/packages/provider-media-local/src/provider.ts +150 -0
- package/packages/provider-whisperx-local/README.md +44 -0
- package/packages/provider-whisperx-local/package.json +27 -0
- package/packages/provider-whisperx-local/src/activation.ts +93 -0
- package/packages/provider-whisperx-local/src/index.ts +5 -0
- package/packages/provider-whisperx-local/src/program.ts +157 -0
- package/packages/provider-whisperx-local/src/provider.ts +191 -0
- package/packages/provider-xiaomi-mimo/README.md +32 -0
- package/packages/provider-xiaomi-mimo/package.json +24 -0
- package/packages/provider-xiaomi-mimo/src/activation.ts +57 -0
- package/packages/provider-xiaomi-mimo/src/index.ts +5 -0
- package/packages/provider-xiaomi-mimo/src/provider.ts +214 -0
- package/packages/ranking/README.md +67 -0
- package/packages/ranking/package.json +33 -0
- package/packages/ranking/preview/Column.svg +29 -0
- package/packages/ranking/preview/TierBoard.png +0 -0
- package/packages/ranking/preview/TierBoard.svg +36 -0
- package/packages/ranking/preview/TopThree.png +0 -0
- package/packages/ranking/src/activation.ts +38 -0
- package/packages/ranking/src/component.ts +271 -0
- package/packages/ranking/src/fragment.ts +206 -0
- package/packages/ranking/src/index.ts +26 -0
- package/packages/ranking/src/manifest.ts +807 -0
- package/packages/ranking/src/render.ts +698 -0
- package/packages/ranking/src/schedule.ts +895 -0
- package/packages/ranking/src/style.ts +272 -0
- package/packages/ranking/src/surface.ts +322 -0
- package/packages/ranking/src/tier.ts +176 -0
- package/packages/ranking/src/types.ts +277 -0
- package/packages/ranking-studio/README.md +3 -0
- package/packages/ranking-studio/package.json +14 -0
- package/packages/ranking-studio/src/activation.ts +7 -0
- package/packages/ranking-studio/src/index.ts +255 -0
- package/packages/raster/README.md +7 -0
- package/packages/raster/package.json +14 -0
- package/packages/raster/src/activation.ts +7 -0
- package/packages/raster/src/index.ts +7 -0
- package/packages/raster/src/manifest.ts +14 -0
- package/packages/raster/src/program.ts +128 -0
- package/packages/raster/src/schema.ts +53 -0
- package/packages/raster/src/types.ts +61 -0
- package/packages/render-hyperframes/README.md +58 -0
- package/packages/render-hyperframes/package.json +33 -0
- package/packages/render-hyperframes/src/activation.ts +18 -0
- package/packages/render-hyperframes/src/component.ts +37 -0
- package/packages/render-hyperframes/src/fragment.ts +73 -0
- package/packages/render-hyperframes/src/index.ts +6 -0
- package/packages/render-hyperframes/src/manifest.ts +100 -0
- package/packages/render-hyperframes/src/product.ts +29 -0
- package/packages/render-hyperframes/src/surface.ts +65 -0
- package/packages/resource-store-fs/README.md +13 -0
- package/packages/resource-store-fs/package.json +14 -0
- package/packages/resource-store-fs/src/index.ts +2 -0
- package/packages/resource-store-fs/src/store.ts +154 -0
- package/packages/resource-store-s3/README.md +15 -0
- package/packages/resource-store-s3/package.json +15 -0
- package/packages/resource-store-s3/src/client.ts +138 -0
- package/packages/resource-store-s3/src/index.ts +10 -0
- package/packages/resource-store-s3/src/store.ts +258 -0
- package/packages/run/README.md +23 -0
- package/packages/run/package.json +16 -0
- package/packages/run/src/candidate.ts +33 -0
- package/packages/run/src/facet.ts +59 -0
- package/packages/run/src/frontend-facet.ts +23 -0
- package/packages/run/src/frontend.ts +62 -0
- package/packages/run/src/graph.ts +65 -0
- package/packages/run/src/index.ts +33 -0
- package/packages/run/src/registry.ts +24 -0
- package/packages/run/src/resolve.ts +213 -0
- package/packages/run/src/types.ts +147 -0
- package/packages/run-markup/README.md +60 -0
- package/packages/run-markup/package.json +22 -0
- package/packages/run-markup/src/activation.ts +10 -0
- package/packages/run-markup/src/frontend.ts +16 -0
- package/packages/run-markup/src/index.ts +5 -0
- package/packages/run-markup/src/syntax.ts +304 -0
- package/packages/runtime/README.md +39 -0
- package/packages/runtime/package.json +15 -0
- package/packages/runtime/src/capacity.ts +51 -0
- package/packages/runtime/src/catalog.ts +30 -0
- package/packages/runtime/src/credentials.ts +124 -0
- package/packages/runtime/src/environment.ts +6 -0
- package/packages/runtime/src/execution.ts +125 -0
- package/packages/runtime/src/index.ts +24 -0
- package/packages/runtime/src/operations.ts +99 -0
- package/packages/runtime/src/scheduler.ts +281 -0
- package/packages/runtime/src/submission.ts +24 -0
- package/packages/runtime/src/types.ts +157 -0
- package/packages/runtime-host-node/README.md +25 -0
- package/packages/runtime-host-node/package.json +19 -0
- package/packages/runtime-host-node/src/index.ts +421 -0
- package/packages/runtime-host-node/src/packages.ts +158 -0
- package/packages/runtime-kit/README.md +42 -0
- package/packages/runtime-kit/package.json +16 -0
- package/packages/runtime-kit/src/index.ts +307 -0
- package/packages/runtime-kit/src/request-deadline.ts +17 -0
- package/packages/runtime-local/README.md +119 -0
- package/packages/runtime-local/package.json +33 -0
- package/packages/runtime-local/src/actions.ts +20 -0
- package/packages/runtime-local/src/config.ts +1229 -0
- package/packages/runtime-local/src/control.ts +120 -0
- package/packages/runtime-local/src/credentials.ts +61 -0
- package/packages/runtime-local/src/host.ts +174 -0
- package/packages/runtime-local/src/index.ts +36 -0
- package/packages/runtime-local/src/process-control.ts +59 -0
- package/packages/runtime-local/src/process-logs.ts +33 -0
- package/packages/runtime-local/src/programs.ts +441 -0
- package/packages/runtime-local/src/result-writer.ts +246 -0
- package/packages/runtime-local/src/runtime.ts +342 -0
- package/packages/runtime-local/src/types.ts +100 -0
- package/packages/runtime-local/src/worker-process.ts +343 -0
- package/packages/runtime-local/src/worker.ts +449 -0
- package/packages/screen-overlay/README.md +17 -0
- package/packages/screen-overlay/package.json +31 -0
- package/packages/screen-overlay/preview/Track.png +0 -0
- package/packages/screen-overlay/src/activation.ts +15 -0
- package/packages/screen-overlay/src/component.ts +20 -0
- package/packages/screen-overlay/src/fragment.ts +40 -0
- package/packages/screen-overlay/src/index.ts +7 -0
- package/packages/screen-overlay/src/manifest.ts +305 -0
- package/packages/screen-overlay/src/program.ts +321 -0
- package/packages/screen-overlay/src/surface.ts +90 -0
- package/packages/screen-overlay/src/types.ts +69 -0
- package/packages/screen-overlay-studio/README.md +3 -0
- package/packages/screen-overlay-studio/package.json +14 -0
- package/packages/screen-overlay-studio/src/activation.ts +7 -0
- package/packages/screen-overlay-studio/src/index.ts +80 -0
- package/packages/script/README.md +137 -0
- package/packages/script/package.json +22 -0
- package/packages/script/src/activation.ts +20 -0
- package/packages/script/src/edit.ts +174 -0
- package/packages/script/src/error.ts +13 -0
- package/packages/script/src/format.ts +83 -0
- package/packages/script/src/index.ts +20 -0
- package/packages/script/src/lexical.ts +133 -0
- package/packages/script/src/manifest.ts +95 -0
- package/packages/script/src/narrative.ts +232 -0
- package/packages/script/src/parser.ts +850 -0
- package/packages/script/src/surface.ts +132 -0
- package/packages/script/src/types.ts +125 -0
- package/packages/script-studio/package.json +13 -0
- package/packages/script-studio/src/activation.ts +8 -0
- package/packages/script-studio/src/index.ts +61 -0
- package/packages/seedance/README.md +19 -0
- package/packages/seedance/package.json +22 -0
- package/packages/seedance/src/activation.ts +38 -0
- package/packages/seedance/src/fragment.ts +46 -0
- package/packages/seedance/src/index.ts +329 -0
- package/packages/seedance/src/surface.ts +355 -0
- package/packages/seedance-kits/README.md +153 -0
- package/packages/seedance-kits/kits/broll-v1.svs +52 -0
- package/packages/seedance-kits/kits/call-v1.svs +55 -0
- package/packages/seedance-kits/kits/camera-reference-v1.svs +9 -0
- package/packages/seedance-kits/kits/motion-reference-v1.svs +9 -0
- package/packages/seedance-kits/kits/podcast-v1.svs +55 -0
- package/packages/seedance-kits/kits/speaker-v1.svs +136 -0
- package/packages/seedance-kits/kits/street-interview-v1.svs +49 -0
- package/packages/seedance-kits/package.json +24 -0
- package/packages/seedream/README.md +21 -0
- package/packages/seedream/package.json +21 -0
- package/packages/seedream/src/activation.ts +12 -0
- package/packages/seedream/src/index.ts +162 -0
- package/packages/seedream/src/surface.ts +84 -0
- package/packages/semantic-take-adjust/package.json +21 -0
- package/packages/semantic-take-adjust/src/activation.ts +22 -0
- package/packages/semantic-take-adjust/src/component.ts +31 -0
- package/packages/semantic-take-adjust/src/fragment.ts +24 -0
- package/packages/semantic-take-adjust/src/index.ts +12 -0
- package/packages/semantic-take-adjust/src/manifest.ts +57 -0
- package/packages/semantic-take-adjust/src/program.ts +49 -0
- package/packages/semantic-take-adjust/src/surface.ts +96 -0
- package/packages/semantic-take-adjust/src/types.ts +9 -0
- package/packages/semantic-track/README.md +21 -0
- package/packages/semantic-track/package.json +22 -0
- package/packages/semantic-track/src/activation.ts +8 -0
- package/packages/semantic-track/src/component.ts +24 -0
- package/packages/semantic-track/src/identity.ts +58 -0
- package/packages/semantic-track/src/index.ts +6 -0
- package/packages/semantic-track/src/location.ts +81 -0
- package/packages/semantic-track/src/manifest.ts +38 -0
- package/packages/semantic-track/src/projection.ts +71 -0
- package/packages/semantic-track/src/types.ts +26 -0
- package/packages/source/README.md +13 -0
- package/packages/source/package.json +13 -0
- package/packages/source/src/header.ts +80 -0
- package/packages/source/src/index.ts +17 -0
- package/packages/source/src/unit.ts +38 -0
- package/packages/spatial/README.md +77 -0
- package/packages/spatial/package.json +24 -0
- package/packages/spatial/src/activation.ts +43 -0
- package/packages/spatial/src/author.ts +59 -0
- package/packages/spatial/src/component.ts +45 -0
- package/packages/spatial/src/fragment.ts +36 -0
- package/packages/spatial/src/geometry.ts +238 -0
- package/packages/spatial/src/index.ts +37 -0
- package/packages/spatial/src/manifest.ts +341 -0
- package/packages/spatial/src/region-timeline.ts +69 -0
- package/packages/spatial/src/schema.ts +47 -0
- package/packages/spatial/src/surface.ts +319 -0
- package/packages/spatial/src/types.ts +101 -0
- package/packages/speech/README.md +16 -0
- package/packages/speech/package.json +19 -0
- package/packages/speech/src/activation.ts +7 -0
- package/packages/speech/src/component.ts +43 -0
- package/packages/speech/src/identity.ts +73 -0
- package/packages/speech/src/index.ts +6 -0
- package/packages/speech/src/manifest.ts +30 -0
- package/packages/speech/src/materialize.ts +103 -0
- package/packages/speech/src/schema.ts +42 -0
- package/packages/speech/src/types.ts +54 -0
- package/packages/speech-alignment/README.md +29 -0
- package/packages/speech-alignment/package.json +25 -0
- package/packages/speech-alignment/src/activation.ts +8 -0
- package/packages/speech-alignment/src/align.ts +235 -0
- package/packages/speech-alignment/src/component.ts +37 -0
- package/packages/speech-alignment/src/error.ts +9 -0
- package/packages/speech-alignment/src/index.ts +7 -0
- package/packages/speech-alignment/src/local.ts +64 -0
- package/packages/speech-alignment/src/locate.ts +473 -0
- package/packages/speech-alignment/src/manifest.ts +37 -0
- package/packages/speech-alignment/src/normalize.ts +79 -0
- package/packages/speech-alignment/src/types.ts +30 -0
- package/packages/speech-evidence/README.md +3 -0
- package/packages/speech-evidence/package.json +16 -0
- package/packages/speech-evidence/src/activation.ts +3 -0
- package/packages/speech-evidence/src/index.ts +102 -0
- package/packages/speech-track/README.md +51 -0
- package/packages/speech-track/package.json +28 -0
- package/packages/speech-track/preview/Track.png +0 -0
- package/packages/speech-track/src/activation.ts +19 -0
- package/packages/speech-track/src/component.ts +45 -0
- package/packages/speech-track/src/fragment.ts +74 -0
- package/packages/speech-track/src/index.ts +7 -0
- package/packages/speech-track/src/manifest.ts +73 -0
- package/packages/speech-track/src/program.ts +64 -0
- package/packages/speech-track/src/surface.ts +35 -0
- package/packages/speech-track/src/types.ts +6 -0
- package/packages/speech-track-studio/README.md +3 -0
- package/packages/speech-track-studio/package.json +14 -0
- package/packages/speech-track-studio/src/activation.ts +7 -0
- package/packages/speech-track-studio/src/index.ts +40 -0
- package/packages/store-sqlite/README.md +14 -0
- package/packages/store-sqlite/package.json +18 -0
- package/packages/store-sqlite/src/index.ts +2 -0
- package/packages/store-sqlite/src/store.ts +1101 -0
- package/packages/studio/README.md +125 -0
- package/packages/studio/index.html +10 -0
- package/packages/studio/package.json +50 -0
- package/packages/studio/src/build-library.ts +281 -0
- package/packages/studio/src/companion-assembly.ts +39 -0
- package/packages/studio/src/compile.ts +166 -0
- package/packages/studio/src/domain.ts +139 -0
- package/packages/studio/src/execute.ts +57 -0
- package/packages/studio/src/fallback-companions.ts +98 -0
- package/packages/studio/src/observe.ts +202 -0
- package/packages/studio/src/parameter-values.ts +81 -0
- package/packages/studio/src/parameters.ts +550 -0
- package/packages/studio/src/preview/render.ts +51 -0
- package/packages/studio/src/preview/runtime-shim.ts +184 -0
- package/packages/studio/src/programme.ts +276 -0
- package/packages/studio/src/run.ts +85 -0
- package/packages/studio/src/server.ts +725 -0
- package/packages/studio/src/session.ts +111 -0
- package/packages/studio/src/shared.ts +315 -0
- package/packages/studio/src/snapshot.ts +454 -0
- package/packages/studio/src/source-transaction.ts +57 -0
- package/packages/studio/src/storyboard.ts +133 -0
- package/packages/studio/src/studio-preflight.ts +198 -0
- package/packages/studio/src/studio-registry.ts +406 -0
- package/packages/studio/src/studio-trace.ts +136 -0
- package/packages/studio/src/style.css +1525 -0
- package/packages/studio/src/surface-preview.ts +35 -0
- package/packages/studio/src/temporal-graph.ts +227 -0
- package/packages/studio/src/ui/code.ts +450 -0
- package/packages/studio/src/ui/icons.ts +51 -0
- package/packages/studio/src/ui/library.ts +378 -0
- package/packages/studio/src/ui/main.ts +1001 -0
- package/packages/studio/src/ui/markers.ts +152 -0
- package/packages/studio/src/ui/material-preview.ts +176 -0
- package/packages/studio/src/ui/overlay.ts +144 -0
- package/packages/studio/src/ui/resize.ts +74 -0
- package/packages/studio/src/ui/selection.ts +178 -0
- package/packages/studio/src/ui/stage.ts +231 -0
- package/packages/studio/src/ui/syntax.ts +195 -0
- package/packages/studio/src/ui/timeline.ts +1041 -0
- package/packages/studio/src/ui/writeback.ts +10 -0
- package/packages/studio/src/ui/zoom.ts +129 -0
- package/packages/studio/start.ts +143 -0
- package/packages/studio-adapter/README.md +186 -0
- package/packages/studio-adapter/package.json +14 -0
- package/packages/studio-adapter/src/index.ts +850 -0
- package/packages/svs/README.md +37 -0
- package/packages/svs/package.json +21 -0
- package/packages/svs/src/activation.ts +11 -0
- package/packages/svs/src/format.ts +16 -0
- package/packages/svs/src/frontend.ts +33 -0
- package/packages/svs/src/index.ts +5 -0
- package/packages/svs/src/manifest.ts +17 -0
- package/packages/svs/src/parser.ts +279 -0
- package/packages/svs/src/types.ts +26 -0
- package/packages/temporal/README.md +31 -0
- package/packages/temporal/package.json +20 -0
- package/packages/temporal/src/activation.ts +9 -0
- package/packages/temporal/src/component.ts +68 -0
- package/packages/temporal/src/index.ts +110 -0
- package/packages/temporal/src/location.ts +67 -0
- package/packages/temporal/src/projection.ts +280 -0
- package/packages/temporal/src/rational.ts +80 -0
- package/packages/temporal/src/sample.ts +43 -0
- package/packages/temporal/src/schedule.ts +52 -0
- package/packages/temporal/src/types.ts +124 -0
- package/packages/temporal-markup/README.md +75 -0
- package/packages/temporal-markup/package.json +18 -0
- package/packages/temporal-markup/src/index.ts +537 -0
- package/packages/temporal-markup/src/space.ts +59 -0
- package/packages/text/README.md +59 -0
- package/packages/text/package.json +21 -0
- package/packages/text/src/activation.ts +33 -0
- package/packages/text/src/component.ts +72 -0
- package/packages/text/src/fragment.ts +57 -0
- package/packages/text/src/frontend.ts +39 -0
- package/packages/text/src/index.ts +27 -0
- package/packages/text/src/manifest.ts +170 -0
- package/packages/text/src/program.ts +418 -0
- package/packages/text/src/surface.ts +212 -0
- package/packages/text/src/svs.ts +189 -0
- package/packages/text/src/types.ts +82 -0
- package/packages/transport-aws-lambda/README.md +20 -0
- package/packages/transport-aws-lambda/package.json +14 -0
- package/packages/transport-aws-lambda/src/index.ts +131 -0
- package/packages/typography-track/README.md +50 -0
- package/packages/typography-track/package.json +34 -0
- package/packages/typography-track/preview/Mask.png +0 -0
- package/packages/typography-track/preview/Track.png +0 -0
- package/packages/typography-track/src/activation.ts +36 -0
- package/packages/typography-track/src/component.ts +93 -0
- package/packages/typography-track/src/fragment.ts +30 -0
- package/packages/typography-track/src/index.ts +11 -0
- package/packages/typography-track/src/manifest.ts +556 -0
- package/packages/typography-track/src/program.ts +622 -0
- package/packages/typography-track/src/surface.ts +842 -0
- package/packages/typography-track/src/types.ts +109 -0
- package/packages/typography-track-studio/README.md +3 -0
- package/packages/typography-track-studio/package.json +14 -0
- package/packages/typography-track-studio/src/activation.ts +7 -0
- package/packages/typography-track-studio/src/index.ts +116 -0
- package/packages/validation/README.md +11 -0
- package/packages/validation/package.json +15 -0
- package/packages/validation/src/index.ts +100 -0
- package/packages/video-cli/README.md +181 -0
- package/packages/video-cli/package.json +37 -0
- package/packages/video-cli/src/capture.ts +174 -0
- package/packages/video-cli/src/cli.ts +109 -0
- package/packages/video-cli/src/compiler.ts +32 -0
- package/packages/video-cli/src/creation.ts +449 -0
- package/packages/video-cli/src/distribution.ts +88 -0
- package/packages/video-cli/src/index.ts +50 -0
- package/packages/video-cli/src/media.ts +701 -0
- package/packages/video-cli/src/package-selection.ts +34 -0
- package/packages/video-cli/src/process.ts +71 -0
- package/packages/video-cli/src/studio-distribution.ts +19 -0
- package/packages/video-cli/src/transcript.ts +71 -0
- package/packages/video-cli/src/vocabulary.ts +386 -0
- package/packages/visual-ir/README.md +36 -0
- package/packages/visual-ir/package.json +16 -0
- package/packages/visual-ir/src/activation.ts +3 -0
- package/packages/visual-ir/src/index.ts +7 -0
- package/packages/visual-ir/src/style.ts +222 -0
- package/packages/volcengine-matting/README.md +89 -0
- package/packages/volcengine-matting/package.json +16 -0
- package/packages/volcengine-matting/src/activation.ts +13 -0
- package/packages/volcengine-matting/src/index.ts +45 -0
- package/packages/volcengine-matting/src/surface.ts +48 -0
- package/packages/whisperx/README.md +34 -0
- package/packages/whisperx/package.json +28 -0
- package/packages/whisperx/src/activation.ts +18 -0
- package/packages/whisperx/src/component.ts +64 -0
- package/packages/whisperx/src/evidence.ts +69 -0
- package/packages/whisperx/src/fragment.ts +76 -0
- package/packages/whisperx/src/index.ts +14 -0
- package/packages/whisperx/src/manifest.ts +92 -0
- package/packages/whisperx/src/surface.ts +90 -0
- package/packages/whisperx/src/transcript.ts +97 -0
- package/packages/whisperx/src/types.ts +9 -0
- package/packages/workspace/README.md +4 -0
- package/packages/workspace/package.json +14 -0
- package/packages/workspace/src/index.ts +38 -0
- package/packages/workspace-fs-node/README.md +13 -0
- package/packages/workspace-fs-node/package.json +15 -0
- package/packages/workspace-fs-node/src/index.ts +6 -0
- package/packages/workspace-fs-node/src/workspace.ts +226 -0
- package/packages/yt-dlp/README.md +31 -0
- package/packages/yt-dlp/package.json +10 -0
- package/packages/yt-dlp/src/download.ts +104 -0
- package/packages/yt-dlp/src/index.ts +1 -0
- package/services/image-opencv/README.md +33 -0
- package/services/image-opencv/package.json +14 -0
- package/services/image-opencv/pyproject.toml +13 -0
- package/services/image-opencv/uv.lock +56 -0
- package/services/whisperx/README.md +82 -0
- package/services/whisperx/package.json +15 -0
- package/services/whisperx/pyproject.toml +26 -0
- package/services/whisperx/src/hypit_whisperx_service/__init__.py +6 -0
- package/services/whisperx/src/hypit_whisperx_service/__main__.py +29 -0
- package/services/whisperx/src/hypit_whisperx_service/application.py +88 -0
- package/services/whisperx/src/hypit_whisperx_service/audio.py +66 -0
- package/services/whisperx/src/hypit_whisperx_service/check.py +35 -0
- package/services/whisperx/src/hypit_whisperx_service/config.py +81 -0
- package/services/whisperx/src/hypit_whisperx_service/engine.py +173 -0
- package/services/whisperx/src/hypit_whisperx_service/prepare.py +19 -0
- package/services/whisperx/src/hypit_whisperx_service/resources.py +41 -0
- package/services/whisperx/src/hypit_whisperx_service/server.py +101 -0
- package/services/whisperx/uv.lock +3381 -0
- package/services/yt-dlp/README.md +19 -0
- package/services/yt-dlp/package.json +14 -0
- package/services/yt-dlp/pyproject.toml +13 -0
- package/services/yt-dlp/uv.lock +23 -0
- package/index.js +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ComponentPackage } from "@hypit/component-kit";
|
|
2
|
+
import { verifyMediaInspection, verifyMediaStreamSelection, verifyMuxedMedia, verifyRenderedVisual, verifySynchronizedMedia, verifyTimelineAudio } from "./identity.js";
|
|
3
|
+
import { mediaTypes } from "./manifest.js";
|
|
4
|
+
import { verifyMediaFrameRange } from "./frame-range.js";
|
|
5
|
+
function inline(value: { readonly kind: string; readonly value?: unknown }, subject: string): unknown { if (value.kind !== "inline") throw new Error(`${subject} must be inline`); return value.value; }
|
|
6
|
+
export const mediaComponent = {
|
|
7
|
+
validators: [
|
|
8
|
+
{ type: mediaTypes.frameRange, handler: ({ value }) => verifyMediaFrameRange(inline(value, "MediaFrameRange")) },
|
|
9
|
+
{ type: mediaTypes.inspection, handler: ({ value }) => verifyMediaInspection(inline(value, "MediaInspection")) },
|
|
10
|
+
{ type: mediaTypes.streamSelection, handler: ({ value }) => verifyMediaStreamSelection(inline(value, "MediaStreamSelection")) },
|
|
11
|
+
{ type: mediaTypes.synchronized, handler: ({ value }) => verifySynchronizedMedia(inline(value, "SynchronizedMedia")) },
|
|
12
|
+
{ type: mediaTypes.renderedVisual, handler: ({ value }) => verifyRenderedVisual(inline(value, "RenderedVisual")) },
|
|
13
|
+
{ type: mediaTypes.timelineAudio, handler: ({ value }) => verifyTimelineAudio(inline(value, "TimelineAudio")) },
|
|
14
|
+
{ type: mediaTypes.muxed, handler: ({ value }) => verifyMuxedMedia(inline(value, "MuxedMedia")) },
|
|
15
|
+
],
|
|
16
|
+
} satisfies ComponentPackage;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MediaRational } from "./types.js";
|
|
2
|
+
|
|
3
|
+
/** A half-open selection on the original programme frame clock. */
|
|
4
|
+
export type MediaFrameRange = {
|
|
5
|
+
readonly startFrame: number;
|
|
6
|
+
readonly endFrameExclusive: number;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export function verifyMediaFrameRange(value: unknown, frameCount?: number): asserts value is MediaFrameRange {
|
|
10
|
+
const range = value as MediaFrameRange | undefined;
|
|
11
|
+
if (range === null || typeof range !== "object"
|
|
12
|
+
|| !Number.isSafeInteger(range.startFrame) || range.startFrame < 0
|
|
13
|
+
|| !Number.isSafeInteger(range.endFrameExclusive) || range.endFrameExclusive <= range.startFrame
|
|
14
|
+
|| (frameCount !== undefined && range.endFrameExclusive > frameCount)) {
|
|
15
|
+
throw new Error("Media frame range must satisfy 0 <= startFrame < endFrameExclusive <= frameCount");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Start on the original clock; duration belongs to the new zero-based frame clock.
|
|
21
|
+
* At rational rates, rounding the two clocks can differ by one PCM sample.
|
|
22
|
+
*/
|
|
23
|
+
export function mediaFrameRangeSamples(range: MediaFrameRange, frameRate: MediaRational) {
|
|
24
|
+
verifyMediaFrameRange(range);
|
|
25
|
+
const boundary = (frame: number): number => {
|
|
26
|
+
const n = BigInt(frame) * 48_000n * BigInt(frameRate.denominator);
|
|
27
|
+
const d = BigInt(frameRate.numerator);
|
|
28
|
+
return Number((2n * n + d) / (2n * d));
|
|
29
|
+
};
|
|
30
|
+
const startSample = boundary(range.startFrame);
|
|
31
|
+
const sampleFrames = boundary(range.endFrameExclusive - range.startFrame);
|
|
32
|
+
return { startSample, endSampleExclusive: startSample + sampleFrames, sampleFrames };
|
|
33
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import {
|
|
2
|
+
canonicalize,
|
|
3
|
+
isResourceId,
|
|
4
|
+
} from "@hypit/protocol";
|
|
5
|
+
import type { BlobRef } from "@hypit/protocol";
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
MediaInspection,
|
|
9
|
+
MuxedMedia,
|
|
10
|
+
MediaRational,
|
|
11
|
+
RenderedVisual,
|
|
12
|
+
MediaStream,
|
|
13
|
+
MediaStreamSelection,
|
|
14
|
+
MediaTimestamp,
|
|
15
|
+
SynchronizedMedia,
|
|
16
|
+
TimelineAudio,
|
|
17
|
+
} from "./types.js";
|
|
18
|
+
|
|
19
|
+
function assert(condition: unknown, message: string): asserts condition {
|
|
20
|
+
if (!condition) throw new Error(message);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function object(value: unknown, subject: string): Record<string, unknown> {
|
|
24
|
+
assert(value !== null && typeof value === "object" && !Array.isArray(value), `${subject} must be an object`);
|
|
25
|
+
return value as Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function nonNegativeInteger(value: unknown, subject: string): number {
|
|
29
|
+
assert(Number.isSafeInteger(value) && (value as number) >= 0, `${subject} must be a non-negative integer`);
|
|
30
|
+
return value as number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function positiveInteger(value: unknown, subject: string): number {
|
|
34
|
+
const result = nonNegativeInteger(value, subject);
|
|
35
|
+
assert(result > 0, `${subject} must be positive`);
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function verifyRational(value: unknown, subject: string): asserts value is MediaRational {
|
|
40
|
+
const item = object(value, subject);
|
|
41
|
+
positiveInteger(item.numerator, `${subject}.numerator`);
|
|
42
|
+
positiveInteger(item.denominator, `${subject}.denominator`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function verifyTimestamp(value: unknown, subject: string): asserts value is MediaTimestamp {
|
|
46
|
+
const item = object(value, subject);
|
|
47
|
+
assert(typeof item.ticks === "string" && /^-?\d+$/u.test(item.ticks), `${subject}.ticks is invalid`);
|
|
48
|
+
verifyRational(item.timeBase, `${subject}.timeBase`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function compareTimestamp(left: MediaTimestamp, right: MediaTimestamp): number {
|
|
52
|
+
const leftTicks = BigInt(left.ticks) * BigInt(left.timeBase.numerator);
|
|
53
|
+
const rightTicks = BigInt(right.ticks) * BigInt(right.timeBase.numerator);
|
|
54
|
+
const leftScaled = leftTicks * BigInt(right.timeBase.denominator);
|
|
55
|
+
const rightScaled = rightTicks * BigInt(left.timeBase.denominator);
|
|
56
|
+
return leftScaled < rightScaled ? -1 : leftScaled > rightScaled ? 1 : 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function verifyBlob(value: unknown, subject: string): asserts value is BlobRef {
|
|
60
|
+
const item = object(value, subject);
|
|
61
|
+
assert(item.kind === "blob", `${subject} must be a BlobRef`);
|
|
62
|
+
assert(typeof item.resource === "string" && isResourceId(item.resource), `${subject}.resource is invalid`);
|
|
63
|
+
nonNegativeInteger(item.size, `${subject}.size`);
|
|
64
|
+
assert(typeof item.mediaType === "string" && item.mediaType.length > 0, `${subject}.mediaType is invalid`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function verifyStream(value: unknown, subject: string): asserts value is MediaStream {
|
|
68
|
+
const item = object(value, subject);
|
|
69
|
+
nonNegativeInteger(item.index, `${subject}.index`);
|
|
70
|
+
assert(typeof item.codecType === "string" && item.codecType.length > 0, `${subject}.codecType is invalid`);
|
|
71
|
+
assert(typeof item.codecName === "string" && item.codecName.length > 0, `${subject}.codecName is invalid`);
|
|
72
|
+
assert(item.timingStatus === "admissible" || item.timingStatus === "missing"
|
|
73
|
+
|| item.timingStatus === "non-monotonic" || item.timingStatus === "discontinuous",
|
|
74
|
+
`${subject}.timingStatus is invalid`);
|
|
75
|
+
nonNegativeInteger(item.decodedUnitCount, `${subject}.decodedUnitCount`);
|
|
76
|
+
const disposition = object(item.disposition, `${subject}.disposition`);
|
|
77
|
+
assert(typeof disposition.default === "boolean", `${subject}.disposition.default is invalid`);
|
|
78
|
+
assert(typeof disposition.attachedPicture === "boolean", `${subject}.disposition.attachedPicture is invalid`);
|
|
79
|
+
if (item.timeBase !== undefined) verifyRational(item.timeBase, `${subject}.timeBase`);
|
|
80
|
+
if (item.startPts !== undefined) verifyTimestamp(item.startPts, `${subject}.startPts`);
|
|
81
|
+
if (item.endPts !== undefined) verifyTimestamp(item.endPts, `${subject}.endPts`);
|
|
82
|
+
assert((item.startPts === undefined) === (item.endPts === undefined), `${subject} must provide both presentation endpoints`);
|
|
83
|
+
assert(item.timingStatus !== "admissible" || item.startPts !== undefined,
|
|
84
|
+
`${subject} admissible timing has no presentation interval`);
|
|
85
|
+
if (item.startPts !== undefined && item.endPts !== undefined) {
|
|
86
|
+
assert(compareTimestamp(item.startPts, item.endPts) < 0, `${subject} presentation interval is empty or reversed`);
|
|
87
|
+
}
|
|
88
|
+
if (item.kind === "video") {
|
|
89
|
+
assert(item.codecType === "video", `${subject} video codecType differs`);
|
|
90
|
+
assert(item.role === "moving" || item.role === "attached-picture" || item.role === "still", `${subject}.role is invalid`);
|
|
91
|
+
positiveInteger(item.width, `${subject}.width`);
|
|
92
|
+
positiveInteger(item.height, `${subject}.height`);
|
|
93
|
+
verifyRational(item.sampleAspectRatio, `${subject}.sampleAspectRatio`);
|
|
94
|
+
assert(item.rotationDegrees === 0 || item.rotationDegrees === 90
|
|
95
|
+
|| item.rotationDegrees === 180 || item.rotationDegrees === 270,
|
|
96
|
+
`${subject}.rotationDegrees is invalid`);
|
|
97
|
+
if (item.averageFrameRate !== undefined) verifyRational(item.averageFrameRate, `${subject}.averageFrameRate`);
|
|
98
|
+
if (item.nominalFrameRate !== undefined) verifyRational(item.nominalFrameRate, `${subject}.nominalFrameRate`);
|
|
99
|
+
if (item.role === "attached-picture") {
|
|
100
|
+
assert(disposition.attachedPicture === true, `${subject} attached-picture role differs from disposition`);
|
|
101
|
+
}
|
|
102
|
+
} else if (item.kind === "audio") {
|
|
103
|
+
assert(item.codecType === "audio", `${subject} audio codecType differs`);
|
|
104
|
+
positiveInteger(item.sampleRate, `${subject}.sampleRate`);
|
|
105
|
+
positiveInteger(item.channels, `${subject}.channels`);
|
|
106
|
+
nonNegativeInteger(item.decodedSampleFrames, `${subject}.decodedSampleFrames`);
|
|
107
|
+
if (item.channelLayout !== undefined) {
|
|
108
|
+
assert(typeof item.channelLayout === "string" && item.channelLayout.length > 0, `${subject}.channelLayout is invalid`);
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
assert(item.kind === "other", `${subject}.kind is invalid`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function expectedSampleFrames(frameCount: number, frameRate: MediaRational): number {
|
|
116
|
+
const numerator = BigInt(frameCount) * 48_000n * BigInt(frameRate.denominator);
|
|
117
|
+
const denominator = BigInt(frameRate.numerator);
|
|
118
|
+
const rounded = (numerator * 2n + denominator) / (denominator * 2n);
|
|
119
|
+
assert(rounded > 0n && rounded <= BigInt(Number.MAX_SAFE_INTEGER), "Media frame domain has an invalid sample count");
|
|
120
|
+
return Number(rounded);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function sealMediaInspection(value: MediaInspection): MediaInspection {
|
|
124
|
+
return canonicalize(value) as unknown as MediaInspection;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function verifyMediaInspection(value: unknown): asserts value is MediaInspection {
|
|
128
|
+
const item = object(value, "MediaInspection") as unknown as MediaInspection;
|
|
129
|
+
assert(Array.isArray(item.container?.formatNames), "MediaInspection container formats are invalid");
|
|
130
|
+
item.container.formatNames.forEach((format) => assert(typeof format === "string" && format.length > 0,
|
|
131
|
+
"MediaInspection container format is invalid"));
|
|
132
|
+
assert(Array.isArray(item.streams), "MediaInspection streams are invalid");
|
|
133
|
+
item.streams.forEach((stream, index) => verifyStream(stream, `MediaInspection.streams[${index}]`));
|
|
134
|
+
assert(new Set(item.streams.map((stream) => stream.index)).size === item.streams.length,
|
|
135
|
+
"MediaInspection repeats a stream index");
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function sealMediaStreamSelection(value: MediaStreamSelection): MediaStreamSelection {
|
|
139
|
+
return canonicalize(value) as unknown as MediaStreamSelection;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function verifyMediaStreamSelection(value: unknown): asserts value is MediaStreamSelection {
|
|
143
|
+
const item = object(value, "MediaStreamSelection") as unknown as MediaStreamSelection;
|
|
144
|
+
if (item.videoStreamIndex !== undefined) nonNegativeInteger(item.videoStreamIndex, "MediaStreamSelection.videoStreamIndex");
|
|
145
|
+
if (item.audioStreamIndex !== undefined) nonNegativeInteger(item.audioStreamIndex, "MediaStreamSelection.audioStreamIndex");
|
|
146
|
+
assert(item.videoStreamIndex !== undefined || item.audioStreamIndex !== undefined,
|
|
147
|
+
"MediaStreamSelection selects no stream");
|
|
148
|
+
assert(item.spanAuthority === "video" || item.spanAuthority === "audio", "MediaStreamSelection authority is invalid");
|
|
149
|
+
assert(item.spanAuthority === "video" ? item.videoStreamIndex !== undefined : item.audioStreamIndex !== undefined,
|
|
150
|
+
"MediaStreamSelection authority stream is absent");
|
|
151
|
+
assert(item.policy === "primary-moving@1" || item.policy === "default-audio@1"
|
|
152
|
+
|| item.policy === "primary-moving-default-audio@1" || item.policy === "explicit-streams@1",
|
|
153
|
+
"MediaStreamSelection policy is invalid");
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function sealSynchronizedMedia(value: SynchronizedMedia): SynchronizedMedia {
|
|
157
|
+
return canonicalize(value) as unknown as SynchronizedMedia;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Exact 48 kHz sample span implied by one normalized frame domain. */
|
|
161
|
+
export function synchronizedMediaSampleFrames(value: SynchronizedMedia): number {
|
|
162
|
+
const numerator = BigInt(value.timeline.frameCount) * 48_000n * BigInt(value.timeline.frameRate.denominator);
|
|
163
|
+
const denominator = BigInt(value.timeline.frameRate.numerator);
|
|
164
|
+
const rounded = (numerator * 2n + denominator) / (denominator * 2n);
|
|
165
|
+
assert(rounded > 0n && rounded <= BigInt(Number.MAX_SAFE_INTEGER),
|
|
166
|
+
"SynchronizedMedia frame domain has an invalid sample span");
|
|
167
|
+
return Number(rounded);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function verifySynchronizedMedia(value: unknown): asserts value is SynchronizedMedia {
|
|
171
|
+
const item = object(value, "SynchronizedMedia") as unknown as SynchronizedMedia;
|
|
172
|
+
verifyRational(item.timeline.frameRate, "SynchronizedMedia.timeline.frameRate");
|
|
173
|
+
positiveInteger(item.timeline.frameCount, "SynchronizedMedia.timeline.frameCount");
|
|
174
|
+
synchronizedMediaSampleFrames(item);
|
|
175
|
+
assert(item.visual !== undefined || item.audio !== undefined, "SynchronizedMedia contains no media projection");
|
|
176
|
+
if (item.visual !== undefined) {
|
|
177
|
+
verifyBlob(item.visual.artifact, "SynchronizedMedia.visual.artifact");
|
|
178
|
+
assert(item.visual.artifact.mediaType.startsWith("video/"), "SynchronizedMedia visual artifact is not video");
|
|
179
|
+
positiveInteger(item.visual.width, "SynchronizedMedia.visual.width");
|
|
180
|
+
positiveInteger(item.visual.height, "SynchronizedMedia.visual.height");
|
|
181
|
+
}
|
|
182
|
+
if (item.audio !== undefined) {
|
|
183
|
+
verifyBlob(item.audio.artifact, "SynchronizedMedia.audio.artifact");
|
|
184
|
+
assert(item.audio.artifact.mediaType === "audio/wav", "SynchronizedMedia audio artifact must be WAV");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function sealRenderedVisual(value: RenderedVisual): RenderedVisual {
|
|
189
|
+
return canonicalize(value) as unknown as RenderedVisual;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function verifyRenderedVisual(value: unknown): asserts value is RenderedVisual {
|
|
193
|
+
const item = object(value, "RenderedVisual") as unknown as RenderedVisual;
|
|
194
|
+
verifyRational(item.frameRate, "RenderedVisual.frameRate");
|
|
195
|
+
positiveInteger(item.frameCount, "RenderedVisual.frameCount");
|
|
196
|
+
positiveInteger(item.canvas?.width, "RenderedVisual.canvas.width");
|
|
197
|
+
positiveInteger(item.canvas?.height, "RenderedVisual.canvas.height");
|
|
198
|
+
verifyBlob(item.artifact, "RenderedVisual.artifact");
|
|
199
|
+
assert(item.artifact.mediaType.startsWith("video/"), "RenderedVisual Artifact must be video");
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function sealTimelineAudio(value: TimelineAudio): TimelineAudio {
|
|
203
|
+
return canonicalize(value) as unknown as TimelineAudio;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export function verifyTimelineAudio(value: unknown): asserts value is TimelineAudio {
|
|
207
|
+
const item = object(value, "TimelineAudio") as unknown as TimelineAudio;
|
|
208
|
+
verifyBlob(item.artifact, "TimelineAudio.artifact");
|
|
209
|
+
assert(item.artifact.mediaType === "audio/wav", "TimelineAudio Artifact must be WAV");
|
|
210
|
+
positiveInteger(item.sampleFrames, "TimelineAudio.sampleFrames");
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export function sealMuxedMedia(value: MuxedMedia): MuxedMedia {
|
|
214
|
+
return canonicalize(value) as unknown as MuxedMedia;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export function verifyMuxedMedia(value: unknown): asserts value is MuxedMedia {
|
|
218
|
+
const item = object(value, "MuxedMedia") as unknown as MuxedMedia;
|
|
219
|
+
verifyRational(item.frameRate, "MuxedMedia.frameRate");
|
|
220
|
+
positiveInteger(item.frameCount, "MuxedMedia.frameCount");
|
|
221
|
+
positiveInteger(item.canvas?.width, "MuxedMedia.canvas.width");
|
|
222
|
+
positiveInteger(item.canvas?.height, "MuxedMedia.canvas.height");
|
|
223
|
+
assert(item.presentationSampleFrames === expectedSampleFrames(item.frameCount, item.frameRate),
|
|
224
|
+
"MuxedMedia presentation sample count differs from its frame domain");
|
|
225
|
+
verifyBlob(item.artifact, "MuxedMedia.artifact");
|
|
226
|
+
assert(item.artifact.mediaType === "video/mp4", "MuxedMedia Artifact must be MP4");
|
|
227
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export {
|
|
2
|
+
decodeMediaAudioSurface,
|
|
3
|
+
decodeMediaFontSurface,
|
|
4
|
+
decodeMediaImageSurface,
|
|
5
|
+
decodeMediaVideoSurface,
|
|
6
|
+
} from "./surface.js";
|
|
7
|
+
export { mediaComponent } from "./component.js";
|
|
8
|
+
export { sealMediaInspection, sealMediaStreamSelection, sealMuxedMedia, sealRenderedVisual, sealSynchronizedMedia, sealTimelineAudio, synchronizedMediaSampleFrames, verifyMediaInspection, verifyMediaStreamSelection, verifyMuxedMedia, verifyRenderedVisual, verifySynchronizedMedia, verifyTimelineAudio } from "./identity.js";
|
|
9
|
+
export { mediaDependency, mediaManifest, mediaMarkupSurfaces, mediaModuleRef, mediaTypes } from "./manifest.js";
|
|
10
|
+
export { compositableSurfaceSchema, fontArtifactSchema, fontStackSchema, mediaInspectionSchema, mediaStreamSelectionSchema, muxedMediaSchema, renderedVisualSchema, synchronizedMediaSchema, timelineAudioSchema } from "./schema.js";
|
|
11
|
+
export { assertCompositableSurfaceRef, assertFontArtifactRef, assertFontStackRef } from "./render.js";
|
|
12
|
+
export type * from "./render.js";
|
|
13
|
+
export type * from "./types.js";
|
|
14
|
+
export { verifyMediaFrameRange, mediaFrameRangeSamples } from "./frame-range.js";
|
|
15
|
+
export type { MediaFrameRange } from "./frame-range.js";
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { artifactDependency, artifactTypes } from "@hypit/artifact";
|
|
2
|
+
import type { ModuleManifest, TypeRef } from "@hypit/protocol";
|
|
3
|
+
import { compositableSurfaceSchema, fontArtifactSchema, fontStackSchema, mediaInspectionSchema, mediaStreamSelectionSchema, muxedMediaSchema, renderedVisualSchema, synchronizedMediaSchema, timelineAudioSchema } from "./schema.js";
|
|
4
|
+
export const mediaModuleRef = { name: "@hypit/media", version: "1" } as const;
|
|
5
|
+
export const mediaTypes = {
|
|
6
|
+
frameRange: { module: mediaModuleRef, name: "MediaFrameRange" },
|
|
7
|
+
inspection: { module: mediaModuleRef, name: "MediaInspection" },
|
|
8
|
+
streamSelection: { module: mediaModuleRef, name: "MediaStreamSelection" }, synchronized: { module: mediaModuleRef, name: "SynchronizedMedia" },
|
|
9
|
+
renderedVisual: { module: mediaModuleRef, name: "RenderedVisual" }, timelineAudio: { module: mediaModuleRef, name: "TimelineAudio" },
|
|
10
|
+
muxed: { module: mediaModuleRef, name: "MuxedMedia" }, fontArtifact: { module: mediaModuleRef, name: "FontArtifactRef" },
|
|
11
|
+
fontStack: { module: mediaModuleRef, name: "FontStackRef" },
|
|
12
|
+
compositableSurface: { module: mediaModuleRef, name: "CompositableSurfaceRef" },
|
|
13
|
+
/** Declared by `@hypit/artifact`. A Type is identified by the Module that owns it, not the one that re-exports it. */
|
|
14
|
+
blobArtifact: artifactTypes.blob,
|
|
15
|
+
} satisfies Record<string, TypeRef>;
|
|
16
|
+
|
|
17
|
+
export const mediaMarkupSurfaces = [
|
|
18
|
+
{
|
|
19
|
+
name: "image", tag: "Image", mode: "structured", outputs: [artifactTypes.blob],
|
|
20
|
+
vocabulary: {
|
|
21
|
+
summary: "Requests one authored image file from the Host and publishes it as a byte Artifact.",
|
|
22
|
+
attributes: [
|
|
23
|
+
{ name: "id", kind: "identifier", required: true,
|
|
24
|
+
summary: "Names the Artifact Record this element publishes." },
|
|
25
|
+
{ name: "src", kind: "literal", required: true,
|
|
26
|
+
summary: "Points at the image file, resolved by the Host against the source that declares it." },
|
|
27
|
+
{ name: "media-type", kind: "literal", required: false,
|
|
28
|
+
summary: "States the image media type when the src extension does not name one." },
|
|
29
|
+
],
|
|
30
|
+
example: `<media:Image id="presenter" src="./assets/presenter.png"/>`,
|
|
31
|
+
notes: [
|
|
32
|
+
"The element is empty; it accepts no children and no text.",
|
|
33
|
+
"`.avif`, `.gif`, `.jpeg`, `.jpg`, `.png` and `.webp` name their own media type; any other file needs `media-type`.",
|
|
34
|
+
"A written `media-type` must begin with `image/`, and the resolved bytes must arrive as an image Artifact.",
|
|
35
|
+
"The Artifact is published under the bare `id`, and the consuming package decides what the image means.",
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "audio", tag: "Audio", mode: "structured", outputs: [artifactTypes.blob],
|
|
41
|
+
vocabulary: {
|
|
42
|
+
summary: "Requests one authored audio file from the Host and publishes it as a byte Artifact.",
|
|
43
|
+
attributes: [
|
|
44
|
+
{ name: "id", kind: "identifier", required: true,
|
|
45
|
+
summary: "Names the Artifact Record this element publishes." },
|
|
46
|
+
{ name: "src", kind: "literal", required: true,
|
|
47
|
+
summary: "Points at the audio file, resolved by the Host against the source that declares it." },
|
|
48
|
+
{ name: "media-type", kind: "literal", required: false,
|
|
49
|
+
summary: "States the audio media type when the src extension does not name one." },
|
|
50
|
+
],
|
|
51
|
+
example: `<media:Audio id="music" src="./assets/music.wav"/>`,
|
|
52
|
+
notes: [
|
|
53
|
+
"The element is empty; it accepts no children and no text.",
|
|
54
|
+
"`.aac`, `.flac`, `.m4a`, `.mp3`, `.oga`, `.ogg`, `.opus` and `.wav` name their own media type; any other file needs `media-type`.",
|
|
55
|
+
"A written `media-type` must begin with `audio/`, and the resolved bytes must arrive as an audio Artifact.",
|
|
56
|
+
"The Artifact is published under the bare `id`; declared audio is not promoted to speech here.",
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "video", tag: "Video", mode: "structured", outputs: [artifactTypes.blob],
|
|
62
|
+
vocabulary: {
|
|
63
|
+
summary: "Requests one authored video file from the Host and publishes it as a byte Artifact.",
|
|
64
|
+
attributes: [
|
|
65
|
+
{ name: "id", kind: "identifier", required: true,
|
|
66
|
+
summary: "Names the Artifact Record this element publishes." },
|
|
67
|
+
{ name: "src", kind: "literal", required: true,
|
|
68
|
+
summary: "Points at the video file, resolved by the Host against the source that declares it." },
|
|
69
|
+
{ name: "media-type", kind: "literal", required: false,
|
|
70
|
+
summary: "States the video media type when the src extension does not name one." },
|
|
71
|
+
],
|
|
72
|
+
example: `<media:Video id="reference" src="./assets/reference.mp4"/>`,
|
|
73
|
+
notes: [
|
|
74
|
+
"The element is empty; it accepts no children and no text.",
|
|
75
|
+
"`.m4v`, `.mov`, `.mp4` and `.webm` name their own media type; any other file needs `media-type`.",
|
|
76
|
+
"A written `media-type` must begin with `video/`, and the resolved bytes must arrive as a video Artifact.",
|
|
77
|
+
"The Artifact is published under the bare `id`, and the consuming package decides what the video means.",
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "font", tag: "Font", mode: "structured", outputs: [mediaTypes.fontArtifact],
|
|
83
|
+
vocabulary: {
|
|
84
|
+
summary: "Requests one authored font file from the Host and publishes it with its exact weight and style as a one-source FontArtifact.",
|
|
85
|
+
attributes: [
|
|
86
|
+
{ name: "id", kind: "identifier", required: true,
|
|
87
|
+
summary: "Names the FontArtifact Record this element publishes." },
|
|
88
|
+
{ name: "src", kind: "literal", required: true,
|
|
89
|
+
summary: "Points at the font file, resolved by the Host against the source that declares it." },
|
|
90
|
+
{ name: "weight", kind: "literal", required: true,
|
|
91
|
+
summary: "States the exact weight the bytes carry, as a whole number from 1 to 1000." },
|
|
92
|
+
{ name: "style", kind: "literal", required: true, values: ["normal", "italic", "oblique"],
|
|
93
|
+
summary: "States the exact style the bytes carry." },
|
|
94
|
+
{ name: "media-type", kind: "literal", required: false,
|
|
95
|
+
summary: "States the font media type when the src extension does not name one." },
|
|
96
|
+
],
|
|
97
|
+
example: `<media:Font id="brand" src="./assets/Brand-Semibold.woff2" weight="600" style="normal"/>`,
|
|
98
|
+
notes: [
|
|
99
|
+
"The element is empty; it accepts no children and no text.",
|
|
100
|
+
"`.otf`, `.ttf`, `.woff` and `.woff2` name their own media type; any other file needs `media-type`.",
|
|
101
|
+
"One element declares one face, so `weight` and `style` describe these bytes rather than a family.",
|
|
102
|
+
"The FontArtifact is published under the bare `id`, and an invalid weight or style fails before any bytes are read.",
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
] as const;
|
|
107
|
+
|
|
108
|
+
export const mediaManifest: ModuleManifest = {
|
|
109
|
+
format: "hypit.module@1", name: mediaModuleRef.name, version: mediaModuleRef.version, dependencies: [artifactDependency],
|
|
110
|
+
types: [
|
|
111
|
+
{ name: mediaTypes.frameRange.name },
|
|
112
|
+
{ name: mediaTypes.inspection.name },
|
|
113
|
+
{ name: mediaTypes.streamSelection.name },
|
|
114
|
+
{ name: mediaTypes.synchronized.name },
|
|
115
|
+
{ name: mediaTypes.renderedVisual.name },
|
|
116
|
+
{ name: mediaTypes.timelineAudio.name },
|
|
117
|
+
{ name: mediaTypes.muxed.name },
|
|
118
|
+
{ name: mediaTypes.fontArtifact.name }, { name: mediaTypes.fontStack.name },
|
|
119
|
+
{ name: mediaTypes.compositableSurface.name },
|
|
120
|
+
], capabilities: [], producers: [],
|
|
121
|
+
};
|
|
122
|
+
export const mediaDependency = { module: mediaModuleRef } as const;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { isResourceId } from "@hypit/protocol";
|
|
2
|
+
import type { BlobRef } from "@hypit/protocol";
|
|
3
|
+
|
|
4
|
+
const FONT_MEDIA_TYPES = new Set([
|
|
5
|
+
"font/otf",
|
|
6
|
+
"font/ttf",
|
|
7
|
+
"font/woff",
|
|
8
|
+
"font/woff2",
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
const ALPHA_SURFACE_MEDIA_TYPES = new Set([
|
|
12
|
+
"image/png",
|
|
13
|
+
"image/webp",
|
|
14
|
+
"video/webm",
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
export type FontArtifactRef = {
|
|
18
|
+
/** One logical face may be split into independently addressed Unicode-range sources. */
|
|
19
|
+
readonly sources: readonly {
|
|
20
|
+
readonly artifact: BlobRef;
|
|
21
|
+
readonly unicodeRange?: string;
|
|
22
|
+
}[];
|
|
23
|
+
readonly weight: number;
|
|
24
|
+
readonly style: "normal" | "italic" | "oblique";
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/** Ordered exact font faces. The first face is primary; the remainder are glyph fallbacks. */
|
|
28
|
+
export type FontStackRef = {
|
|
29
|
+
readonly faces: readonly FontArtifactRef[];
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type CompositableSurfaceRef = {
|
|
33
|
+
readonly artifact: BlobRef;
|
|
34
|
+
readonly width: number;
|
|
35
|
+
readonly height: number;
|
|
36
|
+
readonly colorSpace: "srgb";
|
|
37
|
+
readonly alphaMode: "opaque" | "straight";
|
|
38
|
+
readonly timing:
|
|
39
|
+
| { readonly kind: "still" }
|
|
40
|
+
| {
|
|
41
|
+
readonly kind: "frames";
|
|
42
|
+
readonly frameRate: {
|
|
43
|
+
readonly numerator: number;
|
|
44
|
+
readonly denominator: number;
|
|
45
|
+
};
|
|
46
|
+
readonly frameCount: number;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
function assertBlobRef(value: BlobRef, label: string): void {
|
|
51
|
+
if (
|
|
52
|
+
value.kind !== "blob"
|
|
53
|
+
|| !isResourceId(value.resource)
|
|
54
|
+
|| !Number.isSafeInteger(value.size)
|
|
55
|
+
|| value.size < 0
|
|
56
|
+
|| !value.mediaType
|
|
57
|
+
) {
|
|
58
|
+
throw new Error(`${label} Artifact is invalid.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function assertFontArtifactRef(value: FontArtifactRef, label = "FontArtifactRef"): void {
|
|
63
|
+
if (!Array.isArray(value.sources) || value.sources.length === 0) throw new Error(`${label} sources are empty.`);
|
|
64
|
+
const artifacts = new Set<string>();
|
|
65
|
+
for (const [index, source] of value.sources.entries()) {
|
|
66
|
+
assertBlobRef(source.artifact, `${label}.sources.${index}`);
|
|
67
|
+
if (!FONT_MEDIA_TYPES.has(source.artifact.mediaType)) {
|
|
68
|
+
throw new Error(`${label}.sources.${index} Artifact must use a supported font media type.`);
|
|
69
|
+
}
|
|
70
|
+
if (artifacts.has(source.artifact.resource)) throw new Error(`${label} repeats a source Artifact.`);
|
|
71
|
+
artifacts.add(source.artifact.resource);
|
|
72
|
+
if (source.unicodeRange !== undefined
|
|
73
|
+
&& !/^U\+[0-9a-f?]{1,6}(?:-[0-9a-f]{1,6})?(?:,U\+[0-9a-f?]{1,6}(?:-[0-9a-f]{1,6})?)*$/iu.test(source.unicodeRange)) {
|
|
74
|
+
throw new Error(`${label}.sources.${index} Unicode range is invalid.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!Number.isSafeInteger(value.weight) || value.weight < 1 || value.weight > 1_000) {
|
|
78
|
+
throw new Error(`${label} weight is invalid.`);
|
|
79
|
+
}
|
|
80
|
+
if (!["normal", "italic", "oblique"].includes(value.style)) {
|
|
81
|
+
throw new Error(`${label} style is invalid.`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function assertFontStackRef(value: FontStackRef, label = "FontStackRef"): void {
|
|
86
|
+
if (value.faces.length === 0) throw new Error(`${label} faces are empty.`);
|
|
87
|
+
const identities = new Set<string>();
|
|
88
|
+
for (const [index, face] of value.faces.entries()) {
|
|
89
|
+
assertFontArtifactRef(face, `${label}.faces.${index}`);
|
|
90
|
+
const identity = JSON.stringify({
|
|
91
|
+
sources: face.sources.map((source) => [source.artifact.resource, source.unicodeRange ?? null]),
|
|
92
|
+
weight: face.weight,
|
|
93
|
+
style: face.style,
|
|
94
|
+
});
|
|
95
|
+
if (identities.has(identity)) throw new Error(`${label} repeats an exact face.`);
|
|
96
|
+
identities.add(identity);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function assertCompositableSurfaceRef(
|
|
101
|
+
value: CompositableSurfaceRef,
|
|
102
|
+
label = "CompositableSurfaceRef",
|
|
103
|
+
): void {
|
|
104
|
+
assertBlobRef(value.artifact, label);
|
|
105
|
+
if (
|
|
106
|
+
!Number.isSafeInteger(value.width)
|
|
107
|
+
|| value.width <= 0
|
|
108
|
+
|| !Number.isSafeInteger(value.height)
|
|
109
|
+
|| value.height <= 0
|
|
110
|
+
) {
|
|
111
|
+
throw new Error(`${label} dimensions are invalid.`);
|
|
112
|
+
}
|
|
113
|
+
if (value.colorSpace !== "srgb") throw new Error(`${label} colorSpace is unsupported.`);
|
|
114
|
+
if (value.alphaMode !== "opaque" && value.alphaMode !== "straight") {
|
|
115
|
+
throw new Error(`${label} alphaMode is unsupported.`);
|
|
116
|
+
}
|
|
117
|
+
if (value.alphaMode === "straight" && !ALPHA_SURFACE_MEDIA_TYPES.has(value.artifact.mediaType)) {
|
|
118
|
+
throw new Error(`${label} straight alpha requires PNG, WebP or WebM media.`);
|
|
119
|
+
}
|
|
120
|
+
if (value.timing.kind === "still") {
|
|
121
|
+
if (!value.artifact.mediaType.startsWith("image/")) {
|
|
122
|
+
throw new Error(`${label} still timing requires an image Artifact.`);
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (value.timing.kind !== "frames") throw new Error(`${label} timing is unsupported.`);
|
|
127
|
+
if (!value.artifact.mediaType.startsWith("video/")) {
|
|
128
|
+
throw new Error(`${label} frame timing requires a video Artifact.`);
|
|
129
|
+
}
|
|
130
|
+
if (
|
|
131
|
+
!Number.isSafeInteger(value.timing.frameRate.numerator)
|
|
132
|
+
|| value.timing.frameRate.numerator <= 0
|
|
133
|
+
|| !Number.isSafeInteger(value.timing.frameRate.denominator)
|
|
134
|
+
|| value.timing.frameRate.denominator <= 0
|
|
135
|
+
|| !Number.isSafeInteger(value.timing.frameCount)
|
|
136
|
+
|| value.timing.frameCount <= 0
|
|
137
|
+
) {
|
|
138
|
+
throw new Error(`${label} frame timing is invalid.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ValueSchema } from "@hypit/protocol";
|
|
2
|
+
const string = { kind: "string", minLength: 1 } as const;
|
|
3
|
+
const number = { kind: "number", minimum: 0 } as const;
|
|
4
|
+
const seconds = { kind: "number", minimum: 0 } as const;
|
|
5
|
+
const integer = { kind: "number", integer: true, minimum: 0 } as const;
|
|
6
|
+
const object = (fields: Readonly<Record<string, { readonly schema: ValueSchema; readonly optional?: boolean }>>): ValueSchema => ({ kind: "object", fields });
|
|
7
|
+
const blobArtifactSchema = (mediaTypes?: readonly string[]): ValueSchema => object({
|
|
8
|
+
kind: { schema: { kind: "literal", value: "blob" } },
|
|
9
|
+
resource: { schema: { kind: "string", minLength: 5, maxLength: 256 } },
|
|
10
|
+
size: { schema: integer },
|
|
11
|
+
mediaType: { schema: mediaTypes === undefined ? string : { kind: "string", enum: mediaTypes } },
|
|
12
|
+
});
|
|
13
|
+
const rational = object({ numerator: { schema: { kind: "number", integer: true, minimum: 1 } }, denominator: { schema: { kind: "number", integer: true, minimum: 1 } } });
|
|
14
|
+
const timestamp = object({ ticks: { schema: { kind: "string", minLength: 1, maxLength: 128 } }, timeBase: { schema: rational } });
|
|
15
|
+
const disposition = object({ default: { schema: { kind: "boolean" } }, attachedPicture: { schema: { kind: "boolean" } } });
|
|
16
|
+
const streamBase = {
|
|
17
|
+
index: { schema: integer }, codecType: { schema: string }, codecName: { schema: string }, disposition: { schema: disposition },
|
|
18
|
+
timingStatus: { schema: { kind: "string", enum: ["admissible", "missing", "non-monotonic", "discontinuous"] } },
|
|
19
|
+
timeBase: { schema: rational, optional: true }, startPts: { schema: timestamp, optional: true },
|
|
20
|
+
endPts: { schema: timestamp, optional: true }, decodedUnitCount: { schema: integer },
|
|
21
|
+
} as const;
|
|
22
|
+
const videoStream = object({ ...streamBase, kind: { schema: { kind: "literal", value: "video" } }, codecType: { schema: { kind: "literal", value: "video" } },
|
|
23
|
+
role: { schema: { kind: "string", enum: ["moving", "attached-picture", "still"] } }, width: { schema: { kind: "number", integer: true, minimum: 1 } },
|
|
24
|
+
height: { schema: { kind: "number", integer: true, minimum: 1 } }, sampleAspectRatio: { schema: rational },
|
|
25
|
+
rotationDegrees: { schema: { kind: "oneOf", variants: [0, 90, 180, 270].map((value) => ({ kind: "literal", value })) } },
|
|
26
|
+
averageFrameRate: { schema: rational, optional: true }, nominalFrameRate: { schema: rational, optional: true } });
|
|
27
|
+
const audioStream = object({ ...streamBase, kind: { schema: { kind: "literal", value: "audio" } }, codecType: { schema: { kind: "literal", value: "audio" } },
|
|
28
|
+
sampleRate: { schema: { kind: "number", integer: true, minimum: 1 } }, channels: { schema: { kind: "number", integer: true, minimum: 1 } },
|
|
29
|
+
channelLayout: { schema: string, optional: true }, decodedSampleFrames: { schema: integer } });
|
|
30
|
+
const otherStream = object({ ...streamBase, kind: { schema: { kind: "literal", value: "other" } } });
|
|
31
|
+
export const mediaInspectionSchema: ValueSchema = object({
|
|
32
|
+
container: { schema: object({ formatNames: { schema: { kind: "array", minItems: 1, items: string } } }) },
|
|
33
|
+
streams: { schema: { kind: "array", items: { kind: "oneOf", variants: [videoStream, audioStream, otherStream] } } },
|
|
34
|
+
});
|
|
35
|
+
export const mediaStreamSelectionSchema: ValueSchema = object({
|
|
36
|
+
videoStreamIndex: { schema: integer, optional: true }, audioStreamIndex: { schema: integer, optional: true },
|
|
37
|
+
spanAuthority: { schema: { kind: "string", enum: ["video", "audio"] } },
|
|
38
|
+
policy: { schema: { kind: "string", enum: ["primary-moving@1", "default-audio@1", "primary-moving-default-audio@1", "explicit-streams@1"] } },
|
|
39
|
+
});
|
|
40
|
+
export const synchronizedMediaSchema: ValueSchema = object({
|
|
41
|
+
timeline: { schema: object({ frameRate: { schema: rational },
|
|
42
|
+
frameCount: { schema: { kind: "number", integer: true, minimum: 1 } } }) },
|
|
43
|
+
visual: { schema: object({ artifact: { schema: blobArtifactSchema() },
|
|
44
|
+
width: { schema: { kind: "number", integer: true, minimum: 1 } }, height: { schema: { kind: "number", integer: true, minimum: 1 } },
|
|
45
|
+
}), optional: true },
|
|
46
|
+
audio: { schema: object({ artifact: { schema: blobArtifactSchema(["audio/wav"]) } }), optional: true },
|
|
47
|
+
});
|
|
48
|
+
export const renderedVisualSchema: ValueSchema = object({ frameRate: { schema: rational }, frameCount: { schema: { kind: "number", integer: true, minimum: 1 } },
|
|
49
|
+
canvas: { schema: object({ width: { schema: { kind: "number", integer: true, minimum: 1 } }, height: { schema: { kind: "number", integer: true, minimum: 1 } } }) },
|
|
50
|
+
artifact: { schema: blobArtifactSchema() } });
|
|
51
|
+
export const timelineAudioSchema: ValueSchema = object({ artifact: { schema: blobArtifactSchema(["audio/wav"]) },
|
|
52
|
+
sampleFrames: { schema: { kind: "number", integer: true, minimum: 1 } } });
|
|
53
|
+
export const muxedMediaSchema: ValueSchema = object({ frameRate: { schema: rational }, frameCount: { schema: { kind: "number", integer: true, minimum: 1 } },
|
|
54
|
+
canvas: { schema: object({ width: { schema: { kind: "number", integer: true, minimum: 1 } }, height: { schema: { kind: "number", integer: true, minimum: 1 } } }) },
|
|
55
|
+
presentationSampleFrames: { schema: { kind: "number", integer: true, minimum: 1 } }, artifact: { schema: blobArtifactSchema(["video/mp4"]) } });
|
|
56
|
+
const fontSourceSchema: ValueSchema = object({
|
|
57
|
+
artifact: { schema: blobArtifactSchema(["font/otf", "font/ttf", "font/woff", "font/woff2"]) },
|
|
58
|
+
unicodeRange: { schema: { kind: "string", minLength: 3 }, optional: true },
|
|
59
|
+
});
|
|
60
|
+
export const fontArtifactSchema: ValueSchema = object({ sources: { schema: { kind: "array", minItems: 1, items: fontSourceSchema } },
|
|
61
|
+
weight: { schema: { kind: "number", integer: true, minimum: 1, maximum: 1_000 } }, style: { schema: { kind: "string", enum: ["normal", "italic", "oblique"] } } });
|
|
62
|
+
export const fontStackSchema: ValueSchema = object({ faces: { schema: { kind: "array", minItems: 1, items: fontArtifactSchema } } });
|
|
63
|
+
const surfaceTiming: ValueSchema = { kind: "oneOf", variants: [
|
|
64
|
+
object({ kind: { schema: { kind: "literal", value: "still" } } }),
|
|
65
|
+
object({ kind: { schema: { kind: "literal", value: "frames" } }, frameRate: { schema: rational }, frameCount: { schema: { kind: "number", integer: true, minimum: 1 } } }),
|
|
66
|
+
] };
|
|
67
|
+
export const compositableSurfaceSchema: ValueSchema = object({ artifact: { schema: blobArtifactSchema() }, width: { schema: { kind: "number", integer: true, minimum: 1 } },
|
|
68
|
+
height: { schema: { kind: "number", integer: true, minimum: 1 } }, colorSpace: { schema: { kind: "literal", value: "srgb" } },
|
|
69
|
+
alphaMode: { schema: { kind: "string", enum: ["opaque", "straight"] } }, timing: { schema: surfaceTiming } });
|