@hypit/hypit 0.0.1 → 0.1.1
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 +142 -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 +263 -5
- 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,305 @@
|
|
|
1
|
+
import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
|
|
4
|
+
import { compositionDependency, compositionTypes } from "@hypit/composition";
|
|
5
|
+
import { narrativeDependency } from "@hypit/narrative";
|
|
6
|
+
import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
|
|
7
|
+
import type { ModuleManifest, ProducerRef, TypeRef, ValueSchema } from "@hypit/protocol";
|
|
8
|
+
import { semanticTrackDependency } from "@hypit/semantic-track";
|
|
9
|
+
import { spatialDependency, spatialTypes } from "@hypit/spatial";
|
|
10
|
+
import { temporalDependency, temporalTypes } from "@hypit/temporal";
|
|
11
|
+
import { temporalWindowAttributeVocabulary } from "@hypit/temporal-markup";
|
|
12
|
+
|
|
13
|
+
const previewImage = (file: string) => ({
|
|
14
|
+
mediaType: "image/png",
|
|
15
|
+
path: `preview/${file}`,
|
|
16
|
+
open: async () => Uint8Array.from(await readFile(new URL(`../preview/${file}`, import.meta.url))),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const screenOverlayModuleRef = { name: "@hypit/screen-overlay", version: "1" } as const;
|
|
20
|
+
export const screenOverlayTypes = {
|
|
21
|
+
header: { module: screenOverlayModuleRef, name: "ScreenOverlayHeader" },
|
|
22
|
+
itemSpec: { module: screenOverlayModuleRef, name: "ScreenOverlayItemSpec" },
|
|
23
|
+
set: { module: screenOverlayModuleRef, name: "ScreenOverlaySet" },
|
|
24
|
+
program: { module: screenOverlayModuleRef, name: "ScreenOverlayProgram" },
|
|
25
|
+
} satisfies Record<string, TypeRef>;
|
|
26
|
+
export const screenOverlayProducers = {
|
|
27
|
+
createSet: { module: screenOverlayModuleRef, name: "create-screen-overlay-set" },
|
|
28
|
+
appendItem: { module: screenOverlayModuleRef, name: "append-screen-overlay-item" },
|
|
29
|
+
finalize: { module: screenOverlayModuleRef, name: "finalize-screen-overlay" },
|
|
30
|
+
render: { module: screenOverlayModuleRef, name: "render-screen-overlay" },
|
|
31
|
+
} satisfies Record<string, ProducerRef>;
|
|
32
|
+
|
|
33
|
+
const string = { kind: "string", minLength: 1 } as const;
|
|
34
|
+
const number = { kind: "number" } as const;
|
|
35
|
+
const nonNegative = { kind: "number", minimum: 0 } as const;
|
|
36
|
+
const integer = { kind: "number", integer: true } as const;
|
|
37
|
+
const unsignedInteger = { kind: "number", integer: true, minimum: 0 } as const;
|
|
38
|
+
const object = (fields: Readonly<Record<string, { readonly schema: ValueSchema; readonly optional?: boolean }>>): ValueSchema => ({ kind: "object", fields });
|
|
39
|
+
const normalizedPoint = object({ x: { schema: number }, y: { schema: number } });
|
|
40
|
+
const colorArray: ValueSchema = { kind: "array", minItems: 1, items: string };
|
|
41
|
+
const component: ValueSchema = { kind: "oneOf", variants: [
|
|
42
|
+
object({ kind: { schema: { kind: "literal", value: "flash" } }, color: { schema: string }, intensity: { schema: nonNegative }, attackFrames: { schema: unsignedInteger }, holdFrames: { schema: unsignedInteger }, decayFrames: { schema: unsignedInteger } }),
|
|
43
|
+
object({ kind: { schema: { kind: "literal", value: "color-wash" } }, color: { schema: string }, opacity: { schema: nonNegative } }),
|
|
44
|
+
object({ kind: { schema: { kind: "literal", value: "vignette" } }, center: { schema: normalizedPoint }, radius: { schema: normalizedPoint }, softness: { schema: nonNegative }, color: { schema: string }, opacity: { schema: nonNegative } }),
|
|
45
|
+
object({ kind: { schema: { kind: "literal", value: "scan-lines" } }, spacingPx: { schema: nonNegative }, thicknessPx: { schema: nonNegative }, angleDeg: { schema: number }, opacity: { schema: nonNegative }, travelPx: { schema: number } }),
|
|
46
|
+
object({ kind: { schema: { kind: "literal", value: "directional-matte" } }, angleDeg: { schema: number }, coverage: { schema: nonNegative }, feather: { schema: nonNegative }, color: { schema: string }, opacity: { schema: nonNegative }, progress: { schema: object({ from: { schema: number }, to: { schema: number } }) } }),
|
|
47
|
+
object({ kind: { schema: { kind: "literal", value: "whip-veil" } }, direction: { schema: { kind: "string", enum: ["left", "right", "up", "down"] } }, widthPx: { schema: nonNegative }, softnessPx: { schema: nonNegative }, travelPx: { schema: nonNegative }, opacity: { schema: nonNegative } }),
|
|
48
|
+
object({ kind: { schema: { kind: "literal", value: "glitch-veil" } }, bars: { schema: unsignedInteger }, colors: { schema: colorArray }, opacity: { schema: nonNegative }, travelPx: { schema: number }, seed: { schema: unsignedInteger } }),
|
|
49
|
+
object({ kind: { schema: { kind: "literal", value: "grain" } }, amount: { schema: nonNegative }, grainSizePx: { schema: nonNegative }, chroma: { schema: { kind: "string", enum: ["monochrome", "color"] } }, motionRatePxPerFrame: { schema: number }, seed: { schema: unsignedInteger } }),
|
|
50
|
+
object({ kind: { schema: { kind: "literal", value: "light-leak" } }, colors: { schema: colorArray }, angleDeg: { schema: number }, softness: { schema: nonNegative }, travelPx: { schema: number }, intensity: { schema: nonNegative }, seed: { schema: unsignedInteger } }),
|
|
51
|
+
object({ kind: { schema: { kind: "literal", value: "bokeh" } }, amount: { schema: nonNegative }, sizeMinPx: { schema: nonNegative }, sizeMaxPx: { schema: nonNegative }, color: { schema: string }, warmth: { schema: number }, driftPx: { schema: number }, seed: { schema: unsignedInteger } }),
|
|
52
|
+
object({ kind: { schema: { kind: "literal", value: "tv-static" } }, amount: { schema: nonNegative }, noiseSizePx: { schema: nonNegative }, scanLineOpacity: { schema: nonNegative }, motionRatePxPerFrame: { schema: number }, seed: { schema: unsignedInteger } }),
|
|
53
|
+
] };
|
|
54
|
+
const itemSpec = object({
|
|
55
|
+
id: { schema: string },
|
|
56
|
+
content: { schema: component },
|
|
57
|
+
stackingOrder: { schema: integer },
|
|
58
|
+
});
|
|
59
|
+
const frameSpan = object({ startFrame: { schema: unsignedInteger }, endFrameExclusive: { schema: unsignedInteger } });
|
|
60
|
+
const item = object({
|
|
61
|
+
id: { schema: string }, span: { schema: frameSpan }, content: { schema: component },
|
|
62
|
+
stacking: { schema: object({ order: { schema: integer }, tieBreak: { schema: string } }) },
|
|
63
|
+
});
|
|
64
|
+
export const screenOverlayHeaderSchema: ValueSchema = object({ id: { schema: string } });
|
|
65
|
+
export const screenOverlayItemSpecSchema: ValueSchema = itemSpec;
|
|
66
|
+
export const screenOverlaySetSchema: ValueSchema = object({ items: { schema: { kind: "array", items: item } } });
|
|
67
|
+
export const screenOverlayProgramSchema: ValueSchema = object({ id: { schema: string }, items: { schema: { kind: "array", minItems: 1, items: item } } });
|
|
68
|
+
const appendInputs = [{ name: "set", type: screenOverlayTypes.set }, { name: "header", type: screenOverlayTypes.header }, { name: "space", type: programSpaceTypes.programSpace }, { name: "spec", type: screenOverlayTypes.itemSpec }, { name: "window", type: temporalTypes.window }] as const;
|
|
69
|
+
|
|
70
|
+
const itemAttributes = [
|
|
71
|
+
{ name: "id", kind: "identifier", required: false,
|
|
72
|
+
summary: "Names this item; the overlay numbers the item after its kind when it is omitted." },
|
|
73
|
+
{ name: "z", kind: "literal", required: true,
|
|
74
|
+
summary: "Sets the stacking order this item is painted in against its siblings." },
|
|
75
|
+
...temporalWindowAttributeVocabulary,
|
|
76
|
+
] as const;
|
|
77
|
+
|
|
78
|
+
export const screenOverlayMarkupSurfaces = [
|
|
79
|
+
{ name: "track", tag: "Track", mode: "structured", outputs: [screenOverlayTypes.header, screenOverlayTypes.itemSpec, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, screenOverlayTypes.program, compositionTypes.visualTrack],
|
|
80
|
+
vocabulary: {
|
|
81
|
+
summary: "Paints self-contained screen treatments across the whole Canvas and publishes the overlay Program and the VisualTrack it renders to.",
|
|
82
|
+
appearance: "Treatments laid edge to edge over the whole Canvas, never a panel, a card or text, each item covering the frame for its own span only and painted over its siblings in `z` order. Flash pulses one color up to full and back down across the frame, ColorWash holds that same flat color still, and Vignette leaves the middle clear and darkens outwards to one color in an ellipse around a chosen centre. Four items cross the frame as travelling geometry: ScanLines rule it with evenly spaced white stripes at an angle, DirectionalMatte sweeps a feathered wall of color over it, WhipVeil slides a single soft-edged white band left, right, up or down, and LightLeak drags a heavily blurred angled gradient of colors from one side to the other. The remaining four scatter many small shapes from a seed: GlitchVeil throws wide colored horizontal bars that jump sideways, Grain sprinkles fine specks that crawl diagonally, Bokeh floats blurred round discs of one color that drift apart, and TVStatic fills the frame with grey noise cells beneath fine horizontal scan lines.",
|
|
83
|
+
preview: previewImage("Track.png"),
|
|
84
|
+
attributes: [
|
|
85
|
+
{ name: "id", kind: "identifier", required: true,
|
|
86
|
+
summary: "Names this overlay so its Program and Track can be referenced elsewhere in the Source." },
|
|
87
|
+
{ name: "canvas", kind: "reference", required: true, accepts: [spatialTypes.canvas],
|
|
88
|
+
summary: "Chooses the Canvas every item is painted across." },
|
|
89
|
+
...temporalContextAttributeVocabulary,
|
|
90
|
+
],
|
|
91
|
+
children: [
|
|
92
|
+
{ tag: "Flash", cardinality: "many",
|
|
93
|
+
summary: "A full-Canvas flash of one color with its own attack, hold and decay in frames.",
|
|
94
|
+
attributes: [
|
|
95
|
+
...itemAttributes,
|
|
96
|
+
{ name: "color", kind: "literal", required: true,
|
|
97
|
+
summary: "Sets the hexadecimal color the Canvas flashes." },
|
|
98
|
+
{ name: "intensity", kind: "literal", required: true,
|
|
99
|
+
summary: "Sets how strong the flash is, from 0 to 1." },
|
|
100
|
+
{ name: "attack", kind: "literal", required: true,
|
|
101
|
+
summary: "Sets how many frames the flash takes to reach full intensity." },
|
|
102
|
+
{ name: "hold", kind: "literal", required: true,
|
|
103
|
+
summary: "Sets how many frames the flash stays at full intensity." },
|
|
104
|
+
{ name: "decay", kind: "literal", required: true,
|
|
105
|
+
summary: "Sets how many frames the flash takes to fade away." },
|
|
106
|
+
] },
|
|
107
|
+
{ tag: "ColorWash", cardinality: "many",
|
|
108
|
+
summary: "One flat color held over the whole Canvas at a fixed opacity.",
|
|
109
|
+
attributes: [
|
|
110
|
+
...itemAttributes,
|
|
111
|
+
{ name: "color", kind: "literal", required: true,
|
|
112
|
+
summary: "Sets the hexadecimal color held over the Canvas." },
|
|
113
|
+
{ name: "opacity", kind: "literal", required: true,
|
|
114
|
+
summary: "Sets how opaque the wash is, from 0 to 1." },
|
|
115
|
+
] },
|
|
116
|
+
{ tag: "Vignette", cardinality: "many",
|
|
117
|
+
summary: "An elliptical falloff of one color around a normalized centre.",
|
|
118
|
+
attributes: [
|
|
119
|
+
...itemAttributes,
|
|
120
|
+
{ name: "center-x", kind: "literal", required: true,
|
|
121
|
+
summary: "Sets the horizontal centre of the falloff as a fraction of the Canvas width." },
|
|
122
|
+
{ name: "center-y", kind: "literal", required: true,
|
|
123
|
+
summary: "Sets the vertical centre of the falloff as a fraction of the Canvas height." },
|
|
124
|
+
{ name: "radius-x", kind: "literal", required: true,
|
|
125
|
+
summary: "Sets the horizontal radius of the falloff as a fraction of the Canvas width." },
|
|
126
|
+
{ name: "radius-y", kind: "literal", required: true,
|
|
127
|
+
summary: "Sets the vertical radius of the falloff as a fraction of the Canvas height." },
|
|
128
|
+
{ name: "softness", kind: "literal", required: true,
|
|
129
|
+
summary: "Sets how gradually the falloff fades outwards, from 0 to 1." },
|
|
130
|
+
{ name: "color", kind: "literal", required: true,
|
|
131
|
+
summary: "Sets the hexadecimal color the edges are darkened with." },
|
|
132
|
+
{ name: "opacity", kind: "literal", required: true,
|
|
133
|
+
summary: "Sets how opaque the vignette is, from 0 to 1." },
|
|
134
|
+
] },
|
|
135
|
+
{ tag: "ScanLines", cardinality: "many",
|
|
136
|
+
summary: "Repeating lines at a fixed spacing, thickness and angle, travelling across the Canvas.",
|
|
137
|
+
attributes: [
|
|
138
|
+
...itemAttributes,
|
|
139
|
+
{ name: "spacing", kind: "literal", required: true,
|
|
140
|
+
summary: "Sets how many pixels apart the lines are." },
|
|
141
|
+
{ name: "thickness", kind: "literal", required: true,
|
|
142
|
+
summary: "Sets how many pixels thick each line is, at most the spacing." },
|
|
143
|
+
{ name: "angle", kind: "literal", required: true,
|
|
144
|
+
summary: "Sets the angle in degrees the lines run at." },
|
|
145
|
+
{ name: "opacity", kind: "literal", required: true,
|
|
146
|
+
summary: "Sets how opaque the lines are, from 0 to 1." },
|
|
147
|
+
{ name: "travel", kind: "literal", required: true,
|
|
148
|
+
summary: "Sets how many pixels the lines travel across the item's span." },
|
|
149
|
+
] },
|
|
150
|
+
{ tag: "DirectionalMatte", cardinality: "many",
|
|
151
|
+
summary: "A feathered matte of one color crossing the Canvas at an angle over an explicit progress range.",
|
|
152
|
+
attributes: [
|
|
153
|
+
...itemAttributes,
|
|
154
|
+
{ name: "angle", kind: "literal", required: true,
|
|
155
|
+
summary: "Sets the angle in degrees the matte edge crosses the Canvas at." },
|
|
156
|
+
{ name: "coverage", kind: "literal", required: true,
|
|
157
|
+
summary: "Sets how much of the Canvas the matte covers, from 0 to 1." },
|
|
158
|
+
{ name: "feather", kind: "literal", required: true,
|
|
159
|
+
summary: "Sets how soft the matte edge is, from 0 to 1." },
|
|
160
|
+
{ name: "color", kind: "literal", required: true,
|
|
161
|
+
summary: "Sets the hexadecimal color the matte is filled with." },
|
|
162
|
+
{ name: "opacity", kind: "literal", required: true,
|
|
163
|
+
summary: "Sets how opaque the matte is, from 0 to 1." },
|
|
164
|
+
{ name: "from", kind: "literal", required: true,
|
|
165
|
+
summary: "Sets the progress the matte starts its crossing at, from -1 to 2." },
|
|
166
|
+
{ name: "to", kind: "literal", required: true,
|
|
167
|
+
summary: "Sets the progress the matte ends its crossing at, from -1 to 2." },
|
|
168
|
+
] },
|
|
169
|
+
{ tag: "WhipVeil", cardinality: "many",
|
|
170
|
+
summary: "A soft band that travels across the Canvas in one of four directions.",
|
|
171
|
+
attributes: [
|
|
172
|
+
...itemAttributes,
|
|
173
|
+
{ name: "direction", kind: "literal", required: true, values: ["left", "right", "up", "down"],
|
|
174
|
+
summary: "Chooses which way the band travels across the Canvas." },
|
|
175
|
+
{ name: "width", kind: "literal", required: true,
|
|
176
|
+
summary: "Sets how many pixels wide the band is." },
|
|
177
|
+
{ name: "softness", kind: "literal", required: true,
|
|
178
|
+
summary: "Sets how many pixels the band's edges are blurred over." },
|
|
179
|
+
{ name: "travel", kind: "literal", required: true,
|
|
180
|
+
summary: "Sets how many pixels the band travels across the item's span." },
|
|
181
|
+
{ name: "opacity", kind: "literal", required: true,
|
|
182
|
+
summary: "Sets how opaque the band is, from 0 to 1." },
|
|
183
|
+
] },
|
|
184
|
+
{ tag: "GlitchVeil", cardinality: "many",
|
|
185
|
+
summary: "Colored bars laid across the Canvas and displaced from an explicit seed.",
|
|
186
|
+
attributes: [
|
|
187
|
+
...itemAttributes,
|
|
188
|
+
{ name: "bars", kind: "literal", required: true,
|
|
189
|
+
summary: "Sets how many bars are laid across the Canvas, up to 256." },
|
|
190
|
+
{ name: "colors", kind: "literal", required: true,
|
|
191
|
+
summary: "Lists the hexadecimal colors the bars are drawn in, separated by commas." },
|
|
192
|
+
{ name: "opacity", kind: "literal", required: true,
|
|
193
|
+
summary: "Sets how opaque the bars are, from 0 to 1." },
|
|
194
|
+
{ name: "travel", kind: "literal", required: true,
|
|
195
|
+
summary: "Sets how many pixels the bars are displaced across the item's span." },
|
|
196
|
+
{ name: "seed", kind: "literal", required: true,
|
|
197
|
+
summary: "Sets the seed the bar placement and displacement are drawn from." },
|
|
198
|
+
] },
|
|
199
|
+
{ tag: "Grain", cardinality: "many",
|
|
200
|
+
summary: "Grain at a chosen amount, size and chroma, moving from an explicit seed.",
|
|
201
|
+
attributes: [
|
|
202
|
+
...itemAttributes,
|
|
203
|
+
{ name: "amount", kind: "literal", required: true,
|
|
204
|
+
summary: "Sets how much grain is laid over the Canvas, from 0 to 1." },
|
|
205
|
+
{ name: "size", kind: "literal", required: true,
|
|
206
|
+
summary: "Sets how many pixels across one grain particle is." },
|
|
207
|
+
{ name: "chroma", kind: "literal", required: true, values: ["monochrome", "color"],
|
|
208
|
+
summary: "Decides whether the grain is monochrome or colored." },
|
|
209
|
+
{ name: "motion-rate", kind: "literal", required: true,
|
|
210
|
+
summary: "Sets how many pixels the grain moves each frame." },
|
|
211
|
+
{ name: "seed", kind: "literal", required: true,
|
|
212
|
+
summary: "Sets the seed the grain pattern is drawn from." },
|
|
213
|
+
] },
|
|
214
|
+
{ tag: "LightLeak", cardinality: "many",
|
|
215
|
+
summary: "Colored light angled across the Canvas and moving from an explicit seed.",
|
|
216
|
+
attributes: [
|
|
217
|
+
...itemAttributes,
|
|
218
|
+
{ name: "colors", kind: "literal", required: true,
|
|
219
|
+
summary: "Lists the hexadecimal colors the leak is drawn in, separated by commas." },
|
|
220
|
+
{ name: "angle", kind: "literal", required: true,
|
|
221
|
+
summary: "Sets the angle in degrees the light crosses the Canvas at." },
|
|
222
|
+
{ name: "softness", kind: "literal", required: true,
|
|
223
|
+
summary: "Sets how soft the leak's edges are, from 0 to 1." },
|
|
224
|
+
{ name: "travel", kind: "literal", required: true,
|
|
225
|
+
summary: "Sets how many pixels the leak travels across the item's span." },
|
|
226
|
+
{ name: "intensity", kind: "literal", required: true,
|
|
227
|
+
summary: "Sets how strong the leak is, from 0 to 1." },
|
|
228
|
+
{ name: "seed", kind: "literal", required: true,
|
|
229
|
+
summary: "Sets the seed the leak's placement is drawn from." },
|
|
230
|
+
] },
|
|
231
|
+
{ tag: "Bokeh", cardinality: "many",
|
|
232
|
+
summary: "Out-of-focus highlights between a minimum and maximum size, drifting from an explicit seed.",
|
|
233
|
+
attributes: [
|
|
234
|
+
...itemAttributes,
|
|
235
|
+
{ name: "amount", kind: "literal", required: true,
|
|
236
|
+
summary: "Sets how many highlights are scattered over the Canvas, from 0 to 1." },
|
|
237
|
+
{ name: "min-size", kind: "literal", required: true,
|
|
238
|
+
summary: "Sets how many pixels across the smallest highlight is." },
|
|
239
|
+
{ name: "max-size", kind: "literal", required: true,
|
|
240
|
+
summary: "Sets how many pixels across the largest highlight is, never below `min-size`." },
|
|
241
|
+
{ name: "color", kind: "literal", required: true,
|
|
242
|
+
summary: "Sets the hexadecimal color the highlights are drawn in." },
|
|
243
|
+
{ name: "warmth", kind: "literal", required: true,
|
|
244
|
+
summary: "Sets how warm or cool the highlights are, from -1 to 1." },
|
|
245
|
+
{ name: "drift", kind: "literal", required: true,
|
|
246
|
+
summary: "Sets how many pixels the highlights drift across the item's span." },
|
|
247
|
+
{ name: "seed", kind: "literal", required: true,
|
|
248
|
+
summary: "Sets the seed the highlight placement is drawn from." },
|
|
249
|
+
] },
|
|
250
|
+
{ tag: "TVStatic", cardinality: "many",
|
|
251
|
+
summary: "Broadcast noise with its own scan-line opacity, moving from an explicit seed.",
|
|
252
|
+
attributes: [
|
|
253
|
+
...itemAttributes,
|
|
254
|
+
{ name: "amount", kind: "literal", required: true,
|
|
255
|
+
summary: "Sets how much noise covers the Canvas, from 0 to 1." },
|
|
256
|
+
{ name: "size", kind: "literal", required: true,
|
|
257
|
+
summary: "Sets how many pixels across one noise cell is." },
|
|
258
|
+
{ name: "scan-lines", kind: "literal", required: true,
|
|
259
|
+
summary: "Sets how opaque the scan lines over the noise are, from 0 to 1." },
|
|
260
|
+
{ name: "motion-rate", kind: "literal", required: true,
|
|
261
|
+
summary: "Sets how many pixels the noise moves each frame." },
|
|
262
|
+
{ name: "seed", kind: "literal", required: true,
|
|
263
|
+
summary: "Sets the seed the noise is drawn from." },
|
|
264
|
+
] },
|
|
265
|
+
],
|
|
266
|
+
ports: [
|
|
267
|
+
{ name: "program", type: screenOverlayTypes.program,
|
|
268
|
+
summary: "The resolved overlay: every item with its frame span, its content and its stacking." },
|
|
269
|
+
{ name: "track", type: compositionTypes.visualTrack,
|
|
270
|
+
summary: "The rendered overlay, an ordinary peer VisualTrack." },
|
|
271
|
+
],
|
|
272
|
+
example: `<screen:Track id="effects" semantic={speech.semantic} canvas={vertical}>
|
|
273
|
+
<screen:Flash during={story.selection.overlay} z="80"
|
|
274
|
+
color="#ffffff" intensity="0.6" attack="2" hold="2" decay="6"/>
|
|
275
|
+
</screen:Track>`,
|
|
276
|
+
notes: [
|
|
277
|
+
"The overlay requires at least one component child, and a component child is empty.",
|
|
278
|
+
"A component child writes exactly one temporal form, `during`, `at`, or `start` with `end`; none of them or more than one is refused.",
|
|
279
|
+
"`during` takes the literal `program` for the whole programme, or a Selection reference.",
|
|
280
|
+
"`at` requires `for`.",
|
|
281
|
+
"`start` and `end` each take `program.start`, `program.end`, `selection.start`, `selection.end` or `moment.cue` with an optional `+` or `-` offset, or a bare duration read as an absolute point.",
|
|
282
|
+
"Explicit `start` and `end` timing binds a Selection through `selection` or a Moment through `moment`, never both.",
|
|
283
|
+
"A duration is written as an integral `f` or `ms` count, or as an `s` count that may carry a decimal fraction.",
|
|
284
|
+
],
|
|
285
|
+
} },
|
|
286
|
+
] as const;
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
export const screenOverlayManifest: ModuleManifest = {
|
|
290
|
+
format: "hypit.module@1", name: screenOverlayModuleRef.name, version: screenOverlayModuleRef.version,
|
|
291
|
+
dependencies: [narrativeDependency, programSpaceDependency, semanticTrackDependency, spatialDependency, temporalDependency, compositionDependency],
|
|
292
|
+
types: [
|
|
293
|
+
{ name: screenOverlayTypes.header.name },
|
|
294
|
+
{ name: screenOverlayTypes.itemSpec.name },
|
|
295
|
+
{ name: screenOverlayTypes.set.name },
|
|
296
|
+
{ name: screenOverlayTypes.program.name },
|
|
297
|
+
], capabilities: [],
|
|
298
|
+
producers: [
|
|
299
|
+
{ name: screenOverlayProducers.createSet.name, inputs: [], outputs: [{ name: "set", type: screenOverlayTypes.set }], needs: [] },
|
|
300
|
+
{ name: screenOverlayProducers.appendItem.name, inputs: [...appendInputs], outputs: [{ name: "set", type: screenOverlayTypes.set }], needs: [] },
|
|
301
|
+
{ name: screenOverlayProducers.finalize.name, inputs: [{ name: "set", type: screenOverlayTypes.set }, { name: "header", type: screenOverlayTypes.header }], outputs: [{ name: "program", type: screenOverlayTypes.program }], needs: [] },
|
|
302
|
+
{ name: screenOverlayProducers.render.name, inputs: [{ name: "canvas", type: spatialTypes.canvas }, { name: "space", type: programSpaceTypes.programSpace }, { name: "program", type: screenOverlayTypes.program }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
|
|
303
|
+
],
|
|
304
|
+
};
|
|
305
|
+
export const screenOverlayDependency = { module: screenOverlayModuleRef } as const;
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { assertVisualTrackIdentity, sealVisualTrack } from "@hypit/composition";
|
|
2
|
+
import type { VisualAnimation, VisualElement, VisualStyleDeclaration, VisualTrack } from "@hypit/composition";
|
|
3
|
+
import { assertProgramSpaceIdentity } from "@hypit/program-space";
|
|
4
|
+
import type { ProgramSpace } from "@hypit/program-space";
|
|
5
|
+
import { canonicalize } from "@hypit/protocol";
|
|
6
|
+
import { assertCanvasSpace } from "@hypit/spatial";
|
|
7
|
+
import type { CanvasSpace } from "@hypit/spatial";
|
|
8
|
+
import { assertTemporalWindowFor } from "@hypit/temporal";
|
|
9
|
+
import type { ProjectedWindow } from "@hypit/temporal";
|
|
10
|
+
|
|
11
|
+
import type {
|
|
12
|
+
ScreenOverlayComponent,
|
|
13
|
+
ScreenOverlayHeader,
|
|
14
|
+
ScreenOverlayItemProgram,
|
|
15
|
+
ScreenOverlayItemSpec,
|
|
16
|
+
ScreenOverlayProgram,
|
|
17
|
+
ScreenOverlaySet,
|
|
18
|
+
} from "./types.js";
|
|
19
|
+
|
|
20
|
+
function assert(condition: unknown, message: string): asserts condition { if (!condition) throw new Error(message); }
|
|
21
|
+
function identity(value: string, label: string): void {
|
|
22
|
+
assert(/^[A-Za-z][A-Za-z0-9_.:#-]{0,191}$/u.test(value), `${label} is invalid.`);
|
|
23
|
+
}
|
|
24
|
+
function finite(value: number, label: string): void { assert(Number.isFinite(value), `${label} is invalid.`); }
|
|
25
|
+
function range(value: number, minimum: number, maximum: number, label: string): void {
|
|
26
|
+
finite(value, label); assert(value >= minimum && value <= maximum, `${label} is outside ${minimum}..${maximum}.`);
|
|
27
|
+
}
|
|
28
|
+
function positive(value: number, label: string): void { finite(value, label); assert(value > 0, `${label} must be positive.`); }
|
|
29
|
+
function nonNegativeInteger(value: number, label: string): void {
|
|
30
|
+
assert(Number.isSafeInteger(value) && value >= 0, `${label} must be a non-negative integer.`);
|
|
31
|
+
}
|
|
32
|
+
function color(value: string, label: string): void {
|
|
33
|
+
assert(/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/iu.test(value), `${label} must be a hexadecimal color.`);
|
|
34
|
+
}
|
|
35
|
+
function colors(values: readonly string[], label: string): void {
|
|
36
|
+
assert(values.length > 0, `${label} requires at least one color.`);
|
|
37
|
+
values.forEach((value, index) => color(value, `${label}.${index + 1}`));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function assertScreenOverlayComponent(value: ScreenOverlayComponent): void {
|
|
41
|
+
switch (value.kind) {
|
|
42
|
+
case "flash":
|
|
43
|
+
color(value.color, "Flash color"); range(value.intensity, 0, 1, "Flash intensity");
|
|
44
|
+
nonNegativeInteger(value.attackFrames, "Flash attack"); nonNegativeInteger(value.holdFrames, "Flash hold");
|
|
45
|
+
nonNegativeInteger(value.decayFrames, "Flash decay"); return;
|
|
46
|
+
case "color-wash": color(value.color, "ColorWash color"); range(value.opacity, 0, 1, "ColorWash opacity"); return;
|
|
47
|
+
case "vignette":
|
|
48
|
+
range(value.center.x, 0, 1, "Vignette center.x"); range(value.center.y, 0, 1, "Vignette center.y");
|
|
49
|
+
positive(value.radius.x, "Vignette radius.x"); positive(value.radius.y, "Vignette radius.y");
|
|
50
|
+
range(value.softness, 0, 1, "Vignette softness"); color(value.color, "Vignette color");
|
|
51
|
+
range(value.opacity, 0, 1, "Vignette opacity"); return;
|
|
52
|
+
case "scan-lines":
|
|
53
|
+
positive(value.spacingPx, "ScanLines spacing"); positive(value.thicknessPx, "ScanLines thickness");
|
|
54
|
+
assert(value.thicknessPx <= value.spacingPx, "ScanLines thickness exceeds spacing.");
|
|
55
|
+
finite(value.angleDeg, "ScanLines angle"); range(value.opacity, 0, 1, "ScanLines opacity");
|
|
56
|
+
finite(value.travelPx, "ScanLines travel"); return;
|
|
57
|
+
case "directional-matte":
|
|
58
|
+
finite(value.angleDeg, "DirectionalMatte angle"); range(value.coverage, 0, 1, "DirectionalMatte coverage");
|
|
59
|
+
range(value.feather, 0, 1, "DirectionalMatte feather"); color(value.color, "DirectionalMatte color");
|
|
60
|
+
range(value.opacity, 0, 1, "DirectionalMatte opacity"); range(value.progress.from, -1, 2, "DirectionalMatte progress.from");
|
|
61
|
+
range(value.progress.to, -1, 2, "DirectionalMatte progress.to"); return;
|
|
62
|
+
case "whip-veil":
|
|
63
|
+
assert(["left", "right", "up", "down"].includes(value.direction), "WhipVeil direction is invalid.");
|
|
64
|
+
positive(value.widthPx, "WhipVeil width"); assert(Number.isFinite(value.softnessPx) && value.softnessPx >= 0, "WhipVeil softness is invalid.");
|
|
65
|
+
positive(value.travelPx, "WhipVeil travel"); range(value.opacity, 0, 1, "WhipVeil opacity"); return;
|
|
66
|
+
case "glitch-veil":
|
|
67
|
+
assert(Number.isSafeInteger(value.bars) && value.bars > 0 && value.bars <= 256, "GlitchVeil bars are invalid.");
|
|
68
|
+
colors(value.colors, "GlitchVeil colors"); range(value.opacity, 0, 1, "GlitchVeil opacity");
|
|
69
|
+
finite(value.travelPx, "GlitchVeil travel"); nonNegativeInteger(value.seed, "GlitchVeil seed"); return;
|
|
70
|
+
case "grain":
|
|
71
|
+
range(value.amount, 0, 1, "Grain amount"); positive(value.grainSizePx, "Grain size");
|
|
72
|
+
assert(value.chroma === "monochrome" || value.chroma === "color", "Grain chroma is invalid.");
|
|
73
|
+
finite(value.motionRatePxPerFrame, "Grain motion rate"); nonNegativeInteger(value.seed, "Grain seed"); return;
|
|
74
|
+
case "light-leak":
|
|
75
|
+
colors(value.colors, "LightLeak colors"); finite(value.angleDeg, "LightLeak angle");
|
|
76
|
+
range(value.softness, 0, 1, "LightLeak softness"); finite(value.travelPx, "LightLeak travel");
|
|
77
|
+
range(value.intensity, 0, 1, "LightLeak intensity"); nonNegativeInteger(value.seed, "LightLeak seed"); return;
|
|
78
|
+
case "bokeh":
|
|
79
|
+
range(value.amount, 0, 1, "Bokeh amount"); positive(value.sizeMinPx, "Bokeh minimum size");
|
|
80
|
+
assert(Number.isFinite(value.sizeMaxPx) && value.sizeMaxPx >= value.sizeMinPx, "Bokeh size range is invalid.");
|
|
81
|
+
color(value.color, "Bokeh color"); range(value.warmth, -1, 1, "Bokeh warmth"); finite(value.driftPx, "Bokeh drift");
|
|
82
|
+
nonNegativeInteger(value.seed, "Bokeh seed"); return;
|
|
83
|
+
case "tv-static":
|
|
84
|
+
range(value.amount, 0, 1, "TVStatic amount"); positive(value.noiseSizePx, "TVStatic noise size");
|
|
85
|
+
range(value.scanLineOpacity, 0, 1, "TVStatic scan-line opacity");
|
|
86
|
+
finite(value.motionRatePxPerFrame, "TVStatic motion rate"); nonNegativeInteger(value.seed, "TVStatic seed"); return;
|
|
87
|
+
}
|
|
88
|
+
throw new Error("Screen Overlay component kind is unsupported.");
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function sealScreenOverlayHeader(value: ScreenOverlayHeader): ScreenOverlayHeader {
|
|
92
|
+
assertScreenOverlayHeader(value); return canonicalize(value) as unknown as ScreenOverlayHeader;
|
|
93
|
+
}
|
|
94
|
+
export function assertScreenOverlayHeader(value: ScreenOverlayHeader): void {
|
|
95
|
+
identity(value.id, "ScreenOverlayHeader.id");
|
|
96
|
+
}
|
|
97
|
+
export function sealScreenOverlayItemSpec(value: ScreenOverlayItemSpec): ScreenOverlayItemSpec {
|
|
98
|
+
assertScreenOverlayItemSpec(value); return canonicalize(value) as unknown as ScreenOverlayItemSpec;
|
|
99
|
+
}
|
|
100
|
+
export function assertScreenOverlayItemSpec(value: ScreenOverlayItemSpec): void {
|
|
101
|
+
identity(value.id, "ScreenOverlayItemSpec.id"); assertScreenOverlayComponent(value.content);
|
|
102
|
+
assert(Number.isSafeInteger(value.stackingOrder), "ScreenOverlay stacking order must be an integer.");
|
|
103
|
+
}
|
|
104
|
+
export function createScreenOverlaySet(): ScreenOverlaySet { return { items: [] }; }
|
|
105
|
+
export function assertScreenOverlaySet(value: ScreenOverlaySet): void {
|
|
106
|
+
assert(Array.isArray(value.items), "ScreenOverlaySet is invalid.");
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function realized(
|
|
110
|
+
set: ScreenOverlaySet, header: ScreenOverlayHeader, space: ProgramSpace, spec: ScreenOverlayItemSpec,
|
|
111
|
+
window: ProjectedWindow,
|
|
112
|
+
): ScreenOverlaySet {
|
|
113
|
+
assertScreenOverlaySet(set); assertScreenOverlayHeader(header); assertScreenOverlayItemSpec(spec);
|
|
114
|
+
assertTemporalWindowFor(window, { subjectId: spec.id, space });
|
|
115
|
+
const addition = {
|
|
116
|
+
id: window.id,
|
|
117
|
+
subjectId: spec.id,
|
|
118
|
+
span: { ...window.span },
|
|
119
|
+
content: structuredClone(spec.content),
|
|
120
|
+
stacking: { order: spec.stackingOrder, tieBreak: `${header.id}:${spec.id}` },
|
|
121
|
+
} satisfies ScreenOverlayItemProgram;
|
|
122
|
+
const ids = new Set(set.items.map((item) => item.id));
|
|
123
|
+
assert(!ids.has(addition.id), `Screen Overlay already contains Item ${addition.id}.`);
|
|
124
|
+
return { items: [...set.items, addition] };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Component entry point: timing has already been resolved into a TemporalWindow. */
|
|
128
|
+
export function appendProjectedScreenOverlay(
|
|
129
|
+
set: ScreenOverlaySet,
|
|
130
|
+
header: ScreenOverlayHeader,
|
|
131
|
+
space: ProgramSpace,
|
|
132
|
+
spec: ScreenOverlayItemSpec,
|
|
133
|
+
window: ProjectedWindow,
|
|
134
|
+
): ScreenOverlaySet {
|
|
135
|
+
return realized(set, header, space, spec, window);
|
|
136
|
+
}
|
|
137
|
+
export function sealScreenOverlayProgram(value: ScreenOverlayProgram): ScreenOverlayProgram {
|
|
138
|
+
const normalized = { id: value.id,
|
|
139
|
+
items: [...value.items].map((item) => structuredClone(item)).sort((a, b) => a.id.localeCompare(b.id)) };
|
|
140
|
+
assertScreenOverlayProgram(normalized); return canonicalize(normalized) as unknown as ScreenOverlayProgram;
|
|
141
|
+
}
|
|
142
|
+
export function finalizeScreenOverlay(set: ScreenOverlaySet, header: ScreenOverlayHeader): ScreenOverlayProgram {
|
|
143
|
+
assertScreenOverlaySet(set); assertScreenOverlayHeader(header); assert(set.items.length > 0, "Screen Overlay requires at least one Item.");
|
|
144
|
+
return sealScreenOverlayProgram({ id: header.id, items: set.items });
|
|
145
|
+
}
|
|
146
|
+
export function assertScreenOverlayProgram(value: ScreenOverlayProgram): void {
|
|
147
|
+
identity(value.id, "ScreenOverlayProgram.id"); assert(value.items.length > 0, "ScreenOverlayProgram requires Items.");
|
|
148
|
+
const ids = new Set<string>();
|
|
149
|
+
for (const item of value.items) {
|
|
150
|
+
identity(item.id, "ScreenOverlayItemProgram.id"); identity(item.subjectId, "ScreenOverlayItemProgram.subjectId");
|
|
151
|
+
assert(!ids.has(item.id), `Duplicate Screen Overlay Item ${item.id}.`); ids.add(item.id);
|
|
152
|
+
assert(item.span.startFrame >= 0 && item.span.endFrameExclusive > item.span.startFrame,
|
|
153
|
+
`Screen Overlay Item ${item.id} timing is invalid.`);
|
|
154
|
+
assertScreenOverlayComponent(item.content); assert(Number.isSafeInteger(item.stacking.order) && item.stacking.tieBreak.length > 0,
|
|
155
|
+
`Screen Overlay Item ${item.id} stacking is invalid.`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
type Random = () => number;
|
|
160
|
+
function random(seed: number): Random {
|
|
161
|
+
let state = seed >>> 0;
|
|
162
|
+
return () => {
|
|
163
|
+
state += 0x6d2b79f5;
|
|
164
|
+
let value = state;
|
|
165
|
+
value = Math.imul(value ^ value >>> 15, value | 1);
|
|
166
|
+
value ^= value + Math.imul(value ^ value >>> 7, value | 61);
|
|
167
|
+
return ((value ^ value >>> 14) >>> 0) / 4_294_967_296;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function px(value: number): string { return `${Number(value.toFixed(6))}px`; }
|
|
171
|
+
function percent(value: number): string { return `${Number((value * 100).toFixed(6))}%`; }
|
|
172
|
+
function rootStyle(): VisualStyleDeclaration[] { return [
|
|
173
|
+
{ name: "inset", value: "0" }, { name: "overflow", value: "hidden" }, { name: "position", value: "absolute" },
|
|
174
|
+
]; }
|
|
175
|
+
function fullChild(
|
|
176
|
+
id: string,
|
|
177
|
+
style: readonly VisualStyleDeclaration[],
|
|
178
|
+
animation?: VisualAnimation,
|
|
179
|
+
order = 1,
|
|
180
|
+
): VisualElement {
|
|
181
|
+
const names = new Set(style.map((item) => item.name));
|
|
182
|
+
return { id, parent: "root", order, kind: "box", style: [
|
|
183
|
+
...(names.has("inset") ? [] : [{ name: "inset", value: "0" }]),
|
|
184
|
+
...(names.has("position") ? [] : [{ name: "position", value: "absolute" }]),
|
|
185
|
+
...style,
|
|
186
|
+
], ...(animation === undefined ? {} : { animation }) };
|
|
187
|
+
}
|
|
188
|
+
function animation(duration: number, start: readonly VisualStyleDeclaration[], end: readonly VisualStyleDeclaration[]): VisualAnimation {
|
|
189
|
+
return { keyframes: [{ atFrame: 0, style: start }, { atFrame: duration, style: end }] };
|
|
190
|
+
}
|
|
191
|
+
function flashElements(content: Extract<ScreenOverlayComponent, { kind: "flash" }>, duration: number): readonly VisualElement[] {
|
|
192
|
+
const total = content.attackFrames + content.holdFrames + content.decayFrames;
|
|
193
|
+
if (total === 0) return [{ id: "root", order: 0, kind: "box", style: [...rootStyle(), { name: "background-color", value: content.color }, { name: "opacity", value: content.intensity }] }];
|
|
194
|
+
const marks = new Map<number, number>();
|
|
195
|
+
marks.set(0, content.attackFrames === 0 ? content.intensity : 0);
|
|
196
|
+
marks.set(content.attackFrames, content.intensity);
|
|
197
|
+
marks.set(content.attackFrames + content.holdFrames, content.intensity);
|
|
198
|
+
marks.set(total, 0);
|
|
199
|
+
marks.set(duration, 0);
|
|
200
|
+
return [{ id: "root", order: 0, kind: "box", style: [...rootStyle(), { name: "background-color", value: content.color }],
|
|
201
|
+
animation: { keyframes: [...marks].sort(([a], [b]) => a - b).map(([atFrame, opacity]) => ({ atFrame, style: [{ name: "opacity", value: opacity }] })) } }];
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function overlayElements(content: ScreenOverlayComponent, canvas: CanvasSpace, duration: number): readonly VisualElement[] {
|
|
205
|
+
if (content.kind === "flash") return flashElements(content, duration);
|
|
206
|
+
const root: VisualElement = { id: "root", order: 0, kind: "box", style: rootStyle() };
|
|
207
|
+
switch (content.kind) {
|
|
208
|
+
case "color-wash": return [root, fullChild("wash", [{ name: "background-color", value: content.color }, { name: "opacity", value: content.opacity }])];
|
|
209
|
+
case "vignette": {
|
|
210
|
+
const inner = Math.max(0, 1 - content.softness) * 100;
|
|
211
|
+
return [root, fullChild("vignette", [{ name: "background-image", value: `radial-gradient(ellipse ${percent(content.radius.x)} ${percent(content.radius.y)} at ${percent(content.center.x)} ${percent(content.center.y)},transparent ${inner}%,${content.color} 100%)` }, { name: "opacity", value: content.opacity }])];
|
|
212
|
+
}
|
|
213
|
+
case "scan-lines": {
|
|
214
|
+
const travel = `translate3d(${px(content.travelPx * Math.cos(content.angleDeg * Math.PI / 180))},${px(content.travelPx * Math.sin(content.angleDeg * Math.PI / 180))},0)`;
|
|
215
|
+
return [root, fullChild("scan-lines", [
|
|
216
|
+
{ name: "background-image", value: `repeating-linear-gradient(${content.angleDeg}deg,#ffffff 0 ${px(content.thicknessPx)},transparent ${px(content.thicknessPx)} ${px(content.spacingPx)})` },
|
|
217
|
+
{ name: "inset", value: "-20%" }, { name: "opacity", value: content.opacity },
|
|
218
|
+
], animation(duration, [{ name: "transform", value: "translate3d(0px,0px,0)" }], [{ name: "transform", value: travel }]))];
|
|
219
|
+
}
|
|
220
|
+
case "directional-matte": {
|
|
221
|
+
const extent = Math.hypot(canvas.widthPx, canvas.heightPx) * 2;
|
|
222
|
+
const move = (progress: number) => `rotate(${content.angleDeg}deg) translate3d(${px((progress - 0.5) * extent)},0px,0)`;
|
|
223
|
+
const edge = Math.max(0.001, content.feather) * 100;
|
|
224
|
+
return [root, fullChild("matte", [
|
|
225
|
+
{ name: "background-image", value: `linear-gradient(90deg,${content.color} 0 ${100 - edge}%,transparent 100%)` },
|
|
226
|
+
{ name: "height", value: "200%" }, { name: "left", value: "-50%" }, { name: "opacity", value: content.opacity },
|
|
227
|
+
{ name: "top", value: "-50%" }, { name: "width", value: `${200 * content.coverage}%` },
|
|
228
|
+
], animation(duration, [{ name: "transform", value: move(content.progress.from) }], [{ name: "transform", value: move(content.progress.to) }]))];
|
|
229
|
+
}
|
|
230
|
+
case "whip-veil": {
|
|
231
|
+
const horizontal = content.direction === "left" || content.direction === "right";
|
|
232
|
+
const sign = content.direction === "left" || content.direction === "up" ? -1 : 1;
|
|
233
|
+
const gradient = horizontal ? "90deg" : "180deg";
|
|
234
|
+
const transform = (distance: number) => horizontal ? `translate3d(${px(distance)},0px,0)` : `translate3d(0px,${px(distance)},0)`;
|
|
235
|
+
return [root, fullChild("veil", [
|
|
236
|
+
{ name: "background-image", value: `linear-gradient(${gradient},transparent 0,#ffffff ${px(content.softnessPx)},#ffffff calc(100% - ${px(content.softnessPx)}),transparent 100%)` },
|
|
237
|
+
{ name: "height", value: horizontal ? "100%" : px(content.widthPx) }, { name: "opacity", value: content.opacity },
|
|
238
|
+
{ name: "width", value: horizontal ? px(content.widthPx) : "100%" },
|
|
239
|
+
], animation(duration, [{ name: "transform", value: transform(-sign * content.travelPx) }], [{ name: "transform", value: transform(sign * content.travelPx) }]))];
|
|
240
|
+
}
|
|
241
|
+
case "glitch-veil": {
|
|
242
|
+
const rng = random(content.seed);
|
|
243
|
+
return [root, ...Array.from({ length: content.bars }, (_, index): VisualElement => {
|
|
244
|
+
const height = 1 + rng() * 12;
|
|
245
|
+
const y = rng() * 100;
|
|
246
|
+
const x = (rng() - 0.5) * 20;
|
|
247
|
+
const colorValue = content.colors[index % content.colors.length]!;
|
|
248
|
+
return { id: `bar-${index + 1}`, parent: "root", order: index + 1, kind: "box", style: [
|
|
249
|
+
{ name: "background-color", value: colorValue }, { name: "height", value: percent(height / 100) },
|
|
250
|
+
{ name: "left", value: percent(x / 100) }, { name: "opacity", value: content.opacity * (0.35 + rng() * 0.65) },
|
|
251
|
+
{ name: "position", value: "absolute" }, { name: "top", value: percent(y / 100) }, { name: "width", value: "120%" },
|
|
252
|
+
], animation: animation(duration, [{ name: "transform", value: "translate3d(0px,0px,0)" }], [{ name: "transform", value: `translate3d(${px(content.travelPx * (rng() < 0.5 ? -1 : 1))},0px,0)` }]) };
|
|
253
|
+
})];
|
|
254
|
+
}
|
|
255
|
+
case "grain": {
|
|
256
|
+
const rng = random(content.seed); const count = Math.max(1, Math.round(content.amount * 160));
|
|
257
|
+
return [root, ...Array.from({ length: count }, (_, index): VisualElement => {
|
|
258
|
+
const hue = content.chroma === "color" ? Math.round(rng() * 360) : 0;
|
|
259
|
+
const shade = Math.round(rng() * 255);
|
|
260
|
+
const background = content.chroma === "color" ? `hsl(${hue} 85% 60%)` : `rgb(${shade} ${shade} ${shade})`;
|
|
261
|
+
const drift = content.motionRatePxPerFrame * duration * (rng() < 0.5 ? -1 : 1);
|
|
262
|
+
return { id: `grain-${index + 1}`, parent: "root", order: index + 1, kind: "box", style: [
|
|
263
|
+
{ name: "background-color", value: background }, { name: "height", value: px(content.grainSizePx) },
|
|
264
|
+
{ name: "left", value: percent(rng()) }, { name: "opacity", value: 0.08 + content.amount * 0.42 },
|
|
265
|
+
{ name: "position", value: "absolute" }, { name: "top", value: percent(rng()) }, { name: "width", value: px(content.grainSizePx) },
|
|
266
|
+
], animation: animation(duration, [{ name: "transform", value: "translate3d(0px,0px,0)" }], [{ name: "transform", value: `translate3d(${px(drift)},${px(-drift)},0)` }]) };
|
|
267
|
+
})];
|
|
268
|
+
}
|
|
269
|
+
case "light-leak": {
|
|
270
|
+
const rng = random(content.seed); const offset = (rng() - 0.5) * 30;
|
|
271
|
+
const stops = content.colors.map((entry, index) => `${entry} ${Number(index * 100 / Math.max(1, content.colors.length - 1)).toFixed(3)}%`).join(",");
|
|
272
|
+
return [root, fullChild("light-leak", [
|
|
273
|
+
{ name: "background-image", value: `linear-gradient(${content.angleDeg + offset}deg,transparent 0,${stops},transparent 100%)` },
|
|
274
|
+
{ name: "filter", value: `blur(${px(content.softness * 80)})` }, { name: "inset", value: "-20%" },
|
|
275
|
+
{ name: "opacity", value: content.intensity },
|
|
276
|
+
], animation(duration, [{ name: "transform", value: `translate3d(${px(-content.travelPx)},0px,0)` }], [{ name: "transform", value: `translate3d(${px(content.travelPx)},0px,0)` }]))];
|
|
277
|
+
}
|
|
278
|
+
case "bokeh": {
|
|
279
|
+
const rng = random(content.seed); const count = Math.max(1, Math.round(content.amount * 48));
|
|
280
|
+
return [root, ...Array.from({ length: count }, (_, index): VisualElement => {
|
|
281
|
+
const size = content.sizeMinPx + rng() * (content.sizeMaxPx - content.sizeMinPx);
|
|
282
|
+
const warmthFilter = content.warmth === 0 ? "" : `sepia(${Math.abs(content.warmth)}) hue-rotate(${content.warmth < 0 ? 180 : 0}deg) `;
|
|
283
|
+
return { id: `bokeh-${index + 1}`, parent: "root", order: index + 1, kind: "box", style: [
|
|
284
|
+
{ name: "background-color", value: content.color }, { name: "border-radius", value: "50%" },
|
|
285
|
+
{ name: "filter", value: `${warmthFilter}blur(${px(size * 0.08)})` }, { name: "height", value: px(size) },
|
|
286
|
+
{ name: "left", value: percent(rng()) }, { name: "opacity", value: 0.08 + rng() * 0.32 },
|
|
287
|
+
{ name: "position", value: "absolute" }, { name: "top", value: percent(rng()) }, { name: "width", value: px(size) },
|
|
288
|
+
], animation: animation(duration, [{ name: "transform", value: "translate3d(0px,0px,0)" }], [{ name: "transform", value: `translate3d(${px((rng() - 0.5) * content.driftPx)},${px((rng() - 0.5) * content.driftPx)},0)` }]) };
|
|
289
|
+
})];
|
|
290
|
+
}
|
|
291
|
+
case "tv-static": {
|
|
292
|
+
const rng = random(content.seed); const columns = Math.ceil(canvas.widthPx / content.noiseSizePx);
|
|
293
|
+
const rows = Math.ceil(canvas.heightPx / content.noiseSizePx); const count = Math.min(512, Math.max(1, Math.round(columns * rows * content.amount)));
|
|
294
|
+
const cells = Array.from({ length: count }, (_, index): VisualElement => {
|
|
295
|
+
const shade = Math.round(rng() * 255); const drift = content.motionRatePxPerFrame * duration;
|
|
296
|
+
return { id: `static-${index + 1}`, parent: "root", order: index + 1, kind: "box", style: [
|
|
297
|
+
{ name: "background-color", value: `rgb(${shade} ${shade} ${shade})` }, { name: "height", value: px(content.noiseSizePx) },
|
|
298
|
+
{ name: "left", value: percent(rng()) }, { name: "opacity", value: 0.2 + content.amount * 0.6 },
|
|
299
|
+
{ name: "position", value: "absolute" }, { name: "top", value: percent(rng()) }, { name: "width", value: px(content.noiseSizePx) },
|
|
300
|
+
], animation: animation(duration, [{ name: "transform", value: "translate3d(0px,0px,0)" }], [{ name: "transform", value: `translate3d(0px,${px(drift * (rng() < 0.5 ? -1 : 1))},0)` }]) };
|
|
301
|
+
});
|
|
302
|
+
return [root, ...cells, fullChild("static-scan-lines", [
|
|
303
|
+
{ name: "background-image", value: "repeating-linear-gradient(180deg,transparent 0 3px,#000000 3px 4px)" },
|
|
304
|
+
{ name: "opacity", value: content.scanLineOpacity },
|
|
305
|
+
], undefined, cells.length + 1)];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export function renderScreenOverlay(canvas: CanvasSpace, space: ProgramSpace, program: ScreenOverlayProgram): VisualTrack {
|
|
311
|
+
assertCanvasSpace(canvas); assertProgramSpaceIdentity(space); assertScreenOverlayProgram(program);
|
|
312
|
+
const track = sealVisualTrack({
|
|
313
|
+
programSpaceId: space.id, visualIr: "hypit.visual-ir@1", id: program.id,
|
|
314
|
+
presents: program.items.map((item) => ({
|
|
315
|
+
id: item.id, subjectId: item.subjectId, span: { ...item.span }, stacking: { ...item.stacking },
|
|
316
|
+
elements: overlayElements(item.content, canvas, item.span.endFrameExclusive - item.span.startFrame),
|
|
317
|
+
})),
|
|
318
|
+
});
|
|
319
|
+
assertVisualTrackIdentity(track, space);
|
|
320
|
+
return track;
|
|
321
|
+
}
|